Search the app store
const url = 'https://qinto-api.blotout.io/app-store/apps?q=conversion%20tracking&category=advertising&limit=50&cursor=facebook-capi';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://qinto-api.blotout.io/app-store/apps?q=conversion%20tracking&category=advertising&limit=50&cursor=facebook-capi' \ --header 'Authorization: Bearer <token>'Searches the apps in the app store, A–Z by name. Call it to find an app by words or by category; the slug of a result is the appSlug the other app store operation takes.
How it works
Search matches whole words, with common endings ignored: purchases finds purchase, but klav does not find Klaviyo. Page with cursor from the previous response’s nextCursor; a null cursor means the last page.
Required permissions
- None beyond a valid token; requires an OAuth token whose user belongs to a team
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Words to search for. An app matches when its name holds every word, or its tagline and description together do. Omit it to list every app.
Example
conversion trackingWords to search for. An app matches when its name holds every word, or its tagline and description together do. Omit it to list every app.
Return only apps listed in this category.
Example
advertisingReturn only apps listed in this category.
How many apps to return, 1–200. The default is 50.
Example
50How many apps to return, 1–200. The default is 50.
Continue after this app slug, from a previous response’s nextCursor.
Example
facebook-capiContinue after this app slug, from a previous response’s nextCursor.
Responses
Section titled “Responses”The page of apps.
object
The page of apps, A–Z by name.
An app in the app store, as a search result.
object
The app’s slug, to pass as appSlug.
The app’s display name.
One line on what the app does.
Display name of the organization that publishes the app.
The categories the app is listed in.
Pass as cursor for the next page, or null on the last one.
Example
{ "records": [ { "slug": "facebook-capi", "name": "Facebook CAPI", "tagline": "Send conversions to Meta from your server.", "publisher": "Acme Dev", "categories": [ "advertising" ] } ], "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.
object
Machine-readable error slug; switch on this value rather than on the HTTP status alone.
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
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.
object
Machine-readable error slug; switch on this value rather than on the HTTP status alone.
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.
object
Machine-readable error slug; switch on this value rather than on the HTTP status alone.
Human-readable reason for this specific failure, intended for display — do not parse it programmatically.
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.
object
Machine-readable error slug; switch on this value rather than on the HTTP status alone.
Example
{ "error": "internal"}