Nomba Global Payout API

The Nomba Global Payout API is a single integration point that enables cross-border payment operators, remittance platforms, and fintechs to collect funds in Nigerian Naira or stablecoins (USDT/USDC) and trigger instant disbursements to the United Kingdom via Faster Payments, Europe via SEPA, Canada via Interac and bank transfer, and the Democratic Republic of Congo via Mobile Money. The API embeds FX sourcing and compliance directly into the technical layer, eliminating the need for operators to manage foreign exchange processes. It solves capital lockups in cross-border trade by handling currency conversion automatically when funds land in a virtual account.

OpenAPI Specification

nomba-global-payout-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Nomba Global Payout API
  description: >-
    The Nomba Global Payout API is a single integration point that enables
    cross-border payment operators, remittance platforms, and fintechs to
    collect funds in Nigerian Naira or stablecoins (USDT/USDC) and trigger
    instant disbursements to the United Kingdom via Faster Payments, Europe
    via SEPA, Canada via Interac and bank transfer, and the Democratic
    Republic of Congo via Mobile Money. The API embeds FX sourcing and
    compliance directly into the technical layer, eliminating the need for
    operators to manage foreign exchange processes. It provides a four-step
    integration flow: fetch rate, lock rate, authorize transfer, and track
    transaction.
  version: '1.0.0'
  contact:
    name: Nomba Developer Support
    url: https://developer.nomba.com
  termsOfService: https://nomba.com/terms
externalDocs:
  description: Nomba Global Payout Documentation
  url: https://developer.nomba.com/docs/products/global-payout/introduction
servers:
  - url: https://api.nomba.com
    description: Production Server
  - url: https://sandbox.nomba.com
    description: Sandbox Server
tags:
  - name: Corridors
    description: >-
      Endpoints for listing supported payout corridors and their
      configurations.
  - name: Exchange Rates
    description: >-
      Endpoints for fetching and locking live exchange rates for
      cross-border payouts.
  - name: Payouts
    description: >-
      Endpoints for initiating and tracking cross-border payout
      transactions.
security:
  - bearerAuth: []
