Verify a single claim.

The pipeline: normalize → cache → search → extract → adjudicate → verbatim-check → persist + bill. Completed results return 200. An expired response wait returns 202 pending, never a fabricated verdict or zero-charge receipt. A database or worker interruption can leave a key unresolved and requires operator reconciliation; do not submit a new key.

post/v1/verify

Request

  • Base URL: https://api.verify-api.dev
  • URL: https://api.verify-api.dev/v1/verify
  • Auth: HTTP bearer

Headers

Idempotency-Keystring

Send a unique client-generated key and persist it before submission. Same account, method, route and body replay the stored response, or return 202 while unresolved. Different body or route returns 409. Unresolved keys are never automatically reclaimed; worker loss requires reconciliation. If omitted for verification, a key is generated and returned, but cannot protect retries if that first response is lost.

Request body

claimstring required

A single factual claim to verify. If you have multiple claims, either send each separately or POST /v1/verify/batch.

as_ofstring date

Optional ISO date. Set for time-sensitive claims. Buckets into perennial / annual / volatile based on claim shape.

max_wait_msinteger

HTTP wait budget, not cancellation. If completion is not confirmed, returns HTTP 202 pending without a verdict, receipt or final charge amount. Poll the account-scoped status URL. Provider work may continue.

domains_allowstring[]

Optional allowlist of source hostnames.

domains_denystring[]

Optional denylist of source hostnames.

freshness'cached' | 'fresh'

Freshness tier. cached (default) honors both cache tiers. fresh bypasses both caches, forces a full pipeline run, and is billed at the fresh-tier multiplier (default 5x). See GET /v1/pricing for current multipliers.

max_age_secondsinteger

HTTP Cache-Control-style max-age for the verdict. Under FRESH_THRESHOLD_SEC (default 3600) triggers the fresh tier; under RECENT_THRESHOLD_SEC (default 86400) triggers the recent tier (default 2x); otherwise treated as cached.

Example request

{
  "claim": "The iPhone 15 launched on September 22, 2023."
}

Response

Verdict.

idstring required

Verdict ULID, prefixed vrf_.

verdict'supported' | 'refuted' | 'insufficient_evidence' | 'out_of_scope' | 'malformed' required
confidencenumber required

0-1. Below CONFIDENCE_FLOOR (default 0.75) is downgraded to insufficient_evidence.

source_urlstring uri nullable

URL of the source that yielded the verdict.

published_datestring date nullable
exact_quotestring nullable

Verbatim passage from the source. Guaranteed to appear character-for-character in the extracted source text.

reasoningstring nullable

1-2 sentence explanation of the verdict.

cache'miss' | 'exact' | 'semantic' required

Which cache tier served this verdict, if any. Semantic hits are cosine ≥ 0.92 within the same as_of bucket.

billed_usdnumber required

Amount billed for this call, in dollars. 0 for insufficient_evidence / out_of_scope / malformed. May exceed base price at recent/fresh tiers.

as_of_bucketstring required

The temporal bucket the claim was assigned to.

freshness_tier'default' | 'recent' | 'fresh'

Which freshness tier the pipeline actually ran at. May differ from the requested tier when the resolver downgrades (e.g. cache hit within max_age_seconds).

price_multipliernumber

Multiplier applied to the base price for this verdict. 1 for default tier, 2 for recent, 5 for fresh (see /v1/pricing).

verdict_age_secondsinteger nullable

Age of the verdict in seconds when it was returned. 0 for miss (fresh compute). Non-zero for cache hits.

Example response

{
  "id": "vrf_01J8Z3W9YQKTB7ZK7C6E7N9J5R",
  "as_of_bucket": "annual:2026-Q3"
}

Changes

No recorded changes to this operation across all 1 revision of this API.