Logo GenukaGenuka Pay
Getting Started

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:

  1. retrieve your secret key
  2. create a payment
  3. check the resulting status
  4. configure a webhook endpoint
  5. prepare the integration for production

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

Create a 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

Payment 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

Fetch Latest 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_id
  • track_id
  • status
  • provider_status
  • amount
  • currency
  • updated_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:

Create a Webhook Endpoint
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