Industry Software

Amadeus GDS Integration: SOAP APIs, Authentication and a Real Implementation Plan

Amadeus GDS integration guide: SOAP Web Services vs REST Self-Service, WS-Security auth, the booking message flow and a single-GDS build from $18,000.

Author
Software Chamber Editorial TeamReviewed by M B H Mishu, CEO
Published
2 November 2026
Read time
14 min read
Amadeus GDS integration architecture: SOAP Web Services and REST Self-Service with WS-Security authentication and the booking message flow

Most teams that set out to integrate Amadeus discover two Amadeus platforms sharing one brand and almost nothing else: the SOAP-based Amadeus Web Services that powers full travel agencies, and the REST/JSON Amadeus for Developers (Self-Service) that powers prototypes. Picking the wrong one costs months. This guide walks a developer through both, the WS-Security authentication flow, the real message sequence behind a flight booking — from MasterPricer search to ticket issuance — and a realistic implementation plan with the timeline and fixed cost of a single-GDS build.

In this article (9 sections)
  1. 01Amadeus Web Services (SOAP) vs Amadeus Self-Service (REST)
  2. 02Authentication: WS-Security, the security token and session flow
  3. 03The booking message flow, named correctly
  4. 04What the SOAP envelope actually looks like
  5. 05Session management and the stateful-stateless trade-off
  6. 06Error handling, retries and idempotency
  7. 07Caching search results to control per-transaction cost
  8. 08Test and production environments, certification and onboarding
  9. 09A realistic Amadeus implementation plan, timeline and cost

01

Amadeus Web Services (SOAP) vs Amadeus Self-Service (REST)

Amadeus publishes two completely separate product lines. Amadeus Web Services — the enterprise SOAP platform, sometimes called WSAP or the Amadeus Travel Platform — is what a licensed travel agency runs in production. It exposes the full GDS: live airline availability, published and negotiated fares, PNR building, automated ticketing, EMDs and queues. It speaks SOAP 1.1 over HTTPS, requires a commercial contract with Amadeus and an office ID, and must pass a certification cycle before you touch production. Amadeus for Developers (Self-Service) is the opposite: REST, JSON, OAuth2, self-signup and a free test tier. It is excellent for prototypes, fare-shopping widgets and MVPs, but its flight content and booking depth are narrower than the full agency platform.

Prototype on Self-Service if you like; build production ticketing on Web Services.
DimensionAmadeus Web Services (SOAP)Amadeus Self-Service (REST)
ProtocolSOAP 1.1 / XML over HTTPSREST / JSON over HTTPS
AuthenticationWS-Security header (UsernameToken, nonce, password digest)OAuth2 client credentials (API key + secret to bearer token)
Content depthFull GDS: published and negotiated fares, EMD, ticketing, queuesFlight Offers search / price / order; narrower content and ancillaries
OnboardingCommercial contract, office ID, certification cycleSelf-signup portal, instant test keys
Best forProduction travel agencies issuing ticketsPrototypes, MVPs, fare-display and comparison tools
Cost to startAmadeus contract plus engineering (single-GDS build $18,000-28,000)Free test tier; pay-as-you-go in production

Prototype on Self-Service if you like; build production ticketing on Web Services.

  • Amadeus Web Services (SOAP): full GDS content, ticketing, EMD and queues; needs an Amadeus contract, an office ID and certification.
  • Amadeus Self-Service (REST/JSON): OAuth2, self-signup, free test tier; ideal for prototypes and search widgets, limited booking depth.
  • Both can coexist: teams often prototype on Self-Service, then build the production agency platform on Web Services once the Amadeus contract is signed.
  • Your choice is driven by whether you need production ticketing and negotiated fares (Web Services) or fast, low-commitment search and simple orders (Self-Service).

02

Authentication: WS-Security, the security token and session flow

