Worldticket API DOCUMENTATION

Changelog

2026-06-28

Updated change passenger name type

2026-02-22

Clarify download all tickets endpoint (/tickets/confirmation/{rloc}/download)

2025-09-12

Segments cancellation with automatic refund

2025-07-11

Segments cancellation with automatic refund

Add sold-out segment for OTA_AirLowFareSearchRS

2025-07-02

Add policy for OTA_AirBookRS, OTA_AirPriceRS

2025-06-26

Clarify request and response for AirLowFareSearch (one-way with booking class)

2025-06-21

Deprecate download endpoint using passenger details and introduce the new one

Example

Deprecated Request Format:

curl '{base_url}/tickets/confirmation/{bookingReference}/download/passenger-segment?firstName=JENNIFER&lastName=STEWART&departure=MKX&arrival=DMX' \
    -H 'x-api-key: {api-key}' \
    --output ticket.pdf

New Request Format:

curl '{base_url}/tickets/confirmation/{bookingReference}/download/passenger-segment?ticketNumber=3333330292535&couponNumber=1' \
    -H 'x-api-key: {api-key}' \
    --output ticket.pdf

2025-04-23

Updated error response behavior documentation

The following changes in how errors are returned have been documented and moved from the main error-response guide:

Before
{
  "timestamp": "2025-01-13T09:12:24.574+00:00",
  "status": 502,
  "error": "Bad Gateway",
  "exception": "org.springframework.web.client.HttpServerErrorException$BadGateway",
  "message": "",
  "title": "",
  "correlationId": "a68ad759-daf5-48a2-bdaf-50c6c221a3a3",
  "service": "ota-service",
  "instance": "/v2015b/OTA",
  "tenant": "test-rs3",
  "cause": {
    "status": 502,
    "instance": "/reservations",
    "cause": {
      "title": "Bad Gateway",
      "status": 502,
      "detail": "503 Service Unavailable: \"",
      "instance": "/reservations",
      "cause": {
        "timestamp": "2025-04-13T06:25:20.652+00:00",
        "path": "/transport/api/v1/purchase",
        "status": 503,
        "error": "Service Unavailable",
        "requestId": "e1e1f214-407919"
      },
      "exception": "org.springframework.web.client.HttpServerErrorException$InternalServerError",
      "timestamp": "2025-01-13T09:12:24.549302606Z",
      "correlationId": "a68ad759-daf5-48a2-bdaf-50c6c221a3a3",
      "service": "hhr-proxy",
      "tenant": "test-rs3"
    },
    "tenant": "test-rs3",
    "service": "reservation-service",
    "correlationId": "a68ad759-daf5-48a2-bdaf-50c6c221a3a3",
    "message": "",
    "exception": "org.springframework.web.client.HttpServerErrorException$BadGateway",
    "error": "Bad Gateway",
    "timestamp": "2025-01-13T09:12:24.572+00:00"
  }
}
  
After
{
  "status": 503,
  "error": "Service Unavailable",
  "code": "450",
  "title": "Unable to process",
  "correlationId": "b1589271-9e52-4a57-98bf-6f05c6a15dbb",
  "service": "ota-service",
  "instance": "/v2015b/OTA",
  "tenant": "test-rs3",
  "timestamp": "2025-04-13T06:20:03.173515305Z",
  "cause": {
    "status": 503,
    "error": "Service Unavailable",
    "title": "",
    "correlationId": "b1589271-9e52-4a57-98bf-6f05c6a15dbb",
    "service": "reservation-service",
    "instance": "/reservations",
    "tenant": "test-rs3",
    "timestamp": "2025-04-13T06:20:03.170+00:00",
    "exception": "org.springframework.web.client.HttpServerErrorException$ServiceUnavailable",
    "cause": {
      "status": 503,
      "code": 0,
      "title": null,
      "correlationId": "b1589271-9e52-4a57-98bf-6f05c6a15dbb",
      "service": "hhr-proxy",
      "instance": "/reservations",
      "tenant": "test-rs3",
      "timestamp": "2025-04-13T06:20:03.163394791Z"
    },
    "message": ""
  }
}
  


Note: The external error response will be formatted to our standard response structure (Problem JSON)

  1. Before – GO7 wraps the original external error deeply nested in the cause tree and returns a 502 Bad Gateway
  2. After – response is reformatted to standard Problem JSON structure with original error’s status, code, title, and detail
