GDS API Documentation – Galileo & Amadeus

GDSHub API documentation header

A single command-based API that speaks both Galileo (Travelport) and Amadeus. Issue tickets, manage PNRs, and automate travel workflows — from the same endpoint.

Version 1.0 – Production Ready Supports Galileo 1G & Amadeus 1A ✔ Completely Free to Use

Overview

The GDSHub API provides a command-based interface to the two major Global Distribution Systems — Galileo (Travelport) and Amadeus. It handles flight availability, passenger name records, payment methods, ticket issuance, and reissues. Every request is a POST; every response is JSON.

You send the same kind of command you would type at a live GDS terminal — the API routes it to the correct system based on the command syntax. To obtain your personal API key, log in to your account and generate credentials from your dashboard.

🆓 Free API: The GDSHub API is offered at no cost — no hidden charges, no subscription fees, and generous usage for development and production. We believe in giving developers and travel professionals open access to GDS data.

Authentication

Every request must include your registered email and API key.

Parameter Description Required
emailYour registered email addressYes
api_keyYour personal API key (generate from your dashboard)Yes
actionMust be execute_commandYes
commandThe GDS command in either Galileo or Amadeus syntax (e.g. an26MAYSHJCAI for Amadeus, A26MAYSHJCAI for Galileo)Yes
Note: The request_count is automatically incremented for each successful call. Monitor your usage from your account dashboard.

Endpoint

POST https://gdshub.pro/account/api/v1/1t/1t

All requests must be sent via POST with Content-Type: application/x-www-form-urlencoded or application/json.

Command Comparison — Amadeus vs Galileo

Below is a side-by-side reference of the essential booking commands in both systems. The API accepts either syntax — it detects which one you are sending.

Purpose Amadeus (1A) Galileo (1G)
Search flights (SHJ → CAI, 26 May) AN26MAYSHJCAI A26MAYSHJCAI
Sell one seat in Y class on segment 1 SS1Y1 01Y1
Add passenger name NM1MOUSSA/MAHMOUD N.MOUSSA/MAHMOUD
Agency contact / default PTA AP P.T*
Ticketing agreement TKOK T.T*
Received from (agent / client reference) RFM R.M
End & save transaction ER ER
Itinerary pricing FXP FQ
Tip: The order matters. In both systems, you search → sell → add name → add contact → ticketing agreement → received from → end transaction (ER) → price → payment → issue. Ending the transaction before you price is what saves the PNR to the system.

Response Format

A typical success response contains success, output (the command result), and session data (current PNR, segments, etc.).

✅ Successful ticket issuance:
{
  "success": true,
  "output": "TICKET ISSUED SUCCESSFULLY\nPNR: 32JBQP\nPASSENGERS: 1 | SEGMENTS: 1\nTOTAL AMOUNT: AED 2,340.00\nBASE FARE: AED 1,650.00\nTAX: AED 690.00\n\nTICKET NUMBERS:\nPAX 1: 869-7041540806",
  "session": []
}
❌ Error response (missing payment):
{
  "success": true,
  "output": "CANNOT ISSUE TICKET - MISSING ELEMENTS:\n• NO VALID PAYMENT METHOD SET\n\nMissing:\nNAMES, PAYMENT METHOD, AP, PRICE, TICKETING",
  "session": []
}

Code Examples

Ready-to-run examples in popular languages. Replace the email and API key with your own. The command field accepts either Amadeus or Galileo syntax.

curl -X POST https://gdshub.pro/account/api/v1/1t/1t \
  -d "email=your@email.com" \
  -d "api_key=YOUR_API_KEY" \
  -d "action=execute_command" \
  -d "command=an26MAYSHJCAI"
<?php
$data = [
    'email'    => 'your@email.com',
    'api_key'  => 'YOUR_API_KEY',
    'action'   => 'execute_command',
    'command'  => 'FXP'    // Amadeus pricing. Use 'FQ' for Galileo.
];

$ch = curl_init('https://gdshub.pro/account/api/v1/1t/1t');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>
import requests

url = "https://gdshub.pro/account/api/v1/1t/1t"
payload = {
    "email": "your@email.com",
    "api_key": "YOUR_API_KEY",
    "action": "execute_command",
    "command": "TTP"     # Amadeus ticket issue. Galileo equivalent: "T.T*"
}

response = requests.post(url, data=payload)
print(response.json())
const axios = require('axios');

const params = new URLSearchParams();
params.append('email', 'your@email.com');
params.append('api_key', 'YOUR_API_KEY');
params.append('action', 'execute_command');
params.append('command', 'an26MAYSHJCAI');   // or Galileo: 'A26MAYSHJCAI'

axios.post('https://gdshub.pro/account/api/v1/1t/1t', params)
  .then(res => console.log(res.data))
  .catch(err => console.error(err));
#!/bin/bash
EMAIL="your@email.com"
API_KEY="YOUR_API_KEY"
COMMAND="SS1Y1"    # Amadeus sell seat. Galileo: "01Y1"

curl -X POST https://gdshub.pro/account/api/v1/1t/1t \
  -d "email=$EMAIL" \
  -d "api_key=$API_KEY" \
  -d "action=execute_command" \
  -d "command=$COMMAND"
require 'net/http'
require 'uri'

uri = URI('https://gdshub.pro/account/api/v1/1t/1t')
params = {
  email: 'your@email.com',
  api_key: 'YOUR_API_KEY',
  action: 'execute_command',
  command: 'ER'      # Same in both Amadeus and Galileo
}

response = Net::HTTP.post_form(uri, params)
puts response.body
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    data := url.Values{}
    data.Set("email", "your@email.com")
    data.Set("api_key", "YOUR_API_KEY")
    data.Set("action", "execute_command")
    data.Set("command", "FXP")  // Amadeus pricing. Galileo: "FQ"

    resp, _ := http.PostForm("https://gdshub.pro/account/api/v1/1t/1t", data)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}

Tips & Best Practices

  • Session persistence: The API maintains a session per email — you can run a sequence of commands (search → add name → payment → ticket) without losing context.
  • Command chaining: Multiple commands can be sent in one request by separating them with semicolons. Amadeus example: command=NM1AHMED;SS1Y1;FPCASH;TTP. Galileo example: command=N.AHMED;01Y1;F.S;T.T*.
  • Error handling: Always check the success field. The output field contains human-readable messages from the GDS.
  • Rate limiting: Your request_count is tracked; if you need higher limits, contact support.
  • Mixing systems: Don’t mix Amadeus and Galileo syntax in the same session — pick one and stay with it. The session context is tied to the GDS that served the first command.