> ## 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.

# Generate Wallet Address

> Generates a permanent deposit wallet address for a specified asset. Each address is unique and reusable, so you only need to call this once per user per asset. Store the returned address and display it for future deposits. Optionally pass bank details and `autoSettlement` so incoming crypto can be paid out to that bank.

A `trade.address.created` webhook is sent as a fallback once the address is live, containing the address, asset, and label.



## OpenAPI

````yaml /api-reference/openapi.json post /trades/sell/assets/{id}/generate-address
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:
  /trades/sell/assets/{id}/generate-address:
    post:
      tags:
        - Crypto Wallet
      summary: Generate Wallet Address
      description: >-
        Generates a permanent deposit wallet address for a specified asset. Each
        address is unique and reusable, so you only need to call this once per
        user per asset. Store the returned address and display it for future
        deposits. Optionally pass bank details and `autoSettlement` so incoming
        crypto can be paid out to that bank.


        A `trade.address.created` webhook is sent as a fallback once the address
        is live, containing the address, asset, and label.
      operationId: generateWalletAddress
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: ID of the crypto asset. Returned by the list sell assets endpoint.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - label
              example:
                label: unique-identifier
                bankId: '39'
                narration: Breet payout
                accountNumber: 215842XXXX
                autoSettlement: true
              properties:
                label:
                  type: string
                  description: A unique name for the wallet address.
                bankId:
                  type: string
                  description: >-
                    Optional. Bank identifier from the GET /payments/banks
                    endpoint. Only required if you want to automatically offramp
                    deposits to a bank account. Must be provided together with
                    accountNumber.
                narration:
                  type: string
                  description: >-
                    Optional. A short note included with bank settlement
                    payouts. Maximum 32 characters. Only applies when bankId and
                    accountNumber are provided.
                accountNumber:
                  type: string
                  description: >-
                    Optional. Bank account number for automatic offramp. Only
                    required if you want deposits to this address to be
                    automatically settled to a bank account. Must be provided
                    together with bankId.
                autoSettlement:
                  type: boolean
                  description: >-
                    Optional. When `true`, incoming crypto to this address is
                    auto-settled to the linked bank. Omit or use `false` to keep
                    funds in the wallet.
            example:
              label: unique-identifier
              bankId: '39'
              narration: Breet payout
              accountNumber: 215842XXXX
              autoSettlement: true
      responses:
        '201':
          description: Wallet address generated successfully
          content:
            application/json:
              example:
                message: wallet address generated successfully
                success: true
                data:
                  id: 6932dc98c2ceccdea367388a
                  address: TV8dNYYBgL3xLbQcJLMBNavY4gYNqPF8Jv
                meta: {}
                summary: {}
                stats: {}
        '400':
          description: Bad request — wallet with this label may already exist
          content:
            application/json:
              example:
                success: false
                message: TRX_TEST for your-wallet-label already exists in your wallets
                meta: {}
                errors: []
                data: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: Integration is inactive or action not permitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                noApiAccess:
                  summary: Integration is inactive
                  value:
                    success: false
                    message: you do not have api access
                    meta: {}
                    errors: []
                    data: {}
                vipOnly:
                  summary: VIP wallets require VIP status
                  value:
                    success: false
                    message: only VIP users can create VIP wallets
                    meta: {}
                    errors: []
                    data: {}
        '422':
          $ref: '#/components/responses/ValidationError'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  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: {}
  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
  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'

````