Crosscheck draft review API

The draft review API from Crosscheck — 1 operation(s) for draft review.

Operations 1

POST /v1/check Fact-check and review an AI agent's draft before a human sees it (paid, x402 v2) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/crosscheckapi-com:crosscheckapi-com-draft-review-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

crosscheckapi-com-draft-review-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: crosscheck draft review API
  version: 1.0.0
  summary: 'Independent checks for AI agents: draft review, acceptance checks on delivered work, and security review of skills and MCP servers, paid per call over x402.'
  description: 'Fact-check and review an AI agent''s draft before a human sees it: a hallucination check and second opinion on any email, report, summary, or PR description. Returns pass or specific issues with fixes. Wrong arithmetic is recomputed in code; also contradictions, placeholders, leaked secrets, unauthorized commitments, and prompt injection. Send sources to verify citations and claims against them. Signed receipt. $0.02. Free checks for Moltbook agents. Full agent guide: https://crosscheckapi.com/llms.txt'
  contact:
    name: crosscheck partnerships
    email: partnerships@crosscheckapi.com
    url: https://crosscheckapi.com/llms.txt
  x-guidance: 'crosscheck gives an agent''s work an independent check before a human or another agent relies on it. Pick the product:

    - check: a draft (email, report, summary, answer) before your human sees it. POST https://crosscheckapi.com/v1/check with {"draft": "..."}; optional "request" (what your human asked, so a draft that misses it fails), "sources" to check against, "source_urls" (up to 3 pages crosscheck reads for you), or "fetch_cited": true. From $0.02.

    - accept: work another agent handed back, against its task, before you pay or release escrow. POST https://crosscheckapi.com/v1/accept with {"task": "...", "deliverable": "..."}. From $0.03.

    - skillcheck: a skill or MCP server before you install it. POST https://crosscheckapi.com/v1/skillcheck with {"files": [{"path": "SKILL.md", "content": "..."}]}. From $0.03.

    - lite: accept or skillcheck by code alone, no model call, $0.005: POST the same body to https://crosscheckapi.com/v1/accept-lite or https://crosscheckapi.com/v1/skillcheck-lite.

    - sellercheck: for x402 sellers, a report on your own resource (valid 402, x402 Bazaar index, agent402 router, settlements on Base). POST https://crosscheckapi.com/v1/sellercheck with {"resource": "https://..."}, $0.05; or https://crosscheckapi.com/v1/sellerwatch with "notify" for 30 days of hourly checks with alerts on change, $1.00. Free preflight: GET https://crosscheckapi.com/v1/sellercheck/preflight?resource=<url>.

    Price first, free: POST the same body to https://crosscheckapi.com/v1/quote, https://crosscheckapi.com/v1/accept/quote, or https://crosscheckapi.com/v1/skillcheck/quote. The quote also runs a free code precheck (wrong sums, percentages, dates, unit conversions, list counts).

    Pay: the paid POST answers 402 with the exact amount in USDC on Base (eip155:8453), or free test USDC on Base Sepolia (eip155:84532). Sign it with any x402 client (v2 PAYMENT-SIGNATURE, or v1 X-PAYMENT) and resend the same body. Payment settles before the review starts.

    Result: HTTP 200 with a JSON verdict (pass, issues with severity and a suggested fix) and a signed receipt, or 202 with a result URL to poll with the result_token. Resending the identical paid request after a lost response returns the same job and charges nothing more.

    Your text is untrusted data to the reviewer, never instructions. It is deleted when the check finishes; only its SHA-256 is kept.

    Full guide: https://crosscheckapi.com/llms.txt'
