TAŇBA-OOH Developers

One screen of the market

GET /api/v1/market/inventory/{code}

https://app.tanba-ooh.kz/api/v1/market/inventory/{code}

Scope read:inventory. The same item as in the list, for one structure code, whatever its status. Send the ETag back in If-None-Match to get 304.

Authentication

API key in the Authorization header, or a console session.

Scope: read:inventory

Parameters

NameInTypeRequiredDescriptionExample
codepathstringyesStructure code.ALM-0001
If-None-MatchheaderstringnoThe ETag of a copy you already hold; the answer is then 304 without a body."6f1c0a7d5b2e49c8a3d1e7f0"

Responses

200 The screen.

application/json

InventoryItem

NameTypeRequiredDescriptionExample
codestringyesStructure code; use it as dooh.id and imp.tagid."ALM-0001"
unos_idstring | nullyesIdentifier in the national outdoor advertising register, when the operator has recorded it."UNOS-4711"
statusstringyesdecommissioned appears only in answers with since. active, decommissioned
operatorobjectyesThe operator that runs the screen, the publisher in a bid request.
operator.idstring (uuid)yesId of the operator organisation."0b6f9d0e-6c1e-4a6a-9d55-0f8a6a6f3c11"
operator.namestringyesLegal name of the operator."Almaty Outdoor LLP"
operator.domainstring | nullyesDomain of the operator, when recorded."almaty-outdoor.example"
venue_typeobject | nullyesVenue type; null when neither the structure nor its format has one.
venue_type.v12integeryesId in the OpenOOH venue taxonomy 1.2.304
venue_type.v11integer | nullyesId of the official mapping to OpenOOH 1.1; send this one with venuetypetax 5.301
venue_type.codestringyesString code of the type in the 1.2 taxonomy."outdoor.spectacular"
latnumberyesLatitude in degrees.43.238
lngnumberyesLongitude in degrees.76.945
districtstringyesDistrict code from the reference list."medeu"
formatstringyesFormat code from the reference list."cityboard"
classstringyesClass of the screen. A, B, C
outdoorbooleanyesTrue for outdoor formats.true
screenobjectyesSize of the screen in pixels.
screen.winteger | nullyesWidth in pixels; null when unknown.1920
screen.hinteger | nullyesHeight in pixels; null when unknown.1080
slot_secondsinteger | nullyesLength of one spot in seconds.10
loop_secondsinteger | nullyesLength of the loop in seconds.120
complianceobjectyesWhat the platform knows about the screen's player.
compliance.connectedbooleanyesTrue when a player of the screen reported in the last 24 hours.true
authorised_sellersarray of objectyesSellers whose declaration is valid today, from the structure's own list and from the operator's list for all of its structures.
authorised_sellers[].seller_idstring (uuid)yesId of the seller organisation. The account to match with sellers.json is seller_account_id."5d3f3e0a-2a53-4b3c-8d0a-6f63b4d9a111"
authorised_sellers[].seller_account_idstringyesThe seller's account on its exchange, the value that appears in source.schain."pub-4711"
authorised_sellers[].valid_fromstring (date)yesFirst day of the authorisation."2026-10-01"
authorised_sellers[].valid_untilstring | null (date)yesLast day of the authorisation; null without an end."2026-12-31"
authorised_sellers[].scopestringyesstructure for a declaration on this screen, operator for one on all screens of the operator. structure, operator
ortbobjectyesFragments to copy into an OpenRTB 2.6 bid request.
ortb.doohobjectyesThe dooh object.
ortb.dooh.idstringyesStructure code."ALM-0001"
ortb.dooh.publisherobjectyesThe operator.
ortb.dooh.publisher.idstringyesId of the operator organisation."0b6f9d0e-6c1e-4a6a-9d55-0f8a6a6f3c11"
ortb.dooh.publisher.namestringyesLegal name of the operator."Almaty Outdoor LLP"
ortb.dooh.publisher.domainstringDomain of the operator; absent when not recorded."almaty-outdoor.example"
ortb.dooh.domainstringDomain of the operator; absent when not recorded."almaty-outdoor.example"
ortb.dooh.venuetypearray of stringOpenOOH 1.1 id of the venue type as a string; absent when the screen has none.["301"]
ortb.dooh.venuetypetaxintegerVenue taxonomy list value: 5 is OpenOOH 1.1. Absent when venuetype is.5
ortb.dooh.keywordsstringyesFormat code and outdoor or indoor, comma separated."cityboard,outdoor"
ortb.deviceobjectyesThe device object.
ortb.device.geoobjectyesThe location of the screen.
ortb.device.geo.latnumberyesLatitude in degrees.43.238
ortb.device.geo.lonnumberyesLongitude in degrees.76.945
ortb.device.geo.typeintegeryesSource of the location; 1 is a surveyed position.1
ortb.device.geo.countrystringyesISO 3166-1 alpha-3 country code."KAZ"
ortb.device.extobjectExtension with the OpenOOH 1.2 venue type id; absent when the screen has no venue type.
ortb.device.ext.doohobjectThe dooh extension.
ortb.device.ext.dooh.venuetypeidstringId in the OpenOOH 1.2 taxonomy as a string."304"
updated_atstring (date-time)yesWhen the screen or its sellers last changed."2026-10-14T09:30:00+05:00"

