{
  "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
}
