Apps
List all in-app purchases for an app v1
Read a page of in app purchase resources as flat JSON objects.
/legacy/apps/{appId}/in-app-purchasesProposed · Legacy read design · Adapter not implemented
Request
Routes are relative to your connection. Use a facade API key; the service manages Apple authentication.
BASE='https://asc.example.com/v1/connections/conn_example'
curl --fail-with-body "$BASE/legacy/apps/1234567890/in-app-purchases" \
-H "Authorization: Bearer $ASC_FACADE_KEY"const base = "https://asc.example.com/v1/connections/conn_example";
const response = await fetch(`${base}/legacy/apps/1234567890/in-app-purchases`, {
headers: { Authorization: `Bearer ${process.env.ASC_FACADE_KEY}` }
});
const body = await response.json();
if (!response.ok) {
throw new Error(body.error?.message ?? `HTTP ${response.status}`);
}
console.log(body);import json
import os
from urllib.request import Request, urlopen
from urllib.error import HTTPError
base = "https://asc.example.com/v1/connections/conn_example"
request = Request(
f"{base}/legacy/apps/1234567890/in-app-purchases",
headers={"Authorization": f"Bearer {os.environ['ASC_FACADE_KEY']}"},
)
try:
with urlopen(request) as response:
print(json.load(response))
except HTTPError as error:
detail = json.load(error)
raise RuntimeError(detail["error"]["message"]) from errorasc.example.com is a placeholder for your deployment. Examples use fictional IDs.
Path parameters
| Name | Type | Description |
|---|---|---|
| appId | string | Apple’s app ID. Returned by List apps. |
Query parameters
| Name | Type | Description |
|---|---|---|
| inAppPurchaseType | string | Filter by in app purchase type. Multiple values are comma-separated.ValuesAUTOMATICALLY_RENEWABLE_SUBSCRIPTION, NON_CONSUMABLE, CONSUMABLE, NON_RENEWING_SUBSCRIPTION, FREE_SUBSCRIPTION |
| canBeSubmitted | string | Filter by can be submitted. Multiple values are comma-separated. |
| sort | string | Comma-separated sort keys. Prefix a key with - for descending order. Only the values below are supported. Multiple values are comma-separated.ValuesreferenceName, -referenceName, productId, -productId, inAppPurchaseType, -inAppPurchaseType |
| fields | string | Comma-separated attribute names to return. This selects read fields and does not expand relationships. Multiple values are comma-separated.ValuesreferenceName, productId, inAppPurchaseType, state |
| limit | integer | Number of items per page, from 1 to 200. |
| cursor | string | Opaque nextCursor from a previous response. Keep the route, connection, filters, and ordering unchanged. |
Response
A page of flat objects, with an opaque continuation cursor.
{
"items": [
{
"id": "in_app_purchase_123",
"appId": "1234567890",
"referenceName": "Example subscription",
"productId": "com.example.notes.pro",
"inAppPurchaseType": "AUTOMATICALLY_RENEWABLE_SUBSCRIPTION",
"state": "PREPARE_FOR_SUBMISSION"
}
],
"nextCursor": null
}Illustrative response. Optional read fields may be absent or null; unknown enum values are preserved.
Response fields
| Name | Type | Description |
|---|---|---|
| items | object[] | The current page of plain resource objects. An empty collection returns []. |
| nextCursor | string | null | Opaque continuation token, or null when the collection is complete. Pass it back as cursor. |
Each item
| Name | Type | Description |
|---|---|---|
| id | string | Apple’s resource ID. Keep this string unchanged when addressing a resource. |
| appId | string | The app that owns this resource. |
| referenceName | string | The internal reference name configured for this resource. |
| productId | string | The product identifier configured in App Store Connect. |
| inAppPurchaseType | string | The in app purchase type value reported by Apple for this resource.ValuesAUTOMATICALLY_RENEWABLE_SUBSCRIPTION, NON_CONSUMABLE, CONSUMABLE, NON_RENEWING_SUBSCRIPTION, FREE_SUBSCRIPTION |
| state | string | The current state reported by Apple for this resource.ValuesCREATED, DEVELOPER_SIGNED_OFF, DEVELOPER_ACTION_NEEDED, DELETION_IN_PROGRESS, APPROVED, DELETED, REMOVED_FROM_SALE, DEVELOPER_REMOVED_FROM_SALE, WAITING_FOR_UPLOAD, PROCESSING_CONTENT, REPLACED, REJECTED, WAITING_FOR_SCREENSHOT, PREPARE_FOR_SUBMISSION, MISSING_METADATA, READY_TO_SUBMIT, WAITING_FOR_REVIEW, IN_REVIEW, PENDING_DEVELOPER_RELEASE |
Behavior
- This documents an older Apple resource contract. Its /legacy route keeps that shape separate from the current resource design; do not use it as an automatic fallback after a failed request.
Pagination
Pass nextCursor back as cursor with the same filters and ordering. Stop when it is null. Each request returns one bounded page; the service never reports a capped or incomplete traversal as a complete collection.
Errors
| HTTP | Type | Description |
|---|---|---|
| 400 | invalid_query | Unsupported filter, sort, limit, or cursor. |
| 401 | unauthorized | Missing or invalid facade API key. |
| 403 | forbidden / upstream_forbidden | The caller or configured Apple key cannot read this resource. |
| 404 | resource_not_found | The requested resource, parent, or exact locale is absent or outside the caller’s scope. |
| 429 | rate_limited | A facade or Apple rate limit was reached. Respect Retry-After when returned. |
| 502–504 | upstream error | Apple authentication, response parsing, availability, or timeout failure; this is not an empty result. |
Apple mapping
Upstream route and translation
The adapter calls GET /v1/apps/{id}/inAppPurchases. Read Apple’s original endpoint ↗
Flatten Apple’s attributes into each resource object. Expose supplied singleton linkage as IDs, with no automatic relationship traversal. Read access does not make these fields writable.
| Facade parameter | Type | Description |
|---|---|---|
| inAppPurchaseType | query | filter[inAppPurchaseType] |
| canBeSubmitted | query | filter[canBeSubmitted] |
| sort | query | sort |
| fields | query | fields[inAppPurchases] |
| limit | query | limit |
| cursor | query | Facade-owned pagination |
Reviewed 2026-10-14 · OpenAPI 4.5.1