Fellow API
Introduction
Section titled “Introduction”The Fellow API provides programmatic access to App Store feature history and screenshots. Integrate that data into your systems and workflows.
API access is available on Scale. App count and history limits follow the account’s plan.
Use the API to:
Requests run with the permissions and plan limits of the authenticated account. Feature data and screenshots are available only for apps with active tracking, within the feature history your plan includes.
Base URL
Section titled “Base URL”Authentication
Section titled “Authentication”Send a bearer token in the Authorization header with every request.
API keys belong to an account and grant full API access within its plan limits.
Manage keys in Developers → API keys on desktop.
Requests without a valid token return 401.
Requests and responses
Section titled “Requests and responses”The API is served over HTTPS. Send request bodies as JSON with Content-Type: application/json. Pass filters and pagination parameters in the query string.
Successful responses return JSON with the result in data, as an object or an array. List responses also include pagination. A successful DELETE returns 204 with no body.
Fellow app IDs start with app_ and feature IDs start with feat_, followed by at least eight digits. Treat them as strings. Apple IDs such as apple_app_id and apple_feature_id are strings. Dates use YYYY-MM-DD and timestamps use ISO 8601. Both are in UTC.
Filtering
Section titled “Filtering”Pass filters in the query string. GET /features supports all of the parameters below. GET /features/{fellow_feature_id}/screenshots supports countries, from and to.
- App. Limit results to one app with
fellow_app_idorapple_app_id. The two are mutually exclusive, and supplying both returns400. Omit both to include all active tracked apps. - Lists.
countriesandtypestake comma-separated values, as incountries=US,GB. Values within a filter match withOR. Different filters combine withAND. Country codes are case-insensitive. Empty or unsupported values return400. - Dates.
fromandtoare inclusiveYYYY-MM-DDdates in UTC. Results match history periods that overlap the range.fromdefaults to the start of your available history andtodefaults to today.frommust be on or beforeto. Afrombefore your available history returns403. - Sort.
sortorders features byfirst_seenorlast_seen. Prefix the field with-for descending order. The default is-last_seen. Ties have a stable order.
Unknown or repeated parameters return 400. When nothing matches, data is an empty array.
Pagination
Section titled “Pagination”List endpoints use cursor pagination.
| Parameter | Type | Description |
|---|---|---|
limit | integer | Items per page. Default 50. Maximum 100. |
cursor | string | next_cursor from the previous response. |
Each list response includes a pagination object. To get the next page, pass next_cursor as cursor and keep the same filters, sort order and limit. On the last page, has_more is false and next_cursor is null.
Cursors are tied to your account. An invalid, expired or mismatched cursor returns 400.
Errors
Section titled “Errors”Errors use application/problem+json. The body includes status, code and detail. Validation errors can include field-level details in errors.
| Status | Codes | Description |
|---|---|---|
400 | invalid_query, invalid_body, invalid_cursor | Invalid request. |
401 | invalid_token | Missing or invalid token. |
403 | access_denied, app_tracking_paused, history_not_available | Access denied. |
404 | not_found | Not found. |
409 | tracking_limit_reached, tracking_change_limit_reached | Tracking request blocked. |
413 | invalid_body | Request body too large. |
429 | rate_limit_exceeded | Usage limit reached. |
500 | internal_error | Server error. |
On 429, wait for the number of seconds in Retry-After before retrying.
Error response example
Endpoints
Section titled “Endpoints”| Method | Path | Description |
|---|---|---|
GET | /account | Get the account type and plan tier. |
GET | /tracked-apps | List tracked apps. |
POST | /tracked-apps | Add a tracked app by Apple app ID. |
GET | /tracked-apps/{fellow_app_id} | Get a tracked app. |
DELETE | /tracked-apps/{fellow_app_id} | Remove a tracked app. |
GET | /features | List features with filters and sorting. |
GET | /features/{fellow_feature_id} | Get a feature and its history. |
GET | /features/{fellow_feature_id}/screenshots | List a feature’s screenshots. |
Account
Section titled “Account”The account your API key belongs to, including its type and effective plan tier.
Get account
Section titled “Get account”GET /api/v1/account Returns the account type and effective plan tier for the API key.
No parameters.
Request
Responses
The account type and effective plan tier.
application/json
Response fields
data object required The account associated with the API key.
Child fields 2
type string required Individual or team account.
tier string required The account’s effective plan tier. API permissions and allowances are evaluated separately.
Invalid request.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Missing or invalid token.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
WWW-Authenticate string optional Bearer authentication challenge.
Access denied.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Too many requests.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
Retry-After string optional Delay in seconds.
Server error.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Tracked apps
Section titled “Tracked apps”Add apps by their Apple App Store ID. Use the returned fellow_app_id to get or remove a tracked app. Tracking status is active or paused. App details, feature data and screenshots require active tracking.
Pro allows 10 active apps and Scale allows 100. In any rolling 60-day period, an account can track up to 15 distinct apps on Pro or 120 on Scale. Removed apps count for 60 days after removal. Re-adding an app already counted is free. These limits also apply in the Fellow app. Indie allows 3 active apps and 6 distinct apps in the same period.
List tracked apps
Section titled “List tracked apps”GET /api/v1/tracked-apps Returns active and paused tracked apps in a stable order.
Query parameters
status string optional Tracking status. Omit to include active and paused apps.
limit integer optional Number of items per page. Defaults to 50. Maximum 100.
cursor string optional Use pagination.next_cursor from the previous response. Keep filters, sort order and limit unchanged. Cursors are tied to your account. Invalid, expired or mismatched cursors return 400.
Request
Responses
A page of tracked apps, or an empty data array.
application/json
Response fields
data array<object> required Child fields 5
fellow_app_id string required Fellow app ID. Use with the fellow_app_id filter.
apple_app_id string required Apple App Store app ID. Use with the apple_app_id filter.
name string | null required App display name, or null when unavailable.
tracking_status string required Current tracking status for this account.
tracked_at string (date-time) required UTC timestamp when this account began tracking this app.
pagination object required Continue with next_cursor and unchanged filters, ordering and limit. Stop when has_more is false.
Child fields 2
next_cursor string | null required Opaque, account-bound continuation cursor. null on the final page.
has_more boolean required Whether another page is available through next_cursor.
Invalid request.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Missing or invalid token.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
WWW-Authenticate string optional Bearer authentication challenge.
Access denied.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Too many requests.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
Retry-After string optional Delay in seconds.
Server error.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Add a tracked app
Section titled “Add a tracked app”POST /api/v1/tracked-apps Starts tracking an app by its Apple App Store ID. Fellow retrieves the app details. Returns 201 for a newly tracked app, or 200 if the app is already tracked. An existing tracking status is unchanged. Pro allows 10 active apps and 15 distinct apps tracked within a rolling 60-day period. Scale allows 100 active apps and 120 distinct apps in that period. Removed apps count for 60 days after removal. Re-adding an app already counted is free.
Request body application/json
apple_app_id string required Apple App Store app ID, always encoded as a string.
Request
Responses
App added to tracking.
application/json
Response fields
data object required An app tracked by the account. fellow_app_id identifies the Fellow app, not its tracking relationship.
Child fields 5
fellow_app_id string required Fellow app ID. Use with the fellow_app_id filter.
apple_app_id string required Apple App Store app ID. Use with the apple_app_id filter.
name string | null required App display name, or null when unavailable.
tracking_status string required Current tracking status for this account.
tracked_at string (date-time) required UTC timestamp when this account began tracking this app.
Response headers
Location string (uri-reference) optional Relative URI of the tracked-app resource.
App already tracked. Its details and status are unchanged.
application/json
Response fields
data object required An app tracked by the account. fellow_app_id identifies the Fellow app, not its tracking relationship.
Child fields 5
fellow_app_id string required Fellow app ID. Use with the fellow_app_id filter.
apple_app_id string required Apple App Store app ID. Use with the apple_app_id filter.
name string | null required App display name, or null when unavailable.
tracking_status string required Current tracking status for this account.
tracked_at string (date-time) required UTC timestamp when this account began tracking this app.
Invalid request.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Missing or invalid token.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
WWW-Authenticate string optional Bearer authentication challenge.
Access denied.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Not found.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Conflict.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Request body too large.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Too many requests.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
Retry-After string optional Delay in seconds.
Server error.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Get a tracked app
Section titled “Get a tracked app”GET /api/v1/tracked-apps/{fellow_app_id} Returns an active tracked app. Paused apps return 403. Untracked apps return 404.
Path parameters
fellow_app_id string required fellow_app_id returned by the tracked-app endpoints.
Request
Responses
The active tracked app.
application/json
Response fields
data object required An app tracked by the account. fellow_app_id identifies the Fellow app, not its tracking relationship.
Child fields 5
fellow_app_id string required Fellow app ID. Use with the fellow_app_id filter.
apple_app_id string required Apple App Store app ID. Use with the apple_app_id filter.
name string | null required App display name, or null when unavailable.
tracking_status string required Current tracking status for this account.
tracked_at string (date-time) required UTC timestamp when this account began tracking this app.
Invalid request.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Missing or invalid token.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
WWW-Authenticate string optional Bearer authentication challenge.
Access denied.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Not found.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Too many requests.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
Retry-After string optional Delay in seconds.
Server error.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Remove a tracked app
Section titled “Remove a tracked app”DELETE /api/v1/tracked-apps/{fellow_app_id} Stops tracking the app and removes this account's access to its feature data. Stored app history is preserved. Returns 204 even if the app is not tracked.
Path parameters
fellow_app_id string required fellow_app_id returned by the tracked-app endpoints.
Request
Responses
App no longer tracked. No response body.
No response body.
Invalid request.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Missing or invalid token.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
WWW-Authenticate string optional Bearer authentication challenge.
Access denied.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Too many requests.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
Retry-After string optional Delay in seconds.
Server error.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Features
Section titled “Features”A feature records an app’s appearance in App Store editorial content. Types are story, room, section, app and event. Each entry in history is one continuous period in a country. A return after a gap is a separate entry.
Feature responses do not include structured tab, placement or recognition metadata, such as carousel positions, App of the Day or Editors’ Choice. Screenshots provide visual evidence of captured appearances. Missing metadata does not establish that an app lacked a placement or recognition.
GET /features includes history periods that match the country and date filters. first_seen and last_seen summarize those periods. GET /features/{fellow_feature_id} returns periods that overlap your available history.
Date filters select overlapping periods. Returned dates are the original dates, even when first_seen is before your available history or the dates extend beyond from and to.
Use fellow_feature_id to get a feature or its screenshots. apple_feature_id is Apple’s editorial or event ID. Story, room and event history entries include an app_store_url for their country when a link can be formed. The field is omitted for app and section features. Events belong to one parent app; their URL is https://apps.apple.com/<country>/app/id<apple_app_id>?eventid=<apple_feature_id>. Event screenshots show the tab card.
List features
Section titled “List features”GET /api/v1/features Returns features for active tracked apps. Each feature includes only the history periods that match the request filters, by country.
Query parameters
fellow_app_id string optional Fellow app ID. Cannot be combined with apple_app_id, even for the same app. Omit both to include all active tracked apps.
apple_app_id string optional Apple App Store app ID. Cannot be combined with fellow_app_id, even for the same app. Omit both to include all active tracked apps.
countries array<string> optional Comma-separated country codes. Matches any listed country. Codes are case-insensitive. Duplicates are ignored. Responses use uppercase. Empty or unsupported values return 400.
types array<string> optional Comma-separated feature types. Matches any listed type. Duplicates are ignored. Empty or unsupported values return 400.
from string (date) optional Inclusive start date in UTC. Defaults to the start of your plan's available history. Matches appearances with last_seen on or after this date. Must be on or before to. Dates outside your available history are rejected.
to string (date) optional Inclusive end date in UTC. Defaults to today in UTC. Matches appearances with first_seen on or before this date. Returned appearances keep their full dates, even when they extend beyond the requested range.
sort string optional Sorts by dates from matching appearances. Prefix with - for descending order. Ties have a stable order.
limit integer optional Number of items per page. Defaults to 50. Maximum 100.
cursor string optional Use pagination.next_cursor from the previous response. Keep filters, sort order and limit unchanged. Cursors are tied to your account. Invalid, expired or mismatched cursors return 400.
Request
Responses
A page of features and their matching appearance history.
application/json
Response fields
data array<object> required Child fields 9
fellow_feature_id string required Fellow feature ID used in /features/{fellow_feature_id}.
fellow_app_id string required Fellow ID of the app associated with this feature.
apple_app_id string required Apple App Store ID of the app associated with this feature.
apple_feature_id string required Apple editorial ID. May be shared by several apps or Fellow records. Use fellow_feature_id for detail requests.
type string required App Store feature type.
title string | null required Feature title, or null when unavailable.
first_seen string (date) required Earliest first_seen across returned history periods.
last_seen string (date) required Latest last_seen across returned history periods.
history array<object> required Periods that overlap available history and match the request, by country. Returns after a gap are listed separately.
Child fields 4
country string required App Store country where this appearance was observed.
first_seen string (date) required First known UTC date in this appearance.
last_seen string (date) required Last known UTC date in this appearance, inclusive.
app_store_url string (uri) optional Country-specific Apple page for a story, room, or in-app event. Event URLs use the parent app ID and eventid query parameter. Omitted when no page URL can be formed.
pagination object required Continue with next_cursor and unchanged filters, ordering and limit. Stop when has_more is false.
Child fields 2
next_cursor string | null required Opaque, account-bound continuation cursor. null on the final page.
has_more boolean required Whether another page is available through next_cursor.
Invalid request.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Missing or invalid token.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
WWW-Authenticate string optional Bearer authentication challenge.
Access denied.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Not found.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Too many requests.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
Retry-After string optional Delay in seconds.
Server error.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Get a feature
Section titled “Get a feature”GET /api/v1/features/{fellow_feature_id} Returns a feature and its history by country that overlaps your available history. Use its fellow_feature_id to list screenshots.
Path parameters
fellow_feature_id string required fellow_feature_id returned by GET /features.
Request
Responses
Feature data and appearance history available to your account.
application/json
Response fields
data object required A record of an app appearing in App Store editorial content. first_seen, last_seen and sort order derive from the returned history. Use fellow_feature_id to get the feature or list its screenshots.
Child fields 9
fellow_feature_id string required Fellow feature ID used in /features/{fellow_feature_id}.
fellow_app_id string required Fellow ID of the app associated with this feature.
apple_app_id string required Apple App Store ID of the app associated with this feature.
apple_feature_id string required Apple editorial ID. May be shared by several apps or Fellow records. Use fellow_feature_id for detail requests.
type string required App Store feature type.
title string | null required Feature title, or null when unavailable.
first_seen string (date) required Earliest first_seen across returned history periods.
last_seen string (date) required Latest last_seen across returned history periods.
history array<object> required Periods that overlap available history and match the request, by country. Returns after a gap are listed separately.
Child fields 4
country string required App Store country where this appearance was observed.
first_seen string (date) required First known UTC date in this appearance.
last_seen string (date) required Last known UTC date in this appearance, inclusive.
app_store_url string (uri) optional Country-specific Apple page for a story, room, or in-app event. Event URLs use the parent app ID and eventid query parameter. Omitted when no page URL can be formed.
Invalid request.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Missing or invalid token.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
WWW-Authenticate string optional Bearer authentication challenge.
Access denied.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Not found.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Too many requests.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
Retry-After string optional Delay in seconds.
Server error.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Screenshots
Section titled “Screenshots”Screenshots show a feature’s placement in the App Store. Filter by country and date. Results are ordered by the most recent matching appearance.
image_url is a temporary HTTPS URL that expires at image_url_expires_at. List the screenshots again to get a new URL.
List feature screenshots
Section titled “List feature screenshots”GET /api/v1/features/{fellow_feature_id}/screenshots Returns screenshots for this feature, ordered by the most recent matching appearance.
Path parameters
fellow_feature_id string required fellow_feature_id returned by GET /features.
Query parameters
countries array<string> optional Comma-separated country codes. Matches any listed country. Codes are case-insensitive. Duplicates are ignored. Responses use uppercase. Empty or unsupported values return 400.
from string (date) optional Inclusive start date in UTC. Defaults to the start of your plan's available history. Matches appearances with last_seen on or after this date. Must be on or before to. Dates outside your available history are rejected.
to string (date) optional Inclusive end date in UTC. Defaults to today in UTC. Matches appearances with first_seen on or before this date. Returned appearances keep their full dates, even when they extend beyond the requested range.
limit integer optional Number of items per page. Defaults to 50. Maximum 100.
cursor string optional Use pagination.next_cursor from the previous response. Keep filters, sort order and limit unchanged. Cursors are tied to your account. Invalid, expired or mismatched cursors return 400.
Request
Responses
A page of matching screenshots, or an empty data array.
application/json
Response fields
data array<object> required Child fields 5
country string required App Store country associated with this screenshot.
location string required App Store location represented by the screenshot.
history array<object> required Matching periods of this feature in the screenshot's country that overlap available history. Returns after a gap are listed separately.
Child fields 4
country string required App Store country where this appearance was observed.
first_seen string (date) required First known UTC date in this appearance.
last_seen string (date) required Last known UTC date in this appearance, inclusive.
app_store_url string (uri) optional Country-specific Apple page for a story, room, or in-app event. Event URLs use the parent app ID and eventid query parameter. Omitted when no page URL can be formed.
image_url string (uri) required Temporary HTTPS image URL. Expires at image_url_expires_at.
image_url_expires_at string (date-time) required UTC expiry of image_url.
pagination object required Continue with next_cursor and unchanged filters, ordering and limit. Stop when has_more is false.
Child fields 2
next_cursor string | null required Opaque, account-bound continuation cursor. null on the final page.
has_more boolean required Whether another page is available through next_cursor.
Invalid request.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Missing or invalid token.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
WWW-Authenticate string optional Bearer authentication challenge.
Access denied.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Not found.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Too many requests.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required Response headers
Retry-After string optional Delay in seconds.
Server error.
application/problem+json
Response fields
type string (uri-reference) required Problem type URI. about:blank uses the HTTP status meaning.
title string required Short summary of the HTTP problem type.
status integer required HTTP status code, identical to the response status.
detail string required Explanation specific to this request. Do not parse it for application logic.
instance string (uri-reference) optional Optional identifier for this occurrence, without secrets.
code string required Stable machine-readable application error code.
errors array<object> optional Optional field-level errors for invalid input.
Child fields 3
field string required Query parameter, path parameter, header or body field requiring correction.
code string required Machine-readable validation reason.
message string required