Keepable docs
Sender API

Going live

Moving from the sandbox to production means clearing three gates (an approved KYB, an accepted Sender Agreement, and a funded prepaid wallet) before you can mint a live key.

The sandbox needs nothing but an email. Production is gated, because a live send reaches a real, identity-anchored recipient. Three requirements stand between a sandbox tenant and its first kpk_live_ key:

  1. KYB approval: your organisation passes a know-your-business check.
  2. Sender Agreement: you accept the current terms.
  3. A funded wallet: a live send debits prepaid credit.

You can build and test everything in the sandbox while you work through these.

1. Clear KYB approval

Submit your registered business details and a director's identity, then track the review to a decision. This is covered in full under Sender approval (KYB). Approval flips your tenant's status to approved.

2. Accept the Sender Agreement

Check the current agreement version and whether your tenant has accepted it:

curl https://api.keepable.co/sender/agreement \
  -H "Authorization: Bearer $KEEPABLE_TOKEN" \
  -H "Keepable-Version: 2026-05-24"
{ "current_version": "2026-07-01", "accepted": false }

Accept it with a single call (idempotent: re-accepting the current version is a no-op):

curl -X POST https://api.keepable.co/sender/agreement/accept \
  -H "Authorization: Bearer $KEEPABLE_TOKEN" \
  -H "Keepable-Version: 2026-05-24" \
  -H "Idempotency-Key: $(uuidgen)"
{ "version": "2026-07-01", "accepted_at": "2026-07-01T09:00:00Z" }

If we revise the agreement, current_version changes and you'll need to accept again before minting a new live key. Existing keys keep working.

3. Fund the wallet

A live send debits a small prepaid charge; an empty balance blocks the send with 402 Payment Required (code: insufficient_funds). Check your balance:

curl https://api.keepable.co/sender/wallet \
  -H "Authorization: Bearer $KEEPABLE_TOKEN" \
  -H "Keepable-Version: 2026-05-24"
{ "tenant_id": "ten_01HXP", "balance_kobo": 0, "currency": "NGN", "mode": "live" }

Amounts are in kobo (minor units of NGN). Top up, then review movements any time through the ledger:

curl https://api.keepable.co/sender/wallet/ledger \
  -H "Authorization: Bearer $KEEPABLE_TOKEN" \
  -H "Keepable-Version: 2026-05-24"

Each ledger entry is a credit (a top-up) or a debit (a send), always positive, with the running balance_after_kobo. Sandbox sends never appear here; they are free.

Mint your live key

Once your tenant is approved, the agreement is accepted, and the wallet is funded, create a live key from the portal (or the API). A live key create is refused with 403 (code: go_live_incomplete) until all three gates are clear; the message names what's still outstanding.

The new key is prefixed kpk_live_. Swap it in, and the same calls you tested in the sandbox now reach real recipients. See Environments for switching cleanly between the two.