A single command-based API that speaks both Galileo (Travelport) and Amadeus. Issue tickets, manage PNRs, and automate travel workflows — from the same endpoint.
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.
Authentication
Every request must include your registered email and API key.
| Parameter | Description | Required |
|---|---|---|
email | Your registered email address | Yes |
api_key | Your personal API key (generate from your dashboard) | Yes |
action | Must be execute_command | Yes |
command | The GDS command in either Galileo or Amadeus syntax (e.g. an26MAYSHJCAI for Amadeus, A26MAYSHJCAI for Galileo) | Yes |
request_count is automatically incremented for each successful call. Monitor your usage from your account dashboard.
Endpoint
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 |
Response Format
A typical success response contains success, output (the command result), and session data (current PNR, segments, etc.).
{
"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": []
}
{
"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
successfield. Theoutputfield contains human-readable messages from the GDS. - Rate limiting: Your
request_countis 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.
Tools & References Used in This Guide
These GDSHub resources are useful alongside the API — for validating codes, decoding taxes, and understanding fare logic: