Skip to main content

API Overview

The CheerKeeper API provides programmatic access to events, schedules, teams, and more. Use it to integrate CheerKeeper with your existing systems or build custom applications.

Base URL​

https://admin.cheerkeeper.com/api

All API endpoints are served from this base URL.

Authentication​

Most API endpoints require authentication. CheerKeeper uses JWT (JSON Web Tokens) for API access.

Getting a Token​

curl -X POST https://admin.cheerkeeper.com/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "password": "your-password"}'

Response:

{
"user": {
"id": "user_123",
"email": "you@example.com",
"name": "Your Name"
},
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "eyJhbGciOiJIUzI1NiIs..."
}

Using the Token​

Include the access token in the Authorization header:

curl https://admin.cheerkeeper.com/api/events \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

See Authentication for full details.

API Categories​

The API is organized into these categories:

Events​

MethodEndpointDescription
GET/api/eventsList all events
POST/api/eventsCreate an event
GET/api/events/:idGet event details
PUT/api/events/:idUpdate an event
DELETE/api/events/:idDelete an event
POST/api/events/:id/publishPublish event to mobile

Schedule​

MethodEndpointDescription
GET/api/events/:id/scheduleGet event schedule
POST/api/events/:id/schedule/v2/syncSync schedule changes
GET/api/events/:id/sessionsList sessions
POST/api/events/:id/sessionsCreate session

Performances​

MethodEndpointDescription
GET/api/events/:id/performancesList performances
POST/api/events/:id/performancesAdd performance
PUT/api/events/:id/performances/:perfIdUpdate performance
DELETE/api/events/:id/performances/:perfIdDelete performance

Teams & Organizations​

MethodEndpointDescription
GET/api/teams-orgsList organizations
POST/api/teams-orgsCreate organization
GET/api/teams-orgs/:id/teamsList teams in org
POST/api/teams-orgs/:id/teamsAdd team to org

Users​

MethodEndpointDescription
GET/api/company/usersList company users
POST/api/company/users/inviteInvite user
PUT/api/company/users/:id/roleUpdate user role
DELETE/api/company/users/:idRemove user

Import​

MethodEndpointDescription
POST/api/spreadsheet/uploadUpload Excel/CSV
POST/api/uploadsUpload PDF for AI extraction
GET/api/uploads/:id/statusCheck extraction status

Request Format​

Content Type​

All requests should use Content-Type: application/json.

Request Body​

{
"name": "Spring Championship 2025",
"startDate": "2025-03-15",
"endDate": "2025-03-16",
"location": {
"venue": "Convention Center",
"address": "123 Main St",
"city": "Orlando",
"state": "FL",
"zip": "32801"
}
}

Response Format​

Success Response​

{
"success": true,
"data": {
"id": "event_123",
"name": "Spring Championship 2025",
"...": "..."
}
}

Error Response​

{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Event name is required",
"details": {
"field": "name"
}
}
}

HTTP Status Codes​

CodeMeaning
200Success
201Created
400Bad Request - Invalid input
401Unauthorized - Missing/invalid token
403Forbidden - Insufficient permissions
404Not Found
409Conflict - Version mismatch or duplicate
422Unprocessable - Business logic error
500Server Error

Rate Limiting​

API requests are rate limited:

PlanRequests/minute
Starter60
Professional120
Enterprise300

Rate limit headers are included in responses:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1625097600

Versioning​

The API is versioned via the URL path:

  • v1 (current): /api/events
  • v2 (schedule sync): /api/events/:id/schedule/v2/sync

We maintain backward compatibility within major versions.

Pagination​

List endpoints support pagination:

GET /api/events?page=1&limit=20

Response includes pagination metadata:

{
"data": [...],
"pagination": {
"page": 1,
"limit": 20,
"total": 150,
"totalPages": 8
}
}

Filtering​

Filter results with query parameters:

# Events by date range
GET /api/events?startDate=2025-01-01&endDate=2025-12-31

# Performances by division
GET /api/events/:id/performances?division=Senior

# Search by name
GET /api/events?search=championship

Webhooks​

Register webhooks to receive real-time notifications:

POST /api/webhooks
{
"url": "https://your-server.com/webhook",
"events": ["schedule.updated", "event.published"]
}

See Webhooks for full documentation.

SDKs and Libraries​

Official libraries coming soon:

  • JavaScript/TypeScript
  • Python
  • PHP

Getting Help​

Next Steps​