Corporate expense management

How to give every team or project its own programmable virtual card

One card per employee, campaign or supplier, topped up on demand and frozen in one call.

Cards Published October 16, 2026 · KemyCard team
How to give every team or project its own programmable virtual card: flow diagram with the KemyCard API
Best fit

Spend-management tools, agencies running ad budgets for clients, and companies that want one card per employee, project or supplier.

Next step

Create three test cards in the sandbox (ads, software, travel), top one up and freeze another to see both webhooks.

One shared company card for every subscription, ad account and trip is a support nightmare: when it is blocked, everything stops; when a charge looks wrong, nobody knows who made it. Splitting spend across dedicated cards fixes that, but only if creating and controlling cards is automatic.

With the KemyCard API, each card is an API object. Your product creates one per employee, campaign or supplier, loads exactly the budget it needs, and freezes it the moment the job is done.

Common setups

  • Ad budgets: one card per client or per campaign, so each ad account has its own budget and its own statement.
  • Software subscriptions: one card per tool, frozen when the subscription is cancelled, so a forgotten renewal is declined.
  • Travel and field teams: a card per trip, loaded with the travel budget and frozen when the person is back.

How it works

  1. Create the cardholder as a customer and verify their identity.
  2. Issue the card with POST /v1/cards and its starting budget in amount.
  3. Top up on approval. When a manager approves more budget in your tool, call POST /v1/cards/{code}/topup.
  4. Freeze when done. POST /v1/cards/{code}/freeze blocks new payments; /unfreeze brings the card back.
  5. Feed accounting. Each card.transaction webhook carries the payment, so you can attach receipts and categories in real time.
# Freeze a campaign card when the campaign ends
curl -X POST https://api.kemycard.com/v1/cards/CARD_CODE/freeze \
  -H "Authorization: Bearer sk_test_..."

# Pull its history for the client report
curl https://api.kemycard.com/v1/cards/CARD_CODE/transactions \
  -H "Authorization: Bearer sk_test_..."
Card loads are debited from your KemyCard balance, which you fund in USDC or USDT. Each budget you load is money set aside for that card only.

Fees by plan

PlanPriceCard creationCard load
Découverte $0/mo $5$1 + 2.5%
Starter $750/mo $3.50$1 + 2%
Business $999/mo $2.50$1 + 1.75%
Premium $1,999/mo $1.50$1 + 1.5%

The free Découverte plan includes a monthly number of virtual cards, enough to try the model with one team. Paid plans have no monthly limit on cards.

Start free

Build this on the free Découverte plan

No monthly fee to start, an unlimited sandbox with test keys, and the same API you will use in production. Upgrade only when your volume grows.

More use cases