Developer Portal

CentreCareOS API Documentation

Build powerful integrations with our REST API. Access students, parents, attendance, billing, classrooms, reports, messaging, school settings, and other core childcare operations programmatically.

Getting Started

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

Base URL

https://centrecareos.com/api

Quick Example

cURL
curl -X GET "https://centrecareos.com/api/students" \
  -H "Authorization: Bearer ccapi_your_api_key_here" \
  -H "Content-Type: application/json"

Authentication

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.

API Key Format

All CentreCareOS API keys begin with the prefix ccapi_ followed by 32 alphanumeric characters.

ccapi_AbCdEfGhIjKlMnOpQrStUvWxYz123456

Authorization Header

Authorization: Bearer ccapi_your_api_key_here

Security Best Practices

  • Never expose your API key in client-side code or public repositories
  • Store API keys in environment variables or secure vaults
  • Rotate your API keys periodically
  • Use the minimum required scopes for each key
  • Set expiration dates for keys when possible

API Scopes

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.

ScopeDescriptionAccess
students:readRead student profiles, enrollment status, and demographicsRead
students:writeCreate and update student recordsWrite
parents:readRead parent/family profiles and linked studentsRead
parents:writeCreate, update, delete, and link parent recordsWrite
attendance:readRead check-in/check-out records and attendance historyRead
attendance:writeRecord check-ins and check-outsWrite
billing:readRead invoices, payments, and billing historyRead
billing:writeCreate invoices for the current schoolWrite
staff:readRead staff profiles and schedulesRead
staff:writeUpdate staff profile fields and statusWrite
rooms:readRead classroom/room data and capacityRead
rooms:writeCreate, update, and delete room recordsWrite
messages:readRead conversations, contacts, mute status, and unread countsRead
messages:writeCreate conversations, send messages, and update mute/read stateWrite
waitlist:read / waitlist:writeManage waitlist entries and admissions intakeRead / Write
calendar:read / calendar:writeManage school calendar eventsRead / Write
schedules:read / schedules:writeManage staff schedules and time-off requestsRead / Write
menus:read / menus:writeManage menus and meal plansRead / Write
daily_reports:read / daily_reports:writeManage daily reports and reporting summariesRead / Write
lesson_plans:read / lesson_plans:writeManage lesson plans and classroom planningRead / Write
photos:read / photos:writeManage photos, galleries, and parent sharingRead / Write
incidents:read / incidents:writeManage incident reports and follow-up actionsRead / Write
school:read / school:writeRead and update school profile dataRead / Write
settings:read / settings:writeRead and update school-level operational settingsRead / Write
reports:readGenerate and read analytics reportsRead

API Endpoints

Students

Manage student records and enrollment

GET
/api/students

List all students in your school

Required scope: students:read

POST
/api/students

Create a new student record

Required scope: students:write

PUT
/api/students

Update a student record by passing the student id in the JSON body

Required scope: students:write

GET
/api/students/:id

Get a specific student record by path ID

Required scope: students:read

PATCH
/api/students/:id

Update a student record by path ID

Required scope: students:write

DELETE
/api/students/:id

Remove a student record by path ID

Required scope: students:write

POST
/api/students/bulk-assign-room

Assign multiple students to a room in one request

Required scope: students:write

Attendance

Track check-ins and check-outs

GET
/api/attendance

List attendance records with optional date filtering

Required scope: attendance:read

GET
/api/attendance/:id

Get a specific attendance record

Required scope: attendance:read

POST
/api/attendance

Record a student check-in with action: "check_in"

Required scope: attendance:write

POST
/api/attendance

Record a student check-out with action: "check_out"

Required scope: attendance:write

Billing

Access invoices and payment information

GET
/api/billing/invoices

List all invoices with optional status and student filtering

Required scope: billing:read

GET
/api/billing/invoices/:id

Get a specific invoice with payment history

Required scope: billing:read

POST
/api/billing/invoices

Create a new invoice

Required scope: billing:write

GET
/api/billing/payments

List payment records with optional invoice filtering

Required scope: billing:read

GET
/api/billing/overview

Get billing overview metrics for the current school

Required scope: billing:read

GET
/api/billing/plans

List billing plans and plan metadata

Required scope: billing:read

POST
/api/billing/plans

Create a billing plan

