Get a trip template
GET/v1/trip-templates/{templateId}
Returns one trip template in full: its design (the route) and its block forest. Create a trip from it with POST /trips and templateId.
Permissions: catalog:read · Kind: read · Cost: 1 unit · MCP tool get_trip_template
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
templateId |
uuid | yes |
Query parameters
None.
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
object |
"trip_template" | yes | |
id |
uuid | yes | |
title |
string | yes | |
description |
string | yes | |
tags |
string[] | yes | |
coverUrl |
string | null | yes | |
stopCount |
integer | yes | |
updatedAt |
string | yes | |
design |
object | yes | |
design.version |
1 | yes | |
design.originCity |
string | yes | |
design.stops |
object[] | yes | max 60 items |
design.stops[].id |
string | yes | |
design.stops[].city |
string | yes | |
design.stops[].nights |
integer | yes | 0–365 |
design.stops[].transferBefore |
object | null | yes | |
design.stops[].escala |
boolean | default false | |
design.stops[].place |
object | default {"placeId":"","lat":null,"lng":null,"formattedAddress":""} | |
design.returnCity |
string | null | yes | |
design.returnTransfer |
object | null | yes | |
design.returnTransfer.id |
string | yes | |
design.returnTransfer.departDate |
string | null | yes | |
design.returnTransfer.arriveDate |
string | null | yes | |
design.returnTransfer.days |
integer | 0–30, default 0 | |
design.returnTransfer.departTime |
string | default "" | |
design.returnTransfer.arriveTime |
string | default "" | |
design.returnTransfer.flight |
object | default {"flightNo":"","airline":"","fromAirport":"","toAirport":"","source":"","fetchedAt":"","scheduleValidFor":""} | |
design.originPlace |
object | default {"placeId":"","lat":null,"lng":null,"formattedAddress":""} | |
design.originPlace.placeId |
string | default "" | |
design.originPlace.lat |
number | null | default null | |
design.originPlace.lng |
number | null | default null | |
design.originPlace.formattedAddress |
string | default "" | |
design.returnPlace |
object | default {"placeId":"","lat":null,"lng":null,"formattedAddress":""} | |
design.returnPlace.placeId |
string | default "" | |
design.returnPlace.lat |
number | null | default null | |
design.returnPlace.lng |
number | null | default null | |
design.returnPlace.formattedAddress |
string | default "" | |
blocks |
object[] | yes | |
proposals |
object[] | null | yes | The quotes a trip made from it starts with, as drafts; null on a template saved before proposals were kept. |
proposals[].name |
string | yes | |
proposals[].mode |
string | yes | package (one price, upgrade packages) or per_item (the customer picks lines). |
proposals[].marginPct |
number | yes | |
proposals[].lineCount |
integer | yes | |
proposals[].wasAccepted |
boolean | yes | Accepted in the trip the template was saved from. |
travelers |
integer | null | yes | The headcount a trip made from it starts with. |
presentation |
object | null | yes | The branding a trip made from it starts with. |
baseStartDate |
string | null | yes | The start date of the trip it was saved from; a new trip's dates shift relative to it. |
Errors
Errors are problem details. Besides the refusals described above, any call like this one can return:
invalid_request— Invalid requestunauthorized— Missing or invalid API keyinsufficient_scope— Missing permissionrate_limited— Rate limit reachednot_found— Not found