How it works
1
Kravata enables Go Network for your company
Request it in Company sign-up under Products that require Kravata. Kravata reviews the request and enables it. Ask your Kravata point of contact which Go account to send to.
2
You send the settlement
From your Go Network account, create a settlement to Kravata’s Go account with one stablecoin transfer and put the payment instructions in the settlement notes as a JSON object (see Notes fields). Authorize the settlement on your side: Kravata waits for your authorization and rejects the payment if it does not arrive in time.
3
Kravata checks the notes and the people
Kravata validates the notes and registers the ordering customer (who sends the money) and the beneficiary (who receives the COP), if they do not exist yet. Both must pass KYC. While KYC is pending, the payment waits.
4
Kravata checks the payout destination
The Bre-B key or the bank account must exist and belong to the beneficiary.
5
Kravata creates the off-ramp in COP
When the checks pass, Kravata accepts the settlement and creates the off-ramp. Once the funds are settled, the COP payout is made to the beneficiary.
6
Kravata answers
Kravata sends you a response settlement with a receipt or a rejection, matched to your payment by
end_to_end_id.Send exactly one asset transfer per settlement, in an asset Kravata accepts for your company. Any other settlement is rejected with
UNSUPPORTED_ASSET.Quote and rate
quote_id is optional. If you send it, it must be a valid quote UUID issued to your company and still valid, and the off-ramp uses that quote. If it is not valid or has expired, the payment is rejected with QUOTE_EXPIRED_OR_MISMATCH. If you leave it out, Kravata creates the off-ramp without a pre-agreed quote. The receipt always shows the amount paid and the resulting rate.
Notes fields
The notes must be a JSON object (a JSON string). Keys are lowercase with underscores.
Names are split by Spanish convention when the first name and surname fields are missing:
Ana Pérez gives first name Ana and surname Pérez; Juan Carlos Pérez Gómez gives Juan and Pérez. Send the explicit fields when the name does not follow that convention.
Document types
If you leave out
*_customer_id_type, Kravata uses the type written in front of the number (for example CC129876528). If there is none, it uses DNI for the ordering customer and CC for the beneficiary. If the prefix and the type field disagree, the message is invalid. A CC or NIT number with letters is also invalid.
Payout destination
Bre-B key (default)
The payout goes to a Bre-B key whenbeneficiary_account_type is absent or has a Bre-B value: BREB, BRE-B, LLAVE, LLAVE_BREB or KEY. Put the key in beneficiary_bank_account. The key must exist and belong to the beneficiary.
Bank transfer
The payout is a bank transfer whenbeneficiary_account_type is SAVINGS or CHECKING (also accepted: AHORROS and CORRIENTE). In that case:
beneficiary_bank_codeis required. See Bank codes.9999is refused as a bank code: it is the Bre-B entry of the catalog, not a bank. For a Bre-B payout, leavebeneficiary_account_typeout.beneficiary_bank_accountis the account number, digits only. Spaces and dashes are removed before validating.- The account must belong to the beneficiary: the holder is checked against the beneficiary’s document.
beneficiary_account_type value makes the message invalid.
Bank codes
Take thecode of the bank from Get Banks (GET /api/v1/admin/banks, default type=cashout) of the Stack API, in the environment you are using.
- Use the
code, not the numericid. - Banks that are not active are not accepted.
- A code that is not in the list is rejected with
BANK_NOT_SUPPORTED.
The response you receive
Kravata sends one response settlement per payment, with a small fixed transfer and a JSON message in its notes. Thenotes text is machine readable: received=<amount> <currency>; ref=<reference>; ramp=<id> for a receipt and rejected=<reason>; ref=<reference> for a rejection. Match the response to your payment with end_to_end_id.
Receipt
Sent when the COP payout is completed.Rejection
Sent when the payment cannot be completed. Nothing is credited to the beneficiary, sodestination_amount is 0.00.
end_to_end_id can be used again.
Rejection reasons
Thereason is a fixed code. It never includes details about the people involved.
Payments that need a person at Kravata, for example a manual compliance review, stay pending until they are resolved and you receive the response afterwards.

