GET /api/v1/properties
List properties available to the service account
Scope: properties:read
Документация открыта публично. Данные объектов остаются приватными: API возвращает только разрешённые сведения после authentication и проверки scope.
API и MCP позволяют читать сведения об объектах размещения и сетях, услугах, номерах, фотографиях, опубликованных материалах и доступности продуктов.
Это private_beta с публичной документацией docs_preview, а не Stable API. До Stable contract может изменяться; authoritative source для конкретной ревизии — опубликованный OpenAPI. Stable compatibility SLA пока не объявлен.
Операции доступны в /api/v1. Список ниже получен из опубликованного OpenAPI; права на объект или сеть проверяются при каждом запросе.
GET /api/v1/properties
List properties available to the service account
Scope: properties:read
GET /api/v1/properties/{propertyId}
Get one available property
Scope: properties:read
GET /api/v1/hospitality/networks
listHospitalityNetworks
Scope: hospitality:read
GET /api/v1/hospitality/networks/{networkId}/properties
listHospitalityNetworkProperties
Scope: hospitality:read
GET /api/v1/hospitality/subjects/{subjectType}/{subjectId}/context
getHospitalityContext
Scope: hospitality:read
GET /api/v1/hospitality/properties/{propertyId}/room-types
listHospitalityRoomTypes
Scope: hospitality:read
GET /api/v1/hospitality/properties/{propertyId}/rooms/{roomId}/media
listHospitalityRoomMedia
Scope: hospitality:read
GET /api/v1/hospitality/subjects/{subjectType}/{subjectId}/products
getHospitalityProductStatus
Scope: hospitality:read
GET /api/v1/hospitality/subjects/{subjectType}/{subjectId}/materials
listHospitalityPublishedMaterials
Scope: hospitality:read
GET /api/v1/hospitality/help
listHospitalityHelp
Scope: hospitality:read
GET /api/v1/hospitality/help/{helpKey}
getHospitalityHelp
Scope: hospitality:read
GET /api/v1/hospitality/properties/{propertyId}/rooms/{roomId}/media/{collectionId}/{variantId}
getHospitalityRoomImage
Scope: hospitality:read
Владелец выбирает конкретный объект или сеть и срок API-ключа. Набор properties:read и hospitality:read разрешает только чтение. Существующие ключи не получают новые права автоматически. Ключ сети читает собственные сведения и публикации сети. Для чтения объекта создайте отдельный ключ этого объекта.
Bearer token показывается один раз. Храните его только на сервере или в secret storage; не помещайте в browser code, репозиторий, логи или публичные примеры. В кабинете видны последнее использование, срок действия, смена секрета и немедленный отзыв.
/api/v1 — версия HTTP contract TEEG. OpenAPI 3.2.0 — версия языка, которым этот contract описан. Обновление OpenAPI не меняет API version автоматически.
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();
Сохраните 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}"
pageper_page
Успешный 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, а не превращается в ноль или обещанную услугу.
Ошибка возвращает machine-readable code, безопасное message и request ID для диагностики.
| 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. |
Основной лимит применяется к service account. Дополнительно ingress защищён общим ceiling 600 запросов в минуту на IP до authentication; это важно для нескольких integrations за одним NAT. При 429 учитывайте Retry-After и используйте bounded exponential backoff.