TAŇBA-OOH Developers

One revocation list by version

GET /d/v1/revocations/{version}

https://devices.tanba-ooh.kz/d/v1/revocations/{version}

The list of one version on the address of the device channel. It is what the link revocation_list.url in a heartbeat answer points to. The call is open.

Authentication

None. This call is public.

Parameters

NameInTypeRequiredDescriptionExample
versionpathintegeryesVersion of the list.42
formatquerystringnoSet to json to get JSON instead of the signed file. jsonjson

Responses

200 The list.

application/pkcs7-signature

application/json

RevocationList

NameTypeRequiredDescriptionExample
versionintegeryesVersion of the list; it grows with every new list.118
issued_atstringyesWhen the list was issued."2026-10-06T08:00:00+05:00"
not_afterstringyesThe list must be replaced by this time."2026-10-07T08:00:00+05:00"
bodyobjectThe list itself: the approvals and the devices revoked so far.
body.vintegerFormat version of the body; it stays 1.1
body.envstringThe environment the list belongs to. test, prod
body.versionintegerVersion of the list.42
body.issued_atstring (date-time)When the list was issued."2026-10-06T08:00:00+05:00"
body.not_afterstring (date-time)The list must be replaced by this time."2026-10-07T08:00:00+05:00"
body.revokedarray of objectThe approvals revoked so far.
body.revoked[].approval_numberstringNumber of the revoked approval."TNB-2026-000123"
body.revoked[].revoked_atstring (date-time)When the approval was revoked."2026-10-05T14:30:00+05:00"
body.revoked[].ground_codestringCode of the legal ground of the revocation, for example court_order, noncompliant_content, structure_dismantled or applicant_request."court_order"
body.revoked_devicesarray of objectThe devices revoked so far; a list without this field means none. A certificate-channel entry names a certificate serial (decimal), a signed-channel entry the SHA-256 of the DER public key.
body.revoked_devices[].device_idstring (uuid)The revoked device."5c0e8f3a-71d2-4b6e-9a14-d8e2f7b30c59"
body.revoked_devices[].cert_serialstringSerial number of a revoked certificate, decimal; certificate channel."1234567890123"
body.revoked_devices[].pubkey_sha256stringSHA-256 of the DER public key, hex; signed channel."ab12c4d7e9f0a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f607182930"
body.revoked_devices[].revoked_atstring (date-time)When the device was revoked."2026-10-05T14:30:00+05:00"
signaturestringBase64 of the signature over the body."MIIBpQYJKoZIhvcNAQcCoIIBljCCAZICAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwE="

Example

{
  "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="
}

Errors

Errors are problem documents (application/problem+json) with a stable code.

StatusMeaning
404Nothing there, or not visible to the caller.
defaultAn error as a problem document.

Code samples

curl

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

response = requests.get(
    "https://devices.tanba-ooh.kz/d/v1/revocations/42",
)
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/42", 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))
}