---
title: "Run a supported mcp-consumer-fit profile against an owned caller-provided snapshot"
method: POST
path: "/v0/checks"
---

# Run a supported mcp-consumer-fit profile against an owned caller-provided snapshot

`POST /v0/checks`

## Request

- Base URL: `https://exactlane.dev` (the document declares no server; this is the origin it was published from)
- URL: `https://exactlane.dev/v0/checks`
- Auth: HTTP bearer

Static only. Idempotency-Key is required. Compares a caller-provided MCP capability snapshot with caller workflow requirements. The snapshot is a cached claim, not live truth. Live targets and live source modes are rejected without network access. Exactlane produces caller-specific compatibility evidence; the caller owns CONTINUE, UPDATE_INTEGRATION, and HOLD. After a finished report, POST /v0/usage-events to attest how it was consumed; Exactlane does not derive that attestation from the verdict.

## Headers

- `Idempotency-Key` string, required

## Request body

- CheckCreate
  - `capability_revision_id` string, required
  - `previous_capability_revision_id` string
  - `profile` ProfileRef, required
    - `id` 'mcp-consumer-fit', required
    - `version` '0.1' | '0.2' | '0.3', required
  - `requirements` union, required: Profile 0.1 uses requirements 0.1, profile 0.2 uses requirements 0.2 and profile 0.3 uses requirements 0.3. Profile 0.3 also accepts JSON Schema annotation keywords in tool schemas.
    - ConsumerRequirements
      - `exposed_tool_identifier` ExposedToolIdentifierRule: For each required tool, compare len(server_identifier + separator + tool.name) with max_characters; all parts are visible ASCII
        - `max_characters` integer, required
        - `separator` string, required
        - `server_identifier` string, required
      - `max_snapshot_age_seconds` integer
      - `protocol_revision` string, required
      - `required_tools` ToolRequirement[], required
        - `estimated_input_bytes` integer
        - `name` string, required
        - `provided_input_fields` object
        - `required_input_schema_dialect` string: Absolute visible-ASCII URI compared by exact string equality
        - `required_output_paths` object
        - `required_output_schema_dialect` string: Absolute visible-ASCII URI compared by exact string equality
      - `schema_version` 'exactlane.consumer-requirements/0.1', required
      - `transport` string, required
    - ConsumerRequirementsV02
      - `caller_profile_mode` string: Opaque caller profile mode used only for exact, case-sensitive GAP-03 applicability
      - `exposed_tool_identifier` ExposedToolIdentifierRule: For each required tool, compare len(server_identifier + separator + tool.name) with max_characters; all parts are visible ASCII
        - `max_characters` integer, required
        - `separator` string, required
        - `server_identifier` string, required
      - `max_snapshot_age_seconds` integer
      - `protocol_revision` string, required
      - `required_tools` ToolRequirementV02[], required
        - `array_item_schema_requirements` ArrayItemSchemaRequirement[]: At most one input rule and one output rule; duplicate locations are rejected
          - `applies_when_modes` CallerProfileMode[]
          - `schema_location` 'input' | 'output', required
        - `estimated_input_bytes` integer
        - `name` string, required
        - `provided_input_fields` object
        - `required_input_schema_dialect` string: Absolute visible-ASCII URI compared by exact string equality
        - `required_output_paths` object
        - `required_output_schema_dialect` string: Absolute visible-ASCII URI compared by exact string equality
      - `schema_version` 'exactlane.consumer-requirements/0.2' | 'exactlane.consumer-requirements/0.3', required: Requirements 0.2 select profile 0.2 and 0.3 select profile 0.3; the fields are the same
      - `transport` string, required
  - `source_kind` 'CALLER_PROVIDED', required

## Response `201`

Finished bounded report, including report-level UNSUPPORTED or SYSTEM_ERROR when applicable

- CheckResponse
  - `check` CheckReport, required
    - `checks` CheckResult[], required
      - `check_id` string, required
      - `evidence_path` string
      - `expected` unknown
      - `observed` unknown
      - `reason` string
      - `result` 'PASS' | 'FAIL' | 'NOT_RUN' | 'UNSUPPORTED' | 'ERROR', required: Per-check evidence result. PASS: the condition was evaluated with supported semantics and the caller's requirement was met. FAIL: the evaluator proved a concrete incompatibility with the caller's requirement. NOT_RUN: the check did not execute because evidence was missing or stale, or because a prerequisite check could not run. UNSUPPORTED: the condition depends on semantics outside the fixed evaluator profile; this is neither proof of compatibility nor incompatibility. ERROR: a bounded internal runner, artifact, or report condition was represented as a check result.
    - `coverage` Coverage, required
      - `errors` integer, required
      - `executed` integer, required
      - `failed` integer, required
      - `not_run` integer, required
      - `passed` integer, required
      - `required` integer, required
      - `unsupported` integer, required
    - `evaluated_at` string, date-time, required
    - `lifecycle` 'QUEUED' | 'RUNNING' | 'FINISHED' | 'CANCELLED', required
    - `limitations` string[], required
    - `profile` object, required
    - `requirements_digest` string, required
    - `revision_changes` object, required
    - `run_id` string, required
    - `runner` object, required
    - `schema_version` 'exactlane.check-report/0.1', required
    - `source` object, required
      - `captured_at` string, date-time, nullable
      - `kind` 'CALLER_PROVIDED', required
      - `live_endpoint_observed` unknown, required
      - `observed_at` unknown
    - `subject` object, required
    - `trust` object, required
    - `verdict` 'PASS' | 'FAIL' | 'INCOMPLETE' | 'UNSUPPORTED' | 'SYSTEM_ERROR' | 'null', nullable, required: Finished-report aggregation precedence: any ERROR produces SYSTEM_ERROR; otherwise any FAIL produces FAIL; otherwise any UNSUPPORTED produces UNSUPPORTED; otherwise any NOT_RUN produces INCOMPLETE; otherwise the verdict is PASS. Report-level UNSUPPORTED and SYSTEM_ERROR are finished-report outcomes, not HTTP error responses.

## Other responses

- `400`: Malformed request or idempotency key
- `401`: Missing or invalid credential
- `403`: Insufficient scope or disabled live mode
- `404`: Resource absent or not owned
- `409`: Idempotency or unique-event conflict
- `411`: Content-Length is required
- `413`: Request exceeds a hard bound
- `415`: Media type or content encoding is unsupported
- `422`: Request or profile rejected before a finished report exists; distinct from a finished report whose verdict is UNSUPPORTED
- `429`: Principal quota exceeded
- `500`: Uncaught request or service failure for which no normal finished report is produced; distinct from a finished report whose verdict is SYSTEM_ERROR

---

[API](https://skmtc.dev/exactlane/apis/exactlane-preflight-phase-0a.md) · [All operations](https://skmtc.dev/exactlane/apis/exactlane-preflight-phase-0a/llms.txt) · [OpenAPI document](https://skmtc.dev/exactlane/apis/exactlane-preflight-phase-0a/revisions/544a503598aa?raw)
