How Can I Use the Itinerary API (V7) to Fetch Itinerary Data?
The Wetu Itinerary API allows you to load, create, update, and delete itineraries programmatically. It supports both SOAP/XML and JSON REST formats, and is designed to work alongside the Wetu Content API.
Audience: This article is intended for software developers integrating with the Wetu Itinerary API. Familiarity with web services is assumed. We recommend exploring the Wetu Itinerary Builder, Digital Itinerary, and Printable Itinerary before starting, as these provide context for the underlying data model.
Quick Links
- Overview & Endpoints
- SOAP / XML Functions
- JSON Functions
- XML Examples
- Data Models
- Enumerations
- Need Help?
Overview & Endpoints
The Itinerary API is available via two formats. Both are served over HTTPS.
SOAP / XML Web Service
SOAP https://wetu.com/Map/ItineraryServiceV7.asmx
JSON REST Service
Individual endpoints are listed under each JSON function below. All accept parameters via querystring or POST variables.
Property naming: SOAP/XML uses CamelCase. JSON uses snake_case (e.g. ItineraryId → itinerary_id). The JSON API is read-only.
SOAP / XML Functions
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
identifier required |
string |
UUID-style unique identifier of the itinerary |
sessionToken optional |
string |
Session token identifying the requesting user |
Itinerary
LoadItineraries
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
|
|
int |
Limits the number of results returned per page |
pageStartrequired |
int |
Starting page for results (0-based) |
typeFilterrequired |
ItinerarySearchFilterEnum |
Filters by itinerary type - see values below |
ownItinerariesOnlyrequired |
bool |
If true, limits results to itineraries built by the authenticated consultant only |
searchTextoptional |
string |
Filters by name, client name, or reference number |
sortrequired |
BrowseableItinerarySortOrderEnum |
Sort order for results - see values below |
sessionTokenrequired |
string |
Session token identifying the requesting user |
Personal; Sample; AllItineraries; DayComponent; Component; AllComponents; DayTours; PublishedDayTours; MultiDayTours; Allarray of BrowseableItineraryPageLoadDayTours
Returns a list of day tours - including your private day tours and publicly available day tours from other providers.
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
searchTextoptional |
string |
Filters by name or reference number |
sortrequired |
SupplierItinerarySortOrderEnum |
Sort order - ItineraryNameAsc/Desc, ReferenceNoAsc/Desc, DaysAsc/Desc, LastModifiedAsc/Desc |
sessionTokenrequired |
string |
Session token identifying the requesting user |
Returnsarray of SupplierItineraryPage
AuthenticateAndSaveItinerary
Saves a new itinerary or updates an existing one. Single-call alternative to calling AuthenticateUser + SaveItinerary in succession.
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
itinerary required |
Itinerary |
The complete itinerary object to save or update |
username required |
string |
Wetu account username |
password required |
string |
Wetu account password |
ReturnsItinerarySummary
SaveItinerary
Saves a new itinerary or updates an existing one using a session token. See also AuthenticateAndSaveItinerary.
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
itinerary required |
Itinerary |
The complete itinerary object to save or update |
sessionToken required |
string |
Session token identifying the requesting user |
ReturnsItinerarySummary
AuthenticateUser
Authenticates a user with their username and password, returning a session token for subsequent calls.
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
username required |
string |
Wetu account username |
password required |
string |
Wetu account password |
ReturnsSession
DeleteItineraries
Deletes one or more previously created itineraries. Failure is signalled via an HTTP error status code.
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
identifiers required |
array of string |
Set of itinerary identifiers (UUIDs) to delete |
sessionToken required |
string |
Session token identifying the requesting user |
Returnsnone
LoadBranding
Loads the branding for an itinerary. Used for display or generating external documents.
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
identifier required |
string |
UUID-style unique identifier of the itinerary |
ReturnsItineraryBranding
LoadDefaultBranding
Loads the default branding for an itinerary (used when the itinerary is branded as an agent or identity).
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
identifier required |
string |
UUID-style unique identifier of the itinerary |
ReturnsItineraryBranding
GenerateMapViewForItinerary
Returns a URL to a representative map image of the itinerary. Use for generating external documents.
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
identifier required |
string |
UUID-style unique identifier of the itinerary |
width required |
int |
CSS pixel width of the desired image (max 640) |
height required |
int |
CSS pixel height of the desired image (max 640) |
scale required |
int |
Scale multiplier: 1 or 2. Using 2 returns double resolution (max 1280×1280) |
mode required |
string |
Controls which travel is shown on the map — see values below |
Mode Valuesat — All travel including international flights eiof
— Excludes inbound/outbound flights (incl. long-haul) eadt
— Excludes long-haul/overnight flights eiot
— Excludes inbound/outbound travel (default)
Returnsstring (URL)
Search
Simple search of Wetu content. Useful for mapping between databases. For bulk mapping, use the Wetu Content API instead.
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
name required |
string |
Name to search for |
type optional |
string |
Type hint to bias results (most common: Accommodation) |
sessionToken required |
string |
Session token identifying the requesting user |
Returnsarray of SearchPin
JSON Functions
Note: The JSON API is read-only. To create or update itineraries, use the SOAP/XML API.
LoadItinerary - Load a single itinerary
Returns a single itinerary for integration into a webpage or back-office system.
GET https://wetu.com/API/Itinerary/V7/Get?id=<IDENTIFIER>
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
id required |
string |
Identifier of the requested itinerary or day tour |
Load Supporting Content - Loads all supporting content for an itinerary
Returns all supporting content for an itinerary, including Day Tours and Content Entities (pins).
GET https://wetu.com/API/Itinerary/V7/GetContent?id=<IDENTIFIER>&appKey=<APPKEY>
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
id required |
string |
Identifier of the requested itinerary or day tour |
appKey required |
string |
Your application identifier (available from Wetu on request) |
Returns
{ "day_tours": [], "pins": [] }
See the Wetu Content API documentation for details on the structure of the pins collection.
Branding — Load itinerary branding
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
id required |
string |
Identifier of the requested itinerary or day tour |
DefaultBranding — Load default branding
Loads default branding for an itinerary (used when branded as an agent or identity).
GET https://wetu.com/API/Itinerary/V7/DefaultBranding?id=<IDENTIFIER>
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
id required |
string |
Identifier of the requested itinerary or day tour |
List — List available itineraries
GET https://wetu.com/API/Itinerary/V7/List?username=<USERNAME>&password=<PASSWORD>
GET https://wetu.com/API/Itinerary/<APIKEY>/V7/List
GET https://wetu.com/API/Itinerary/V7/List?appkey=<APPKEY>
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
search optional |
string |
Text to filter results on |
type optional |
string |
Filter by itinerary type. Default: AllItineraries. Options: Personal, Sample, All, DayComponent, Component, AllComponents, AllItineraries |
own optional |
bool |
If true, returns only itineraries from the authenticated user. Default: false |
sort optional |
string |
Sort order. Default: LastModifiedDesc. Options: ClientNameAsc/Desc, ItineraryNameAsc/Desc, ReferenceNoAsc/Desc, StartDateAsc/Desc, LastModifiedAsc/Desc |
start optional |
int |
Numeric offset to begin listing from. Default: 0 |
results optional |
int |
Maximum number of results to return. Default: 100 |
tags optional |
string |
Comma-separated list of tag filters. Filters are inclusive (itinerary must match all tags). Tags are client-specific. |
operatorid optional |
int |
App key integrations only. Filters results to a specific operator. |
Returnsarray of BrowseableItineraryPage
MapView — Generate a map image URL
Returns a URL to a representative map image for the itinerary.
GET https://wetu.com/API/Itinerary/V7/MapView?id=<IDENTIFIER>&width=<WIDTH>&height=<HEIGHT>&scale=<SCALE>&mode=<MODE>
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
width required |
int |
CSS pixel width (max 640) |
height required |
int |
CSS pixel height (max 640) |
scale required |
int |
1 or 2. Using 2 returns double resolution (max 1280×1280) |
mode required |
string |
at / eiof / eadt / eiot (default) - controls which travel is shown on the map |
XML Examples
Example 1 — One accommodation
A minimal itinerary: one night at a property, followed by a departure leg.
<?xml version="1.0"?>
<itinerary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Type>Personal</Type>
<Identifier>27BCEA41-DA52-493E-92A6-7B2E9A25EE35</Identifier>
<Days>2</Days>
<n>Minimal Example</n>
<Summary>1 night at Ellerman House, departure</Summary>
<StartDate>2016-01-01T00:00:00</StartDate>
<Legs>
<ItineraryLeg xsi:type="ItineraryLegByDay">
<ItineraryLegId>1</ItineraryLegId>
<Sequence>0</Sequence>
<ContentEntityId>3733</ContentEntityId>
<Nights>1</Nights>
<Type>Standard</Type>
<Days>
<ItineraryLegDay>
<Day>0</Day>
<RoomBasis>BedAndBreakfast</RoomBasis>
<DrinksBasis>None</DrinksBasis>
</ItineraryLegDay>
</Days>
</ItineraryLeg>
<ItineraryLeg xsi:type="ItineraryLegByDay">
<ItineraryLegId>2</ItineraryLegId>
<Sequence>1</Sequence>
<ContentEntityId>0</ContentEntityId>
<Nights>0</Nights>
<Type>Departure</Type>
<Days>
<ItineraryLegDay>
<Day>0</Day>
<RoomBasis>BedAndBreakfast</RoomBasis>
<DrinksBasis>None</DrinksBasis>
</ItineraryLegDay>
</Days>
</ItineraryLeg>
</Legs>
</itinerary>
Example 2 — Two accommodations with transfer
Two-night itinerary with a transfer route between properties.
<?xml version="1.0"?>
<itinerary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Type>Personal</Type>
<Identifier>5A00FFF2-4F56-41A1-AC6F-C902917729ED</Identifier>
<Days>3</Days>
<n>Two Accommodation Example</n>
<Summary>1 night Ellerman House, 1 night Cape Grace, departure</Summary>
<StartDate>2016-01-01T00:00:00</StartDate>
<Legs>
<ItineraryLeg xsi:type="ItineraryLegByDay">
<ItineraryLegId>1</ItineraryLegId>
<Sequence>0</Sequence>
<ContentEntityId>3733</ContentEntityId>
<Nights>1</Nights>
<Type>Standard</Type>
<Days>
<ItineraryLegDay>
<Day>0</Day>
<RoomBasis>BedAndBreakfast</RoomBasis>
<DrinksBasis>None</DrinksBasis>
</ItineraryLegDay>
</Days>
</ItineraryLeg>
<ItineraryLeg xsi:type="ItineraryLegByDay">
<ItineraryLegId>2</ItineraryLegId>
<Sequence>1</Sequence>
<ContentEntityId>1158</ContentEntityId>
<Nights>1</Nights>
<Type>Standard</Type>
<Days>
<ItineraryLegDay>
<Day>0</Day>
<RoomBasis>BedAndBreakfast</RoomBasis>
<DrinksBasis>None</DrinksBasis>
</ItineraryLegDay>
</Days>
</ItineraryLeg>
<ItineraryLeg xsi:type="ItineraryLegByDay">
<ItineraryLegId>3</ItineraryLegId>
<Sequence>2</Sequence>
<ContentEntityId>0</ContentEntityId>
<Nights>0</Nights>
<Type>Departure</Type>
<Days>
<ItineraryLegDay>
<Day>0</Day>
<RoomBasis>BedAndBreakfast</RoomBasis>
<DrinksBasis>None</DrinksBasis>
</ItineraryLegDay>
</Days>
</ItineraryLeg>
</Legs>
<Routes>
<ItineraryRoute>
<Mode>Transfer</Mode>
<StartLegId>1</StartLegId>
<EndLegId>2</EndLegId>
<StartContentEntityId>3733</StartContentEntityId>
<EndContentEntityId>1158</EndContentEntityId>
<Sequence>0</Sequence>
<Type>InterLeg</Type>
</ItineraryRoute>
</Routes>
</itinerary>
Example 3 — Extended: one accommodation, 3 nights, with activities
Three nights at a property with included and recommended daily activities.
<?xml version="1.0"?>
<itinerary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Type>Personal</Type>
<Identifier>3B289D89-945F-4328-A7A4-D345E780BD0F</Identifier>
<Days>4</Days>
<Name>Minimal Example Three</Name>
<Summary>A description of this itinerary: extended example - 3 nights at Ellerman House with activities, departure</Summary>
<StartDate>2016-01-01T00:00:00</StartDate>
<Legs>
<ItineraryLeg xsi:type="ItineraryLegByDay">
<ItineraryLegId>1</ItineraryLegId>
<Sequence>0</Sequence>
<ContentEntityId>3733</ContentEntityId>
<Nights>3</Nights>
<Type>Standard</Type>
<Days>
<ItineraryLegDay>
<Day>0</Day>
<RoomBasis>BedAndBreakfast</RoomBasis>
<DrinksBasis>None</DrinksBasis>
<Notes>Today, you enjoy a ride up the cableway to the top of the world famous Table Mountain. In the afternoon, relax and explore the Kirstenbosch Botanical Gardens.</Notes>
<Activities>
<ItineraryLegDayActivity>
<Sequence>0</Sequence>
<Name>Table Mountain Cableway</Name>
<Type>Included</Type>
<ContentEntityId>231</ContentEntityId>
<TimeSlot>None</TimeSlot>
</ItineraryLegDayActivity>
<ItineraryLegDayActivity>
<Sequence>1</Sequence>
<Name>Table Mountain Cableway</Name>
<Type>Included</Type>
<ContentEntityId>728</ContentEntityId>
<TimeSlot>None</TimeSlot>
</ItineraryLegDayActivity>
</Activities>
</ItineraryLegDay>
<ItineraryLegDay>
<Day>0</Day>
<RoomBasis>BedAndBreakfast</RoomBasis>
<DrinksBasis>None</DrinksBasis>
<Notes>Head out the Cape Winelands and enjoy a tasting at Spier Wine Estate, followed by lunch at "The Goatshed" and another wine tasting at Fairview.</Notes>
<ConsultantNotes>You mentioned being an avid wine lover, so we've organised this excursion for you.</ConsultantNotes>
<Activities>
<ItineraryLegDayActivity>
<Sequence>0</Sequence>
<Name>Wine Tasting at Spier</Name>
<Type>Included</Type>
<ContentEntityId>245</ContentEntityId>
<TimeSlot>Morning</TimeSlot>
</ItineraryLegDayActivity>
<ItineraryLegDayActivity>
<Sequence>1</Sequence>
<Name>The Goatshed</Name>
<Type>Included</Type>
<ContentEntityId>1284</ContentEntityId>
<TimeSlot>Lunch</TimeSlot>
</ItineraryLegDayActivity>
<ItineraryLegDayActivity>
<Sequence>2</Sequence>
<Name>Wine Tasting at Fairview</Name>
<Type>Included</Type>
<ContentEntityId>1282</ContentEntityId>
<TimeSlot>Afternoon</TimeSlot>
</ItineraryLegDayActivity>
</Activities>
</ItineraryLegDay>
<ItineraryLegDay>
<Day>0</Day>
<RoomBasis>BedAndBreakfast</RoomBasis>
<DrinksBasis>None</DrinksBasis>
<Notes>Spend today exploring Cape Town at your leisure. We've suggested a few ideas.</Notes>
<Activities>
<ItineraryLegDayActivity>
<Sequence>0</Sequence>
<Name>Robben Island Ferry</Name>
<Type>Recommended</Type>
<ContentEntityId>144</ContentEntityId>
<TimeSlot>None</TimeSlot>
</ItineraryLegDayActivity>
<ItineraryLegDayActivity>
<Sequence>1</Sequence>
<Name>Robben Island</Name>
<Type>Recommended</Type>
<ContentEntityId>45</ContentEntityId>
<TimeSlot>None</TimeSlot>
</ItineraryLegDayActivity>
<ItineraryLegDayActivity>
<Sequence>2</Sequence>
<Name>Two Oceans Aquarium</Name>
<Type>Recommended</Type>
<ContentEntityId>145</ContentEntityId>
<TimeSlot>None</TimeSlot>
</ItineraryLegDayActivity>
<ItineraryLegDayActivity>
<Sequence>3</Sequence>
<Name>V&A Waterfront</Name>
<Type>Recommended</Type>
<ContentEntityId>140</ContentEntityId>
<TimeSlot>None</TimeSlot>
</ItineraryLegDayActivity>
<ItineraryLegDayActivity>
<Sequence>4</Sequence>
<Name>Simonstown</Name>
<Type>Recommended</Type>
<ContentEntityId>77</ContentEntityId>
<TimeSlot>None</TimeSlot>
</ItineraryLegDayActivity>
<ItineraryLegDayActivity>
<Sequence>5</Sequence>
<Name>Cape Point Nature Reserve</Name>
<Type>Recommended</Type>
<ContentEntityId>72</ContentEntityId>
<TimeSlot>None</TimeSlot>
</ItineraryLegDayActivity>
</Activities>
</ItineraryLegDay>
</Days>
</ItineraryLeg>
<ItineraryLeg xsi:type="ItineraryLegByDay">
<ItineraryLegId>2</ItineraryLegId>
<Sequence>1</Sequence>
<ContentEntityId>0</ContentEntityId>
<Nights>0</Nights>
<Type>Departure</Type>
<Days>
<ItineraryLegDay>
<Day>0</Day>
<RoomBasis>BedAndBreakfast</RoomBasis>
<DrinksBasis>None</DrinksBasis>
<Notes>Unfortunately, today is your last day.</Notes>
</ItineraryLegDay>
</Days>
</ItineraryLeg>
</Legs>
</itinerary>
Data Models
The following objects are returned by or accepted by the API functions above.
BrowseableItineraryPage
| PROPERTY | TYPE | DESCRIPTION |
|---|---|---|
Itineraries |
array of BrowseableItinerary |
The itineraries in this page |
TotalResults |
int |
Total number of results available (used for paging) |
BrowseableItinerary
| PROPERTY | TYPE | DESCRIPTION |
|---|---|---|
Type |
ItineraryTypeEnum |
Type of itinerary |
Identifier |
string |
Unique GUID for this itinerary |
IdentifierKey |
string |
Shorter 6-character key for loading via the mobile app |
Days |
int |
Duration of the itinerary in days |
Name |
string |
Name of the itinerary |
ReferenceNumber |
string |
Operator's reference number for this itinerary/booking |
ClientName |
string |
Name of the client |
ClientEmail |
string |
Email address of the client |
StartDate |
datetime |
Start date of the itinerary; null for Sample, Components, Day Tours |
LastModified |
datetime |
UTC timestamp of last modification |
AccessCount |
int |
Total number of views (web and mobile) |
IsDisabled |
bool |
If true, prevents viewing on web and mobile |
Categories |
array of string |
Identifying tags/categories for the itinerary |
LastViewed |
datetime |
UTC timestamp of last viewing |
BookingStatus |
BookingStatusEnum |
Current booking status |
ItinerarySummary
| PROPERTY | TYPE | DESCRIPTION |
|---|---|---|
Name |
string |
Name of the itinerary |
Identifier |
string |
Unique UUID for this itinerary |
IdentifierKey |
string |
Shorter 6-character key (Personal itineraries with dates only) |
Session
| PROPERTY | TYPE | DESCRIPTION |
|---|---|---|
ExpiryDate |
datetime |
Session expiry date - token not accepted after this date |
OperatorId |
int |
ID of the authenticated operator |
OperatorUserId |
int |
ID of the authenticated user |
OperatorName |
string |
Name of the authenticated operator |
Username |
string |
Username of the authenticated user |
SessionStatuses |
array of SessionStatus |
Status flags for this session |
Token |
string |
Session token used by other API functions |
ItineraryBranding
| PROPERTY | TYPE | DESCRIPTION |
|---|---|---|
Name |
string |
Company name |
LogoUrl |
string |
Full path to the company logo |
LogoUrlFragment |
string |
Partial URL to logo - use with the Wetu Image Scaler |
Website |
string |
Company website URL |
Email |
string |
Company contact email |
Phone |
string |
Company contact phone number |
Facebook |
string |
Company Facebook URL |
TwitterAccount |
string |
Company Twitter handle |
Description |
string |
Company description |
ConsultantName |
string |
Consultant name (if available) |
ConsultantEmail |
string |
Consultant contact email (if available) |
ConsultantPhone |
string |
Consultant contact phone number |
ConsultantSkype |
string |
Consultant Skype address |
ConsultantPhotoUrl |
string |
Full path to consultant photo (if available) |
ConsultantPhotoUrlFragment |
string | Partial URL - use with the Wetu Image Scaler |
ConsultantDescription |
string |
Description of the consultant |
EnquiryUrl |
string |
URL for booking enquiries |
Terms |
string |
Company terms and conditions |
SearchPin
| PROPERTY | TYPE | DESCRIPTION |
|---|---|---|
ContentEntityId |
int |
Unique Wetu ID for the property |
Name |
string |
Property name |
Area |
string |
Indicative area for the property |
Latitude |
double |
Latitude in decimal degrees |
Longitude |
double |
Longitude in decimal degrees |
IBrochure |
int |
ID of associated Wetu iBrochure (if any) |
Country |
string |
Country the property is in |
Location |
string |
Tighter location for the property |
Stars |
int |
Star rating |
Category |
string |
Category classification |
Subcategory |
string |
Secondary classification (more specific than Category) |
Note: The Itinerary, ItineraryLeg, ItineraryRoute, ItineraryTravelArrangement, ItineraryCarHire, and related sub-models contain many additional properties. For the complete property listings of these complex objects, refer to the full API reference or contact enterprise@wetu.com.
Enumerations
ItineraryTypeEnum
Personal; Sample; DayComponent; Component; DayTour; MultiDayTour
BookingStatusEnum
None; AwaitingQuotation; Quoted; Booked; DidNotBook; Invoiced; PaymentDue; Paid; Travelled; Cancelled; Provisional
SessionStatus
AuthenticationFailure; User; Admin; Disabled
ItineraryRouteHandlingModeEnum
UseRoutesOnly; UseProvidedRoutesWithTravelArrangements; AutoGenerateRoutesFromTravelArrangements; PlaceholderRoutesWithTravelArrangements
ItineraryRouteTypeEnum
None; InLeg; InterLeg; Arrival; Departure; Mobile; Overnight; DayTour
Many options above have a corresponding NoRoute variant (e.g. SelfdriveNoRoute), which displays a straight line between locations. A custom path can also be provided via the Points collection on the route.
ItineraryTravelArrangementModeEnum
ScheduledFlight; CharterFlight; Transfer; Train; Boat; Helicopter
ItineraryDrinksBasisEnum
None; DrinksLocalBrands; DrinksExclSpirits; AllDrinks
ItineraryLegDayElementTimeEnum
None; Start; Morning; Lunch; Afternoon; Dinner; Evening
ItineraryLegRoomTypeEnum
Single; Double; Twin; Triple; Family
ItineraryElementTypeEnum
Included; Recommended; Optional; Stop; Information; Destination
ItineraryTravellerTypeEnum
Adult; Child
ItineraryLegTypeEnum
Standard; Mobile; OwnArrangement; OvernightTravel; Departure
NotificationFrequencyEnum
Always; None; FirstView
Need Help?
For support reach out to the Wetu enterprise team.
enterprise@wetu.com