Documentation Index
Fetch the complete documentation index at: https://documentation.qonversion.io/llms.txt
Use this file to discover all available pages before exploring further.
Scheduled reports deliver analytics snapshots on a recurring schedule — once per day, at a fixed UTC time — to configured destinations (Slack, webhooks, etc.). Each report is parameterised by the time window it covers (included_range_days) and the destinations it fans out to.
Destinations are not configured in this API: they are integration destinations created via the Integrations API. Use GET /v4/scheduled-reports/destinations to discover what’s available for the project, then reference the destination by {type, id} when creating or updating a report.
Key concepts
- Send time —
send_at is a UTC time-of-day in HH:MM format, aligned to 30-minute slots ("00:00" … "23:30"). The daily job runs within a few minutes of this time.
- Coverage window —
included_range_days is the number of days of data bundled into each delivery. Only three values are supported: 1, 3, 7.
- Status — Reports are
"draft" (paused, no deliveries) or "active" (scheduled).
- Environment — Each report targets a single environment:
"sandbox" or "production".
- Send test —
POST /v4/scheduled-reports/{report_id}/send-test triggers an immediate one-off delivery. Rate-limited to one call per minute per report (returns 429 if exceeded).
send_at values
Must be in UTC HH:MM, aligned to 30-minute slots, "00:00" to "23:30":
"00:00", "00:30", "01:00", ..., "09:00", "09:30", ..., "23:00", "23:30"
"23:45" is invalid (not aligned). "12:15" is invalid (not aligned). "24:00" is invalid (out of range).
included_range_days values
Only three values are accepted:
| Value | Description |
|---|
1 | Prior day (most recent UTC day closed before send_at) |
3 | Prior 3 days |
7 | Prior 7 days |
status values
| Value | Meaning |
|---|
"draft" | Paused — no deliveries are scheduled. |
"active" | Active — enqueued for delivery at each send_at. |
environment values
| Value | Meaning |
|---|
"sandbox" | Report covers sandbox/testing events only. |
"production" | Report covers live production events. |
Destinations
A destination is a {type, id} pair. type is a namespaced kind; id is the destination’s opaque identifier. The only type currently exposed is target_integration, which points at an integration destination created via the Integrations API (typically a webhook, Slack channel, or email endpoint).
Call GET /v4/scheduled-reports/destinations to enumerate all valid destinations for a project before creating or updating a report.
Available endpoints
| Method | Endpoint | Description |
|---|
| GET | /v4/scheduled-reports | List scheduled reports (paginated via limit/offset) |
| POST | /v4/scheduled-reports | Create scheduled report |
| GET | /v4/scheduled-reports/destinations | List available destinations |
| GET | /v4/scheduled-reports/{report_id} | Get scheduled report |
| PUT | /v4/scheduled-reports/{report_id} | Partially update scheduled report |
| DELETE | /v4/scheduled-reports/{report_id} | Delete scheduled report |
| POST | /v4/scheduled-reports/{report_id}/send-test | Trigger a one-off test delivery (202; rate-limited) |
Example: create an active daily report at 09:00 UTC
curl -X POST https://api.qonversion.io/v4/scheduled-reports \
-H "Authorization: Bearer $QONVERSION_SECRET" \
-H "Content-Type: application/json" \
-d '{
"report_name": "Daily Revenue",
"send_at": "09:00",
"included_range_days": 1,
"status": "active",
"environment": "production",
"destinations": [
{ "type": "target_integration", "id": "int-wh-01" }
]
}'
Response (201 Created):
{
"object": "scheduled_report",
"id": "wbRlfw1x",
"url": "/v4/scheduled-reports/wbRlfw1x",
"report_name": "Daily Revenue",
"send_at": "09:00",
"included_range_days": 1,
"status": "active",
"environment": "production",
"runs": 0,
"destinations": [
{
"type": "target_integration",
"id": "int-wh-01",
"label": "Webhooks: Release alerts"
}
],
"created_at": "2026-04-23T11:44:36Z",
"updated_at": "2026-04-23T11:44:36Z"
}
Example: partial update (pause a report)
PUT accepts a partial body — omit any field to keep it unchanged. To pause a report, send only the new status:
curl -X PUT "https://api.qonversion.io/v4/scheduled-reports/wbRlfw1x" \
-H "Authorization: Bearer $QONVERSION_SECRET" \
-H "Content-Type: application/json" \
-d '{"status": "draft"}'
Example: send a one-off test
Useful when verifying destination credentials or report content:
curl -X POST "https://api.qonversion.io/v4/scheduled-reports/wbRlfw1x/send-test" \
-H "Authorization: Bearer $QONVERSION_SECRET"
Returns 202 Accepted immediately; the delivery runs asynchronously.
The send-test endpoint is rate-limited to one call per minute per report. Repeated calls within 60 seconds return 429 Too Many Requests with a Retry-After: 60 header.
Authentication
All v4 endpoints require a Secret Key. See Authentication.