{ "info": { "name": "Kora (Korapay) Merchant API", "description": "Representative collection for the Kora pan-African payments REST API. Base URL: https://api.korapay.com/merchant/api/v1. Authenticate financial/server-side calls with your secret key (Authorization: Bearer sk_...); initialize charges client-side with your public key (pk_...). Card charge payloads must be AES-256 encrypted (charge_data). Webhooks are verified with an x-korapay-signature HMAC SHA-256 header. Test and Live modes use different keys.", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{secretKey}}", "type": "string" } ] }, "variable": [ { "key": "baseUrl", "value": "https://api.korapay.com/merchant/api/v1", "type": "string" }, { "key": "secretKey", "value": "", "type": "string" }, { "key": "publicKey", "value": "", "type": "string" } ], "item": [ { "name": "Charges", "item": [ { "name": "Initialize a charge", "request": { "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{publicKey}}", "type": "string" }] }, "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\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}" }, "url": { "raw": "{{baseUrl}}/charges/initialize", "host": ["{{baseUrl}}"], "path": ["charges", "initialize"] }, "description": "Initializes a checkout charge and returns a hosted checkout URL. Uses the public key." } }, { "name": "Charge a card", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"charge_data\": \"\"\n}" }, "url": { "raw": "{{baseUrl}}/charges/card", "host": ["{{baseUrl}}"], "path": ["charges", "card"] }, "description": "Charges a card. The card/payment data must be AES-256 encrypted with your encryption key and sent as charge_data." } }, { "name": "Authorize a card charge (path inferred)", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"transaction_reference\": \"KPY-...\",\n \"authorization\": { \"pin\": \"1234\" }\n}" }, "url": { "raw": "{{baseUrl}}/charges/card/authorize", "host": ["{{baseUrl}}"], "path": ["charges", "card", "authorize"] }, "description": "Completes a processing card charge with PIN/OTP/AVS/phone. NOTE: path inferred by convention; verify against Kora's Postman docs." } }, { "name": "Charge mobile money", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\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}" }, "url": { "raw": "{{baseUrl}}/charges/mobile-money", "host": ["{{baseUrl}}"], "path": ["charges", "mobile-money"] }, "description": "Charges a mobile money wallet (KES, GHS, XAF, XOF, EGP, TZS). Response auth_model indicates the next step." } }, { "name": "Authorize mobile money charge", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"transaction_reference\": \"KPY-PAY-...\",\n \"authorization\": { \"otp\": \"123456\" }\n}" }, "url": { "raw": "{{baseUrl}}/charges/mobile-money/authorize", "host": ["{{baseUrl}}"], "path": ["charges", "mobile-money", "authorize"] }, "description": "Submits the OTP for a mobile money charge whose auth_model was OTP." } }, { "name": "Charge with Pay with Bank", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\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}" }, "url": { "raw": "{{baseUrl}}/charge/pay-with-bank", "host": ["{{baseUrl}}"], "path": ["charge", "pay-with-bank"] }, "description": "Initiates a Pay with Bank (Instant EFT / direct debit) charge and returns a redirect URL." } }, { "name": "List Pay with Bank banks", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/charge/pay-with-bank/banks", "host": ["{{baseUrl}}"], "path": ["charge", "pay-with-bank", "banks"] }, "description": "Lists banks supported for Pay with Bank (Instant EFT)." } }, { "name": "Verify / query a charge", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/charges/:reference", "host": ["{{baseUrl}}"], "path": ["charges", ":reference"], "variable": [{ "key": "reference", "value": "" }] }, "description": "Retrieves the current status and details of a charge by its payment reference." } } ] }, { "name": "Payouts", "item": [ { "name": "Request a single payout", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\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}" }, "url": { "raw": "{{baseUrl}}/transactions/disburse", "host": ["{{baseUrl}}"], "path": ["transactions", "disburse"] }, "description": "Disburses funds from your balance to a single bank account or mobile money wallet." } }, { "name": "Request a bulk payout", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"batch_reference\": \"batch-001\",\n \"currency\": \"NGN\",\n \"merchant_bears_cost\": false,\n \"payouts\": [ {}, {} ]\n}" }, "url": { "raw": "{{baseUrl}}/transactions/disburse/bulk", "host": ["{{baseUrl}}"], "path": ["transactions", "disburse", "bulk"] }, "description": "Disburses to multiple destinations in one batch (minimum 2 payouts)." } }, { "name": "Request a remittance payout", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"reference\": \"rem-ref-001\",\n \"amount\": 100,\n \"currency\": \"USD\",\n \"destination\": {}\n}" }, "url": { "raw": "{{baseUrl}}/transactions/disburse/remittance", "host": ["{{baseUrl}}"], "path": ["transactions", "disburse", "remittance"] }, "description": "Disburses a cross-border remittance payout." } }, { "name": "Fetch payout history", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/payouts?page=1&limit=20", "host": ["{{baseUrl}}"], "path": ["payouts"], "query": [{ "key": "page", "value": "1" }, { "key": "limit", "value": "20" }] }, "description": "Retrieves all payout transactions from your account (secret key auth)." } }, { "name": "Check payout availability", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/payouts/availability", "host": ["{{baseUrl}}"], "path": ["payouts", "availability"] }, "description": "Returns whether payouts are currently available for a destination." } } ] }, { "name": "Virtual Bank Accounts", "item": [ { "name": "Create a virtual bank account", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\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}" }, "url": { "raw": "{{baseUrl}}/virtual-bank-account", "host": ["{{baseUrl}}"], "path": ["virtual-bank-account"] }, "description": "Creates a dedicated NGN or USD virtual bank account tied to a customer." } }, { "name": "Retrieve a virtual bank account", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/virtual-bank-account/:accountReference", "host": ["{{baseUrl}}"], "path": ["virtual-bank-account", ":accountReference"], "variable": [{ "key": "accountReference", "value": "" }] }, "description": "Retrieves a virtual bank account by its account reference." } }, { "name": "Fetch virtual bank account transactions", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/virtual-bank-account/transactions?account_number=0000000000", "host": ["{{baseUrl}}"], "path": ["virtual-bank-account", "transactions"], "query": [{ "key": "account_number", "value": "0000000000" }] }, "description": "Retrieves the transactions that funded a virtual bank account." } } ] }, { "name": "Balances", "item": [ { "name": "Retrieve balances", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/balances", "host": ["{{baseUrl}}"], "path": ["balances"] }, "description": "Returns available and pending balances across supported currencies (secret key auth)." } } ] }, { "name": "Refunds", "item": [ { "name": "Initiate a refund", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"reference\": \"refund-ref-001\",\n \"transaction_reference\": \"KPY-...\",\n \"reason\": \"Customer request\"\n}" }, "url": { "raw": "{{baseUrl}}/refunds/initiate", "host": ["{{baseUrl}}"], "path": ["refunds", "initiate"] }, "description": "Initiates a full or partial refund for a completed pay-in transaction." } }, { "name": "Retrieve a refund", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/refunds/:reference", "host": ["{{baseUrl}}"], "path": ["refunds", ":reference"], "variable": [{ "key": "reference", "value": "" }] }, "description": "Retrieves the details of a refund by its reference." } }, { "name": "List refunds", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/refunds?page=1&limit=20", "host": ["{{baseUrl}}"], "path": ["refunds"], "query": [{ "key": "page", "value": "1" }, { "key": "limit", "value": "20" }] }, "description": "Lists refunds within a specified time period." } } ] }, { "name": "Currency Conversion", "item": [ { "name": "Get exchange rate", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"from_currency\": \"USD\",\n \"to_currency\": \"NGN\",\n \"amount\": 100\n}" }, "url": { "raw": "{{baseUrl}}/conversions/rates", "host": ["{{baseUrl}}"], "path": ["conversions", "rates"] }, "description": "Returns the latest exchange rate for a currency pair and amount." } }, { "name": "Initiate a currency conversion", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"reference\": \"conv-ref-001\",\n \"from_currency\": \"USD\",\n \"to_currency\": \"NGN\",\n \"amount\": 100\n}" }, "url": { "raw": "{{baseUrl}}/conversions", "host": ["{{baseUrl}}"], "path": ["conversions"] }, "description": "Converts funds between your multi-currency balances at the quoted rate." } }, { "name": "Retrieve a conversion", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/conversions/:reference", "host": ["{{baseUrl}}"], "path": ["conversions", ":reference"], "variable": [{ "key": "reference", "value": "" }] }, "description": "Retrieves a currency conversion transaction by its reference." } }, { "name": "List conversion history", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/conversions?page=1&limit=20", "host": ["{{baseUrl}}"], "path": ["conversions"], "query": [{ "key": "page", "value": "1" }, { "key": "limit", "value": "20" }] }, "description": "Retrieves currency conversion transactions within a given period." } } ] }, { "name": "Misc", "item": [ { "name": "List banks", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/misc/banks?countryCode=NG", "host": ["{{baseUrl}}"], "path": ["misc", "banks"], "query": [{ "key": "countryCode", "value": "NG" }] }, "description": "Lists supported banks and bank codes for a country." } }, { "name": "Resolve a bank account", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"bank\": \"044\",\n \"account\": \"0000000000\",\n \"currency\": \"NGN\"\n}" }, "url": { "raw": "{{baseUrl}}/misc/banks/resolve", "host": ["{{baseUrl}}"], "path": ["misc", "banks", "resolve"] }, "description": "Verifies a destination bank account and returns the resolved account holder name." } }, { "name": "List mobile money operators", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/misc/mobile-money?countryCode=KE", "host": ["{{baseUrl}}"], "path": ["misc", "mobile-money"], "query": [{ "key": "countryCode", "value": "KE" }] }, "description": "Lists supported mobile money operators and slugs for a country." } }, { "name": "Resolve a mobile money number", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"mobile_money\": { \"number\": \"254700000000\" },\n \"currency\": \"KES\"\n}" }, "url": { "raw": "{{baseUrl}}/misc/mobile-money/resolve", "host": ["{{baseUrl}}"], "path": ["misc", "mobile-money", "resolve"] }, "description": "Verifies a mobile money account and returns the resolved holder name." } }, { "name": "Get payout payment purposes by country", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/misc/payout-payment-purpose-by-country-code/:countryCode", "host": ["{{baseUrl}}"], "path": ["misc", "payout-payment-purpose-by-country-code", ":countryCode"], "variable": [{ "key": "countryCode", "value": "US" }] }, "description": "Returns accepted payout payment-purpose values for a country." } }, { "name": "Get supported payout countries by currency", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/misc/payout-countries-by-currency-code/:currencyCode", "host": ["{{baseUrl}}"], "path": ["misc", "payout-countries-by-currency-code", ":currencyCode"], "variable": [{ "key": "currencyCode", "value": "USD" }] }, "description": "Returns countries with supported banks under a given currency." } } ] } ] }