Apps
Read beta tester metrics for an app
Read the selected performance data as JSON. Metric series and dimensions keep their domain structure. Results use items and nextCursor.
/apps/{appId}/metrics/beta-tester-usagesProposed · Extended 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/apps/1234567890/metrics/beta-tester-usages?groupBy=betaTesters&period=P30D" \
-H "Authorization: Bearer $ASC_FACADE_KEY"const base = "https://asc.example.com/v1/connections/conn_example";
const response = await fetch(`${base}/apps/1234567890/metrics/beta-tester-usages?groupBy=betaTesters&period=P30D`, {
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}/apps/1234567890/metrics/beta-tester-usages?groupBy=betaTesters&period=P30D",
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 |
|---|---|---|
| period | string | The reporting interval used for these metrics.ValuesP7D, P30D, P90D, P365D |
| groupBy | string | Group measurements by the supported dimension. Multiple values are comma-separated.ValuesbetaTesters |
| betaTesters | string | Select the beta testers whose metrics should be returned. |
| 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
Structured metric data, with series and dimension values preserved. Pages use items and nextCursor.
{
"items": [
{
"dataPoints": [
{
"start": "2026-10-14T12:00:00Z",
"end": "2026-10-14T12:00:00Z",
"values": {
"crashCount": 1,
"sessionCount": 1,
"feedbackCount": 1
}
}
],
"dimensions": {
"betaTesters": {
"id": "resource_123"
}
}
}
],
"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 |
|---|---|---|
| dataPoints | object[] | Measurements for this dimension, including the start and end of each reporting interval. |
| dimensions | object | Plain identifiers for the entities represented by these measurements. |
dataPoints fields
| Name | Type | Description |
|---|---|---|
| start | string · date-time | Start, as an RFC 3339 timestamp. |
| end | string · date-time | End, as an RFC 3339 timestamp. |
| values | object | The values value reported by Apple for this resource. |
dataPoints.values fields
| Name | Type | Description |
|---|---|---|
| crashCount | integer | The crash count value reported by Apple for this resource. |
| sessionCount | integer | The session count value reported by Apple for this resource. |
| feedbackCount | integer | The feedback count value reported by Apple for this resource. |
dimensions fields
| Name | Type | Description |
|---|---|---|
| betaTesters | object | The beta testers value reported by Apple for this resource. |
dimensions.betaTesters fields
| Name | Type | Description |
|---|---|---|
| id | string | Apple’s resource ID. Keep this string unchanged when addressing a resource. |
Behavior
- Provide either groupBy or betaTesters. Apple requires at least one of these parameters.
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}/metrics/betaTesterUsages. Read Apple’s original endpoint ↗
Apple returns application/json. The adapter retains the metric-series structure, removes transport envelopes where present, and exposes dimension linkage as IDs.
| Facade parameter | Type | Description |
|---|---|---|
| period | query | period |
| groupBy | query | groupBy |
| betaTesters | query | filter[betaTesters] |
| limit | query | limit |
| cursor | query | Facade-owned pagination |
Reviewed 2026-10-14 · OpenAPI 4.5.1