Evidence pack of a statement
GET /api/v1/billing/statements/{id}/evidence
https://app.tanba-ooh.kz/api/v1/billing/statements/{id}/evidence
Scope read:billing. Own organisation; the authority and the platform see all. The pack of every play line of the period the statement belongs to; see the evidence pack of a bill line for the content, the summary and the rules (immutable packs, a new version on change, every download audited).
Authentication
API key in the Authorization header, or a console session.
Scope: read:billing
Parameters
| Name | In | Type | Required | Description | Example |
|---|---|---|---|---|---|
id | path | string (uuid) | yes | Identifier of the statement. | 3f2b8c1e-6a47-4d0e-9b55-2c7d1a8e4f90 |
format | query | string | no | Set to zip to download the pack instead of reading its summary. zip | zip |
Responses
200 The summary, or the pack as a zip file.
application/json
EvidenceSummary
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
kind | string | yes | What the pack is about. accrual, statement, window, dispute | |
key | string | yes | Stable name of the subject; a new version of a pack keeps it. | "accrual:4711" |
stored_version | integer | null | yes | Version of the stored pack with exactly this content, or null when the next download will create it. | 1 |
stored_pack_id | string | null (uuid) | yes | Identifier of that stored pack, or null. | "7d1f0e5a-2b9c-4c63-8a4d-5e0f6b3c9a12" |
batches | integer | yes | Telemetry batches in the pack. | 2 |
plays | integer (int64) | yes | Plays those batches added in the hours the pack covers. | 9 |
seals | integer | yes | Daily seals in the pack. | 1 |
batches_sealed | integer | yes | Batches whose receive day is sealed. | 2 |
lines | array of object | yes | The bill lines the pack explains; empty for a structure period. | |
lines[].accrual_id | integer (int64) | yes | Identifier of the bill line. | 4711 |
lines[].source_ref | string | yes | Structure and hours of the line. | "S-001 2026-10-05T10..2026-10-20T11" |
lines[].structure | string | yes | Structure code. | "S-001" |
lines[].plays | integer (int64) | yes | Plays billed on the line. | 3739 |
lines[].units | string | yes | Billing units with three decimals. | "3739.000" |
lines[].amount_kzt | string | yes | Line amount in tenge, without VAT. | "1869.50" |
lines[].trueup | boolean | yes | True for a line that bills late plays of an earlier month; it is not recomputed from its own hours. | false |
lines[].partial | string | yes | Why the batches behind the line cannot all be recounted; empty when they can. | "" |
partial | array of string | yes | What cannot be fully recounted, in words; empty for a complete pack. | [] |
manifest_sha256 | string | yes | SHA-256 of the manifest in hex. | "9f2c1b7a4e6d8053a1c2b3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718" |
download | string | yes | Address that downloads the pack. | "/api/v1/billing/accruals/4711/evidence?format=zip" |
count_rule | string | yes | Version of the counting rule the pack was made with. | "tanba.count/1" |
Example
{
"kind": "accrual",
"key": "accrual:4711",
"stored_version": 1,
"stored_pack_id": "7d1f0e5a-2b9c-4c63-8a4d-5e0f6b3c9a12",
"batches": 2,
"plays": 9,
"seals": 1,
"batches_sealed": 2,
"lines": [
{
"accrual_id": 4711,
"source_ref": "S-001 2026-10-05T10..2026-10-20T11",
"structure": "S-001",
"plays": 3739,
"units": "3739.000",
"amount_kzt": "1869.50",
"trueup": false,
"partial": ""
}
],
"partial": [],
"manifest_sha256": "9f2c1b7a4e6d8053a1c2b3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718",
"download": "/api/v1/billing/accruals/4711/evidence?format=zip",
"count_rule": "tanba.count/1"
}
application/zip
Errors
Errors are problem documents (application/problem+json) with a stable code.
| Status | Meaning |
|---|---|
| 401 | No valid session or API key (unauthenticated, session_expired, invalid_api_key). |
| 403 | The role or the key's scope does not allow this (forbidden, key_scope_denied, key_route_denied). |
| 404 | Nothing there, or not visible to the caller. |
| 409 | The period has no play lines. |
| 503 | The signing service is not available. |
| default | An error as a problem document. |
Code samples
curl
curl 'https://app.tanba-ooh.kz/api/v1/billing/statements/3f2b8c1e-6a47-4d0e-9b55-2c7d1a8e4f90/evidence' \
-H 'Authorization: Bearer YOUR_API_KEY'
Python
import requests
response = requests.get(
"https://app.tanba-ooh.kz/api/v1/billing/statements/3f2b8c1e-6a47-4d0e-9b55-2c7d1a8e4f90/evidence",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.status_code, response.text)
Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://app.tanba-ooh.kz/api/v1/billing/statements/3f2b8c1e-6a47-4d0e-9b55-2c7d1a8e4f90/evidence", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, _ := io.ReadAll(resp.Body)
fmt.Println(resp.Status, string(data))
}