Docs · For agents · check_claim
A fact source your guardrail calls, not a guardrail.
What it isFact source
Your agent is about to tell a customer something about the product: a region, an integration, a certification. It sends us the sentence. We answer whether a checked claim says it is true, with the date the check ran. Your platform decides what to do with the answer; we never sit in the conversation and never see the rest of it.
It answers from the company’s claim register. verified needs a true check inside the claim’s recheck window; false comes with the date of the check that said so; anything else, including a claim nobody checked and a sentence that matches no claim, is unverified.
RequestJSON
curl https://commitops.ai/api/v1/check_claim \
-H "Authorization: Bearer co_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "statement": "We have EU data residency", "account_id": "Northwind Freight" }'statementstring- The sentence you are about to say, as you would say it. Never stored; only a salted hash is kept.
account_idstring- The customer you are speaking to, when the answer may differ by contract. An account id or exact name.
ResponseAlways the same shape
resultverified | false | unverified- verified: a checked claim says it is true and the check is in date. false: the latest check says it is not true. unverified: nobody has checked it recently, or we could not answer. Only verified may be said as fact.
claim_refstring | null- The matching claim, e.g. K-021. Null when nothing matched.
statement_matchedstring | null- The claim's own wording in the register, which may differ from what you asked. Null when nothing matched.
last_checkedstring | null- When the matching claim was last checked, ISO 8601 UTC. Null when never.
evidence_summarystring | null- One line on what the check looked at, e.g. "residency flag removed in api#3980". Null when nothing matched.
say_insteadstring | null- A safe sentence to use when the result is false or unverified. Null when verified.
reason_codematched | matched_false | stale | never_checked | no_match | no_register | plan | timeout | error- Why the answer is what it is. Treat an unknown code as unverified.
reasonstring- The same, in a sentence for a person or a model.
contract_versionstring- The date of the last additive change to this v1 contract.
Reason codes
matched- A checked claim matches and its last check is in date.
matched_false- A checked claim matches and its latest check says it is not true. Do not say it.
stale- A claim matches but it has not been checked inside its recheck window. Treat it as unverified.
never_checked- A claim matches but nobody has checked it yet. Treat it as unverified.
no_match- Nothing in the claim register matches this statement. Do not state it as fact.
no_register- No claim register is plugged in, so no statement has been checked against the code, the config or the contract. Treat this as unverified and do not state the capability as fact.
plan- This company's plan does not include the check_claim fact source, which is on Company and above. Treat it as unverified.
timeout- The check ran past its time budget. Treat it as unverified.
error- Something failed on our side. Treat it as unverified.
BehaviourFails open
- Auth.
Authorization: Bearer <key>. A key belongs to one agent principal in one company, issued by that company’s owner. Any key may call check_claim; propose only is enough. - Rate limit. 120 calls a minute per key, per server instance. Over that answers 429 with
Retry-After; treat it as unverified. - Latency. We give the register 1500 ms and answer unverified (
timeout) past it. Set your client timeout at 2 seconds and treat a timeout as unverified. - Failure. Only what you can fix comes back as an error: 400 for a bad body, 401 for a bad key, 429 for too many calls. Anything wrong on our side answers 200 with
unverifiedandreason_codeerror. Never block a reply on us. - Versioning. The major version is in the path. Inside v1 we only add optional fields and reason codes; treat an unknown code as unverified. The
commitops-contract-versionheader andcontract_versionfield carry the date of the last change. - Privacy. We never store the statement. Each call keeps the principal, the result, the latency and a sha256 of the statement salted with the company, so repeated questions can be counted without the words.
- Plan. The fact source is on the Company plan and above. Below it the answer is unverified with
reason_codeplan.
Machine-readable: openapi.json, operation check_claim_v1. Back to the agent docs.