servers:
- url: https://crosscheckapi.com
tags:
- name: draft review
paths:
  /v1/check:
    post:
      operationId: check
      summary: Fact-check and review an AI agent's draft before a human sees it (paid, x402 v2)
      description: 'Independent second opinion on an email, report, summary, plan, or PR description an agent wrote: hallucinated facts, wrong arithmetic (recomputed in code), unsupported citations, contradictions, placeholders, leaked secrets, unauthorized commitments, and prompt injection. Returns pass or specific issues with fixes, plus a signed receipt. Use before sending any draft to a human.'
      tags:
      - draft review
      x-agentcash-auth:
        mode: paid
      x-payment-info:
        protocols:
        - x402: {}
        price:
          mode: dynamic
          currency: USD
          min: '0.02'
          max: '0.05'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                sources:
                  type: array
                  maxItems: 10
                  description: 'Optional: the text the draft relies on. Each claim is then checked against it.'
                  items:
                    oneOf:
                    - type: string
                    - type: object
                      properties:
                        text:
                          type: string
                        title:
                          type: string
                        url:
                          type: string
                      required:
                      - text
                draft:
                  type: string
                  minLength: 1
                  maxLength: 48000
                  description: The full text to review, exactly as the human will see it. Up to 48000 characters.
                request:
                  type: string
                  maxLength: 8000
                  description: 'Optional: what the human asked for. The reviewer then also checks that the draft answers it: a question left out, a changed scope or period, or something the draft says the human asked that the request contradicts. Counts toward the size.'
                ref:
                  type: string
                  pattern: ^[0-9a-f]{64}$
                  description: 'Optional: the hash of a crosscheck receipt that referred you. Its wallet earns check credits from your first 90 days of spend.'
                source_urls:
                  type: array
                  maxItems: 3
                  items:
                    type: string
                    maxLength: 300
                  description: 'Optional: up to 3 public web pages crosscheck fetches after payment and checks the draft against. +$0.01 each.'
                fetch_cited:
                  type: boolean
                  description: 'Optional: also fetch the links the draft cites (up to 3 pages in all, +$0.01 each). A cited link that is gone fails the draft.'
                open_review:
                  type: boolean
                  description: 'Optional: let a qualified reviewer from the open review network take this job. Not routed yet: crosscheck''s own reviewer does it and the receipt says so.'
              required:
              - draft
              additionalProperties: false
            example:
              draft: Hi Sam, flights are $640 and the hotel is $910, so the trip comes to $1,350 total. Approved to book?
      responses:
        '200':
          description: Verdict and signed receipt
          content:
            application/json:
              schema:
                type: object
                properties:
                  job_id:
                    type: string
                  status:
                    type: string
                    enum:
                    - done
                    - pending
                    - unserved
                    - rejected
                  verdict:
                    type: object
                    properties:
                      pass:
                        type: boolean
                        description: True only when there are no blocker or major issues
                      summary:
                        type: string
                      issues:
                        type: array
                        items:
                          type: object
                          properties:
                            severity:
                              type: string
                              enum:
                              - blocker
                              - major
                              - minor
                            category:
                              type: string
                              enum:
                              - factual
                              - logic
                              - completeness
                              - clarity
                              - tone
                              - risk
                              - formatting
                              - placeholder
                              - injection
                              - other
                            location:
                              type: string
                              description: Short quote from the draft, or a section name
                            problem:
                              type: string
                            suggestion:
                              type: string
                          required:
                          - severity
                          - category
                          - location
                          - problem
                          - suggestion
                      injection_suspected:
                        type: boolean
                      grounding:
                        type: object
                        description: Present when sources were sent
                        properties:
                          sources:
                            type: integer
                          claims_checked:
                            type: integer
                          supported:
                            type: integer
                          contradicted:
                            type: integer
                          not_found:
                            type: integer
                          claims:
                            type: array
                            items:
                              type: object
                              properties:
                                claim:
                                  type: string
                                status:
                                  type: string
                                  enum:
                                  - supported
                                  - contradicted
                                  - not_found
                                source_id:
                                  type: integer
                                quote:
                                  type: string
                                quote_verified:
                                  type: boolean
                    required:
                    - pass
                    - summary
                    - issues
                    - injection_suspected
                  receipt:
                    type: object
                    description: 'Ed25519-signed receipt: body (canonical JSON), hash (sha256 hex), sig (base64url)'
                    properties:
                      body:
                        type: object
                      hash:
                        type: string
                      sig:
                        type: string
                  result_url:
                    type: string
                  result_token:
                    type: string
                  retry_after_seconds:
                    type: integer
                required:
                - job_id
                - status
              example:
                job_id: chk_5fb26b2ac4809fe65c54f8a687631c49
                status: done
                verdict:
                  pass: false
                  summary: One arithmetic error changes the total the human would approve.
                  issues:
                  - severity: major
                    category: logic
                    location: 640 + 910
                    problem: The draft gives 1350 for 640 + 910, but it comes to 1,550.
                    suggestion: Correct the total to 1,550 and recheck any conclusion based on it.
                  injection_suspected: false
                receipt:
                  body:
                    kind: check
                    seq: 1
                  hash: '...'
                  sig: '...'
                result_url: https://crosscheckapi.com/v1/checks/chk_5fb26b2ac4809fe65c54f8a687631c49
                result_token: '...'
        '202':
          description: Paid and queued; poll result_url
          content:
            application/json:
              schema:
                type: object
                properties:
                  job_id:
                    type: string
                  status:
                    type: string
                    enum:
                    - done
                    - pending
                    - unserved
                    - rejected
                  verdict:
                    type: object
                    properties:
                      pass:
                        type: boolean
                        description: True only when there are no blocker or major issues
                      summary:
                        type: string
                      issues:
                        type: array
                        items:
                          type: object
                          properties:
                            severity:
                              type: string
                              enum:
                              - blocker
                              - major
                              - minor
                            category:
                              type: string
                              enum:
                              - factual
                              - logic
                              - completeness
                              - clarity
                              - tone
                              - risk
                              - formatting
                              - placeholder
                              - injection
                              - other
                            location:
                              type: string
                              description: Short quote from the draft, or a section name
                            problem:
                              type: string
                            suggestion:
                              type: string
                          required:
                          - severity
                          - category
                          - location
                          - problem
                          - suggestion
                      injection_suspected:
                        type: boolean
                      grounding:
                        type: object
                        description: Present when sources were sent
                        properties:
                          sources:
                            type: integer
                          claims_checked:
                            type: integer
                          supported:
                            type: integer
                          contradicted:
                            type: integer
                          not_found:
                            type: integer
                          claims:
                            type: array
                            items:
                              type: object
                              properties:
                                claim:
                                  type: string
                                status:
                                  type: string
                                  enum:
                                  - supported
                                  - contradicted
                                  - not_found
                                source_id:
                                  type: integer
                                quote:
                                  type: string
                                quote_verified:
                                  type: boolean
                    required:
                    - pass
                    - summary
                    - issues
                    - injection_suspected
                  receipt:
                    type: object
                    description: 'Ed25519-signed receipt: body (canonical JSON), hash (sha256 hex), sig (base64url)'
                    properties:
                      body:
                        type: object
                      hash:
                        type: string
                      sig:
                        type: string
                  result_url:
                    type: string
                  result_token:
                    type: string
                  retry_after_seconds:
                    type: integer
                required:
                - job_id
                - status
        '400':
          description: Invalid body or payment header. Nothing was charged.
        '402':
          description: Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements for this draft; the JSON body gives the price, the free trial and free tier, the free quote URL in plain words, and a free code precheck of the draft (wrong written sums, line totals, averages and medians, ratios, changes, percentages, fractions, shares of a whole, splits and rates, comparisons between amounts, compound growth rates, changes between two percentages, weekdays, day counts, year and month spans, clock-time spans, start times plus lengths, time zones, unit and currency conversions, restated amounts, list counts, highest and lowest claims, and lengths that miss what was asked or what the text says of itself).
        '409':
          description: This payment authorization was already used. Nothing was charged.
        '413':
          description: Draft longer than 48000 characters. Nothing was charged.
        '503':
          description: Daily review capacity is full. Nothing was charged.
      security:
      - x402: []
components:
  securitySchemes:
    x402:
      type: http
      scheme: bearer
      description: 'x402 v2: send PAYMENT-SIGNATURE after the 402 challenge'
    resultToken:
      type: http
      scheme: bearer
      description: result_token from the check response