Verification API
Determine whether a claim is supported by the evidence you supply. This is not a chatbot: verification is deterministic, every conclusion traces to a supplied value, and no evidence is ever fabricated. Accepts raw JSON.
Endpoint
POST /api/v1/verify
Metered as one verification per call; evidence volume counts toward your monthly record allowance.
Request fields
| Field | Type | Description |
|---|---|---|
| claim* | string | The statement to verify. Treated strictly as data, never as instructions. |
| evidence | object[] | Evidence items. Each is { source?, record_id?, field?, value }. Only these values are ever used. |
Result classifications
| Field | Type | Description |
|---|---|---|
| verified | result | Supplied evidence supports the claim and nothing contradicts it. |
| contradicted | result | Supplied evidence disagrees with the claim (or both supports and contradicts it). |
| unsupported | result | Evidence was supplied but none of it bears on the claim. |
| insufficient_evidence | result | No relevant evidence was supplied to assess the claim. |
Evidence & economic integrity
For a monetary claim, the result is only verified when a supplied number actually matches the claimed amount. Counts are never converted into dollars and amounts are never inferred. The response returns the exact supporting and contradicting evidence items plus a confidence derived from that evidence.
Prompt-injection defense
All customer-supplied text — the claim and every evidence value — is treated as data. Instruction-like content (for example "ignore all previous instructions") is detected and ignored; it can never change the verification outcome. When such content is seen, injection_detected is true in the response so you can audit it.
Example request
POST /api/v1/verify
Authorization: Bearer stx_live_...
Content-Type: application/json
{
"claim": "Customer owes $47,250",
"evidence": [
{ "source": "billing", "record_id": "inv_881", "field": "amount", "value": 47250 },
{ "source": "billing", "record_id": "inv_881", "field": "status", "value": "unpaid" }
]
}Example response
{
"request_id": "req_xxx",
"result": "verified",
"supported": true,
"confidence": 0.9,
"evidence": [
{ "source": "billing", "record_id": "inv_881", "field": "amount", "value": 47250, "index": 0 }
],
"contradictions": [],
"missing_evidence": [],
"injection_detected": false,
"reasoning": "A supplied amount matches the claimed amount with no contradicting evidence."
}Code examples
curl -X POST https://crossstax.dev/api/v1/verify \
-H "Authorization: Bearer $CROSSSTAX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"claim": "Customer owes $47,250",
"evidence": [
{ "source": "billing", "record_id": "inv_881", "field": "amount", "value": 47250 }
]
}'import { CrossStax } from "@crossstax/sdk"
const crossstax = new CrossStax({ apiKey: process.env.CROSSSTAX_API_KEY! })
const result = await crossstax.verify({
claim: "Customer owes $47,250",
evidence: [
{ source: "billing", record_id: "inv_881", field: "amount", value: 47250 },
],
})
console.log(result.result, result.confidence) // "verified" 0.9import os, requests
resp = requests.post(
"https://crossstax.dev/api/v1/verify",
headers={"Authorization": f"Bearer {os.environ['CROSSSTAX_API_KEY']}"},
json={
"claim": "Customer owes $47,250",
"evidence": [
{"source": "billing", "record_id": "inv_881", "field": "amount", "value": 47250},
],
},
)
data = resp.json()
print(data["result"], data["confidence"])