> ## Documentation Index
> Fetch the complete documentation index at: https://docs.breet.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Withdrawal (NGN | GHS)

> Initiate fiat (NGN | GHS) payout to bank



## OpenAPI

````yaml /api-reference/openapi.json post /payments/withdraw/bank/{id}
openapi: 3.0.0
info:
  title: BREET PUBLIC API
  version: 1.0.0
  license:
    name: Proprietary
    url: https://breet.io/terms
servers:
  - url: https://api.breet.io/v1
security:
  - appId: []
    appSecret: []
    breetEnv: []
tags:
  - name: Crypto Wallet
    description: Generate and manage crypto wallet addresses for receiving deposits.
    x-group: Wallets and Deposits
  - name: Withdrawals
    description: >-
      ## Withdrawals


      To help protect your funds, withdrawals support an additional security
      layer through **IP whitelisting**.


      ### IP Whitelisting


      When IP whitelisting is enabled, all withdrawal requests must originate
      from an approved IP address. Any withdrawal request coming from an IP not
      on the whitelist will be automatically blocked.


      You can add up to **7 IP addresses** from your dashboard.


      This feature is recommended for:


      - Production servers
          
      - Preventing unauthorized withdrawal attempts
          

      ### How it works


      - Enable IP whitelisting from your dashboard
          
      - Add up to 7 trusted IP addresses
          
      - Only requests from those IPs will be allowed to initiate withdrawals
          

      If IP whitelisting is disabled, withdrawals can be initiated from any IP
      address.
  - name: Banks
    description: List, validate, add, and remove bank accounts for fiat withdrawals.
  - name: Transactions
    description: Retrieve deposit and trade transaction history.
  - name: Webhooks
    description: >-
      Inspect and retry **outgoing** webhooks we send to your server (trade and
      withdrawal events). Requires an active integration with API access (VIP
      partners). For **incoming** payload shapes and verification, see the
      Webhooks guide in the Guides tab.
  - name: Assets
    description: >-
      Retrieve the list of supported deposit/sell assets and their
      configuration.
  - name: Rates and Prices
    description: >-
      Get live market prices and calculate conversion rates. These endpoints are
      public and do not require authentication.
  - name: Account
    description: Retrieve and update integration account details and preferences.
  - name: Testing
    description: Endpoints for testing your integration in development.
  - name: Conversion
    description: >-
      Convert between USD and local fiat (NGN | GHS). Available for both user
      and integration (business) flows.
  - name: Wallet addresses
    description: >-
      Add and remove withdrawal (payout) wallet addresses. If the same address,
      network, and token are sent with a different label, the existing address
      is updated.
paths:
  /payments/withdraw/bank/{id}:
    post:
      tags:
        - Withdrawals
      summary: Withdrawal (NGN | GHS)
      description: Initiate fiat (NGN | GHS) payout to bank
      operationId: withdrawToBank
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: ID of the saved bank account to withdraw to.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - amount
              properties:
                amount:
                  type: number
                  description: >-
                    Withdrawal amount in NGN or GHS, depending on the
                    recipient's bank account currency.
                pin:
                  type: string
                  description: PIN set on your dashboard.
                narration:
                  type: string
                  description: >-
                    Optional note that appears on the bank statement. Maximum 32
                    characters.
                externalId:
                  type: string
                  description: >-
                    Your unique reference for this withdrawal. Can be used to
                    retrieve the withdrawal later.
            example:
              amount: 500
              pin: '1234'
              narration: Breet payout
              externalId: your-unique-reference
      responses:
        '200':
          description: Bank withdrawal initiated successfully
          content:
            application/json:
              example:
                message: withdrawal request received
                success: true
                data:
                  id: 69737a8036d3c2b38fbaf3d9
                meta: {}
                summary: {}
                stats: {}
        '400':
          description: Withdrawal cannot be processed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalidId:
                  summary: Invalid bank ID format
                  value:
                    success: false
                    message: you have entered an invalid _id
                    meta: {}
                    errors: []
                    data: {}
                minimumAmount:
                  summary: Below minimum withdrawal amount
                  value:
                    success: false
                    message: the minimum withdrawal amount is $10
                    meta: {}
                    errors: []
                    data: {}
                maximumAmount:
                  summary: Exceeds maximum withdrawal amount
                  value:
                    success: false
                    message: the maximum withdrawal amount is $10000
                    meta: {}
                    errors: []
                    data: {}
                dailyLimit:
                  summary: Daily withdrawal limit exceeded
                  value:
                    success: false
                    message: daily withdrawal limit of 50000 exceeded
                    meta: {}
                    errors: []
                    data: {}
                insufficientBalance:
                  summary: Insufficient balance
                  value:
                    success: false
                    message: insufficient balance
                    meta: {}
                    errors: []
                    data: {}
                withdrawalDisabled:
                  summary: Withdrawals are currently disabled
                  value:
                    success: false
                    message: withdrawal is currently disabled
                    meta: {}
                    errors: []
                    data: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: Withdrawal blocked by policy or restriction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ipBlocked:
                  summary: Request IP not on allowlist
                  value:
                    success: false
                    message: access denied
                    meta: {}
                    errors: []
                    data: {}
                insufficientWalletBalance:
                  summary: Wallet balance too low
                  value:
                    success: false
                    message: insufficient wallet balance
                    meta: {}
                    errors: []
                    data: {}
                amountOutOfRange:
                  summary: Amount not within allowed range
                  value:
                    success: false
                    message: >-
                      withdrawal amount 500 does not fall within allowed range:
                      100 - 10000
                    meta: {}
                    errors: []
                    data: {}
        '404':
          description: Bank account not found or unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalidBankId:
                  summary: No bank found with the given ID
                  value:
                    success: false
                    message: invalid bank id
                    meta: {}
                    errors: []
                    data: {}
                bankUnavailable:
                  summary: Bank is not currently available for withdrawals
                  value:
                    success: false
                    message: >-
                      you currently cannot withdraw to this bank, please select
                      a different bank
                    meta: {}
                    errors: []
                    data: {}
        '422':
          $ref: '#/components/responses/ValidationError'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    ErrorResponse:
      type: object
      required:
        - success
        - message
      properties:
        success:
          type: boolean
          enum:
            - false
        message:
          type: string
        meta:
          type: object
        errors:
          type: array
          items:
            type: object
        data:
          type: object
  responses:
    Unauthorized:
      description: Invalid or missing API credentials
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            notAuthenticated:
              summary: Missing credentials
              value:
                success: false
                message: you're not authenticated
                meta: {}
                errors: []
                data: {}
            wrongCredentials:
              summary: Invalid app ID or secret
              value:
                success: false
                message: wrong app id and secret combination
                meta: {}
                errors: []
                data: {}
    ValidationError:
      description: >-
        Request validation failed — check the errors array for field-level
        details
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            message: validation errors
            meta: {}
            errors:
              - message: Invalid value
                field: amount
                location: body
            data: {}
    InternalServerError:
      description: An unexpected server error occurred
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            message: something went wrong!
            meta: {}
            errors: []
            data: {}
  securitySchemes:
    appId:
      type: apiKey
      in: header
      name: x-app-id
      description: Your application ID from the Breet dashboard
    appSecret:
      type: apiKey
      in: header
      name: x-app-secret
      description: Your application secret from the Breet dashboard
    breetEnv:
      type: apiKey
      in: header
      name: X-Breet-Env
      description: 'Environment selector: development or production'

````