TAŇBA-OOH Developers

List the delivery certificates of the organisation

GET /api/v1/delivery/certificates

https://app.tanba-ooh.kz/api/v1/delivery/certificates

Scope read:delivery. The newest 200 certificates issued by the organisation, with where each stands in the public ledger.

Authentication

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

Scope: read:delivery

Responses

200 The certificates, newest first.

application/json

NameTypeRequiredDescriptionExample
itemsarray of DeliveryCertificateyesThe certificates of the organisation.
items[].idstring (uuid)yesId of the certificate."9b2c3d4e-6f70-4812-a3b4-c5d6e7f80912"
items[].digeststringyesHex SHA-256 of the canonical document; it is what the public ledger records."3f6c1b2a9d4e8f0a1b2c3d4e5f60718293a4b5c6d7e8f9012345678901234567"
items[].scopeobjectyesWhat the certificate covers.
items[].scope.kindstringyesWhether the report covers one approval or a campaign. approval, campaign
items[].scope.refstringyesThe approval number, or the id of the campaign."7a1f0c2e-5b6d-4e8f-9a0b-1c2d3e4f5a6b"
items[].scope.namestringName of the campaign."Autumn campaign"
items[].scope.external_refstringThe organisation's own reference of the campaign."PO-2026-17"
items[].period_fromstring (date)yesFirst day covered."2026-10-01"
items[].period_tostring (date)yesLast day covered."2026-10-31"
items[].langstringyesLanguage of the PDF issued. kk, ru, en
items[].signedbooleanyesWhether the certificate carries a signature of its own. Today none does; the ledger entry is its proof.false
items[].issued_atstringyesWhen it was issued, Almaty time."2026-11-01T09:30:00+05:00"
items[].pdf_sha256stringyesHex SHA-256 of the PDF issued."5b1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f60718293a4b5c6d7e8f901234567890a"
items[].verify_urlstringyesAddress of the public check of this certificate."https://verify.tanba-ooh.kz/r/3f6c1b2a9d4e8f0a1b2c3d4e5f60718293a4b5c6d7e8f9012345678901234567"
items[].ledgerobjectyesWhere the digest stands in the public ledger.
items[].ledger.statusstringyespending until the ledger day that holds the digest exists. pending, pending_check, anchored
items[].ledger.daystring (date)The ledger day that holds the digest; present once it exists."2026-11-02"
items[].ledger.block_heightintegerBitcoin block of the attestation; present only when anchored.905432

Example

{
  "items": [
    {
      "id": "9b2c3d4e-6f70-4812-a3b4-c5d6e7f80912",
      "digest": "3f6c1b2a9d4e8f0a1b2c3d4e5f60718293a4b5c6d7e8f9012345678901234567",
      "scope": {
        "kind": "campaign",
        "ref": "7a1f0c2e-5b6d-4e8f-9a0b-1c2d3e4f5a6b",
        "name": "Autumn campaign",
        "external_ref": "PO-2026-17"
      },
      "period_from": "2026-10-01",
      "period_to": "2026-10-31",
      "lang": "ru",
      "signed": false,
      "issued_at": "2026-11-01T09:30:00+05:00",
      "pdf_sha256": "5b1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f60718293a4b5c6d7e8f901234567890a",
      "verify_url": "https://verify.tanba-ooh.kz/r/3f6c1b2a9d4e8f0a1b2c3d4e5f60718293a4b5c6d7e8f9012345678901234567",
      "ledger": {
        "status": "pending",
        "day": "2026-11-02",
        "block_height": 905432
      }
    }
  ]
}

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).
defaultAn error as a problem document.

Code samples

curl

curl 'https://app.tanba-ooh.kz/api/v1/delivery/certificates' \
  -H 'Authorization: Bearer YOUR_API_KEY'
Python
import requests

response = requests.get(
    "https://app.tanba-ooh.kz/api/v1/delivery/certificates",
    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/delivery/certificates", 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))
}