Round-Trip Flight Search
Version 2 uses two separately billed requests. First request returns outbound options with price_type=round_trip_starting, itinerary_complete=false, and departure_token. Repeat the same search parameters with one departure_token to get compatible return_legs and price_type=round_trip_total for that exact outbound. Each call completes one upstream lookup, retrying temporary failures of that same lookup; failed calls are not billed. No automatic return or baggage expansion.
Run this endpoint
Endpoint
https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR
https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR
x-api-key
origin
= TIA
destination
= FCO
departure_date
= 2026-10-08
{
"flights": [
{
"trip_type": "round_trip",
"itinerary_complete": false,
"price_type": "round_trip_starting",
"departure_token": "COPY_TOKEN_FROM_LIVE_OUTBOUND_RESPONSE",
"booking_token": null,
"price": 47,
"currency": "EUR",
"stops": null,
"outbound_stops": 0,
"return_stops": null,
"total_duration_minutes": null,
...
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
4 required parameters needed before sending a request.
21 optional filters available.
string
Required
Origin airport IATA code
TIA
string
Required
Destination airport IATA code
FCO
string
Required
Departure date in Y-m-d format
2026-10-08
string
Required
Return date in Y-m-d format
2026-10-15
string
Optional
Copy one token from the outbound response and repeat the same search parameters to request its matching returns. Maximum 16384 characters.
example
integer
Optional
Number of adult passengers (1-9)
1
integer
Optional
Number of child passengers (0-9)
10
integer
Optional
Number of infants in seat (0-9)
10
integer
Optional
Number of infants on lap (0-9)
10
string
Optional
Cabin class: economy, premium_economy, business, or first
example
boolean
Optional
Exclude basic economy fares when searching in economy class (default: false)
true
string
Optional
Maximum stops: any, nonstop, one_or_fewer, two_or_fewer
example
string
Optional
Sort results by: top_flights, cheapest, departure_time, arrival_time, duration
example
string
Optional
Language code (e.g., en, de, en-US)
en
string
Optional
Country/region code (e.g., us, de, gb)
us
string
Optional
Currency code for prices (e.g., USD, EUR, GBP)
EUR
array
Optional
Filter by airline IATA codes (e.g., ["AA", "UA", "DL"] or "AA,UA,DL")
["example"]
boolean
Optional
Only false/0 is supported. No additional baggage lookup is performed.
true
integer
Optional
Minimum departure hour (0-23). Use with departure_time_max to filter by time range.
10
integer
Optional
Maximum departure hour (0-23). Use with departure_time_min to filter by time range.
10
integer
Optional
Minimum arrival hour (0-23). Use with arrival_time_max to filter by time range.
10
integer
Optional
Maximum arrival hour (0-23). Use with arrival_time_min to filter by time range.
10
integer
Optional
Maximum flight duration in minutes. Filters out flights longer than this.
10
integer
Optional
Maximum price in the search currency. Filters out flights more expensive than this.
10
integer
Optional
Carry-on bag count. Only 0 is currently supported.
10
Request Examples
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR",
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
use Illuminate\Support\Facades\Http;
$response = Http::timeout(30)
->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
->get('https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR');
if ($response->successful()) {
echo $response->body();
} else {
echo "Error: " . $response->status();
}
const options = {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE'
}
};
fetch('https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR', 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));
const axios = require('axios');
const options = {
method: 'GET',
url: 'https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR',
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);
}
require 'net/http'
require 'uri'
uri = URI.parse("https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR")
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
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/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
except Exception as e:
print(f"Error: {e}")
finally:
conn.close()
import requests
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
response = requests.get('https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR', headers=headers)
response.raise_for_status()
print(response.text)
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
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/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR")
.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());
}
}
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR", 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))
}
#!/bin/bash
curl -X GET \
-H "x-api-key: YOUR_API_KEY_HERE" \
"https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR"
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/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR"));
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
import axios from 'axios';
async function run(): Promise<void> {
try {
const response = await axios({
method: 'GET',
url: 'https://scrappa.co/api/flights/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE',
},
});
console.log(response.data);
} catch (error) {
console.error('Error:', error);
}
}
void run();
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/v2/round-trip?origin=TIA&destination=FCO&departure_date=2026-10-08&return_date=2026-10-15&adults=1¤cy=EUR")
.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.
flights
search_metadata
Common flights fields
trip_type
itinerary_complete
price_type
departure_token
{
"flights": [
{
"trip_type": "round_trip",
"itinerary_complete": false,
"price_type": "round_trip_starting",
"departure_token": "COPY_TOKEN_FROM_LIVE_OUTBOUND_RESPONSE",
"booking_token": null,
"price": 47,
"currency": "EUR",
"stops": null,
"outbound_stops": 0,
"return_stops": null,
"total_duration_minutes": null,
"outbound_duration_minutes": 100,
"return_duration_minutes": null,
"outbound_legs": [
{
"departure_airport": "TIA",
"arrival_airport": "FCO",
"departure_time": "2026-10-08T06:00:00",
"arrival_time": "2026-10-08T07:40:00",
"airline": "W4",
"flight_number": "5011",
"duration_minutes": 100
}
],
"legs": [
{
"departure_airport": "TIA",
"arrival_airport": "FCO",
"departure_time": "2026-10-08T06:00:00",
"arrival_time": "2026-10-08T07:40:00",
"airline": "W4",
"flight_number": "5011",
"duration_minutes": 100
}
],
"return_legs": []
}
],
"search_metadata": {
"api_version": 2,
"stage": "outbound",
"origin": "TIA",
"destination": "FCO",
"departure_date": "2026-10-08",
"return_date": "2026-10-15",
"currency": "EUR"
}
}
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.