Save money on AI spend. Agents buy compact pay-per-call tools from one prepaid credit balance.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Remaining sats and the hourly buy limit. maxBuysPerHour and remainingBuysHour are on this result. Do not call this before buying. A paid top-up is credited from the payment event. session_budget_sats sets the session cap up to the saved limit. reset_session starts a new session within that saved limit. Set issue_link_code only when the human asks for a one-time sign-in code. When Lightning payments are temporarily paused, the result includes paymentsPaused and retryAfter.
Start a new session. Clears this session spend and restores the session cap to the saved account limit. It does not raise that limit or the daily limit.
Set true only when the human wants a one-time code to attach this balance to another Amazap sign-in. Leave unset for a normal balance check.
Set the session cap to this many sats, up to the account saved limit. A higher number is refused and nothing changes. A lower cap can be raised again up to that saved limit. (minimum 1).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Remaining sats and the hourly buy limit. maxBuysPerHour and remainingBuysHour are on this result. Do not call this before buying. A paid top-up is credited from the payment event. session_budget_sats sets the session cap up to the saved limit. reset_session starts a new session within that saved limit. Set issue_link_code only when the human asks for a one-time sign-in code. When Lightning payments are temporarily paused, the result includes paymentsPaused and retryAfter.
| Argument | Type | Description |
|---|---|---|
| reset_session | boolean | Start a new session. Clears this session spend and restores the session cap to the saved account limit. It does not raise that limit or the daily limit. |
| issue_link_code | boolean | Set true only when the human wants a one-time code to attach this balance to another Amazap sign-in. Leave unset for a normal balance check. |
| session_budget_sats | integer | Set the session cap to this many sats, up to the account saved limit. A higher number is refused and nothing changes. A lower cap can be raised again up to that saved limit. (minimum 1). |
{
"type": "object",
"properties": {
"reset_session": {
"type": "boolean",
"description": "Start a new session. Clears this session spend and restores the session cap to the saved account limit. It does not raise that limit or the daily limit."
},
"issue_link_code": {
"type": "boolean",
"description": "Set true only when the human wants a one-time code to attach this balance to another Amazap sign-in. Leave unset for a normal balance check."
},
"session_budget_sats": {
"type": "integer",
"minimum": 1,
"description": "Set the session cap to this many sats, up to the account saved limit. A higher number is refused and nothing changes. A lower cap can be raised again up to that saved limit. (minimum 1)."
}
}
}Spends prepaid Amazap service credits on a third-party API call, within the account's spend limits. A purchase can't be undone. Only failed calls are re-credited, up to 1,000 sats a day and 500 sats a day per provider. Direct purchases: if you pay a provider's own endpoint or invoice directly, that payment never reaches Amazap. Amazap isn't the seller of that call and can't credit it; the provider's terms apply. Copy quote_id, total_cost, max_total_sats, accept_terms. Params may differ if the price is unchanged. When Lightning payments are temporarily paused, the tool returns payments_paused and retryAfter and charges nothing.
| Argument | Type | Description |
|---|---|---|
| sku | string | Catalog id or slug for a single buy. Omit when items is set. |
| items | array | Basket. One entry per SKU the user asked for. One total_cost and one approval for the whole list. A repeated line is refused unless confirm_duplicates is true on this call or on that line. |
| query | string | Free-text query when the SKU has no listed fields. |
| params | any | Fields from exampleCall or describe_sku. An object of flat keys, requestBody / query / path, or a JSON array when the SKU body is an array. |
| dry_run | boolean | Set true to run every limit, approval, and balance check and return the resulting code. Nothing is charged, no approval is stored, and the hourly buy slot is not used. simulate_balance_sats and simulate_auto_approve_sats apply only when this is true. |
Spends prepaid Amazap service credits on a third-party API call, within the account's spend limits. A purchase can't be undone. Only failed calls are re-credited, up to 1,000 sats a day and 500 sats a day per provider. Direct purchases: if you pay a provider's own endpoint or invoice directly, that payment never reaches Amazap. Amazap isn't the seller of that call and can't credit it; the provider's terms apply. Picks the best healthy SKU at or under max_sats and buys it. Nothing is charged when none fits. When Lightning payments are temporarily paused, the tool returns payments_paused and retryAfter and charges nothing.
| Argument | Type | Description |
|---|---|---|
| query* | string | What to buy. The health gate picks the best healthy SKU. |
| params | any | Optional fields for the SKU that is picked. An object, or a JSON array when that SKU body is an array. |
| max_sats* | integer | Highest all-in sats for this buy. A SKU above the per-call limit is skipped. (minimum 1). |
| idempotency_key | string | Optional client key. The same key returns the first result and charges nothing. A call without this key can charge again. |
{
"type": "object",
"required": [
"query",
"max_sats"
],
"properties": {
"query": {
"type": "string",
"description": "What to buy. The health gate picks the best healthy SKU."
},
"params": {
"anyOf": [
{
"type": "object"
},
{
"type": "array",
"items": {}
}
],
"description": "Optional fields for the SKU that is picked. An object, or a JSON array when that SKU body is an array."
},
"max_sats": {
"type": "integer",
"minimum": 1,
"description": "Highest all-in sats for this buy. A SKU above the per-call limit is skipped. (minimum 1)."
},
"idempotency_key": {
"type": "string",
"description": "Optional client key. The same key returns the first result and charges nothing. A call without this key can charge again."
}
}
}Read-only public listing counts by protocol. Does not spend sats.
| Argument | Type | Description |
|---|---|---|
| protocol | string | Optional filter: L402, x402, or usdc. Omit it to count the whole catalog. |
{
"type": "object",
"properties": {
"protocol": {
"enum": [
"L402",
"x402",
"usdc"
],
"type": "string",
"description": "Optional filter: L402, x402, or usdc. Omit it to count the whole catalog."
}
}
}Ask for a service-credit review of one paid call. For a basket, pass line or sku. Claims older than 72 hours are rejected. This does not move sats or cash.
| Argument | Type | Description |
|---|---|---|
| sku | string | SKU of the line to claim when the order has more than one line. |
| line | integer | Line index when the order has more than one line. Omit it when only one line can be claimed. (minimum 0). |
| call_id* | string | Call or order id from the buy receipt. |
| description* | string | What failed, in a sentence or two. |
{
"type": "object",
"anyOf": [
{
"required": [
"line"
]
},
{
"required": [
"sku"
]
}
],
"required": [
"call_id",
"description"
],
"properties": {
"sku": {
"type": "string",
"description": "SKU of the line to claim when the order has more than one line."
},
"line": {
"type": "integer",
"minimum": 0,
"description": "Line index when the order has more than one line. Omit it when only one line can be claimed. (minimum 0)."
},
"call_id": {
"type": "string",
"description": "Call or order id from the buy receipt."
},
"description": {
"type": "string",
"description": "What failed, in a sentence or two."
}
}
}Parameter schema, schema confidence, and exampleCall for one SKU. total_cost is the all-in price only. Default USD. If the record is untested and totalSats is over 500, tell the user before buying. When Lightning payments are temporarily paused, the result includes paymentsPaused and retryAfter.
| Argument | Type | Description |
|---|---|---|
| sku* | string | Catalog id or slug from search_catalog. |
| currency | string | ISO 4217 code for the fiat estimate. Default USD. Use the user's local currency when you know it. Supported: USD, EUR, GBP, CAD, AUD, JPY, CHF, BRL, MXN, INR. |
| quantity | integer | How many calls to price. Default 1, maximum 3. |
{
"type": "object",
"required": [
"sku"
],
"properties": {
"sku": {
"type": "string",
"description": "Catalog id or slug from search_catalog."
},
"currency": {
"enum": [
"USD",
"EUR",
"GBP",
"CAD",
"AUD",
"JPY",
"CHF",
"BRL",
"MXN",
"INR"
],
"type": "string",
"description": "ISO 4217 code for the fiat estimate. Default USD. Use the user's local currency when you know it. Supported: USD, EUR, GBP, CAD, AUD, JPY, CHF, BRL, MXN, INR."
},
"quantity": {
"type": "integer",
"maximum": 3,
"minimum": 1,
"description": "How many calls to price. Default 1, maximum 3."
}
}
}One order, including the stored result. A seller payment still in flight is checked again. Does not start a new payment.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | orderId from a buy receipt or from orders. |
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "orderId from a buy receipt or from orders."
}
}
}Current Lightning inbound-liquidity prices.
| Argument | Type | Description |
|---|---|---|
| max_sats | integer | Most this call may charge. Minimum 1. A higher total charges nothing. |
{
"type": "object",
"properties": {
"max_sats": {
"type": "integer",
"minimum": 1,
"description": "Most this call may charge. Minimum 1. A higher total charges nothing."
}
}
}Lightning node snapshot by pubkey. Pass pubkeys (up to 10) for one call.
| Argument | Type | Description |
|---|---|---|
| pubkey | string | 66-hex compressed node pubkey (02… or 03…). Use this or pubkeys. |
| pubkeys | array | Up to 10 compressed node pubkeys. One call for the list. |
| max_sats | integer | Most this call may charge. Minimum 1. A higher total charges nothing. |
{
"type": "object",
"anyOf": [
{
"required": [
"pubkey"
]
},
{
"required": [
"pubkeys"
]
}
],
"properties": {
"pubkey": {
"type": "string",
"pattern": "^0[23][0-9a-fA-F]{64}$",
"description": "66-hex compressed node pubkey (02… or 03…). Use this or pubkeys."
},
"pubkeys": {
"type": "array",
"items": {
"type": "string",
"pattern": "^0[23][0-9a-fA-F]{64}$"
},
"maxItems": 10,
"minItems": 1,
"description": "Up to 10 compressed node pubkeys. One call for the list."
},
"max_sats": {
"type": "integer",
"minimum": 1,
"description": "Most this call may charge. Minimum 1. A higher total charges nothing."
}
}
}Probe one public https endpoint for an L402 challenge and a prefilled listing draft. Does not spend sats and does not publish the listing.
| Argument | Type | Description |
|---|---|---|
| http_method | string | HTTP method to probe. Default GET. |
| endpoint_url* | string | Public https URL of the endpoint to list. |
{
"type": "object",
"required": [
"endpoint_url"
],
"properties": {
"http_method": {
"enum": [
"GET",
"POST",
"PUT",
"PATCH",
"DELETE"
],
"type": "string",
"description": "HTTP method to probe. Default GET."
},
"endpoint_url": {
"type": "string",
"format": "uri",
"description": "Public https URL of the endpoint to list."
}
}
}Make a PNG QR code for an invoice, URL, or text. Put the QR URL in your own message.
| Argument | Type | Description |
|---|---|---|
| ecc | string | Error correction: L, M, Q, or H. |
| data* | string | Text, URL or Lightning invoice. (minimum length 1, maximum length 2048). |
| size | integer | PNG width in pixels. (minimum 64, maximum 1024, default 256). |
| max_sats | integer | Most this call may charge. Minimum 1. A higher total charges nothing. |
{
"type": "object",
"required": [
"data"
],
"properties": {
"ecc": {
"enum": [
"L",
"M",
"Q",
"H"
],
"type": "string",
"default": "M",
"description": "Error correction: L, M, Q, or H."
},
"data": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Text, URL or Lightning invoice. (minimum length 1, maximum length 2048)."
},
"size": {
"type": "integer",
"default": 256,
"maximum": 1024,
"minimum": 64,
"description": "PNG width in pixels. (minimum 64, maximum 1024, default 256)."
},
"max_sats": {
"type": "integer",
"minimum": 1,
"description": "Most this call may charge. Minimum 1. A higher total charges nothing."
}
}
}Recent buys: order id, status, charged sats, refunded sats, and net sats. Charged is the gross debit. Net is charged minus refunded. Pass include_results for each stored result. Pass cursor from nextCursor to read the next page. Read-only.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many orders to return. Default 20, maximum 50. (minimum 1). |
| cursor | string | nextCursor from the previous page. Omit it for the newest orders. |
| include_results | boolean | Default false. Set true to include each stored result. Leave it unset for the short summary. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many orders to return. Default 20, maximum 50. (minimum 1)."
},
"cursor": {
"type": "string",
"description": "nextCursor from the previous page. Omit it for the newest orders."
},
"include_results": {
"type": "boolean",
"description": "Default false. Set true to include each stored result. Leave it unset for the short summary."
}
}
}Title, description, OG/Twitter, and JSON-LD for a URL. Savings are compared with the page's visible text, not its HTML. Not for reading the page.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http or https page. |
| max_sats | integer | Most this call may charge. Minimum 1. A higher total charges nothing. |
| include_text | boolean | Off by default. Set true to include plain page text. |
| include_links | boolean | Off by default. Set true to include up to 40 http links. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public http or https page."
},
"max_sats": {
"type": "integer",
"minimum": 1,
"description": "Most this call may charge. Minimum 1. A higher total charges nothing."
},
"include_text": {
"type": "boolean",
"description": "Off by default. Set true to include plain page text."
},
"include_links": {
"type": "boolean",
"description": "Off by default. Set true to include up to 40 http links."
}
}
}Free price check incl. value estimate (raw vs output tokens, break-even $/M). Call only to change quantity/currency or check value before buying. When Lightning payments are temporarily paused, the result includes paymentsPaused and retryAfter.
| Argument | Type | Description |
|---|---|---|
| sku | string | Catalog id or slug from search_catalog. Omit when items is set. |
| items | array | Basket to price. One entry per SKU. A repeated line is refused unless confirm_duplicates is true on this call or on that line. Does not spend sats. Copy buy.quote_id into buy. |
| params | any | Optional fields to check before payment. An object, or a JSON array when the SKU body is an array. An invalid value, including a page URL that is not http or https, is rejected. The quote does not spend sats. |
| baseline | string | Accepted for older clients. Savings use the page's visible text. raw is ignored. |
| currency | string | ISO 4217. Default USD. Includes MXN. |
| quantity | integer | How many calls to price. Default 1, maximum 3. |
| accept_terms | string | Optional. When this covers the current terms, the account stores that acceptance. The quote still does not spend sats. |
RSS/Atom/JSON feed as compact items. Saves 27-81%; on lean feeds skip unless you cannot parse XML.
| Argument | Type | Description |
|---|---|---|
| url* | string | RSS, Atom or JSON Feed URL, or an HTML page that links a feed. |
| max_sats | integer | Most this call may charge. Minimum 1. A higher total charges nothing. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "RSS, Atom or JSON Feed URL, or an HTML page that links a feed."
},
"max_sats": {
"type": "integer",
"minimum": 1,
"description": "Most this call may charge. Minimum 1. A higher total charges nothing."
}
}
}PDF to Markdown, pages e.g. 1-3 (default first 30). Sponsor pages are omitted and listed in adPages. Use only if you cannot run pdftotext: output is about pdftotext size, no token saving.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http or https PDF, up to 20 MB. At most 30 pages are read. |
| pages | string | Pages to read, such as 1-3 or 4. At most 30 pages. Default is the first 30. When the response includes next_page, pass pages starting there. |
| max_sats | integer | Most this call may charge. Minimum 1. A higher total charges nothing. |
| max_chars | integer | Optional cap on the Markdown length. The maximum is 200000 characters. (minimum 500). |
| include_text | boolean | Off by default. Set true to also include the plain text. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public http or https PDF, up to 20 MB. At most 30 pages are read."
},
"pages": {
"type": "string",
"pattern": "^\\d+(?:\\s*-\\s*\\d+)?$",
"description": "Pages to read, such as 1-3 or 4. At most 30 pages. Default is the first 30. When the response includes next_page, pass pages starting there."
},
"max_sats": {
"type": "integer",
"minimum": 1,
"description": "Most this call may charge. Minimum 1. A higher total charges nothing."
},
"max_chars": {
"type": "integer",
"maximum": 200000,
"minimum": 500,
"description": "Optional cap on the Markdown length. The maximum is 200000 characters. (minimum 500)."
},
"include_text": {
"type": "boolean",
"description": "Off by default. Set true to also include the plain text."
}
}
}Clean article Markdown. Use it when the page is long or cluttered. Skip it on a short or already clean page: the quote compares the tokens both ways and does not charge for that check. Savings are compared with the page's visible text, not its HTML. One all-in price (5 sats). Blocked calls are credited.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http or https page. |
| meta | boolean | Off by default. Set true to include finalUrl, canonical, byline, wordCount, fetchedAt, and totalLength. Title, url, markdown, and published are always returned. published is the page date, or null. |
| mode | string | article drops images, link URLs, citations and reference lists. full keeps them. |
| max_sats | integer | Most this call may charge. Minimum 1. A higher total charges nothing. |
| max_chars | integer | Optional cap on the Markdown. The maximum is 200000 characters. (minimum 500). |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public http or https page."
},
"meta": {
"type": "boolean",
"description": "Off by default. Set true to include finalUrl, canonical, byline, wordCount, fetchedAt, and totalLength. Title, url, markdown, and published are always returned. published is the page date, or null."
},
"mode": {
"enum": [
"article",
"full"
],
"type": "string",
"default": "article",
"description": "article drops images, link URLs, citations and reference lists. full keeps them."
},
"max_sats": {
"type": "integer",
"minimum": 1,
"description": "Most this call may charge. Minimum 1. A higher total charges nothing."
},
"max_chars": {
"type": "integer",
"maximum": 200000,
"minimum": 500,
"description": "Optional cap on the Markdown. The maximum is 200000 characters. (minimum 500)."
}
}
}GitHub repo overview (tree, README, entry points, commits), ~750-1.5k tokens. Use on medium/large repos. Skip if you only need the README: read it directly.
| Argument | Type | Description |
|---|---|---|
| ref | string | Branch, tag, or commit. Default is the repository default branch. |
| path | string | Optional subdirectory. node_modules, dist, vendor, and lockfiles are skipped. |
| repo* | string | Public GitHub repository. Accepts owner/name or a https://github.com/owner/name URL. |
| max_sats | integer | Most this call may charge. Minimum 1. A higher total charges nothing. |
{
"type": "object",
"required": [
"repo"
],
"properties": {
"ref": {
"type": "string",
"description": "Branch, tag, or commit. Default is the repository default branch."
},
"path": {
"type": "string",
"description": "Optional subdirectory. node_modules, dist, vendor, and lockfiles are skipped."
},
"repo": {
"type": "string",
"pattern": "^(?:https://(?:www\\.)?github\\.com/)?[A-Za-z0-9][A-Za-z0-9._-]{0,99}/[A-Za-z0-9][A-Za-z0-9._-]{0,99}(?:\\.git)?(?:/.*)?$",
"examples": [
"nodejs/node",
"https://github.com/nodejs/node"
],
"description": "Public GitHub repository. Accepts owner/name or a https://github.com/owner/name URL."
},
"max_sats": {
"type": "integer",
"minimum": 1,
"description": "Most this call may charge. Minimum 1. A higher total charges nothing."
}
}
}Report how a paid call went. Spends nothing. A service credit may be added to the balance when the paid call was at least 20 sats. A smaller call is recorded and is not credited. The credit is not cash. Report credits pause after a few per account.
| Argument | Type | Description |
|---|---|---|
| line | integer | Line index when the order has more than one line. Omit it for a single-line order. (minimum 0). |
| note | string | Optional note, 280 characters or less. |
| useful* | integer | How useful the result was, from 1 to 5. |
| worked* | boolean | True when the call did the job. |
| order_id* | string | orderId from the buy receipt. |
| latency_ok* | boolean | True when the call returned soon enough to use. |
| matched_schema* | boolean | True when the response matched the schema you were given. |
{
"type": "object",
"required": [
"order_id",
"worked",
"matched_schema",
"useful",
"latency_ok"
],
"properties": {
"line": {
"type": "integer",
"minimum": 0,
"description": "Line index when the order has more than one line. Omit it for a single-line order. (minimum 0)."
},
"note": {
"type": "string",
"description": "Optional note, 280 characters or less."
},
"useful": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "How useful the result was, from 1 to 5."
},
"worked": {
"type": "boolean",
"description": "True when the call did the job."
},
"order_id": {
"type": "string",
"description": "orderId from the buy receipt."
},
"latency_ok": {
"type": "boolean",
"description": "True when the call returned soon enough to use."
},
"matched_schema": {
"type": "boolean",
"description": "True when the response matched the schema you were given."
}
}
}Flag a bad schema, a junk or incorrect response, or a dead SKU. Sends a short reason and spends nothing. Limited per agent per day.
| Argument | Type | Description |
|---|---|---|
| sku* | string | Catalog id or slug. |
| kind* | string | bad_schema, bad_response, or dead. |
| reason* | string | What went wrong, in one or two sentences. |
{
"type": "object",
"required": [
"sku",
"kind",
"reason"
],
"properties": {
"sku": {
"type": "string",
"description": "Catalog id or slug."
},
"kind": {
"enum": [
"bad_schema",
"bad_response",
"dead"
],
"type": "string",
"description": "bad_schema, bad_response, or dead."
},
"reason": {
"type": "string",
"description": "What went wrong, in one or two sentences."
}
}
}Find paid Amazap tasks by keyword. Results: price, value (est. saving), buy call.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many SKUs to return. Default 8, maximum 20. (minimum 1). |
| query* | string | Keywords or a short description of what you want to buy. |
| cursor | string | Page cursor from the previous search. When set, it overrides offset. |
| offset | integer | How many matching SKUs to skip. Use nextCursor from the previous page when it is present. (minimum 0). |
| region | string | ISO country code. Matches coverage that includes it or is global. Unknown coverage stays in the results, ranked lower. |
| protocol | string | Optional filter: L402, x402 for Lightning x402, or usdc. |
| buyable_only | boolean | Hide SKUs that are not buyable yet, including USDC coming-soon rows. Default true. Pass false to see them. Buyable rows still rank first. |
| include_demo | boolean | Include synthetic demo SKUs. Default false. |
Today's spend, remaining budgets, and the last 10 buys. Charged is the gross debit. Refunded is separate. Net is charged minus refunded. Read-only. Does not spend sats.
No arguments.
{
"type": "object",
"properties": {}
}Shrink a failed CI log. Pass a GitHub Actions job link or the pasted log.
| Argument | Type | Description |
|---|---|---|
| log | string | Pasted log text, up to 2 MB. Omit this when url is set. (maximum length 2097152). |
| url | string | Public https log URL, including a GitHub Actions job link, up to 2 MB. Use this or log, not both. |
| kind | string | build, test, server, or auto. Default auto. |
| max_sats | integer | Most this call may charge. Minimum 1. A higher total charges nothing. |
| max_lines | integer | Cap on the condensed log. Default 160. (minimum 20, maximum 2000). |
{
"type": "object",
"oneOf": [
{
"not": {
"required": [
"log"
]
},
"title": "Log URL",
"required": [
"url"
]
},
{
"not": {
"required": [
"url"
]
},
"title": "Pasted log",
"required": [
"log"
]
}
],
"properties": {
"log": {
"type": "string",
"maxLength": 2097152,
"description": "Pasted log text, up to 2 MB. Omit this when url is set. (maximum length 2097152)."
},
"url": {
"type": "string",
"format": "uri",
"description": "Public https log URL, including a GitHub Actions job link, up to 2 MB. Use this or log, not both."
},
"kind": {
"enum": [
"build",
"test",
"server",
"auto"
],
"type": "string",
"description": "build, test, server, or auto. Default auto."
},
"max_sats": {
"type": "integer",
"minimum": 1,
"description": "Most this call may charge. Minimum 1. A higher total charges nothing."
},
"max_lines": {
"type": "integer",
"maximum": 2000,
"minimum": 20,
"description": "Cap on the condensed log. Default 160. (minimum 20, maximum 2000)."
}
}
}Only creates an invoice for the human to pay. It does not move sats and does not spend the credit balance. Put the QR image and the QR URL in your own message. Pay from any Lightning app. Do not paste the invoice. Pass include_invoice only when the human asks. Pass awaiting_buy only when a buy is waiting.
| Argument | Type | Description |
|---|---|---|
| amount_sats | integer | Sats to add. Default 5000. (minimum 1). |
| accept_terms | string | Optional. When this covers the current terms, the account stores that acceptance. The invoice still does not move sats. |
| awaiting_buy | boolean | Default false. Set true only when a buy is waiting on this payment. |
| include_invoice | boolean | Default false. Set true only when the human asks for the raw invoice, or the QR and links cannot be used. |
{
"type": "object",
"properties": {
"amount_sats": {
"type": "integer",
"minimum": 1,
"description": "Sats to add. Default 5000. (minimum 1)."
},
"accept_terms": {
"type": "string",
"description": "Optional. When this covers the current terms, the account stores that acceptance. The invoice still does not move sats."
},
"awaiting_buy": {
"type": "boolean",
"description": "Default false. Set true only when a buy is waiting on this payment."
},
"include_invoice": {
"type": "boolean",
"description": "Default false. Set true only when the human asks for the raw invoice, or the QR and links cannot be used."
}
}
}| currency |
| string |
| ISO 4217 code used in total_cost. Default USD. Use the user's local currency when you know it. Supported: USD, EUR, GBP, CAD, AUD, JPY, CHF, BRL, MXN, INR. |
| quantity | integer | How many calls for sku. Default 1, maximum 3. |
| quote_id* | string | Required. A fresh quote_id from search, describe, or quote that matches this SKU, quantity, and price. A param change is accepted when the price is unchanged and still within max_total_sats. A different price returns quote_mismatch and charges nothing. A missing or stale quote returns quote_required and a fresh quote, and charges nothing. A second buy with the same quote_id returns the first result and charges nothing. |
| total_cost* | string | All-in price from search or describe, shown before approval. One price in sats and local currency. Do not put a balance in this string. Example: 53 sats (~$0.06 USD). For a basket, one total for every item. (minimum length 1, maximum length 200). |
| accept_terms* | string | Required. Copy accept_terms from the example buy call. The current terms version, plus the partial-credit token when the listing is marked Partial credit only. A missing value returns terms_required and charges nothing. |
| max_total_sats* | integer | Maximum all-in sats for this buy, from totalSats. For a basket, the sum. The server rejects the buy and does not pay if the real total is higher. (minimum 1). |
| idempotency_key | string | Optional client key. The same key returns the first result and charges nothing. |
| confirm_duplicates | boolean | Set true only to buy the same line more than once. Otherwise a repeated line is refused and nothing is charged. |
| simulate_balance_sats | integer | Dry run only. Pretend the credit balance is this many sats. Ignored unless dry_run is true. Use 0 to force insufficient_balance without spending. |
| simulate_auto_approve_sats | integer | Dry run only. Pretend auto-approve is this many sats. Ignored unless dry_run is true. Use 0 to force approval_required without spending. |
{
"type": "object",
"oneOf": [
{
"not": {
"required": [
"items"
]
},
"title": "Single SKU",
"required": [
"sku"
]
},
{
"not": {
"required": [
"sku"
]
},
"title": "Basket",
"required": [
"items"
]
}
],
"required": [
"total_cost",
"max_total_sats",
"quote_id",
"accept_terms"
],
"properties": {
"sku": {
"type": "string",
"description": "Catalog id or slug for a single buy. Omit when items is set."
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"sku"
],
"properties": {
"sku": {
"type": "string",
"description": "Catalog id or slug for this line."
},
"params": {
"anyOf": [
{
"type": "object"
},
{
"type": "array",
"items": {}
}
],
"description": "Fields from exampleCall or describe_sku for this line. An object, or a JSON array when that SKU body is an array."
},
"quantity": {
"type": "integer",
"maximum": 3,
"minimum": 1,
"description": "How many calls for this line. Default 1, maximum 3."
},
"confirm_duplicates": {
"type": "boolean",
"description": "Set true to allow this line to repeat."
}
}
},
"maxItems": 8,
"description": "Basket. One entry per SKU the user asked for. One total_cost and one approval for the whole list. A repeated line is refused unless confirm_duplicates is true on this call or on that line."
},
"query": {
"type": "string",
"description": "Free-text query when the SKU has no listed fields."
},
"params": {
"anyOf": [
{
"type": "object"
},
{
"type": "array",
"items": {}
}
],
"description": "Fields from exampleCall or describe_sku. An object of flat keys, requestBody / query / path, or a JSON array when the SKU body is an array."
},
"dry_run": {
"type": "boolean",
"description": "Set true to run every limit, approval, and balance check and return the resulting code. Nothing is charged, no approval is stored, and the hourly buy slot is not used. simulate_balance_sats and simulate_auto_approve_sats apply only when this is true."
},
"currency": {
"enum": [
"USD",
"EUR",
"GBP",
"CAD",
"AUD",
"JPY",
"CHF",
"BRL",
"MXN",
"INR"
],
"type": "string",
"description": "ISO 4217 code used in total_cost. Default USD. Use the user's local currency when you know it. Supported: USD, EUR, GBP, CAD, AUD, JPY, CHF, BRL, MXN, INR."
},
"quantity": {
"type": "integer",
"maximum": 3,
"minimum": 1,
"description": "How many calls for sku. Default 1, maximum 3."
},
"quote_id": {
"type": "string",
"description": "Required. A fresh quote_id from search, describe, or quote that matches this SKU, quantity, and price. A param change is accepted when the price is unchanged and still within max_total_sats. A different price returns quote_mismatch and charges nothing. A missing or stale quote returns quote_required and a fresh quote, and charges nothing. A second buy with the same quote_id returns the first result and charges nothing."
},
"total_cost": {
"type": "string",
"pattern": "^\\d[\\d,]* sats(?:\\s*\\([^)]*\\))?$",
"examples": [
"53 sats (~$0.06 USD)"
],
"maxLength": 200,
"minLength": 1,
"description": "All-in price from search or describe, shown before approval. One price in sats and local currency. Do not put a balance in this string. Example: 53 sats (~$0.06 USD). For a basket, one total for every item. (minimum length 1, maximum length 200)."
},
"accept_terms": {
"type": "string",
"description": "Required. Copy accept_terms from the example buy call. The current terms version, plus the partial-credit token when the listing is marked Partial credit only. A missing value returns terms_required and charges nothing."
},
"max_total_sats": {
"type": "integer",
"minimum": 1,
"description": "Maximum all-in sats for this buy, from totalSats. For a basket, the sum. The server rejects the buy and does not pay if the real total is higher. (minimum 1)."
},
"idempotency_key": {
"type": "string",
"description": "Optional client key. The same key returns the first result and charges nothing."
},
"confirm_duplicates": {
"type": "boolean",
"description": "Set true only to buy the same line more than once. Otherwise a repeated line is refused and nothing is charged."
},
"simulate_balance_sats": {
"type": "integer",
"minimum": 0,
"description": "Dry run only. Pretend the credit balance is this many sats. Ignored unless dry_run is true. Use 0 to force insufficient_balance without spending."
},
"simulate_auto_approve_sats": {
"type": "integer",
"minimum": 0,
"description": "Dry run only. Pretend auto-approve is this many sats. Ignored unless dry_run is true. Use 0 to force approval_required without spending."
}
},
"description": "Required once: total_cost, max_total_sats, quote_id, and accept_terms. Pass sku for one task, or items for a basket. dry_run true runs the limit, approval, and balance checks and returns that code without spending. simulate_balance_sats and simulate_auto_approve_sats apply only on a dry run."
}| usd_per_million | number | Your model input price in dollars per million tokens. Default 1.25. This does not change the Amazap price. |
| confirm_duplicates | boolean | Set true only to price the same line more than once. Otherwise a repeated line is refused and nothing is charged. |
{
"type": "object",
"oneOf": [
{
"not": {
"required": [
"items"
]
},
"title": "Single SKU quote",
"required": [
"sku"
]
},
{
"not": {
"required": [
"sku"
]
},
"title": "Basket quote",
"required": [
"items"
]
}
],
"properties": {
"sku": {
"type": "string",
"description": "Catalog id or slug from search_catalog. Omit when items is set."
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"sku"
],
"properties": {
"sku": {
"type": "string",
"description": "Catalog id or slug for this line."
},
"params": {
"anyOf": [
{
"type": "object"
},
{
"type": "array",
"items": {}
}
],
"description": "Fields to check for this line before payment. An object, or a JSON array when that SKU body is an array."
},
"quantity": {
"type": "integer",
"maximum": 3,
"minimum": 1,
"description": "How many calls to price for this line. Default 1, maximum 3."
},
"confirm_duplicates": {
"type": "boolean",
"description": "Set true to allow this line to repeat."
}
}
},
"maxItems": 8,
"description": "Basket to price. One entry per SKU. A repeated line is refused unless confirm_duplicates is true on this call or on that line. Does not spend sats. Copy buy.quote_id into buy."
},
"params": {
"anyOf": [
{
"type": "object"
},
{
"type": "array",
"items": {}
}
],
"description": "Optional fields to check before payment. An object, or a JSON array when the SKU body is an array. An invalid value, including a page URL that is not http or https, is rejected. The quote does not spend sats."
},
"baseline": {
"enum": [
"visible",
"raw"
],
"type": "string",
"description": "Accepted for older clients. Savings use the page's visible text. raw is ignored."
},
"currency": {
"enum": [
"USD",
"EUR",
"GBP",
"CAD",
"AUD",
"JPY",
"CHF",
"BRL",
"MXN",
"INR"
],
"type": "string",
"description": "ISO 4217. Default USD. Includes MXN."
},
"quantity": {
"type": "integer",
"maximum": 3,
"minimum": 1,
"description": "How many calls to price. Default 1, maximum 3."
},
"accept_terms": {
"type": "string",
"description": "Optional. When this covers the current terms, the account stores that acceptance. The quote still does not spend sats."
},
"usd_per_million": {
"type": "number",
"description": "Your model input price in dollars per million tokens. Default 1.25. This does not change the Amazap price."
},
"confirm_duplicates": {
"type": "boolean",
"description": "Set true only to price the same line more than once. Otherwise a repeated line is refused and nothing is charged."
}
}
}| include_unhealthy | boolean | Include paused SKUs and untested SKUs with a generic schema. Default false. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "How many SKUs to return. Default 8, maximum 20. (minimum 1)."
},
"query": {
"type": "string",
"description": "Keywords or a short description of what you want to buy."
},
"cursor": {
"type": "string",
"description": "Page cursor from the previous search. When set, it overrides offset."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "How many matching SKUs to skip. Use nextCursor from the previous page when it is present. (minimum 0)."
},
"region": {
"type": "string",
"description": "ISO country code. Matches coverage that includes it or is global. Unknown coverage stays in the results, ranked lower."
},
"protocol": {
"enum": [
"L402",
"x402",
"usdc"
],
"type": "string",
"description": "Optional filter: L402, x402 for Lightning x402, or usdc."
},
"buyable_only": {
"type": "boolean",
"description": "Hide SKUs that are not buyable yet, including USDC coming-soon rows. Default true. Pass false to see them. Buyable rows still rank first."
},
"include_demo": {
"type": "boolean",
"description": "Include synthetic demo SKUs. Default false."
},
"include_unhealthy": {
"type": "boolean",
"description": "Include paused SKUs and untested SKUs with a generic schema. Default false."
}
}
}