Skip to content

Card limits

Every account that issues cards has card limits: how many cards and cardholders it can have, and what all its cards together can spend. They grow with the account’s trust tier (the tier that also sets payment and payout limits) and apply from the day cards are switched on, with nothing to set up. When a limit stops you, the error says which one, what you’ve used, when it frees up, and where to ask for more. A card’s own limits and rules can only be tighter.

GET /v1/issuing/limits (scope cards:read).

Terminal window
curl https://api.tuppence.ai/v1/issuing/limits \
-H "Authorization: Bearer $TUPPENCE_SECRET_KEY"
{
"object": "issuing_limits",
"livemode": true,
"tier": "starter",
"tier_label": "Starter",
"restricted": false,
"enforced": true,
"policy_version": 6,
"increase_url": "https://dashboard.tuppence.ai/cards?limits=ask",
"limits": {
"issuing_cards_daily": { "value": 10, "used": 4, "resets_at": 1791244800, "source": "tier", "expires_at": null },
"issuing_spend_daily": { "value": 500000, "used": 128450, "resets_at": 1791244800, "source": "tier", "expires_at": null },
"issuing_quasi_cash": { "value": 0, "used": null, "resets_at": null, "source": "tier", "expires_at": null }
}
}

The response has all eleven limits (three shown).

FieldMeans
valueA count, an amount in your currency’s minor units, or 0/1 for a switch. null is unlimited
usedWhat’s used now. null for a switch, for the largest single purchase, and for replacements (counted per cardholder)
resets_atUnix seconds when the window next frees up (00:00 UTC for daily limits). null for a count that frees up only when you cancel something
sourcetier; override (set by our team, may end at expires_at); or restriction (below)
tiernull until we’ve reviewed the account. Until then it has Probation’s limits
restrictedWhether the issuing restriction is on
enforcedWhether limits apply (below)
increase_urlWhere to ask for more
LimitWhat it countsNot reviewed / ProbationStarterEstablishedTrusted
issuing_cards_activeVirtual cards active at once. A single-use card stops counting once used525100500
issuing_cards_dailyCards created since 00:00 UTC: virtual and physical, replacements included31050200
issuing_cards_30dCards created in the last 30 days10502501,000
issuing_cardholdersCardholders that aren’t blocked21050250
issuing_physical_cardsPhysical cards that aren’t cancelled1525100
issuing_replacements_90dReplacements of one cardholder’s card in 90 days1233
issuing_spend_dailyCard spend across the account since 00:00 UTC£1,000.00$1,000.00€1,000.00£5,000.00$5,000.00€5,000.00£25,000.00$25,000.00€25,000.00£100,000.00$100,000.00€100,000.00
issuing_spend_30dCard spend across the account in the last 30 days£3,000.00$3,000.00€3,000.00£25,000.00$25,000.00€25,000.00£150,000.00$150,000.00€150,000.00£750,000.00$750,000.00€750,000.00
issuing_max_authorizationThe most one card purchase may be£500.00$500.00€500.00£2,500.00$2,500.00€2,500.00£5,000.00$5,000.00€5,000.00£10,000.00$10,000.00€10,000.00
issuing_quasi_cashBuying from quasi-cash and high-risk merchants (1 allowed)blockedblockedallowedallowed
issuing_provisional_creditSpending a card dispute’s provisional credit before it’s decided (1 at once)heldheldspendablespendable
  • Amounts are in your account’s currency: the same numbers in pounds or dollars.
  • £10,000.00$10,000.00€10,000.00 is the card processor’s cap on one card purchase.
  • A Custom tier has what our team set, and Starter’s limits for anything they didn’t.
  • Tiers grow with trading history, as payment limits do: Going live.

Quasi-cash and high-risk merchant categories: money transfer (4829), quasi-cash and crypto (6050, 6051), stored value and top-ups (6540), gambling (7995), pawn shops (5933), securities (6211), lotteries and racing (7800–7802), direct marketing and telemarketing (5960–5969).

ModeEnforced
LiveAlways (enforced: true)
TestOnly when enforcement is switched on for the account, so a card count never stops a sandbox CI run. See Testing

They apply wherever a card or cardholder is created: this API, the dashboard, the app, MCP, the assistant, and a platform acting as a connected account. A connected account is held to its own tier. Creation is counted under a lock, so parallel requests can’t exceed a limit.

CodeWhenExtra fields
403 issuing_card_limitCreating or replacing a card, virtual or physical, over a card limitlimit, used, max, resets_at, increase_url
403 issuing_cardholder_limitCreating a cardholder over the limitsame
400 limit_above_account_maximumCreating a card, or changing its limits, above the account’s maximum (table below)limit (the account’s), max

Nothing is created when refused.

