Documentation Index Fetch the complete documentation index at: https://partner-docs.contro.dev/llms.txt
Use this file to discover all available pages before exploring further.
Cards are issued to cardholders from a card program. Each card has a lifecycle - from issuance through activation to eventual cancellation.
Prerequisites
Before issuing a card, the cardholder must have KYC status approved. See the cardholders guide for KYC details.
Issue a card
Select a card program and issue a card to a cardholder:
cURL
SDK (Node)
SDK (Python)
TypeScript (fetch)
curl -X POST https://api.contro.me/v1/partner/cards \
-H "x-contro-api-key: $CONTRO_API_KEY " \
-H "Content-Type: application/json" \
-d '{
"cardholderId": "ch_abc123",
"programId": "prog_xyz",
"idempotencyKey": "issue_card_123"
}'
Request fields
Field Type Required Description cardholderIdstring Yes Cardholder to issue the card to. Example: "ch_abc123" programIdstring Yes Card program to use. Example: "prog_xyz" idempotencyKeystring No Unique key to prevent duplicate card issuance. Example: "issue_card_user42_2026"
Response
{
"id" : "card_def456" ,
"status" : "created" ,
"cardholderId" : "ch_abc123" ,
"programId" : "prog_xyz"
}
Card lifecycle
Cards progress through the following states:
Action Endpoint Effect Activate POST /partner/cards/{id}/activateCard becomes usable for transactions Freeze POST /partner/cards/{id}/freezeTemporarily blocks all transactions Unfreeze POST /partner/cards/{id}/unfreezeRe-enables transactions on a frozen card Cancel POST /partner/cards/{id}/cancelPermanently deactivates the card
Cancellation is irreversible. A cancelled card cannot be reactivated - issue a new card instead.
Example: activate a card
cURL
SDK (Node)
SDK (Python)
curl -X POST https://api.contro.me/v1/partner/cards/card_def456/activate \
-H "x-contro-api-key: $CONTRO_API_KEY "
Example: freeze a card
cURL
SDK (Node)
SDK (Python)
curl -X POST https://api.contro.me/v1/partner/cards/card_def456/freeze \
-H "x-contro-api-key: $CONTRO_API_KEY "
Spend control
Set per-transaction-type velocity caps on a card. Each cap is optional; omit a key to leave that bucket uncapped. The endpoint accepts both the new spendControl body and the legacy { limit } body (deprecated, see below).
curl -X PATCH https://api.contro.me/v1/partner/cards/card_def456/limits \
-H "x-contro-api-key: $CONTRO_API_KEY " \
-H "Content-Type: application/json" \
-d '{
"spendControl": {
"sales": { "perTransaction": 200, "daily": 1000, "allTime": 50000 },
"cash": { "allTime": 0 }
}
}'
See the Spend control guide for the full cap matrix, provider capability differences, and common patterns.
The legacy { "limit": 5000 } body is still accepted and is mapped to { "spendControl": { "sales": { "allTime": 5000 }, "cash": { "allTime": 5000 } } }. It will be removed in a future release.
List cards
Retrieve all cards for your partner account:
cURL
SDK (Node)
SDK (Python)
curl "https://api.contro.me/v1/partner/cards?limit=20" \
-H "x-contro-api-key: $CONTRO_API_KEY "
Query parameters
Parameter Type Description pageinteger Page number (default 1). limitinteger Items per page (1–100, default 20). statusstring Filter by card status. One of created, active, frozen, cancelled.
Get a card
Retrieve a single card by ID:
cURL
SDK (Node)
SDK (Python)
curl https://api.contro.me/v1/partner/cards/{id} \
-H "x-contro-api-key: $CONTRO_API_KEY "
Card fields
Field Type Description idstring Card ID. Example: "card_def456" typestring Card type. One of virtual, physical brandstring Card network brand. One of Visa, Mastercard statusstring Current card status. One of created, active, frozen, cancelled nameOnCardstring | null Name embossed on the card, or null for virtual cards. Example: "JANE DOE" limitnumber | null Deprecated. Mirrors spendControl.sales.allTime. Use spendControl for per-transaction-type caps. Example: 5000spendControlobject | null Per-transaction-type velocity caps (sales, cash) and accrued spend (spent). See Spend control . last4string | null Last 4 digits of the card number. Example: "0000" programIdstring | null Card program this card was issued from. Example: "prog_xyz" createdAtstring ISO 8601 creation timestamp. Example: "2026-03-20T14:30:00Z"
Transactions
Retrieve transaction history for a card:
cURL
SDK (Node)
SDK (Python)
curl "https://api.contro.me/v1/partner/cards/{id}/transactions?limit=20" \
-H "x-contro-api-key: $CONTRO_API_KEY "
Transaction fields
Field Type Description idstring Transaction ID. Example: "tx_abc123" typestring Transaction type. One of purchase, refund, withdrawal, fee maskedCardNostring | null Last 4 digits of the card number used. Example: "0000" directionstring | null Transaction direction. C: credit, D: debit amountnumber | null Transaction amount in the card’s currency unit currencystring | null ISO 4217 currency code. Example: "USD" currencyPrecisionnumber | null Decimal precision of the transaction currency billingAmountnumber | null Billing amount in the billing currency billingCurrencyCodestring | null ISO 4217 billing currency code billingCurrencyPrecisionnumber | null Decimal precision of the billing currency billingTimestampstring | null ISO 8601 billing/clearing timestamp statusstring Transaction status. One of pending, completed, declined, reversed merchantstring | null Merchant name timestampstring ISO 8601 transaction timestamp
Card programs
Card programs define the card type and brand available to your integration. Your Contro admin assigns specific card programs to your partner account — only assigned programs can be used to issue cards.
List available card programs
Retrieve the card programs assigned to your account:
cURL
SDK (Node)
SDK (Python)
curl "https://api.contro.me/v1/partner/card-programs?limit=20" \
-H "x-contro-api-key: $CONTRO_API_KEY "
Card program fields
Field Type Description idstring Card program ID. Example: "prog_xyz" namestring Program name. Example: "US Virtual Visa" typestring Card type. One of virtual, physical brandstring Card network brand. One of Visa, Mastercard activeboolean Whether the program is currently active
Issuing a card with a program not assigned to your account will return a 403 error. Contact your Contro admin to request access to additional card programs.