Skip to content

Check an app slug

GET
/developer/app-slugs/{slug}
curl --request GET \
--url https://qinto-api.blotout.io/developer/app-slugs/facebook-capi \
--header 'Authorization: Bearer <token>'

Reports whether a slug is still free, and offers free alternatives when it is not, so a developer can pick another one before the app is built around it. The slug namespace is global: it spans every organization.

How it works

An unavailable answer is final — taken slugs stay reserved even after the app is deleted, and reserved ones belong to the Blotout platform — and carries up to three free variations of the slug in suggestions. An available answer can still lose a race with another registration, so the create operation stays authoritative and can answer slug_taken afterwards.

Required permissions

  • None beyond a valid token; requires an OAuth token with the developer scope
slug
required

The slug to check: 3-30 lowercase letters, digits, and hyphens, starting with a letter and not ending with a hyphen.

string
/^[a-z][a-z0-9-]{1,28}[a-z0-9]$/

Example

facebook-capi

The slug to check: 3-30 lowercase letters, digits, and hyphens, starting with a letter and not ending with a hyphen.

The slug was checked; available carries the verdict, reason says why an unavailable slug is refused, and suggestions lists free slugs to offer instead.

Media typeapplication/json
object
slug
required

The slug that was checked.

string
available
required

Whether the slug can still be registered. False means the create operation would refuse it.

boolean
reason
required

Why the slug is unavailable: taken when an app already claimed it, reserved when the Blotout platform keeps it for its own surfaces. Null when the slug is available.

string | null
Allowed values: taken reserved
suggestions
required

Up to three free slugs to offer instead, worded from the requested one and ordered at random. Empty when the requested slug is available.

Array<string>

Example

{
"slug": "facebook-capi",
"available": true,
"reason": "taken",
"suggestions": [
"facebook-capi-labs"
]
}

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

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