{
"error": {
"type": "permission_error",
"code": "issuing_card_limit",
"message": "New businesses can create 3 cards a day while we get to know you. You've created 3 today; you can create more after 00:00 UTC, or ask us for higher limits.",
"limit": "issuing_cards_daily",
"used": 3,
"max": 3,
"resets_at": 1791244800,
"increase_url": "https://dashboard.tuppence.ai/cards?limits=ask",
"request_id": "req_…"
}
}

Don’t retry a limit error. Wait until resets_at (null means it frees up only when you cancel a card or block a cardholder), free one up, or ask for more. In the SDKs, the extra fields are on the error’s raw.

The card’s own limitMay not be above
per_authorization (or a single-use card’s amount)issuing_max_authorization
dailyissuing_spend_daily
weekly, monthlyissuing_spend_30d
CaseCounts against limits?
Fraud dispute: disputing as fraudulent cancels and replaces the card in one step (more)No. Always allowed once, so a business with a stolen card is never stuck
A standing virtual card, lost or stolen: POST /v1/cards/:id/replace with reason lost or stolen, when the card is compromised (we froze it after a fraud warning or a run of declines, or a fraud dispute names it)No
The same, otherwiseYes, as a new card. A refusal leaves the old card working

A replacement keeps the agent, cardholder, limits and rules; the old card is cancelled.

A purchase is checked against the card’s own rules, then the account’s limits. A decline (a card_authorization with approved: false) gives the reason in decline_reason. The dashboard and app explain it in plain words with the numbers, for example “Declined: this would take today’s card spend over £5,000.00$5,000.00€5,000.00, your limit while your account is new.”

decline_reasonWhy
account_limitOver issuing_spend_daily, issuing_spend_30d or issuing_max_authorization
merchant_category_restrictedA quasi-cash or high-risk merchant while issuing_quasi_cash is blocked
funds_under_reviewIt would spend a card dispute’s provisional credit, held until the dispute is decided
payments_balance_headroomUS: more than could be paid out of the account’s earnings right now. decline_limit says what bound it: new_account_floor, payouts_not_approved, payouts_on_hold, cleared, exposure_cap, daily_payout (or headroom_unavailable when it couldn’t be worked out in time)
limit_exceededOver one of the card’s own limits
approval_requiredThe card’s rules ask a person first: over the approval amount, or unusual for its agent
merchant_lockedThe card works at one merchant only, and this is another
mcc_blocked, mcc_not_allowedThe card’s rules block this kind of merchant, or allow only others
country_not_allowedThe card’s rules don’t allow merchants in this country
card_inactiveFrozen, cancelled or not yet activated
card_consumedA single-use card already used
insufficient_fundsWhat the cards can spend won’t cover it (UK: the cards’ balance; US: your earnings, pending included)

Account limits apply only where enforced. The card’s own rules always apply. In the US, so does payments_balance_headroom: it’s the payout gate that all money leaving the account passes.

GET /v1/issuing/balance says what the cards spend from in spends_from. A purchase must always fit within spendable.

UK (spends_from: issuing_balance)US (spends_from: payments_balance)
Cards spendTheir own Issuing balance, separate from the money you takeThe account’s earnings directly. A purchase is money leaving, like a payout, through the same gate
spendableThe cards’ balanceWhat could be paid out now: cleared money less any reserve and unsettled purchases, once past the first 168 hours, within the exposure cap and the daily payout limit (shared by card spend and payouts). Money still clearing isn’t spendable
Top upBank transfer to the cards’ own sort code and account number (GET /v1/issuing/funding_instructions); usually arrives within minutes. ExamplesNothing to top up. funding_instructions answers available: false, reason: spends_earnings; POST /v1/issuing/balance_transfers is refused (balance_transfer_unavailable). Examples
Alsolimited_by (what holds it), available_from (when more is spendable), message (why)

When we need to review an account’s card activity, we restrict its issuing. While the restriction is on:

  • restricted is true;
  • every limit is the lower of its own value and the Not reviewed one (source: restriction);
  • no new cards can be created;
  • provisional credit is held.

Existing cards keep working within those limits. The restriction never freezes cards; that’s a separate, deliberate step. We tell you, and the review usually takes one business day.

issuing.limits_updated is sent whenever the card limits change: an override, a new tier, or the restriction being placed or lifted.

Field
limitsEvery limit’s value now
changedWhich ones changed
reasonoverride, tier, restriction_placed, restriction_lifted
tier, restricted, currency, policy_version

An agent creating cards over MCP meets the same limits:

  • get_issuing_limits returns the numbers above, so the agent can see how many cards it has left today.
  • When a limit refuses create_agent_card, it returns the same error (limit, used, max, resets_at, increase_url). The agent should plan around it: use a card it already has, wait until resets_at, or ask a person to request more. Retrying gets the same answer.

Where the owner allows it, an agent can read its own card’s number to pay at a web checkout: See a card’s details.

Ask once at increase_url (dashboard: Balance → Ask for higher limits), saying what you need and why. A person on our team raises it. Raised limits show as source: override.

Docs assistant

Open as a page
Loading the assistant…