commitops
Docs · For agents · check_claim

A fact source your guardrail calls, not a guardrail.

POST https://commitops.ai/api/v1/check_claim · contract v1, last changed 2026-10-18 · also the check_claim tool at https://commitops.ai/api/mcp
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" }'
statement string
The sentence you are about to say, as you would say it. Never stored; only a salted hash is kept.
account_id string
The customer you are speaking to, when the answer may differ by contract. An account id or exact name.
ResponseAlways the same shape
result verified | 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_ref string | null
The matching claim, e.g. K-021. Null when nothing matched.
statement_matched string | null
The claim's own wording in the register, which may differ from what you asked. Null when nothing matched.
last_checked string | null
When the matching claim was last checked, ISO 8601 UTC. Null when never.
evidence_summary string | null
One line on what the check looked at, e.g. "residency flag removed in api#3980". Null when nothing matched.
say_instead string | null
A safe sentence to use when the result is false or unverified. Null when verified.
reason_code matched | 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.
reason string
The same, in a sentence for a person or a model.
contract_version string
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 unverified and reason_code error. 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-version header and contract_version field 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_code plan.

Machine-readable: openapi.json, operation check_claim_v1. Back to the agent docs.