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

Файл открытых данных (по адресу /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

ИмяТипОбязательныйОписаниеПример
monthstringдаМесяц, который охватывают цифры, YYYY-MM."2026-08"
basisstringдаУровень доверия учтенных показов."mtls"
licenceobjectдаПримечание о лицензии на файлы. Условия использования определяет город; пока решения нет, примечание об этом сообщает.
licence.statusstringдаdraft, пока город не решил. draft
licence.textobjectдаПримечание на английском, русском и казахском языках.
licence.text.enstringдаТекст на английском."Draft - pending the city's decision."
licence.text.rustringдаТекст на русском."Проект - ожидает решения города."
licence.text.kkstringдаТекст на казахском."Жоба - қаланың шешімін күтуде."
disclosureobjectдаПороги, с которыми построен выпуск.
disclosure.min_operatorsintegerдаСколько операторов нужно опубликованной ячейке.3
disclosure.min_advertisersintegerдаСколько рекламодателей нужно опубликованной ячейке.3
disclosure.max_party_share_pctintegerдаКакой наибольший процент показов ячейки может быть у одного оператора или рекламодателя.70
disclosure.lag_monthsintegerдаСколько полных месяцев проходит между концом месяца и его выпуском.1
cityobjectдаИтог по всему городу.
city.statusstringдаwithheld, если итог выдал бы пустую ячейку. published, withheld
city.playsintegerПоказы за месяц; есть, когда опубликовано.1280450
city.on_screen_hoursnumberЧасы на экране за месяц; есть, когда опубликовано.3556.79
city.screensintegerЭкраны, которые играли в месяце; есть, когда опубликовано.312
tablesarray of objectдаДве таблицы ячеек.
tables[].namestringдаНазвание таблицы."district_format"
tables[].rowsstringдаЧто такое строки."district"
tables[].colsstringдаЧто такое столбцы."format"
tables[].cellsarray of objectдаЯчейки в порядке строки, затем столбца.
tables[].cells[].rowstringдаКод строки."medeu"
tables[].cells[].colstringдаКод столбца."cityboard"
tables[].cells[].statusstringдаЯчейки suppressed пусты намеренно. published, suppressed
tables[].cells[].playsinteger | nullдаПоказы за месяц; null, если не опубликовано.84210
tables[].cells[].on_screen_hoursnumber | 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))
}