Kora
The new standard for payments across Africa
Supports in this guide: Payments, Payouts
Provider website: korahq.com
What you need to do for start processing transactions (brief summary)
- Choose account type
- Get your credentials (from Kora)
- Connect in Dashboard
- Send an API request
Choose account type
Kora can be connected in different ways (depending on your needs):
- If you do H2H card payments (card data sent directly) -> choose H2H Merchant account
- If you do local payment methods (bank transfer, mobile money) or payouts -> choose Provider account
If you're not sure which one to use, confirm with your Corefy account manager.
Prerequisites: get from Kora
Submit a connection request via korahq.com/contact-us or contact your Kora account manager directly to get your account verified and receive the following credentials.
For H2H Merchant account:
- Public Key -> Corefy field
public_key. - Secret Key -> Corefy field
secret_key. - Encryption Key -> Corefy field
encryption_key-> used to encrypt card data before it's sent to Kora.
For Provider account:
- Public Key -> Corefy field
public_key. - Secret Key -> Corefy field
secret_key.
Payments processing (connect H2H Merchant account, create payment-invoice)
Connect H2H Merchant account in Corefy Dashboard
Step 1 - Open connection form
Open Kora in the provider directory and press Connect at Kora Provider Overview page in the New connection section. Choose H2H Merchant account.
Step 2 - Fill in fields and select settings
- Public Key
- Secret Key
- Encryption Key
- Test Mode -> (enable if you are using sandbox credentials)
Choose Currency and Features. ZAR, KES, NGN, and GHS are confirmed; check with your Corefy account manager which are enabled for your account.
Success
You have connected Kora H2H Merchant account!
First request to Corefy API (MIN)
What it does: creates a payment-invoice; card data itself is collected and submitted separately by Corefy's checkout/SDK layer, not as part of this request.
Payment - MIN
POST /api/payment-invoices
{
"data": {
"type": "payment-invoice",
"attributes": {
"reference_id": "8e3dbbb0-17af-4c9a-bedb-93bdac6900a2",
"service": "payment_card_ngn_hpp",
"currency": "NGN",
"amount": 10
}
}
}
Payment - MAX
POST /api/payment-invoices
{
"data": {
"type": "payment-invoice",
"attributes": {
"reference_id": "6795502c-e27d-4d07-85e0-93245aab9a3f",
"service": "payment_card_ngn_hpp",
"currency": "NGN",
"amount": 10,
"customer": {
"reference_id": "cus_123",
"name": "John Smith",
"email": "johnsmith@gmail.com",
"phone": "+23414524688",
"address": {
"country": "NG",
"region": "Lagos",
"city": "Lekki",
"full_address": "Osapa, Lekki",
"post_code": "101010"
}
}
}
}
}
customer is entirely optional - there are no Constants on this flow, so anything you don't send is simply left out of the request to Kora.
Important
Some cards (common with Nigerian-issued cards) require an extra confirmation step after the initial sale - OTP, card PIN, AVS, or a card-enrollment check. Corefy's checkout/SDK layer handles this automatically; no extra fields are needed from you for it.
Extended request (MAX)
Why add extra fields (typical reasons): - Provide additional customer details for compliance/reconciliation - Positively influence conversion rate - Include optional fields required by your specific flow
Options
Options are configured on the Corefy side and affect how Corefy builds provider requests or processes responses.
Currently available options (1)
ignore_callback- tells Corefy to disregard Kora's own callback notifications entirely.
ignore_callback
What it does: when enabled, Corefy ignores callback notifications sent by Kora for this connection, relying on status checks/reconciliation instead.
When to use: enable only if instructed by Kora or your Corefy account manager - typically needed for cascading/reconciliation setups.
Default: false
Allowed values: true / false
Payments processing (connect Provider account, create payment-invoice)
Connect Provider account in Corefy Dashboard
Step 1 - Open connection form
Open Kora in the provider directory and press Connect at Kora Provider Overview page in the New connection section. Choose Provider account.
Step 2 - Fill in fields and select settings
- Public Key
- Secret Key
- Test Mode -> (enable if you are using sandbox credentials)
Choose Currency / Features - card, bank transfer, and mobile money are each available in NGN, GHS, KES, and ZAR (12 services total) - see Additional info.
Success
You have connected Kora Provider account!
First request to Corefy API (MIN)
What it does: creates a payment-invoice and returns a redirect link to Kora's hosted payment page.
Payment - MIN
POST /api/payment-invoices
{
"data": {
"type": "payment-invoice",
"attributes": {
"reference_id": "8e3dbbb0-17af-4c9a-bedb-93bdac6900a2",
"service": "mobile_ngn_hpp",
"currency": "NGN",
"amount": 10
}
}
}
Payment - MAX
POST /api/payment-invoices
{
"data": {
"type": "payment-invoice",
"attributes": {
"reference_id": "6795502c-e27d-4d07-85e0-93245aab9a3f",
"service": "mobile_ngn_hpp",
"currency": "NGN",
"amount": 10,
"customer": {
"reference_id": "cus_123",
"name": "John Smith",
"email": "johnsmith@gmail.com"
}
}
}
}
customer.name/customer.email are optional and fall back to the Constants below. mobile_ngn_hpp lets the customer pick from Kora's available Nigerian mobile money channels (including OPay and PalmPay) on the hosted page - this connector also supports payment_card_<ccy>_hpp and bank_transfer_<ccy>_hpp (same optional customer), for ccy in ngn/ghs/kes/zar - see Additional info for the full list.
Extended request (MAX)
Why add extra fields (typical reasons): - Provide additional customer details for compliance/reconciliation - Positively influence conversion rate - Include optional fields required by your specific flow
Options
Options are configured on the Corefy side and affect how Corefy builds provider requests or processes responses.
Currently available options (1)
ignore_callback- tells Corefy to disregard Kora's own callback notifications entirely, for this service. Available on every Payment service on this flow.
ignore_callback
What it does: when enabled, Corefy ignores callback notifications sent by Kora for this connection/service and relies on status checks/reconciliation instead.
When to use: enable only if instructed by Kora or your Corefy account manager.
Default: false
Allowed values: true / false
Constants (fallback fields)
Constants are static values that Corefy can send to the provider instead of dynamic data from your API request, when those fields are missing in the request. Available on every Payment service on this flow.
Priority (predictable rule): 1. If a value is present in the request -> Corefy uses the request value 2. Else if the constant is set -> Corefy uses the constant 3. Else -> provider may reject the request or apply its defaults (depends on provider)
Currently available constants (constant -> Corefy API field)
NAME->customer.nameEMAIL->customer.email
Payouts processing (connect Provider account, create payout-invoice)
Connect Provider account in Corefy Dashboard
Uses the same Provider account connection as Payments above - one connection covers both directions, there's nothing extra to fill in for payouts specifically.
First request to Corefy API (MIN)
What it does: creates a payout-invoice and sends funds to a bank account or a mobile money wallet.
Payout - MIN (generic bank transfer)
POST /api/payout-invoices
{
"data": {
"type": "payout-invoice",
"attributes": {
"reference_id": "0dde9e79-2c64-4703-adaf-93d710633401",
"service": "bank_transfer_ngn",
"currency": "NGN",
"amount": 10000,
"customer": {
"reference_id": "cus_123",
"name": "John Smith",
"email": "johnsmith@gmail.com"
},
"fields": {
"bank_code": "058",
"account_number": "0123456789"
}
}
}
}
fields.bank_code and fields.account_number are required for the generic bank_transfer_<ccy> service. For a named Nigerian bank service instead (e.g. guaranty_trust_bank_ngn - see Additional info for the full list), fields.bank_code isn't needed - Corefy already knows which bank it is from the service code, so only fields.account_number is required.
Payout - MIN (mobile money)
POST /api/payout-invoices
{
"data": {
"type": "payout-invoice",
"attributes": {
"reference_id": "3c6d2f8e-8a2a-4e7a-9b1a-2f6a7b9c0d1e",
"service": "safaricom_kes",
"currency": "KES",
"amount": 1000,
"customer": {
"reference_id": "cus_123",
"name": "John Smith",
"email": "johnsmith@gmail.com",
"phone": "+254712345678"
}
}
}
}
Mobile money payouts need a phone number - send it as customer.phone, or as fields.phone if you'd rather keep it out of customer.
Important
customer.email is required on every payout service (Kora rejects the payout as "Customer email is required" otherwise). On the generic bank transfer services, every named Nigerian bank service, and most Kenya/Ghana mobile money services, a missing customer.email can instead be covered by the EMAIL Constant below. On the South African bank services and the Cameroon/Côte d'Ivoire/Egypt mobile money services there's no such fallback, so customer.email must be sent directly on every request.
Extended request (MAX)
Why add extra fields (typical reasons): - Provide additional customer details for compliance/reconciliation - Positively influence conversion rate - Include optional fields required by your specific flow
Options
Options are configured on the Corefy side and affect how Corefy builds provider requests or processes responses.
Currently available options (1)
verify_bank_account- validates the beneficiary's bank account with Kora before submitting the payout.
verify_bank_account
What it does: when enabled, Corefy first asks Kora to verify fields.bank_code/fields.account_number are a valid, resolvable account; if Kora reports the account as invalid, the payout fails immediately instead of being submitted.
When to use: enable it to catch bad beneficiary details before money moves, if your account manager confirms Kora's verification is enabled for your account.
Default: false
Allowed values: true / false
Available on the generic bank_transfer_<ccy> services and on every named Nigerian bank service - not on mobile money or South African bank payouts.
Constants (fallback fields)
Constants are static values that Corefy can send to the provider instead of dynamic data from your API request, when those fields are missing in the request. Available on the generic bank transfer services, every named Nigerian bank service, and most Kenya/Ghana mobile money services - not on South African bank payouts or Cameroon/Côte d'Ivoire/Egypt mobile money payouts.
Priority (predictable rule): 1. If a value is present in the request -> Corefy uses the request value 2. Else if the constant is set -> Corefy uses the constant 3. Else -> provider may reject the request or apply its defaults (depends on provider)
Currently available constants (constant -> Corefy API field)
NAME->customer.nameEMAIL->customer.email
Additional info
- Callback routing. For H2H Merchant account, register your webhook with Kora in its own back-office. For Provider account (Payments and Payouts), callback routing is handled automatically - Corefy generates the callback URL per transaction.
-
Local payment methods available on the Payments (Provider account) flow (actual availability depends on what's enabled for your account), for each of
NGN/GHS/KES/ZAR:Method Service code pattern Card payment_card_<ccy>_hppBank transfer bank_transfer_<ccy>_hppMobile money mobile_<ccy>_hpp- lets the customer pick a channel (e.g. Nigeria: OPay, PalmPay) on Kora's hosted page -
Local payout methods available on the Payouts (Provider account) flow (actual availability depends on what's enabled for your account):
Country Currency Methods Nigeria NGN Generic bank_transfer_ngn, or a named bank service for any of 26 Nigerian banks (e.g.guaranty_trust_bank_ngn,zenith_bank_ngn,access_bank_nigeria_ngn- ask your account manager for the full list of service codes)Ghana GHS bank_transfer_ghs; mobile money:mtn_ghs,vodafone_ghana_ghs,airtel_money_ghs,airteltigo_ghsKenya KES bank_transfer_kes; mobile money:safaricom_kes,airtel_money_kes,equitel_kes,t_kash_kes,telkom_kenya_kesSouth Africa ZAR Named bank services only (e.g. standard_bank_zar,first_national_bank_zar,absa_bank_zar- 8 banks total)Cameroon XAF Mobile money: mtn_xaf,orange_money_xafCôte d'Ivoire XOF Mobile money: mtn_xof,orange_money_xofEgypt EGP Mobile money: vodafone_egypt_egp,orange_money_egp,etisalat_egp
FAQ / Troubleshooting
- Invalid credentials / auth error -> verify credentials for the selected environment and account type
- H2H payment stuck pending an extra step -> some cards require OTP/PIN/AVS confirmation after the initial sale; this is handled automatically by Corefy's checkout/SDK layer
- Bank payout rejected for invalid account -> enable
verify_bank_accountto catch this before submitting, if available for your account - Currency or service is not supported -> confirm allowed currencies/features in your Kora account and in Corefy
- Not sure which account type to use? -> ask your Corefy account manager
Question
Still looking for help connecting your Kora account? Please contact our support team!