Amadeus Web Services authenticates with a WS-Security SOAP header rather than an API key in a URL. Each request carries a UsernameToken containing the agent login, the office ID, a one-time nonce, a Created timestamp and a PasswordDigest. The digest is not your password in clear text: it is a Base64-encoded SHA-1 hash of the decoded nonce concatenated with the timestamp and the SHA-1 of your password. Because the nonce and timestamp change on every call, the digest changes too, which blocks replay attacks. Amadeus validates the digest against your stored credentials and, for session-based flows, returns a security token and session identifiers you echo back on later calls. Getting the digest algorithm exactly right — decode the nonce before hashing, use the correct concatenation order, keep the timestamp within the allowed clock skew — is the single most common reason a first Amadeus integration fails to authenticate.

Stateful (session) authentication

In a session-based call you open a session with a Session header whose TransactionStatusCode is 'Start'. Amadeus returns a session id, a sequence number and a security token. Every follow-up call sends TransactionStatusCode 'InSeries' with the incremented sequence number and the same token, and you close with 'End'. Stateful sessions are required for workflows that build server-side context — most notably PNR creation, pricing against a live PNR and ticketing.

  • Required for PNR build, TST pricing and ticket issuance, which hold context on the Amadeus side.
  • You must track the session id, sequence number and security token and increment correctly, or the session drops.
  • Idle sessions time out; long-running flows must refresh or risk a session-expired fault.

Stateless authentication

Stateless calls send the full WS-Security header on every request and hold no server-side context between them. They are simpler, scale better and are perfect for high-volume, read-only work such as fare search. The trade-off is that any workflow needing continuity — building and ticketing a PNR — cannot be purely stateless.

  • Best for Fare_MasterPricerTravelBoardSearch and other read-only, high-volume queries.
  • No session to leak or expire, so concurrency is easier and cheaper to scale.
  • Mix the models: stateless for search, stateful for the booking and ticketing sequence.

03

The booking message flow, named correctly

A flight sale on Amadeus Web Services is not one call; it is a choreographed sequence of named messages, each returning context the next one needs. You do not need to memorise the XML, but you must understand the order, because skipping or reordering a step produces faults that are hard to read. Search is stateless and cheap; from the moment you sell a recommendation you are in a stateful session that must run to ticketing or be cancelled cleanly. Below is the canonical happy path for a published-fare booking. Negotiated fares, EMDs and ancillaries add messages but follow the same spine.

  1. 1Fare_MasterPricerTravelBoardSearch — shop live availability and priced recommendations for the journey; stateless, cacheable, the highest-volume call.
  2. 2Air_SellFromRecommendation — sell the chosen recommendation, confirming seats are still available and opening the booking context.
  3. 3PNR_AddMultiElements — build the PNR: passenger names, contact, ticketing arrangement and any remarks; creates or updates the record.
  4. 4Fare_PricePNRWithBookingClass — price the itinerary held in the PNR and create a TST (Transitional Stored Ticket) holding the fare.
  5. 5Ticket_CreateTSTFromPricing — confirm the TST from the pricing result so the fare is ready to issue.
  6. 6DocIssuance_IssueTicket — issue the e-ticket against the TST, returning the ticket numbers; the session can then be ended.
  7. 7PNR_Retrieve — re-read the completed record for confirmation, storage and the customer itinerary.

04

What the SOAP envelope actually looks like

Every Amadeus Web Services call is a SOAP envelope: an outer Envelope wrapping a Header and a Body. The Header carries the WS-Security credentials, the message addressing (the WS-Addressing Action and To fields) and, for stateful flows, the Session element. The Body carries the actual message — the MasterPricer request, the PNR elements, and so on — against an Amadeus-published XSD schema for that message version. You will spend more time on schema versions than you expect: Amadeus pins each message to a version string, and the server rejects a request whose declared version does not match what your office is provisioned for. Build against the WSDL and XSDs Amadeus issues for your contract rather than copying samples from the web, which are frequently a version or two behind.

  • Envelope to Header (WS-Security, WS-Addressing action, Session) to Body (the versioned message).
  • Each message is pinned to a schema version; a mismatch is rejected before any business logic runs.
  • Generate strongly-typed clients from the official WSDL and XSD rather than hand-building XML.
  • The WS-Addressing Action tells Amadeus which operation you are calling; getting it wrong returns a routing fault, not a business error.

05

Session management and the stateful-stateless trade-off