paths:
  /v1/global-payout/rates:
    get:
      operationId: fetchExchangeRates
      summary: Fetch live exchange rates
      description: >-
        Retrieves the current live exchange rates for all supported payout
        corridors. Rates are indicative and may change. Use the rate lock
        endpoint to secure a rate before initiating a payout.
      tags:
        - Exchange Rates
      parameters:
        - $ref: '#/components/parameters/accountId'
        - name: sourceCurrency
          in: query
          required: false
          description: >-
            Filter rates by source currency.
          schema:
            type: string
            enum:
              - NGN
              - USDT
              - USDC
        - name: destinationCurrency
          in: query
          required: false
          description: >-
            Filter rates by destination currency.
          schema:
            type: string
            enum:
              - GBP
              - EUR
              - CAD
              - CDF
      responses:
        '200':
          description: Exchange rates retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExchangeRateListResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/global-payout/rates/lock:
    post:
      operationId: lockExchangeRate
      summary: Lock an exchange rate
      description: >-
        Locks the current exchange rate for a specified corridor for five
        minutes. The locked rate is guaranteed for the duration and must be
        used when authorizing the payout transfer. This eliminates slippage
        on volatile corridors and removes reconciliation disputes.
      tags:
        - Exchange Rates
      parameters:
        - $ref: '#/components/parameters/accountId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - sourceCurrency
                - destinationCurrency
                - amount
              properties:
                sourceCurrency:
                  type: string
                  description: >-
                    The source currency for the payout.
                  enum:
                    - NGN
                    - USDT
                    - USDC
                destinationCurrency:
                  type: string
                  description: >-
                    The destination currency for the payout.
                  enum:
                    - GBP
                    - EUR
                    - CAD
                    - CDF
                amount:
                  type: number
                  format: double
                  description: >-
                    The payout amount in the source currency.
                  minimum: 1
      responses:
        '200':
          description: Exchange rate locked successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLockResponse'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/global-payout/transfer:
    post:
      operationId: createGlobalPayout
      summary: Authorize a global payout transfer
      description: >-
        Authorizes and initiates a cross-border payout transfer using a
        previously locked exchange rate. The transfer includes recipient
        details and the locked rate ID. Supported corridors include the
        United Kingdom (Faster Payments, up to 1,000,000 GBP, settled in
        1-3 hours), Europe (SEPA, up to 100,000 EUR, settled in under 1
        hour), Canada (Interac instant or bank transfer), and the DRC
        (Mobile Money instant or bank transfer).
      tags:
        - Payouts
      parameters:
        - $ref: '#/components/parameters/accountId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - rateLockId
                - amount
                - recipient
              properties:
                rateLockId:
                  type: string
                  description: >-
                    The ID of the locked exchange rate to use for this payout.
                amount:
                  type: number
                  format: double
                  description: >-
                    The payout amount in the source currency.
                  minimum: 1
                recipient:
                  $ref: '#/components/schemas/PayoutRecipient'
                merchantTxRef:
                  type: string
                  description: >-
                    A unique merchant reference for idempotency and
                    reconciliation.
                narration:
                  type: string
                  description: >-
                    An optional description for the payout.
                  maxLength: 200
      responses:
        '200':
          description: Payout transfer initiated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutResponse'
        '400':
          description: Invalid request or expired rate lock
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/global-payout/transfer/{transactionId}:
    get:
      operationId: trackGlobalPayout
      summary: Track a global payout transaction
      description: >-
        Retrieves the current status and details of a global payout
        transaction. Provides end-to-end tracking from initiation through
        settlement.
      tags:
        - Payouts
      parameters:
        - name: transactionId
          in: path
          required: true
          description: >-
            The unique identifier of the payout transaction to track.
          schema:
            type: string
        - $ref: '#/components/parameters/accountId'
      responses:
        '200':
          description: Payout status retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Payout transaction not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/global-payout/corridors:
    get:
      operationId: listPayoutCorridors
      summary: List supported payout corridors
      description: >-
        Retrieves the list of supported cross-border payout corridors along
        with their configurations, limits, settlement times, and available
        payment methods.
      tags:
        - Corridors
      parameters:
        - $ref: '#/components/parameters/accountId'
      responses:
        '200':
          description: Corridors retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CorridorListResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        OAuth2 bearer token obtained from the Nomba Authentication API.
  parameters:
    accountId:
      name: accountId
      in: header
      required: true
      description: >-
        The unique identifier of the parent business account.
      schema:
        type: string
  schemas:
    ExchangeRateListResponse:
      type: object
      properties:
        code:
          type: string
          description: >-
            Response status code.
          example: '00'
        description:
          type: string
          description: >-
            Human-readable description of the response.
          example: Success
        data:
          type: object
          properties:
            results:
              type: array
              description: >-
                List of available exchange rates.
              items:
                $ref: '#/components/schemas/ExchangeRate'
    RateLockResponse:
      type: object
      properties:
        code:
          type: string
          description: >-
            Response status code.
          example: '00'
        description:
          type: string
          description: >-
            Human-readable description of the response.
          example: Success
        data:
          type: object
          properties:
            rateLockId:
              type: string
              description: >-
                The unique identifier for the locked rate.
            sourceCurrency:
              type: string
              description: >-
                The source currency.
            destinationCurrency:
              type: string
              description: >-
                The destination currency.
            rate:
              type: number
              format: double
              description: >-
                The locked exchange rate.
            amount:
              type: number
              format: double
              description: >-
                The amount in the source currency.
            convertedAmount:
              type: number
              format: double
              description: >-
                The equivalent amount in the destination currency.
            expiresAt:
              type: string
              format: date-time
              description: >-
                The date and time the rate lock expires (5-minute window).
    PayoutResponse:
      type: object
      properties:
        code:
          type: string
          description: >-
            Response status code.
          example: '00'
        description:
          type: string
          description: >-
            Human-readable description of the response.
          example: Success
        data:
          type: object
          properties:
            transactionId:
              type: string
              description: >-
                The unique identifier for the payout transaction.
            status:
              type: string
              description: >-
                The current status of the payout.
              enum:
                - initiated
                - processing
                - settled
                - failed
            sourceCurrency:
              type: string
              description: >-
                The source currency of the payout.
            destinationCurrency:
              type: string
              description: >-
                The destination currency of the payout.
            sourceAmount:
              type: number
              format: double
              description: >-
                The amount debited in the source currency.
            destinationAmount:
              type: number
              format: double
              description: >-
                The amount to be received in the destination currency.
            rate:
              type: number
              format: double
              description: >-
                The exchange rate applied.
            fee:
              type: number
              format: double
              description: >-
                The fee charged for the payout.
            paymentMethod:
              type: string
              description: >-
                The payment method used for disbursement.
              enum:
                - faster_payments
                - sepa
                - interac
                - bank_transfer
                - mobile_money
            merchantTxRef:
              type: string
              description: >-
                The merchant transaction reference.
            recipient:
              $ref: '#/components/schemas/PayoutRecipient'
            createdAt:
              type: string
              format: date-time
              description: >-
                The date and time the payout was initiated.
            settledAt:
              type: string
              format: date-time
              description: >-
                The date and time the payout was settled, if applicable.
    CorridorListResponse:
      type: object
      properties:
        code:
          type: string
          description: >-
            Response status code.
          example: '00'
        description:
          type: string
          description: >-
            Human-readable description of the response.
          example: Success
        data:
          type: object
          properties:
            results:
              type: array
              description: >-
                List of supported payout corridors.
              items:
                $ref: '#/components/schemas/Corridor'
    ExchangeRate:
      type: object
      properties:
        sourceCurrency:
          type: string
          description: >-
            The source currency code.
          example: NGN
        destinationCurrency:
          type: string
          description: >-
            The destination currency code.
          example: GBP
        rate:
          type: number
          format: double
          description: >-
            The current indicative exchange rate.
        updatedAt:
          type: string
          format: date-time
          description: >-
            The date and time the rate was last updated.
    PayoutRecipient:
      type: object
      required:
        - name
        - country
      properties:
        name:
          type: string
          description: >-
            The full name of the recipient.
        country:
          type: string
          description: >-
            The ISO 3166-1 alpha-2 country code of the recipient.
          enum:
            - GB
            - DE
            - FR
            - NL
            - BE
            - CA
            - CD
          example: GB
        accountNumber:
          type: string
          description: >-
            The recipient bank account number or IBAN.
        sortCode:
          type: string
          description: >-
            The UK sort code, required for Faster Payments.
          pattern: '^\d{6}$'
        iban:
          type: string
          description: >-
            The IBAN, required for SEPA transfers.
        bic:
          type: string
          description: >-
            The BIC/SWIFT code for the recipient bank.
        email:
          type: string
          format: email
          description: >-
            The recipient email, required for Interac transfers.
        phoneNumber:
          type: string
          description: >-
            The recipient phone number, required for Mobile Money.
    Corridor:
      type: object
      properties:
        country:
          type: string
          description: >-
            The destination country name.
        countryCode:
          type: string
          description: >-
            The ISO 3166-1 alpha-2 country code.
        currency:
          type: string
          description: >-
            The destination currency code.
        paymentMethods:
          type: array
          description: >-
            The available payment methods for this corridor.
          items:
            type: string
            enum:
              - faster_payments
              - sepa
              - interac
              - bank_transfer
              - mobile_money
        maxAmount:
          type: number
          format: double
          description: >-
            The maximum payout amount per transaction in the destination
            currency.
        settlementTime:
          type: string
          description: >-
            The estimated settlement time for payouts in this corridor.
          example: 1-3 hours
    ErrorResponse:
      type: object
      properties:
        code:
          type: string
          description: >-
            Error status code.
        description:
          type: string
          description: >-
            Human-readable description of the error.
        errors:
          type: array
          description: >-
            List of specific error details.
          items:
            type: string