Skip to content

storyboards.list

The account's storyboards

GET/storyboards

Operation
storyboards.list
MCP tool
storyboards_list

Every storyboard this account owns, newest first, as a cursor page. Unlike the dashboard's own list — which shows only the last day's work in progress — this one walks the whole history, because an integration reconciling its own records needs all of it.

curl 'https://api.gogoscreen.com/api/v1/storyboards?limit=2' \
  -H "Authorization: Bearer $GOGOSCREEN_API_KEY"
A request to this operation.
json
{
  "data": [
    {
      "id": "3f2b0c1a-9d4e-4a61-b8c2-000000000007",
      "state": "cancelled",
      "internalStatus": "cancelled",
      "title": null,
      "targetOrigin": "https://www.iana.org",
      "targetPath": "/",
      "appEntryUrl": null,
      "hint": "Show the protocol registries page.",
      "beatCount": 0,
      "lengthAdjusted": false,
      "progress": null,
      "createdAt": "2026-09-21T11:08:00.000Z",
      "expiresAt": "2026-09-21T11:09:00.000Z"
    },
    {
      "id": "3f2b0c1a-9d4e-4a61-b8c2-000000000008",
      "state": "cancelled",
      "internalStatus": "cancelled",
      "title": null,
      "targetOrigin": "https://www.iana.org",
      "targetPath": "/",
      "appEntryUrl": null,
      "hint": "Show the protocol registries page.",
      "beatCount": 0,
      "lengthAdjusted": false,
      "progress": null,
      "createdAt": "2026-09-21T11:10:00.000Z",
      "expiresAt": "2026-09-21T11:11:00.000Z"
    }
  ],
  "nextCursor": "eyJ0IjoiMjAyNi0wOS0yMVQxMToxMDowMC4wMDBaIiwiaSI6IjNmMmIwYzFhLTlkNGUtNGE2MS1iOGMyLTAwMDAwMDAwMDAwOCJ9"
}
200 response, captured from a real call. Ids, timestamps and signed URLs are replaced; the shape is untouched.

At a glance

FactDetail
Scopesstoryboards:read
Credentialsa signed in dashboard session or an API key.
Rate limit600 requests a minute per credential, in the read class.
IdempotencyNot applicable. This operation changes nothing.
MCP toolstoryboards_list
Always setsCache-Control: private, no-store

Query parameters

NameTypeRequiredDescription
limitintegerOptionalHow many rows to return (1–100).Default 201–100
cursorstringOptionalThe nextCursor of the previous page. Opaque: do not build one.max 512 characters

Response

Answers 200. Every answer also carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset, and every error body carries a requestId.

200 OK

The account's storyboards

200 OK body
NameTypeDescription
dataobject[]
16 fields inside data
NameTypeDescription
appEntryUrlstring | nullWhere the walkthrough was actually recorded, when a sign-in proved the app is not at targetOrigin — a product at app.example.com for a site at example.com. Null means the two are the same place.
beatCountnumber
createdAtstring | nullformat: date-time
expiresAtstring | nullformat: date-time
hintstring | null
idstring
internalStatusstring
lengthAdjustedbooleanWhether this plan came back shorter than the request asked for, because the chosen length could not hold every step. storyboards.get carries the numbers and the sentence in lengthFit.
progressobject | nullHOW FAR THE PLANNING HAS GOT, as last reported. Null once the storyboard is terminal and null while nothing has been recorded. Draw the percent as it is: nothing here is interpolated.
atstring | null
percentnumber
stagestring
statestringone of: queued, running, succeeded, failed, cancelled
targetOriginstring | null
targetPathstring | null
titlestring | null
nextCursorstring | nullPass as cursor for the next page; null on the last page.
200 OK headers
HeaderMeaning
Cache-ControlAlways private, no-store.

Errors

Every refusal is { error: { code, message, details?, requestId } }. Branch on code, never on the sentence. The full catalogue is at Errors.

CodeStatusWhen it happensWhat to do
invalid_cursor400The cursor query parameter was not one this API minted, or it was edited, or it is older than a hundred years either way.Drop the cursor and start the walk from the first page. Pass back exactly the nextCursor string you were given and never build one by hand.
validation_failed400The merged path, query and body did not match the operation's schema. The schemas are strict, so an unknown field is a failure rather than something ignored, and a string carrying half of a character is refused before it can be stored.Read details.issues. Each entry carries a path, a message and a machine readable code. Fix every named field and send the request again; the same body always fails the same way.
unauthorized401No credential was presented, or the key is unknown, revoked or expired, or an X-API-Key header carried something that is not an API key. details.reason says which.Send Authorization: Bearer gsk_live_…. A revoked or expired key never starts working again, so issue a new one in the developer console. Put a dashboard session token in Authorization, never in X-API-Key.
forbidden_scope403The credential does not carry every scope the operation declares, or it is the wrong kind of credential for it. keys.* and assistant.* are user only and can never be called by a key.details.requiredScopes and details.missingScopes name what is missing. A key's scopes cannot be changed after it is issued, so create a new key with them. When details.allowedActors is present, no key can call this operation at all.
not_found404No resource of that id belongs to this account. A resource that belongs to somebody else answers 404 as well, never 403.Check the id. Do not treat this as a permissions problem.
rate_limited429The credential's per minute budget, the account's per minute ceiling, or a daily cap was exceeded. details.scope is minute, day or account, or global when the product's own daily cap on voice previews is spent.Wait the Retry-After seconds and retry. details.limit and details.resetAt say what was hit and when it reopens. The RateLimit-* headers on every answer let a client pace itself before it gets here.
internal_error500An unhandled failure inside this API. The original message is logged and never answered.Retry once, then quote requestId to support. A 5xx deletes the idempotency claim rather than storing it, so retrying under the same key is safe.