Intelligence you can put your name on.
Ten domain engines for health, fitness, finance, law, nutrition, research, science, support, practice and growth, behind one open API. Every answer carries its evidence. Every call leaves an audit trail no one can rewrite. Your users meet your brand; your compliance team meets ours.
Get a free API key
250 queries / month. 50 / day (20 RPM). All ten domains. No credit card.
Your API key
Save this now. It will not be shown again.
Next: open the playground or paste this in a terminal:
export DNAI_API_KEY="<paste-your-key>"
curl -X POST https://api.askasha.org/a2a/v1/message:send \
-H "Authorization: Bearer $DNAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"agent_id":"asha","message":{"role":"user","parts":[{"text":"What is sepsis?"}]}}'
Open the Developer Console
Pick a domain, paste your key, hit send against the live endpoint. Copyable curl, Python, and JavaScript samples regenerate as you type. No install. No boilerplate.
- All ten domains
- curl / Python / JS
- Usage & key in one place
One engine. Your name on the front.
You are selling intelligence to your users, so the engine should answer as your product. Send a persona with any request and the engine presents itself by that name, in your tone, on behalf of your organization. What you rename is the voice. What you cannot rename is the conscience.
What becomes yours
- The name the engine answers under
- The organization it speaks for
- The tone: warm, clinical, concise, friendly, or formal
- Your interface, your pricing, your customer relationship
- Your users never see a DNAi agent name or a routing key
What stays DNAi
- Retrieval over 337 curated knowledge collections
- Safety gating and crisis protocols in every domain
- Refusal under uncertainty instead of a confident guess
- Citations on every factual claim, with the sources named
- The audit trail, and the statement that the user is talking to an AI
curl -X POST https://api.askasha.org/a2a/v1/message:send \
-H "Authorization: Bearer $DNAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "asha",
"message": {"role": "user", "parts": [{"text": "Can I take ibuprofen with lisinopril?"}]},
"metadata": {
"persona": {"name": "Nova", "organization": "Northwind Clinics", "tone": "warm"}
}
}'
Persona fields are validated, not trusted. A name that reads like an instruction ("ignore the rules") or a credential ("Dr. Nova", "Nova RN") is rejected and the request runs unbranded; the task record echoes the persona that was accepted. Credentials are yours to state in your product, never the engine's to imply. Deeper customization, a dedicated corpus boost, or a named clinical persona for your practice is an Enterprise conversation: hello@dnai.systems.
Ten domains, one protocol
Start with DNAi Health. It is the engine with the deepest corpus (PubMed, StatPearls, DailyMed, FDA labels), the published benchmark register, and the market that already pays for a grounded clinical API. The other nine domains run on the same key at no extra cost; add them when your product needs them.
Every self-serve tier runs the Base depth: retrieval, evidence gating, falsification, one grounded answer, typically 10 to 30 seconds to the first chunk. Apex, the eleven-engine panel with a domain composer, is a separate product: asynchronous, priced per answer, Enterprise by arrangement. Both are systems, never a single model.
Every domain runs the same engine: retrieval, evidence gating, falsification, then the answer. What differs by domain is the corpus, the refusal posture, and the disclaimers. The agent_id is a routing key: use the domain key (health, legal, ...); the legacy agent ids in parentheses stay valid forever. Your users never see either.
Depth. Production routes each question by clinical stakes to one of three architectures, Base (one retrieval-grounded pass), Mid (three-model merge), or Apex (multi-expert panel with a domain composer). Set metadata.depth to "base" to pin the fast path or "auto" to allow routing; every task reports depth_served. Free, Developer, and Pro keys run Base; auto is honored on Enterprise keys. The three depths are measured side by side on dnai.systems/benchmarks.
DNAi Health
DNAi Fitness
DNAi Finance
DNAi Legal
DNAi Nutrition
DNAi Research
DNAi Science
DNAi Support
DNAi Practice
DNAi Growth
The live agent card lists every routing key, its capabilities, and its knowledge collections. It also lists a platform-service key used by DNAi's own tooling.
What is A2A?
A2A (Agent-to-Agent) is an open interoperability protocol for AI agents to discover and call each other. Your stack speaks A2A once and gets every domain engine an organization has decided to expose. DNAi runs A2A v1.0 in production at api.askasha.org: bearer auth, JSON in, JSON out, a task-based lifecycle you can re-fetch, stream, or cancel.
If you know the OpenAI Chat Completions or Anthropic Messages API, A2A will look familiar. The difference is on the other end: the engine carries its own corpus, its own falsification loop, and its own refusal posture, and it tells you when it does not know.
Quickstart
Three steps to a production call.
1. Provision an API key
curl · signupcurl -X POST https://api.askasha.org/api/a2a/signup \
-H "Content-Type: application/json" \
-d '{"email": "you@yourdomain.com", "tier": "free"}'
Returns a one-time api_key. Store it in a secret manager. Free Sandbox starts at 250 queries/month and 50 queries/day (20 RPM), no credit card required. Top up $10 Pay-As-You-Go via POST /api/a2a/topup to unlock 1,000 evaluation queries/month through January 2027, or subscribe to a monthly plan any time.
2. Call a domain, as yourself
curl · message:sendcurl -X POST https://api.askasha.org/a2a/v1/message:send \
-H "Authorization: Bearer $DNAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "legal",
"message": {"role": "user", "parts": [{"text": "My landlord kept my deposit in Texas. What are my options?"}]},
"metadata": {
"session_id": "user-8812",
"depth": "base",
"persona": {"name": "Casey", "organization": "Renters Union", "tone": "concise"}
}
}'
Swap legal for any routing key above. The response includes the answer, the evidence trail (source list and citations), token usage, and a task ID you can re-fetch through GET /a2a/v1/tasks/{id}. Reuse session_id to keep a conversation going.
3. Stream, retry, cancel, or falsify
POST /a2a/v1/message:stream returns server-sent events: retrieval and reasoning phases, text chunks, then the final task. List your tasks with GET /a2a/v1/tasks. Cancel one in flight with POST /a2a/v1/tasks/{id}:cancel. Stress-test any factual claim with POST /api/feng/falsify, the same falsification engine the domains run on themselves. It takes a signed-in DNAi account session; API keys are not accepted on that route.
Endpoints
/openapi.json): every field, status code, and error, with examples. Rendered at dnai.systems/api-reference. No auth.Errors
Every error returns one JSON object. Branch on error.type: it names the cause and does not change. error.code follows JSON-RPC 2.0 and A2A v1.0 where a standard number exists, so related causes can share a code. error.param names the field or header at fault, error.doc_url links to its row below, and error.request_id matches the X-Request-ID header. Limits send Retry-After in seconds, also in error.retry_after. detail is the older field, kept as it was for existing clients. Send Accept: application/problem+json to get the same facts as RFC 9457 Problem Details.
{
"error": {
"code": -32061,
"type": "daily_quota_exceeded",
"message": "Daily query limit reached (50/50). Resets at midnight UTC. Top up $10 or upgrade tier for more.",
"retry_after": 21600,
"doc_url": "https://dnai.systems/a2a#err-daily_quota_exceeded",
"request_id": "9b2e6c1a-4f3d-4a8e-b1c7-2d5e8f0a3c61"
},
"detail": "Daily query limit reached (50/50). Resets at midnight UTC. Top up $10 or upgrade tier for more."
}
| HTTP | type | code | Cause and what to do |
|---|---|---|---|
| 400 | invalid_request | -32600 | Empty message, message over 500,000 characters, or a signup or billing field the API does not accept. Fix the request. |
| 400 | invalid_params | -32602 | A parameter outside its allowed set, such as metadata.depth other than base or auto. |
| 422 | validation_error | -32602 | The body does not match the schema. error.fields lists each failing field. |
| 401 | authentication_required | -32050 | No Authorization: Bearer header. |
| 401 | invalid_api_key | -32050 | Unknown, mistyped, or rotated key. |
| 403 | permission_denied | -32051 | The key may not call this agent (Asha keys reach Asha only). |
| 403 | account_suspended | -32051 | Usually a failed payment. Fix it in the billing portal; access resumes when the invoice is paid. |
| 404 | not_found | -32052 | No account or billing record for this key. |
| 404 | agent_not_found | -32052 | No public agent has this id or domain key. |
| 404 | task_not_found | -32001 | Unknown task id, or a task owned by another key. |
| 409 | conflict | -32053 | Already exists, such as a second signup with the same email. Rotate the key instead. |
| 409 | task_not_cancelable | -32002 | The task already finished. |
| 410 | agent_retired | -32054 | The agent no longer answers. |
| 400 | idempotency_key_reused | -32055 | The Idempotency-Key was already used with a different body or endpoint. Use a new key. |
| 409 | idempotency_in_progress | -32056 | The first call with this key is still running. Retry after retry_after seconds. |
| 429 | rate_limited | -32060 | Too many requests in 60 seconds. Wait retry_after. |
| 429 | daily_quota_exceeded | -32061 | Daily allowance used. Resets 00:00 UTC. |
| 429 | monthly_quota_exceeded | -32062 | Monthly allowance used. Resets on the 1st, or upgrade. |
| 429 | spending_cap_reached | -32063 | This month's spend cap reached. Resets on the 1st, or upgrade. |
| 429 | signup_rate_limited | -32064 | Too many new keys from one network in 24 hours. |
| 500 | internal_error | -32603 | Unexpected server error. Quote error.error_id to support. |
| 503 | service_unavailable | -32070 | A dependency is briefly down. Retry after a short wait. |
A task that runs and fails still returns HTTP 200 with task.status.state: "FAILED" and the reason in task.status.message, per A2A. The OpenAI-compatible /v1 routes use the OpenAI error shape, with the same type value in error.code.
Retries and request IDs
An answer can take 10 to 60 seconds, so connections drop. Send an Idempotency-Key with message:send and retry with the same key: the first call runs, and any retry within 24 hours gets the saved response with Idempotent-Replayed: true, without running again or using your allowance again.
KEY=$(uuidgen) # reuse $KEY when you retry this request
curl -X POST https://api.askasha.org/a2a/v1/message:send \
-H "Authorization: Bearer $DNAI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $KEY" \
-d '{"agent_id":"asha","message":{"role":"user","parts":[{"text":"What is sepsis?"}]}}'
- Keys are 1 to 255 characters. Use a UUID v4 per question; never put personal data in a key.
- Same key with a different body: 400
idempotency_key_reused. Same key while the first call runs: 409idempotency_in_progress. - Nothing is saved when a call fails auth, limits, or validation, so you can fix it and retry with the same key.
Idempotency-Status: unavailablemeans the retry store was unreachable and the call ran without protection.- Streams take no key. After a dropped stream, read the result with
GET /a2a/v1/tasks/{id}using the id fromtask_created. - Every response carries
X-Request-ID, repeated aserror.request_idon errors. Send your own to match your logs. Quote it when you write to support.
Changelog
Newest first. Every /a2a/v1 response carries A2A-Version: 1.0. Additive changes ship without a version change, so clients must ignore fields they do not know. Behavior changes say what to check.
| Date | Change | Kind |
|---|---|---|
| 2026-10-19 | Developer pricing and evaluation upgrade: (1) Free Sandbox raised to 250 queries/month and 50 queries/day with a decoupled 20 RPM rate limit; (2) Self-serve $10+ Pay-As-You-Go prepaid credit top-up (POST /api/a2a/topup) with a 1,000-query monthly evaluation allowance (250/day, 60 RPM) extended through January 31, 2027; (3) Hybrid query and token overage metering ($0.03 Base query including 2,000 input + 2,000 output tokens; $4.00/1M input and $16.00/1M output above 2,000 tokens; Mid $0.30/query; Apex $0.85/query). | Additive |
| 2026-10-16 | Saved settings per key: GET and PUT /api/a2a/preferences (white-label persona, audience, verbosity, emoji, memory), applied to message:send, message:stream, and /v1/chat/completions; request metadata overrides them. persona works on /v1/chat/completions. | Additive |
| 2026-10-16 | metadata.verbosity (brief, standard, detailed) and metadata.emoji (off, none, on). | Additive |
| 2026-10-16 | Streamed answers now use persona, verbosity, and emoji, token by token. Before this, persona had no effect on streamed answers. Every answer also carries an identity rule so text in retrieved evidence cannot rename the agent. | Behavior change: streamed answers now use your persona |
| 2026-10-16 | Asha CLI 0.2 with asha init, asha config, asha test, and an MCP server (asha mcp) for coding agents. Docs: askasha.org/developers/docs/agents. | Additive |
| 2026-10-13 | Errors on every developer path carry error with type, code, message, doc_url, request_id, and param where relevant; detail is unchanged. Each limit has its own type with Retry-After. Task errors use A2A v1.0 codes. | Additive |
| 2026-10-13 | Idempotency-Key on message:send. Accept: application/problem+json returns RFC 9457 Problem Details. | Additive |
| 2026-10-13 | Usage, upgrade, portal, rotate-key, and BAA keep working after the allowance runs out or the account is suspended. | Behavior change: no 429 or 403 for limits on these routes |
| 2026-10-13 | Non-integer metadata.tau_min or tau_max returns 400 instead of 500. An unhandled 500 puts the error object in error and its text in detail. | Behavior change: check code that reads error as a string on 500 |
| 2026-10-13 | OpenAPI: stable operationIds, a curl sample per operation, per-operation security, and the rendered API reference. | Additive |
| 2026-10-12 | Task read and cancel are scoped to the key that created the task; other keys get 404. | Behavior change: other keys' tasks are no longer visible |
| 2026-10-12 | Optional Google OAuth bearer tokens for A2A (Gemini Enterprise). | Additive |
| 2026-10-11 | OpenAPI YAML at /openapi.yaml; request schemas for /v1/chat/completions and BAA accept. | Additive |
| 2026-09-29 | OpenAI-compatible streaming and metering, self-serve BAA, and the asha command-line tool. | Additive |
| 2026-09-28 | Asha developer site; keys minted on askasha.org are scoped to Asha. | Additive |
| 2026-09-17 | Engine memory is scoped per key and never shared across keys. | Behavior change: other keys' calls no longer inform answers |
| 2026-09-16 | Domain keys (health, fitness, ...), metadata.depth, and the curated OpenAPI document. | Additive |
| 2026-09-15 | Customer keys run Base depth; Mid and Apex need Enterprise. | Behavior change: depth_served reports what ran |
Pricing
Start free with 250 queries/month, top up $10 Pay-As-You-Go to unlock 1,000 evaluation queries/month through January 2027, or pick a monthly plan. One key covers all ten domains. Enterprise adds a HIPAA Business Associate Agreement and dedicated capacity.
Token & Depth Metering Schedule
Every standard query includes up to 2,000 input and 2,000 output tokens (roughly 8,000 characters). Long-context documents or extended syntheses above 2,000 tokens are metered at Corti-parity token rates ($4.00 / 1M input, $16.00 / 1M output) while including 144M-passage clinical grounding and PMID verification.
| Model / Depth | Architecture | Base Query Rate | Included Envelope | Token Overage (>2K) | Availability |
|---|---|---|---|---|---|
asha-base |
Single KIL-grounded pass (144M+ passages, PMID verification) | $0.03 / query | Up to 2,000 in + 2,000 out tokens | +$4.00 / 1M in, +$16.00 / 1M out | All tiers |
asha-mid |
3-model KIL ensemble + physician composer (depth: "auto") |
$0.30 / query | Up to 2,000 in + 2,000 out tokens | +$4.00 / 1M in, +$16.00 / 1M out | Enterprise |
asha-apex |
11-agent A2A panel + FENG Popperian falsification + composer | $0.85 / query | Full multi-agent panel synthesis | Included in panel rate | Enterprise |
Clinical Performance & Competitor Comparison
Measured on peer-reviewed clinical rubrics and pre-registered rare-disease red-team evaluations (dnai.systems/benchmarks · GET /api/benchmarks).
| System / API | Clinical AI 3-Judge (n=500) | HealthBench Hard (n=1,000) | PWS & Crisis Safety (n=96) | API & Token Packaging |
|---|---|---|---|---|
| Asha Healthcare API (Apex-J / P6) | 72.6% (63.8% frozen Apex-J, p = 1.3×10-12) | 44.8% (42.0% frozen Apex-J, p = 3.7×10-37) | 99.0% safe (1/96 unsafe; 85.0% cascade) | $0.03/q (2K in/out incl.) + $4/$16 per 1M overage; $10 PAYG top-up; A2A v1.0, OpenAI SDK, CLI, MCP |
| OpenEvidence / UpToDate Expert AI | 62.6% / 61.3% | Not publicly disclosed on harness | Not evaluated on PWS harness | Clinician point-of-care apps; no public self-serve developer API or white-label persona |
| Corti API | Ambient / coding focus | Ambient / coding focus | Not evaluated on PWS harness | $4/1M in, $16/1M out ($150 free credit); no 144M literature corpus or Popperian falsification |
| GPT-6 Astra (Bare) | 54.9% | 29.4% | 73.0% safe (26/96 unsafe on ChatGPT) | $1.50-$15/1M in, $3-$75/1M out; ungrounded citations |
| Gemini 3.8 Flash / 3.1 Pro (Bare) | Not in 4-arm panel | 26.9% | 76.0% safe (23/96 unsafe) | Frontier token API; 24% unsafe rate on PWS rare-disease red-team |
Spending caps are hard limits. We will not silently exceed them. If you hit your cap mid-month, the API returns HTTP 429 with an upgrade or top-up hint until the next cycle or until you raise the cap. Want one key per domain with usage split out on your invoice? Ask us; volume pricing and BAAs go through the same address.
Fiduciary Contract
What a DNAi domain engine gives you that a base-model API does not.
Evidence on every answer
Every factual claim ships with the Cognitive Inference Units (CIUs) that backed it: retrievable, verifiable, and Merkle-hashed.
Honest abstention
When confidence falls below threshold, the engine says “I don’t know” instead of fabricating. The refusal is enforced in the architecture, whatever name it answers under.
Falsification loop
Claims are stress-tested by the in-house Falsification Engine before they leave the building. You can re-run that loop yourself via /api/feng/falsify.
Tenant isolation
Your queries are scoped to your key. We do not train on your data. We do not sell your data. Ever.
DNAi Health is an information service, not a registered medical device. It does not diagnose, treat, or prescribe, under any name. For clinical decisions, defer to a licensed clinician. The same holds for DNAi Legal (legal information, not legal advice) and DNAi Finance (analysis, not investment advice); every answer says so in its own domain.
Enterprise tier runs under a Business Associate Agreement; the PHI path runs on Vertex AI under a Google Cloud project that holds Vertex AI HIPAA credentials. The model card and the cognition pipeline contract live in the source repository. The public benchmark register is at dnai.systems/benchmarks; the API serves the same file at GET /api/benchmarks.
What we can show you
- The method is patented. US Patent 12,555,008 B1, granted 17 February 2026: evidence-gated cognition with a cryptographic audit trail. Details at dnai.systems/patents.
- The corpus is committed. A cryptographic commitment to the knowledge corpus is available to customers, so you can verify that the corpus your answers came from has not changed underneath you.
- The health engine is benchmarked in the open. DNAi Health in Apex mode scored 65.5% on HealthBench Professional (official length-adjusted metric, September 2026) on our harness with one grader we chose, applied identically to every generally available frontier model we compared. Research previews and vendor self-reports on other harnesses are a different table. The register with confidence intervals is available on request; we publish method and interval together or not at all.
- The safety floor is measured, not asserted. Crisis protocols, refusal under uncertainty, and the AI disclosure are part of every domain and cannot be switched off by a persona.
Live status
Your browser calls each public endpoint directly; nothing below passes through us on the way to you.
- waitingAPI livenessapi.askasha.org/health/live
- waitingA2A fleet health (11 agents)api.askasha.org/a2a/v1/health
- waitingAgent cardapi.askasha.org/.well-known/agent-card.json
- waitingPublic catalogapi.askasha.org/api/agents/
- waitingCorpus cryptographic commitmentapi.askasha.org/api/audit/corpus-state/public
- waitingBenchmark registerapi.askasha.org/api/benchmarks
- waitingAPI alias on dnai.systemsapi.dnai.systems/health/live
Checks start when the page loads.
Reference
- Live agent card · api.askasha.org/.well-known/agent-card.json
- Health probe · api.askasha.org/a2a/v1/health
- Public catalog · api.askasha.org/api/agents/
- API reference · dnai.systems/api-reference
- OpenAPI 3.1 · api.askasha.org/openapi.yaml (also .json)
- A2A protocol spec · a2a-protocol.org
- Engineering whitepaper · How DNAi Thinks
- Talk to a human · hello@dnai.systems