Build on Syncurio
Programmatic access to your rostering, HR and reporting data. Plug payroll integrations, BI dashboards, time-clock devices and bespoke tooling straight into the system that runs your homes.
Get started →Get started in three steps
Issue an API key
Sign in, open Settings → Integrations from the profile menu, and create a key scoped to what your integration needs. Issue a separate key per integration so scopes and rate limits stay isolated.
Send your first request
Pass the key in the X-Api-Key header, and call your base URL — shown under Settings → Integrations (it differs by environment). Every endpoint requires the relevant scope grant.
Explore the reference
Browse and try every endpoint in the interactive Scalar reference, linked from Settings → Integrations in your dashboard. Opening it there points “Try it” at your own environment, so calls work with your key.
Two APIs and an MCP server, one key
Public API
Real-time CRUD-style access for integration partners.
- GET
/public/v1/homes - GET
/public/v1/rostering/shifts - GET
/public/v1/rostering/shifts/{id} - GET
/public/v1/rostering/employees - GET
/public/v1/rostering/roles - GET
/public/v1/rostering/absences - GET
/public/v1/rostering/agencies - GET
/public/v1/workforce/employees - GET
/public/v1/workforce/timesheets
The workforce feed exposes current employees and recent worked timesheets (with earned hours and pay) — built for payroll and earned-wage-access integrations. Scope: workforce:read.
Full reference: Public API reference.
Reporting API
Flat, denormalised datasets for BI tools — Power BI, Tableau, Looker, warehouses.
- GET
/reporting/v1/rostering/shifts - GET
/reporting/v1/rostering/employee-weekly-hours
The shifts dataset carries actual clocked hours and attendance alongside the rostered hours — ready for rostered-vs-actual variance reporting.
Full reference: Reporting API reference.
MCP server
An MCP (Model Context Protocol) server that exposes the public and reporting endpoints as tools for AI assistants — Claude Desktop, Claude Code, Cursor, and other MCP clients. It is read-only, authenticated with the same API key, and bound by the same scopes and rate limits.
Distributed on npm — add it to your MCP client with your X-Api-Key and base URL:
npx @syncurio/mcp
Setup and the full tool list are on the npm package page.
Code examples
List today's shifts — curlcurl "$SYN_BASE/public/v1/rostering/shifts?homeId=1&from=2026-04-30&to=2026-04-30" \ -H "X-Api-Key: $SYN_KEY"List today's shifts — JavaScript (fetch)
const res = await fetch( `${process.env.SYN_BASE}/public/v1/rostering/shifts?homeId=1&from=2026-04-30&to=2026-04-30`, { headers: { 'X-Api-Key': process.env.SYN_KEY } } ); const { items, totalCount } = await res.json(); console.log(`Found ${totalCount} shift(s)`);List today's shifts — C# (HttpClient)
using var http = new HttpClient(); http.DefaultRequestHeaders.Add("X-Api-Key", Environment.GetEnvironmentVariable("SYN_KEY")); var baseUrl = Environment.GetEnvironmentVariable("SYN_BASE"); var response = await http.GetAsync( $"{baseUrl}/public/v1/rostering/shifts" + "?homeId=1&from=2026-04-30&to=2026-04-30"); response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync();Pull worked timesheets for payroll — curl
curl "$SYN_BASE/public/v1/workforce/timesheets?from=2026-04-01&to=2026-04-30" \ -H "X-Api-Key: $SYN_KEY"Stream a reporting dataset with cursor pagination — curl
# First page curl "$SYN_BASE/reporting/v1/rostering/shifts?homeId=1&from=2026-01-01&to=2026-03-31&pageSize=500" \ -H "X-Api-Key: $SYN_KEY" # Continue with the nextCursor from the previous response curl "$SYN_BASE/reporting/v1/rostering/shifts?homeId=1&from=2026-01-01&to=2026-03-31&pageSize=500&cursor=$NEXT" \ -H "X-Api-Key: $SYN_KEY"
Authentication & rate limits
Base URL
Your base URL depends on your Syncurio environment and is shown under Settings → Integrations. The examples below use $SYN_BASE as a stand-in — set it once with export SYN_BASE="https://<your-syncurio-api-host>".
X-Api-Key header
Every request must carry the key issued from the dashboard. Keys are scoped — grant only what an integration needs, and issue a separate key per integration:
- rostering:read
- home:read
- workforce:read
- reporting:rostering
A key whose required modules aren't subscribed by your organisation can't be issued, and existing keys are revoked at request time if a module is later unsubscribed.
Rate limits
Each key has its own hourly budget. The defaults are 1,000 requests / hour on the public API and 200 requests / hour on the reporting API (sized for periodic BI pulls rather than interactive use).
The 1,001st (or 201st) request in an hour returns 429 Too Many Requests with a Retry-After header. Need higher limits for an integration? Get in touch.
Versioning & deprecation
The base paths are /public/v1 and /reporting/v1. We commit to backwards-compatible changes within v1. When an endpoint is deprecated we publish at least six months notice via the standard Sunset and Deprecation response headers, plus a banner in the API reference.
Webhooks
Real-time event notifications are on the roadmap for a future release. In the meantime the reporting API supports incremental pulls via cursor pagination. Want to be told when webhooks ship? Drop us a line.