Skip to main content
Glama

Record purchase approval

record_approval

Records a human's approval for an agent purchase on any payment rail and returns a receipt ID, public URL, and one-time edit token. Use it to document spending without holding or moving funds.

Instructions

Record a human's approval of a purchase on any payment rail. BotSupply does not hold or move the money. Returns receipt_id, a public receipt_url, and an edit_token shown once. No wallet or API key. Rate limited per IP. Same as POST /v1/receipts.

Input Schema

NameRequiredDescriptionDefault
scopeYesWhat the human approved, in plain text.
agent_idNoOptional id of the agent that will pay. Not a BotSupply API key.
approverYesDisplay name or handle of the human who approved the purchase.
agent_nameNoOptional display name of the paying agent.
merchant_urlNoOptional http or https URL for the merchant.
payment_railYesHow the agent will pay. Examples: stripe_link, card, x402, botsupply_wallet.
merchant_nameYesMerchant or seller name.
approver_contactNoOptional email or phone. Stored only as a hash and never shown on the receipt.
price_cap_amountYesMaximum amount approved. A positive decimal, for example 25 or "19.95".
price_cap_currencyYesCurrency code, 3 to 10 letters, for example USD or USDC.
external_payment_refNoOptional id from the payment rail. BotSupply does not look it up.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.1.0

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (not read-only, not destructive, not idempotent). The description goes well beyond: it clarifies no custody of funds, that edit_token is shown once (irrecoverable), no wallet/API key needed, and per-IP rate limiting. These are exactly the behavioral facts an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Terse and front-loaded: the core action leads, followed by tight sentences covering custody, returns, auth, and rate limits. No sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description helpfully names the return values (receipt_id, receipt_url, edit_token) and covers auth and rate limits, making it largely self-sufficient. Minor gap only in that it doesn't tie the tool to its sibling alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 11 parameters are already documented in the schema. The description adds no parameter-level meaning beyond the structured fields, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Record') and resource ('a human's approval of a purchase') with the scope ('on any payment rail'), so the agent knows exactly what the tool does. It does not explicitly contrast with receipt-related siblings like get_receipt or verify_receipt, but the core action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (to log a human's purchase approval) but gives no explicit when-not or alternative selection guidance. It never routes the agent to a sibling such as create_checkout or purchase, leaving the choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.