The hardest operational problem in an Amadeus integration is session lifecycle. A stateful session holds a live booking context on the Amadeus side, which is exactly what you need to build and ticket a PNR — and exactly what hurts you under load, because sessions are a finite, contracted resource and idle ones time out. A practical architecture keeps search stateless and short-lived, then opens a stateful session only for the sell-to-ticket window, holds it for seconds rather than minutes, and always closes it (TransactionStatusCode 'End' or an explicit sign-out) even on the error path. Treat an abandoned session as a resource leak: monitor open sessions, cap concurrency to your contracted limit and reap anything idle past the timeout.

  • Keep search stateless; open a stateful session only for the sell-to-ticket window.
  • Always close sessions on both the success and the error path to avoid leaking a contracted resource.
  • Cap concurrent sessions to your Amadeus limit and queue beyond it rather than failing.
  • Monitor session count and age; alert before you hit the ceiling, not after.

06

Error handling, retries and idempotency

Amadeus faults come in two flavours: SOAP faults (malformed request, auth failure, schema or version mismatch) and application errors returned inside an otherwise valid response (no availability, fare no longer valid, segment sold out). Your code must inspect both. Retries need care: a stateless search can be retried freely, but a booking or ticketing call must never be blindly retried, because a timeout may mean the PNR was actually created and you would double-book. Make write operations idempotent where you can — reconcile by retrieving the PNR before retrying — and treat ambiguous timeouts as verify-then-act, not retry. Map the common error codes to clear user messages: a 'fare no longer available, please re-search' converts far better than a raw Amadeus fault string.

  • Distinguish SOAP transport faults from in-response application errors; handle each separately.
  • Retry stateless search freely; never blind-retry Sell, PNR build or ticketing.
  • On an ambiguous timeout, retrieve the PNR to confirm state before any corrective action.
  • Translate Amadeus error codes into actionable user messages; log the raw fault for support.
  • Respect Amadeus throughput limits; back off on rate-related faults instead of hammering.

07

Caching search results to control per-transaction cost

Amadeus bills shopping transactions, and a busy OTA fires far more searches than bookings — ratios of 200:1 or worse are normal. Uncached, every re-search, back-button and price-refresh hits Amadeus and your bill. A disciplined caching layer in front of MasterPricer is therefore both a performance and a cost control. Cache priced recommendations keyed by origin, destination, dates, cabin and passenger mix, with a short time-to-live measured in minutes, because fares and availability move. Serve the cache for repeat and near-identical searches, but always revalidate the exact itinerary at the moment of sell — never book a cached fare without a fresh Sell confirming availability and price. The art is choosing a TTL long enough to cut cost and latency but short enough that you rarely show a fare that has already moved.

  • Cache MasterPricer results keyed by route, dates, cabin and passenger mix with a short TTL (minutes).
  • Always revalidate the chosen fare with a live Sell before building the PNR; never book straight from cache.
  • A well-tuned cache cuts both search latency and Amadeus shopping spend, often dramatically.
  • Track your look-to-book ratio; it is the metric that tells you whether the cache is doing its job.

08

Test and production environments, certification and onboarding

Amadeus Web Services runs in a test environment first. Your agency signs a commercial contract with Amadeus, receives a test office ID and credentials, and you build and certify against test before production credentials are issued. Certification is a structured run-through: Amadeus, or your local Amadeus organisation, checks that your application builds valid PNRs, prices and issues tickets correctly, handles queues and respects usage rules, before switching you to production. To be explicit about roles: the travel agency or airline holds the Amadeus contract, the office ID and the credentials. Software Chamber is not an Amadeus partner and holds no Amadeus certifications of its own; we implement your application against your Amadeus credentials and run the certification process with you. Certification duration depends on scope and on the Amadeus onboarding queue in your market — plan for several weeks in parallel with development rather than a fixed date.

  • You build and certify in the Amadeus test environment before production keys are released.
  • Certification verifies correct PNR building, pricing, ticketing and queue handling for your scope.
  • The agency or airline holds the Amadeus contract, office ID and credentials — not the development vendor.
  • Software Chamber implements against your credentials and runs certification with you; we claim no Amadeus partnership or certification of our own.
  • Treat certification as a parallel workstream of several weeks, not a one-day sign-off.

