Travel API integration in five minutes
This page takes you from nothing to your first authenticated response. Travel API integration starts with one session call, then every request rides on the session id it returns.
You work against a single REST base URL. Production is https://api.hermeseus.com/api. The sandbox, which runs the same requests without spending real funds, is https://demo.hermeseus.com/api. Every example on this page uses production.
Before you start
You need three things, all issued with your account:
- An office id, for example
OFC-4821. - A username for that office.
- The matching password.
Keep the password server-side. Never ship it in a browser or mobile app.
Step 1: Create a session
Send your credentials to Authenticate/CreateSession. You get back a SessionId. That id authenticates every later call, so store it and reuse it.
curl -X POST https://api.hermeseus.com/api/Authenticate/CreateSession \
-H "Content-Type: application/json" \
-d '{
"OfficeId": "OFC-4821",
"UserName": "jane.doe",
"Password": "your-password"
}'const res = await fetch("https://api.hermeseus.com/api/Authenticate/CreateSession", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
OfficeId: "OFC-4821",
UserName: "jane.doe",
Password: "your-password"
})
});
const data = await res.json();
const sessionId = data.SessionId;import requests
res = requests.post(
"https://api.hermeseus.com/api/Authenticate/CreateSession",
json={
"OfficeId": "OFC-4821",
"UserName": "jane.doe",
"Password": "your-password",
},
)
session_id = res.json()["SessionId"]A success looks like this:
{
"Success": true,
"SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
"Error": null
}If the credentials are wrong, you get Success: false and an error id such as Err0101003. The full list lives on the errors page.
Step 2: Send your first authenticated request
Now use the session. Read your wallet balance from Common/CreditBalance. Put the SessionId in the JSON body, the same way you will for flights, hotels, and activities.
curl -X POST https://api.hermeseus.com/api/Common/CreditBalance \
-H "Content-Type: application/json" \
-d '{ "SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f" }'const res = await fetch("https://api.hermeseus.com/api/Common/CreditBalance", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
SessionId: "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f"
})
});
const balance = await res.json();import requests
res = requests.post(
"https://api.hermeseus.com/api/Common/CreditBalance",
json={"SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f"},
)
print(res.json())The response reports the balance you can spend, already net of any held funds:
{
"Success": true,
"Balance": 4820.50,
"Currency": "USD",
"Error": null
}That is a full round trip. You authenticated, then you called a protected endpoint with the session.
Err0101001, the session is no longer valid. Create a new one and retry the request once.
Where to go next
You now have the one pattern every endpoint follows: authenticate once, then send the SessionId with each request. From here, pick the product you are building on.
- Flights: search live fares, revalidate, book, and issue a ticket.
- Hotels: search availability, validate a rate, and confirm a booking.
- Activities: browse the catalogue, check availability, and book.
The guides in the sidebar walk each of these end to end. If you need the complete legacy reference in one page while these are being built, see the legacy documentation.

