---
title: "Score an OpenAPI spec for AI agents: the full report"
method: POST
path: "/api/readiness/report"
tags: ["Agent readiness"]
---

# Score an OpenAPI spec for AI agents: the full report

`POST /api/readiness/report`

## Request

- Base URL: `https://latitude10.tech`
- URL: `https://latitude10.tech/api/readiness/report`
- Auth: none required

How well AI agents will use your API, from its OpenAPI 3.0/3.1 spec: a 0-100 score over 13 rules (operationIds, summaries, descriptions, parameters, enums, examples, JSON bodies, response and error schemas, pagination, auth, idempotency, tool count), every finding, and a suggested fix per operation. POST {"url": "https://…/openapi.json"} or {"spec": "<JSON or YAML>"}. A spec it can't fetch or check is a 4xx and charges nothing. The free summary (score, rules, top findings) is the MCP tool check_agent_readiness at https://latitude10.tech/mcp/readiness.

## Request body

- object
  - `url` string, uri: https URL of the OpenAPI 3.0 or 3.1 document (JSON or YAML, up to 2 MB).
  - `spec` union: The OpenAPI document itself, as JSON or YAML text or as an object. Send url or spec, not both.
    - string
    - object

## Response `200`

Paid: the score, every rule, every finding and a suggested fix per operation.

- object
  - `report` 'agent-readiness-report', required
  - `api` object, required
    - `title` string, nullable, required
    - `version` string, nullable, required
    - `openapi` string, required
  - `source` string, required: The spec URL, or "inline" for a spec sent in the body.
  - `score` integer, required
  - `verdict` string, required
  - `operations` integer, required
  - `rules` object[], required
    - `id` string, required
    - `title` string, required
    - `weight` integer, required
    - `passing` integer, required
    - `applicable` integer, required
    - `fix` string: How to pass the rule; absent when it passes everywhere.
  - `findingsTotal` integer, required
  - `warnings` string[]
  - `checkedWith` string
  - `findings` object[], required: Every finding, heaviest rules first (up to 2,000).
    - `rule` string, required: The rule id.
    - `where` string, required: The operation, e.g. GET /orders, or "spec".
    - `message` string, required
  - `suggestions` object[], required: A suggested fix per operation that needs one.
    - `operation` string, required
    - `tool` string, required
    - `fields` string[], required
    - `operationId` string
    - `summary` string
    - `description` string
    - `parameters` object: Parameter name to suggested description.
    - `examples` object[]
    - `idempotencyKeyHeader` boolean
  - `howToApply` string
  - `help` string
  - `payment` object, required
    - `network` string, required: CAIP-2 network the payment settled on.
    - `transaction` string, required: Settlement transaction hash; quote it to support.

## Other responses

- `400`: The body is not a JSON object with url or spec; nothing was charged.
- `402`: Payment required. x402 v2 terms (USDC on Base or Solana) in the PAYMENT-REQUIRED header and as the JSON body; x402 v2 only. Pay and retry the same request.
- `422`: The spec couldn't be fetched or isn't OpenAPI 3.0/3.1; nothing was charged.
- `429`: Too many requests from this address; try again later.
- `500`: The check failed on this spec; nothing was charged.
- `502`: The payment facilitator failed. If you were charged, email jorge@latitude10.tech with the transaction.
- `503`: Payments are briefly unavailable; nothing was charged.

---

[API](https://skmtc.dev/latitude10/apis/latitude-10.md) · [All operations](https://skmtc.dev/latitude10/apis/latitude-10/llms.txt) · [OpenAPI document](https://skmtc.dev/latitude10/apis/latitude-10/revisions/ef79d1f8e9c5?raw)
