---
title: "Check continuity with AI (costs credits)"
method: POST
path: "/v1/storyboards/{id}/continuity"
tags: ["Storyboards"]
---

# Check continuity with AI (costs credits)

`POST /v1/storyboards/{id}/continuity`

## Request

- Base URL: `https://nanostudiopro.com/api`
- URL: `https://nanostudiopro.com/api/v1/storyboards/{id}/continuity`
- Auth: HTTP bearer

The AI reads the film's own footage and points at what does not match: an item worn or held that appears with no putting-on, a character missing, weather or light changing inside a scene, a size that jumps, a direction the action states and the clip does not show. The active takes not indexed yet are read by the video index at Quick (billed by the index, `video_frame` per detected frame; a take already indexed at any density is reused and never charged again); then one `continuity_check` call (see `/v1/pricing`) each: per clip (its frames in order against its action prompt, direction included), per cut the storyboard does not explain (a new place, another time of day or weather, a waiting loop and its option are dropped in code; only outfits, carried objects, sizes and an unchanged scene's weather are asked), and per stretch of up to six shots held against the states the story implies (a lamp broken until it is relit, an outfit from the moment it is picked). **Costs credits.** Quote first with `dry_run: true`: `credits` is the ceiling, with its `scan` and `comparison` parts; `available: false` comes with a `reason` (no clips yet, nothing changed since the last check, a check running, or the price not set yet). Without `dry_run` it answers `202 { task_id }`: poll `GET /v1/tasks/{id}`. Each call is checked before it is made and charged only after a delivered answer, through your token so its daily cap applies. The findings land in the storyboard's `readiness` rows (`GET /v1/storyboards/{id}`) with `ai_noticed: { sure, frames: [{ take_id, at_s, url }] }`; each can be marked intended with `ackIssue { key }`. A re-run only compares what changed. A storyboard whose owner approves agent spending answers `403` except for the quote.

## Request body

- object
  - `dry_run` boolean

## Response `200`

The quote (dry_run)

- object
  - `dry_run` boolean
  - `available` boolean
  - `reason` string
  - `credits` integer, nullable: The most the check can cost.
  - `scan` object
    - `credits` integer
    - `takes_to_read` integer
    - `takes_reused` integer
    - `takes_being_read` integer
    - `frames_max` integer
  - `comparison` object
    - `credits` integer
    - `calls_max` integer
    - `per_call` integer
    - `clip_calls` integer
    - `join_calls` integer
    - `state_calls` integer
    - `story_calls` integer
    - `pairs` integer: What it compares: clips, cuts (with those settled in code) and shots held against the story.
  - `skipped` object[]
    - `take_id` string
    - `reason` string
  - `running_task_id` string, nullable

## Other responses

- `202`: The check started
- `400`: Make some clips first: the check reads the film's own footage
- `401`: Missing or invalid token
- `402`: Insufficient credits
- `403`: The owner approves an agent's spending on this storyboard
- `409`: A check is already running for this film
- `429`: Rate limit exceeded
- `503`: The continuity check is not available yet: its price has not been set.

---

[API](https://skmtc.dev/nanostudiopro/apis/nano-studio-pro-api.md) · [All operations](https://skmtc.dev/nanostudiopro/apis/nano-studio-pro-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nanostudiopro/apis/nano-studio-pro-api/revisions/7f7d4a72b17c?raw)
