Developer Portal
Build powerful integrations with our REST API. Access student data, attendance records, billing information, and more programmatically.
The CentreCareOS API allows you to programmatically access and manage your childcare center's data. With our REST API, you can build custom integrations, automate workflows, and sync data with your existing systems.
Enterprise Plan Required
API access is available exclusively on the Enterprise plan.View pricing
curl -X GET "https://www.centrecareos.com/api/v1/students" \ -H "Authorization: Bearer ccapi_your_api_key_here" \ -H "Content-Type: application/json"
All API requests must include your API key in the Authorization header using the Bearer scheme. API keys can be created and managed from yourAPI Settingspage.
All CentreCareOS API keys begin with the prefix ccapi_ followed by 32 alphanumeric characters.
Authorization: Bearer ccapi_your_api_key_here
Security Best Practices
Scopes define what data and actions your API key can access. When creating an API key, select only the scopes required for your integration to follow the principle of least privilege.
| Scope | Description | Access |
|---|---|---|
| students:read | Read student profiles, enrollment status, and demographics | Read |
| students:write | Create and update student records | Write |
| attendance:read | Read check-in/check-out records and attendance history | Read |
| attendance:write | Record check-ins and check-outs | Write |
| billing:read | Read invoices, payments, and billing history | Read |
| staff:read | Read staff profiles and schedules | Read |
| rooms:read | Read classroom/room data and capacity | Read |
| reports:read | Generate and read analytics reports | Read |
| messages:read | Read message history and conversations | Read |
| messages:write | Send messages to parents and staff | Write |
Manage student records and enrollment
/api/v1/studentsList all students in your school
Required scope: students:read
/api/v1/students/:idGet a specific student by ID
Required scope: students:read
/api/v1/studentsCreate a new student record
Required scope: students:write
/api/v1/students/:idUpdate a student record
Required scope: students:write
Track check-ins and check-outs
/api/v1/attendanceList attendance records with optional date filtering
Required scope: attendance:read
/api/v1/attendance/check-inRecord a student check-in
Required scope: attendance:write
/api/v1/attendance/check-outRecord a student check-out
Required scope: attendance:write
Access invoices and payment information
/api/v1/invoicesList all invoices with status filtering
Required scope: billing:read
/api/v1/invoices/:idGet invoice details including line items
Required scope: billing:read
/api/v1/paymentsList payment transactions
Required scope: billing:read
Classroom and capacity management
/api/v1/roomsList all classrooms with capacity and assigned staff
Required scope: rooms:read
/api/v1/rooms/:id/studentsGet students currently assigned to a room
Required scope: rooms:read
Staff profiles and schedules
/api/v1/staffList all staff members
Required scope: staff:read
/api/v1/staff/:idGet staff member details
Required scope: staff:read
Communication with parents and staff
/api/v1/messagesList message threads
Required scope: messages:read
/api/v1/messagesSend a new message
Required scope: messages:write
To ensure fair usage and maintain service quality, API requests are rate-limited. Rate limits are applied per API key.
| Plan | Requests/Hour | Requests/Day |
|---|---|---|
| Enterprise | 1,000 | 10,000 |
Every API response includes headers indicating your current rate limit status:
When you exceed your rate limit, the API will return a 429 Too Many Requests response. Wait until the reset time before making additional requests.
The API uses conventional HTTP response codes to indicate the success or failure of requests.
| Code | Meaning |
|---|---|
| 200 | Success - Request completed successfully |
| 201 | Created - Resource created successfully |
| 400 | Bad Request - Invalid parameters or malformed request |
| 401 | Unauthorized - Invalid or missing API key |
| 403 | Forbidden - API key lacks required scope |
| 404 | Not Found - Resource does not exist |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Error - Something went wrong on our end |
{
"error": {
"code": "INVALID_SCOPE",
"message": "Your API key does not have the required scope: students:write",
"status": 403
}
}Official SDKs for JavaScript/Node.js and Python. Zero-dependency single-file libraries that you can drop into any project.
v1.0.0 · Zero dependencies
Works in Node.js (18+) and modern browsers. Uses native fetch API.
Download SDKv1.0.0 · Requires: requests
Python 3.7+ compatible. Uses the requests library for HTTP.
Download SDKDownload centrecareos.js and add it to your project, or use it via a script tag:
# Copy to your project curl -o centrecareos.js https://www.centrecareos.com/sdk/centrecareos.js # Or use in HTML <script src="https://www.centrecareos.com/sdk/centrecareos.js"></script>
import { CentreCareOS } from './centrecareos.js';
const client = new CentreCareOS('ccapi_your_api_key_here');// List all students
const students = await client.students.list();
console.log(students);
// Get a specific student
const student = await client.students.get('student_id_here');
// Create a student
const newStudent = await client.students.create({
firstName: 'Emma',
lastName: 'Johnson',
dateOfBirth: '2021-03-15',
roomId: 'room_id_here',
});
// Update a student
await client.students.update('student_id_here', {
firstName: 'Emma',
lastName: 'Smith',
});// Check in a student
await client.attendance.checkIn({
studentId: 'student_id_here',
note: 'Dropped off by parent',
});
// Check out a student
await client.attendance.checkOut({
studentId: 'student_id_here',
});
// List today's attendance
const records = await client.attendance.list({
date: '2026-02-14',
});// Billing
const invoices = await client.billing.listInvoices({ status: 'pending' });
const invoice = await client.billing.getInvoice('invoice_id');
const payments = await client.billing.listPayments();
// Rooms
const rooms = await client.rooms.list();
const room = await client.rooms.get('room_id');
// Staff
const staff = await client.staff.list();
// Messages
const messages = await client.messages.list({ threadId: 'thread_id' });
await client.messages.send({
threadId: 'thread_id',
content: 'Hello from the API!',
});import { CentreCareOS, CentreCareOSError } from './centrecareos.js';
const client = new CentreCareOS('ccapi_your_api_key_here');
try {
const students = await client.students.list();
} catch (err) {
if (err instanceof CentreCareOSError) {
console.error('API Error:', err.message);
console.error('Status:', err.status); // e.g. 403
console.error('Code:', err.code); // e.g. "INVALID_SCOPE"
}
}
// Check rate limit status after any request
console.log('Remaining:', client.rateLimit.remaining);
console.log('Limit:', client.rateLimit.limit);Download centrecareos.py and add it to your project. Requires the requests library.
# Install the requests dependency pip install requests # Download the SDK curl -o centrecareos.py https://www.centrecareos.com/sdk/centrecareos.py
from centrecareos import CentreCareOS
client = CentreCareOS("ccapi_your_api_key_here")# List all students
students = client.students.list()
print(students)
# Get a specific student
student = client.students.get("student_id_here")
# Create a student
new_student = client.students.create({
"firstName": "Emma",
"lastName": "Johnson",
"dateOfBirth": "2021-03-15",
"roomId": "room_id_here",
})
# Update a student
client.students.update("student_id_here", {
"firstName": "Emma",
"lastName": "Smith",
})# Check in a student
client.attendance.check_in(
student_id="student_id_here",
note="Dropped off by parent",
)
# Check out a student
client.attendance.check_out(student_id="student_id_here")
# List today's attendance
records = client.attendance.list(date="2026-02-14")# Billing
invoices = client.billing.list_invoices(status="pending")
invoice = client.billing.get_invoice("invoice_id")
payments = client.billing.list_payments()
# Rooms
rooms = client.rooms.list()
room = client.rooms.get("room_id")
# Staff
staff = client.staff.list()
# Messages
messages = client.messages.list(thread_id="thread_id")
client.messages.send(
thread_id="thread_id",
content="Hello from the API!",
)from centrecareos import CentreCareOS, CentreCareOSError
# Use as a context manager for automatic cleanup
with CentreCareOS("ccapi_your_api_key_here") as client:
try:
students = client.students.list()
except CentreCareOSError as e:
print(f"API Error: {e}")
print(f"Status: {e.status}") # e.g. 403
print(f"Code: {e.code}") # e.g. "INVALID_SCOPE"
# Check rate limit status after any request
print(f"Remaining: {client.rate_limit.remaining}")
print(f"Limit: {client.rate_limit.limit}")Need help with your integration? Our developer support team is here to assist.