# All endpoints

The initial versioned HTTP surface, generated from the shared endpoint contract.

## Competitors

GET /competitors, /competitors/categories, /competitors/{platform}/{storeId}, /similar, /organic and /aso read stored iOS catalogue evidence. GET /competitors/compare reads up to 10 apps with their current download and revenue estimates in one call. GET /developers/{platform}/{developerId} reads one App Store developer and up to 400 of its catalogued apps, with download and revenue totals. GET /charts reads the latest bounded Apple chart snapshot, and GET /charts/apps/{storeId}/history reads that app’s dated rank history. POST /data-requests records deduplicated demand and starts nothing on the spot; a paid_ads request puts the app first in the daily paid-ad collection run.

## Creative library

GET /organic and /organic/{postId} search the copied public organic corpus. POST /organic/{postId}/analysis asks for one post’s creative analysis, which a background worker runs, and GET on the same path reads where it stands. GET /paid-ads searches stored paid-ad observations. Saved organic and paid-ad commands use POST or DELETE on their /saved paths.

## Market

GET /market/overview reads one storefront as a whole: the market pulse, the advertiser, viral and search-owner boards, the hottest and widest-open searches, and typed findings. GET /market/signals annotates up to 600 store IDs with chart, paid-ad, organic and keyword signals. A stream that was never collected for an app is null, not zero.

## Contract source

Each row in the endpoint table links to the request curl, JSON response and source for that operation. The shared public contract is the source of truth. This reference does not invent fields for spend, onboarding or native search volume.

## Endpoints

