openapi: 3.0.1 info: title: Bamboo Account Management Withdrawals API version: '' description: "Account creation enables users to invest on Bamboo. Ensure KYC has been completed and each user’s identity verified before creating a brokerage account.\n\n**Best Practice:** To avoid maintenance fees on inactive accounts, create and fund brokerage accounts **only when users initiate their first trade**. You may collect account details in advance but delay sending the request until they’re ready to buy.\n\n##### Prerequisites\n- **Minimum Age:** 18 years (verified via government-issued ID)\n- **Compliance:** Must meet local investment regulations\n\n##### Document Requirements\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
CountryPrimary IDImage Requirements
NigeriaBVNPassport photo
GhanaNational IDFront & back ID images
South AfricaNational IDFront & back ID images
\n\n**Note:** Images must be in Base64 format. The `front_id_image` and `back_id_image` fields apply only to Ghana and South Africa.\n\n##### Phone Number Format\n- Must be in international format (e.g., +2347083864023)\n- Country code must match user’s residence\n- Used for notifications and account security\n" servers: - url: https://powered-by-bamboo-sandbox.investbamboo.com tags: - name: Withdrawals description: 'Withdrawals allow users to extract funds from their brokerage accounts after successful trades. Understanding the settlement timeline is essential. #### Settlement Timeline - Stock sale proceeds settle at T+1 business day. - `unsettled_cash` indicates funds that are pending settlement. - Once settled, funds move to `withdrawal_cash` and become available for withdrawal. Remember that cash represents total funds in the user''s brokerage account from all sources—deposits, stock sales, cancelled and rejected trades. All cash components (`cash`, `unsettled_cash`, `withdrawal_cash`) are available under the Portfolio endpoint. ' paths: /api/tenant_brokerage_withdraw: post: tags: - Withdrawals summary: Create Withdrawal description: "Withdrawal requests follow a similar verification flow as deposits. You send a notification request with the necessary details to debit the user's brokerage account, we verify that the user has the amount requested. \nOnce verified, the specified amount is deducted from the user's brokerage account, and withdrawal status events are sent via Google Pub/Sub. \n\nOffline settlement happens between our teams using established procedures. (see event details under [withdrawal status events](#section/Withdrawal-Event))\n" operationId: Web.Api.WithdrawController.tenant_brokerage_withdraw_ngn parameters: - name: content-type in: header description: Acceptable content type example: application/json required: true schema: type: string - name: accept-language in: header description: Acceptable language; 'en' for English example: en required: true schema: type: string - name: x-user-id in: header description: Required for user authentication required: true schema: type: string - name: x-subject-type in: header description: For user request -> 'tenant'. required: true schema: type: string - name: x-client-token in: header description: API Consumer Authorisation Token required: true schema: type: string requestBody: description: tenant withdraw body parameter for NGN content: application/json: schema: $ref: '#/components/schemas/TenantBrokerageWithdrawBody' responses: '200': description: Withdrawal requested content: application/json: schema: type: string description: No response body for this endpoint example: '' '401': description: Token has expired or invalid token content: application/json: schema: $ref: '#/components/schemas/Unauthorized' '422': description: Incomplete Parameters content: application/json: example: message: Error Message schema: $ref: '#/components/schemas/ErrorChangesetResponse' x-codegen-request-body-name: body /api/tenant/withdraws: get: tags: - Withdrawals summary: Fetch All Withdrawals description: 'Complete withdrawal history with date filtering ' parameters: - name: accept-language in: header description: Acceptable language; 'en' for English example: en required: true schema: type: string - name: x-user-id in: header description: Required for user authentication required: true schema: type: string - name: x-subject-type in: header description: For user request -> 'tenant'. required: true schema: type: string - name: x-client-token in: header description: API Consumer Authorisation Token required: true schema: type: string - name: x-request-source in: header description: The tenant's username required: true schema: type: string - name: limit in: query description: Number of requested results default=20 schema: type: string - name: next_token in: query description: Next token for pagination schema: type: integer - name: start_date in: query description: Unix datetime stamp schema: type: string - name: end_date in: query description: Unix datetime stamp schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/TenantWithdrawsPaginationResponse' '401': description: Token have expired or invalid token content: application/json: schema: $ref: '#/components/schemas/Unauthorized' /api/tenant/withdraw/{id}: get: tags: - Withdrawals summary: Fetch User Withdrawals description: 'Individual user withdrawal history for performance tracking ' parameters: - name: accept-language in: header description: Acceptable language; 'en' for English example: en required: true schema: type: string - name: x-user-id in: header description: Required for user authentication required: true schema: type: string - name: x-subject-type in: header description: For user request -> 'tenant'. required: true schema: type: string - name: x-client-token in: header description: API Consumer Authorisation Token required: true schema: type: string - name: x-request-source in: header description: The tenant's username required: true schema: type: string - name: limit in: query description: Number of requested results default=20 schema: type: string - name: next_token in: query description: Next token for pagination schema: type: integer - name: start_date in: query description: Unix datetime stamp schema: type: string - name: end_date in: query description: Unix datetime stamp schema: type: string - name: id in: path description: User ID required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/TenantWithdrawsPaginationResponse' '401': description: Token have expired or invalid token content: application/json: schema: $ref: '#/components/schemas/Unauthorized' /api/tenant/withdraw/status/{reference}: get: tags: - Withdrawals summary: Withdrawal Status Check description: 'Real-time status checking for specific withdrawal transactions ' operationId: Web.Api.Tenant.WithdrawController.withdraw_status parameters: - name: content-type in: header description: Acceptable content type example: application/json required: true schema: type: string - name: accept-language in: header description: Acceptable language; 'en' for English example: en required: true schema: type: string - name: x-user-id in: header description: Required for user authentication required: true schema: type: string - name: x-subject-type in: header description: For user request -> 'tenant'. required: true schema: type: string - name: x-client-token in: header description: API Consumer Authorisation Token required: true schema: type: string - name: x-request-source in: header description: The tenant's username required: true schema: type: string - name: reference in: path description: withdrawal reference required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/WithdrawStatusResponse' '401': description: Token have expired or invalid token content: application/json: schema: $ref: '#/components/schemas/Unauthorized' components: schemas: WithdrawStatusResponse: title: Withdraw status type: object properties: status: type: string description: Withdraw status example: pending reference: type: string description: Withdraw reference example: INVKPxiJVc40BNaQBH currency: type: string description: Withdraw currency example: NGN amount: type: number description: Withdraw amount example: 13400 description: Withdraw status Unauthorized: title: Unauthorized response required: - message type: object properties: message: type: string description: Unauthorized/Invalid Token/Token has expired example: Invalid client token supplied. description: Token is invalid or have expired TenantBrokerageWithdrawBody: title: Tenant Brokerage Request body for NGN required: - reference - amount - currency type: object properties: currency: type: string description: currency example: NGN amount: type: integer description: amount example: 13400 reference: type: string description: reference example: INVKPxiJVc40BNaQBH market: type: string description: Either "US" or "NGX". It is used to specify desired stock market. If no market is specified, it defaults to US. example: US TenantWithdrawsPaginationResponse: title: List of all withdrawals with pagination type: object properties: next_token: type: integer description: Next token for pagination example: 10 withdrawals: type: array description: Withdrawal response items: title: Deposit response type: object properties: user_surname: type: string description: User surname example: Doe user_phone: type: string description: User's phone number example: '+2348033741268' user_name: type: string description: User name example: John user_indentifier: type: string description: User indentifier (BVN or NIN) example: 22388291636 user_email: type: string description: User email example: johndoe@gmail.com swift_aba_code: type: string description: Swift or aba code - only if currency is USD status: type: string description: Deposit status example: pending reference: type: string description: reference example: INVKPxiJVc40BNaQBH intermediary_bank_swift_code: type: string description: bank code intermediary_bank: type: string description: Intermediary bank - only if currency is USD id: type: integer description: Deposit id example: 5804 fees: type: string description: Fees information exchange_rate: type: string description: Exchange rate dollar_fees: type: string description: Fees information in dollar dollar_amount: type: integer description: amount example: 130 currency: type: string description: currency created_at: type: integer description: Creation date in unix timestamp UTC example: 2022-02-02 01:10:20 UTC beneficiary_name: type: string description: Beneficiary name - only if currency is USD bank_zip_code: type: string description: Bank zip code - only if currency is USD bank_state: type: string description: Bank state - only if currency is USD bank_name: type: string description: Bank name - only if currency is USD bank_country: type: string description: Bank country - only if currency is USD bank_address: type: string description: Bank address - only if currency is USD amount: type: integer description: amount example: 13400 additional_instructions: type: string description: Additional instructuons - only if currency is USD account_number: type: string description: account number example: 23768954 description: Deposit parameters description: List of deposits and next_token ErrorChangesetResponse: title: Error changeset response required: - errors - message type: object properties: message: type: string description: Message why request didn't succeed example: Invalid credentials errors: type: object properties: {} description: Map of errors description: Error response for request which manipulates data x-logo: url: bamboo-logo.png altText: bamboo logo x-tagGroups: - name: Authentication tags: - Authentication - Account Management - name: Money Movement tags: - Overview - Deposits - Withdrawals - name: US Brokerage Services tags: - Portfolio Reporting - US Securities - US Stock Trading - US Stock Events - name: Utilities tags: - Dictionaries - Market Activity - Exchange Rate - Featured Themes - Financial Documents