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

# Get or Create Crypto Wallet

> Retrieves an existing crypto wallet or creates a new one for the specified crypto asset. **Important:** This endpoint is **only active in production** and does **not work on staging/dev**. Supports idempotency to prevent duplicate wallet creation. Currently supports USDT and USDC assets. Send a GET request with the required `asset` parameter (and optional `customerId`). The system will either return existing wallet addresses or automatically create and return new ones if none exist for that asset/customer (or business if no customerId is provided).

Retrieve an existing crypto wallet or create a new one for the specified crypto asset. Supports USDT and USDC assets.

**Important:** This endpoint is **only active in production** and does **not work on staging/dev**.

<Note>
  Want to see this in action? Learn how to build payment links using this endpoint:\
  [https://dev.to/afriex/send-a-link-get-paid-building-payment-links-with-afriex-13ak](https://dev.to/afriex/send-a-link-get-paid-building-payment-links-with-afriex-13ak)
</Note>


## OpenAPI

````yaml GET /api/v1/payment-method/crypto-wallet
openapi: 3.1.0
info:
  title: Afriex Business API
  version: 1.0.8
  description: >-
    Welcome to the Afriex Business API. This API allows you to manage customers,
    process payments, handle payouts, and receive real-time notifications via
    webhooks.


    For detailed guidance on authentication, pagination, error handling, and
    webhooks, please refer to the [dedicated guides](https://docs.afriex.com) in
    the top bar. The guide provides a step-by-step instructions to help you
    integrate seamlessly.
  termsOfService: https://www.afriex.com/terms-and-condition
  contact:
    name: Afriex API Support
    email: eng@afriex.co
    url: https://docs.afriex.com
  license:
    name: Proprietary
    url: https://www.afriex.com/terms-and-condition
servers:
  - url: https://sandbox.api.afriex.com
    description: Staging Base URL
  - url: https://api.afriex.com
    description: Production Base URL
security:
  - ApiKey: []
tags:
  - name: Customers
    description: Create and manage your customers.
  - name: Payment Methods
    description: Register and resolve customer payout and collection methods.
  - name: Transactions
    description: Create and track deposits, withdrawals, and swaps.
  - name: Balance
    description: View and top up your business wallet balances.
  - name: Rates
    description: Fetch real-time exchange rates.
  - name: Checkout Sessions
    description: Create hosted checkout sessions.
  - name: Webhooks
    description: Webhook event payloads and sandbox webhook testing.
  - name: Media
    description: Generate presigned URLs for secure file uploads.
paths:
  /api/v1/payment-method/crypto-wallet:
    parameters:
      - $ref: '#/components/parameters/x-api-version'
    get:
      tags:
        - Payment Methods
      summary: Get or create crypto wallet payment method
      description: >-
        Retrieves an existing crypto wallet or creates a new one for the
        specified crypto asset. **Important:** This endpoint is **only active in
        production** and does **not work on staging/dev**. Supports idempotency
        to prevent duplicate wallet creation. Currently supports USDT and USDC
        assets. Send a GET request with the required `asset` parameter (and
        optional `customerId`). The system will either return existing wallet
        addresses or automatically create and return new ones if none exist for
        that asset/customer (or business if no customerId is provided).
      operationId: getCryptoWallet
      parameters:
        - name: asset
          in: query
          description: The crypto asset symbol for the wallet
          required: true
          schema:
            type: string
            enum:
              - USDT
              - USDC
        - name: customerId
          in: query
          description: >-
            Optional customer ID. If not provided, the wallet will be created
            for the business.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Crypto wallet addresses retrieved or created successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        description: >-
                          The identifier of the payment method backing this
                          crypto wallet.
                        examples:
                          - 695271a3ba52c13b669fad2b
                      addresses:
                        type: array
                        items:
                          type: object
                          properties:
                            address:
                              type: string
                              examples:
                                - '0x1234567890abcdef1234567890abcdef12345678'
                            network:
                              type: string
                              examples:
                                - ETHEREUM_MAINNET
              examples:
                usdtWallet:
                  summary: USDT wallet addresses
                  value:
                    data:
                      id: 695271a3ba52c13b669fad2b
                      addresses:
                        - address: '0x1234567890123456789012345678901234567890'
                          network: ETHEREUM_MAINNET
                        - address: TYASr5UV6HEcXatwdFQfmLVUqQQQMUxHLS
                          network: TRON_MAINNET
                usdcWallet:
                  summary: USDC wallet addresses
                  value:
                    data:
                      id: 695271a3ba52c13b669fad2c
                      addresses:
                        - address: '0xabcdef1234567890abcdef1234567890abcdef12'
                          network: ETHEREUM_MAINNET
        '400':
          description: >-
            Invalid request parameters (e.g., invalid asset, user not verified,
            or service not available).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                missingAsset:
                  summary: Missing asset parameter
                  value:
                    code: VALIDATION_ERROR
                    error: 'Failed to parse request. Issues: ''asset'' is required'
                    details: {}
                invalidAsset:
                  summary: Unsupported asset (only USDT and USDC are supported)
                  value:
                    code: VALIDATION_ERROR
                    error: >-
                      Failed to parse request. Issues: 'asset' must be one of
                      [USDT, USDC]
                    details: {}
        '401':
          description: Unauthorized - Invalid business API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                missingApiKey:
                  summary: Missing API key
                  value:
                    code: AUTHENTICATION_ERROR
                    error: Authorization header is missing
                    details: {}
                invalidApiKey:
                  summary: Invalid API key
                  value:
                    code: AUTHENTICATION_ERROR
                    error: Invalid authorization header
                    details: {}
        '500':
          description: Server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                serverError:
                  summary: Unexpected server error
                  value:
                    code: INTERNAL_SERVER_ERROR
                    error: It's not you, it's us, please reach out to support
                    details: {}
      x-codeSamples:
        - lang: TypeScript
          label: Afriex SDK
          source: |
            const response = await afriex.paymentMethods.getCryptoWallet({
              asset: "USDT", // or 'USDC'
              customerId: "optional-customer-id",
            });

            // Returns: { data: [{ address, network }], total, page }
components:
  parameters:
    x-api-version:
      name: x-api-version
      in: header
      required: false
      description: >-
        API version in ISO 8601 format (e.g. 2025-12-28). Defaults to latest
        stable.
      schema:
        type: string
  schemas:
    ErrorResponse:
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code.
        error:
          type: string
          description: Human-readable error message.
        details:
          $ref: '#/components/schemas/ErrorDetails'
    ErrorDetails:
      type: object
      properties:
        errorMessage:
          type: string
          description: Detailed/technical error message.
        friendlyMessage:
          type: string
          description: User-facing error message safe to display.
        data:
          type: object
          description: >-
            Optional caller-safe context for the error. On a customer-create
            uniqueness conflict (EMAIL_ALREADY_EXISTS /
            PHONE_NUMBER_ALREADY_EXISTS) this carries the existing customer's
            id, so you can adopt it without a follow-up lookup.
          properties:
            customerId:
              type: string
              description: Id of the existing customer (on a create conflict).
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Static business API key issued from the dashboard. A business can
        provision **multiple API keys**, each scoped to a configurable set of
        **permissions** (e.g. read transactions, create deposits, etc).
        Permissions are chosen per key at creation time in the dashboard and may
        be revoked by deleting the key. Requests made with a key that does not
        include the permission required by the target endpoint will be rejected
        with a `403 Forbidden` response; an unrecognised, malformed or revoked
        key returns `401 Unauthorized`. Manage your keys and their permissions
        under **Developer → API keys** in the dashboard.

````