Trekko Hotel API (Partner / Client) (2026-06-12)

Download OpenAPI specification:

URL: https://trekko.co License: LicenseRef-Trekko-Proprietary

B2B partner API for booking accommodation through Trekko using an API key (instead of the interactive web login). Every booking you confirm is attributed to your agency in Trekko's CRM, and prices already include your configured markup (applied at egress on the Trekko side).

This document describes the live contract only (the 6 endpoints shipped in PR #47). The automated rebooking (SBPO) money-flow and webhook design is tracked separately in REBOOKING_FOR_PARTNERS.md and is not part of this live spec yet — we keep the spec equal to what actually runs.

Conventions

  • All requests and responses are application/json.
  • Accept-Language is required on every request (en, es, fr, de, it, or pt); requests without a valid value are rejected.
  • Errors use a stable envelope (error.code is machine-readable and stable; error.message is human-readable and may change). Every response carries X-Request-Id.

Search

Resolve cities, areas, landmarks and accommodations.

List known cities (optional helper)

Returns the platform's known cities to help resolve a city for searching.

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Text search for cities, areas, landmarks and accommodations

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
query Parameters
query
required
string
Example: query=Barcelona

Free-text search term, e.g. Barcelona.

header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Availability

Live bookable rate plans for a stay.

Live availability + bookable rate plans for a stay

Returns bookable rate plans (prices include your markup) for a hotel over a date range. Carry every field you receive (vendor, rate_plan_code, booking_code, price fields, cancellation policy) into checkout and confirm. 204 means no availability for that query.

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Request Body schema: application/json
required
accommodation_id
required
integer
start_date
required
string <date>
end_date
required
string <date>
required
Array of objects (GuestRoom)
nationality
required
string

ISO-3166-1 alpha-2

currency_code
required
string

ISO-4217

Responses

Request samples

Content type
application/json
{
  • "accommodation_id": 1376114,
  • "start_date": "2026-09-01",
  • "end_date": "2026-09-04",
  • "guests": [
    ],
  • "nationality": "ES",
  • "currency_code": "EUR"
}

Response samples

Content type
application/json
{
  • "accommodation_id": 0,
  • "name": "string",
  • "options": [
    ]
}

Bookings

Checkout, confirm, cancel, list and look up bookings.

Lock / re-validate the chosen option's price

Re-validates the selected option and returns an invoice_id to confirm against.

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Request Body schema: application/json
required
accommodation_id
required
integer
vendor
required
string
rate_plan_code
required
string
start_date
required
string <date>
end_date
required
string <date>
required
Array of objects (GuestRoom)
currency_code
required
string

Responses

Request samples

Content type
application/json
{
  • "accommodation_id": 1376114,
  • "vendor": "TRAVELGATE",
  • "rate_plan_code": "RP-ABC-123",
  • "start_date": "2026-09-01",
  • "end_date": "2026-09-04",
  • "guests": [
    ],
  • "currency_code": "EUR"
}

Response samples

Content type
application/json
{
  • "invoice_id": 24881,
  • "booking_code": "string",
  • "nett_price": 0,
  • "minimum_price": 0,
  • "maximum_price": 0,
  • "currency_code": "string"
}

Confirm the booking (attributes it to your agency)

Creates the booking and attributes it to your agency in the CRM. Send a stable idempotency_key in the body and the Idempotency-Key header (same value): a retry/timeout then replays the original response instead of double-booking. The replayed response carries Idempotency-Replayed: true.

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Idempotency-Key
string

Stable unique value (e.g. a UUID) per booking attempt. Remembered for 24h.

Request Body schema: application/json
required
accommodation_id
required
integer
vendor
required
string
booking_code
required
string
invoice_id
required
integer
idempotency_key
required
string

Stable per-attempt UUID; a duplicate submit returns the original booking.

payment_type
required
string
minimum_price
number
maximum_price
number
nett_price
number
base_price
number
base_currency
string
currency_code
required
string
required
Array of objects (GuestInformation)
Array of objects (GuestRoomDistribution)
cancellation_policy
string
Array of objects (CancellationPolicyRule)
board_plan_text
string
Array of objects (RoomDatum)
start_date
required
string <date>
end_date
required
string <date>
agencies_internal_booking_ref
string

Your own reference, surfaced in the Trekko CRM. Use an STK- prefix.

Responses

Request samples

Content type
application/json
{
  • "accommodation_id": 0,
  • "vendor": "string",
  • "booking_code": "string",
  • "invoice_id": 0,
  • "idempotency_key": "string",
  • "payment_type": "credit",
  • "minimum_price": 0,
  • "maximum_price": 0,
  • "nett_price": 0,
  • "base_price": 0,
  • "base_currency": "string",
  • "currency_code": "string",
  • "guests_information": [
    ],
  • "guests_room_distribution": [
    ],
  • "cancellation_policy": "string",
  • "cancellation_policy_rules": [
    ],
  • "board_plan_text": "string",
  • "rooms_data": [
    ],
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "agencies_internal_booking_ref": "string"
}

Response samples

Content type
application/json
{
  • "booking_number": "TRK-AB12CD34",
  • "is_confirmed": true,
  • "is_cancelled": true,
  • "total_price": 0,
  • "currency_code": "string"
}

Cancel a booking

Cancels a booking, subject to the rate's cancellation policy / fees.

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Request Body schema: application/json
required
booking_number
required
string

Responses

Request samples

Content type
application/json
{
  • "booking_number": "TRK-AB12CD34"
}

Response samples

Content type
application/json
{
  • "message": "string"
}

List your agency's bookings (paginated)

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Request Body schema: application/json
required
page_no
integer >= 1
Default: 1
items_per_page
integer [ 1 .. 100 ]
Default: 20

Responses

Request samples

Content type
application/json
{
  • "page_no": 1,
  • "items_per_page": 20
}

Response samples

Content type
application/json
{
  • "current_page": 0,
  • "total_pages": 0,
  • "no_of_items": 0,
  • "data": [
    ]
}

Resolve a stable booking_id (or booking_number) to its current state

Returns the CURRENT active booking for a stable booking_id (which survives SBPO rebooking) or an integer booking_number, including a rebooking block when the booking was rebooked to a cheaper rate. The partner stores booking_id and uses this to map it to the live booking_number (e.g. before cancelling). See REBOOKING_FOR_PARTNERS.md.

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Request Body schema: application/json
required
booking_id
string
booking_number
integer

Responses

Request samples

Content type
application/json
{
  • "booking_id": "TRK-AB12CD34"
}

Response samples

Content type
application/json
{
  • "booking_id": "TRK-AB12CD34",
  • "booking_number": 1045,
  • "accommodation_name": "string",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "is_confirmed": true,
  • "is_cancelled": true,
  • "total_price": 0,
  • "currency_code": "string",
  • "agencies_internal_booking_ref": "string",
  • "rebooking": {
    }
}

Account

Partner balance and rebooking-savings ledger.

Partner account balance (virtual wallet or credit balance)

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Responses

Response samples

Content type
application/json
{
  • "currency_code": "EUR",
  • "funding_type": "prepaid",
  • "virtual_wallet": 0,
  • "credit_balance": 0,
  • "credit_limit": 0
}

Rebooking savings ledger (paginated, + lifetime totals)

One row per SBPO rebooking — the "we saved you €X after booking" data.

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Request Body schema: application/json
optional
page_no
integer
Default: 1
items_per_page
integer
Default: 20

Responses

Request samples

Content type
application/json
{
  • "page_no": 1,
  • "items_per_page": 20
}

Response samples

Content type
application/json
{
  • "current_page": 0,
  • "total_pages": 0,
  • "total_partner_savings": 0,
  • "total_trekko_fee": 0,
  • "currency_code": "string",
  • "data": [
    ]
}

Webhooks

Register signed outbound webhooks (e.g. booking.rebooked).

Register an outbound webhook endpoint (returns the signing secret once)

Register an HTTPS URL to receive signed events (e.g. booking.rebooked). The signing_secret is returned ONCE. Each delivery carries a Trekko-Signature: t=<unix>,v1=<hex> header where v1 = HMAC_SHA256(secret, "<t>.<raw_body>"). URLs resolving to private/loopback/metadata addresses are rejected.

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Request Body schema: application/json
required
url
required
string <uri>
events
string

Comma-separated event types, or '*'.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "id": 0,
  • "url": "string",
  • "events": "string",
  • "signing_secret": "whsec_..."
}

List your webhook endpoints (never returns the secret)

Authorizations:
ApiKeyAuthorization(ApiKeyIdApiKeySecret)
header Parameters
Accept-Language
required
string
Default: en
Enum: "en" "es" "fr" "de" "it" "pt"

Response language. One of en, es, fr, de, it, pt.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}