13 / 14VERIFIEDDescribes what runs today
API and reference
Four public paths, five methods, all on https://taonic.tech. None needs a key, none is charged, and none sets a cookie while accounts are off. Only these exist; this page documents nothing that is not deployed.
| Method and path | Purpose | Authentication |
|---|---|---|
POST /api/intelligence | Ask a question | None |
GET /api/intelligence | Every route’s state and the limits | None |
GET /api/accounting | The service’s aggregate accounting | None |
GET /api/network | Robinhood Chain evidence | None |
GET /api/account | Whether accounts are on | None (accounts are off) |
Send one question; receive one answer and its record.
Request
| Field | Type | Rule |
|---|---|---|
prompt | string | Required. 8 to 4,000 characters, plain text. |
capability | string | Optional. auto (default) or one of: text, search, market, verify, image, speech, embeddings. |
task | string | Optional. One of: research, explain, compare, verify. Shapes a text answer. |
depth | string | Optional. brief, standard (default) or detailed: 450, 900 or 1400 output tokens. |
assets | string[] | Optional. Up to 4 names to compare, 60 characters each. |
provider | string | Optional. A route id to try first, e.g. numinous-events. Must be one of TAONIC’s routes. |
texts | string[] | Optional, for Find a match. Up to 6 texts, 600 characters each. |
audio | { mime, base64 } | Optional, for transcription. MP3, WAV, WebM, Ogg, M4A or FLAC, about 1 MB at most. |
The schema is strict: any other key is refused, so a client can never pass a URL, host, model or header through to a provider. The body is read up to 16 KB (1.45 MB with a recording), and must be sent as application/json.
curl -s https://taonic.tech/api/intelligence \
-H 'content-type: application/json' \
-d '{
"prompt": "Will OpenSea launch a token by the end of 2026?",
"capability": "auto",
"depth": "brief"
}'Response
{
"schema": "taonic.intelligence/1",
"requestId": "30e55018-7fde-4f57-a7c6-b05056d7fe8d",
"status": "ANSWERED",
"capability": "market",
"depth": "brief",
"latencyMs": 12447,
"providerLatencyMs": 12119,
"result": "### Summary\nThere is no official confirmation from OpenSea regarding a token launch. …",
"steps": [
{ "role": "Market data", "op": "forecast", "status": "skipped",
"routeId": "synth-forecast", "failure": "CONFIGURATION REQUIRED" },
{ "role": "Forecasts", "op": "events", "status": "answered",
"routeId": "numinous-events", "latencyMs": 5829 },
{ "role": "Reasoning", "op": "chat", "status": "answered",
"routeId": "openrouter-chutes", "latencyMs": 6290 }
],
"usage": {
"taonicChargeUsd": 0,
"grossRevenueUsd": 0,
"tokens": { "promptTokens": 298, "completionTokens": 190 },
"providerCostUsd": null
},
"error": null
}Also present: route (the provider and subnet of the answer), evidence (the provider’s own response id and served model), events (the request’s timed lifecycle), sources, forecast, eventForecasts, media, matches, limitations and reused (set when an identical question’s answer was reused). result is at most 12,000 characters.
Failure states
| status | HTTP | Meaning |
|---|---|---|
| ANSWERED | 200 | An answer, with its record. |
| CONFIGURATION REQUIRED | 200 | The question needs a route whose credential is not set. Nothing was sent. |
| REQUEST REJECTED | 400 | Wrong shape, wrong type, too long, or from another site. |
| RATE LIMIT REACHED | 429 | More than 6 requests a minute from one client. Sends retry-after: 60. |
| PROVIDER REQUEST FAILED | 502 | Every usable route failed or returned something invalid. |
| INTELLIGENCE ROUTE UNAVAILABLE | 503 | No route can take it now, including when the service declines to spend. |
| REQUEST TIMED OUT | 504 | The provider missed its deadline, or the whole-request budget ran out. |
The status is also in the x-taonic-status header. error is always one of TAONIC’s own fixed sentences; a provider’s error text is never returned.
Limits, retention and cost
| Property | Value |
|---|---|
| Rate limit | 6 per minute per client; 60 per minute per server instance |
| Whole-request budget | 100 s, every step and fallback included |
| Retention | A durable record of the request: id, capability, route, provider, subnet, outcome, timing, tokens and cost. Never the question or the answer. An identical question reuses the finished answer from memory for 5 minutes. |
| Cost to you | $0. Charging is off; customer charge and revenue are recorded as 0. |
| Cost to TAONIC | The provider’s own rate, held under a daily ceiling that is booked before each paid call. |
Every route, with whether its credential is set on the answering server (configured), the credential it waits for by name (requires, never a value), its recorded verification (verifiedBy) and this server instance’s health for it. Also the limits and this instance’s counters. Instance counters reset when Cloudflare recycles the instance; the durable figures are at /api/accounting.
curl -s https://taonic.tech/api/intelligenceThe service’s own accounting, in aggregate, read from the durable records: totals, today’s requests and provider cost, and per route the time of its last real answer. It returns no question, answer, user, email, session or budget figure. Cached for 30 seconds.
curl -s https://taonic.tech/api/accounting{
"schema": "taonic.accounting/1",
"state": "RECORDING",
"unit": "micro_usd",
"totals": {
"requests": 10, "answered": 8, "reused": 1, "notAnswered": 1,
"outcomes": { "refusedBeforeProvider": 1, "providerFailed": 0, "clientLeft": 0,
"noCompletion": 0, "inProgress": 0, "unclassified": 0, "spendBooked": 0 },
"providerCostMicroUsd": 829,
"customerChargeMicroUsd": 0, "refundsMicroUsd": 0, "revenueMicroUsd": 0,
"eligibleSurplusMicroUsd": 0, "taoAcquired": "UNAVAILABLE"
},
"routes": [
{ "routeId": "openrouter-chutes", "provider": "OpenRouter to Chutes", "netuid": 64,
"answered": 8, "failed": 0, "lastAnsweredAt": 1790227007761 }
],
"guard": { "state": "ENFORCED", "scope": "Per provider, per UTC day. …" },
"accounts": "OFF",
"charging": "OFF"
}| state | HTTP | Meaning |
|---|---|---|
| RECORDING | 200 | The durable records exist and were read. |
| NO DATABASE | 200 | No database is bound to this deployment; totals is null. |
| UNAVAILABLE | 503 | The database could not be read; totals is null. |
Methods other than GET and HEAD answer 405.
Robinhood Chain evidence, read server side: the RPC’s chain id (must be 4663), the head block, the bridged TAO token, the Uniswap v4 PoolManager’s TAO balance, and an external TAO/USD reference price that is never used as an onchain input. Each reading carries its source, time, age, status and limitation. Cached 10 seconds for chain reads and 60 for the price.
curl -s https://taonic.tech/api/networkWhether accounts are on. With accounts off, every account path answers the same way:
{"schema":"taonic.account/1","state":"OFF","signIn":false}The sign-in paths (POST /api/account/link, the email callback, logout and history) exist in the code and are documented in 05 Activity and accounting. They do nothing while accounts are off.
Every state on this page matches Status. Where they ever differ, Status is right and this page is a defect.