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