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

Новейший список отзыва для устройств

GET /d/v1/revocations/latest

https://devices.tanba-ooh.kz/d/v1/revocations/latest

Тот же список, что отдает публичная проверка, на адресе канала устройств. Вызов открытый, сертификат не нужен: плеер, которому ответили device_unauthorized, читает список сам. По умолчанию это подписанный файл PKCS#7 (CMS) с вложенным списком, при format=json тело и подпись в JSON.

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

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

Параметры

ИмяГдеТипОбязательныйОписаниеПример
formatзапросstringнетУкажите json, чтобы получить JSON вместо подписанного файла. jsonjson

Ответы

200 Список.

application/pkcs7-signature

application/json

RevocationList

ИмяТипОбязательныйОписаниеПример
versionintegerдаВерсия списка; растет с каждым новым списком.118
issued_atstringдаКогда выпущен список."2026-10-06T08:00:00+05:00"
not_afterstringдаК этому времени список нужно заменить."2026-10-07T08:00:00+05:00"
bodyobjectСам список: отозванные к этому времени согласования и устройства.
body.vintegerВерсия формата тела; остается 1.1
body.envstringСреда, которой принадлежит список. test, prod
body.versionintegerВерсия списка.42
body.issued_atstring (date-time)Когда выпущен список."2026-10-06T08:00:00+05:00"
body.not_afterstring (date-time)К этому времени список нужно заменить."2026-10-07T08:00:00+05:00"
body.revokedarray of objectОтозванные к этому времени согласования.
body.revoked[].approval_numberstringНомер отозванного согласования."TNB-2026-000123"
body.revoked[].revoked_atstring (date-time)Когда согласование отозвано."2026-10-05T14:30:00+05:00"
body.revoked[].ground_codestringКод правового основания отзыва, например court_order, noncompliant_content, structure_dismantled или applicant_request."court_order"
body.revoked_devicesarray of objectОтозванные к этому времени устройства; список без этого поля означает, что таких нет. Запись канала сертификата называет серийный номер сертификата (десятичный), запись подписанного канала SHA-256 от открытого ключа в DER.
body.revoked_devices[].device_idstring (uuid)Отозванное устройство."5c0e8f3a-71d2-4b6e-9a14-d8e2f7b30c59"
body.revoked_devices[].cert_serialstringСерийный номер отозванного сертификата, десятичный; канал сертификата."1234567890123"
body.revoked_devices[].pubkey_sha256stringSHA-256 от открытого ключа в DER, hex; подписанный канал."ab12c4d7e9f0a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f607182930"
body.revoked_devices[].revoked_atstring (date-time)Когда устройство отозвано."2026-10-05T14:30:00+05:00"
signaturestringBase64 от подписи над телом."MIIBpQYJKoZIhvcNAQcCoIIBljCCAZICAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwE="

Пример

{
  "version": 118,
  "issued_at": "2026-10-06T08:00:00+05:00",
  "not_after": "2026-10-07T08:00:00+05:00",
  "body": {
    "v": 1,
    "env": "prod",
    "version": 42,
    "issued_at": "2026-10-06T08:00:00+05:00",
    "not_after": "2026-10-07T08:00:00+05:00",
    "revoked": [
      {
        "approval_number": "TNB-2026-000123",
        "revoked_at": "2026-10-05T14:30:00+05:00",
        "ground_code": "court_order"
      }
    ],
    "revoked_devices": [
      {
        "device_id": "5c0e8f3a-71d2-4b6e-9a14-d8e2f7b30c59",
        "cert_serial": "1234567890123",
        "pubkey_sha256": "ab12c4d7e9f0a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f607182930",
        "revoked_at": "2026-10-05T14:30:00+05:00"
      }
    ]
  },
  "signature": "MIIBpQYJKoZIhvcNAQcCoIIBljCCAZICAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwE="
}

Ошибки

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

СтатусЗначение
503Пока недоступно.
defaultОшибка в виде документа problem.

Примеры кода

curl

curl 'https://devices.tanba-ooh.kz/d/v1/revocations/latest'
Python
import requests

response = requests.get(
    "https://devices.tanba-ooh.kz/d/v1/revocations/latest",
)
print(response.status_code, response.text)
Go
package main

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

func main() {
	req, err := http.NewRequest("GET", "https://devices.tanba-ooh.kz/d/v1/revocations/latest", nil)
	if err != nil {
		panic(err)
	}
	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))
}