Skip to main content

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 timesend_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 windowincluded_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 testPOST /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:
ValueDescription
1Prior day (most recent UTC day closed before send_at)
3Prior 3 days
7Prior 7 days

status values

ValueMeaning
"draft"Paused — no deliveries are scheduled.
"active"Active — enqueued for delivery at each send_at.

environment values

ValueMeaning
"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

MethodEndpointDescription
GET/v4/scheduled-reportsList scheduled reports (paginated via limit/offset)
POST/v4/scheduled-reportsCreate scheduled report
GET/v4/scheduled-reports/destinationsList 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-testTrigger 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.