What happened
You submitted a payout withpurpose: intercompany but the destination has no whitelist proof for this customer. This returns HTTP 422 with error code RECIPIENT_NOT_WHITELISTED.
Which proof the payout needs depends on the destination:
The two crypto rows are not interchangeable.
attestation.custody names who owns the destination, so "self" against a group-entity whitelist entry is refused, and "third_party" against a self_custody registered address is refused.
Common causes
- No registration submitted — the destination has never been registered for this customer
- Registration still in review — a registration exists but its status is
pending_review, notregistered - Registration rejected or revoked — the entry was declined or cancelled and no active replacement exists
- Wrong
attestation.custodyon a crypto payout — a registration exists, but the payout declares the other owner. Send"self"against aself_custodyregistered address and"third_party"against agroup_entitywhitelist recipient
Recovery
1. Check existing registrations for the customerstatus: registered whose coordinates match the destination — accountNumber and routingNumber on a us entry, iban or bic + accountNumber on a swift entry, iban on a sepa entry, chain + address on a crypto entry. For the customer’s own wallet, check GET /v2/customers/:id/wallets/registered-addresses instead.
2. If no registration exists, submit one
Upload evidence documents first (ownership chart, inter-company agreement, or bank statement):
Registering a group entity's crypto wallet instead
Registering a group entity's crypto wallet instead
Same endpoint, same evidence documents, same review. The
crypto rail
identifies the wallet by chain plus address, and relationship must be
group_entity — self is rejected, because your customer’s own wallet
belongs in the registered addresses
register.pending_review. Conduit will notify you via webhook when the review is complete:
Do not poll for status. Listen for the
whitelist_recipient.registered or whitelist_recipient.rejected webhook events.registered, resubmit the payout
Resubmitting a crypto payout to a group entity
Resubmitting a crypto payout to a group entity
The whitelist entry gates the destination; the payout still carries the full
recipient inline.
attestation.custody must be third_party, and a
third_party crypto recipient carries the identity fields for its type
(legalName + countryOfRegistration for a business, firstName +
lastName + countryOfCitizenship for an individual).Resubmit under the same
Idempotency-Key as the rejected attempt. The 422 is returned before any payout is created, so the key is safe to reuse — and reusing it is what prevents a duplicate: if a later response is lost, replaying the same key returns the one accepted payout instead of creating a second one. Rotating to a new key on resubmit risks a double payout.Prevention
- Register recipients ahead of time — whitelist registration requires compliance review; submit the registration well before you intend to send funds
- Listen for
whitelist_recipient.registered— trigger your payout flow from the webhook, not from a timer or poll - Track registration state in your system — maintain a local map of the destination coordinates (
(customerId, accountNumber)for a bank account,(customerId, chain, address)for a wallet) →whitelistRecipientIdand its status, so you can gate payout submission onregistered - Pin
attestation.custodyto the register you used —"self"for aself_custodyregistered address,"third_party"for agroup_entitycrypto whitelist recipient
Related endpoints
- POST /v2/customers/:id/whitelist-recipients — register a recipient
- GET /v2/customers/:id/whitelist-recipients — list recipients and check status
- POST /v2/payouts — submit a payout
- Registered Addresses — register the customer’s own wallet address