Getting started
Quickstart
Make a real request in under a minute with the public demo key, then switch to your own key. Using a coding agent? Paste Add Cito sports data to my app: citoapi.com/SKILL.md and it does these steps for you.
1. Call the API with the demo key
No signup needed. This asks for the next CS2 match and works right now.
Bash
curl "https://api.citoapi.com/api/v1/cs2/matches/upcoming?limit=1" \
-H "x-api-key: pk_demo_cito_live_a06c129e0a9ce1c39c3035bd187541c4"You get back:
JSON
{
"success": true,
"data": [
{
"id": "cs2-match-2399865",
"eventName": "CCT 2026 South America Series 7",
"startsAt": "2026-10-21T22:10:00.000Z",
"bestOf": 3,
"status": "upcoming",
"team1Name": "Zetta",
"team2Name": "LOS NINOS"
}
],
"meta": { "...": "pagination and request details" }
}The demo key is read-only and allows 50 requests a day per IP across every game's GET endpoints. Live streams, WebSockets and webhooks need your own key.
2. Get your own key
- 1
Sign up free
Create an account: 500 requests a month, no card.
- 2
Copy your key
Open API keys in the dashboard. Keys start with
cito_and work the moment they're created. - 3
Store it as an environment variable
Env# .env (keep it out of git) CITO_API_KEY=cito_your_key_here
3. Call it from your server
Send x-api-key from a backend, bot or script. Never ship the key to a browser or mobile app.
Code
// app/api/upcoming/route.ts
export async function GET() {
const res = await fetch("https://api.citoapi.com/api/v1/cs2/matches/upcoming?limit=5", {
headers: { "x-api-key": process.env.CITO_API_KEY! },
next: { revalidate: 60 },
});
return Response.json(await res.json());
}Good to know
- Response shape
- Every response is
{ success, data, meta }. Errors returnsuccess: falsewith anerror.codesuch asGAME_NOT_INCLUDEDorRATE_LIMIT_EXCEEDED. - IDs
- Take ids and slugs from list or search results (cs2-match-2399865, ufc-333). Never build them by hand.
- Live delay
- Live endpoints run about 60 seconds behind on Free and entry plans and in real time on Pro and above. The
X-Cito-Data-Delay-Secondsheader tells you which you got. - Caching
- Schedules, results and profiles change slowly. Cache them for a minute or more and save your allowance for live data.
Next steps
AuthenticationKey formats, headers, rotation and auth errors.Rate limits & plansPer-minute and monthly limits, and what a 429 means.ErrorsEvery error code and how to handle it.WebhooksGet match and fight events pushed to your server.Live streamsReal-time updates over WebSockets and server-sent events.AI agents & MCPConnect Claude, ChatGPT or Cursor to the same data.