Repository navigation
POST /v1/recommend advises a channel group and a bid for a transaction
described before it exists: program, compute units, cheap or fast, and a
target window in slots. Advice is priced from the last hour of real landings,
carries the age of its data, is marked stale rather than silently served old,
and says when a cheaper group exists that FairLane can only observe, not send
through. Access keys are self-service, with no account and no personal data.
The same advice is available from the @fairlanerouter/sdk package.
Measured on the deployed product:
- SC-004, answer to a recommendation request (p95) — 186 ms against a budget
of 300 ms (2026-09-28). 100 keyed requests, four intents in turn, all 200;
p50 125 ms, of which about 115 ms is the network to the host itself. - SC-012, issuing an access key with no personal data — 1.54 s against a
budget of 10 s (2026-09-24), worst of six runs; empty request body. - FR-021, per-key limit of 120 per minute — 132 let through in 6.1 s out of
140 sent in bursts: 120 of capacity plus 12 of refill, the rest 429 with
Retry-After (2026-09-25). - FR-047, keyless limit of 10 per minute — exactly 10 after draining and
waiting a minute; a forged X-Forwarded-For gives no fresh quota (2026-09-25). - FR-048, revoking a key keeps its counters — usage row 3 before, 3 after,
3 after a repeated revoke (2026-09-25).
Not proven here, and this has to be said out loud:
- Advice that nobody followed saves nothing. SC-005 (savings through the
recommended channel) and SC-006 (landing within the window in fast mode)
need FairLane's own sends and stay unmeasured until M3. - For the same reason landProbability is null in every answer: passive
collection sees what landed, not when it was sent. - "cheap" and "fast" are bid levels inside a group — the median and the 90th
percentile of recent landers — not measured landing speeds.
Dashboard: https://fairlanerouter.github.io/FairLane-Router/
API: https://fairlane-api.onrender.com
SDK: packages/sdk/README.md