Compliance & screening

Every payout is screened before it's sent, and live access requires a verified business. Here's what that means for your integration.

Caibo is a regulated money-movement platform, so compliance is built into the payout flow rather than bolted on. Two things gate a live payout: your business must be verified (KYB), and every destination is screened before any funds move.

Screening: what happens before a payout is sent

When you create a payout, the destination address is screened before anything is broadcast on-chain. Screening is in-line and blocking — there is no path where a payout is sent without passing it. If the destination is flagged, the payout becomes blocked and no funds move.

Screening checks the destination against:

  • Sanctions lists — addresses associated with sanctioned entities.
  • An internal blacklist — addresses your platform or Caibo has flagged.

What a blocked payout means

A blocked status means screening stopped the payout. No money left your balance. Retrieving the payout returns a safe screening summary — the outcome and the reason(s) — so you can see why it was blocked, without exposing any raw provider detail:

json
{
  "id": "po_1a2b3c4d",
  "status": "blocked",
  "screening_status": "blocked",
  "screening_result": {
    "status": "blocked",
    "reasons": ["ofac_sdn"]
  }
}
ReasonMeaning
ofac_sdnThe destination matched a sanctions list.
internal_blacklistThe destination is on the internal blacklist.

Do not retry a blocked payout to the same destination — it will block again. Route it to your compliance workflow instead.

In live mode, if screening is temporarily unavailable, the payout is not sent — you'll get a sanctions_unavailable error rather than an unscreened payout. Retry later. This fail-closed behavior is intentional.

KYB: verifying your business for live access

ck_test_ keys work immediately. To create ck_live_ keys and send real payouts, your organization must complete KYB (Know Your Business) and reach verified. Until then, requesting a live key or a live payout returns kyb_required.

Submit KYB from the Business dashboard or via POST /v1/kyb. You provide:

  • Legal name, registration number, and country of incorporation.
  • Beneficial owners (UBOs) — each owner's name, date of birth, ownership percentage, and country. Total ownership can't exceed 100%.
  • Supporting documents, referenced by URL/reference.

KYB moves through unverified → pending → verified (or rejected). You can check status anytime:

bash
curl https://api.caiboglobal.com/v1/kyb \
  -H "X-API-Key: $CAIBO_API_KEY"

Limits

Each organization has payout limits — per-payout, daily, and monthly. A payout that would breach a limit is rejected up front with limit_exceeded (no funds move). Read your current limits from GET /v1/organization. If you need higher limits, contact us.

Separately, the auto-approval limit governs which payouts execute automatically and which pause for manual approval — see Payout lifecycle.

What this means for your integration

  • Handle blocked and kyb_required as compliance outcomes, not transient errors — a human decision is needed, so never auto-retry them.
  • Handle limit_exceeded by spacing out or splitting payouts, or by requesting higher limits.
  • Handle sanctions_unavailable as transient — retry later.
  • Keep destination data clean: screening acts on the exact address you submit.