Flight search and booking infrastructure for AI agents

Naro is an HTTP API for flight data. Your agent sends a request, pays a couple cents in USDC, and gets back live offers from 300+ airlines. No accounts to create, no keys to manage.

Flight data is hard for agents

If your agent needs to look up a flight, it basically can't. The data isn't public, the websites fight automation, and the APIs that do exist want an enterprise contract before you see a single price.

Agent browsers don't work

Airline sites are built to stop bots. CAPTCHAs, dynamic rendering, anti-scraping walls. Your agent can't reliably get a price from any of them.

The data is proprietary

Live flight pricing comes from GDS networks and licensed feeds. You can't just hit an endpoint and get it. You need a commercial relationship with a provider.

APIs require enterprise contracts

The few providers that offer this data as an API want enterprise sign-ups, monthly minimums, and weeks of onboarding. Just to test whether the data is even useful.

No way to just try it

You can't tell your agent "look up flights to Tokyo" without first signing a contract, getting API keys, attaching a credit card. All that before you know if the data is any good.

Naro removes all of that

Your agent makes a request and pays a few cents in USDC. That's it. The payment is the only authentication you need.

Data

300+ airlines

Live pricing and availability from major carriers. The same data the booking sites use.

Access

No onboarding

If your agent has a wallet with USDC, it can start searching right now. Nothing to sign up for.

🔗
Protocol

x402 native

Standard HTTP, paid with x402. Your agent's existing wallet and SDK just work.

How it works

1

Send a request

POST to the Naro API with your search parameters. Origin, destination, dates, cabin class.

2

Get a 402 back

The response includes the price and where to send payment. $0.02 for a search, paid in USDC on Base.

3

SDK handles payment

The x402 SDK signs the payment and retries the request automatically. Your code doesn't change.

4

Get live results

You get back real offers with prices, carriers, connections, and availability. Same data the booking sites show.

Get started

Install

npm install naro-flights

Configure

Point it at a wallet. Turnkey keeps the key off your server, or use a private key directly for dev.

import { createNaroClient } from "naro-flights";

// For development — or use Turnkey for production key management
const naro = createNaroClient(process.env.WALLET_PRIVATE_KEY);

Search flights

const offers = await naro.search({
  origin: "JFK",
  destination: "LAX",
  departure_date: "2026-04-15",
});

console.log(offers[0].total_amount); // "$84.99"

Use with Claude Code

One file, and your agent can search flights.

1. Download the skill

mkdir -p .claude/skills/naro
curl -s https://naro.com.ai/SKILL.md -o .claude/skills/naro/SKILL.md

2. Configure your wallet

We recommend Turnkey for secure key management — your private key never leaves their infrastructure. Alternatively, you can pass a private key directly for development or testing.

# With Turnkey (recommended)
export TURNKEY_API_PUBLIC_KEY=...
export TURNKEY_API_PRIVATE_KEY=...
export TURNKEY_ORGANIZATION_ID=...
export TURNKEY_WALLET_ADDRESS=0x...

# Or direct key for development
export NARO_WALLET_PRIVATE_KEY=0x...

3. Search flights

That's it. Search with natural language.

# In Claude Code, just type:
/naro search JFK to LAX next Friday, economy

Pricing

USDC on Base. You pay per request. Nothing else.

Endpoint Per request
Search flights POST /api/flights/search
$0.02
Get offer details GET /api/flights/offers/:id
$0.01
Book a flight POST /api/flights/orders
$5.00

What you get back

After payment, a search returns real offers. Here's what an actual response looks like.

{
  "offers": [
    {
      "id": "off_0000B4bbqAOJS7UwLCkGhg",
      "total_amount": "84.99",
      "total_currency": "USD",
      "slices": [{
        "origin": { "iata_code": "JFK", "city_name": "New York" },
        "destination": { "iata_code": "LAX", "city_name": "Los Angeles" },
        "duration": "PT5H30M",
        "segments": [{
          "departing_at": "2026-04-15T08:00:00",
          "arriving_at": "2026-04-15T11:30:00",
          "marketing_carrier": { "name": "Frontier Airlines" },
          "marketing_carrier_flight_number": "4731"
        }]
      }]
    },
    {
      "id": "off_0000B4bbqHVezCXCQ1Ejd2",
      "total_amount": "143.75",
      "total_currency": "USD",
      "slices": [{
        "origin": { "iata_code": "JFK", "city_name": "New York" },
        "destination": { "iata_code": "LAX", "city_name": "Los Angeles" },
        "segments": [{
          "marketing_carrier": { "name": "American Airlines" },
          "marketing_carrier_flight_number": "0300"
        }]
      }]
    }
    // ... up to 50 offers
  ]
}

Try it live

Hit the API right now, no wallet needed. You'll see the 402 response with payment details.