---
title: "Free trial verify — no key, no payment."
method: POST
path: "/v1/verify/trial"
---

# Free trial verify — no key, no payment.

`POST /v1/verify/trial`

## Request

- Base URL: `https://api.verify-api.dev`
- URL: `https://api.verify-api.dev/v1/verify/trial`
- Auth: none required

Runs the verify pipeline for a single claim without an API key or payment. Rate-limited per caller IP. Shared trial-account content is never reused through the verdict caches. Completed responses add trial usage and upgrade information to a verdict; receipts use the shared trial_shared subject. A response timeout instead returns 504 outcome_unknown without a receipt. Unlike prepaid requests, this route has no durable polling contract.

## Request body

- TrialRequest: Free-tier trial input. Subset of VerifyRequest — no freshness knobs or domain filters. Trials always run at the cached tier so common claims cost the caller nothing and cost us nothing (cache hits).
  - `claim` string, required

## Response `200`

Verdict + trial metadata.

- Verdict
  - `id` string, required: Verdict ULID, prefixed vrf_.
  - `verdict` 'supported' | 'refuted' | 'insufficient_evidence' | 'out_of_scope' | 'malformed', required
  - `confidence` number, required: 0-1. Below CONFIDENCE_FLOOR (default 0.75) is downgraded to insufficient_evidence.
  - `source_url` string, uri, nullable: URL of the source that yielded the verdict.
  - `published_date` string, date, nullable
  - `exact_quote` string, nullable: Verbatim passage from the source. Guaranteed to appear character-for-character in the extracted source text.
  - `reasoning` string, 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_usd` number, 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_bucket` string, 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_multiplier` number: Multiplier applied to the base price for this verdict. 1 for default tier, 2 for recent, 5 for fresh (see /v1/pricing).
  - `verdict_age_seconds` integer, nullable: Age of the verdict in seconds when it was returned. 0 for miss (fresh compute). Non-zero for cache hits.
  - `receipt` object: Signed receipt (compact JWS, EdDSA/Ed25519). Verify against /.well-known/jwks.json to prove authenticity without trusting the network path.
    - `jws` string: Compact JWS: `header.payload.signature`.
    - `kid` string: Key id — look up in /.well-known/jwks.json.
    - `issued_at` string, date-time

## Other responses

- `429`: Trial rate limit exceeded. See `Retry-After` and `x-ratelimit-*` headers.
- `504`: Wait expired. Not a verdict. Provider work may continue; no automatic retry.

---

[API](https://skmtc.dev/verify-api/apis/verifyapi.md) · [All operations](https://skmtc.dev/verify-api/apis/verifyapi/llms.txt) · [OpenAPI document](https://skmtc.dev/verify-api/apis/verifyapi/revisions/e901ce13ce0e?raw)