Before
{
  "timestamp": "2025-01-13T09:12:24.574+00:00",
  "status": 502,
  "error": "Bad Gateway",
  "exception": "org.springframework.web.client.HttpServerErrorException$BadGateway",
  "message": "",
  "title": "",
  "correlationId": "a68ad759-daf5-48a2-bdaf-50c6c221a3a3",
  "service": "ota-service",
  "instance": "/v2015b/OTA",
  "tenant": "test-skywork-dev",
  "cause": {
    "status": 502,
    "instance": "/reservations",
    "cause": {
      "title": "Bad Gateway",
      "status": 502,
      "detail": "500 Internal Server Error: \"{\\\"code\\\":9999,\\\"message\\\":\\\"Unknown error\\\",\\\"details\\\":[{\\\"reason\\\":\\\"Could not commit JPA transaction\\\"}]}\"",
      "instance": "/reservations",
      "cause": {
        "details": [
          {
            "reason": "Could not commit JPA transaction"
          }
        ],
        "message": "Unknown error",
        "code": 9999
      },
      "exception": "org.springframework.web.client.HttpServerErrorException$InternalServerError",
      "timestamp": "2025-01-13T09:12:24.549302606Z",
      "correlationId": "a68ad759-daf5-48a2-bdaf-50c6c221a3a3",
      "service": "hhr-proxy",
      "tenant": "test-rs3"
    },
    "tenant": "test-skywork-dev",
    "service": "reservation-service",
    "correlationId": "a68ad759-daf5-48a2-bdaf-50c6c221a3a3",
    "message": "",
    "exception": "org.springframework.web.client.HttpServerErrorException$BadGateway",
    "error": "Bad Gateway",
    "timestamp": "2025-01-13T09:12:24.572+00:00"
  }
}
  
After
{
  "status": 500,
  "error": "Internal Server Error",
  "code": "9999",
  "title": "Unknown error",
  "detail": "Could not commit JPA transaction",
  "correlationId": "79f48120-952c-4ebe-b889-809c129932ee",
  "service": "ota-service",
  "instance": "/v2015b/OTA",
  "tenant": "test-skywork-dev",
  "timestamp": "2025-04-17T02:48:11.178912262Z",
  "cause": {
    "status": 500,
    "error": "Internal Server Error",
    "title": "Unknown error",
    "detail": "Could not commit JPA transaction",
    "correlationId": "79f48120-952c-4ebe-b889-809c129932ee",
    "service": "hhr-proxy",
    "instance": "/reservations",
    "tenant": "test-rs3",
    "timestamp": "2025-04-17T02:48:10.145711265Z"
  }
}
  

2025-04-16

Improved documents URLs in TPAExtension for OTA_AirDemandTicketRS and OTA_AirBookRS

To remove ambiguity in document download URLs and to simplify handling service responses, the links element has been added instead of the string field urls. The old field (urls) will remain for backward compatibility. The new field will contain the actual URL (href), a relation type (rel), and optional segmentRPH and travelerRPH.

 "links": [
    {
      "href" : "https://domain.com/tickets/download?ref=11",
      "rel" : "downloadTicket",
      "segmentRPH" : "1", // Optional
      "travelerRPH" : "1" // Optional
    }
  ]
Old version

    "tpaextensions": {
      "urls": "https://test-api.worldticket.net/sms-gateway-service/tickets/confirmation/QN6HQV/download/passenger-segment?firstName=JENNIFER&lastName=STEWART&departure=MKX&arrival=DMX https://test-api.worldticket.net/sms-gateway-service/tickets/confirmation/QN6HQV/download/passenger-segment?firstName=JENNIFER&lastName=STEWART&departure=DMX&arrival=MKX"
    }
  
New version

    "tpaextensions": {
      "urls": "https://test-api.worldticket.net/sms-gateway-service/tickets/confirmation/QN6HQV/download/passenger-segment?firstName=JENNIFER&lastName=STEWART&departure=MKX&arrival=DMX https://test-api.worldticket.net/sms-gateway-service/tickets/confirmation/QN6HQV/download/passenger-segment?firstName=JENNIFER&lastName=STEWART&departure=DMX&arrival=MKX",
      "links": [
        {
          "href" : "https://test-api.worldticket.net/sms-gateway-service/tickets/confirmation/QN6HQV/download/passenger-segment?firstName=JENNIFER&lastName=STEWART&departure=MKX&arrival=DMX",
          "rel" : "downloadTicket",
          "segmentRPH" : "1",
          "travelerRPH" : "1"
        },
        {
          "href" : "https://test-api.worldticket.net/sms-gateway-service/tickets/confirmation/QN6HQV/download/passenger-segment?firstName=JENNIFER&lastName=STEWART&departure=DMX&arrival=MKX",
          "rel" : "downloadTicket",
          "segmentRPH" : "2",
          "travelerRPH" : "1"
        }
      ]
    }
  

Example