Duffel API alternative: the price question, not the booking stack
Duffel exists to sell tickets — offers, orders, seat maps, payments, an account and an approval before any of it. A lot of people reach for it to answer something much smaller: is this fare good, and should I buy now. Piratefly answers only that, over price history we observe and store ourselves, with a free tier and no account. If you need to issue a ticket, you still need Duffel or an equivalent.
What Piratefly does not do
No live availability, no offers, no orders, no seat maps, no payments, no ancillaries, no PNRs. We are not affiliated with Duffel and we do not resell their data. What we have is a long observation history of real fares on real routes, and a verdict built on it.
What maps across, and what does not
| What you used Duffel for | Piratefly |
|---|---|
| Offer requests and live availability | Not covered. Piratefly never touches inventory and cannot tell you whether a seat exists right now. |
| Orders, payments, ticketing | Not covered, and not planned. Booking is a different business with a different licence. |
| Is this fare a good one for this route? | GET /v1/analisi returns a percentile over that route’s own observed history, plus a verdict (buy / wait / your call). |
| When is this route cheapest? | The same response ranks months by median fare, with the sample size behind each one. |
| How far ahead should a traveller book? | anticipoConsigliato is the booking window that has historically come out cheapest on that route. |
| Access: account, approval, per-call pricing | 30 requests/day per IP with no key at all; $9.99/month removes the cap, card or USDC, key issued immediately. |
One call, no key
Cities by name, not IATA codes. This is a real response from the live API:
curl "https://next.piratefly.com/v1/analisi?origine=Stockholm&destinazione=Rome" {
"origine": "Stockholm",
"destinazione": "Rome",
"valuta": "EUR",
"verdetto": {
"livello": "ottimo",
"percentile": 9,
"medianaCent": 5600,
"minimoCent": 2500,
"campione": 23
},
"mesiPerConvenienza": [
{ "mese": 8, "medianaCent": 5900, "campione": 33 },
{ "mese": 10, "medianaCent": 8900, "campione": 74 }
],
"anticipoConsigliato": { "daGiorni": 56, "aGiorni": 83, "medianaCent": 5800 },
"osservazioni": 169
} Reading the response
percentile is where today’s cheapest fare sits in that route’s own history (9 = cheaper than 91% of everything we have seen), campione is how many observations that verdict rests on, mesiPerConvenienza ranks months by median fare, and anticipoConsigliato is the booking window that has historically come out cheapest. Prices are cents, EUR.
Try it, then decide
The free tier needs no account: paste the URL above in a browser. When 30 calls a day stops being enough, the Pro plan is on the API page.
Can Piratefly replace Duffel?
Only if all you needed was the price question. If you issue tickets, you need a booking API and Piratefly sits next to it, telling your user whether today is a good day to buy.
Do I need an account or an approval to start?
No. The free tier is 30 requests per day per IP with no key and no signup. Pro is $9.99/month for no daily cap, paid by card on Stripe or in USDC on Solana, with the key handed back immediately.
Where does the price history come from?
We observe real fares on the routes we cover, continuously, and store every observation. A verdict is never shown on fewer than 8 observations: ask for a route we do not have and you get an honest empty answer, not an invented one.