| Method | Path | Scope | MCP job |
| --- | --- | --- | --- |
| GET | `/v1/workspaces` | `context:read` | `get_context workspaces` |
| GET | `/v1/competitors` | `context:read` | `search_apps search` |
| GET | `/v1/competitors/categories` | `context:read` | `search_apps categories` |
| GET | `/v1/competitors/{platform}/{storeId}` | `context:read` | `get_app get` |
| GET | `/v1/competitors/compare` | `context:read` | `search_apps compare` |
| GET | `/v1/developers/{platform}/{developerId}` | `context:read` | `search_apps developer` |
| GET | `/v1/competitors/{platform}/{storeId}/similar` | `context:read` | `search_apps similar` |
| GET | `/v1/competitors/{platform}/{storeId}/organic` | `context:read` | `get_app organic` |
| GET | `/v1/competitors/{platform}/{storeId}/case-file` | `context:read` | `get_app case_file` |
| GET | `/v1/competitors/{platform}/{storeId}/paid-ads/intelligence` | `context:read` | `get_ads app_intelligence` |
| GET | `/v1/competitors/{platform}/{storeId}/aso` | `context:read` | `get_app aso` |
| GET | `/v1/competitors/{platform}/{storeId}/aso/keywords` | `context:read` | `get_app keywords` |
| GET | `/v1/competitors/{platform}/{storeId}/aso/collection` | `context:read` | `get_app aso_status` |
| POST | `/v1/competitors/{platform}/{storeId}/aso/collection` | `content:write` | `refresh aso_collection` |
| GET | `/v1/competitors/{platform}/{storeId}/paid-ads/refresh` | `context:read` | `get_app ad_refresh_status` |
| POST | `/v1/competitors/{platform}/{storeId}/paid-ads/refresh` | `content:write` | `refresh ad_refresh` |
| GET | `/v1/competitors/{platform}/{storeId}/data-requests` | `context:read` | `get_app data_requests` |
| POST | `/v1/competitors/{platform}/{storeId}/data-requests` | `content:write` | `request_data request` |
| GET | `/v1/organic` | `context:read` | `search_organic search` |
| GET | `/v1/organic/{postId}` | `context:read` | `search_organic get` |
| GET | `/v1/organic/saved` | `context:read` | `search_organic saved` |
| POST | `/v1/organic/{postId}/saved` | `content:write` | `save organic` |
| DELETE | `/v1/organic/{postId}/saved` | `content:write` | `save unsave_organic` |
| POST | `/v1/organic/{postId}/analysis` | `content:write` | `refresh organic_analysis` |
| GET | `/v1/organic/{postId}/analysis` | `context:read` | `search_organic analysis` |
| GET | `/v1/paid-ads` | `context:read` | `get_ads search` |
| GET | `/v1/paid-ads/intelligence` | `context:read` | `get_ads intelligence` |
| GET | `/v1/paid-ads/rails` | `context:read` | `get_ads rails` |
| GET | `/v1/paid-ads/{platform}/{archiveId}` | `context:read` | `get_ads get` |
| POST | `/v1/paid-ads/{platform}/{archiveId}/transcript` | `content:write` | `refresh ad_transcript` |
| POST | `/v1/paid-ads/{platform}/{archiveId}/analysis` | `content:write` | `refresh ad_analysis` |
| GET | `/v1/paid-ads/{platform}/{archiveId}/analysis` | `context:read` | `get_ads analysis` |
| POST | `/v1/paid-ads/{platform}/{archiveId}/saved` | `content:write` | `save ad` |
| DELETE | `/v1/paid-ads/{platform}/{archiveId}/saved` | `content:write` | `save unsave_ad` |
| GET | `/v1/aso/apps` | `context:read` | `aso list` |
| GET | `/v1/aso/case-evidence` | `context:read` | `aso evidence` |
| POST | `/v1/aso/apps` | `content:write` | `manage_aso track` |
| POST | `/v1/aso/apps/temporary` | `content:write` | `manage_aso add_temporary` |
| GET | `/v1/aso/apps/{appId}` | `context:read` | `aso get` |
| GET | `/v1/aso/apps/{appId}/keyword-discovery` | `context:read` | `aso discover` |
| PATCH | `/v1/aso/apps/{appId}` | `content:write` | `manage_aso update` |
| DELETE | `/v1/aso/apps/{appId}` | `content:write` | `manage_aso untrack` |
| POST | `/v1/aso/apps/{appId}/keywords` | `content:write` | `manage_aso add_keywords` |
| POST | `/v1/aso/tags` | `content:write` | `manage_aso create_tag` |
| PATCH | `/v1/aso/tags/{tagId}` | `content:write` | `manage_aso update_tag` |
| DELETE | `/v1/aso/tags/{tagId}` | `content:write` | `manage_aso remove_tag` |
| PATCH | `/v1/aso/apps/{appId}/keywords/{keywordId}` | `content:write` | `manage_aso update_keyword` |
| POST | `/v1/aso/apps/{appId}/keywords/tags` | `content:write` | `manage_aso assign_tag` |
| DELETE | `/v1/aso/apps/{appId}/keywords/{keywordId}` | `content:write` | `manage_aso remove_keyword` |
| POST | `/v1/aso/apps/{appId}/refresh` | `content:write` | `refresh aso_app` |
| GET | `/v1/aso/apps/{appId}/gap/{rivalStoreId}` | `context:read` | `aso gap` |
| POST | `/v1/aso/app-search` | `content:write` | `manage_aso search_ios` |
| GET | `/v1/aso/keywords/{query}` | `context:read` | `aso explore` |
| POST | `/v1/aso/keywords/{query}/refresh` | `content:write` | `refresh aso_keyword` |
| POST | `/v1/competitors/intake/requested` | `content:write` | `request_data intake` |
| POST | `/v1/competitors/intake/emerging-discovery` | `content:write` | `request_data discover_emerging` |
| GET | `/v1/competitors/{platform}/{storeId}/estimates/history` | `context:read` | `get_app estimates` |
| POST | `/v1/competitors/{platform}/{storeId}/estimates/refresh` | `content:write` | `refresh estimates` |
| GET | `/v1/competitors/{platform}/{storeId}/technology` | `context:read` | `get_app technology` |
| POST | `/v1/competitors/{platform}/{storeId}/technology` | `content:write` | `refresh technology` |
| GET | `/v1/competitors/{platform}/{storeId}/media` | `context:read` | `get_app media` |
| GET | `/v1/competitors/intake/emerging` | `context:read` | `search_apps emerging` |
| GET | `/v1/charts` | `context:read` | `get_market charts` |
| GET | `/v1/charts/apps/{storeId}/history` | `context:read` | `get_app chart_history` |
| GET | `/v1/market/overview` | `context:read` | `get_market overview` |
| GET | `/v1/market/leaderboard` | `context:read` | `get_market leaderboard` |
| GET | `/v1/market/signals` | `context:read` | `get_market signals` |
| GET | `/v1/boards` | `context:read` | `boards list` |
| GET | `/v1/boards/memberships` | `context:read` | `boards memberships` |
| POST | `/v1/boards` | `content:write` | `manage_boards create` |
| GET | `/v1/boards/{boardId}` | `context:read` | `boards get` |
| PATCH | `/v1/boards/{boardId}` | `content:write` | `manage_boards update` |
| DELETE | `/v1/boards/{boardId}` | `content:write` | `manage_boards remove` |
| POST | `/v1/boards/{boardId}/items` | `content:write` | `manage_boards add_item` |
| PATCH | `/v1/boards/{boardId}/items/{itemId}` | `content:write` | `manage_boards update_item` |
| DELETE | `/v1/boards/{boardId}/items/{itemId}` | `content:write` | `manage_boards remove_item` |
| GET | `/v1/starter-boards` | `context:read` | `starter_boards list` |
| GET | `/v1/starter-boards/search` | `context:read` | `starter_boards search` |
| GET | `/v1/starter-boards/{nicheKey}` | `context:read` | `starter_boards detail` |
| POST | `/v1/starter-boards/{nicheKey}/adopt` | `content:write` | `adopt_starter_board adopt` |
| GET | `/v1/public/starter-boards` | `context:read` | `starter_boards public_niches` |
| GET | `/v1/public/starter-boards/{nicheKey}` | `context:read` | `starter_boards public_preview` |
