---
title: "Latest agent-readiness scan per domain of this client"
method: GET
path: "/readiness"
tags: ["readiness"]
---

# Latest agent-readiness scan per domain of this client

`GET /readiness`

## Request

- Base URL: `https://portal.fractionalteams.com/api/v1`
- URL: `https://portal.fractionalteams.com/api/v1/readiness`
- Auth: HTTP bearer

The Fractional Teams agent-readiness scan of each domain the client has on its scan list: our own score (0–100, with grade and per-layer Find / Read / Act breakdown), the ranked fix list, and a separate conformance reading checked against the AgentReady standard v1.0. Scans run weekly (and on request by the Fractional Teams team); this endpoint is read-only. `engine=ora` returns the ora.ai reads stored alongside for calibration instead of our own.

## Query parameters

- `target` string
- `history` integer
- `engine` 'portal' | 'ora'

## Response `200`

One entry per scan target

- ReadinessTarget[]
  - `domain` string, required
  - `enabled` boolean, required
  - `latest` object, nullable, required: The latest complete scan row with its summary, or null if never scanned
    - `scan_id` integer, required
    - `engine` 'portal' | 'ora', required: portal = the Fractional Teams scan; ora = an ora.ai read stored for calibration
    - `engine_version` string, nullable
    - `standard_version` string, nullable: e.g. "AgentReady 1.0"
    - `status` 'running' | 'complete' | 'partial' | 'failed' | 'blocked', required
    - `triggered_by` string: timer, cli, or admin:<id>
    - `started_at` string, required
    - `finished_at` string, nullable
    - `score` number, nullable
    - `grade` 'A+' | 'A' | 'B' | 'C' | 'D' | 'F' | 'null', nullable
    - `conforms` boolean, nullable: Whether every applicable MUST of AgentReady v1.0 passed (null for ora rows)
    - `fetch_count` integer, nullable
    - `error` string, nullable
    - `summary` ReadinessSummary: The scan summary: score, grade, layers (Find / Read / Act with per-check status and points), actionable (ranked fixes with estimated gain), passing, bonusOpportunities, conformance (per AR-* requirement) and diff against the previous scan.
      - `engine` string, required
      - `domain` string, required
      - `scannedAt` string, date-time, required
      - `status` string
      - `score` number, nullable, required
      - `grade` string, nullable
      - `gradeLabel` string, nullable
      - `developerCapability` boolean
      - `layers` object[], required
      - `actionable` object[]
      - `conformance` object, nullable
      - `diff` object, nullable
  - `history` ReadinessScanRow[]: Present when ?history was given
    - `scan_id` integer, required
    - `engine` 'portal' | 'ora', required: portal = the Fractional Teams scan; ora = an ora.ai read stored for calibration
    - `engine_version` string, nullable
    - `standard_version` string, nullable: e.g. "AgentReady 1.0"
    - `status` 'running' | 'complete' | 'partial' | 'failed' | 'blocked', required
    - `triggered_by` string: timer, cli, or admin:<id>
    - `started_at` string, required
    - `finished_at` string, nullable
    - `score` number, nullable
    - `grade` 'A+' | 'A' | 'B' | 'C' | 'D' | 'F' | 'null', nullable
    - `conforms` boolean, nullable: Whether every applicable MUST of AgentReady v1.0 passed (null for ora rows)
    - `fetch_count` integer, nullable
    - `error` string, nullable

## Other responses

- `401`: Missing or invalid API key (a malformed ftpk_ key never falls back to the demo workspace).
- `403`: The key does not include the aeo section
- `429`: Rate limit exceeded (120 requests per minute per key). Honour Retry-After / RateLimit-Reset.

---

[API](https://skmtc.dev/fractionalteams/apis/fractional-teams-portal-api.md) · [All operations](https://skmtc.dev/fractionalteams/apis/fractional-teams-portal-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fractionalteams/apis/fractional-teams-portal-api/revisions/9f81154af4dc?raw)
