TAŇBA-OOH Developers

Evidence pack of a structure and a period

GET /api/v1/stats/evidence.zip

https://app.tanba-ooh.kz/api/v1/stats/evidence.zip

Scope read:stats. Own organisation; the authority sees all. The batches that added plays to the structure in the days asked for, with their keys and daily seals, without bill lines. At most 31 days. Same pack format, rules and audit as the evidence pack of a bill line.

Authentication

API key in the Authorization header, or a console session.

Scope: read:stats

Parameters

NameInTypeRequiredDescriptionExample
structurequerystringyesCode of the structure.S-001
fromquerystring (date)yesFirst day, Almaty calendar.2026-10-01
toquerystring (date)yesLast day, Almaty calendar, at most 30 days after from.2026-10-31
formatquerystringnoSet to zip to download the pack instead of reading its summary. zipzip

Responses

200 The summary, or the pack as a zip file.

application/json

EvidenceSummary

NameTypeRequiredDescriptionExample
kindstringyesWhat the pack is about. accrual, statement, window, dispute
keystringyesStable name of the subject; a new version of a pack keeps it."accrual:4711"
stored_versioninteger | nullyesVersion of the stored pack with exactly this content, or null when the next download will create it.1
stored_pack_idstring | null (uuid)yesIdentifier of that stored pack, or null."7d1f0e5a-2b9c-4c63-8a4d-5e0f6b3c9a12"
batchesintegeryesTelemetry batches in the pack.2
playsinteger (int64)yesPlays those batches added in the hours the pack covers.9
sealsintegeryesDaily seals in the pack.1
batches_sealedintegeryesBatches whose receive day is sealed.2
linesarray of objectyesThe bill lines the pack explains; empty for a structure period.
lines[].accrual_idinteger (int64)yesIdentifier of the bill line.4711
lines[].source_refstringyesStructure and hours of the line."S-001 2026-10-05T10..2026-10-20T11"
lines[].structurestringyesStructure code."S-001"
lines[].playsinteger (int64)yesPlays billed on the line.3739
lines[].unitsstringyesBilling units with three decimals."3739.000"
lines[].amount_kztstringyesLine amount in tenge, without VAT."1869.50"
lines[].trueupbooleanyesTrue for a line that bills late plays of an earlier month; it is not recomputed from its own hours.false
lines[].partialstringyesWhy the batches behind the line cannot all be recounted; empty when they can.""
partialarray of stringyesWhat cannot be fully recounted, in words; empty for a complete pack.[]
manifest_sha256stringyesSHA-256 of the manifest in hex."9f2c1b7a4e6d8053a1c2b3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718"
downloadstringyesAddress that downloads the pack."/api/v1/billing/accruals/4711/evidence?format=zip"
count_rulestringyesVersion 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.

StatusMeaning
401No valid session or API key (unauthenticated, session_expired, invalid_api_key).
403The role or the key's scope does not allow this (forbidden, key_scope_denied, key_route_denied).
404Nothing there, or not visible to the caller.
422Field errors (validation_failed).
503The signing service is not available.
defaultAn error as a problem document.

Code samples

curl

curl 'https://app.tanba-ooh.kz/api/v1/stats/evidence.zip?structure=S-001&from=2026-10-01&to=2026-10-31' \
  -H 'Authorization: Bearer YOUR_API_KEY'
Python
import requests

response = requests.get(
    "https://app.tanba-ooh.kz/api/v1/stats/evidence.zip?structure=S-001&from=2026-10-01&to=2026-10-31",
    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/stats/evidence.zip?structure=S-001&from=2026-10-01&to=2026-10-31", 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))
}