CueFrame Checkpoints API

The checkpoints API from CueFrame — 5 operation(s) for checkpoints.

GitHub OpenAPI

Operations 5

GET /v1/review/{id} Read a hosted review packet (token-authenticated page data) #
POST /v1/review/{id}/decision Record a hosted review decision (the same resume rail) #
GET /v1/checkpoints List checkpoints (scope to a compose job or project) #
GET /v1/checkpoints/{id} Get a checkpoint packet #
POST /v1/checkpoints/{id}/resume Answer a held checkpoint (approve / revise / abandon) #

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/cueframe-ai:cueframe-ai-checkpoints-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

cueframe-ai-checkpoints-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cueframe Ai Checkpoints API
  version: v1
  contact:
    name: CueFrame
    url: https://cueframe.ai
    email: support@cueframe.ai
  license:
    name: Apache-2.0
    identifier: Apache-2.0
  description: 'Operations tagged checkpoints across 2 of this provider''s published API definitions: cueframe-ai-openapi.json, cueframe-ai-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.cueframe.ai
  description: Production
tags:
- name: checkpoints
paths:
  /v1/review/{id}:
    get:
      operationId: getReviewPacket
      tags:
      - checkpoints
      summary: Read a hosted review packet (token-authenticated page data)
      description: 'The checkpoint page''s data: stage artifact (rendered from the packet''s own snapshot), presigned stills, critic verdicts, the money triple, the recorded decision once resolved, and the run''s v1→vN version stack. Authenticated by the packet''s reviewToken (?token=) — the URL from the checkpoint.ready webhook / get_checkpoint. Expired or already-answered packets still render (with their decision), never an error page.'
      security: []
      responses:
        '200':
          description: The review packet + version stack.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewPacketResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited. Retry-After header present.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: Internal error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      parameters:
      - schema:
          type: string
        in: path
        name: id
        required: true
    servers:
    - url: https://api.cueframe.ai
      description: Production
  /v1/review/{id}/decision:
    post:
      operationId: recordReviewDecision
      tags:
      - checkpoints
      summary: Record a hosted review decision (the same resume rail)
      description: Record approve / revise / abandon from the hosted page. Server-side this IS POST /v1/checkpoints/{id}/resume — one implementation; the driving agent learns of the decision via the checkpoint webhooks / wait_job. 409 when the packet is no longer awaiting (superseded, expired, or already decided).
      security: []
      responses:
        '200':
          description: Decision recorded; the run resumes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewDecisionResponse'
        '400':
          description: Bad request — validation_error / invalid_cursor / invalid_query.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '402':
          description: Payment required — billing_required or x402 payment_*.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '409':
          description: Conflict — stale_etag / idempotency_conflict / suggestions_already_complete.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited. Retry-After header present.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: Internal error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      parameters:
      - schema:
          type: string
        in: path
        name: id
        required: true
    servers:
    - url: https://api.cueframe.ai
      description: Production
  /v1/checkpoints:
    get:
      operationId: listCheckpoints
      tags:
      - checkpoints
      summary: List checkpoints (scope to a compose job or project)
      description: The version stack of approval packets, newest first. Scope with ?composeJobId= to see one run's gate history (v1→vN with per-version status + decisions) or ?projectId= for everything reviewable in a project.
      security:
      - bearerAuth: []
      - oauth2:
        - projects:read
      - x402: []
      x-permissions:
        projects:
        - read
      parameters:
      - name: limit
        in: query
        required: false
        description: Page size (1..100), default 20. Out-of-range or unparseable clamps into the range.
        schema:
          type: integer
          minimum: 1
          maximum: 100
      - name: after
        in: query
        required: false
        description: Opaque cursor from the previous page's `pagination.nextCursor`. Forward-only.
        schema:
          type: string
      - name: composeJobId
        in: query
        required: false
        description: Scope to ONE compose run — its v1→vN gate history with per-version status and decisions.
        schema:
          type: string
      - name: projectId
        in: query
        required: false
        description: Scope to everything reviewable in one project.
        schema:
          type: string
      responses:
        '200':
          description: Paginated checkpoints.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckpointListResponse'
        '400':
          description: Bad request — validation_error / invalid_cursor / invalid_query.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Missing or invalid Authorization header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '402':
          description: 'Payment required. Returned when the caller presents no API key on a priced operation: the body AND the `Payment-Required` header carry the x402 v2 challenge (accepted scheme, network, USDC asset, amount, payTo). Sign the EIP-3009 authorization and retry with a `PAYMENT-SIGNATURE` header. A KEYED caller sees this status instead when their plan lacks or has exhausted the feature (`billing_required`).'
          headers:
            Payment-Required:
              description: Base64 x402 v2 PaymentRequired envelope — the same challenge as the body, for clients that read it off the header.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/X402PaymentRequired'
        '403':
          description: Forbidden — permission insufficient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited. Retry-After header present.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: Internal error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.01'
        protocols:
        - x402: {}
    servers:
    - url: https://api.cueframe.ai
      description: Production
  /v1/checkpoints/{id}:
    get:
      operationId: getCheckpoint
      tags:
      - checkpoints
      summary: Get a checkpoint packet
      description: 'The full approval packet: the stage artifact under review, presigned storyboard/eval stills, critic verdicts (incl. lock_violation entries), the money triple {thisStep, jobSpendSoFar, estimatedJourneyTotal}, and the recorded decision once resolved. Answer an `awaiting` packet with POST /v1/checkpoints/{id}/resume.'
      security:
      - bearerAuth: []
      - oauth2:
        - projects:read
      - x402: []
      x-permissions:
        projects:
        - read
      responses:
        '200':
          description: The checkpoint packet.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckpointResponse'
        '400':
          description: Bad request — validation_error / invalid_cursor / invalid_query.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Missing or invalid Authorization header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '402':
          description: 'Payment required. Returned when the caller presents no API key on a priced operation: the body AND the `Payment-Required` header carry the x402 v2 challenge (accepted scheme, network, USDC asset, amount, payTo). Sign the EIP-3009 authorization and retry with a `PAYMENT-SIGNATURE` header. A KEYED caller sees this status instead when their plan lacks or has exhausted the feature (`billing_required`).'
          headers:
            Payment-Required:
              description: Base64 x402 v2 PaymentRequired envelope — the same challenge as the body, for clients that read it off the header.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/X402PaymentRequired'
        '403':
          description: Forbidden — permission insufficient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: Internal error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      parameters:
      - schema:
          type: string
        in: path
        name: id
        required: true
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.01'
        protocols:
        - x402: {}
    servers:
    - url: https://api.cueframe.ai
      description: Production
  /v1/checkpoints/{id}/resume:
    post:
      operationId: resumeCheckpoint
      tags:
      - checkpoints
      summary: Answer a held checkpoint (approve / revise / abandon)
      description: 'The A1 review grammar: one `decision` for the gate, optionally carrying anchored `comments` ({beatId} or {timecodeMs} anchors; per-anchor verdict approve|revise|lock — lock freezes the element contractually) and/or `edits` (your revised stage artifact). `revise` loops IN-JOB: the director revises and re-presents this same gate with a new packet (version+1); the brief quote states the included revision cycles — beyond them, revise is refused 402 with the path forward. `abandon` ends the run. Approve-with-comments is legal: the notes record without gating.'
      security:
      - bearerAuth: []
      - oauth2:
        - projects:write
      - x402: []
      x-permissions:
        projects:
        - write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckpointResumeRequest'
      responses:
        '200':
          description: Decision recorded; the run resumes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckpointResumeResponse'
        '400':
          description: Bad request — validation_error / invalid_cursor / invalid_query.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Missing or invalid Authorization header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '402':
          description: Payment required — billing_required or x402 payment_*.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '403':
          description: Forbidden — permission insufficient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '409':
          description: Conflict — stale_etag / idempotency_conflict / suggestions_already_complete.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited. Retry-After header present.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: Internal error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      parameters:
      - schema:
          type: string
        in: path
        name: id
        required: true
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.01'
        protocols:
        - x402: {}
    servers:
    - url: https://api.cueframe.ai
      description: Production
