TEEG Developer Platform

Developer Preview

Документация открыта публично. Данные объектов остаются приватными: API возвращает только разрешённые сведения после authentication и проверки scope.

API и MCP позволяют читать сведения об объектах размещения и сетях, услугах, номерах, фотографиях, опубликованных материалах и доступности продуктов.

Это private_beta с публичной документацией docs_preview, а не Stable API. До Stable contract может изменяться; authoritative source для конкретной ревизии — опубликованный OpenAPI. Stable compatibility SLA пока не объявлен.

Read API v1

Операции

Операции доступны в /api/v1. Список ниже получен из опубликованного OpenAPI; права на объект или сеть проверяются при каждом запросе.

GET
GET /api/v1/properties

List properties available to the service account

Scope: properties:read

GET
GET /api/v1/properties/{propertyId}

Get one available property

Scope: properties:read

GET
GET /api/v1/hospitality/networks

listHospitalityNetworks

Scope: hospitality:read

GET
GET /api/v1/hospitality/networks/{networkId}/properties

listHospitalityNetworkProperties

Scope: hospitality:read

GET
GET /api/v1/hospitality/subjects/{subjectType}/{subjectId}/context

getHospitalityContext

Scope: hospitality:read

GET
GET /api/v1/hospitality/properties/{propertyId}/room-types

listHospitalityRoomTypes

Scope: hospitality:read

GET
GET /api/v1/hospitality/properties/{propertyId}/rooms/{roomId}/media

listHospitalityRoomMedia

Scope: hospitality:read

GET
GET /api/v1/hospitality/subjects/{subjectType}/{subjectId}/products

getHospitalityProductStatus

Scope: hospitality:read

GET
GET /api/v1/hospitality/subjects/{subjectType}/{subjectId}/materials

listHospitalityPublishedMaterials

Scope: hospitality:read

GET
GET /api/v1/hospitality/help

listHospitalityHelp

Scope: hospitality:read

GET
GET /api/v1/hospitality/help/{helpKey}

getHospitalityHelp

Scope: hospitality:read

GET
GET /api/v1/hospitality/properties/{propertyId}/rooms/{roomId}/media/{collectionId}/{variantId}

getHospitalityRoomImage

Scope: hospitality:read

Access

Доступ из кабинета

Владелец выбирает конкретный объект или сеть и срок API-ключа. Набор properties:read и hospitality:read разрешает только чтение. Существующие ключи не получают новые права автоматически. Ключ сети читает собственные сведения и публикации сети. Для чтения объекта создайте отдельный ключ этого объекта.

Bearer token показывается один раз. Храните его только на сервере или в secret storage; не помещайте в browser code, репозиторий, логи или публичные примеры. В кабинете видны последнее использование, срок действия, смена секрета и немедленный отзыв.

Versioning

Две независимые версии

/api/v1 — версия HTTP contract TEEG. OpenAPI 3.2.0 — версия языка, которым этот contract описан. Обновление OpenAPI не меняет API version автоматически.

MCP

Те же данные для AI-клиента

Streamable HTTP endpoint: https://teeg.app/mcp. Клиент должен уметь передать вручную выданный Bearer token. OAuth discovery и экран согласия не реализованы; подключение, требующее OAuth, пока не поддерживается.

Поддерживаются protocol revisions 2025-11-25 с initialize и 2026-07-28 без protocol session. Используйте официальный SDK клиента, который формирует обязательные headers и metadata.

Tools читают те же DTO и проверяют те же права, что REST. Resources: teeg://help, teeg://help/{help_key}, teeg://property/{subject_id}/context/{data_view} и teeg://network/{subject_id}/context/{data_view}. Контекстный resource возвращает первую страницу; остальные доступны через tool get_hospitality_context с page и per_page.

Фото номера выдаётся по URL из list_room_media с тем же Bearer token. Публикации, платежей, ответов гостям и изменения прав через MCP нет. Ответы могут содержать пользовательский текст: считайте его данными, а не инструкциями.

import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
const client = new Client({ name: 'my-integration', version: '1.0.0' });
await client.connect(new StreamableHTTPClientTransport(new URL('https://teeg.app/mcp'), {
  requestInit: { headers: { Authorization: `Bearer ${process.env.TEEG_API_TOKEN}` } }
}));
const help = await client.readResource({ uri: 'teeg://help' });
await client.close();

Request

Безопасный первый запрос

Сохраните token в environment variable TEEG_API_TOKEN. Команда ниже не содержит реального credential.

curl --request GET \
  'https://teeg.app/api/v1/properties?page=1&per_page=25' \
  --header 'Accept: application/json' \
  --header "Authorization: Bearer ${TEEG_API_TOKEN}"

Pagination

Страницы и размер ответа

page
Целое число от 1; default — 1.
per_page
От 1 до 100; default — 25.

Response envelope

Предсказуемая форма

Успешный response содержит data и meta. В meta всегда доступны schema_version и request_id; list также возвращает page, per_page, total и last_page.

{
  "data": [],
  "meta": {
    "schema_version": "teeg-api.v1",
    "request_id": "req_example",
    "page": 1,
    "per_page": 25,
    "total": 0,
    "last_page": 1
  }
}

Базовая карточка объекта возвращает data.id и data.name. Схемы остальных ответов описаны в OpenAPI. data_view=current читает текущие сведения, published — опубликованные; настройки, которые ещё не опубликованы, в этот снимок не попадают. Неизвестное значение остаётся null, а не превращается в ноль или обещанную услугу.

Errors

Единая диагностика

Ошибка возвращает machine-readable code, безопасное message и request ID для диагностики.

Ошибки Developer Preview
HTTP Что означает Что делать
401 Token отсутствует, истёк или отозван. Проверьте Bearer credential.
403 У service account нет scope properties:read. Запросите credential с нужным scope.
404 Объект не существует, относится к другому Workspace или не выдан service account через property grant. Проверьте public ID, Workspace и grants.
405 HTTP method не поддерживается ресурсом. Используйте GET и проверьте header Allow.
429 Превышен rate limit. Повторите запрос после интервала из Retry-After.
500 Запрос не удалось завершить из-за внутренней ошибки. Передайте TEEG request_id; не отправляйте token или sensitive payload.

Limits

120 запросов в минуту

Основной лимит применяется к service account. Дополнительно ingress защищён общим ceiling 600 запросов в минуту на IP до authentication; это важно для нескольких integrations за одним NAT. При 429 учитывайте Retry-After и используйте bounded exponential backoff.

Сейчас не входит

Явные non-goals Preview

  • Property Profile и provider/source metadata.
  • Writes, reservations, webhooks и partner-specific profiles.
  • Sandbox, SDK и browser API explorer.
  • Cross-origin browser access: CORS для Preview не открывается.