get_purchase_status
Omit purchase for the active/latest one; pass after_revision and the read holds up to `wait_seconds` (contract maximum 45 seconds, `HOLD_MAX_SECONDS`); the server may hold less; follow `next.args.wait_seconds`; call again as soon as it returns.
MCP tool get_purchase_status, called with tools/call on https://api.envoy.money/mcp (Streamable HTTP).
Omit purchase for the active/latest one; pass after_revision and the read holds up to wait_seconds (contract maximum 45 seconds, HOLD_MAX_SECONDS); the server may hold less; follow next.args.wait_seconds; call again as soon as it returns. Without after_revision the reply is immediate. For agent checkout, ready carries the card: pay once and report. No card follows a report or disconnect. After a failed report, follow recovery: start_purchase with retry_of only when offered, or a new ready handout after reconciliation. When checkout_by is envoy, no card is released: Envoy checks out. Relay purchase.question.prompt; submit the user's answer. Stop after four unchanged holds or when told.
| Title | Service | Read only | Destructive | Idempotent | External sites |
|---|---|---|---|---|---|
| Check purchase status | shared | true | false | true | false |
The text content is a plain-English briefing, then one line of JSON with the slim agent data. structuredContent holds that same slim data. isError is true when the call failed and changed nothing. Diagnostics for support are in _meta["money.envoy/support"]; they are not for the model. Tool annotations describe effects; they do not grant permission. The HTTP API returns the full envelope: see the API reference page.
Input
Prop
Type
Unknown fields are rejected. The exact input schema is on the schemas page.
Synthetic request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_purchase_status",
"arguments": {
"purchase": "synthetic-intent-0001"
}
}
}Hold
With after_revision, a read in a waiting state holds up to wait_seconds (contract maximum 45 seconds, HOLD_MAX_SECONDS); the server may hold less. Never assume a fixed hold length: pass next.args exactly as returned, and stop waiting at next.by. Without after_revision the read returns at once.
Success data
The text content opens with a briefing: one to three sentences for the user, then What to do: for the agent. Tell the user the first part in your own words and do what What to do says. One JSON line follows with these fields. Pass next.args unchanged to next.tool. Never show the JSON line, ids or codes to the user. Outputs may gain fields, so ignore ones you do not recognize.
| Field | Required | Type | Description and rules |
|---|---|---|---|
quote | No | object | INR price; not a charge/refund. |
spending_closed | No | boolean | Spending access is closed: no further card details are released. It does not prove the issuer blocked the card, and recovery of any money continues separately. |
situation | No | "needs_details" | "needs_answer" | "waiting_for_user" | "working" | "ready" | "confirming" | "done" | "stopped" | "needs_support" | Where the purchase stands. The English briefing above says what it means. |
money | No | "not_charged" | "set_aside" | "charged" | "refunding" | "refunded" | "unknown" | What has happened to the user's money. |
purchase_id | No | string | Pass as purchase in later calls. Never show it to the user. |
checkout_by | No | "agent" | "envoy" | Who completes the merchant checkout. agent: you pay once with the one-time card Envoy releases. envoy: Envoy checks out itself; no card is released, so never open the merchant payment step. Absent until Envoy decides; it can change, so act on the latest reply. |
next | No | object | The call to make next: tool, args (pass verbatim) and wait_seconds before calling. |
purchase | No | object or null | question: the open question while situation is needs_answer or needs_details: id, kind and prompt. Show the user prompt word for word. funding: only for a gift-card pay_link task, the URL the user pays, amount and expiry. Never an approval link. |
follow_up | No | object | Optional feedback call after a completed purchase: tool and args. Add the user's words as answer. |
retry | No | "same_call" | "after_fix" | "check_status_first" | "new_purchase" | "no" | Whether and how to retry. |
fix | No | array | Input fields to fix before retrying. |
card | No | object | Secret. Release only while ready after authorization (a gift card: after its link was paid); never log or persist these values. card is present exactly when kind is card, voucher exactly when kind is gift_card. |
support_ref | No | string | Give this to the user only if they ask for help. |
account | No | object | Requested account sections. |
transactions | No | array | Spending transactions. |
next_cursor | No | string | Pass as cursor to list_transactions for the next page. |
The secret path is card. It carries one-time card details while the purchase is ready; never log, store or show them. Examples use synthetic values only.
Synthetic result
Example synthetic-completed-receipt (synthetic data, the MCP text content; JSON is formatted here for reading but arrives on one line):
The purchase of ₹2,499.00 at "Example Store" is complete. Order reference "SYNTHETIC-ORDER-0001" (from the merchant).
What to do: Tell the user it's done, with the order reference, then carry on with their task. If it fits the conversation, you may ask how it went and send their words with answer_purchase_question using the follow_up args below. This is optional.
{
"situation": "done",
"money": "charged",
"purchase_id": "pur_5b1e9c7a3f2d5a8e9c0b1d2e3f4a5b6c",
"checkout_by": "agent",
"follow_up": {
"tool": "answer_purchase_question",
"args": {
"purchase": "pur_5b1e9c7a3f2d5a8e9c0b1d2e3f4a5b6c",
"question": "feedback-pur_5b1e9c7a3f2d5a8e9c0b1d2e3f4a5b6c",
"type": "feedback"
}
}
}Errors
A failure sets isError to true and changes nothing. The briefing says what happened and what to do; retry and fix in the JSON line say whether and how to retry. Branch on those, not on a code: these common codes appear only in _meta["money.envoy/support"], for support. See all error codes for the complete contract list.
| Code | HTTP status | Meaning | What the agent does |
|---|---|---|---|
INVALID_INPUT | 400 | Fix the supplied input. | Fix the fields listed in the data below and make the same call again. |
UNAUTHENTICATED | 401 | Reconnect through Central Auth. | Ask the user to reconnect Envoy, then try again. |
UNAVAILABLE | 503 | The service is unavailable; follow retryable and next. | Wait, then make the same call again. Don't pay any other way meanwhile. |