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

# Fund a wallet

> Returns payment `instructions` for the chosen `method` (default per currency). NGN: `korapay_bank_transfer` (one-time bank account, `instructions.account`), `korapay_checkout` (hosted page, `instructions.checkout_url`), `flutterwave_direct_debit` (debits an active mandate, `instructions.mandate_id`). GHS: `hubtel_momo` (Hubtel checkout, `instructions.checkout_url`). USD: `manual_bank_transfer` (503 `funding_account_not_configured` until a receiving account exists). Test keys: sandbox instructions for every method, settled with the sandbox endpoint. The wallet is credited with the amount actually received (`wallet.funded` webhook); the request expires at `expires_at` (`funding.expired`).



## OpenAPI

````yaml /openapi.json post /partner/v1/wallets/{currency}/fund
openapi: 3.0.3
info:
  title: Ladder Partner API
  version: v1
  description: >-
    Server-to-server API for licensed partner organisations: KYB, NGN/GHS/USD
    wallets, funding rails, investments and NGX market data, buy and sell
    orders, holdings and webhooks. Every request is HMAC-signed; see the
    Authentication guide.
  contact:
    email: partners@myladder.africa
servers:
  - url: https://api.myladder.africa
    description: Production
  - url: https://api-dev.myladder.africa
    description: UAT (integration and acceptance testing)
security:
  - LadderKey: []
    LadderTimestamp: []
    LadderSignature: []
tags:
  - name: Organisation
    description: The calling organisation and what KYB still needs.
  - name: KYB
    description: >-
      Business information, people, documents, settlement accounts and
      submission.
  - name: Wallets
    description: >-
      Balances, funding requests on every rail, direct-debit mandates and the
      ledger statement.
  - name: Investments
    description: What a partner can buy.
  - name: Market data
    description: >-
      Nigerian Exchange instruments, quotes, bars, indices, FX, calendar and
      disclosures.
  - name: Orders
    description: Buy and sell orders and their lifecycle.
  - name: Holdings
    description: Positions created by completed buys.
  - name: Webhooks
    description: Endpoints, deliveries and retries.
  - name: Sandbox
    description: Test-key only helpers.
paths:
  /partner/v1/wallets/{currency}/fund:
    parameters:
      - name: currency
        in: path
        required: true
        schema:
          type: string
    post:
      tags:
        - Wallets
      summary: Fund a wallet
      description: >-
        Returns payment `instructions` for the chosen `method` (default per
        currency). NGN: `korapay_bank_transfer` (one-time bank account,
        `instructions.account`), `korapay_checkout` (hosted page,
        `instructions.checkout_url`), `flutterwave_direct_debit` (debits an
        active mandate, `instructions.mandate_id`). GHS: `hubtel_momo` (Hubtel
        checkout, `instructions.checkout_url`). USD: `manual_bank_transfer` (503
        `funding_account_not_configured` until a receiving account exists). Test
        keys: sandbox instructions for every method, settled with the sandbox
        endpoint. The wallet is credited with the amount actually received
        (`wallet.funded` webhook); the request expires at `expires_at`
        (`funding.expired`).
      operationId: wallets_fund_create
      parameters:
        - name: Idempotency-Key
          in: header
          description: >-
            Unique per logical request (max 255 chars). A retry with the same
            key and body returns the original response with
            `Idempotent-Replayed: true`; a different body returns 409.
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PartnerFundWallet'
        required: true
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerFundingRequestResponse'
        '400':
          description: Validation or business-rule error (see `error.code`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerError'
        '401':
          description: Missing/invalid signature, stale timestamp, unknown or revoked key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerError'
        '403':
          description: IP not allowlisted, or action not allowed for this key/environment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerError'
        '404':
          description: Not found (or belongs to another organisation/environment).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerError'
        '409':
          description: >-
            Conflict: state does not allow this action, duplicate reference, or
            Idempotency-Key reuse.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerError'
        '429':
          description: Rate limited (120 requests/min per key). See `Retry-After`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerError'
        '502':
          description: Upstream payment provider unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerError'
        '503':
          description: >-
            Funding rail not configured for this currency
            (`funding_account_not_configured`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerError'
components:
  schemas:
    PartnerFundWallet:
      required:
        - amount
      type: object
      properties:
        amount:
          title: Amount
          type: string
          format: decimal
        method:
          title: Method
          description: >-
            Rail to pay on. Defaults per currency: NGN korapay_bank_transfer,
            GHS hubtel_momo, USD manual_bank_transfer.
          type: string
          enum:
            - korapay_bank_transfer
            - korapay_checkout
            - hubtel_momo
            - flutterwave_direct_debit
            - manual_bank_transfer
        mandate_id:
          title: Mandate id
          description: >-
            For flutterwave_direct_debit: which active mandate to debit
            (default: the organisation's only active one).
          type: string
          format: uuid
    PartnerFundingRequestResponse:
      required:
        - data
      type: object
      properties:
        data:
          $ref: '#/components/schemas/PartnerFundingRequest'
    PartnerError:
      required:
        - error
      type: object
      properties:
        error:
          $ref: '#/components/schemas/PartnerErrorBody'
    PartnerFundingRequest:
      required:
        - currency
        - amount
        - method
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        reference:
          title: Reference
          type: string
          maxLength: 64
          minLength: 1
        currency:
          title: Currency
          type: string
          enum:
            - GHS
            - USD
            - NGN
        amount:
          title: Amount
          type: string
          format: decimal
        amount_received:
          title: Amount received
          type: string
          format: decimal
          nullable: true
        method:
          title: Method
          type: string
          enum:
            - korapay_bank_transfer
            - korapay_checkout
            - hubtel_momo
            - flutterwave_direct_debit
            - manual_bank_transfer
        status:
          title: Status
          type: string
          enum:
            - pending
            - succeeded
            - failed
            - expired
        instructions:
          title: Instructions
          type: object
        failure_reason:
          title: Failure reason
          type: string
        expires_at:
          title: Expires at
          type: string
          format: date-time
          nullable: true
        settled_at:
          title: Settled at
          type: string
          format: date-time
          nullable: true
        order_id:
          title: Order id
          type: string
          readOnly: true
        mandate_id:
          title: Mandate id
          type: string
          readOnly: true
        created_at:
          title: Created_at
          type: string
          format: date-time
          readOnly: true
    PartnerErrorBody:
      required:
        - code
        - message
        - details
      type: object
      properties:
        code:
          title: Code
          description: Stable machine-readable code, e.g. `insufficient_funds`.
          type: string
          minLength: 1
        message:
          title: Message
          type: string
          minLength: 1
        details:
          title: Details
          description: Code-specific context (validation errors, balances, …).
          type: object
          additionalProperties:
            type: string
            nullable: true
  securitySchemes:
    LadderKey:
      type: apiKey
      in: header
      name: X-Ladder-Key
      description: 'Your key id: `pk_test_…` (sandbox) or `pk_live_…` (live).'
    LadderTimestamp:
      type: apiKey
      in: header
      name: X-Ladder-Timestamp
      description: Unix seconds, as a string; must be within 5 minutes of server time.
    LadderSignature:
      type: apiKey
      in: header
      name: X-Ladder-Signature
      description: >-
        Lower-case hex HMAC-SHA512 over timestamp, method, path+query and the
        SHA-256 of the body. See Authentication.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.