> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appeeky.com/llms.txt
> Use this file to discover all available pages before exploring further.

# App Store Connect CLI REST API

> Search, describe, and run any hosted App Store Connect operation over HTTP with your Appeeky API key.

The hosted server exposes the curated and generated operations over plain HTTP, for scripts and backends that do not speak MCP.

```
Base URL: https://asc-api.appeeky.com
```

## Endpoints

| Method | Path | Description |
| - | - | - |
| `GET` | `/v1/apps` | Apps the connected key can see |
| `GET` | `/v1/ops` | Operations you can run: curated and generated (`kind`, `method`, `path`, `write`) |
| `GET` | `/v1/ops?q=…` | Search them; also `group`, `method`, `kind` (`curated` or `api`), and `limit` (default 50 with `q`) |
| `GET` | `/v1/ops/{name}` | Parameters and request body of one operation |
| `POST` | `/v1/ops/{name}` | Run one operation; the JSON body holds its arguments |
| `POST` | `/mcp` | Remote MCP (streamable HTTP, stateless) |
| `GET` | `/health` | Liveness |

Authenticate with `Authorization: Bearer <key>` or `X-API-Key: <key>`, using your [Appeeky API key](/docs/authentication.md). Request bodies are limited to 1 MB.

## List apps

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl https://asc-api.appeeky.com/v1/apps -H "Authorization: Bearer $APPEEKY_API_KEY"
```

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "data": {
    "keyId": "ABC123DEFG",
    "issuerId": "00000000-0000-0000-0000-000000000000",
    "apps": [
      { "id": "1234567890", "name": "My App", "bundleId": "com.example.app", "sku": "MYAPP", "primaryLocale": "en-US" }
    ],
    "next": null
  }
}
```

## Find and describe an operation

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl "https://asc-api.appeeky.com/v1/ops?q=app%20clips&method=GET" \
  -H "Authorization: Bearer $APPEEKY_API_KEY"

curl https://asc-api.appeeky.com/v1/ops/appstore_api_apps_app_clips_get_to_many_related \
  -H "Authorization: Bearer $APPEEKY_API_KEY"
```

Search returns `{ "data": [...], "total": n }`. Write operations are listed only when the request carries `X-ASC-Allow-Writes: true`.

## Run an operation

```bash Curated theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl -X POST https://asc-api.appeeky.com/v1/ops/appstore_list_builds \
  -H "Authorization: Bearer $APPEEKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"appId":"1234567890","limit":5}'
```

```bash Generated theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl -X POST https://asc-api.appeeky.com/v1/ops/appstore_api_apps_app_clips_get_to_many_related \
  -H "Authorization: Bearer $APPEEKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"id":"1234567890","limit":10}'
```

```bash Write theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl -X POST https://asc-api.appeeky.com/v1/ops/appstore_respond_to_review \
  -H "Authorization: Bearer $APPEEKY_API_KEY" \
  -H "X-ASC-Allow-Writes: true" \
  -H "Content-Type: application/json" \
  -d '{"reviewId":"00000000-0000-0000-0000-000000000000","responseBody":"Thanks!"}'
```

Successful calls return Apple's response under `data` (`{ "data": { "ok": true } }` when Apple returns no body). Argument rules are the same as in [Full API coverage](/docs/store-cli-app-store-connect-full-api.md#arguments).

## Errors

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{ "error": { "code": "WRITES_DISABLED", "message": "appstore_respond_to_review changes your App Store Connect account. Send X-ASC-Allow-Writes: true to run it." } }
```

| Status | Code | Meaning |
| - | - | - |
| 400 | `INVALID_JSON` | Body is not JSON |
| 400 | `INVALID_ARGS` | Arguments failed validation (see `details`) |
| 401 | `MISSING_API_KEY` | No Appeeky key on the request |
| 403 | `WRITES_DISABLED` | A write without `X-ASC-Allow-Writes: true` |
| 404 | `UNKNOWN_OPERATION` | Unknown operation |
| 404 | `CLI_ONLY` | The operation reads or writes local files or config; use the CLI |
| 404 | `NOT_FOUND` | Unknown path or method |
| 405 | `METHOD_NOT_ALLOWED` | `/mcp` called with anything but `POST` |
| 413 | `BODY_TOO_LARGE` | Body over 1 MB |
| 502 | `APP_STORE_CONNECT_ERROR` | Apple refused the call; the message carries Apple's errors |
| 503 | `APPEEKY_UNREACHABLE` | Appeeky could not be reached; retry shortly |

Refusals from Appeeky (invalid key, no App Store Connect connection, credits used up) come back with Appeeky's status and code.

## Credits

Each `POST /v1/ops/{name}` and `GET /v1/apps` opens one Appeeky session, which is one metered API call. `GET /v1/ops` and `GET /v1/ops/{name}` are free. Arguments are validated before the session opens, so a rejected call costs nothing. See [Rate Limits & Credits](/docs/rate-limits.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.