The Payment Engine for African Commerce
Connekt Pay is a payment orchestration API built by Kufrashe Technologies. It wraps Paynow Zimbabwe so developers and Connekt platforms can accept EcoCash, OneMoney, or hosted Paynow checkout without integrating Paynow directly in every app.
Each merchant gets an API key, transaction ledger, signed webhooks (RACP), and settlement tracking for a transparent revenue split: 98% merchant share / 2% platform fee (default; set via PLATFORM_FEE_PERCENT).
What Connekt Pay is NOT
Connekt Pay is not a bank, e-money issuer, or licensed payment institution. We do not hold customer deposits as a bank would. Funds from payers are collected through Paynow into the platform's Paynow merchant account operated by Kufrashe Technologies.
- We provide API + ledger + webhooks, not a stored-value wallet for end users.
- Merchant payouts (your share, e.g. 98%) are manual disbursements to the EcoCash/OneMoney number on your dashboard after KYC and the T+7 settlement window.
- The platform fee (default 2%) is a toll for infrastructure (API, compliance tracking, support)—not interest or banking revenue.
Why use Connekt Pay instead of Paynow directly?
| Direct Paynow | Connekt Pay |
|---|---|
| One Paynow integration per product | One integration for many merchants/platforms |
| You build auth, multi-tenant keys, dashboards | Per-developer API keys + dashboard included |
| You implement webhooks + idempotency per app | Signed RACP webhooks to your callback_url |
| You track who earned what | Per-transaction merchant_share / platform_fee ledger |
Express checkout still requires correct authemail + phone | Same Paynow rails, validated payloads & phone normalization |
You still need Paynow-capable flows on the payer side. Connekt Pay removes repeated boilerplate for Connekt ecosystem apps and third-party developers.
Money flow: who pays whom
- Payer (customer) approves EcoCash/OneMoney on their phone (or pays on Paynow web).
- Paynow settles to the platform Paynow merchant account (Kufrashe).
- Connekt Pay records: merchant (you),
external_id, amount, fees, status. - On
PAID, your webhook receivesmerchant_shareandplatform_fee(e.g. 98% / 2% at default settings). - After KYC + T+7, operations pays your share to payout_phone on your dashboard (EcoCash/OneMoney).
Register payout details under Dashboard → Payout profile. Set REQUIRE_KYC_FOR_PAYMENTS=true in production to block API payments until KYC is verified.
Who is Connekt Pay for?
Connekt Pay is designed to serve three primary "Actors" in the digital economy:
The Developer
Build standalone stores or apps. Integrate mobile money and cards in minutes using a single API key instead of individual bank integration.
The Platform
Systems like Connekt Ads or Social use Pay as their treasury. It handles revenue splits and settlement tracking.
The Consumer
Get a frictionless checkout experience across any device, supporting both local mobile wallets and international payment methods.
Architecture: The Store Bridge
Connekt Pay operates as a "Settlement Layer" or "Bridge". It doesn't just transfer money; it orchestrates value based on the **RACP (Robust Agent Communication Protocol)** — originally designed for AI & ML Agents that communicate with Connekt Social and its related entities.
- Decoupled Logic: Your app handles the UX; we handle the rails.
- Asynchronous Events: We notify you of status changes via cryptographically signed webhooks.
- Automated Split: Revenue is split per transaction (default 98/2) — developer earnings are calculated and held for settlement.
Precision Authentication
Identity is core to multi-tenancy. Every request must be identified by a platform "Actor" key.
Usage
Include your primary SECRET_KEY in the X-Connekt-Pay-Key header.
X-Connekt-Pay-Key: ck_live_xxxxxxxxxxxxxxKeys are generated automatically upon Merchant Registration.
Authentication States
| Response | Scenario |
|---|---|
200 OK |
Valid key, account active. |
401 Unauthorized |
Key missing or malformed. |
403 Forbidden |
Account suspended or key revoked. |
Initiating Payments
Initiate a transaction for any "external_id" (like an Order ID) on your platform.
Request Schema
| Field | Type | Description |
|---|---|---|
amount | Float | Required. Must be > 0. |
currency | String | Default USD. |
payment_method | String | ecocash | onemoney (PIN prompt, no redirect) or web (Paynow redirect). |
phone | String | Required for mobile money. Customer wallet (077… or +26377…). Your app must supply this—Connekt Pay cannot read the device SIM. |
payer_email | String | Recommended. Paynow authemail for express checkout. Falls back to PAYNOW_MERCHANT_EMAIL. |
callback_url | String | HTTPS URL for signed status webhooks. |
external_id | String | Your order / user / ad unit ID. |
description | String | Line item label sent to Paynow. |
POST /v1/payments { "amount": 10.00, "currency": "USD", "payment_method": "ecocash", "phone": "0771234567", "payer_email": "[email protected]", "external_id": "AD_UNIT_001", "callback_url": "https://yourapp.com/webhooks/connekt-pay" }
Mobile response (ecocash / onemoney)
{
"success": true,
"reference": "a1b2c3d4e5f6",
"status": "PENDING",
"poll_url": "https://www.paynow.co.zw/Interface/CheckPayment/?guid=...",
"instructions": "Check your phone for the mobile money PIN prompt."
}
No redirect_url for mobile methods—the customer approves on their phone.
Poll for status
GET /v1/payments/<reference>?refresh=true or POST /v1/payments/<reference>/poll while waiting for PIN approval.
Transaction statuses
- CREATED — Record created.
- PENDING — Sent to Paynow; awaiting customer action.
- PAID — Confirmed. Webhook sent with
merchant_share/platform_fee. - FAILED — Cancelled or declined.
Common mistakes
- Using
payment_method: "web"when you want a phone PIN prompt. - Omitting
phonefor EcoCash/OneMoney. - Expecting Connekt Pay to read the SIM—pass
phonefrom your app. - Confusing
phone(payer) withpayout_phone(merchant settlement wallet on dashboard).
Webhook Orchestration (RACP)
Payment events follow the **Robust Agent Communication Protocol (RACP)** standard, ensuring secure, verifiable event delivery between autonomous agents, platforms, and our settlement layer.
Standard Payload
{
"event": "payment.completed",
"data": {
"reference": "tx_abc123",
"status": "PAID",
"external_id": "AD_UNIT_001"
}
}
Platform Agnostic Deployment
Connekt Pay is built for maximum portability across Linux, Docker, or any Python 3.10+ environment.
| Step | Action |
|---|---|
| 1. Environment | Set DATABASE_URL and SECRET_KEY. |
| 2. Migration | Run flask db upgrade to apply the multi-tenant schema. |
| 3. Webhook Rail | Set BASE_URL to your public domain. |
Signature Security (Precision)
Integrity is maintained via HMAC-SHA256. Every webhook includes an X-Connekt-Signature header.
Python Implementation
import hmac, hashlib def verify_webhook(payload, secret_key, received_sig): # payload is the raw request body bytes computed_sig = hmac.new( secret_key.encode(), payload, hashlib.sha256 ).hexdigest()
Signature Verification (RACP)
To ensure notifications are authentic, Connekt Pay signs every webhook payload using your RACP Secret. You should verify this signature in your callback handler.
X-Connekt-Pay-Key header for requests, but use your RACP Secret for hash verification.
import hmac
import hashlib
def verify_signature(data, signature, racp_secret):
# Secret from your Dashboard
key = racp_secret.encode('utf-8')
payload = data.encode('utf-8')
expected = hmac.new(key, payload, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature)
const crypto = require('crypto');
function verifySignature(payload, signature, racpSecret) {
const hmac = crypto.createHmac('sha256', racpSecret);
const digest = hmac.update(payload).digest('hex');
return crypto.timingSafeEqual(Buffer.from(digest), Buffer.from(signature));
}
Always verify signatures before processing any state changes in your database.
Mock Mode
For development, set PAYNOW_MODE=MOCK. This creates a simulator environment where you can trigger success events manually to test your business logic transitions.
Settlement & KYC
When a payment is PAID, Connekt Pay computes:
merchant_share— e.g. 98% of gross (100 −PLATFORM_FEE_PERCENT)platform_fee— default 2% platform tollsettlement_status—UNSETTLEDuntil operations pays your dashboardpayout_phone
KYC: Submit legal name + payout wallet in the dashboard. Status: unverified → submitted → verified. Production can require verification before accepting payments.
Payout cycle: T+7 (default) manual disbursement to EcoCash/OneMoney—not instant automatic transfer.