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.