Required scope: billing:write

PUT
/api/billing/plans/:id

Update a billing plan

Required scope: billing:write

DELETE
/api/billing/plans/:id

Archive a billing plan

Required scope: billing:write

GET
/api/billing/student-plans

List active student-plan assignments

Required scope: billing:read

POST
/api/billing/student-plans

Assign a billing plan to a student

Required scope: billing:write

DELETE
/api/billing/student-plans/:id

Deactivate a student-plan assignment

Required scope: billing:write

GET
/api/billing/students

List billing summary rows by student

Required scope: billing:read

GET
/api/billing/payment-methods

List stored payment-method summaries by student

Required scope: billing:read

GET
/api/billing/settings

Get school billing settings

Required scope: billing:read

PUT
/api/billing/settings

Update school billing settings

Required scope: billing:write

Rooms

Classroom and capacity management

GET
/api/rooms

List all classrooms with capacity and assigned staff

Required scope: rooms:read

POST
/api/rooms

Create a new room

Required scope: rooms:write

GET
/api/rooms/:id

Get a specific room with student and staff assignments

Required scope: rooms:read

PUT
/api/rooms

Update a room record by passing the room id in the JSON body

Required scope: rooms:write

DELETE
/api/rooms?id=:id

Remove a room record by query string ID

Required scope: rooms:write

Staff

Staff profiles and schedules

GET
/api/staff

List all staff members

Required scope: staff:read

GET
/api/staff/:id

Get staff member details

Required scope: staff:read

PATCH
/api/staff/:id

Update staff profile fields such as name, phone, role, or status

Required scope: staff:write

Parents & Family

Parent records and family linking workflows

GET
/api/parents

List parent records in the current school

Required scope: parents:read

POST
/api/parents

Create a parent record

Required scope: parents:write

GET
/api/parents/:id

Get a parent with linked students

Required scope: parents:read

PATCH
/api/parents/:id

Update a parent record

Required scope: parents:write

POST
/api/parents/link

Link a parent to a student

Required scope: parents:write

DELETE
/api/parents/link?studentId=:id&parentId=:id

Remove a parent-student link

Required scope: parents:write

Operations & Planning

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.

Communications & Media

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.

Rate Limits

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.

Rate Limit Headers

Every API response includes headers indicating your current rate limit status:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1704067200

Exceeding Rate Limits

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.

Error Handling

The API uses conventional HTTP response codes to indicate the success or failure of requests.

CodeMeaning
200Success - Request completed successfully
201Created - Resource created successfully
400Bad Request - Invalid parameters or malformed request
401Unauthorized - Invalid or missing API key
403Forbidden - API key lacks required scope
404Not Found - Resource does not exist
429Too Many Requests - Rate limit exceeded
500Internal Error - Something went wrong on our end

Error Response Format

{
  "error": "Missing required scope: students:write",
  "code": "INVALID_SCOPE"
}

SDKs & Libraries

Official SDKs for JavaScript/Node.js and Python. Zero-dependency single-file libraries that you can drop into any project.

JavaScript / Node.js

v1.2.0 · Zero dependencies

Works in Node.js (18+) and modern browsers. Uses native fetch API.

Download SDK

Python

v1.2.0 · Requires: requests

Python 3.7+ compatible. Uses the requests library for HTTP.

Download SDK

JavaScript / Node.js

Installation

Download centrecareos.js and add it to your project, or use it via a script tag:

Install
# 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>

Initialize the Client

JavaScript
import { CentreCareOS } from './centrecareos.js';

const client = new CentreCareOS('ccapi_your_api_key_here');

Usage Examples

Students
// 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',
});
Attendance
// 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, Rooms, Staff
// 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, Messaging, Operations
// 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();
Error Handling & Rate Limits
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);

Python

Installation

Download centrecareos.py and add it to your project. Requires the requests library.

Install
# Install the requests dependency
pip install requests

# Download the SDK
curl -o centrecareos.py https://centrecareos.com/sdk/centrecareos.py

Initialize the Client

Python
from centrecareos import CentreCareOS

client = CentreCareOS("ccapi_your_api_key_here")

Usage Examples

Students
# 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",
})
Attendance
# 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, Rooms, Staff
# 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, Messaging, Operations
# 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()
Error Handling & Context Manager
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}")

Support