Файл открытых данных (по адресу /open/{file} на хосте verify)
GET /v1/open/{file}
https://verify.tanba-ooh.kz/v1/open/{file}
Технический текст справочника написан на английском.
Файл опубликованного выпуска: YYYY-MM.csv или YYYY-MM.json. Байты те, чью контрольную сумму хранит публичный реестр; они не пересчитываются. В заголовке X-Data-Licence примечание о лицензии (пока проект). Месяц, который еще не опубликован, и любое другое имя дают 404.
Аутентификация
Не требуется. Вызов открытый.
Параметры
| Имя | Где | Тип | Обязательный | Описание | Пример |
|---|---|---|---|---|---|
file | путь | string | да | Месяц и формат, например 2026-08.csv или 2026-08.json. | 2026-08.csv |
If-None-Match | заголовок | string | нет | ETag копии, которая у вас уже есть; тогда ответ 304 без тела. | "3f786850e387550fdab836ed7e6dc881de23001b3f786850e387550fdab836ed" |
Ответы
200 Файл.
text/csv
Пример
string
application/json
OpenDataFile
| Имя | Тип | Обязательный | Описание | Пример |
|---|---|---|---|---|
month | string | да | Месяц, который охватывают цифры, YYYY-MM. | "2026-08" |
basis | string | да | Уровень доверия учтенных показов. | "mtls" |
licence | object | да | Примечание о лицензии на файлы. Условия использования определяет город; пока решения нет, примечание об этом сообщает. | |
licence.status | string | да | draft, пока город не решил. draft | |
licence.text | object | да | Примечание на английском, русском и казахском языках. | |
licence.text.en | string | да | Текст на английском. | "Draft - pending the city's decision." |
licence.text.ru | string | да | Текст на русском. | "Проект - ожидает решения города." |
licence.text.kk | string | да | Текст на казахском. | "Жоба - қаланың шешімін күтуде." |
disclosure | object | да | Пороги, с которыми построен выпуск. | |
disclosure.min_operators | integer | да | Сколько операторов нужно опубликованной ячейке. | 3 |
disclosure.min_advertisers | integer | да | Сколько рекламодателей нужно опубликованной ячейке. | 3 |
disclosure.max_party_share_pct | integer | да | Какой наибольший процент показов ячейки может быть у одного оператора или рекламодателя. | 70 |
disclosure.lag_months | integer | да | Сколько полных месяцев проходит между концом месяца и его выпуском. | 1 |
city | object | да | Итог по всему городу. | |
city.status | string | да | withheld, если итог выдал бы пустую ячейку. published, withheld | |
city.plays | integer | Показы за месяц; есть, когда опубликовано. | 1280450 | |
city.on_screen_hours | number | Часы на экране за месяц; есть, когда опубликовано. | 3556.79 | |
city.screens | integer | Экраны, которые играли в месяце; есть, когда опубликовано. | 312 | |
tables | array of object | да | Две таблицы ячеек. | |
tables[].name | string | да | Название таблицы. | "district_format" |
tables[].rows | string | да | Что такое строки. | "district" |
tables[].cols | string | да | Что такое столбцы. | "format" |
tables[].cells | array of object | да | Ячейки в порядке строки, затем столбца. | |
tables[].cells[].row | string | да | Код строки. | "medeu" |
tables[].cells[].col | string | да | Код столбца. | "cityboard" |
tables[].cells[].status | string | да | Ячейки suppressed пусты намеренно. published, suppressed | |
tables[].cells[].plays | integer | null | да | Показы за месяц; null, если не опубликовано. | 84210 |
tables[].cells[].on_screen_hours | number | null | да | Часы на экране за месяц; null, если не опубликовано. | 233.92 |
Пример
{
"month": "2026-08",
"basis": "mtls",
"licence": {
"status": "draft",
"text": {
"en": "Draft - pending the city's decision.",
"ru": "Проект - ожидает решения города.",
"kk": "Жоба - қаланың шешімін күтуде."
}
},
"disclosure": {
"min_operators": 3,
"min_advertisers": 3,
"max_party_share_pct": 70,
"lag_months": 1
},
"city": {
"status": "published",
"plays": 1280450,
"on_screen_hours": 3556.79,
"screens": 312
},
"tables": [
{
"name": "district_format",
"rows": "district",
"cols": "format",
"cells": [
{
"row": "medeu",
"col": "cityboard",
"status": "published",
"plays": 84210,
"on_screen_hours": 233.92
}
]
}
]
}
304 The copy you hold is current.
Без тела.
Ошибки
Ошибки приходят документом problem (application/problem+json) со стабильным полем code.
| Статус | Значение |
|---|---|
| 404 | Открытые данные выключены (not_published) либо месяц или файл не опубликован или не существует (not_found). |
| 429 | Превышен предел частоты; см. Retry-After. |
Примеры кода
curl
curl 'https://verify.tanba-ooh.kz/v1/open/2026-08.csv'
Python
import requests
response = requests.get(
"https://verify.tanba-ooh.kz/v1/open/2026-08.csv",
)
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/open/2026-08.csv", 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))
}