curl --request PUT \
--url https://api.global.direct.reap.global/2026-07-13/cards/{cardId}/spend-control \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"isRevolving": true,
"spendCap": {
"amount": "<string>"
},
"limits": {}
}
'const options = {
method: 'PUT',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({isRevolving: true, spendCap: {amount: '<string>'}, limits: {}})
};
fetch('https://api.global.direct.reap.global/2026-07-13/cards/{cardId}/spend-control', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.global.direct.reap.global/2026-07-13/cards/{cardId}/spend-control"
payload = {
"isRevolving": True,
"spendCap": { "amount": "<string>" },
"limits": {}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"id": "3db05d6f-97a9-4c06-a578-087b14b4f859",
"type": "virtual",
"status": "active",
"title": "Travel card",
"last4": "4242",
"expiresAt": "2028-08-31",
"isRevolving": false,
"planType": "topUp",
"category": "travel",
"cardholder": {
"userId": "user_01JZ2Q1J4Y8P7M6N5K3H2G1F0E",
"name": "Ada Lovelace",
"email": "ada@example.com"
},
"spendCap": {
"amount": "7500.00",
"currency": "USD"
},
"spentAmount": {
"amount": "0.00",
"currency": "USD"
},
"spendControl": {
"limits": {
"transaction": {
"amount": "1000.00",
"currency": "USD"
},
"monthly": {
"amount": "5000.00",
"currency": "USD"
}
},
"spent": {
"monthly": {
"amount": "0.00",
"currency": "USD"
}
},
"atm": {
"dailyWithdrawal": {
"amount": "500.00",
"currency": "USD"
},
"dailyFrequency": 3
}
},
"restriction": {
"time": {
"start": "09:00",
"end": "18:00"
}
},
"createdAt": "2026-07-13T08:00:00.000Z",
"updatedAt": "2026-07-13T08:00:00.000Z"
}Update spend control
Required API-key scope: spend_controls:write.
Changes a card’s budget and spending limits. For a top-up card, raise spendCap to add funds: it’s the new total, not an amount to add, and it can’t be lower than what the card has already spent. Sending limits replaces all existing limits, null removes them, and leaving a field out keeps it unchanged. See Spend controls.
curl --request PUT \
--url https://api.global.direct.reap.global/2026-07-13/cards/{cardId}/spend-control \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"isRevolving": true,
"spendCap": {
"amount": "<string>"
},
"limits": {}
}
'const options = {
method: 'PUT',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({isRevolving: true, spendCap: {amount: '<string>'}, limits: {}})
};
fetch('https://api.global.direct.reap.global/2026-07-13/cards/{cardId}/spend-control', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.global.direct.reap.global/2026-07-13/cards/{cardId}/spend-control"
payload = {
"isRevolving": True,
"spendCap": { "amount": "<string>" },
"limits": {}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"id": "3db05d6f-97a9-4c06-a578-087b14b4f859",
"type": "virtual",
"status": "active",
"title": "Travel card",
"last4": "4242",
"expiresAt": "2028-08-31",
"isRevolving": false,
"planType": "topUp",
"category": "travel",
"cardholder": {
"userId": "user_01JZ2Q1J4Y8P7M6N5K3H2G1F0E",
"name": "Ada Lovelace",
"email": "ada@example.com"
},
"spendCap": {
"amount": "7500.00",
"currency": "USD"
},
"spentAmount": {
"amount": "0.00",
"currency": "USD"
},
"spendControl": {
"limits": {
"transaction": {
"amount": "1000.00",
"currency": "USD"
},
"monthly": {
"amount": "5000.00",
"currency": "USD"
}
},
"spent": {
"monthly": {
"amount": "0.00",
"currency": "USD"
}
},
"atm": {
"dailyWithdrawal": {
"amount": "500.00",
"currency": "USD"
},
"dailyFrequency": 3
}
},
"restriction": {
"time": {
"start": "09:00",
"end": "18:00"
}
},
"createdAt": "2026-07-13T08:00:00.000Z",
"updatedAt": "2026-07-13T08:00:00.000Z"
}Authorizations
Enter your API key
Path Parameters
The card's ID, as returned by List cards or Create card.
Body
Whether the card draws from your business's shared revolving budget. It's always false for top-up cards.
The card's fixed budget as a new total, not an amount to add (to add 200 to a 500 budget, send 700.00). It can't be lower than what's already been spent, and null removes it.
Show child attributes
Show child attributes
The full set of spending limits for the card. It replaces all existing limits, so any period you leave out is removed; send null to remove every limit, or leave the field out to keep the current limits.
Show child attributes
Show child attributes
Response
The card's unique ID. Use it with Retrieve a card, Freeze card and the other card endpoints.
Whether this is a virtual or a physical card.
virtual, physical Where the card is in its lifecycle: pending (a physical card not yet activated), active (ready to use), frozen (paused, can be unfrozen), inactive (not usable for another reason, such as a restricted or blocked card), expiring (a physical card within 90 days of its expiry date), expired or terminated (permanently closed).
pending, active, frozen, inactive, expiring, expired, terminated The card's nickname, set when the card was created or renamed with Edit card details.
The last four digits of the card number. To see the full card details, use Reveal card details.
The date the card expires (YYYY-MM-DD).
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$Whether the card draws from your business's shared revolving budget. It's always false for top-up cards.
How the card is funded: subscription (draws on shared credit within its limits), topUp (has its own fixed budget in spendCap) or physical (a physical card plan).
physical, subscription, topUp The display name of the card category chosen when the card was created, for example travel. It describes what the card is for and is different from each card transaction's category. To create a card with this category, pass its id from List card categories.
The team member the card belongs to.
Show child attributes
Show child attributes
The fixed budget set aside for the card; for top-up cards, this is how much the card can spend in total. Change it with Update spend control. Null if the card has no fixed budget.
Show child attributes
Show child attributes
How much has been spent on the card since it was created. For top-up cards, compare it with spendCap to see how much budget is left.
Show child attributes
Show child attributes
The card's spending limits, plus how much has been spent in each period so far.
Show child attributes
Show child attributes
Rules on when the card can be used. Change them with Update card usage restriction.
Show child attributes
Show child attributes
When the card was created, in UTC.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$When the card's details, limits or status last changed, in UTC.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$