Developer · GAOpenAPI 3.1 · OAuth 2.0

API & Integrations.

REST, webhook, and warehouse share — three integration paths, one canonical taxonomy. Live in production inside three business days, measured across 22 partners.

OpenAPI 3.1Spec
88ms p50 · 140ms p95Median latency
99.9% (Ent)Uptime SLA
Py · TS · Go · JavaSDKs
By the numbers

Production-grade integration surface.

88msp50 read latency140 ms p95. Inline in placement-creation flows.
22Live partner integrationsATS, VMS, MSP platforms, and warehouses.
99.9%Uptime SLAEnterprise tier · multi-region active-active.
3Business days to productionMedian across 22 partners. Sandbox key day one.
Endpoint surface

Six endpoints. That's the whole API.

EndpointPurposeTier
GET /v1/rates/{role}/{geo}Live percentile distribution for a canonical role × geography.Enterprise
GET /v1/rates/bulkBatch lookup of up to 100 role × geo pairs in a single call.Enterprise
POST /v1/normalizeResolve any raw title to a canonical role with confidence.Enterprise
GET /v1/trends/{role}/{geo}30-day, 90-day, or 1-year trend series for a role × geography.Enterprise
POST /v1/subscriptionsCreate, update, or delete alert subscriptions with thresholds.Enterprise
POST /v1/webhooks/replayReplay any event in the configured retention window.Enterprise
Integration paths

Three shapes. Pick by your latency budget.

A · Sync RESTInline lookups

88ms median. Drop into a placement-creation flow or rate-card validator. OAuth 2.0 client-credentials, scoped tokens per environment.

B · WebhookPush event stream

HMAC-signed, idempotency-keyed, at-least-once delivery. Replay window up to 5 years. Fan-out to your bus from one endpoint.

C · WarehouseBulk share

Snowflake Secure Data Share, Databricks Delta Share, or BigQuery transfer. Daily refresh at 03:00 UTC. Joinable to your own workforce data without exporting either side.

+ SandboxFrozen 90-day fixture

Every contract includes a sandbox environment with 90 days of frozen historical rates — predictable test fixtures for CI without burning production rate-limit quota.

Sample request

A bulk read in nine lines of curl.

OAuth 2.0 client credentials. Bulk endpoint hands you up to 100 role × geo pairs in a single response — joinable on canonical role ID.

$ curl "https://api.clinicalrate.com/v1/rates/bulk" \
-H "Authorization: Bearer $CR_TOKEN" \
-H "Content-Type: application/json" \
--data '{ "pairs": [
{"role_id": "CR-0142", "state": "CA"},
{"role_id": "CR-0207", "state": "TX"}
] }'
# 200 OK · 92ms · X-CR-As-Of: 2026-05-11T03:00Z
{
"results": [
{ "role_id": "CR-0142", "state": "CA", "p50": 92.00, "sample_size": 2418 },
{ "role_id": "CR-0207", "state": "TX", "p50": 218.40, "sample_size": 312 }
]
}

Same envelope across REST, webhook, and warehouse share — every record carries role_id, sample_size, and as_of.

Enterprise · Bullhorn integration
MW
Marcus WilliamsStaff Engineer · National staffing platform
We were live in three days. The bulk endpoint cut a four-step ETL down to one call, and the webhook replaced two cron jobs we used to babysit on Mondays.
What's included

Integration access by tier.

FAQ

Questions engineers ask before they integrate.

Default is 10 req/sec per token, burst to 50, with per-tier monthly quotas. Sandbox tokens have separate quota so CI runs never affect production. We surface remaining quota on every response in X-RateLimit-* headers.

URL-versioned (v1). Backwards-compatible changes ship without notice. Breaking changes require a six-month deprecation window and a written migration note. We have not retired a v1 endpoint since GA.

Yes. Configure per-subscription endpoints in the dashboard or via POST /v1/subscriptions. Each endpoint gets its own signing key and replay history.

OAuth 2.0 client credentials with scoped tokens per environment (sandbox / production) and per integration partner. SCIM 2.0 for user provisioning on Enterprise.

Get started

Get a sandbox key today.

Book a 30-minute scoping call. You'll leave with a sandbox token and an integration brief tailored to your stack.