Kora

Kora (formerly Korapay) is a pan-African payments infrastructure company that lets businesses collect payments, disburse payouts, run settlements, issue cards, verify identities, and check balances across African markets. The Kora merchant REST API (base https://api.korapay.com/merchant/api/v1) supports pay-ins via card, bank transfer, mobile money, and pay-with-bank; single, bulk, and remittance payouts; NGN and USD virtual bank accounts; balances; refunds; and multi-currency conversion, with test and live modes authenticated by public and secret API keys and webhook events verified with an HMAC SHA-256 signature.

7 APIs 0 Features
PaymentsPayment GatewayAfricaNigeriaCollectionsPayoutsDisbursementsVirtual Bank AccountCardsFintech

APIs

Kora Charges API

Accept payments (pay-ins) from customers. Initialize a checkout charge, charge cards (with encrypted card data and OTP/PIN/AVS/phone authorization), charge mobile money wallets ...

Kora Payouts API

Disburse funds from your Kora balance to bank accounts and mobile money wallets. Send single payouts, bulk payouts (batches of 2+), and cross-border remittance payouts, check pa...

Kora Virtual Bank Accounts API

Create and manage dedicated NGN and USD virtual bank accounts (permanent or temporary) tied to your customers, retrieve an account by its reference, and fetch the transactions t...

Kora Balances API

Retrieve real-time available and pending balances across all supported currencies (NGN by default, plus USD, GHS, KES, XAF, XOF, ZAR for multi-currency accounts). Requires secre...

Kora Refunds API

Initiate a full or partial refund for a completed pay-in transaction, retrieve the details of a single refund by reference, and list refunds within a given time period.

Kora Currency Conversion API

Get the latest exchange rate for a currency pair, initiate a currency conversion between your multi-currency balances, retrieve a conversion by reference, and list conversion hi...

Kora Misc Utilities API

Payout support utilities - list banks and mobile money operators by country, resolve (verify) a destination bank account or mobile money number, and look up payout payment purpo...

Collections

Pricing Plans

Korapay Plans Pricing

3 plans

PLANS

Rate Limits

Korapay Rate Limits

4 limits

RATE LIMITS

FinOps

Resources

🔗
AgenticAccess
AgenticAccess
🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Kora (Korapay) Merchant API
  version: '1.0'
request:
  auth:
    type: bearer
    token: '{{secretKey}}'
items:
- info:
    name: Charges
    type: folder
  items:
  - info:
      name: Initialize a charge
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/charges/initialize
      auth:
        type: bearer
        token: '{{publicKey}}'
      body:
        type: json
        data: "{\n  \"reference\": \"charge-ref-001\",\n  \"amount\": 1000,\n  \"currency\": \"NGN\",\n  \"redirect_url\"\
          : \"https://merchant-redirect-url.com\",\n  \"customer\": { \"name\": \"John Doe\", \"email\": \"johndoe@korapay.com\"\
          \ }\n}"
    docs: Initializes a checkout charge and returns a hosted checkout URL. Uses the public key.
  - info:
      name: Charge a card
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/charges/card
      body:
        type: json
        data: "{\n  \"charge_data\": \"<AES-256-encrypted-card-payload>\"\n}"
    docs: Charges a card. The card/payment data must be AES-256 encrypted with your encryption key and sent as charge_data.
  - info:
      name: Authorize a card charge (path inferred)
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/charges/card/authorize
      body:
        type: json
        data: "{\n  \"transaction_reference\": \"KPY-...\",\n  \"authorization\": { \"pin\": \"1234\" }\n}"
    docs: 'Completes a processing card charge with PIN/OTP/AVS/phone. NOTE: path inferred by convention; verify against Kora''s
      Postman docs.'
  - info:
      name: Charge mobile money
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/charges/mobile-money
      body:
        type: json
        data: "{\n  \"reference\": \"mm-ref-001\",\n  \"amount\": 1000,\n  \"currency\": \"KES\",\n  \"mobile_money\": { \"\
          number\": \"254700000000\" },\n  \"customer\": { \"name\": \"Jane Doe\", \"email\": \"jane@korapay.com\" }\n}"
    docs: Charges a mobile money wallet (KES, GHS, XAF, XOF, EGP, TZS). Response auth_model indicates the next step.
  - info:
      name: Authorize mobile money charge
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/charges/mobile-money/authorize
      body:
        type: json
        data: "{\n  \"transaction_reference\": \"KPY-PAY-...\",\n  \"authorization\": { \"otp\": \"123456\" }\n}"
    docs: Submits the OTP for a mobile money charge whose auth_model was OTP.
  - info:
      name: Charge with Pay with Bank
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/charge/pay-with-bank
      body:
        type: json
        data: "{\n  \"reference\": \"pwb-ref-001\",\n  \"amount\": 1000,\n  \"currency\": \"ZAR\",\n  \"redirect_url\": \"\
          https://merchant-redirect-url.com\",\n  \"customer\": { \"name\": \"Sam Doe\", \"email\": \"sam@korapay.com\" }\n\
          }"
    docs: Initiates a Pay with Bank (Instant EFT / direct debit) charge and returns a redirect URL.
  - info:
      name: List Pay with Bank banks
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/charge/pay-with-bank/banks
    docs: Lists banks supported for Pay with Bank (Instant EFT).
  - info:
      name: Verify / query a charge
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/charges/:reference
      params:
      - name: reference
        value: ''
        type: path
        description: The payment reference.
    docs: Retrieves the current status and details of a charge by its payment reference.
- info:
    name: Payouts
    type: folder
  items:
  - info:
      name: Request a single payout
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/transactions/disburse
      body:
        type: json
        data: "{\n  \"reference\": \"payout-ref-001\",\n  \"amount\": 5000,\n  \"currency\": \"NGN\",\n  \"destination\":\
          \ {\n    \"type\": \"bank_account\",\n    \"amount\": 5000,\n    \"currency\": \"NGN\",\n    \"bank_account\": {\
          \ \"bank\": \"044\", \"account\": \"0000000000\" },\n    \"customer\": { \"name\": \"John Doe\", \"email\": \"johndoe@korapay.com\"\
          \ }\n  }\n}"
    docs: Disburses funds from your balance to a single bank account or mobile money wallet.
  - info:
      name: Request a bulk payout
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/transactions/disburse/bulk
      body:
        type: json
        data: "{\n  \"batch_reference\": \"batch-001\",\n  \"currency\": \"NGN\",\n  \"merchant_bears_cost\": false,\n  \"\
          payouts\": [ {}, {} ]\n}"
    docs: Disburses to multiple destinations in one batch (minimum 2 payouts).
  - info:
      name: Request a remittance payout
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/transactions/disburse/remittance
      body:
        type: json
        data: "{\n  \"reference\": \"rem-ref-001\",\n  \"amount\": 100,\n  \"currency\": \"USD\",\n  \"destination\": {}\n\
          }"
    docs: Disburses a cross-border remittance payout.
  - info:
      name: Fetch payout history
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/payouts?page=1&limit=20
      params:
      - name: page
        value: '1'
        type: query
      - name: limit
        value: '20'
        type: query
    docs: Retrieves all payout transactions from your account (secret key auth).
  - info:
      name: Check payout availability
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/payouts/availability
    docs: Returns whether payouts are currently available for a destination.
- info:
    name: Virtual Bank Accounts
    type: folder
  items:
  - info:
      name: Create a virtual bank account
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/virtual-bank-account
      body:
        type: json
        data: "{\n  \"account_name\": \"John Doe\",\n  \"account_reference\": \"vba-ref-001\",\n  \"permanent\": true,\n \
          \ \"bank_code\": \"035\",\n  \"customer\": { \"name\": \"John Doe\" },\n  \"kyc\": { \"bvn\": \"00000000000\" }\n\
          }"
    docs: Creates a dedicated NGN or USD virtual bank account tied to a customer.
  - info:
      name: Retrieve a virtual bank account
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/virtual-bank-account/:accountReference
      params:
      - name: accountReference
        value: ''
        type: path
        description: The account_reference used at creation.
    docs: Retrieves a virtual bank account by its account reference.
  - info:
      name: Fetch virtual bank account transactions
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/virtual-bank-account/transactions?account_number=0000000000
      params:
      - name: account_number
        value: '0000000000'
        type: query
        description: The virtual bank account number.
    docs: Retrieves the transactions that funded a virtual bank account.
- info:
    name: Balances
    type: folder
  items:
  - info:
      name: Retrieve balances
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/balances
    docs: Returns available and pending balances across supported currencies (secret key auth).
- info:
    name: Refunds
    type: folder
  items:
  - info:
      name: Initiate a refund
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/refunds/initiate
      body:
        type: json
        data: "{\n  \"reference\": \"refund-ref-001\",\n  \"transaction_reference\": \"KPY-...\",\n  \"reason\": \"Customer\
          \ request\"\n}"
    docs: Initiates a full or partial refund for a completed pay-in transaction.
  - info:
      name: Retrieve a refund
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/refunds/:reference
      params:
      - name: reference
        value: ''
        type: path
        description: The refund reference.
    docs: Retrieves the details of a refund by its reference.
  - info:
      name: List refunds
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/refunds?page=1&limit=20
      params:
      - name: page
        value: '1'
        type: query
      - name: limit
        value: '20'
        type: query
    docs: Lists refunds within a specified time period.
- info:
    name: Currency Conversion
    type: folder
  items:
  - info:
      name: Get exchange rate
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/conversions/rates
      body:
        type: json
        data: "{\n  \"from_currency\": \"USD\",\n  \"to_currency\": \"NGN\",\n  \"amount\": 100\n}"
    docs: Returns the latest exchange rate for a currency pair and amount.
  - info:
      name: Initiate a currency conversion
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/conversions
      body:
        type: json
        data: "{\n  \"reference\": \"conv-ref-001\",\n  \"from_currency\": \"USD\",\n  \"to_currency\": \"NGN\",\n  \"amount\"\
          : 100\n}"
    docs: Converts funds between your multi-currency balances at the quoted rate.
  - info:
      name: Retrieve a conversion
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/conversions/:reference
      params:
      - name: reference
        value: ''
        type: path
        description: The conversion reference.
    docs: Retrieves a currency conversion transaction by its reference.
  - info:
      name: List conversion history
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/conversions?page=1&limit=20
      params:
      - name: page
        value: '1'
        type: query
      - name: limit
        value: '20'
        type: query
    docs: Retrieves currency conversion transactions within a given period.
- info:
    name: Misc
    type: folder
  items:
  - info:
      name: List banks
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/misc/banks?countryCode=NG
      params:
      - name: countryCode
        value: NG
        type: query
        description: ISO country code.
    docs: Lists supported banks and bank codes for a country.
  - info:
      name: Resolve a bank account
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/misc/banks/resolve
      body:
        type: json
        data: "{\n  \"bank\": \"044\",\n  \"account\": \"0000000000\",\n  \"currency\": \"NGN\"\n}"
    docs: Verifies a destination bank account and returns the resolved account holder name.
  - info:
      name: List mobile money operators
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/misc/mobile-money?countryCode=KE
      params:
      - name: countryCode
        value: KE
        type: query
        description: ISO country code.
    docs: Lists supported mobile money operators and slugs for a country.
  - info:
      name: Resolve a mobile money number
      type: http
    http:
      method: POST
      url: https://api.korapay.com/merchant/api/v1/misc/mobile-money/resolve
      body:
        type: json
        data: "{\n  \"mobile_money\": { \"number\": \"254700000000\" },\n  \"currency\": \"KES\"\n}"
    docs: Verifies a mobile money account and returns the resolved holder name.
  - info:
      name: Get payout payment purposes by country
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/misc/payout-payment-purpose-by-country-code/:countryCode
      params:
      - name: countryCode
        value: US
        type: path
        description: ISO country code of the destination.
    docs: Returns accepted payout payment-purpose values for a country.
  - info:
      name: Get supported payout countries by currency
      type: http
    http:
      method: GET
      url: https://api.korapay.com/merchant/api/v1/misc/payout-countries-by-currency-code/:currencyCode
      params:
      - name: currencyCode
        value: USD
        type: path
        description: ISO currency code.
    docs: Returns countries with supported banks under a given currency.
bundled: true