Live flight status and tracking. Pass ident as an airline flight designator (ICAO "UAL1" or IATA "UA1") or an aircraft tail number; returns recent and upcoming instances of that flight with origin/destination airports (ICAO/IATA/name/city/timezone), status, cancellation/diversion flags, scheduled vs estimated vs actual gate and runway times (out/off/on/in), departure and arrival delays, en-route progress percent, aircraft type and registration, and route distance. limit controls how many instances return (default 5, newest first by scheduled departure). Real-time operational data — answer "where is this flight, is it delayed, when does it land" with live values. For aircraft registry data see /api/aircraft/lookup; for airport metadata see /api/airport/lookup.
/api/flight/statusPAYMENT-SIGNATURE.The status API is a pay-per-call flight endpoint built for AI agents and autonomous software. Live flight status and tracking.
There is no signup and no API key. An agent (or any HTTP client) hits the endpoint, receives an x402 "402 Payment Required" challenge, signs a sub-cent USDC payment on Base or Solana, and retries — the data comes back on the paid request. That makes it a drop-in status data source for an agent tool-use loop, an MCP host, or a backend that needs flight data on demand without onboarding to yet another vendor portal.
| Name | Type | Description |
|---|---|---|
identrequired | string | Flight designator (ICAO UAL1 or IATA UA1) or aircraft tail number. min 2 chars · max 12 chars · match ^[A-Za-z0-9-]+$ |
identType | string | one of: designator | registration | fa_flight_id |
limit | integer | min 1 · max 15 |
# 1. Probe with no auth → 402 envelope with PaymentRequirements curl -sS 'https://2s.io/api/flight/status?ident=xx&identType=designator&limit=5' # 2. Sign + retry with PAYMENT-SIGNATURE: curl -sS 'https://2s.io/api/flight/status?ident=xx&identType=designator&limit=5' \ -H 'PAYMENT-SIGNATURE: <base64-json-payload>' # Or use the canonical runner (handles probe → sign → retry): # EVM_PRIVATE_KEY=0x... node --env-file=.env.local \ # --experimental-strip-types scripts/x402-pay.ts \ # 'https://2s.io/api/flight/status?ident=xx&identType=designator&limit=5'
import { TwoS } from '@2sio/sdk'
const client = new TwoS({
privateKey: process.env.EVM_PRIVATE_KEY as `0x${string}`,
})
const result = await client.flight.status({
"ident": "xx",
"identType": "designator",
"limit": 5
})
console.log('endpoint:', result.endpoint)
console.log('cost:', result.costUsd, 'USDC')
console.log('tx:', result.settlement?.txHash)
console.log('data:', result.data)import os
from twosio import TwoS
client = TwoS(private_key=os.environ["EVM_PRIVATE_KEY"])
result = client.flight.status(ident="xx", identType="designator", limit=5)
print("endpoint:", result.endpoint)
print("cost:", result.cost_usd, "USDC")
print("tx:", (result.settlement or {}).get("tx_hash"))
print("data:", result.data)// 1. Add @2sio/mcp to your MCP host config (Claude Desktop example below).
// EVM_PRIVATE_KEY funds x402 payments per call.
// claude_desktop_config.json
{
"mcpServers": {
"2sio": {
"command": "npx",
"args": ["-y", "@2sio/mcp"],
"env": { "EVM_PRIVATE_KEY": "0x..." }
}
}
}
// 2. Once the server is running, agents call this tool via standard MCP:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "flight.status",
"arguments": {
"ident": "xx",
"identType": "designator",
"limit": 5
}
}
}| Field | Type | Description |
|---|---|---|
ok | boolean | one of: true |
items | array | |
total | integer | Total matching rows upstream; null when unknown. |
source | object | |
meta | object |
{
"ok": true,
"items": [
{
"ident": "example",
"identIata": "example",
"operator": "example",
"flightNumber": "example",
"registration": "example",
"aircraftType": "example",
"origin": {
"icao": "example",
"iata": "example",
"name": "example",
"city": "example",
"timezone": "example"
},
"destination": {
"icao": "example",
"iata": "example",
"name": "example",
"city": "example",
"timezone": "example"
},
"status": "example",
"cancelled": false,
"diverted": false,
"scheduledOut": "example",
"estimatedOut": "example",
"actualOut": "example",
"actualOff": "example",
"actualOn": "example",
"scheduledIn": "example",
"estimatedIn": "example",
"actualIn": "example",
"progressPercent": 1,
"departureDelaySec": 1,
"arrivalDelaySec": 1,
"routeDistanceKm": 1
}
],
"total": 1,
"source": {
"provider": "example",
"url": "example",
"license": "example"
},
"meta": {
"ident": "example"
}
}