Kora Payouts API

Disbursements to bank accounts and mobile money wallets.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/korapay-payouts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

korapay-payouts-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Kora (Korapay) Merchant Balances Payouts API
  description: 'The Kora merchant REST API for pan-African payments. It supports pay-ins (card, bank transfer, mobile money, pay-with-bank), payouts (single, bulk, remittance), NGN and USD virtual bank accounts, balances, refunds, multi-currency conversion, and payout utilities (bank / mobile-money lookups and account resolution). All requests are authenticated with API keys - a public key for client-side charge initiation and a secret key (Bearer) for server-side and financial operations - and each account has separate Test and Live mode keys. Card charge payloads must be AES-256 encrypted with your encryption key. Webhook notifications carry an `x-korapay-signature` header that is an HMAC SHA-256 of the response `data` object signed with your secret key.

    This document is a representative, grounded subset of the public Kora API. Request and response schemas are simplified; consult the Kora developer documentation for the authoritative field-level contract. Endpoints are confirmed against Kora''s published documentation except where a description notes an inferred path.'
  version: '1.0'
  contact:
    name: Kora Developer Support
    url: https://developers.korapay.com
    email: support@korapay.com
servers:
- url: https://api.korapay.com/merchant/api/v1
  description: Kora merchant API (Test and Live selected by the API key used)
security:
- secretKeyAuth: []
tags:
- name: Payouts
  description: Disbursements to bank accounts and mobile money wallets.
paths:
  /transactions/disburse:
    post:
      operationId: createPayout
      tags:
      - Payouts
      summary: Request a single payout
      description: Disburses funds from your Kora balance to a single bank account or mobile money wallet. Kora notifies your application via webhook when the payout completes.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayoutInput'
      responses:
        '200':
          description: The initiated payout.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /transactions/disburse/bulk:
    post:
      operationId: createBulkPayout
      tags:
      - Payouts
      summary: Request a bulk payout
      description: Disburses to multiple destinations in a single batch (minimum 2 payouts). Supports NGN and ZAR bank accounts and KES and GHS mobile money. A webhook is sent after each individual payout in the batch completes.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkPayoutInput'
      responses:
        '200':
          description: The initiated bulk payout batch.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /transactions/disburse/remittance:
    post:
      operationId: createRemittancePayout
      tags:
      - Payouts
      summary: Request a remittance payout
      description: Disburses a cross-border remittance payout to a supported destination.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayoutInput'
      responses:
        '200':
          description: The initiated remittance payout.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /payouts:
    get:
      operationId: listPayouts
      tags:
      - Payouts
      summary: Fetch payout history
      description: Retrieves all payout transactions made from your Kora account. Accepts your secret key as the authorization header and supports date-range and pagination query parameters.
      parameters:
      - $ref: '#/components/parameters/StartDate'
      - $ref: '#/components/parameters/EndDate'
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: A list of payout transactions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /payouts/availability:
    get:
      operationId: getPayoutAvailability
      tags:
      - Payouts
      summary: Check payout availability
      description: Returns whether payouts are currently available for a destination.
      responses:
        '200':
          description: Payout availability status.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    PayoutList:
      type: object
      properties:
        status:
          type: boolean
        message:
          type: string
        data:
          type: array
          items:
            type: object
            additionalProperties: true
    PayoutInput:
      type: object
      required:
      - reference
      - amount
      - currency
      - destination
      properties:
        reference:
          type: string
        amount:
          type: number
        currency:
          type: string
          example: NGN
        merchant_bears_cost:
          type: boolean
          default: false
        narration:
          type: string
        destination:
          type: object
          description: The payout destination - bank account or mobile money details.
          properties:
            type:
              type: string
              enum:
              - bank_account
              - mobile_money
            amount:
              type: number
            currency:
              type: string
            bank_account:
              type: object
              properties:
                bank:
                  type: string
                account:
                  type: string
            customer:
              $ref: '#/components/schemas/Customer'
          additionalProperties: true
    Customer:
      type: object
      properties:
        name:
          type: string
        email:
          type: string
          format: email
    BulkPayoutInput:
      type: object
      required:
      - batch_reference
      - currency
      - payouts
      properties:
        batch_reference:
          type: string
          description: Unique reference for the batch (5-50 characters).
        description:
          type: string
        merchant_bears_cost:
          type: boolean
          default: false
        currency:
          type: string
          example: NGN
        payouts:
          type: array
          description: Between 2 and the batch maximum individual payouts.
          items:
            $ref: '#/components/schemas/PayoutInput'
    ErrorResponse:
      type: object
      properties:
        status:
          type: boolean
        message:
          type: string
        data:
          type: object
          additionalProperties: true
    PayoutResponse:
      type: object
      properties:
        status:
          type: boolean
        message:
          type: string
        data:
          type: object
          additionalProperties: true
  parameters:
    Page:
      name: page
      in: query
      required: false
      description: Page number for pagination.
      schema:
        type: integer
    StartDate:
      name: start_date
      in: query
      required: false
      description: Start of the date range (ISO 8601).
      schema:
        type: string
        format: date
    EndDate:
      name: end_date
      in: query
      required: false
      description: End of the date range (ISO 8601).
      schema:
        type: string
        format: date
    Limit:
      name: limit
      in: query
      required: false
      description: Number of records per page.
      schema:
        type: integer
  responses:
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    secretKeyAuth:
      type: http
      scheme: bearer
      description: 'Secret API key passed as `Authorization: Bearer sk_...`. Required for server-side and financial operations (payouts, balances, virtual bank accounts, refunds, conversions, charge verification). Test and Live modes use different keys.'
    publicKeyAuth:
      type: http
      scheme: bearer
      description: Public API key (`pk_...`) used from client-side code to initiate charges. Cannot access financial data.