{"openapi":"3.1.0","info":{"title":"agentic-endpoints","version":"1.0.0","license":{"name":"MIT","identifier":"MIT"},"description":"Pay-per-call utilities for autonomous agents. No signup, no API keys, no invoices: every endpoint answers HTTP 402 with a price and serves the request once payment is signed."},"servers":[{"url":"https://agentic-endpoints.com"}],"components":{"securitySchemes":{"creditToken":{"type":"apiKey","in":"header","name":"X-Credit-Token","description":"A prepaid or trial balance. Get one free with no wallet and no account at POST https://agentic-endpoints.com/credits/trial, or buy credit at POST https://agentic-endpoints.com/credits/buy. Each call is debited at the route's list price and nothing is signed per request."},"x402Payment":{"type":"apiKey","in":"header","name":"X-PAYMENT","description":"A signed x402 payment authorising this one call, built from the challenge returned with HTTP 402. Requires a funded wallet on Base; the credit token does not."}},"schemas":{"PaymentRequired":{"type":"object","description":"Body of a 402. Every field is derived from the same challenge the caller is asked to sign, so it cannot quote a different price or recipient.","properties":{"error":{"type":"string","const":"payment_required"},"price":{"type":"string","description":"List price in dollars, e.g. $0.005"},"resource":{"type":"string","description":"The URL being charged for"},"ways_to_pay":{"type":"object","description":"The three routes in, cheapest first. free_trial needs no wallet, no signature, no account and no email.","properties":{"free_trial":{"type":"object"},"prepaid_credit":{"type":"object"},"per_call_x402":{"type":"object"}}},"accepts":{"type":"array","description":"The x402 challenge, echoed here for v1 clients that read it from the body rather than the payment-required header.","items":{"type":"object"}},"x402Version":{"type":"number"}},"required":["error","ways_to_pay"]}}},"paths":{"/once-key":{"post":{"summary":"Atomic idempotency witness — claim an action exactly once, record its result, and replay that result to every later caller","description":"Atomic idempotency witness — claim an action exactly once, record its result, and replay that result to every later caller. Costs $0.010, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"once_key","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Isolation scope for the claimed key"},"action_key":{"type":"string","description":"Unique key to claim exactly once"},"payload_sha256":{"type":"string","description":"Optional hash of the payload for conflict detection"},"ttl":{"type":"number","description":"Claim lifetime in seconds (default 86400)"},"namespace_token":{"type":"string","description":"Owner token issued on the first claim in a namespace; required on every later request"},"lease_ttl":{"type":"number","description":"Seconds you have to call /once-key/complete before the claim is treated as abandoned and another caller may take it over. Omit to hold the claim for its full ttl."}},"required":["namespace","action_key"]},"example":{"namespace":"invoices-4f9c2b1e8d7a","action_key":"charge-order-1042","ttl":86400,"lease_ttl":300}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"claimed","namespace":"my-app-4f9c2b1e8d7a","action_key":"order-12345","claimed_at":"2026-01-01T00:00:00.000Z","lease_expires_at":"2026-01-01T00:05:00.000Z","expires_at":"2026-01-02T00:00:00.000Z","receipt":"abc123..."}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/scrape":{"post":{"summary":"Web scraping and text extraction","description":"Web scraping and text extraction. Costs $0.010, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"scrape","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to scrape"},"selector":{"type":"string","description":"Optional CSS selector to extract"},"format":{"type":"string","enum":["text","markdown","html"],"description":"Output format (default text)"}},"required":["url"]},"example":{"url":"https://example.com","format":"text"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"url":"https://example.com","title":"Example Domain","content":"This domain is for use in examples...","format":"text","extracted_at":"2026-01-01T00:00:00.000Z"}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/pdf-parse":{"post":{"summary":"PDF text extraction","description":"PDF text extraction. Costs $0.020, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"pdf_parse","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL of the PDF"},"pages":{"type":"array","items":{"type":"number"},"description":"Specific pages to extract (default: all)"}},"required":["url"]},"example":{"url":"https://example.com/report.pdf"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"url":"https://example.com/doc.pdf","page_count":3,"pages":[{"page":1,"text":"..."}],"extracted_at":"2026-01-01T00:00:00.000Z"}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/compress":{"post":{"summary":"Token compression for LLMs","description":"Token compression for LLMs. Costs $0.010, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"compress","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Text to compress"},"target_tokens":{"type":"number","description":"Target token count"},"strategy":{"type":"string","enum":["extractive","truncate"],"description":"Compression strategy (default extractive)"}},"required":["text"]},"example":{"text":"Long input text to be compressed before it is sent to a model.","target_tokens":100,"strategy":"extractive"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"original_length":5000,"compressed_length":1200,"ratio":0.24,"text":"...","strategy":"extractive"}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/vault/store":{"post":{"summary":"Store an encrypted item in the vault. The first store claims the namespace and returns a one-time namespace_token.","description":"Store an encrypted item in the vault. The first store claims the namespace and returns a one-time namespace_token.. Costs $0.02, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"vault_store","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Vault isolation scope"},"key":{"type":"string","description":"Item key"},"ciphertext":{"type":"string","description":"Client-side encrypted payload. This service never sees plaintext."},"alg":{"type":"string","description":"Encryption algorithm label (default aes-256-gcm)"},"ttl":{"type":"number","description":"Optional lifetime in seconds"},"namespace_token":{"type":"string","description":"Required once the namespace has been claimed by a first store"},"if_match":{"type":"string","description":"Compare-and-swap: the item's current updated_at. The write is refused with status 'precondition_failed' if the value changed since then, instead of silently clobbering it."},"if_absent":{"type":"boolean","description":"Create-only. Refuses with status 'precondition_failed' if the key already exists."}},"required":["namespace","key","ciphertext"]},"example":{"namespace":"agent-secrets-4f9c2b1e8d7a","key":"openai-api-key","ciphertext":"base64-of-your-client-side-encrypted-bytes","alg":"AES-GCM","ttl":604800}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"stored","namespace":"my-app-4f9c2b1e8d7a","key":"secret-1","alg":"aes-256-gcm","size_bytes":128,"created_at":"2026-01-01T00:00:00.000Z","updated_at":"2026-01-01T00:00:00.000Z","expires_at":null,"namespace_token":"shown-once-on-first-store","receipt":"abc123..."}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/vault/delete":{"post":{"summary":"Delete an item from the vault (requires the namespace_token)","description":"Delete an item from the vault (requires the namespace_token). Costs $0.005, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"vault_delete","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Vault isolation scope"},"key":{"type":"string","description":"Item key to delete"},"namespace_token":{"type":"string","description":"One-time token issued when the namespace was claimed"}},"required":["namespace","key","namespace_token"]},"example":{"namespace":"agent-secrets-4f9c2b1e8d7a","key":"openai-api-key","namespace_token":"the token returned by your first store"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"deleted","namespace":"my-app-4f9c2b1e8d7a","key":"secret-1"}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/credits/buy":{"post":{"summary":"Buy $6.00 of prepaid credit for $5.00 (20% bonus). Returns a credit token; send it as X-Credit-Token on any paid endpoint to be debited at list price with no per-call payment signature.","description":"Buy $6.00 of prepaid credit for $5.00 (20% bonus). Returns a credit token; send it as X-Credit-Token on any paid endpoint to be debited at list price with no per-call payment signature.. Costs $5.00, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"credits_buy","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"credit_token":"ae_...","balance_usd":"6.000000","paid":"$5.00","bonus":"20%"}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/credits/buy-25":{"post":{"summary":"Buy $32.50 of prepaid credit for $25.00 (30% bonus). Returns a credit token; send it as X-Credit-Token on any paid endpoint to be debited at list price with no per-call payment signature.","description":"Buy $32.50 of prepaid credit for $25.00 (30% bonus). Returns a credit token; send it as X-Credit-Token on any paid endpoint to be debited at list price with no per-call payment signature.. Costs $25.00, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"credits_buy_25","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"credit_token":"ae_...","balance_usd":"32.500000","paid":"$25.00","bonus":"30%"}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/meetings/import":{"post":{"summary":"Import a meeting transcript. Accepts a raw WebVTT or SRT export straight from Zoom, Teams, Meet or a notetaker -- timestamps and cue numbering are stripped so search matches phrases the export split across cues. visibility \"private\" stores ciphertext this service cannot read; \"queryable\" stores plaintext and indexes it for search. The first import claims the namespace and returns a one-time namespace_token.","description":"Import a meeting transcript. Accepts a raw WebVTT or SRT export straight from Zoom, Teams, Meet or a notetaker -- timestamps and cue numbering are stripped so search matches phrases the export split across cues. visibility \"private\" stores ciphertext this service cannot read; \"queryable\" stores plaintext and indexes it for search. The first import claims the namespace and returns a one-time namespace_token.. Costs $0.010, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"meetings_import","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Meeting memory isolation scope"},"title":{"type":"string","description":"Human-readable meeting title"},"occurred_at":{"type":"string","description":"ISO-8601 time the meeting happened"},"source":{"type":"string","description":"Optional hint about the export format. Ignored if it disagrees with the file: WebVTT and SRT are detected from the content itself, unpacked into speaker-attributed text, and any speakers found are added to participants. Plain text is stored verbatim."},"visibility":{"type":"string","description":"Required choice. \"queryable\" = plaintext transcript, searchable, readable by this service. \"private\" (default) = ciphertext you encrypted, never searchable. Sending the wrong field for the mode is refused rather than guessed."},"transcript":{"type":"string","description":"Plaintext. Only with visibility \"queryable\""},"ciphertext":{"type":"string","description":"Client-side encrypted. Only with visibility \"private\""},"alg":{"type":"string","description":"Encryption algorithm label for private meetings"},"participants":{"type":"array","description":"Optional list of attendees"},"namespace_token":{"type":"string","description":"Required once the namespace has been claimed"}},"required":["namespace"]},"example":{"namespace":"my-meetings-4f9c2b1e8d7a","title":"Pricing review","occurred_at":"2026-01-04T15:00:00.000Z","source":"webvtt","visibility":"queryable","transcript":"Alice: we agreed to ship the redesign before the audit...","participants":["Alice","Bob"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"imported","meeting_id":"6f1c3b90-0f6a-4c2e-9a1e-2b7d5c8e4a11","visibility":"queryable","searchable":true,"size_bytes":4820}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/meetings/search":{"post":{"summary":"Full-text search across your queryable meetings. Returns ranked excerpts, and reports how many meetings were private and therefore not searched.","description":"Full-text search across your queryable meetings. Returns ranked excerpts, and reports how many meetings were private and therefore not searched.. Costs $0.010, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"meetings_search","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Meeting memory isolation scope"},"namespace_token":{"type":"string","description":"One-time token issued when the namespace was claimed"},"query":{"type":"string","description":"FTS5 match expression. Quote phrases: \"budget review\""},"limit":{"type":"number","description":"Max results, 1-50 (default 10)"}},"required":["namespace","namespace_token","query"]},"example":{"namespace":"my-meetings-4f9c2b1e8d7a","namespace_token":"the token returned by your first import","query":"pricing","limit":10}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"ok","query":"pricing","count":1,"matches":[{"meeting_id":"6f1c3b90-0f6a-4c2e-9a1e-2b7d5c8e4a11","title":"Pricing review","excerpt":"we agreed to defer the [pricing] change until Q3…"}],"searched_meetings":12,"private_meetings_skipped":3}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/x402/verify":{"post":{"summary":"Before paying a stranger's x402 endpoint, read its live payment challenge and compare it against every previous observation. Flags a changed receiving address, network or asset as critical drift. Reports what the endpoint declares; it does not certify the operator.","description":"Before paying a stranger's x402 endpoint, read its live payment challenge and compare it against every previous observation. Flags a changed receiving address, network or asset as critical drift. Reports what the endpoint declares; it does not certify the operator.. Costs $0.010, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"x402_verify","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public HTTP(S) URL of the paid endpoint. Private and loopback addresses are refused, not fetched."},"method":{"type":"string","description":"Method used to provoke the challenge: POST (default), GET or HEAD"},"expect":{"type":"object","description":"Optional. What you believe to be true, typically from a directory listing. Mismatches are reported so you can trust the live challenge over the listing.","properties":{"pay_to":{"type":"string","description":"Address you expect to pay"},"network":{"type":"string","description":"Chain you expect. A name like 'base' and its CAIP-2 form 'eip155:8453' are treated as the same chain."},"asset":{"type":"string","description":"Token contract address"},"max_price_usd":{"type":"number","description":"Refuse-above threshold in USD"}}}},"required":["url"]},"example":{"url":"https://example.com/api/thing","expect":{"pay_to":"0x...","max_price_usd":0.01}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"ok","url":"https://example.com/api/thing","reachable":true,"charges":{"pay_to":"0x0000000000000000000000000000000000000000","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453","scheme":"exact","price_usd":"0.01"},"first_seen":"2025-01-01T00:00:00.000Z","last_seen":"2025-01-08T00:00:00.000Z","times_seen":14,"first_observation":false,"drift":[],"advice":"This reports only what the endpoint declares about itself. It is not a judgement that the operator will deliver anything."}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/reach":{"post":{"summary":"Can agents reach this URL? Sends one GET as each of nine common clients (curl, node, Python urllib, Python requests, libwww-perl, a browser, GPTBot, ClaudeBot, Googlebot) and reports which are refused and why, plus robots.txt AI-crawler blocks, /llms.txt and the http-to-https redirect. Read-only.","description":"Can agents reach this URL? Sends one GET as each of nine common clients (curl, node, Python urllib, Python requests, libwww-perl, a browser, GPTBot, ClaudeBot, Googlebot) and reports which are refused and why, plus robots.txt AI-crawler blocks, /llms.txt and the http-to-https redirect. Read-only.. Costs $0.010, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"reach","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public HTTP(S) URL to check. Private and loopback addresses are refused, not fetched."}},"required":["url"]},"example":{"url":"https://example.com/"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"ok","url":"https://example.com/","verdict":"shadowed","summary":"example.com answered 7 of 9 clients but refused python-urllib, libwww-perl: Cloudflare Browser Integrity Check (or a User Agent Blocking rule) refused this User-Agent string.","clients":[{"client":"curl","status":200,"reached":true},{"client":"python-urllib","status":403,"reached":false,"edge_refusal":{"code":"1010"}}],"robots_txt":{"status":200,"blocks_ai_crawlers":[]},"llms_txt":{"present":true,"status":200},"http_redirect":{"status":308,"preserves_post":true}}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/reach/report":{"post":{"summary":"Full reachability report for one site, up to 20 pages: every page checked from nine common clients, the likely cause of each refusal (Cloudflare 1010, firewall rule, bot challenge, origin server, AI-crawler block, POST-dropping redirect, missing llms.txt) with the exact fix and a curl that reproduces it, a prioritised fix list, a private report page, and 3 free re-scans within 30 days compared before and after.","description":"Full reachability report for one site, up to 20 pages: every page checked from nine common clients, the likely cause of each refusal (Cloudflare 1010, firewall rule, bot challenge, origin server, AI-crawler block, POST-dropping redirect, missing llms.txt) with the exact fix and a curl that reproduces it, a prioritised fix list, a private report page, and 3 free re-scans within 30 days compared before and after.. Costs $69.00, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"reach_report","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"},"description":"1 to 20 public HTTP(S) URLs on one site (at most 3 hostnames)"}},"required":["urls"]},"example":{"urls":["https://example.com/","https://example.com/api/door"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"accepted","report_id":"3f2a9c1e5b7d4e8a9c217d4e5f6a8b90","report_url":"https://agentic-endpoints.com/reach/report/3f2a9c1e5b7d4e8a9c217d4e5f6a8b90","pages":2,"eta_seconds":35}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/meetings/summarize":{"post":{"summary":"Ask a question in plain language and get an answer grounded in your own meetings, with a citation to the meeting each claim came from. Retrieves the relevant transcripts and reasons over them. When nothing matches, no answer is generated rather than one being invented.","description":"Ask a question in plain language and get an answer grounded in your own meetings, with a citation to the meeting each claim came from. Retrieves the relevant transcripts and reasons over them. When nothing matches, no answer is generated rather than one being invented.. Costs $0.050, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"meetings_summarize","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Meeting memory isolation scope"},"namespace_token":{"type":"string","description":"One-time token issued when the namespace was claimed"},"question":{"type":"string","description":"A plain-language question. Not FTS5 syntax -- the search terms are derived from it and returned as `terms`."},"limit":{"type":"number","description":"Max meetings to consult, 1-8 (default 5)"}},"required":["namespace","namespace_token","question"]},"example":{"namespace":"my-meetings-4f9c2b1e8d7a","namespace_token":"the token returned by your first import","question":"what did we decide about pricing?","limit":5}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"ok","question":"what did we decide about pricing?","answer":"You agreed to defer the pricing change until Q3 [6f1c3b90-0f6a-4c2e-9a1e-2b7d5c8e4a11].","consulted":[{"meeting_id":"6f1c3b90-0f6a-4c2e-9a1e-2b7d5c8e4a11","title":"Pricing review","chars_used":4820,"truncated":false}],"terms":["decide","pricing"],"ai_generated":true,"searched_meetings":12,"private_meetings_skipped":3}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/meetings/get":{"post":{"summary":"Fetch one meeting in full, by meeting_id (requires the namespace_token)","description":"Fetch one meeting in full, by meeting_id (requires the namespace_token). Costs $0.005, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"meetings_get","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Meeting memory isolation scope"},"namespace_token":{"type":"string","description":"One-time token issued when the namespace was claimed"},"meeting_id":{"type":"string","description":"Returned by /meetings/import"}},"required":["namespace","namespace_token","meeting_id"]},"example":{"namespace":"my-meetings-4f9c2b1e8d7a","namespace_token":"the token returned by your first import","meeting_id":"6f1c3b90-0f6a-4c2e-9a1e-2b7d5c8e4a11"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"ok","meeting_id":"6f1c3b90-0f6a-4c2e-9a1e-2b7d5c8e4a11","title":"Pricing review","visibility":"queryable","transcript":"Alice: we agreed to defer the pricing change until Q3..."}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/meetings/list":{"post":{"summary":"List the meetings in a namespace with their metadata, newest first. Never returns transcripts (requires the namespace_token)","description":"List the meetings in a namespace with their metadata, newest first. Never returns transcripts (requires the namespace_token). Costs $0.005, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"meetings_list","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Meeting memory isolation scope"},"namespace_token":{"type":"string","description":"One-time token issued when the namespace was claimed"},"limit":{"type":"number","description":"Max results, 1-500 (default 100)"}},"required":["namespace","namespace_token"]},"example":{"namespace":"my-meetings-4f9c2b1e8d7a","namespace_token":"the token returned by your first import"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"ok","count":1,"meetings":[{"meeting_id":"6f1c3b90-0f6a-4c2e-9a1e-2b7d5c8e4a11","title":"Pricing review","visibility":"queryable","searchable":true}]}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/meetings/delete":{"post":{"summary":"Delete a meeting and remove it from the search index (requires the namespace_token)","description":"Delete a meeting and remove it from the search index (requires the namespace_token). Costs $0.001, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"meetings_delete","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Meeting memory isolation scope"},"namespace_token":{"type":"string","description":"One-time token issued when the namespace was claimed"},"meeting_id":{"type":"string","description":"Returned by /meetings/import"}},"required":["namespace","namespace_token","meeting_id"]},"example":{"namespace":"my-meetings-4f9c2b1e8d7a","namespace_token":"the token returned by your first import","meeting_id":"6f1c3b90-0f6a-4c2e-9a1e-2b7d5c8e4a11"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"deleted","meeting_id":"6f1c3b90-0f6a-4c2e-9a1e-2b7d5c8e4a11"}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/vault/list":{"post":{"summary":"List the keys held in a vault namespace with their metadata, without returning any ciphertext (requires the namespace_token)","description":"List the keys held in a vault namespace with their metadata, without returning any ciphertext (requires the namespace_token). Costs $0.005, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"vault_list","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Vault isolation scope"},"namespace_token":{"type":"string","description":"One-time token issued when the namespace was claimed"}},"required":["namespace","namespace_token"]},"example":{"namespace":"agent-secrets-4f9c2b1e8d7a","namespace_token":"the token returned by your first store"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"listed","count":1,"items":[{"key":"openai-api-key","alg":"aes-256-gcm","size_bytes":184,"created_at":"2026-01-01T00:00:00.000Z","updated_at":"2026-01-01T00:00:00.000Z","expires_at":null}]}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/vault/exists":{"post":{"summary":"Check whether a key exists in the vault without returning its ciphertext (requires the namespace_token)","description":"Check whether a key exists in the vault without returning its ciphertext (requires the namespace_token). Costs $0.005, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"vault_exists","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Vault isolation scope"},"key":{"type":"string","description":"Item key to test"},"namespace_token":{"type":"string","description":"One-time token issued when the namespace was claimed"}},"required":["namespace","key","namespace_token"]},"example":{"namespace":"agent-secrets-4f9c2b1e8d7a","key":"openai-api-key","namespace_token":"the token returned by your first store"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"exists":true,"namespace":"my-app-4f9c2b1e8d7a","key":"secret-1"}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/vault/retrieve":{"post":{"summary":"Retrieve an encrypted item from the vault (requires the namespace_token issued at claim time)","description":"Retrieve an encrypted item from the vault (requires the namespace_token issued at claim time). Costs $0.02, paid per call with x402 (USDC on Base), or debited from a prepaid balance by sending an X-Credit-Token header.","operationId":"vault_retrieve","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","description":"Vault isolation scope"},"key":{"type":"string","description":"Item key to retrieve"},"namespace_token":{"type":"string","description":"One-time token issued by the first /vault/store call that claimed this namespace"}},"required":["namespace","key","namespace_token"]},"example":{"namespace":"agent-secrets-4f9c2b1e8d7a","key":"openai-api-key","namespace_token":"the token returned by your first store"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"retrieved","namespace":"my-app-4f9c2b1e8d7a","key":"secret-1","ciphertext":"base64-encoded-ciphertext","alg":"aes-256-gcm","created_at":"2026-01-01T00:00:00.000Z","updated_at":"2026-01-01T00:00:00.000Z","expires_at":null,"receipt":"abc123..."}}}},"402":{"description":"Payment required. The body names the price and all three ways to pay, including the free trial that needs no wallet. The `payment-required` response header carries the same challenge base64-encoded, which is where x402 v2 clients read it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate limited."}},"security":[{"creditToken":[]},{"x402Payment":[]},{}]}},"/once-key/complete":{"post":{"summary":"Record the outcome of a claimed action_key","description":"Stores the result of work performed under a claim. Later claims of the same action_key return status \"duplicate\" together with this result, so the caller that lost the race can continue instead of repeating the side effect. Free: the claim price covers the whole lifecycle. Completion is final and cannot be overwritten.","operationId":"once_key_complete","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string"},"action_key":{"type":"string"},"namespace_token":{"type":"string"},"result":{"description":"Any JSON value, up to 16 KB once serialized."},"ttl":{"type":"number","description":"How long to retain the result, in seconds. Default 86400."}},"required":["namespace","action_key"]},"example":{"namespace":"invoices-4f9c2b1e8d7a","action_key":"charge-order-1042","namespace_token":"the token issued on your first claim","result":{"charge_id":"ch_abc123","amount":4200}}}}},"responses":{"200":{"description":"Success, or a settled refusal. Paid routes answer 200 with a machine-readable `status` (e.g. \"forbidden\", \"not_found\", \"precondition_failed\", \"conflict\") rather than a 4xx, because any status >=400 cancels x402 settlement and would give the answer away for free. Always branch on `status`, not on the HTTP code."},"400":{"description":"Malformed request."},"404":{"description":"No such record."},"429":{"description":"Rate limited."}},"security":[]}},"/vault/rotate-token":{"post":{"summary":"Replace a vault namespace token","description":"Mints a new namespace_token and invalidates the current one, which must be presented to authorize the rotation. Free on purpose: charging for the correct response to a suspected leak is how you end up with callers who never rotate. There is no recovery if the token is lost — any such path would be a second way into the namespace and would serve an attacker just as well as the owner.","operationId":"vault_rotate_token","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string"},"namespace_token":{"type":"string"}},"required":["namespace","namespace_token"]},"example":{"namespace":"agent-secrets-4f9c2b1e8d7a","namespace_token":"your current token"}}}},"responses":{"200":{"description":"Success, or a settled refusal. Paid routes answer 200 with a machine-readable `status` (e.g. \"forbidden\", \"not_found\", \"precondition_failed\", \"conflict\") rather than a 4xx, because any status >=400 cancels x402 settlement and would give the answer away for free. Always branch on `status`, not on the HTTP code."},"400":{"description":"Malformed request."},"404":{"description":"No such record."},"429":{"description":"Rate limited."}},"security":[]}},"/once-key/release":{"post":{"summary":"Surrender a claim whose work failed","description":"Frees a claimed action_key so a retry can proceed immediately rather than waiting out the lease. Free. Refuses with 409 if the key was already completed, since releasing it would discard the recorded result and permit a second side effect.","operationId":"once_key_release","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string"},"action_key":{"type":"string"},"namespace_token":{"type":"string"}},"required":["namespace","action_key"]},"example":{"namespace":"invoices-4f9c2b1e8d7a","action_key":"charge-order-1042","namespace_token":"the token issued on your first claim"}}}},"responses":{"200":{"description":"Success, or a settled refusal. Paid routes answer 200 with a machine-readable `status` (e.g. \"forbidden\", \"not_found\", \"precondition_failed\", \"conflict\") rather than a 4xx, because any status >=400 cancels x402 settlement and would give the answer away for free. Always branch on `status`, not on the HTTP code."},"400":{"description":"Malformed request."},"404":{"description":"No such record."},"429":{"description":"Rate limited."}},"security":[]}},"/credits/trial":{"post":{"summary":"Get a free evaluation credit, no account required","description":"Returns a credit token carrying a $0.10 balance — about 10 calls — immediately, with no account, no email, no wallet and no approval step. Send it as X-Credit-Token on any paid endpoint exactly like a purchased one. Takes no request body. One allowance per client address: calling again returns the same token and whatever balance remains, so retrying is safe but does not top the balance up. It exists because paying per call requires a funded wallet first, which asks a caller to commit money before it can tell whether the answer is worth buying.","operationId":"credits_trial","responses":{"200":{"description":"Success, or a settled refusal. Paid routes answer 200 with a machine-readable `status` (e.g. \"forbidden\", \"not_found\", \"precondition_failed\", \"conflict\") rather than a 4xx, because any status >=400 cancels x402 settlement and would give the answer away for free. Always branch on `status`, not on the HTTP code."},"400":{"description":"Malformed request."},"404":{"description":"No such record."},"429":{"description":"Rate limited."}},"security":[]}},"/credits/balance":{"get":{"summary":"Check a prepaid credit balance","description":"Returns the remaining balance for a credit token, and what it has been spent on. Free, and takes no request body: the token goes in the X-Credit-Token header. Charging a buyer to find out how much they have left would be a good way to never sell them a second one.","operationId":"credits_balance_get","parameters":[{"name":"X-Credit-Token","in":"header","required":true,"description":"The token issued by /credits/buy or /credits/trial. Required.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success, or a settled refusal. Paid routes answer 200 with a machine-readable `status` (e.g. \"forbidden\", \"not_found\", \"precondition_failed\", \"conflict\") rather than a 4xx, because any status >=400 cancels x402 settlement and would give the answer away for free. Always branch on `status`, not on the HTTP code."},"400":{"description":"Malformed request."},"404":{"description":"No such record."},"429":{"description":"Rate limited."}},"security":[]},"post":{"summary":"Check a prepaid credit balance","description":"Returns the remaining balance for a credit token, and what it has been spent on. Free, and takes no request body: the token goes in the X-Credit-Token header. Charging a buyer to find out how much they have left would be a good way to never sell them a second one.","operationId":"credits_balance","parameters":[{"name":"X-Credit-Token","in":"header","required":true,"description":"The token issued by /credits/buy or /credits/trial. Required.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success, or a settled refusal. Paid routes answer 200 with a machine-readable `status` (e.g. \"forbidden\", \"not_found\", \"precondition_failed\", \"conflict\") rather than a 4xx, because any status >=400 cancels x402 settlement and would give the answer away for free. Always branch on `status`, not on the HTTP code."},"400":{"description":"Malformed request."},"404":{"description":"No such record."},"429":{"description":"Rate limited."}},"security":[]}}}}