TAŇBA-OOH Developers

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

NameInTypeRequiredDescriptionExample
idpathstring (uuid)yesIdentifier of the statement.3f2b8c1e-6a47-4d0e-9b55-2c7d1a8e4f90
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.
409The period has no play lines.
503The signing service is not available.
defaultAn 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))
}