API для партнёров
Небольшой JSON API для гостиничных программ, channel manager и сайтов партнёров: получайте свои номера и машины, указывайте свободные единицы и закрывайте продажи, получайте бронирования, сделанные на Astoria Travel. Цены управляются в панели партнёра.
Авторизация
Передавайте API-ключ в каждом запросе. Вы получаете его на почту после одобрения и можете создать новый в панели партнёра. До 120 запросов в минуту.
curl https://astoriatravel.az/api/partner/v1/ping \ -H "Authorization: Bearer atp_your_key"
Endpoints
https://astoriatravel.az/api/partner/v1
GET /listings
{
"listings": [
{ "listing": "room:12", "type": "room", "id": 12, "hotel_id": 7, "name": "Hotel Baku — Standard Double", "units": 5, "active": true },
{ "listing": "car:5", "type": "car", "id": 5, "airport": "GYD", "name": "Toyota Camry (GYD)", "units": 1, "active": true }
]
}
POST /availability
curl -X POST https://astoriatravel.az/api/partner/v1/availability \
-H "Authorization: Bearer atp_your_key" \
-H "Content-Type: application/json" \
-d '{"items":[{"listing":"room:12","from":"2026-11-01","to":"2026-11-05","available":3}]}'
{
"items": [
{ "listing": "room:12", "from": "2026-11-01", "to": "2026-11-05", "available": 3 },
{ "listing": "room:12", "from": "2026-12-30", "to": "2027-01-02", "closed": true },
{ "listing": "car:5", "from": "2026-11-10", "to": "2026-11-10", "available": 0 }
]
}
События вебхука
booking.created, booking.updated (оплата или смена статуса), booking.cancelled и ping. Каждое событие — POST с телом JSON такого вида:
{
"event": "booking.created",
"sent_at": "2026-11-01T10:15:00+04:00",
"booking": {
"booking_ref": "20261101101500",
"module": "hotels",
"listing": "room:12",
"date_from": "2026-11-20",
"date_to": "2026-11-23",
"units": 1,
"status": "pending",
"payment_status": "unpaid",
"adults": 2,
"children": 0,
"guest": { "name": "Ivan Petrov", "email": "ivan@example.com", "phone": "+7 900 000 00 00", "special_requests": "" },
"price": "540.00",
"currency": "RUB",
"created_at": "2026-11-01 10:15:00"
}
}
curl -X POST https://astoriatravel.az/api/partner/v1/webhook \
-H "Authorization: Bearer atp_your_key" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/astoria-webhook"}'
Проверка подписи
Заголовок X-Astoria-Signature — это "sha256=" и HMAC-SHA256 исходного тела с секретом вебхука. Ответьте любым статусом 2xx; остальные ответы записываются в журнал.
PHP
$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, $webhookSecret);
if (! hash_equals($expected, $_SERVER['HTTP_X_ASTORIA_SIGNATURE'] ?? '')) {
http_response_code(401);
exit;
}
$event = json_decode($body, true); // $event['event'], $event['booking']
http_response_code(200);
Node.js
const crypto = require('crypto');
// rawBody: the request body exactly as received (Buffer or string)
const expected = 'sha256=' + crypto.createHmac('sha256', webhookSecret).update(rawBody).digest('hex');
const valid = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-astoria-signature'] || ''));
Календари (iCal)
Без API: вставьте в панели партнёра ссылку на свой календарь для каждого типа номера или машины (читается каждые 15 минут) и добавьте нашу ссылку на календарь из панели в свою систему.
Ошибки
Ошибки приходят со статусом 4xx и телом {"error": "код", "message": "текст"}. 401 — нет ключа или он неверный, 404 — не ваш объект, 422 — неверные данные, 429 — слишком много запросов.
Плагин WordPress
Astoria Travel Connect делает всё это из админки WordPress: свободные единицы, наши бронирования с уведомлениями на почту и хук do_action("astoria_travel_booking") для разработчиков.
Astoria Travel Connect (.zip)