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

# Create a payout from the merchant master NGN wallet

> The source wallet is derived from the authenticated merchant. Same-business destinations are free; cross-business FossaPay and external-bank destinations incur the configured payout fee.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v1/payouts
openapi: 3.1.0
info:
  title: FossaPay API
  description: >-
    FossaPay API for checkout wallets, master-wallet payouts, customer
    management, NGN wallets, crypto wallets, transfers, fees, banks, and
    webhooks.
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://api-production.fossapay.com
    description: Production server
security:
  - ApiKeyAuth: []
paths:
  /api/v1/payouts:
    post:
      tags:
        - Master Wallet Payouts
      summary: Create a payout from the merchant master NGN wallet
      description: >-
        The source wallet is derived from the authenticated merchant.
        Same-business destinations are free; cross-business FossaPay and
        external-bank destinations incur the configured payout fee.
      operationId: ExternalPayoutController_create
      parameters:
        - name: X-Idempotency-Key
          in: header
          required: true
          description: >-
            Unique key for this logical payout. Idempotency-Key is also
            accepted; if both headers are sent, they must match.
          schema:
            type: string
            maxLength: 255
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayoutCreateRequest'
      responses:
        '202':
          description: Payout accepted, completed synchronously, or idempotently replayed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutResponse'
        '400':
          description: >-
            Validation, wallet, funds, configuration, provider, or
            idempotency-header error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: >-
            Missing, invalid, inactive, revoked, non-live, or
            non-full-permission API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: Merchant KYC approval is required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '409':
          description: Duplicate reference or incompatible idempotency-key reuse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
components:
  schemas:
    PayoutCreateRequest:
      type: object
      required:
        - amount
        - currency
        - reference
        - destinationBankCode
        - destinationBankName
        - destinationAccountName
        - destinationAccountNumber
      properties:
        amount:
          type: integer
          minimum: 1
          description: Amount the beneficiary receives in NGN.
        currency:
          type: string
          enum:
            - NGN
        reference:
          type: string
          minLength: 1
          maxLength: 100
          pattern: ^[A-Za-z0-9._:-]+$
        destinationBankCode:
          type: string
          minLength: 1
          maxLength: 100
        destinationBankName:
          type: string
          minLength: 1
          maxLength: 199
        destinationAccountName:
          type: string
          minLength: 1
          maxLength: 199
        destinationAccountNumber:
          type: string
          minLength: 1
          maxLength: 199
        remarks:
          type: string
          maxLength: 255
        metadata:
          type: object
          description: >-
            Optional merchant data limited to 4,096 UTF-8 bytes and returned
            unchanged.
          additionalProperties: true
      additionalProperties: false
    PayoutResponse:
      type: object
      required:
        - status
        - statusCode
        - message
        - data
      properties:
        status:
          type: string
          const: success
        statusCode:
          type: integer
          enum:
            - 200
            - 202
        message:
          type: string
        data:
          $ref: '#/components/schemas/Payout'
      additionalProperties: false
    ApiError:
      type: object
      properties:
        status:
          oneOf:
            - type: string
            - type: boolean
        statusCode:
          type: integer
        message:
          type: string
        error:
          type: string
        code:
          type: string
        errors:
          type: object
          additionalProperties: true
      additionalProperties: true
    Payout:
      type: object
      required:
        - payoutId
        - transactionId
        - reference
        - status
        - route
        - amount
        - fee
        - totalDebited
        - currency
        - recipient
        - providerReference
        - metadata
        - completedAt
        - failedAt
        - reversedAt
      properties:
        payoutId:
          type: string
          format: uuid
        transactionId:
          type:
            - string
            - 'null'
          format: uuid
        reference:
          type: string
        status:
          type: string
          enum:
            - processing
            - completed
            - failed
            - reversed
        route:
          type: string
          enum:
            - same_business
            - fossapay_cross_business
            - external_bank
        amount:
          type: string
          pattern: ^[0-9]+\.[0-9]{2}$
        fee:
          type: string
          pattern: ^[0-9]+\.[0-9]{2}$
        totalDebited:
          type: string
          pattern: ^[0-9]+\.[0-9]{2}$
        currency:
          type: string
          enum:
            - NGN
        recipient:
          $ref: '#/components/schemas/PayoutRecipient'
        providerReference:
          type:
            - string
            - 'null'
        metadata:
          type:
            - object
            - 'null'
          additionalProperties: true
        completedAt:
          type:
            - string
            - 'null'
          format: date-time
        failedAt:
          type:
            - string
            - 'null'
          format: date-time
        reversedAt:
          type:
            - string
            - 'null'
          format: date-time
      additionalProperties: false
    PayoutRecipient:
      type: object
      required:
        - bankCode
        - bankName
        - accountName
        - accountNumber
      properties:
        bankCode:
          type: string
        bankName:
          type: string
        accountName:
          type: string
        accountNumber:
          type: string
      additionalProperties: false
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````