Quick Start
Create your first payment, verify the status flow, and prepare for webhook-based production usage.
Introduction
This guide walks through the shortest credible Genuka Pay integration path:
- retrieve your secret key
- create a payment
- check the resulting status
- configure a webhook endpoint
- prepare the integration for production
Get Credentials
Retrieve and manage your application secret key from the dashboard.
Create a Payment
Start with a minimal payment request in sandbox mode.
Track Status
Validate how your backend will observe transaction state changes.
Configure Webhooks
Replace production polling with asynchronous event delivery.
Step 1: Retrieve Your Secret Key
Start in the dashboard, not with a raw API endpoint.
Open the API Keys page from the dashboard.
From there, your team can:
- reveal the current
secret_key - copy credentials securely
- rotate the key when needed
- inspect recent key rotation history
Important
Store the secret_key server-side only. Never embed it in browser code,
mobile apps, or public repositories.
Step 2: Create Your First Payment
curl -X POST "{{BASE_URL}}/api/v1/payments" \
-H "X-Public-Key: YOUR_PUBLIC_KEY" \
-H "X-Timestamp: UNIX_TIMESTAMP" \
-H "X-Signature: HMAC_SHA256_SIGNATURE" \
-H "Content-Type: application/json" \
-d '{
"amount": 1000,
"currency": "XAF",
"payer_phone": "+237677001122",
"external_id": "order_10001",
"metadata": {
"description": "Premium subscription"
}
}'The number must be in E.164 format — + followed by the country code. If operator_code is omitted it is derived from the number; a number without a country code is rejected with a 422.
Example Response
{
"data": {
"id": "01HR...",
"amount": 1000,
"currency": "XAF",
"type": "PAYIN",
"track_id": "TRX_01HR...",
"status": "PROCESSING",
"operator_code": "MTN_MOMO",
"payer_phone": "+237677001122",
"metadata": {
"description": "Premium subscription"
},
"created_at": "2026-04-01T10:00:00Z"
}
}Step 3: Check the Payment Status
curl -X GET "{{BASE_URL}}/api/v1/payments/status/TRX_01HR..." \
-H "X-Public-Key: YOUR_PUBLIC_KEY" \
-H "X-Timestamp: UNIX_TIMESTAMP" \
-H "X-Signature: HMAC_SHA256_SIGNATURE"Typical fields returned here include:
transaction_idtrack_idstatusprovider_statusamountcurrencyupdated_at
Step 4: Configure a Webhook Endpoint
Do not rely only on polling once you move beyond initial tests.
Open the Webhooks page from the dashboard.
Provisioning by API is still available for infrastructure or internal tooling:
curl -X POST "{{BASE_URL}}/api/v1/webhook-endpoints" \
-H "X-Public-Key: YOUR_PUBLIC_KEY" \
-H "X-Timestamp: UNIX_TIMESTAMP" \
-H "X-Signature: HMAC_SHA256_SIGNATURE" \
-H "Content-Type: application/json" \
-d '{
"name": "Production backend",
"target_url": "https://merchant.example.com/webhooks/genuka",
"events": ["transaction.success", "transaction.failed"],
"is_active": true
}'Production recommendation
In production, treat webhook delivery as the source of truth for final status changes, and use status polling only as a recovery or reconciliation mechanism.
Don't want to build the form?
A hosted payment link collects payments without you writing any interface, bank card included.
Step 5: Prepare for Live Operations
Before you enable real traffic:
- complete your KYC flow
- verify the countries and operators you target
- verify the fees applied to your account
- keep your secret key in a secrets manager or environment store
- configure production webhooks
- start with low-risk amounts and observe end-to-end settlement behavior
Next Steps
How is this guide?
Last updated on