Skip to content
Scrappa Get API key
Google Travel Explore API 1 credit/request

Explore Destinations

GET https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en

Returns the destination set of the Google Travel Explore map for one origin: destination name, country, coordinates, image, suggested outbound and return dates, destination airport, cheapest flight price, airline, stops, duration and hotel price when Google shows one. The whole destination set arrives in one response; there is no page parameter. Destinations without a price stay in the result with flight_price null. max_price keeps every destination and drops the over-cap flight offers, exactly like the upstream price filter, and never causes a second upstream call.

Explore Destinations 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en
Auth header
x-api-key
Cost
1 credit/request
departure_id = JFK
Response preview
200 OK
{
    "search_metadata": {
        "departure_id": "JFK",
        "gl": "us",
        "hl": "en",
        "type": "round_trip",
        "max_price": null
    },
    "origin": {
        "name": "New York",
        "airport_code": "JFK",
        "city_kgmid": "/m/02_286",
        "coordinates": [
            40.7127753,
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

1 required parameter needed before sending a request.

8 optional filters available.

departure_id string Required

Origin airport IATA code (e.g., JFK, LAX) or Google place kgmid (e.g., /m/02_286)

Example value JFK
type string Optional

round_trip (default) or one_way

Example value round_trip
travel_class integer Optional

1 = economy (default), 2 = premium economy, 3 = business, 4 = first

Example value 1
adults integer Optional

Number of adult passengers (1-9, default: 1)

Example value 1
children integer Optional

Number of child passengers (0-9, default: 0)

Example value 0
infants integer Optional

Number of infants (0-9, default: 0)

Example value 0
gl string Optional

Country code the prices and destinations are pinned to (e.g., us, de, gb). Never taken from the exit IP.

Example value us
hl string Optional

Language code (e.g., en, de, en-US)

Example value en
max_price integer Optional

Maximum flight price. Destinations keep their row; only the over-cap flight offers are dropped. No second upstream call.

Example value 10

Request Examples

PHP
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "x-api-key: YOUR_API_KEY_HERE"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
PHP
<?php

use Illuminate\Support\Facades\Http;

$response = Http::timeout(30)
    ->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
    ->get('https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en');

if ($response->successful()) {
    echo $response->body();
} else {
    echo "Error: " . $response->status();
}
JavaScript
const options = {
    method: 'GET',
    headers: {
        'x-api-key': 'YOUR_API_KEY_HERE'
    }
};

fetch('https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en', options)
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.text();
    })
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
JavaScript
const axios = require('axios');

const options = {
    method: 'GET',
    url: 'https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en',
    headers: {
        x-api-key: 'YOUR_API_KEY_HERE',
    }
};

try {
    const response = await axios(options);
    console.log(response.data);
} catch (error) {
    console.error('Error:', error.message);
}
Ruby
require 'net/http'
require 'uri'

uri = URI.parse("https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'

begin
    response = http.request(request)
    puts response.body
rescue => e
    puts "Error: #{e.message}"
end
Python
import http.client
import json

conn = http.client.HTTPSConnection("scrappa.co")

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    conn.request("GET", "/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en", headers=headers)
    res = conn.getresponse()
    data = res.read()
    print(data.decode("utf-8"))
except Exception as e:
    print(f"Error: {e}")
finally:
    conn.close()
Python
import requests

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    response = requests.get('https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en', headers=headers)
    response.raise_for_status()
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")
Java
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;

public class ApiExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
            .url("https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en")
        .addHeader("x-api-key", "YOUR_API_KEY_HERE")
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                System.out.println(response.body().string());
            } else {
                System.out.println("Error: " + response.code());
            }
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}
Go
package main

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

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        return
    }
    req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error making request:", err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error reading response:", err)
        return
    }

    fmt.Println(string(body))
}
Terminal
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en"
C#
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");

        try
        {
            var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en"));
            var content = await response.Content.ReadAsStringAsync();
            Console.WriteLine(content);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
TypeScript
import axios from 'axios';

async function run(): Promise<void> {
    try {
        const response = await axios({
            method: 'GET',
            url: 'https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en',
            headers: {
        'x-api-key': 'YOUR_API_KEY_HERE',
            },
        });

        console.log(response.data);
    } catch (error) {
        console.error('Error:', error);
    }
}

void run();
RUST
use reqwest::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();

    let response = client
        .get("https://scrappa.co/api/flights/explore?departure_id=JFK&type=round_trip&gl=us&hl=en")
        .header("x-api-key", "YOUR_API_KEY_HERE")
        .send()
        .await?;

    println!("{}", response.text().await?);

    Ok(())
}

