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:
{
"id": "po_1a2b3c4d",
"status": "blocked",
"screening_status": "blocked",
"screening_result": {
"status": "blocked",
"reasons": ["ofac_sdn"]
}
}| Reason | Meaning |
|---|---|
ofac_sdn | The destination matched a sanctions list. |
internal_blacklist | The 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:
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
blockedandkyb_requiredas compliance outcomes, not transient errors — a human decision is needed, so never auto-retry them. - Handle
limit_exceededby spacing out or splitting payouts, or by requesting higher limits. - Handle
sanctions_unavailableas transient — retry later. - Keep destination data clean: screening acts on the exact address you submit.