Metadata
| Field | Value |
|---|---|
| Name | cards.issue |
| Category | write |
| Required scope | cards:manage |
| Idempotency key required | yes |
Annotations
| Annotation | Value |
|---|---|
| Title | Issue Virtual Card |
| Read-only | no |
| Destructive | no |
| Idempotent | yes |
| Open-world | no |
| Requires human approval | no |
Input schema
Output schema
Auth
Caller’s grant must include thecards:manage scope. Grants whose scope set is a superset of the required scope are accepted.
Request examples
Response examples
Success — card issued with one-shot details envelope:idempotency_key) — details_envelope absent:
Errors
| Code | Name | Cause | Remediation |
|---|---|---|---|
-32600 | Invalid request | Malformed JSON-RPC envelope | Check method, jsonrpc, and id fields |
-32602 | Invalid params | funding_cap_cents exceeds the tightest envelope cap; MCC code not 4 digits; envelope has no amount caps defined | Lower funding_cap_cents or update the envelope caps first |
-32001 | Unauthorized | Missing/expired grant token | Refresh via agent.grant.refresh |
-32002 | Policy denied | Grant missing cards:manage scope | Issue a new grant with the required scope |
-32603 | Internal error | Issuer-side card creation failed | Retry with the same idempotency_key; the response will be idempotent |
Step-up flow
cards.issue does not itself trigger step-up — the Requires human approval annotation refers to the parent agent.budget.create saga that provisions the vault the card is drawn against. Cards issue freely once the vault is active and funding_cap_cents stays within the envelope.
If the issuing vault was originally configured with a step_up_amount_cents threshold and you are issuing a card whose funding_cap_cents exceeds that threshold, you will need a step-up-approved grant before calling this tool. Obtain one via agent.grant.issue (which always requires step-up). See Step-up protocol for the full flow.
For payments.initiate — which does trigger inline step-up — see the payments.initiate step-up flow.