| sku | No | Catalog id or slug for a single buy. Omit when items is set. | |
| items | No | 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 | No | Free-text query when the SKU has no listed fields. | |
| params | No | 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 | No | 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 | No | 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 | No | How many calls for sku. Default 1, maximum 3. | |
| quote_id | Yes | 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 | Yes | 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. For a basket, one total for every item. (minimum length 1, maximum length 200). | |
| accept_terms | Yes | 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 | Yes | 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 | No | Optional client key. The same key returns the first result and charges nothing. | |
| confirm_duplicates | No | Set true only to buy the same line more than once. Otherwise a repeated line is refused and nothing is charged. | |
| simulate_balance_sats | No | 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 | No | Dry run only. Pretend auto-approve is this many sats. Ignored unless dry_run is true. Use 0 to force approval_required without spending. | |