For integrators
Stelno Partner API
One OAuth API for EFBs, terminal vendors, and Stelno's own apps.
Our own pilot app is customer #1 of this API — if you can't do something through it, neither can we.
Integrate in three steps
From zero to a pilot pumping fuel: an authorization redirect, a token exchange, and one authenticated POST.
- 01Link
Send the pilot through OAuth 2.0 + PKCE
Redirect to Stelno's authorization endpoint with a S256 code challenge. The pilot signs in, reviews the scopes, and lands back on your redirect URI with a one-time code.
GET https://stelnopay.com/oauth/authorize ?client_id=your-app &redirect_uri=https://your.app/callback &scope=profile:read aircraft:read fuel_sessions:read fuel_sessions:write receipts:read airports:read &state=<random> &code_challenge=<base64url(SHA-256(verifier))> &code_challenge_method=S256 - 02Token
Exchange the code for an access token
Form-encoded, no client secret required for public clients — the PKCE verifier proves it was you who started the flow.
curl -X POST \ https://htnolhvggbtvvcqfcpfg.supabase.co/functions/v1/partner/oauth/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d grant_type=authorization_code \ -d client_id=your-app \ -d code=$CODE \ -d code_verifier=$VERIFIER \ -d redirect_uri=https://your.app/callback # → { "access_token": "...", "refresh_token": "...", # "token_type": "Bearer", "expires_in": 3600 } - 03Fuel
Start a fuel session and show the pump code
One authenticated call returns the 6-digit code the pilot punches into the pump, plus a capacity warning when the ceiling exceeds usable tank volume.
curl -X POST \ https://htnolhvggbtvvcqfcpfg.supabase.co/functions/v1/partner/v1/fuel_sessions \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "pump_id": "…", "ceiling_cents": 15000, "n_number": "N528DP" }' # 201 Created # { # "session_id": "0f3c…", # "code": "418206", # "expires_in_seconds": 90, # "capacity_warning": null # }
Built for trust at the pump
Signed webhooks
Every event is signed so your server can trust it without a callback round-trip.
Stelno-Signature: t=<ts>,
v1=HMAC_SHA256(secret, t + "." + body)Signed receipts
Receipts carry an HMAC over a canonical receipt string. Verify them yourself, or post them back.
POST /v1/receipts/verify
{ "receipt": { … }, "signature": "…" }
→ { "valid": true, "kid": "stelno-rcpt-1" }Live fueling
Follow the nozzle in real time while fuel is flowing, then settle on the captured total.
GET /v1/fuel_sessions/{id} # ~1/s
→ { "status": "authorized",
"dispensed_gal_live": 12.4 }Route planning
Fuel-aware routing across the US airport database — compare the fastest line against the cheapest stop.
POST /v1/route_plans
{ "origin": "KPAO", "destination": "KTRK", … }
→ { "fastest": { … }, "cheapest": { … } }API reference
Rendered live from the published OpenAPI description — always in sync with the sandbox.
Loading the live OpenAPI reference…