Integrate with iKhokha's mobile POS payment solution for South Africa. Use this skill whenever the user wants to accept card payments via iKhokha, integrate POS capabilities, process mobile payments, manage transaction history, handle refunds, reconcile settlements, build on iKhokha's platform, or work with iKhokha's API and SDKs. Also trigger when the user mentions 'iKhokha', 'mobile POS South Africa', 'iKhokha payments', 'card payments mobile', 'iK Pay', 'iK Pay API', or needs POS payment integration.
iKhokha is South Africa's leading mobile Point of Sale (POS) solution enabling merchants to accept card payments on smartphones and tablets. iKhokha operates as both a hardware-integrated POS system (via Bluetooth-connected card readers) and provides a REST-based iK Pay API for payment link generation and online payment processing. The company serves thousands of South African businesses from micro-merchants to large retailers.
You're building or integrating with:
iKhokha is optimized for the South African market, supporting ZAR transactions, local payment methods (Instant EFT, digital wallets), and PCI DSS compliance.
iKhokha uses a hybrid authentication model:
For REST API (iK Pay API):
Authentication Headers:
IK-AppID: YOUR_APP_ID
ik-sign: HMAC_SHA256_SIGNATURE
Content-Type: application/json
Signature Computation:
The ik-sign header is generated using HMAC-SHA256 with your AppSecret as the key and the request body (JSON-serialized) as the message. Store credentials in environment variables:
export IK_APPID=your_app_id
export IK_APPSECRET=your_app_secret
export IK_ENTITYID=your_entity_id
Base URLs:
| Environment | URL |
|---|---|
| Development/Testing | https://dev.ikhokha.com/api |
| Production | https://api.ikhokha.com/api (inferred — confirm via developer.ikhokha.com) |
⚠️ Production URL not independently verified. The developer portal at
developer.ikhokha.comdid not expose the production base URL in accessible documentation. The production URLhttps://api.ikhokha.com/apifollows the expected pattern but must be confirmed before deploying. Check your iKhokha dashboard under Payments → iK Pay API for the confirmed production endpoint, or contact iKhokha support.
iKhokha operates in two distinct modes:
Hardware POS Mode (Primary): Android SDK integrated with Bluetooth card readers (iK Mover, iK Flyer, iK Shaker). This is the flagship product and requires the iKhokha Android app or custom SDK integration.
REST API Mode (iK Pay API): Limited REST endpoints for payment link generation and online payments. This is secondary and primarily serves e-commerce, invoicing, and remote payment scenarios.
Most production deployments use the hardware + SDK approach, not the REST API alone. If you need real-time, high-volume transaction processing with immediate card acceptance, use the Android SDK with Bluetooth card readers.
Generate a payment link that customers can click to pay online.
POST /paymentLink
Headers:
IK-AppID: YOUR_APP_ID
ik-sign: CALCULATED_HMAC_SHA256
Content-Type: application/json
Request Body:
{
"amount": 19999,
"currency": "ZAR",
"externalTransactionID": "ORDER-12345",
"requesterUrl": "https://yoursite.com",
"description": "Payment for Order 12345",
"entityID": "YOUR_ENTITY_ID",
"callbackUrl": "https://yoursite.com/ikhokha-callback",
"successUrl": "https://yoursite.com/success",
"failureUrl": "https://yoursite.com/failure",
"cancelUrl": "https://yoursite.com/cancel"
}
Response (Success - responseCode 00):
{
"responseCode": "00",
"message": "Payment link created successfully",
"paylinkUrl": "https://ikhokha.com/pay/abc123def456xyz",
"paylinkID": "link_abc123def456xyz",
"externalTransactionID": "ORDER-12345",
"amount": 19999,
"currency": "ZAR",
"expiry": "2025-02-24T23:59:59Z"
}
Response (Error):
{
"responseCode": "01",
"message": "Invalid request parameters",
"externalTransactionID": "ORDER-12345"
}
Important: Amount is in cents (smallest currency unit). R199.99 = 19999 cents.
Retrieve the current status of a payment link.
GET /paymentLink/{paylinkID}
Response (Pending):
{
"responseCode": "00",
"paylinkID": "link_abc123def456xyz",
"externalTransactionID": "ORDER-12345",
"amount": 19999,
"currency": "ZAR",
"status": "pending",
"createdAt": "2025-02-23T10:30:00Z",
"expiryAt": "2025-02-24T23:59:59Z"
}
Response (Paid):
{
"responseCode": "00",
"paylinkID": "link_abc123def456xyz",
"externalTransactionID": "ORDER-12345",
"amount": 19999,
"currency": "ZAR",
"status": "paid",
"transactionID": "txn_abc123def456",
"paymentMethod": "card",
"cardBrand": "VISA",
"cardLastFour": "1111",
"paidAt": "2025-02-23T15:45:00Z"
}
Status Values: pending, paid, expired, cancelled
For mobile app developers, iKhokha provides an Android SDK for direct card machine integration:
// Initialize SDK
iKhokhaPaymentSDK sdk = new iKhokhaPaymentSDK(
context,
appId,
appSecret,
entityId
);
// Connect to card reader via Bluetooth
sdk.connectCardReader("iK_MOVER_001");
// Process payment
PaymentRequest request = new PaymentRequest.Builder()
.amount(19999) // In cents
.currency("ZAR")
.externalTransactionId("ORDER-12345")
.description("Product XYZ Purchase")
.build();
sdk.processPayment(request, new PaymentCallback() {
@Override
public void onSuccess(PaymentResult result) {
String transactionId = result.getTransactionId();
String cardBrand = result.getCardBrand();
// Handle successful payment
}
@Override
public void onFailure(PaymentError error) {
String errorCode = error.getCode();
String errorMessage = error.getMessage();
// Handle declined payment
}
});
Supported Card Machines: iK Mover, iK Flyer, iK Shaker (all Bluetooth-enabled, PCI-PTS certified, EMV Level 1 & 2 compliant)
Supported Payment Methods:
iKhokha sends webhook notifications for payment and link events. Configure your webhook endpoint in the Merchant Dashboard.
Webhook Signature Verification:
Webhooks include authentication headers:
IK-AppID: YOUR_APP_ID
ik-sign: HMAC_SHA256_SIGNATURE
Content-Type: application/json
Verify the ik-sign header using HMAC-SHA256 with your AppSecret and the raw request body.
Webhook Events:
{
"event": "paymentLink.paid",
"timestamp": "2025-02-23T15:45:00Z",
"data": {
"paylinkID": "link_abc123def456xyz",
"externalTransactionID": "ORDER-12345",
"transactionID": "txn_abc123def456",
"amount": 19999,
"currency": "ZAR",
"paymentMethod": "card",
"cardBrand": "VISA",
"cardLastFour": "1111",
"paidAt": "2025-02-23T15:45:00Z"
}
}
Event Types:
paymentLink.created — Payment link generatedpaymentLink.paid — Link payment successfulpaymentLink.failed — Link payment declinedpaymentLink.expired — Link expired without paymentReturn HTTP 200 OK to acknowledge receipt.
POST /api/paymentLinkpaylinkUrl from responsepaylinkUrl (iKhokha's hosted payment page)paymentLink.paid)iKhokha provides pre-built plugins for major platforms:
These plugins handle authentication and payment link creation automatically.
sdk.processPayment(request) with card readerAll iKhokha API responses include a responseCode field:
{
"responseCode": "00",
"message": "Success",
"data": { ... }
}
Common Response Codes:
| Code | Meaning | Action |
|---|---|---|
| 00 | Success | Proceed normally |
| 01 | Invalid request | Check request parameters (amount, currency, dates) |
| 02 | Authentication failed | Verify AppID, AppSecret, ik-sign signature |
| 03 | Insufficient permissions | Check entity ID and account permissions |
| 04 | Resource not found | Verify payment link ID or transaction ID exists |
| 05 | Card declined | Customer should try different card or contact bank |
| 12 | Invalid card | Card number/expiry invalid; ask customer to verify |
| 51 | Insufficient funds | Card has insufficient balance; try different card |
| 91 | Network error | Retry request with exponential backoff |
| 99 | System error | Contact iKhokha support |
| Status | Meaning |
|---|---|
| 200 OK | Request successful |
| 400 Bad Request | Invalid parameters or malformed JSON |
| 401 Unauthorized | Invalid credentials or signature |
| 403 Forbidden | Account/permission issue |
| 404 Not Found | Resource doesn't exist |
| 429 Too Many Requests | Rate limited; implement backoff |
| 500+ Server Error | iKhokha API error; retry with backoff |
Payment Link Creation Fails:
Payment Link Marked as Paid But Not Confirmed:
GET /api/paymentLink/{paylinkID}Hardware Payment Processing Fails (SDK):
PCI DSS Compliance: iKhokha handles card data; minimize your exposure by using payment links or SDK-managed card processing, not manual card entry.
Signature Verification: Always compute and verify HMAC-SHA256 signatures. Never trust unsigned API responses. Use your AppSecret as the HMAC key.
Webhook Validation: Always verify incoming webhooks using the ik-sign header before processing. Prevent webhook spoofing attacks.
Credentials Management: Never commit API credentials to Git. Use environment variables, AWS Secrets Manager, or secure vaults.
HTTPS Only: All API communication must use HTTPS (TLS 1.2+). Reject HTTP requests.
Idempotency: Use externalTransactionID to ensure idempotent requests. iKhokha can deduplicate based on this field if you retry.
Amount Precision: Always use integers for cents (ZAR). Never use floating-point arithmetic. R199.99 = 19999 cents.
Timeout Handling: Network timeouts are possible. Implement retry logic with exponential backoff (e.g., retry after 1s, 2s, 4s, 8s...).
Status Polling: For critical payments, poll the payment link status every few seconds rather than relying solely on webhooks.
Testing: iKhokha test environment uses same API endpoint with test credentials. Test card numbers:
411111111111111140000000000000024012888888881881Bluetooth Pairing: Ensure card reader is powered, in pairing mode, and within range before app startup.
Android Versions: iK Tap on Phone (NFC-based card acceptance) requires Android 9.0+. Hardware readers support Android 5.0+.
Network Dependency: Card processing may work offline (chip reading) but settlement requires internet connectivity.
Receipt Printing: Integrate with compatible Bluetooth or USB receipt printers for customer receipts.
Merchant Fees: iKhokha charges per transaction (2% Instant EFT, 2.85% local cards, 3.25% international cards). Fees vary; check Merchant Dashboard for your rates.
Last Updated: February 2025 Research Sources: iKhokha Official Site, Developer Portal, Help Centre, GitHub Examples