Response Schema

Example response fields are illustrative; inspect the JSON before integrating.

Example response fields

Scan these fields before integrating.

search_metadata origin destinations facets

Common destinations fields

name country kgmid airport_code
JSON Response
200 OK
{
    "search_metadata": {
        "departure_id": "JFK",
        "gl": "us",
        "hl": "en",
        "type": "round_trip",
        "max_price": null
    },
    "origin": {
        "name": "New York",
        "airport_code": "JFK",
        "city_kgmid": "/m/02_286",
        "coordinates": [
            40.7127753,
            -74.0059728
        ]
    },
    "destinations": [
        {
            "name": "San Francisco",
            "country": "United States",
            "kgmid": "/m/0d6lp",
            "airport_code": "SFO",
            "coordinates": [
                37.7749295,
                -122.4194155
            ],
            "image": "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRYJej5J9FpXbfAsrfHiBFGrVzol-KD7KjTNnzmsfXUsljIoBRyq9fcB0WvWVbu0kzsbhs6vx5A8fayVuZ3YWH5TT-Lac_5zFFOtwzEEmE",
            "flight_price": 377,
            "priced": true,
            "outbound_date": "2026-12-03",
            "return_date": "2026-12-09",
            "airlines": [
                {
                    "code": "B6",
                    "name": "JetBlue"
                }
            ],
            "stops": 1,
            "duration_minutes": 394,
            "hotel_price": null
        },
        {
            "name": "Philadelphia",
            "country": "United States",
            "kgmid": "/m/0dftz",
            "airport_code": "PHL",
            "coordinates": [
                39.9525839,
                -75.1652215
            ],
            "image": "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTARk3fg4JrXocEwFZ__Vu1gTQq_0fAQykb5FfW16JDWxFEvSzsdWXG8thXEjtdTNrnGpD6L0OVyiRFQb3xGcQk6R1qWqf3S-SjvkZccA",
            "flight_price": null,
            "priced": false,
            "outbound_date": "2026-12-03",
            "return_date": "2026-12-09",
            "airlines": [],
            "stops": null,
            "duration_minutes": null,
            "hotel_price": null
        }
    ],
    "facets": {
        "price_bounds": [
            50,
            1500
        ],
        "alliances": [
            "ONEWORLD",
            "SKYTEAM",
            "STAR_ALLIANCE"
        ],
        "themes": [
            {
                "kgmid": "/g/11bc58l13w",
                "name": "Outdoors"
            },
            {
                "kgmid": "/m/0b3yr",
                "name": "Beaches"
            },
            {
                "kgmid": "/m/09cmq",
                "name": "Museums"
            },
            {
                "kgmid": "/m/03g3w",
                "name": "History"
            },
            {
                "kgmid": "/m/071k0",
                "name": "Skiing"
            }
        ]
    }
}

Errors

Handle these documented responses before retrying or showing customer-facing failures.

400

HTTP 400

Missing required query parameter

422

HTTP 422

Invalid departure_id, type, travel_class, adults, children, infants, gl, hl or max_price parameter

429

HTTP 429

Too many requests. Please retry shortly.

502

HTTP 502

Google Travel Explore is temporarily unavailable. Please retry shortly.

503

HTTP 503

Google Travel Explore is temporarily unavailable. Please retry shortly.

Generate Code with AI

Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.

Try It Live

Test this endpoint in our interactive playground with real data.