EUR or USD must target a saved beneficiary. For other networks it is optional.
Managing beneficiaries needs a key with the payouts:write scope.
Individual or company
ChooseentityType when you create the beneficiary. You can’t change it afterwards.
1. Create the beneficiary
accountsholds at most one account perkindandcurrency.emailis required as soon as the beneficiary has anEURorUSDbank account: the verification link is sent there.- An email can be verified as an individual or as a company, not both. Using the same email for the other type returns
422 email_used_by_other_entity_type: give the company its own address. - A company sends its documents in
documents, each as{ kind, filename, mimeType, base64 }. The request body can be up to 50 MB.
id: you pass it as counterpartyId when you create a payout.
2. Approval and verification
A new beneficiary starts withapprovalStatus: "PENDING". You can pay it once it is APPROVED.
If the beneficiary has an EUR or USD bank account, we email them a link from our payment partner. They use it to:
- Verify their identity (individual) or their company and its beneficial owners (company).
- Accept our partner’s terms of service.
EUR and USD accounts can be paid only once both steps are done. Their other accounts follow the usual approval.
The beneficiary’s verification object tells you where they are:
nameMismatch: true means the same email was already verified under another name. KryptaPay checks it is the same person or company before the verification applies.
A beneficiary saved before verification existed has
verification: null. Verification doesn’t block their payouts until you send them the link with the call below.3. Resend the link
If the beneficiary lost the email, send the link again:Editing a beneficiary
PATCH /v1/counterparties/{id} updates a beneficiary. Any change sends it back to PENDING until KryptaPay reviews it again. Changing its email starts a new verification at the new address.
Paying a beneficiary
Pass the beneficiary’sid as counterpartyId, and the account details you saved for it:
BANK_EUR and BANK_USD, recipient.iban (or recipient.accountNumber) must be the beneficiary’s saved account in that currency. Spaces and letter case don’t matter. See Send payouts for the errors.
In the sandbox, a beneficiary doesn’t need approval or verification to be paid. counterpartyId and the matching account are still required for EUR and USD, so your integration behaves the same in production.