Your first 5 minutes with Ringside
5 minYou already know how to call OpenAI. Ringside is the same call with the host swapped, so the model behind it stops being a lock-in decision and starts being a dropdown. Point your existing client at one base URL and you can reach Claude, Llama, GPT and a dozen others without touching the rest of your code. The interesting part is what that one seam buys you: once every call runs through Ringside, you can tag it, cap it, cache it and bill it, none of which the raw provider APIs let you do. This first walk-through is just the seam. Everything else clips onto it.
- • A Ringside account (sign up at ringside.fightclub.pro/register)
- • curl on your machine (already installed on macOS + Linux)
- • Python 3.9+ if you want to run Step 3
- • 5 minutes and a terminal
Get an API key
// mint a Bearer token
Open the Ringside dashboard at ringside.fightclub.pro/app/api-keys and click Create key. Copy the token immediately. It's shown exactly once.
Export it in your shell as FC_API_KEY so every call in this tutorial picks it up automatically.
Bearer tokens authenticate server-to-server. For browser calls you'll later mint short-lived Client Tokens off one of these. For now, keep this server-side.
Make your first call
// curl /v1/chat/completions
Ringside speaks OpenAI's wire format. This request would be identical against OpenAI's endpoint. Only the host changes.
The response echoes the standard chat-completion envelope: an id, the assistant message, and a usage block with token counts.
Model refs need a prefix: fc:<provider>/<model> for a direct model (e.g. fc:openai/gpt-4o-mini), slot:<alias> for a dev-defined alias, or match:<selector> for a declarative pick. A bare name like gpt-4o returns 400 invalid_model_ref.
Swap to the OpenAI SDK
// point base_url at Ringside
No Ringside SDK needed. Any OpenAI-compatible client works by pointing base_url at https://api.fightclub.pro/v1.
The same pattern works with the Node SDK, LangChain, LlamaIndex, Vercel AI SDK, and every other library that accepts a custom base URL.
Zero-line migration: if your code already uses the OpenAI SDK, changing base_url (and the key) is the entire diff. You can flip it back at any time.
Tag the call, see it in the dashboard
// add FC-Customer header
Attach an FC-Customer header to any call and Ringside creates the Customer on the fly if it doesn't already exist.
Then hit /v1/customers/<id> to read the customer record back. It carries lifetime totals: lifetime_spend_usd, monthly_budget_usd and wallet_balance_usd. For spend over a period rather than for all time, call /v1/customers/<id>/usage, which buckets by day. Open the dashboard to see the same numbers rendered in the UI.
FC-Customer is your unit of metering. Attach it to every call you make on behalf of a real end-user and you get per-customer spend, budgets, and billable amounts for free. Note the split: the customer record holds lifetime totals, and /usage answers 'what did they spend this month'.
You built it.
You have an API key, a working curl + SDK call, and a tagged Customer whose spend you can see in the dashboard. Everything else in Ringside (budgets, webhooks, assistants, batches) is layered on top of exactly this primitive.