One approval with its manifest
GET /api/v1/approvals/{number}
https://app.tanba-ooh.kz/api/v1/approvals/{number}
Scope read:approvals.
Authentication
API key in the Authorization header, or a console session.
Scope: read:approvals
Parameters
| Name | In | Type | Required | Description | Example |
|---|---|---|---|---|---|
number | path | string | yes | Approval number. | TNB-2026-000123 |
Responses
200 The approval.
application/json
Approval
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
number | string | yes | Approval number. | "TNB-2026-000123" |
valid_from | string (date) | yes | First day the approval is in force. | "2026-10-01" |
valid_until | string (date) | yes | Last day the approval is in force. | "2026-12-31" |
status | string | yes | State of the approval. pending, active, expiring, expired, revoked | |
signed_at | string | null | yes | When the approval was signed; null while it is pending. | "2026-10-06T14:05:39+05:00" |
env | string | yes | Environment of the approval: test or prod. | "prod" |
advertiser_name | string | yes | Name of the advertiser. | "Example Advertising LLP" |
media_name | string | Name of the approved media file. | "autumn-sale.mp4" | |
submission_id | string (uuid) | yes | Identifier of the submission the approval belongs to. | "6f1c0d3e-52a4-4b57-9a7e-0c3a1b9d2e44" |
manifest | object | yes | The signed manifest as a JSON object. | |
revoked_at | string | null | When the approval was revoked; null if it was not. | "2026-10-09T10:30:00+05:00" | |
revoke_reason | string | null | Free-text reason of the revocation; null if it was not revoked. | "The content differs from the approved file." | |
revoke_ground | string | null | Code of the legal ground of the revocation; null if it was not revoked. | "content_changed" | |
regulation | object | yes | The regulation the approval was issued under. |
Example
{
"number": "TNB-2026-000123",
"valid_from": "2026-10-01",
"valid_until": "2026-12-31",
"status": "pending",
"signed_at": "2026-10-06T14:05:39+05:00",
"env": "prod",
"advertiser_name": "Example Advertising LLP",
"media_name": "autumn-sale.mp4",
"submission_id": "6f1c0d3e-52a4-4b57-9a7e-0c3a1b9d2e44",
"manifest": {},
"revoked_at": "2026-10-09T10:30:00+05:00",
"revoke_reason": "The content differs from the approved file.",
"revoke_ground": "content_changed",
"regulation": {}
}
Errors
Errors are problem documents (application/problem+json) with a stable code.
| Status | Meaning |
|---|---|
| 401 | No valid session or API key (unauthenticated, session_expired, invalid_api_key). |
| 403 | The role or the key's scope does not allow this (forbidden, key_scope_denied, key_route_denied). |
| 404 | Nothing there, or not visible to the caller. |
| 429 | Rate limit; see Retry-After. |
| default | An error as a problem document. |
Code samples
curl
curl 'https://app.tanba-ooh.kz/api/v1/approvals/TNB-2026-000123' \
-H 'Authorization: Bearer YOUR_API_KEY'
Python
import requests
response = requests.get(
"https://app.tanba-ooh.kz/api/v1/approvals/TNB-2026-000123",
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/approvals/TNB-2026-000123", 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))
}