Skip to main content
Corporate cards let your business issue spend cards to its employees. Each employee is the cardholder: they have one balance, and every card they hold is denominated in it and spends from it. You fund the employee’s balance from your USDC balance and can withdraw it back at any time. Corporate cards are available by invitation only. Yativo enables them for invited businesses, in sandbox and in production. There’s no way to request access through the API or the dashboard. Without an invitation, every corporate card request returns 403. If you’ve been invited, use the sandbox to build and test your integration, then switch the base URL and API key when your production account is enabled.
Sandbox behaves like production for corporate cards. Account approval, customer requirements, fees and the USDC reserve all apply. Fees are charged to your sandbox USDC balance, which holds test funds only.

Before you start

All requests go to the sandbox base URL with your sandbox key:
Every request below has a reference page with a “Try it” playground under Corporate Cards and Corporate Card Transactions. customer_id and employee_id are never part of a POST path. Send them in the request body, or in the query string on GET. Every customer_id must be one of your customers and every employee_id must belong to that customer, or the request returns 404.

Test in the dashboard

The sandbox dashboard has the same Corporate Card screens as production. Open Issuing → Corporate Card, pick a customer, then add employees, issue cards, fund balances and review memos. Use it to see the flow before you call the API.

Test flow

1

Check your USDC balance

GET /corporate-card/wallet?customer_id=... returns the customer’s funding address and your USDC balance:
The three balances are in USD. Spend only from usdc_available_balance. The first request for a customer creates its funding address and returns wallet: null, so call it again to read the address. Address creation counts towards the wallet address limits.
Never send real USDC to a sandbox funding address. If your sandbox USDC balance is empty, swap from your USD balance or contact Yativo support.
2

Create an employee

Only customer_id and full_name are required. To attach a selfie, send selfie_image as a multipart/form-data file (jpeg, jpg, png or webp, up to 10 MB) or selfie_image_url as a hosted URL. The response includes the new employee_id.
3

Submit employee KYC

country_id and nationality are ISO2 codes. state_id is optional and is the numeric id from GET /locations/states/{country_id}, where {country_id} is the numeric id from GET /locations/countries. Documents (gov_id_image, payslip, proof_of_address) are optional and accept a file or a *_url field.You can submit an employee’s KYC but not read it back. Follow kyc_status on GET /corporate-card/employees/{employee_id} instead. In sandbox, a submission is approved straight away and kyc_status becomes approved. The first submission for each employee charges the employee_kyc fee. Resubmissions are free.
4

Issue a card

card_type is Virtual (default) or Physical. Omit employee_id and the card goes to the customer’s employee, created automatically the first time. The employee is the cardholder: every card they hold is denominated in, and spends from, the employee’s balance. An employee can hold any number of cards. The response contains the card under data.card, including its card_id, status, masked_pan and expiration_date.An employee’s first virtual card is free. Further virtual cards and physical cards are charged as listed in Fees. If a fee can’t be charged the request returns 402 and no card is issued.
5

Fund the employee

action is fund or withdraw, and amount is in USD (minimum 0.01). Funding debits your USDC balance and can’t use the reserve. Withdrawing returns money to your USDC balance, charges the card_withdrawal fee, and fails with 422 if it exceeds the employee’s available balance. An employee with no card yet returns 404.Check the employee’s balance with GET /corporate-card/employees/{employee_id}/balance:
6

Manage the card

Only the employee sees the full card number, expiry, CVV and PIN, on the card’s card link. Share the link or embed it in your app. The employee confirms their email the first time, sets up a passkey or authenticator app, and sets their PIN there.
7

Test memos

Employees attach notes and invoices to card activity, and you approve or reject them:
8

Test suspension and termination

PUT /corporate-card/employees/{employee_id} with "status": "suspended" blocks every corporate card request for that employee with 403. Set it back to active to restore access.DELETE /corporate-card/employees/{employee_id} terminates the employee and suspends all of their cards. It can’t be undone, so create a fresh employee for each test run.

Card transactions

Card authorizations are recorded in your spend card transaction history, and Yativo sends business_spend_card.transaction.* webhooks for them. The transaction_id in those webhooks is the id used below.
Raising a dispute charges the dispute fee. A second dispute on the same transaction returns 409.
Sandbox has no endpoint to simulate a card authorization. Test the transaction and dispute flows with transactions that appear on your sandbox cards, and test your webhook handling with the payloads in Webhooks.

Reserve

While Business Spend Cards are enabled, a minimum amount must stay in your USDC balance. The default is 2,000 USD. Card funding stops at the reserve. Fees can still use it. A debit that would go below it returns an error that states the reserve and how much is available to spend.

USDC balance

Your USDC balance is only for corporate cards. Card funding and corporate card fees are the only debits from it. Payouts, transfers between Yativo accounts and swaps out of USDC fail with Invalid wallet selected. You can add to it in two ways:
  • Deposit USDC to the funding address from GET /corporate-card/wallet
  • Swap from your USD wallet with POST /wallet/swap. USD is the only currency you can swap into USDC

Fees

Every corporate card fee is charged to your USDC balance, in sandbox as in production. Amounts come from your pricing agreement. GET /fees returns them under employee_card. See Fees.

Errors

Errors use the standard envelope:
When the card service rejects a request, data.error explains why, for example an invalid date of birth. When it can’t complete the request at all, you get 502 with The card service could not complete this request right now. Please try again later.

Going live

  1. Change the base URL to https://api.yativo.com/api/v1 and use your production API key.
  2. Wait for Yativo to enable corporate cards on your production account. This is part of your invitation.
  3. Make sure each customer has an approved cobo_pobo endorsement in production.
  4. Fund your production USDC balance above the reserve.
  5. Point your webhook URL at your production endpoint.