Skip to main content
Corporate cards let your business issue spend cards to its employees. Each employee is a cardholder with one card balance, and every card they hold spends from it. You fund that balance from your USDC balance and can withdraw it back at any time. Corporate cards are available in sandbox now, ahead of production. Use the sandbox to build and test your integration, then switch the base URL and API key when production opens.
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:
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

Provision the customer’s funding address once with POST /corporate-card/wallet. Calling it again returns the same address.
Then GET /corporate-card/wallet?customer_id=... returns the address and your USDC balance:
The three balances are in cents: 350000 is 3,500.00 USD. Spend only from usdc_available_balance.
Never send real USDC to a sandbox funding address. If your sandbox USDC balance is empty, 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.In sandbox, a KYC submission is approved straight away. GET /corporate-card/employees/{employee_id}/kyc returns status: "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. 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's card balance

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 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, payouts, transfers and swaps out of the USDC balance stop 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.

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:

Going live

  1. Change the base URL to https://api.yativo.com/api/v1 and use your production API key.
  2. Ask Yativo support to enable Business Spend Cards on your production account.
  3. Make sure each customer has an approved faster_payments endorsement in production.
  4. Fund your production USDC balance above the reserve.
  5. Point your webhook URL at your production endpoint.