> ## 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 Overview

> Authenticate with your Apple credentials and manage apps, versions, metadata, and reports

The App Store Connect API lets you automate tasks you normally do in [App Store Connect](https://appstoreconnect.apple.com): list your apps, manage versions, update metadata (description, keywords, what's new), and download analytics or sales reports.

<Note>
  You provide your own **App Store Connect API key** via request headers. Appeeky proxies your requests to Apple's API—your private key never leaves your request and is not stored.
</Note>

***

## Authentication

All App Store Connect endpoints require these **headers** in addition to your Appeeky API key:

| Header                  | Required | Description                                                                                            |
| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------ |
| `X-ASC-Issuer-Id`       | Yes      | Your Issuer ID (UUID from [Users and Access > Keys](https://appstoreconnect.apple.com/access/api))     |
| `X-ASC-Key-Id`          | Yes      | Your Key ID (e.g. `Y38QBZP2W9`)                                                                        |
| `X-ASC-Private-Key`     | Yes\*    | Your private key (PEM format, including `-----BEGIN PRIVATE KEY-----` and `-----END PRIVATE KEY-----`) |
| `X-ASC-Private-Key-B64` | Yes\*    | Base64-encoded private key (alternative to `X-ASC-Private-Key`)                                        |

\* Provide either `X-ASC-Private-Key` or `X-ASC-Private-Key-B64`

### Creating API Keys

1. Go to [App Store Connect](https://appstoreconnect.apple.com) → **Users and Access** → **Keys**
2. Create a new key with the required roles (e.g. **Admin** for full access, **App Manager** for app/version management)
3. Download the `.p8` file **once** — you cannot download it again
4. Note your **Issuer ID** and **Key ID** from the Keys page

### cURL Example

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl -X GET "https://api.appeeky.com/v1/connect/apps?bundleId=app.taperecord" \
  -H "X-API-Key: YOUR_APEEKY_KEY" \
  -H "X-ASC-Issuer-Id: 2a40fc77-6d22-4bbd-8dad-28de4f304383" \
  -H "X-ASC-Key-Id: Y38QBZP2W9" \
  -H "X-ASC-Private-Key: -----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg...
-----END PRIVATE KEY-----"
```

<Tip>
  If sending the private key in JSON or a tool that escapes newlines, you can use `\n` instead of actual line breaks. The API normalizes both formats.
</Tip>

***

## Endpoint Summary

| Category            | Endpoints                                                                                                                                                                                                                                                                                                                    |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Apps**            | [List apps](/docs/app-store-connect-apps-versions#list-apps), [Get app](/docs/app-store-connect-apps-versions#get-app), [List app infos](/docs/app-store-connect-apps-versions#list-app-infos)                                                                                                                               |
| **Versions**        | [List versions](/docs/app-store-connect-apps-versions#list-versions), [Create version](/docs/app-store-connect-apps-versions#create-version), [Update version](/docs/app-store-connect-apps-versions#update-version)                                                                                                         |
| **App Information** | [List app info localizations](/docs/app-store-connect-apps-versions#list-app-info-localizations), [Update app info localization](/docs/app-store-connect-apps-versions#update-app-info-localization)                                                                                                                         |
| **Metadata**        | [List](/docs/app-store-connect-metadata#list-localizations), [Update](/docs/app-store-connect-metadata#update-localization), [Create](/docs/app-store-connect-metadata#create-localization), [Delete](/docs/app-store-connect-metadata#delete-localization) localizations                                                    |
| **Release**         | [Screenshots](/docs/app-store-connect-release#screenshots), [Builds](/docs/app-store-connect-release#builds), [Review details](/docs/app-store-connect-release#app-review-details), [Submit for review](/docs/app-store-connect-release#review-submission), [Phased release](/docs/app-store-connect-release#phased-release) |
| **TestFlight**      | [Beta groups](/docs/app-store-connect-testflight#beta-groups), [Testers](/docs/app-store-connect-testflight#beta-testers), [Test notes](/docs/app-store-connect-testflight#testflight-metadata), [Beta review](/docs/app-store-connect-testflight#external-beta-review)                                                      |
| **Monetization**    | [In-app purchases](/docs/app-store-connect-monetization#in-app-purchases-v2), [Subscriptions](/docs/app-store-connect-monetization#subscriptions), [Pricing](/docs/app-store-connect-monetization#app-pricing), [Availability](/docs/app-store-connect-monetization#app--territory-availability)                             |
| **Metrics**         | [Overview & app detail](/docs/app-store-connect-metrics) — synced Sales & Trends (0 credits)                                                                                                                                                                                                                                 |
| **Analytics**       | [Report requests](/docs/app-store-connect-analytics), [Reports → Instances → Segments](/docs/app-store-connect-analytics#download-report-data), [Segment download & parse](/docs/app-store-connect-analytics)                                                                                                                |
| **Sales Reports**   | [Download Sales and Trends reports](/docs/app-store-connect-sales-reports) — gzip TSV or parsed JSON                                                                                                                                                                                                                         |
| **Reviews**         | [List reviews](/docs/app-store-connect-reviews#list-customer-reviews), [Respond to review](/docs/app-store-connect-reviews#respond-to-review)                                                                                                                                                                                |

For **paid App Store search campaigns**, see [Apple Search Ads](/docs/apple-search-ads) — separate API key; full campaign, keyword, negative keyword, and report management.

***

## Typical Workflow

### 1. Find your app

```
GET /v1/connect/apps?bundleId=app.taperecord
→ Returns app ID (e.g. 6759740679)
```

### 2. Get versions and metadata

```
GET /v1/connect/apps/6759740679/versions
→ Returns version IDs (e.g. c2db5998-ac17-47b5-a61a-3658540592f8)

GET /v1/connect/versions/c2db5998.../localizations
→ Returns localization IDs with description, keywords, whatsNew, etc.
```

### 3. Update metadata (description, keywords)

```
PATCH /v1/connect/localizations/e3c96adf...
Body: { "attributes": { "keywords": "record, voice, audio, tape" } }
```

### 3b. Update App Information subtitle/name

```
GET /v1/connect/apps/6759740679/app-infos
GET /v1/connect/app-infos/:appInfoId/localizations
PATCH /v1/connect/app-info-localizations/:localizationId
Body: { "attributes": { "subtitle": "Audio recording & a retro VHS" } }
```

### 4. Get analytics

```
GET /v1/connect/apps/6759740679/analytics/report-requests
→ Create one if empty: POST /v1/connect/apps/6759740679/analytics/report-requests

GET /v1/connect/analytics/report-requests/:id/reports
→ Pick a report (e.g. App Downloads Standard)

GET /v1/connect/analytics/reports/:reportId/instances
GET /v1/connect/analytics/report-instances/:instanceId/segments
→ Each segment has a URL to download the data (gzip TSV)
```

***

## Error Codes

| Status | Code                       | When                                                        |
| ------ | -------------------------- | ----------------------------------------------------------- |
| 400    | `ASC_CREDENTIALS_REQUIRED` | Missing X-ASC-Issuer-Id, X-ASC-Key-Id, or X-ASC-Private-Key |
| 400    | `INVALID_APP_ID`           | App ID missing or invalid                                   |
| 401    | (from Apple)               | Invalid or expired API key                                  |
| 403    | (from Apple)               | Key lacks required role                                     |
| 404    | (from Apple)               | Resource not found                                          |
| 502    | `ASC_API_ERROR`            | Apple API returned an error                                 |

***

## Role Requirements

| Action                    | Minimum Role                                             |
| ------------------------- | -------------------------------------------------------- |
| List apps, get app        | App Manager                                              |
| Versions (create, update) | App Manager                                              |
| Metadata (localizations)  | App Manager                                              |
| Analytics reports         | Admin, Finance, or Sales and Reports                     |
| Sales reports             | Admin, Finance, or Sales and Reports (Team key required) |

<Note>
  **Individual** Apple Developer accounts cannot use Sales and Trends reports—only **Team** (Organization) keys.
</Note>
