Every endpoint of the AppSkyline REST API, generated from the API itself.
All endpoints are relative to https://api.appskyline.com. Create an API key in your AppSkyline dashboard, then authenticate every request with it.
apiKey — HTTP Basic auth carrying only the API key secret: Authorization: Basic base64(<key secret>).
accessToken — Operator session token issued by the AppSkyline dashboard: Authorization: Token <access token>.
Download the OpenAPI specification for use with your own tooling.
Apple App Store engagement rows
Downloads/sessions engagement rows for your organization, optionally filtered by appId and a days cutoff. Requires the stats:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| appId | query | string | |
| days | query | integer | |
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Status | Meaning |
|---|---|
| 200 | Array of engagement rows |
| 403 | API key is missing the stats:read scope |
| 429 | API key rate limit exceeded |
List apps
Lists the apps of your organization. Requires the apps:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Status | Meaning |
|---|---|
| 200 | Array of apps |
| 401 | Missing or invalid credentials |
| 403 | API key is missing the apps:read scope |
| 429 | API key rate limit exceeded |
Create an app
Requires the apps:write scope.
| Name | In | Type | Description |
|---|---|---|---|
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Idempotency-Key | header | string | Unique retry key retained for 24 hours (maximum 255 characters). |
| Status | Meaning |
|---|---|
| 200 | The created app |
| 403 | API key is missing the apps:write scope |
| 409 | Domain is already taken |
Get an app by id
Requires the apps:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| appIdrequired | path | string | |
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Status | Meaning |
|---|---|
| 200 | The app |
| 403 | API key is missing the apps:read scope |
| 404 | No such app in your organization |
Update an app
Requires the apps:write scope.
| Name | In | Type | Description |
|---|---|---|---|
| appIdrequired | path | string | |
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Idempotency-Key | header | string | Unique retry key retained for 24 hours (maximum 255 characters). |
| Status | Meaning |
|---|---|
| 200 | The updated app |
| 404 | No such app in your organization |
| 409 | Domain is already taken |
Read multiple collections in one request
Executes an array of authenticated read operations and returns an object keyed by each operation alias. Only the allowlisted app, keyword, preference, role and metadata collections can be read.
| Name | In | Type | Description |
|---|---|---|---|
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Idempotency-Key | header | string | Unique retry key retained for 24 hours (maximum 255 characters). |
| Status | Meaning |
|---|---|
| 200 | Results keyed by operation alias |
| 401 | Missing or invalid credentials |
| 403 | A requested collection is not batch-readable |
List keywords
Lists the tracked keywords of your organization, optionally filtered by appId. Requires the keywords:read scope. For stable traversal, set pagination=cursor; the response becomes {items, nextCursor} and is ordered by _id. Pass nextCursor back as cursor until it is null. The default array response and offset pagination remain unchanged when cursor pagination is not requested.
| Name | In | Type | Description |
|---|---|---|---|
| appId | query | string | |
| pagination | query | string (cursor) | Set to cursor for a stable page envelope |
| cursor | query | string | Opaque nextCursor from the preceding cursor page |
| limit | query | integer | Page size. Cursor mode defaults to 100 rows and caps at 500; the default array mode keeps 0 as unbounded. |
| skip | query | integer | |
| sortField | query | string | |
| sortDirection | query | string (ASC | DESC) | |
| fields | query | string | Comma-separated projection of fields to return |
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Status | Meaning |
|---|---|
| 200 | Array of keywords, or {items, nextCursor} in cursor mode |
| 400 | Malformed cursor, or a sort incompatible with cursor pagination |
| 401 | Missing or invalid credentials |
| 403 | API key is missing the keywords:read scope |
| 429 | API key rate limit exceeded |
Create a keyword
Requires the keywords:write scope.
| Name | In | Type | Description |
|---|---|---|---|
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Idempotency-Key | header | string | Unique retry key retained for 24 hours (maximum 255 characters). |
| Status | Meaning |
|---|---|
| 200 | The created keyword |
| 403 | API key is missing the keywords:write scope |
Get a keyword by id
Requires the keywords:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| keywordIdrequired | path | string | |
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Status | Meaning |
|---|---|
| 200 | The keyword |
| 403 | API key is missing the keywords:read scope |
| 404 | No such keyword in your organization |
Update a keyword
Requires the keywords:write scope.
| Name | In | Type | Description |
|---|---|---|---|
| keywordIdrequired | path | string | |
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Idempotency-Key | header | string | Unique retry key retained for 24 hours (maximum 255 characters). |
| Status | Meaning |
|---|---|
| 200 | The updated keyword |
| 404 | No such keyword in your organization |
Delete a keyword
Requires the keywords:write scope.
| Name | In | Type | Description |
|---|---|---|---|
| keywordIdrequired | path | string | |
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Idempotency-Key | header | string | Unique retry key retained for 24 hours (maximum 255 characters). |
| Status | Meaning |
|---|---|
| 200 | Deleted |
| 404 | No such keyword in your organization |
Read sandbox keyword ranks without authentication
Returns a fixed set of demonstration keyword-rank rows in the same {searchTerms, store, country, rank} shape as authenticated keyword reads. No account, credential, or key is required, so agents can evaluate the API before onboarding. Responses carry the standard RateLimit response headers and the anonymous pacing limit applies.
| Name | In | Type | Description |
|---|---|---|---|
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Status | Meaning |
|---|---|
| 200 | Demonstration keyword-rank rows. |
| 429 | Anonymous rate limit exceeded; retry after Retry-After seconds. |
Start a demonstration asynchronous rank check
Demonstrates the API's asynchronous-job pattern without authentication. The response is 202 Accepted with a Location header pointing at the job resource and a body carrying the job _id and status. Poll the Location URL until the status is succeeded, then read the ranks from the job body. The job is deterministic fixture work that completes about two seconds after creation.
| Name | In | Type | Description |
|---|---|---|---|
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Idempotency-Key | header | string | Unique retry key retained for 24 hours (maximum 255 characters). |
| Status | Meaning |
|---|---|
| 202 | Job accepted; poll the Location URL for the result. |
| 429 | Anonymous rate limit exceeded; retry after Retry-After seconds. |
Poll a demonstration rank check
Reads the status of a demonstration job started at POST /api/sandbox/rankchecks. While the job runs the status is running; afterwards it is succeeded and the body carries the checked term's rank in every store carrying it. No authentication is required.
| Name | In | Type | Description |
|---|---|---|---|
| jobIdrequired | path | string | |
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Status | Meaning |
|---|---|
| 200 | Current job state. |
| 404 | Unknown job id. |
List webhook subscriptions
Webhook subscriptions deliver app.created, app.updated, keyword.created, keyword.updated and keyword.deleted events to your server as signed POST requests (X-Appskyline-Signature: t=<timestamp>,v1=<hex HMAC-SHA256 of "timestamp.body">). An endpoint failing 20 times in a row is disabled automatically. Subscriptions are managed with an operator access token; the secret is only returned once, on create.
| Name | In | Type | Description |
|---|---|---|---|
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Status | Meaning |
|---|---|
| 200 | Array of webhook subscriptions (without secrets) |
Create a webhook subscription
The response includes the signing secret exactly once — store it; it cannot be retrieved again.
| Name | In | Type | Description |
|---|---|---|---|
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Idempotency-Key | header | string | Unique retry key retained for 24 hours (maximum 255 characters). |
| Field | Type | Description |
|---|---|---|
| urlrequired | string | |
| events | array (app.created | app.updated | keyword.created | keyword.updated | keyword.deleted) | Empty array subscribes to all events |
| Status | Meaning |
|---|---|
| 200 | The created subscription, including its secret |
Update a webhook subscription
url, events and active are editable; the secret and organization are immutable. Re-enabling an auto-disabled endpoint is done by setting active back to true.
| Name | In | Type | Description |
|---|---|---|---|
| webhookSubscriptionIdrequired | path | string | |
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Idempotency-Key | header | string | Unique retry key retained for 24 hours (maximum 255 characters). |
| Status | Meaning |
|---|---|
| 200 | The updated subscription (without secret) |
Delete a webhook subscription
| Name | In | Type | Description |
|---|---|---|---|
| webhookSubscriptionIdrequired | path | string | |
| API-Version | header | string (1) | Compatibility version. Omit to use version 1; unsupported versions return 400. |
| Idempotency-Key | header | string | Unique retry key retained for 24 hours (maximum 255 characters). |
| Status | Meaning |
|---|---|
| 200 | Deleted |