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.
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.
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.
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.
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.
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.
Your agent makes a request and pays a few cents in USDC. That's it. The payment is the only authentication you need.
Live pricing and availability from major carriers. The same data the booking sites use.
If your agent has a wallet with USDC, it can start searching right now. Nothing to sign up for.
Standard HTTP, paid with x402. Your agent's existing wallet and SDK just work.
POST to the Naro API with your search parameters. Origin, destination, dates, cabin class.
The response includes the price and where to send payment. $0.02 for a search, paid in USDC on Base.
The x402 SDK signs the payment and retries the request automatically. Your code doesn't change.
You get back real offers with prices, carriers, connections, and availability. Same data the booking sites show.
npm install naro-flights
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);
const offers = await naro.search({
origin: "JFK",
destination: "LAX",
departure_date: "2026-04-15",
});
console.log(offers[0].total_amount); // "$84.99"
One file, and your agent can search flights.
mkdir -p .claude/skills/naro
curl -s https://naro.com.ai/SKILL.md -o .claude/skills/naro/SKILL.md
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...
That's it. Search with natural language.
# In Claude Code, just type:
/naro search JFK to LAX next Friday, economy
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 |
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
]
}
Hit the API right now, no wallet needed. You'll see the 402 response with payment details.