Anakalice
For developers

Build your payment integration once.

Use the Anakalice API to create payments, receive payment updates, manage refunds and work with connected payment providers through one interface.

Create a payment
curl https://api.anakalice.com/v1/payments \
  -H "Authorization: Bearer sk_test_..." \
  -H "Idempotency-Key: order_10432" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 150000,
    "currency": "NGN",
    "customer_email": "buyer@example.com",
    "merchant_reference": "order_10432"
  }'
201 Created
{
  "payment": {
    "id": "akl_9f2c...",
    "status": "CREATED",
    "amount": 150000,
    "currency": "NGN",
    "provider": "your-provider",
    "checkout_url": "https://checkout.provider.com/...",
    "merchant_reference": "order_10432",
    "created_at": "2026-08-28T12:00:00.000Z"
  }
}
For developers

Everything you need, nothing you do not.

Authentication

Bearer secret keys, separated by environment. Test keys never touch live data. Keys are shown once and can be rotated or revoked.

Idempotency

Send an Idempotency-Key on creates. Repeating a request returns the original result instead of creating a duplicate.

Payments

Create a payment and receive a hosted checkout URL. Track it through a formal state model as provider events arrive.

Webhooks

Signed with HMAC-SHA256 over the exact raw body, delivered durably with retries and a dead-letter path, and identified by a stable event id.

Refunds

Full or partial, idempotent, and marked settled only on the provider's confirmation.

Sandbox

A full test environment. Build and integrate end to end before anything touches live money.

Webhooks

Verify once, trust every event.

Inbound provider webhooks are verified and de-duplicated by Anakalice. Your endpoint verifies our signature the same way.

verify.js
// Verify an inbound Anakalice webhook (Node)
import crypto from "node:crypto";

const signature = req.headers["x-anakalice-signature"];
const expected = crypto
  .createHmac("sha256", endpointSecret)
  .update(rawBody)
  .digest("hex");

if (signature !== expected) return res.status(400).end();
// de-duplicate on X-Anakalice-Event-ID, then process
Endpoints

A small, predictable surface.

POST/v1/paymentsCreate a payment
GET/v1/payments/:idRetrieve a payment
POST/v1/payments/:id/refundsCreate a refund
GET/v1/payments/:id/refundsList refunds
POST/v1/customersCreate a customer
GET/v1/providersList providers and capabilities

Amounts are integers in the currency's minor units. See the full reference in the docs.

Start with the sandbox.

Create an account, get test keys, and make your first payment.