THE AGENT INTERFACE

One endpoint. Evidence included.

A small REST API: terms, policy or contract in; obligations, risks and verified source evidence out. Automated information, not legal advice.

1. Submit terms

Generate and save a random UUID as your secret Idempotency-Key. Send exactly one of source_url or source_text.

curl https://termscheck.online/api/v1/check \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: YOUR_RANDOM_UUID' \
  -d '{"source_url":"https://example.com/terms",
       "question":"Do these terms auto-renew or require arbitration?",
       "requirements":["Customer can cancel at any time."],
       "jurisdiction":{"country":"DE"},
       "tier":"standard"}'

Everything except the source is optional: question, requirements (up to 10), risk_focus (topic keys), jurisdiction (country ISO 3166-1 alpha-2, region, governing_law, venue), context, preferred_output_language (BCP-47, e.g. ru, es, ja), additional_urls, discover_related. Without a question you get the full risk report. Public HTML and plain text are supported; paste extracted text from PDF or other formats. The maximum request size is 160,000 bytes.

Current prices

simple: 0.086262 USDC · standard: 0.120491 USDC · deep: 0.169206 USDC

Cost-based tier pricing: 3 × the measured expected variable cost of a document filling the tier (never below the worst-case cost of one attempt), with a 0.05 USDC minimum. The final amount is known before analysis. Version: cost-plus-v1-35d0c2439678.

2. Pay with x402

A 402 response includes PAYMENT-REQUIRED, a base64-encoded x402 v2 challenge. Use a compatible client to authorize the exact USDC amount on Base and resend the identical request with PAYMENT-SIGNATURE. The receiving address and network are in the challenge. Your wallet keys stay with you.

import { x402Client, wrapFetchWithPayment } from '@x402/fetch';
import { registerExactEvmScheme } from '@x402/evm/exact/client';

// signer is your existing authorized wallet signer.
const client = new x402Client();
registerExactEvmScheme(client, { signer });
const paidFetch = wrapFetchWithPayment(fetch, client);
const key = crypto.randomUUID(); // persist before the request
const response = await paidFetch(
  'https://termscheck.online/api/v1/check', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Idempotency-Key': key
    },
    body: JSON.stringify({
      source_url: 'https://example.com/terms',
      question: 'Do these terms auto-renew?',
      tier: 'standard'
    })
  }
);
const report = await response.json();

Read current pricing or call POST /api/v1/quote with the same input before authorizing payment. Set a spending policy in your own agent wallet. The browser interface uses a connected EVM wallet.

3. Read the report

{
  "report_version": "2",
  "legal_status": "automated_information_not_legal_advice",
  "answer": "answered",
  "risk_level": "high",
  "terms": {
    "renewal": {
      "status": "present",
      "normalized_meaning": "Renews monthly unless cancelled 7 days before.",
      "risk": "medium",
      "risk_interpretation": "Late cancellation causes another charge.",
      "jurisdiction_dependent": true,
      "evidence": [0]
    },
    "indemnification": { "status": "not_found", "evidence": [], … }
  },
  "relevant_provisions": [{
    "id": 0,
    "section": "Billing",
    "original_text": "Paid plans renew automatically each month unless…",
    "match": "exact",
    "translation": null
  }],
  "jurisdiction": { "requested": null, "inferred_from_language": false, "notes": [ … ] }
}

Illustrative excerpt only. Twelve topics are always classified: fees_payment, renewal, cancellation_termination, refunds, data_privacy, intellectual_property, liability_limitation, indemnification, dispute_resolution, arbitration_class_action, governing_law_venue, unilateral_changes. The report also lists key_obligations, unusual_clauses, requirement_checks, missing_or_unclear, confidence, sources with SHA-256 fingerprints and retrieval timestamps, conflicts, verification counts and limitations. Evidence arrays hold zero-based relevant_provisions IDs.

How evidence is kept honest

The model must copy each supporting passage verbatim. Every quotation is then located in the retrieved text; only the actual source wording is reported as original_text, with its match type (exact, normalized for whitespace or quote marks, expanded when the model elided text and the full contiguous passage is shown, approximate for minor character differences — never when a negation differs). Quotations that cannot be located are discarded and counted in verification; a topic without verified evidence becomes unclear, never present. not_found is reported only when the whole text was analyzed. risk_level is the highest risk among verified findings. Source wording, normalized_meaning and risk_interpretation are separate fields.

AnswerMeaning
allowedExplicit supporting permission.
prohibitedAn applicable published prohibition.
allowed_with_conditionsPermission subject to stated conditions.
unclearAmbiguity, conflict or incomplete document coverage.
insufficient_informationNo sufficient verified evidence for an answer.
answeredA factual question answered with evidence.
not_applicableNo question was asked; see the report.

4. Retrieve or safely retry

GET /api/v1/requests/{request_id}
Authorization: Bearer YOUR_ORIGINAL_IDEMPOTENCY_KEY

Reports are private to the request key. Processing is normally synchronous. A 202 means a request with this key is already running; retrieve its status. There is no detached background job.

A paid provider or retrieval failure can be retried twice with the identical input and key plus header Terms-Check-Resume: 1, without a payment. (Without that header, an unpaid request always receives the 402 challenge.) After an ambiguous settlement, preserve the request ID and do not authorize another payment. An interrupted processing invocation becomes retryable after six minutes. Changing the input under the same key returns 409.

Errors

{"error":{"code":"invalid_url","message":"Use a public HTTP(S) document URL…"}}
400Invalid input, URL, question or tier limits
401 / 404Missing retrieval key or report not found
402Payment required or rejected
409Idempotency conflict or reused payment
413 / 415Request too large or unsupported input
429Rate limit; respect Retry-After
503Configuration, storage, provider or uncertain settlement

Failures after payment include request_id, paid, status and retryable. Document error codes include document_unavailable, unsupported_document and document_too_large.

Languages

Questions and documents may use different languages. Set preferred_output_language for explanations; otherwise the model uses the question language when it can identify it reliably. Quotes, original_text, titles, section labels, URLs and answer enums stay unchanged. Source language metadata is preserved or detected by the provider; und means unknown. When a quotation's language differs from the output language, a machine translation is returned separately in translation (never authoritative; it translates the cited wording and may not cover an expanded passage in full). Language does not imply jurisdiction: set jurisdiction explicitly; otherwise jurisdiction.notes states that no law was assumed where the effect depends on it.

Safety notices are available in English, Russian, Spanish, Japanese and Chinese. Other output languages may receive English safety notices, explicitly identified by system_notice_language. Model translation quality is provider-dependent. No separate translation call is made. Related-policy detection covers common labels in several languages but is not exhaustive; supply additional_urls for missing policies.

Scope and privacy

Terms Check provides automated information about what supplied and selected linked documents say. It is not a law firm, does not provide legal advice or representation, never states that a clause is legal or enforceable or that you should sign, does not infer permission from silence, and does not determine legal precedence beyond explicit document text. Enforceability depends on jurisdiction and facts. Automatic discovery stays on the same registered domain and follows only policy-like links. Use additional URLs for relevant external policies.

Submitted text and questions go to the configured model provider for analysis (not stored by the provider for training where the provider supports that setting). Reports and inputs are stored privately for retrieval and payment recovery for 30 days (never served afterwards); reports are only accessible with your secret key. Do not submit secrets or confidential documents. See data handling.