components:
  schemas:
    CheckpointResumeRequest:
      type: object
      properties:
        decision:
          type: string
          enum:
          - approve
          - revise
          - abandon
          description: The ONE verdict for this gate (GitHub review grammar). approve = proceed (comments allowed — they record as taste signal without gating); revise = the director revises per comments/edits and RE-PRESENTS this same gate (in-job, no re-meter); abandon = end the run.
        comments:
          maxItems: 24
          type: array
          items:
            $ref: '#/components/schemas/CheckpointComment'
        edits:
          description: Your edited stage artifact (the power path). With edits the re-presented packet carries exactly what you supplied; with comments alone the director re-authors scoped by them.
        globalNote:
          type: string
          maxLength: 4000
      required:
      - decision
      additionalProperties: false
      description: POST /checkpoints/:id/resume body — the A1 review grammar.
      example:
        decision: approve
    CheckpointListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/CheckpointResponse'
        pagination:
          $ref: '#/components/schemas/PaginationMeta'
      required:
      - data
      - pagination
      additionalProperties: false
    CheckpointResumeResponse:
      type: object
      properties:
        ok:
          type: boolean
          const: true
      required:
      - ok
      additionalProperties: false
      description: POST /checkpoints/:id/resume response.
    CheckpointComment:
      type: object
      properties:
        anchor:
          anyOf:
          - type: object
            properties:
              beatId:
                type: string
                minLength: 1
            required:
            - beatId
            additionalProperties: false
          - type: object
            properties:
              timecodeMs:
                type: integer
                minimum: 0
                maximum: 9007199254740991
            required:
            - timecodeMs
            additionalProperties: false
          description: 'What the comment is about: a plan beat (content gate) or a timecode on the artifact (layout/motion gates).'
        verdict:
          type: string
          enum:
          - approve
          - revise
          - lock
          description: Per-anchor verdict under the single gate decision. `lock` = contractually frozen — the director touching a locked element is a defect, surfaced as a lock_violation verdict on the next packet (the no-discard machinery).
        note:
          type: string
          maxLength: 2000
      required:
      - anchor
      - verdict
      additionalProperties: false
    CheckpointResponse:
      type: object
      properties:
        id:
          type: string
        projectId:
          type: string
        composeJobId:
          type: string
        briefId:
          type: string
        kind:
          type: string
          enum:
          - gate
          - score
        stage:
          $ref: '#/components/schemas/CheckpointStage'
        version:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        status:
          type: string
          enum:
          - awaiting
          - approved
          - revised
          - abandoned
          - expired
          - superseded
        artifact:
          description: 'The stage artifact under review: the locked ComposePlan at content; the composition wire shape at layout/motion; the judged composition snapshot on kind:''score''.'
        stillUrls:
          description: Presigned storyboard/eval stills — the packet's visual evidence (may be GC'd by the retention sweep after the job goes terminal; the decision record is immortal).
          type: array
          items:
            type: string
        criticVerdicts:
          description: Per-criterion scores + critique from the design loop / judge, incl. lock_violation entries.
        quote:
          $ref: '#/components/schemas/CheckpointQuote'
        revisionCycle:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Revise cycles this gate has consumed. The brief quote states the included count (revisionCyclesIncluded); beyond it, resume(revise) is refused with a typed error.
        decision:
          description: The recorded decision {decision, comments?, globalNote?, decidedAt} once resolved.
        reviewMode:
          description: How this packet is decided (from the Brief's gates). 'hosted' = the review PAGE captures the decision; absent/'agent' = the decision flows back through the driving agent.
          type: string
          enum:
          - agent
          - hosted
        reviewUrl:
          description: Hosted review-page URL (present when reviewMode is 'hosted') — a human decides from this link, no account or agent session; the recorded decision rides the SAME resume rail, and the agent learns of it via checkpoint webhooks / wait_job.
          type: string
        createdAt:
          type: number
        updatedAt:
          type: number
      required:
      - id
      - projectId
      - kind
      - version
      - status
      - artifact
      - revisionCycle
      - createdAt
      - updatedAt
      additionalProperties: false
    PaginationMeta:
      type: object
      properties:
        hasMore:
          type: boolean
        nextCursor:
          type:
          - string
          - 'null'
        prevCursor:
          type:
          - string
          - 'null'
      required:
      - hasMore
      - nextCursor
      - prevCursor
      additionalProperties: false
      description: Cursor pagination metadata.
    CheckpointQuote:
      type: object
      properties:
        thisStepUsd:
          type: number
          description: What approving costs NEXT (the render at the final gate; $0 earlier).
        jobSpendSoFarUsd:
          type: number
          description: What has SETTLED so far — $0 while the run is live (compose is charge-on-delivery on both rails), so abandoning at a gate charges nothing.
        estimatedJourneyTotalUsd:
          type: number
          description: The same journey number the Brief quoted.
      required:
      - thisStepUsd
      - jobSpendSoFarUsd
      - estimatedJourneyTotalUsd
      additionalProperties: false
    CheckpointStage:
      type: string
      enum:
      - content
      - layout
      - motion
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Stable machine-readable error code per §Error Model.
            message:
              type: string
              description: Human-readable message.
            contract:
              type: string
              description: Contract version that produced this verdict. If it differs between two calls, the rules changed underneath you, not your request.
            contractVersion:
              type: string
              description: 'Version of the published `@cueframe/api-contract` this server implements. Compare it with the `contractVersion` of the package your client was generated from: a higher value here means the server has moved ahead of your document.'
            details:
              description: Optional context (currentEtag, projectIds, retryAfter, …).
              type: object
              propertyNames:
                type: string
              additionalProperties: {}
          required:
          - code
          - message
          - contract
          - contractVersion
          description: Standard API error envelope.
      required:
      - error
      description: Error envelope used by every non-2xx response.
    ReviewPacketResponse:
      type: object
      properties:
        id:
          type: string
        projectId:
          type: string
        composeJobId:
          type: string
        briefId:
          type: string
        kind:
          type: string
          enum:
          - gate
          - score
        stage:
          $ref: '#/components/schemas/CheckpointStage'
        version:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        status:
          type: string
          enum:
          - awaiting
          - approved
          - revised
          - abandoned
          - expired
          - superseded
        artifact:
          description: 'The stage artifact under review: the locked ComposePlan at content; the composition wire shape at layout/motion; the judged composition snapshot on kind:''score''.'
        stillUrls:
          description: Presigned storyboard/eval stills — the packet's visual evidence (may be GC'd by the retention sweep after the job goes terminal; the decision record is immortal).
          type: array
          items:
            type: string
        criticVerdicts:
          description: Per-criterion scores + critique from the design loop / judge, incl. lock_violation entries.
        quote:
          $ref: '#/components/schemas/CheckpointQuote'
        revisionCycle:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Revise cycles this gate has consumed. The brief quote states the included count (revisionCyclesIncluded); beyond it, resume(revise) is refused with a typed error.
        decision:
          description: The recorded decision {decision, comments?, globalNote?, decidedAt} once resolved.
        reviewMode:
          description: How this packet is decided (from the Brief's gates). 'hosted' = the review PAGE captures the decision; absent/'agent' = the decision flows back through the driving agent.
          type: string
          enum:
          - agent
          - hosted
        createdAt:
          type: number
        updatedAt:
          type: number
        versionStack:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              version:
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
              stage:
                type: string
                enum:
                - content
                - layout
                - motion
              status:
                type: string
              decision:
                type: string
              createdAt:
                type: number
            required:
            - id
            - version
            - status
            - createdAt
            additionalProperties: false
          description: The run's v1→vN gate history — per-version status + decision summaries.
      required:
      - id
      - projectId
      - kind
      - version
      - status
      - artifact
      - revisionCycle
      - createdAt
      - updatedAt
      - versionStack
      additionalProperties: false
    X402PaymentRequired:
      type: object
      title: X402PaymentRequired
      description: x402 v2 PaymentRequired challenge — the body of a 402 on a priced operation.
      properties:
        x402Version:
          type: integer
          const: 2
        accepts:
          type: array
          description: Accepted payment requirements. Read `accepts[0]` for scheme (`exact` for a fixed price, `upto` for a measured one), network (CAIP-2), asset, amount and payTo.
          items:
            type: object
        error:
          type: string
          description: Human-readable reason.
      required:
      - x402Version
      - accepts
    ReviewDecisionResponse:
      type: object
      properties:
        ok:
          type: boolean
          const: true
        stage:
          type: string
          enum:
          - content
          - layout
          - motion
        version:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        composeJobId:
          type: string
      required:
      - ok
      additionalProperties: false
      description: Decision recorded; the run resumes (the SAME rail as POST /checkpoints/{id}/resume).
  securitySchemes:
    oauth2:
      type: oauth2
      description: Authorization code with PKCE (S256). Request explicit resource scopes for least privilege; identity-only grants retain account-level access.
      flows:
        authorizationCode:
          authorizationUrl: https://api.cueframe.ai/api/auth/mcp/authorize
          tokenUrl: https://api.cueframe.ai/api/auth/mcp/token
          scopes:
            media:read: Read media
            media:write: Modify media
            sessions:read: Read sessions
            sessions:write: Modify sessions
            projects:read: Read projects
            projects:write: Modify projects
            renders:read: Read renders
            renders:write: Modify renders
            webhooks:read: Read webhooks
            webhooks:write: Modify webhooks
            billing:read: Read billing
            billing:write: Modify billing
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: cf_live_* or cf_test_*
      description: API key auth. Prefix `cf_live_` for production orgs, `cf_test_` for sandbox.
    x402:
      type: apiKey
      in: header
      name: PAYMENT-SIGNATURE
      description: x402 v2 payment header (EIP-3009 USDC on Base; base64 PaymentPayload). Returned 402 Payment-Required if absent on priced endpoints.
x-refined-from:
- cueframe-ai-openapi.json
- cueframe-ai-openapi.yml