09

A realistic Amadeus implementation plan, timeline and cost

A production Amadeus integration inside an owned OTA is a single-GDS build: Software Chamber delivers it for a fixed $18,000-28,000 over 12-16 weeks, with certification running in parallel. The number moves with scope — search-only is far lighter than full sell-to-ticket with EMDs, refunds and queues — and with how ready your Amadeus contract and office ID are when we start. We deploy to your own cloud account, hand over the source and include three months of free maintenance; we never rent the platform and there is no per-booking fee from us. The schedule below is the shape we actually run. If you only need Self-Service search in an existing site, it is a smaller engagement; if you need multi-GDS, it moves into the $28,000-45,000 range covered in our GDS comparison guide.

PhaseWeeksWhat happens
Discovery and contract alignment1-2Confirm Amadeus contract, office ID, scope (search-only vs full ticketing), payment and PNR flows.
Auth and search3-5WS-Security digest, stateless MasterPricer search, caching layer, fare display.
Booking and ticketing6-10Stateful session, Sell, PNR build, PNR pricing, TST, ticket issuance, error handling.
Certification (parallel)3-12Test-environment certification with Amadeus; fixes to pass PNR, pricing and ticketing checks.
Back office and payments11-13Refunds, voids, queues, reconciliation, payment gateway and markup rules.
Hardening and launch14-16Load test to sub-2.5s search, security fixes, production cut-over; 3 months free maintenance begins.

Frequently asked questions

Neither is universally better; they are different products. Amadeus Web Services (SOAP) gives full GDS content, negotiated fares and production ticketing and is what a licensed agency needs. Amadeus Self-Service (REST/JSON) is faster to start, free to test and ideal for prototypes and fare-display tools, but its booking depth is narrower. Many teams prototype on REST and build the production platform on SOAP once the Amadeus contract is in place.

For production Amadeus Web Services, yes — your agency or airline signs a commercial contract with Amadeus and receives an office ID and credentials. You cannot issue real tickets without it. Amadeus Self-Service lets you self-sign-up for a free test tier without a contract, which is why it is popular for prototypes. Software Chamber implements against whichever credentials you hold; we are not an Amadeus partner.

Plan for several weeks running in parallel with development rather than a fixed date. Certification is a structured review in the Amadeus test environment covering PNR building, pricing, ticketing and queue handling, and its length depends on your scope and on the Amadeus onboarding queue in your market. Because it runs alongside the build, it rarely extends the overall 12-16 week timeline for a single-GDS platform.

Yes. If you already have a website or app, we can add an Amadeus search, booking or ticketing layer behind it rather than rebuilding everything, provided the architecture allows a clean integration point. The cost is lower than a full OTA build and depends on scope — search-only is far lighter than full sell-to-ticket. We deploy to your cloud and hand over the source.

Use both. Stateless calls, with the full WS-Security header on every request, are best for high-volume read-only work like fare search — they scale easily and have no session to expire. Stateful sessions are required for PNR building, pricing and ticketing because those hold context on the Amadeus side. The standard pattern is stateless search and a short-lived stateful session only for the sell-to-ticket window.

Yes, in two ways. Amadeus Self-Service offers a free REST test tier you can sign up for immediately. For Amadeus Web Services, your contract includes a test environment with a test office ID where you build and certify before production keys are issued. Both let you prove the integration before spending on production transactions.

As part of a Software Chamber OTA, a production single-GDS Amadeus build with a B2B portal is a fixed $18,000-28,000 over 12-16 weeks, including the engineering to pass certification. Amadeus's own contract fees, deposits and per-transaction charges are billed to you directly by Amadeus and vary by market. A search-only integration into an existing site is a smaller, separately quoted engagement.

Planning an Amadeus integration?

Single-GDS Amadeus builds with a B2B portal, deployed to your own cloud for a fixed price with three months of free maintenance.

Get a fixed quote for your OTA
TravelGDSAmadeusIntegration
All articles

Keep reading

Related guides