Skip to content

App Store Connect API

Changing prices with the App Store Connect API

Everything the pricing screens in App Store Connect do is available over the API. This is the map: which resources exist, how they fit together, and what goes wrong in practice.

Updated 9 min read

Authentication

Requests carry a short-lived JWT signed with a team API key's .p8 private key, identified by its Key ID and Issuer ID (generating tokens). To change prices the key needs a role that can manage pricing — App Manager or Admin (role permissions). Creating one is covered in Creating an App Store Connect API key for pricing.

The resources

ProductPrice pointsWhere the price lives
AppGET /v1/apps/{id}/appPricePoints?filter[territory]=USAPOST /v1/appPriceSchedules — base territory, manual prices, automatic prices
In-app purchaseGET /v2/inAppPurchases/{id}/pricePointsPOST /v1/inAppPurchasePriceSchedules — base territory plus manual prices with start dates
SubscriptionGET /v1/subscriptions/{id}/pricePointsPOST /v1/subscriptionPrices — one per territory, with start date and preserveCurrentPrice
TerritoriesGET /v1/territoriesThe 175 storefronts and their currencies

Each price point resource has an equalizations relationship — the matching point in every other storefront — which is how you get Apple's worldwide prices for a base point without computing anything (app price schedules, in-app purchase price schedules, subscription prices, territories).

A worldwide change, step by step

  1. List territories once and cache them; they rarely change.
  2. For the product, fetch the price points in your base storefront and find the one that matches your base price.
  3. If you want Apple's pricing everywhere, follow that point's equalizations and you are done; otherwise compute your target per storefront and snap it to the nearest point from that storefront's list (how snapping works).
  4. Apps and in-app purchases: build one price schedule with the base territory and the full set of manual prices, and POST it. Subscriptions: POST one subscriptionPrices resource per storefront with the start date and the existing-subscriber policy.
  5. Read the response for each call and record it — the API returns the created resources, which is your audit trail.

Gotchas

  • Price-point lists are large. Paginate, and filter by territory where the endpoint allows it, or you will fetch thousands of rows per product.
  • Rate limits are per key and per hour. A change across many products and storefronts must be paced; a naive loop hits 429s half-way through and leaves the account in a mixed state.
  • A schedule replaces the previous one for apps and in-app purchases — include every storefront you care about, not only the ones that change.
  • Subscription prices are per storefront and scheduled for a future date; deleting a pending subscriptionPrices resource cancels that storefront's change.
  • Tokens expire in at most 20 minutes. Long jobs need to mint new ones.
  • Nothing in the API asks 'are you sure?'. Build the review step yourself, or use a tool that has one.

RepriceCat is, in effect, this guide as a product: it stores your key encrypted, fetches and caches price points, snaps and flags prices, paces itself against the rate limit, shows a full per-territory review, applies the batch with live progress and keeps the per-territory record. If you would rather not maintain the script, start with a free month.

Frequently asked

Which role does an App Store Connect API key need to change prices?

App Manager or Admin. Keys with Developer, Marketing, Sales or Finance roles can read some data but cannot manage pricing.

Can the API change prices for all territories in one request?

For apps and in-app purchases, yes — a price schedule carries the base territory and all manual prices. For subscriptions each storefront is its own price resource, so a worldwide change is many requests.

Is there a sandbox for pricing calls?

Price schedules act on the real account. Test with a product that is not yet live, or review the computed batch carefully before submitting — there is no dry-run mode in the API itself.

Try it

Reprice every territory from one base price

Tiers, price-point snapping, one review table, one confirmation — through the App Store Connect API. First month free, then $1 per app per month.