---
title: "Attest how a finished check report was consumed"
method: POST
path: "/v0/usage-events"
---

# Attest how a finished check report was consumed

`POST /v0/usage-events`

## Request

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

Call after a finished owned check, while the same credential is still valid. Idempotency-Key is required. decision is a client-attested CONTINUE, UPDATE_INTEGRATION, or HOLD value; Exactlane does not derive it from the report and there is no universal verdict-to-decision mapping. report_consumed is a required boolean. trigger must be one of NEW_WORK, DEPENDENCY_CHANGE, REQUIREMENTS_CHANGE, INTEGRATION_FAILURE, OTHER_REAL_WORK. MCP check_mcp_capability never creates this event (usage_event_created is false).

## Headers

- `Idempotency-Key` string, required

## Request body

- UsageEventCreate: Client-attested acknowledgement that a finished owned check report was consumed. POST after a finished check while the same credential still owns the run. Exactlane validates and records decision and report_consumed; it does not derive them.
  - `autonomous` boolean, required
  - `check_run_id` string, required: Owned finished check run id from POST /v0/checks or GET /v0/checks/{run_id}
  - `decision` 'CONTINUE' | 'UPDATE_INTEGRATION' | 'HOLD', required: Client-attested operational decision supplied by the caller. Exactlane produces compatibility evidence; the caller owns the operational decision. Exactlane validates and records this value but does not derive it from the report, and there is no universal verdict-to-decision mapping.
  - `integration_ref` string, required: Opaque caller integration identifier (letters, digits, dot, underscore, colon, hyphen)
  - `is_demo` boolean, required
  - `is_health_check` boolean, required
  - `is_retry` boolean, required
  - `occurred_at` string, date-time, required: RFC3339 timestamp. Must not be more than five minutes in the future or older than 45 days.
  - `platform_triggered` boolean, required
  - `report_consumed` boolean, required: Required caller attestation that the finished report was consumed. Exactlane does not infer this from the check.
  - `trigger` 'NEW_WORK' | 'DEPENDENCY_CHANGE' | 'REQUIREMENTS_CHANGE' | 'INTEGRATION_FAILURE' | 'OTHER_REAL_WORK', required: Client-attested real-work category. Public values: NEW_WORK, DEPENDENCY_CHANGE, REQUIREMENTS_CHANGE, INTEGRATION_FAILURE, OTHER_REAL_WORK. Other strings return 422 INVALID_TRIGGER.
  - `workflow_ref` string, required: Opaque caller workflow identifier (letters, digits, dot, underscore, colon, hyphen). Unique with integration_ref per principal; a second distinct body returns 409 DUPLICATE_WORKFLOW_EVENT.

## Response `201`

Client-attested usage event

- UsageEventResponse
  - `usage_event` object, required

## 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 shape or fixed profile is unsupported
- `429`: Principal quota exceeded
- `500`: Bounded internal failure

---

[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)
