TAŇBA-OOH Разработчикам

Проверка одного согласования

GET /v1/approval/{number}

https://verify.tanba-ooh.kz/v1/approval/{number}

Один и тот же ответ на неизвестный номер, номер неправильного формата, номер заявки и отклоненную заявку. С Accept: application/json приходит JSON, при любом другом значении HTML-страница.

Аутентификация

Не требуется. Вызов открытый.

Параметры

ИмяГдеТипОбязательныйОписаниеПример
numberпутьstringдаНомер согласования.TNB-2026-000123
pзапросstringнетТокен присутствия из QR-кода плеера, который хранит ключ. Действительный токен добавляет один отсчет присутствия этого плеера; ответ одинаков с токеном, без токена и с неверным токеном.m2oTq0cFk1gAAl3x-9Q

Ответы

200 Согласование и его подписанный манифест.

application/json

PublicApproval

ИмяТипОбязательныйОписаниеПример
approvalobjectдаСогласование.
approval.numberstringдаНомер согласования."TNB-2026-000123"
approval.statusstringдаСостояние согласования."active"
approval.ledgerarray of objectГде согласование и его отзыв записаны в публичном реестре; пусто, пока день не закрыт.
approval.ledger[].kindstringдаФиксирует ли запись выдачу или отзыв. issued, revoked
approval.ledger[].daystring (date)даДень записи реестра, Asia/Almaty."2026-10-06"
approval.ledger[].statusstringдаНасколько день заякорен в Биткоине. pending, pending_check, anchored
approval.ledger[].block_heightintegerНомер блока Биткоина с аттестацией; есть, когда день заякорен.905432
approval.ledger[].proof_urlstringдаАдрес доказательства включения для этой записи."/v1/approval/TNB-2026-000123/ledger-proof"
manifestobjectдаПодписанный манифест с замаскированным номером рекламодателя.
manifest_maskedbooleanВсегда true: номер рекламодателя в manifest замаскирован, поэтому это не подписанные байты.true
manifest_sha256stringSHA-256 в hex исходных подписанных байтов манифеста до маскирования."878a9b0a8452700baaab5574e39716d67a93a07597baab30823639c69bf1e889"

Пример

{
  "approval": {
    "number": "TNB-2026-000123",
    "status": "active",
    "ledger": [
      {
        "kind": "issued",
        "day": "2026-10-06",
        "status": "pending",
        "block_height": 905432,
        "proof_url": "/v1/approval/TNB-2026-000123/ledger-proof"
      }
    ]
  },
  "manifest": {},
  "manifest_masked": true,
  "manifest_sha256": "878a9b0a8452700baaab5574e39716d67a93a07597baab30823639c69bf1e889"
}

text/html

304 Не изменялось (ETag).

Без тела.

Ошибки

Ошибки приходят документом problem (application/problem+json) со стабильным полем code.

СтатусЗначение
404Не выданное согласование.
429Превышен предел частоты; см. Retry-After.

Примеры кода

curl

curl 'https://verify.tanba-ooh.kz/v1/approval/TNB-2026-000123' \
  -H 'Accept: application/json'
Python
import requests

response = requests.get(
    "https://verify.tanba-ooh.kz/v1/approval/TNB-2026-000123",
    headers={
        "Accept": "application/json",
    },
)
print(response.status_code, response.text)
Go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, err := http.NewRequest("GET", "https://verify.tanba-ooh.kz/v1/approval/TNB-2026-000123", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Accept", "application/json")
	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))
}