Your written policy decides, not the model.

Corpus runs your team's rules over the facts your agent sends: same facts, same decision, same trace.

Sample question

Can sales give this customer an 18% discount?

Change a fact to rerun the engine; the curl returns the same hash.

request
curl -X POST https://corpus.trysenda.xyz/v1/experts/deal-desk/query \  -H "Authorization: Bearer sk_corpus_ZBNd7jg2ZZlpXfpKPmv2UppUcYwK33FxYpzBpVkAgX8" \  -H "Content-Type: application/json" \  -d '{"goal":"discount_decision","facts":{"discount_pct":"18","deal_size_usd":"40000","customer_tier":"strategic"}}'
responseresolvedtraceHash 41173f97e161f239df5404ab9d6b98f1
The route this decision tooksample
  1. QuestionCan sales give this customer an 18% discount?
  2. Facts sentdiscount_pct = 18deal_size_usd = 40000customer_tier = strategic
  3. Rule that decidedstrategic_middiscount_pct <= 25 and deal_size_usd < 250000 and customer_tier = strategic
  4. Written inDeal desk policy v3
  5. AnswerApproveddiscount_decision = approved
{  "outcome": "resolved",  "conclusion": "approved",  "needs": null,  "reason": null,  "certainty": 1,  "expert": {"id":"59390982-f382-4817-b2c5-19903520001b","name":"deal-desk","version":1,"graphHash":"72fd4a683dd96ce63cdc29448f75f66e"},  "trace": [    {"id":"s1","parentId":null,"kind":"goal","concept":"discount_decision","provenance":{"kind":"caller","field":"discount_decision"},"expert":"deal-desk","expertVersion":1},    {"id":"s2","parentId":"s1","kind":"fact","concept":"discount_pct","value":"18","provenance":{"kind":"caller","field":"discount_pct"},"expert":"deal-desk","expertVersion":1},    {"id":"s3","parentId":"s1","kind":"fact","concept":"deal_size_usd","value":"40000","provenance":{"kind":"caller","field":"deal_size_usd"},"expert":"deal-desk","expertVersion":1},    {"id":"s4","parentId":"s1","kind":"fact","concept":"customer_tier","value":"strategic","provenance":{"kind":"caller","field":"customer_tier"},"expert":"deal-desk","expertVersion":1},    {"id":"s5","parentId":"s1","kind":"rule","concept":"discount_decision","value":"approved","detail":"discount_pct <= 25 and deal_size_usd < 250000 and customer_tier = strategic","provenance":{"kind":"rule","ruleId":"strategic_mid","expert":"deal-desk","version":1},"expert":"deal-desk","expertVersion":1},    {"id":"s6","parentId":"s5","kind":"document","concept":"discount_decision","value":"approved","provenance":{"kind":"document","documentId":"81234e2f-203f-4801-a514-064ed4733301","version":3,"title":"Deal desk policy"},"expert":"deal-desk","expertVersion":1}  ],  "traceHash": "41173f97e161f239df5404ab9d6b98f1",  "inputHash": "11105ef571be321fb181c501c40c00a7"}

Outcome resolved, trace hash 41173f97e161f239df5404ab9d6b98f1

Every claim quotes your documents.

POST /v1/answers cites the document, version and a code-checked quote for each claim, or refuses with not_in_documents.

request
curl -X POST https://corpus.trysenda.xyz/v1/answers \  -H "Authorization: Bearer $CORPUS_KEY" \  -H "Content-Type: application/json" \  -d '{ "question": "What is the daily meal allowance on a full travel day?" }'
response
{  "mode": "knowledge",  "outcome": "resolved",  "answer": "The daily meal allowance is USD 55 per full travel day.",  "claims": [    {      "text": "The daily meal allowance is USD 55 per full travel day.",      "support": 0.97,      "citations": [        {          "title": "Travel and Expense Policy",          "version": 2,          "chunk": 4,          "quote": "The daily meal allowance is USD 55 per full travel day."        }      ]    }  ],  "unanswered": [],  "reason": null,  "confidence": 0.97}
sample from our evals
Evals per language
LanguageCorrect outcomeCorrect refusalsp50
Englishmodel set free, 2026-09-2616/176/613.7 s
Spanishmodel set free, 2026-09-2615/176/612.4 s
Portuguesepending

Answerable, partial, unanswerable, ambiguous and superseded questions, run on our free development models.

