Request a Z-Report (fiscal report) for a specific device. This endpoint validates your payload and returns a normalised report_id plus a download URL that you can use to fetch the generated PDF report.
POST
https://api.fiscalsupportservices.com/api/device/<device_id>/report-request/
Headers:
Content-Type: application/json
X-API-Key: fss_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The device_id path parameter can be the public device ID (e.g. PRDTEST-006) or the internal integer device ID.
Resolving fiscal_day_record_id for daily reports: Call GET /api/device/<device_id>/fiscal-days/ to list fiscal day records for the device. Use the id field from the desired record as the fiscal_day_record_id.
Request body fields:
| Field | Type | Required | Description |
report_kind | String | Yes | Report type: daily, monthly, annual, daily-date, or custom |
fiscal_day_record_id | Integer | When report_kind=daily | ID of the fiscal day record to summarise |
month | String | When report_kind=monthly | Month in YYYY-MM format (e.g. 2026-03) |
year | Integer | When report_kind=annual | Year (e.g. 2026) |
report_date | String | When report_kind=daily-date | Date in YYYY-MM-DD format (e.g. 2026-03-15) |
start_date | String | When report_kind=custom | Start date in YYYY-MM-DD format |
end_date | String | When report_kind=custom | End date in YYYY-MM-DD format |
Example — Daily report (by fiscal day record):
{
"report_kind": "daily",
"fiscal_day_record_id": 42
}
Example — Monthly report:
{
"report_kind": "monthly",
"month": "2026-03"
}
Example — Annual report:
{
"report_kind": "annual",
"year": 2026
}
Example — Daily report (by calendar date):
{
"report_kind": "daily-date",
"report_date": "2026-03-15"
}
Example — Custom date range report:
{
"report_kind": "custom",
"start_date": "2026-03-01",
"end_date": "2026-03-31"
}
Success response (HTTP 202):
{
"status": "accepted",
"device_id": "33719",
"device_pk": 12,
"report_id": "monthly:2026-03",
"report_kind": "monthly",
"report_title": "Monthly Breakdown",
"period_label": "March 2026",
"download_url": "/api/device/33719/reports/monthly:2026-03/download/",
"summary": {
"document_count": 145,
"posted_count": 140,
"failed_count": 5,
"qr_url_count": 140,
"qr_missing_count": 5,
"document_types": ["FiscalInvoice"],
"currencies": ["USD"],
"invoice_total": 45230.50,
"vat_total": 6784.58,
"totals_by_currency": {"USD": 45230.50},
"vat_by_currency": {"USD": 6784.58},
"qr_verification_urls": [
{"invoice_number": "INV-001", "qr_url": "https://fdmstest.zimra.co.zw/Receipt/Result?..."}
]
},
"invoices": [
{
"invoice_number": "INV-20260315-001",
"processing_status": "done",
"posted_status": true,
"fiscal_day_no": 42,
"processed_at": "2026-03-15T10:32:15.123456+00:00",
"uploaded_at": "2026-03-15T10:31:02.789012+00:00",
"qr_url": "https://fdmstest.zimra.co.zw/Receipt/Result?..."
},
{
"invoice_number": "INV-20260315-002",
"processing_status": "done",
"posted_status": true,
"fiscal_day_no": 42,
"processed_at": "2026-03-15T11:05:48.654321+00:00",
"uploaded_at": "2026-03-15T11:04:55.321098+00:00",
"qr_url": "https://fdmstest.zimra.co.zw/Receipt/Result?..."
}
]
}
The response now includes the full report data in JSON format:
- summary — aggregate metrics: document count, posted/failed counts, invoice and VAT totals broken down by currency, QR verification URLs
- invoices — array of individual invoice records (up to 1000) with invoice number, processing status, posted status, fiscal day number, timestamps, and QR URL
- download_url — use this to download the PDF version of the same report
Validation error (HTTP 400):
{
"report_kind": ["This field is required."]
}
{
"fiscal_day_record_id": ["This field is required for daily reports."]
}
Device not found (HTTP 404):
{
"detail": "Device not found or not accessible."
}