Skip to content

List app versions

GET
/developer/organizations/{organizationId}/apps/{appId}/versions
curl --request GET \
--url 'https://qinto-api.blotout.io/developer/organizations/9c1d2b34-5e67-4f89-a0b1-2c3d4e5f6a7b/apps/5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d/versions?limit=50&cursorCreatedAt=2026-08-17T12%3A00%3A00.000Z&cursorId=7d8e9f0a-1b2c-4d3e-9f4a-5b6c7d8e9f0a' \
--header 'Authorization: Bearer <token>'

Lists an app’s versions newest-first, drafts included. Pass the returned nextCursor fields back as query parameters to page.

Required permissions

  • None beyond a valid token; requires an OAuth token with the developer scope, for a user who belongs to the addressed organization
organizationId
required

Unique id (UUID) of the organization that owns the addressed apps, as listed by GET /me under organizations.

string format: uuid

Example

9c1d2b34-5e67-4f89-a0b1-2c3d4e5f6a7b

Unique id (UUID) of the organization that owns the addressed apps, as listed by GET /me under organizations.

appId
required

Unique id (UUID) of the app, as returned by the create and list operations.

string format: uuid

Example

5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d

Unique id (UUID) of the app, as returned by the create and list operations.

limit

Page size, 1-200. Defaults to 50.

integer
>= 1 <= 200

Example

50

Page size, 1-200. Defaults to 50.

cursorCreatedAt

The nextCursor.createdAt from the previous page.

string

Example

2026-08-17T12:00:00.000Z

The nextCursor.createdAt from the previous page.

cursorId

The nextCursor.id from the previous page.

string

Example

7d8e9f0a-1b2c-4d3e-9f4a-5b6c7d8e9f0a

The nextCursor.id from the previous page.

A page of versions with the cursor to continue from.

Media typeapplication/json
object
versions
required

The app’s versions, newest first, drafts included.

Array<object>

One immutable version of a developer app, published with the Qinto CLI.

object
appVersionId
required

Server-assigned unique id of the version. Address it in the artifact, finalize, and cancel operations.

string
version
required

The allocated semver. Fixed once allocated; a retried publish resumes onto it instead of allocating another.

string
status
required

Lifecycle state: draft until the publish finalizes it, ready once its artifacts are verified and frozen.

string
Allowed values: draft ready
readyAt
required

When the version was frozen as an ISO 8601 UTC timestamp; null while it is a draft.

string format: date-time
createdAt
required

When the version was allocated, as an ISO 8601 UTC timestamp.

string format: date-time
nextCursor
required

Pass to the next call to continue paging; null on the last page.

object
createdAt
required

Cursor timestamp of the last returned version.

string
id
required

Cursor id of the last returned version.

string

Example

{
"versions": [
{
"appVersionId": "7d8e9f0a-1b2c-4d3e-9f4a-5b6c7d8e9f0a",
"version": "1.4.1",
"status": "draft",
"readyAt": "2026-08-17T12:00:00.000Z",
"createdAt": "2026-08-17T12:00:00.000Z"
}
],
"nextCursor": {
"createdAt": "2026-08-17T12:00:00.000Z",
"id": "7d8e9f0a-1b2c-4d3e-9f4a-5b6c7d8e9f0a"
}
}

invalid_params — A path parameter failed validation (for example a malformed UUID); details pinpoints the offending parameter.

Media typeapplication/json
object
error
required

Machine-readable error slug; switch on this value rather than on the HTTP status alone.

string
Allowed values: invalid_params
details

Field-level validation errors: a tree keyed by input property, each node carrying an errors array of human-readable messages. Render it to help the caller correct the request.

object
key
additional properties

Example

{
"error": "invalid_params",
"details": {
"errors": [],
"properties": {
"teamId": {
"errors": [
"Invalid UUID"
]
}
}
}
}

unauthenticated — The Authorization: Bearer token is missing, malformed, or no longer valid. Generate a team API token or obtain a new OAuth access token.

Media typeapplication/json
object
error
required

Machine-readable error slug; switch on this value rather than on the HTTP status alone.

string
Allowed values: unauthenticated

Example

{
"error": "unauthenticated"
}

forbidden — The bearer credential lacks the required permission or belongs to another team, or its user lacks the organization role a developer operation needs. Update its policies, use a credential bound to the addressed team, or ask an organization owner for the role; message states the reason when one is known.

Media typeapplication/json
object
error
required

Machine-readable error slug; switch on this value rather than on the HTTP status alone.

string
Allowed values: forbidden
message

Human-readable reason for this specific failure, intended for display — do not parse it programmatically.

string

Example

{
"error": "forbidden",
"message": "The Cloudflare API token is invalid or expired."
}

not_found — The addressed resource does not exist within this team; check the id and retry.

Media typeapplication/json
object
error
required

Machine-readable error slug; switch on this value rather than on the HTTP status alone.

string
Allowed values: not_found

Example

{
"error": "not_found"
}

internal — Unexpected server error. Nothing is guaranteed to have been persisted; idempotent operations are safe to retry.

Media typeapplication/json
object
error
required

Machine-readable error slug; switch on this value rather than on the HTTP status alone.

string
Allowed values: internal

Example

{
"error": "internal"
}