Every answer shows the documents it came from.

Corpus reads your documents in order, keeps only what holds the question up and answers with the quote. If no document says it, it answers nothing, and that is the point.

illustration
  1. QuestionWhat is the daily meal allowance on a full travel day?
  2. Document readTravel and Expense Policy v1Says USD 45, but v2 replaced it. It does not count.
  3. Travel and Expense Policy v2Holds it up:The daily meal allowance is USD 55 per full travel day.
  4. AnswerUSD 55 per full travel dayWith its quote and its document version, checked by code.

USD 55 per full travel day

Nothing is edited in place.

Old decisions replay on the version they read.

Deal desk policysample

v2- Between 10% and 25%: review, whatever the tier.

v3- Between 10% and 25%, under $250,000: a strategic customer is approved automatically.

stepon v2on v3
1goal discount_decisiongoal discount_decision
2discount_pct = 18discount_pct = 18
3deal_size_usd = 40000deal_size_usd = 40000
4rule mid_review = approved_with_reviewcustomer_tier = strategic
5document v2rule strategic_mid = approved
6document v3

The same question on v3 diverges at step 4.

Replaying the v2 decision: {"matches":true,"divergedAt":null}

Experts, for the team that writes rules.

Typed concepts and rules citing document versions, built with forms and tables.

discount_decisionover_capauto_approvedlarge_deal_reviewstrategic_midstandard_mid_reviewdiscount_pctdeal_size_usdcustomer_tierDeal desk policy v3

sample

Every publish runs the tests
TestExpectsGotResult
8% is approvedresolved: approvedresolved: approvedpass
30% is refusedresolved: refusedresolved: refusedpass
18% on $300,000 goes to reviewresolved: approved_with_reviewresolved: approved_with_reviewpass
18% with no tier asks for itneeds_factsneeds_factspass
Strategic 18% goes to review, as v2 saidresolved: approved_with_reviewresolved: approvedfail

Publish refused with tests_failed: 1 of 5 test(s) failed.

REST for your code, MCP for your agents.

One command behind both; OpenAPI generated from the route schemas.

claude mcp add --transport http corpus https://corpus.trysenda.xyz/mcp \  --header "Authorization: Bearer $CORPUS_KEY"
Eight MCP tools
  • ask_corpus
  • query_expert
  • list_experts
  • replay_decision
  • search_documents
  • list_tags
  • get_document
  • create_document

Scope lives on the key.

One sk_corpus_ key per agent or script, shown once, stored hashed.

Experts
Only the experts it names; any other returns out_of_scope.
Tags
Only documents under its tags are retrieved or cited.
Rate
Its own limit per minute. Revoke it and its calls stop.

Priced by what your agents use.

A decision is one query_expert call, whatever its outcome. An answer is one ask_corpus call for every two parts of its question. A page is 3,000 characters indexed. Reads, search and replay don't count.

Plans: decisions, answers and indexed pages a month, and price in USD
BasicProEnterprise
Decisions a month25,000250,000Agreed
Answers a month100400Agreed
Pages indexed a month2501,000Agreed
Monthly$49$199From $799
Yearly, two months free$490$1,990Yearly contract
Get an API keyGet an API keyContact us

Every feature on every plan. No free plan. USD, before tax. Cancel anytime; access runs to the period's end.

What your volume costs

Tokens per answer, assumed
Decisions a month
18,000
Plan
Basic $49 a month
Per decision
$0.0027
Same answers on a frontier model
$432 a month
Same answers on a small, fast model
$28.80 a month

Model list prices, 2026-09-27, USD per million tokens. For a frontier model: $4 in / $20 outFor a small, fast model: $0.2500 in / $1.50 out

A month is 30 days.

What developers ask first.

Is the same question always the same answer?
For decisions, yes: same expert version and facts, same trace hash. Document answers are reworded per call; their quotes are always checked.
Isn't this retrieval over a vector database?
Answers use full-text and vector search with a reranker, then drop any claim whose quote fails the code check or the judge. Decisions use no retrieval and no model.
What happens when a fact is missing?
You get needs_facts, with needs naming each missing concept and its type. Branch on the outcome, never on prose.
Is there a free tier?
No, and no trial. The playground and docs show every request and response before you pay.

Your first decision, with its trace.

Write a policy, publish an expert, mint a key and make your first call.

Want an agent that runs on it? Line