Skip to content

List installable apps

GET
/me/installable-apps
curl --request GET \
--url 'https://qinto-api.blotout.io/me/installable-apps?limit=50&cursor=facebook-capi' \
--header 'Authorization: Bearer <token>'

Lists the apps the caller may install on a site: every published app of each developer organization they belong to, with its latest version. Call it to find the appSlug an install takes.

How it works

Apps with no published version are left out. Page with cursor from the previous response’s nextCursor; a null cursor means the last page. Installing still needs app management on the target site.

Required permissions

  • None beyond a valid token; requires an OAuth token with the profile scope, and installing a listed app additionally needs domain:manage_domain_apps:write on the target site
limit

How many apps to return, 1–200.

integer
>= 1 <= 200

Example

50

How many apps to return, 1–200.

cursor

Continue after this app slug, from a previous response’s nextCursor.

string

Example

facebook-capi

Continue after this app slug, from a previous response’s nextCursor.

The page of apps.

Media typeapplication/json
object
records
required

The page of apps, A–Z by slug.

Array<object>

An app the caller may install on a site they manage apps on.

object
slug
required

The app’s slug, to pass as appSlug when installing.

string
name
required

The app’s display name.

string
description
required

What the app does, or null when the developer gave no description.

string | null
organizationId
required

The developer organization that owns the app.

string
organizationName
required

That organization’s display name.

string
latestVersion
required

The highest published version, which an install takes by default.

string
consentCategory
required

The visitor consent the app runs under; a necessary app needs an acknowledgement before its first install.

string
multipleInstalls
required

Whether one site can install the app more than once.

boolean
variables
required

The settings each install takes, as the latest version declares them.

Array<object>

One setting a site manager fills in for each install of an app.

object
name
required

The name to send the value under when configuring an install.

string
kind
required

A plain value is readable back; a secret one is write-only and never returned.

string
Allowed values: plain secret
type
required

The value it takes: a string for text and password, a boolean for toggle, for select the value of one of options or an empty string for none, and for multiselect a list of options values, empty for none.

string
Allowed values: text password toggle select multiselect
label
required

Display label the manifest gives the variable.

string
required
required

Whether an install stays inactive until it has a value.

boolean
helpText
required

One-line guidance the manifest supplies, or null when it supplies none.

string | null
helpUrl
required

Link to the vendor’s own documentation for this value, or null when the manifest supplies none.

string | null
options
required

The choices of a select or multiselect, in manifest order, or null for every other type.

Array<object> | null

One choice of a select or multiselect variable.

object
value
required

The value to send and the value stored when this option is picked.

string
label
required

The text a form shows for this option.

string
default
required

Whether a form pre-selects this option while the install has no value. The platform never stores a default on its own.

boolean
nextCursor
required

Pass as cursor for the next page, or null on the last one.

string | null

Example

{
"records": [
{
"slug": "facebook-capi",
"name": "Facebook CAPI",
"description": "Sends events to Meta.",
"organizationId": "5e8c2d90-4b17-4f3a-9d21-8a63f0b7c154",
"organizationName": "Acme Dev",
"latestVersion": "1.4.1",
"consentCategory": "marketing",
"multipleInstalls": false,
"variables": [
{
"name": "PIXEL_ID",
"kind": "plain",
"type": "text",
"label": "Pixel id",
"required": true,
"helpText": "Found under Data sources in Meta Events Manager.",
"helpUrl": "https://developers.example.com/pixel-id",
"options": null
}
]
}
],
"nextCursor": "facebook-capi"
}

invalid_body — The JSON body is unparseable or failed schema validation; details pinpoints the offending fields when the body could be parsed.

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_body
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_body",
"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."
}

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"
}