The canonical model, over the wire.
A typed REST API and signed event bus give you read/write access to every canonical entity in your study. The full reference is shipping in stages; the summary below describes the API as it stands today.
https://api.clinstead.com/v1Typed REST API
Read and write every entity on the canonical model — studies, instruments, events, participants, signatures. OpenAPI 3.1 spec, fully versioned, with cursor pagination on collection endpoints.
Event bus & webhooks
Subscribe to canonical events (form submitted, query opened, amendment published, agent proposal). Signed webhook deliveries with at-least-once semantics and replay endpoints.
Auth & scopes
OAuth 2.0 client credentials for server-to-server, OIDC for end-user contexts. Scopes are resource-scoped (study:read, queries:write, audit:export) — never tenant-wide unless explicitly granted.
Audit-aware writes
Every write requires reason-for-change where the canonical model demands one. Electronic signatures can be issued via API for non-interactive workflows that have appropriate identity proof.
Rate limits & SLAs
Per-tenant token-bucket rate limits with separate read and write pools. Standard plans 600 req/min read, 120 req/min write. Enterprise plans negotiate higher limits and dedicated quotas.
Agent-friendly endpoints
Operator proposals are first-class API objects. Build custom operators that suggest, review, or escalate — the canonical audit trail ties every action back to the agent identity.
Open a query against a form revision.
A typical write: bearer-token auth, JSON body, reason-for-change in the payload. The same shape works for amendments, signatures, deviation records, and operator proposals.
Responses include the canonical entity id, audit-trail pointer, and version sequence so you can build idempotent clients.
# Open a query against a specific form revision
curl -X POST https://api.clinstead.com/v1/studies/CARDINAL-PHII/queries \
-H "Authorization: Bearer $CLINSTEAD_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"participant_id": "SUB-0411",
"form_id": "VITALS_V2",
"field": "vit_systolic",
"category": "out_of_range",
"reason": "Reading 220 mmHg flagged by Monitor Bot",
"assigned_to": "site:014"
}'OpenAPI spec, SDKs, and breaking-change policy
The OpenAPI 3.1 spec, TypeScript and Python SDKs, and our breaking-change policy are available to customers and integration partners under NDA while we finalise the public release.