OpenApps API (v1)
A read-only JSON API at https://theopenapps.com/v1 with 30 operations over the ChatGPT, Claude, Cursor and Grok Bot app stores. No key is needed for up to 60 requests a minute per IP address, and every answer carries the date its data refers to.
- Base URL
- /v1theopenapps.com
- Auth
- None neededfree key for more requests
- Without a key
- 60 a minuteper IP address
- Format
- JSON{ data, meta }
Quick start
Every operation is a GET. Ask for a chart and you get its rows with their position now and on the previous day:
curl "https://theopenapps.com/v1/charts/claude/popularity?limit=2"Loading an example answer…Find an app's ref with apps_search, then pass it to the app operations. A ref is {store}:{plugin_id}, for example claude:plugin_01PoHZZkGN1CnSkTGNn7178Z for Google Drive on Claude.
curl "https://theopenapps.com/v1/apps?query=notion&store=chatgpt&limit=1"Responses and errors
- A success is
200with{ data, meta }.meta.as_ofis the date the data refers to. meta.basismaps each output field to where its value comes from:observed(as the store lists it, or as a server's tool list states it),store_reported(a number the store publishes) orderived(computed by OpenApps, such as movement or launch dates).- Lists page with
limitandcursor: passmeta.next_cursorback with the same other inputs. Without a key, a chart stops at its top 100 rows in the United States andatreaches 30 days back; a free key opens every country and 500 rows. Past your plan, the response says what it left out and which plan opens it. Arrays in a query are comma-separated. Times are ISO-8601 or relative to the latest data (-24h,-7d). - An answer is cached until the data changes, and carries an
ETag. Responses allow any origin (CORS). - Errors are
400,404,429or500with{ error: { code, message, param?, allowed?, nearest? } }. A wrong name comes back with the nearest valid ones:
{
"error": {
"code": "not_found",
"message": "No claude chart 'nope'. stores_get with store=claude lists them.",
"param": "chart",
"nearest": [
"new",
"trending",
"popularity",
"connectors:trending",
"connectors:popularity"
]
}
}Keys and limits
Public reads need no key. If you send one, use Authorization: Bearer oa_… with an API key from your account. Keys come with a free account, start with oa_ followed by 64 hex characters, expire after 90 days and can be revoked at any time. Agents can also sign in with OAuth and the catalog:read scope; those tokens are bound to /v1 or /mcp.
| Access | Requests and MCP calls | Depth |
|---|---|---|
| No key | 60 a minute per IP address | As the public pages: the United States, the top 100 rows of a list, 30 days of ranks and launches, 7 of changes, featuring and movers |
| Free key | 600 a minute per account | As a free account: every country, 500 rows of a list, 30 days back |
| Pro key | 600 a minute per account | Every row and the full history |
A key or an OAuth connection counts against its account's limit and reads what its account's plan sees. Over a limit you get 429 with a Retry-After header; past your depth, the response says what it left out and which plan opens it.
Operations
30 operations in seven groups. Open one for its parameters and an example. The full schemas are in the OpenAPI 3.1 document (/v1/openapi.json).
Stores and markets
Charts, featuring and changes
OpenApps Rank
Launches and apps
Publishers and products
Explorer and tags
MCP servers
The OpenAPI document also lists freshness_get, which we use to monitor the service. It isn't covered here and may change.
Attribution
Credit data you use as Data: OpenApps (theopenapps.com) with the date from meta.as_of and a link. For agents, the same map is in llms.txt and /v1/agent-context.