> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/apple-app-store/apps-appid-in-app-purchases>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/apple-app-store/apps-appid-in-app-purchases.mdx>

---

# Apple App Store In-App Purchases API

Products and subscriptions with prices, renewal periods, introductory offers and Family Sharing.

`GET /v1/apple-app-store/apps/{appId}/in-app-purchases` takes the numeric app id, an optional `country`, and a 1-based `page` of 10 products. The details route carries only the first 10 products. This route goes on to the end, and a large app can list thousands.

Each item has `id`, `productId`, `name`, `description`, `price.amount`, `price.formatted`, `price.currency`, `isSubscription`, `recurringPeriod`, `introOffers`, `familyShareable`, `subscriptionFamily` and `url`. `recurringPeriod` is an ISO-8601 duration such as `P1M`, and each intro offer has its own type, mode, price and period. The response has `data.lookupStatus`, `data.storefront`, `data.appId`, `data.items` and `data.page` with `hasMore` and `nextPage`. Apple's order for this list can change between reads, so a product can appear on more than one page. De-duplicate on `id` when you walk pages.

## Request

- **Endpoint:** `GET /v1/apple-app-store/apps/{appId}/in-app-purchases`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by app id
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/apple-app-store/apps/appid/in-app-purchases/get)
- **Platform page:** [/platforms/apple-app-store](https://www.socialfetch.dev/platforms/apple-app-store)

## FAQ

### Why do products repeat across pages?

The list order can differ between requests, so a product can appear on page 2 and again on page 3. The page offsets are exact but the order is not stable. De-duplicate on items[].id after you collect the pages.

### Does this include subscriptions?

Yes. isSubscription says whether an item renews, recurringPeriod gives the renewal period as an ISO-8601 duration, and subscriptionFamily names the subscription group with its rank. introOffers lists free trials and promotional offers when they exist.

### How deep can I page?

10 products a page and up to page 1,000, so up to 10,000 products. An app that sells nothing answers found with an empty list rather than an error.

### Are prices in my currency?

No. Prices follow the country storefront you pass: price.amount, price.formatted and price.currency are in that storefront's currency. Pass the same country when you compare products across apps.

### When is lookupStatus not_found?

When the app is not sold in that storefront or does not exist. An app that sells no products is found with an empty items list.

### How many credits does the in-app purchases route cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.
