Skip to content
TAONIC

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.

Public endpoints
Method and pathPurposeAuthentication
POST /api/intelligenceAsk a questionNone
GET /api/intelligenceEvery route’s state and the limitsNone
GET /api/accountingThe service’s aggregate accountingNone
GET /api/networkRobinhood Chain evidenceNone
GET /api/accountWhether accounts are onNone (accounts are off)

POST /api/intelligence

Send one question; receive one answer and its record.

Request

Request body fields
FieldTypeRule
promptstringRequired. 8 to 4,000 characters, plain text.
capabilitystringOptional. auto (default) or one of: text, search, market, verify, image, speech, embeddings.
taskstringOptional. One of: research, explain, compare, verify. Shapes a text answer.
depthstringOptional. brief, standard (default) or detailed: 450, 900 or 1400 output tokens.
assetsstring[]Optional. Up to 4 names to compare, 60 characters each.
providerstringOptional. A route id to try first, e.g. numinous-events. Must be one of TAONIC’s routes.
textsstring[]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.

Example request
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

Example response (production, trimmed)
{
  "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

Failure states of POST /api/intelligence
statusHTTPMeaning
ANSWERED200An answer, with its record.
CONFIGURATION REQUIRED200The question needs a route whose credential is not set. Nothing was sent.
REQUEST REJECTED400Wrong shape, wrong type, too long, or from another site.
RATE LIMIT REACHED429More than 6 requests a minute from one client. Sends retry-after: 60.
PROVIDER REQUEST FAILED502Every usable route failed or returned something invalid.
INTELLIGENCE ROUTE UNAVAILABLE503No route can take it now, including when the service declines to spend.
REQUEST TIMED OUT504The 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

Limits, retention and cost of POST /api/intelligence
PropertyValue
Rate limit6 per minute per client; 60 per minute per server instance
Whole-request budget100 s, every step and fallback included
RetentionA 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 TAONICThe provider’s own rate, held under a daily ceiling that is booked before each paid call.

GET /api/intelligence

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.

Example request
curl -s https://taonic.tech/api/intelligence

GET /api/accounting

The 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.

Example request
curl -s https://taonic.tech/api/accounting
Response shape (values as of 2026-09-24, trimmed)
{
  "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"
}
States of GET /api/accounting
stateHTTPMeaning
RECORDING200The durable records exist and were read.
NO DATABASE200No database is bound to this deployment; totals is null.
UNAVAILABLE503The database could not be read; totals is null.

Methods other than GET and HEAD answer 405.

GET /api/network

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.

Example request
curl -s https://taonic.tech/api/network

GET /api/account

Whether accounts are on. With accounts off, every account path answers the same way:

Response, today
{"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.