{"openapi":"3.1.0","info":{"title":"Toll application API","version":"1.3.0","description":"Free tools, inference, discovery and receipt APIs. Payment protocol endpoints are described by /supported and the separate facilitator guide. Input conversations are limited to 1,800 characters and must end with a user message."},"servers":[{"url":"https://tollpay.shop"}],"paths":{"/api/services":{"get":{"operationId":"listServices","summary":"Search Toll and wallet-signed community listings","parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"owner","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/arc/transfers":{"get":{"operationId":"recentTransfers","summary":"Latest bounded Arc USDC transfer window, not an x402 payment index","responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/status":{"get":{"operationId":"status","summary":"Current payment, RPC and storage readiness","responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/settlements":{"get":{"operationId":"settlements","summary":"Toll journal receipts (not an Arc-wide index)","parameters":[{"name":"wallet","in":"query","schema":{"type":"string"}},{"name":"id","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/v1/models":{"get":{"operationId":"models","summary":"Available inference models and limits","responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/v1/chat/completions":{"post":{"operationId":"complete","summary":"Free compact-model text generation","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["messages"],"additionalProperties":false,"properties":{"model":{"type":"string","enum":["toll-small-135m"]},"messages":{"type":"array","minItems":1,"maxItems":6,"items":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["user","assistant","system"]},"content":{"type":"string","minLength":1,"maxLength":1200}}}},"max_tokens":{"type":"integer","minimum":1,"maximum":96,"default":64},"stream":{"type":"boolean","default":false}}}}}},"responses":{"200":{"description":"JSON completion or SSE chunks when stream=true","content":{"application/json":{"schema":{"type":"object"}},"text/event-stream":{"schema":{"type":"string"}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/tools/text":{"post":{"operationId":"text","summary":"Text analysis","description":"Count words, sentences and reading time. Extract frequent terms from your text without sending it to an AI provider.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":10000}}},"example":{"text":"Agents use Toll to discover services. Toll connects tools and payments."}}}},"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/tools/json":{"post":{"operationId":"json","summary":"JSON inspector","description":"Validate and format JSON, inspect top-level fields and measure payload size. A deterministic tool for API workflows.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":10000}}},"example":{"text":"{\"network\":\"Arc\",\"asset\":\"USDC\"}"}}}},"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/tools/extract":{"post":{"operationId":"extract","summary":"Link & email extraction","description":"Extract and deduplicate URLs and email addresses from supplied text. No crawling, third-party requests or model key required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":10000}}},"example":{"text":"Visit https://example.com or contact hello@example.com"}}}},"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/tools/hash":{"post":{"operationId":"hash","summary":"Content fingerprint","description":"Calculate a SHA-256 fingerprint and UTF-8 byte count for text. Compare content integrity across your application workflow.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":10000}}},"example":{"text":"Pay. Pass. Execute."}}}},"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/arc/network":{"get":{"operationId":"arc_network","summary":"Read Arc network","parameters":[],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/arc/balance":{"get":{"operationId":"arc_balance","summary":"Read Arc balance","parameters":[{"name":"address","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/arc/transaction":{"get":{"operationId":"arc_transaction","summary":"Read Arc transaction","parameters":[{"name":"hash","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/directory":{"get":{"summary":"Paginated public service directory","parameters":[{"name":"offset","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/model-catalog":{"get":{"summary":"Hosted and browser model catalog","parameters":[],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/identity":{"get":{"summary":"Read Base ERC-8004 identity","parameters":[{"name":"id","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/assets":{"get":{"summary":"Read Arc token supply and optional balances","parameters":[{"name":"wallet","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/rewards":{"get":{"summary":"Read non-cash loyalty badges","parameters":[{"name":"wallet","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/arc/history":{"get":{"summary":"Historical ERC-20 USDC transfer windows","parameters":[{"name":"before","in":"query","schema":{"type":"string"}},{"name":"wallet","in":"query","schema":{"type":"string"}},{"name":"direction","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/mpp":{"get":{"summary":"Arc snapshot protected by MPP evm/charge (0.001 USDC)","responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"402":{"description":"WWW-Authenticate payment challenge. Explicit wallet authorization required."},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/swap":{"post":{"summary":"Quote or build an Arc swap; never broadcasts","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["from","to","amount","wallet"],"properties":{"from":{"type":"string","enum":["USDC","EURC","WETH","cirBTC"]},"to":{"type":"string","enum":["USDC","EURC","WETH","cirBTC"]},"amount":{"type":"string"},"wallet":{"type":"string"},"build":{"type":"boolean","default":false},"minimum":{"type":"string","description":"Reviewed atomic minimum; required for build"}}}}}},"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/history-index":{"get":{"operationId":"historyIndexCoverage","summary":"Committed hosted ERC-20 USDC history coverage and storage limits","responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}},"/api/gateway":{"post":{"operationId":"forwardExternalService","summary":"Bounded public HTTPS transport for explicit service inspection/payment requests","description":"No signing or automatic payment. Public IPv4 HTTPS port 443 only; no redirects, URL credentials, private addresses, arbitrary bearer tokens or cookies. Maximum response 1 MiB. Merchant response bytes are base64 encoded; status, payment headers and original URL are preserved in the envelope.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url","method"],"properties":{"url":{"type":"string","format":"uri","maxLength":2048},"method":{"type":"string","enum":["GET","POST"]},"body":{"type":"string","maxLength":8192,"description":"Exact JSON request body for POST"},"paymentSignature":{"type":"string","maxLength":12000},"authorization":{"type":"string","maxLength":12000,"description":"MPP Payment authentication only"}}}}}},"responses":{"200":{"description":"JSON response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input"},"429":{"description":"Usage limit reached"},"503":{"description":"Service unavailable"}}}}}}