Skip to main content

Before you start

You need:
  • Base URL provided by PageOne Travel
  • One partner api-key (for search/quote/book/cancel)
  • One partner JWT user account (for user/API key/partner-connection management)
  • Optional admin JWT account (for bootstrap/admin operations)

End-to-end flow

1

Step 1: Login as partner user (JWT)

curl -X POST "$BASE_URL/api/auth/login" \
  -H "Content-Type: application/json" \
  -d '{
    "accountType": "email",
    "accountValue": "ops@partner.com",
    "password": "<MD5_PASSWORD_HASH>"
  }'
Keep data.token.accessToken for management APIs.
2

Step 2: Create or list API keys

curl -X GET "$BASE_URL/api/partner/api-keys" \
  -H "Authorization: Bearer $PARTNER_JWT"
Use the returned apiKey in header api-key for OTA flow APIs.
3

Step 3: Search

curl -X POST "$BASE_URL/api/search" \
  -H "Content-Type: application/json" \
  -H "api-key: $API_KEY" \
  -d '{
    "searchCriteria": {
      "destinations": {
        "accommodations": [
          { "type": "Hotel", "code": "6475503709317edd78e1dbd9" }
        ]
      },
      "occupancies": [
        { "occupancyId": 1, "paxes": [ { "age": 30 }, { "age": 28 } ] }
      ],
      "checkIn": "2026-03-01",
      "checkOut": "2026-03-03",
      "currency": "USD",
      "language": "EN"
    },
    "settings": {
      "access": { "code": 10001 },
      "businessRules": { "businessRuleType": "DEFAULT", "optionsQuota": 5 }
    }
  }'
Save data.accommodations[].options[].id as optionId.
4

Step 4: Quote

curl -X POST "$BASE_URL/api/quote" \
  -H "Content-Type: application/json" \
  -H "api-key: $API_KEY" \
  -d '{
    "quoteCriteria": {
      "optionId": "OPTION_ID_FROM_SEARCH",
      "accommodation": { "type": "Hotel", "code": "6475503709317edd78e1dbd9" },
      "occupancies": [
        { "occupancyId": 1, "paxes": [ { "age": 30 }, { "age": 28 } ] }
      ],
      "checkIn": "2026-03-01",
      "checkOut": "2026-03-03",
      "currency": "USD",
      "language": "EN"
    },
    "settings": { "access": { "code": 10001 } }
  }'
Save data.id as quoteId.
5

Step 5: Book

curl -X POST "$BASE_URL/api/book" \
  -H "Content-Type: application/json" \
  -H "api-key: $API_KEY" \
  -d '{
    "bookCriteria": {
      "quoteId": "QUOTE_ID_FROM_QUOTE",
      "accommodation": { "type": "Hotel", "code": "6475503709317edd78e1dbd9" },
      "partnerReference": "partner-ref-10001",
      "holder": { "name": "John", "surName": "Smith" },
      "checkIn": "2026-03-01",
      "checkOut": "2026-03-03",
      "currency": "USD",
      "language": "EN"
    },
    "settings": { "access": { "code": 10001 } }
  }'
Save data.bookingReference.
6

Step 6: Cancel

curl -X POST "$BASE_URL/api/cancel" \
  -H "Content-Type: application/json" \
  -H "api-key: $API_KEY" \
  -d '{
    "input": {
      "reference": { "bookingReference": "BOOKING_REFERENCE_FROM_BOOK" },
      "language": "EN"
    },
    "settings": { "access": { "code": 10001 } }
  }'
All successful responses are wrapped by the backend as:
{
  "data": {},
  "message": "success"
}

Next

  • Detailed call chain: /api-reference/workflow
  • Core endpoints: /api-reference/core/search, /api-reference/core/quote, /api-reference/core/book, /api-reference/core/cancel
  • Management endpoints: /api-reference/management/auth-login, /api-reference/management/users, /api-reference/management/api-keys