Developer Portal
Build powerful integrations with our REST API. Access students, parents, attendance, billing, classrooms, reports, messaging, school settings, and other core childcare operations 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://centrecareos.com/api/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 |
| parents:read | Read parent/family profiles and linked students | Read |
| parents:write | Create, update, delete, and link parent 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 |
| billing:write | Create invoices for the current school | Write |
| staff:read | Read staff profiles and schedules | Read |
| staff:write | Update staff profile fields and status | Write |
| rooms:read | Read classroom/room data and capacity | Read |
| rooms:write | Create, update, and delete room records | Write |
| messages:read | Read conversations, contacts, mute status, and unread counts | Read |
| messages:write | Create conversations, send messages, and update mute/read state | Write |
| waitlist:read / waitlist:write | Manage waitlist entries and admissions intake | Read / Write |
| calendar:read / calendar:write | Manage school calendar events | Read / Write |
| schedules:read / schedules:write | Manage staff schedules and time-off requests | Read / Write |
| menus:read / menus:write | Manage menus and meal plans | Read / Write |
| daily_reports:read / daily_reports:write | Manage daily reports and reporting summaries | Read / Write |
| lesson_plans:read / lesson_plans:write | Manage lesson plans and classroom planning | Read / Write |
| photos:read / photos:write | Manage photos, galleries, and parent sharing | Read / Write |
| incidents:read / incidents:write | Manage incident reports and follow-up actions | Read / Write |
| school:read / school:write | Read and update school profile data | Read / Write |
| settings:read / settings:write | Read and update school-level operational settings | Read / Write |
| reports:read | Generate and read analytics reports | Read |
Manage student records and enrollment
/api/studentsList all students in your school
Required scope: students:read
/api/studentsCreate a new student record
Required scope: students:write
/api/studentsUpdate a student record by passing the student id in the JSON body
Required scope: students:write
/api/students/:idGet a specific student record by path ID
Required scope: students:read
/api/students/:idUpdate a student record by path ID
Required scope: students:write
/api/students/:idRemove a student record by path ID
Required scope: students:write
/api/students/bulk-assign-roomAssign multiple students to a room in one request
Required scope: students:write
Track check-ins and check-outs
/api/attendanceList attendance records with optional date filtering
Required scope: attendance:read
/api/attendance/:idGet a specific attendance record
Required scope: attendance:read
/api/attendanceRecord a student check-in with action: "check_in"
Required scope: attendance:write
/api/attendanceRecord a student check-out with action: "check_out"
Required scope: attendance:write
Access invoices and payment information
/api/billing/invoicesList all invoices with optional status and student filtering
Required scope: billing:read
/api/billing/invoices/:idGet a specific invoice with payment history
Required scope: billing:read
/api/billing/invoicesCreate a new invoice
Required scope: billing:write
/api/billing/paymentsList payment records with optional invoice filtering
Required scope: billing:read
/api/billing/overviewGet billing overview metrics for the current school
Required scope: billing:read
/api/billing/plansList billing plans and plan metadata
Required scope: billing:read
/api/billing/plansCreate a billing plan
Required scope: billing:write
/api/billing/plans/:idUpdate a billing plan
Required scope: billing:write
/api/billing/plans/:idArchive a billing plan
Required scope: billing:write
/api/billing/student-plansList active student-plan assignments
Required scope: billing:read
/api/billing/student-plansAssign a billing plan to a student
Required scope: billing:write
/api/billing/student-plans/:idDeactivate a student-plan assignment
Required scope: billing:write
/api/billing/studentsList billing summary rows by student
Required scope: billing:read
/api/billing/payment-methodsList stored payment-method summaries by student
Required scope: billing:read
/api/billing/settingsGet school billing settings
Required scope: billing:read
/api/billing/settingsUpdate school billing settings
Required scope: billing:write
Classroom and capacity management
/api/roomsList all classrooms with capacity and assigned staff
Required scope: rooms:read
/api/roomsCreate a new room
Required scope: rooms:write
/api/rooms/:idGet a specific room with student and staff assignments
Required scope: rooms:read
/api/roomsUpdate a room record by passing the room id in the JSON body
Required scope: rooms:write
/api/rooms?id=:idRemove a room record by query string ID
Required scope: rooms:write
Staff profiles and schedules
/api/staffList all staff members
Required scope: staff:read
/api/staff/:idGet staff member details
Required scope: staff:read
/api/staff/:idUpdate staff profile fields such as name, phone, role, or status
Required scope: staff:write
Parent records and family linking workflows
/api/parentsList parent records in the current school
Required scope: parents:read
/api/parentsCreate a parent record
Required scope: parents:write
/api/parents/:idGet a parent with linked students
Required scope: parents:read
/api/parents/:idUpdate a parent record
Required scope: parents:write
/api/parents/linkLink a parent to a student
Required scope: parents:write
/api/parents/link?studentId=:id&parentId=:idRemove a parent-student link
Required scope: parents:write
Admissions, schedules, daily execution, and school settings
/api/waitlist for waitlist entry list, create, update, and delete.
/api/calendar/events for school calendar event management.
/api/schedules and /api/schedules/time-off for staff schedules and time off.
/api/menus for menu planning.
/api/daily-reports and /api/daily-reports/summary for classroom report operations.
/api/lesson-plans for classroom planning workflows.
/api/school and /api/settings for school profile and configuration changes.
Messaging, photos, incidents, and room helper endpoints
/api/conversations, /api/conversations/:id/messages, /api/conversations/contacts, and related read/mute/unread endpoints for school messaging.
/api/photos, /api/photos/share, /api/photos/students, and /api/photos/parents for photo management and parent sharing.
/api/incident-reports and /api/incident-reports/:id for incident reporting workflows.
/api/rooms/:id/students, /api/rooms/:id/students-with-parents, /api/rooms/staff, and /api/rooms/staff/assignments for room assignment automation.
To ensure fair usage and maintain service quality, API requests are rate-limited. Rate limits are applied per API key.
Default limit
Enterprise API keys default to 1,000 requests per minute.
The limit is enforced per key and returned on each API-key response via rate-limit headers.
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": "Missing required scope: students:write",
"code": "INVALID_SCOPE"
}Official SDKs for JavaScript/Node.js and Python. Zero-dependency single-file libraries that you can drop into any project.
v1.2.0 · Zero dependencies
Works in Node.js (18+) and modern browsers. Uses native fetch API.
Download SDKv1.2.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://centrecareos.com/sdk/centrecareos.js
# Or use as an ES module in HTML
<script type="module">
import { CentreCareOS } from 'https://centrecareos.com/sdk/centrecareos.js';
const client = new CentreCareOS('ccapi_your_api_key_here');
</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();
const overview = await client.billing.getOverview();
// Rooms
const rooms = await client.rooms.list();
const room = await client.rooms.get('room_id');
await client.rooms.update('room_id', { capacity: 18 });
// Staff
const staff = await client.staff.list();
await client.staff.update('staff_id', { status: 'ACTIVE' });// Parents and family links
const parents = await client.parents.list();
await client.parents.link('student_id', 'parent_id', 'Mother', true);
// Messaging
const conversations = await client.conversations.list();
await client.conversations.sendMessage('conversation_id', {
content: 'Attendance sync completed successfully.',
});
// Operations
const waitlist = await client.waitlist.list();
const reportSummary = await client.dailyReports.summary({ date: '2026-02-14' });
const settings = await client.settings.get();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://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()
overview = client.billing.get_overview()
# Rooms
rooms = client.rooms.list()
room = client.rooms.get("room_id")
client.rooms.update("room_id", {"capacity": 18})
# Staff
staff = client.staff.list()
client.staff.update("staff_id", {"status": "ACTIVE"})# Parents and family links
parents = client.parents.list()
client.parents.link("student_id", "parent_id", relationship="Mother", is_primary=True)
# Messaging
conversations = client.conversations.list()
client.conversations.send_message("conversation_id", {
"content": "Attendance sync completed successfully."
})
# Operations
waitlist = client.waitlist.list()
report_summary = client.daily_reports.summary(date="2026-02-14")
settings = client.settings.get()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.