Example

{
  "code": "ALM-0001",
  "unos_id": "UNOS-4711",
  "status": "active",
  "operator": {
    "id": "0b6f9d0e-6c1e-4a6a-9d55-0f8a6a6f3c11",
    "name": "Almaty Outdoor LLP",
    "domain": "almaty-outdoor.example"
  },
  "venue_type": {
    "v12": 304,
    "v11": 301,
    "code": "outdoor.spectacular"
  },
  "lat": 43.238,
  "lng": 76.945,
  "district": "medeu",
  "format": "cityboard",
  "class": "B",
  "outdoor": true,
  "screen": {
    "w": 1920,
    "h": 1080
  },
  "slot_seconds": 10,
  "loop_seconds": 120,
  "compliance": {
    "connected": true
  },
  "authorised_sellers": [
    {
      "seller_id": "5d3f3e0a-2a53-4b3c-8d0a-6f63b4d9a111",
      "seller_account_id": "pub-4711",
      "valid_from": "2026-10-01",
      "valid_until": "2026-12-31",
      "scope": "structure"
    }
  ],
  "ortb": {
    "dooh": {
      "id": "ALM-0001",
      "publisher": {
        "id": "0b6f9d0e-6c1e-4a6a-9d55-0f8a6a6f3c11",
        "name": "Almaty Outdoor LLP",
        "domain": "almaty-outdoor.example"
      },
      "domain": "almaty-outdoor.example",
      "venuetype": [
        "301"
      ],
      "venuetypetax": 5,
      "keywords": "cityboard,outdoor"
    },
    "device": {
      "geo": {
        "lat": 43.238,
        "lon": 76.945,
        "type": 1,
        "country": "KAZ"
      },
      "ext": {
        "dooh": {
          "venuetypeid": "304"
        }
      }
    }
  },
  "updated_at": "2026-10-14T09:30:00+05:00"
}

304 The copy you hold is current.

No body.

Errors

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

StatusMeaning
401No valid session or API key (unauthenticated, session_expired, invalid_api_key).
403The role or the key's scope does not allow this (forbidden, key_scope_denied, key_route_denied).
404Nothing there, or not visible to the caller.
defaultAn error as a problem document.

Code samples

curl

curl 'https://app.tanba-ooh.kz/api/v1/market/inventory/ALM-0001' \
  -H 'Authorization: Bearer YOUR_API_KEY'
Python
import requests

response = requests.get(
    "https://app.tanba-ooh.kz/api/v1/market/inventory/ALM-0001",
    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/market/inventory/ALM-0001", 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))
}