Improved

30 July 2026

⚠️ Deprecations

  1. Sandbox — submitted compliance reviews are no longer auto-approved; you drive them yourself. Outside production, a submitted compliance review now rests at IN_REVIEW instead of auto-approving. Drive it to approved / rejected / error with the simulate-transition endpoint, which produces the same state change and compliance_review_status_changed webhook event a real transition would. If you just want an approved test org without exercising KYC, keep using the bypass endpoint — it is unchanged. See the updated Sandbox Environment Guide for full details on how sandbox compliance reviews work.
  2. The US_STANDARD compliance review tier is now allowlist-only. Creating or submitting a review with the US_STANDARD tier returns 403 unless your parent organization is enrolled. Reach out to [email protected] if you need this tier.

⭐ Enhancements

  1. Failed payouts now tell you why. A blockchain payout that terminally fails before it is broadcast on-chain now carries an errorDescription on the failed payout status, in both the API response and the payout webhook. Previously the webhook carried only { type: 'failed' } with no explanation.
  2. Compliance Reviews — CNH is now its own government ID type. Brazilian driver's licenses are submitted as CNH, with a required front and an optional back (a single combined image is accepted). A driverLicense submission with countryCode: 'BR' is now rejected with "Brazilian driver's licenses must be submitted as a CNH." Applies across the REST submission paths, partial KYC, and compliance-review attestations.
  3. Compliance Reviews — individualSelfiePhoto attestation. Individual reviews for Argentine residents now include a conditional selfie attestation referencing an uploaded document ID, matching the check the legacy verification flow already enforced.
  4. RUC tax ID validations. Expanded country-specific tax ID validation to better support different formats -- we now support specific validations for Ecuadorian, Paraguayan, Panamanian, and Nicaraguan RUCs.

🐛 Bug Fixes

  1. Payout fee estimates now match execution. POST /api/payouts/fees/token-to-fiat and POST /api/payouts/fees/fiat-to-token previously computed fees with a formula that diverged from the create-and-execute path, so the token amount you were told to send could come up short. Both estimates now use the same fee engine execution uses. Response shape is unchanged; only the values change.
  2. Developer fees are rejected for non-child organizations. POST /api/accounts (with developerFees) and PUT /api/accounts/{id}/set-developer-fees now return 400 unless the request is made on behalf of a child organization via the on-behalf-of header. Configuring fees on a parent or standalone organization previously appeared to succeed but the fees could never be applied.
  3. Set settlement strategy now validates the type field. PUT /api/accounts/{id}/set-settlement-strategy returns a 400 when the settlement strategy type is not a recognized value, instead of a 500.