GET /v1/report/{app_id}
A summarised analytics report covering crash rates, API latency percentiles, friction trends, and release health — for any time window.
Request
GET https://api.coolcoding.co.uk/v1/report/{app_id}
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
app_id |
string | ✅ | Your app identifier |
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
from |
string | — | -7d |
Report window start. ISO 8601 or relative. |
to |
string | — | now |
Report window end. |
group_by |
string | — | day |
hour · day · week |
platform |
string | — | all |
ios · android · web |
app_version |
string | — | all |
Filter to a specific release |
Example Request
curl -G https://api.coolcoding.co.uk/v1/report/my-app \
-H "Authorization: Bearer cc-YOUR_API_KEY" \
--data-urlencode "from=-7d" \
--data-urlencode "group_by=day" \
--data-urlencode "platform=ios"
Python:
import requests
response = requests.get(
"https://api.coolcoding.co.uk/v1/report/my-app",
headers={"Authorization": "Bearer cc-YOUR_API_KEY"},
params={"from": "-7d", "group_by": "day", "platform": "ios"}
)
print(response.json())
JavaScript:
const response = await fetch(
`https://api.coolcoding.co.uk/v1/report/my-app?from=-7d&group_by=day&platform=ios`,
{ headers: { "Authorization": "Bearer cc-YOUR_API_KEY" } }
);
console.log(await response.json());
Response
{
"app_id": "my-app",
"platform": "ios",
"from": "2026-05-06T00:00:00Z",
"to": "2026-05-13T00:00:00Z",
"summary": {
"crash_free_rate": 99.2,
"total_sessions": 184200,
"total_signals": 3847,
"p50_latency_ms": 210,
"p95_latency_ms": 1840,
"p99_latency_ms": 4200,
"avg_session_score": 74
},
"series": [
{
"date": "2026-05-06",
"crash_free_rate": 99.6,
"sessions": 24100,
"p95_latency_ms": 1600,
"avg_score": 78
}
],
"top_signals": [
{
"type": "crash",
"exception": "NullPointerException",
"count": 142,
"affected_sessions": 98
}
],
"request_id": "req_2a8f5d",
"usage": { "credits": 2 }
}
Error Responses
| Code | Meaning |
|---|---|
400 |
Bad Request — missing or invalid parameters |
401 |
Unauthorized — API key missing or invalid |
429 |
Too Many Requests — rate limit exceeded |
432 |
Plan limit exceeded — upgrade your plan |
500 |
Internal Server Error |
429 example:
{
"error": "Rate limit exceeded. Please reduce request frequency.",
"retry_after": 60
}
Implement retry logic that respects the retry-after header value.
Expert help
Need help tracking this in your app?
Our team sets up analytics pipelines for mobile and web teams every day. Talk to us and get your first events flowing in under an hour.
Talk to an expert