Download OpenAPI specification:
Partner-facing API for the DCP billing & collections platform. Every resource is scoped to the partner that owns the API key used to call it — a key only ever sees data for offices belonging to that partner.
All identifiers in URLs and response bodies are opaque public IDs
(patient_id, office_id, etc.), never internal database IDs.
API keys are issued per partner account. Contact your DCP account
manager to have a key generated — each key carries a read or
read,write scope, and is only ever able to see data for offices
belonging to your partner account.
Send your key as a bearer token on every request:
curl https://app.dentalclaimprofessionals.com/api/v1/patients \
-H "Authorization: Bearer rcrm_xxxxxxxxxxxxxxxxxxxxxxxx"
The current version is v1, in the URL path (/api/v1/...). Breaking
changes will ship as a new /api/v2 namespace rather than changing v1
in place — existing integrations keep working indefinitely on the
version they were built against.
List endpoints return 50 records per page:
{
"page": 1,
"per_page": 50,
"total": 214,
"has_more": true,
"data": [ ... ]
}
Pass ?page=2 to fetch subsequent pages.
Errors are returned as JSON with a stable code you can branch on:
{ "error": { "code": "not_found", "message": "Resource not found." } }
| HTTP status | code | Meaning |
|---|---|---|
| 401 | unauthorized |
Missing or invalid API key |
| 403 | forbidden |
Key's scope doesn't allow this action |
| 404 | not_found |
Doesn't exist, or belongs to a different partner |
| 422 | unprocessable |
Validation failed |
One page of the partner's patient roster.
| page | integer >= 1 Default: 1 1-indexed page number. 50 records per page. |
{- "page": 0,
- "per_page": 50,
- "total": 0,
- "has_more": true,
- "data": [
- {
- "id": "string",
- "name": "string",
- "dob": "2019-08-24",
- "provider": "string",
- "office_name": "string",
- "next_appointment_at": "2019-08-24T14:15:22Z",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "primary_policy_id": "string",
- "additional_policies": 0,
- "eligibility": {
- "id": "string",
- "patient_name": "string",
- "appointment_time": "string",
- "dob": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "office_name": "string",
- "eligibility_status": "Active",
- "plan": "string",
- "effective_date": "string",
- "termination_date": "string",
- "deductible_met": "string",
- "benefits": { },
- "error_message": "string",
- "checked_by": "string",
- "run_date": "2019-08-24"
}
}
]
}Requires a write-scoped API key. Manually adds a patient under one of the partner's offices.
| name required | string |
| office_id required | string Public ID of one of this partner's offices. |
| dob | string <date> |
| provider | string |
| phone | string E.164, e.g. +15551234567 |
{- "name": "string",
- "office_id": "string",
- "dob": "2019-08-24",
- "provider": "string",
- "phone": "string"
}{- "id": "string",
- "name": "string",
- "phone": "string",
- "dob": "2019-08-24",
- "provider": "string",
- "office_name": "string",
- "next_appointment_at": "2019-08-24T14:15:22Z",
- "insurance_policies": [
- {
- "id": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "rank": 0,
- "primary": true,
- "eligibility": {
- "id": "string",
- "patient_name": "string",
- "appointment_time": "string",
- "dob": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "office_name": "string",
- "eligibility_status": "Active",
- "plan": "string",
- "effective_date": "string",
- "termination_date": "string",
- "deductible_met": "string",
- "benefits": { },
- "error_message": "string",
- "checked_by": "string",
- "run_date": "2019-08-24"
}
}
], - "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "eligibility": {
- "id": "string",
- "patient_name": "string",
- "appointment_time": "string",
- "dob": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "office_name": "string",
- "eligibility_status": "Active",
- "plan": "string",
- "effective_date": "string",
- "termination_date": "string",
- "deductible_met": "string",
- "benefits": { },
- "error_message": "string",
- "checked_by": "string",
- "run_date": "2019-08-24"
}, - "additional_policies": 0,
- "claim_results": [
- {
- "id": 0,
- "public_id": "string",
- "era_id": "string",
- "claim_id": "string",
- "patient_public_id": "string",
- "patient_name": "string",
- "payer": "string",
- "office_name": "string",
- "result_type": "string",
- "total_billed": "string",
- "total_paid": "string",
- "patient_responsibility": "string",
- "denial_code": "string",
- "denial_reason": "string",
- "denial_detail": "string"
}
], - "open_dental_chart_available": true
}| id required | string The resource's public ID. |
{- "id": "string",
- "name": "string",
- "phone": "string",
- "dob": "2019-08-24",
- "provider": "string",
- "office_name": "string",
- "next_appointment_at": "2019-08-24T14:15:22Z",
- "insurance_policies": [
- {
- "id": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "rank": 0,
- "primary": true,
- "eligibility": {
- "id": "string",
- "patient_name": "string",
- "appointment_time": "string",
- "dob": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "office_name": "string",
- "eligibility_status": "Active",
- "plan": "string",
- "effective_date": "string",
- "termination_date": "string",
- "deductible_met": "string",
- "benefits": { },
- "error_message": "string",
- "checked_by": "string",
- "run_date": "2019-08-24"
}
}
], - "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "eligibility": {
- "id": "string",
- "patient_name": "string",
- "appointment_time": "string",
- "dob": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "office_name": "string",
- "eligibility_status": "Active",
- "plan": "string",
- "effective_date": "string",
- "termination_date": "string",
- "deductible_met": "string",
- "benefits": { },
- "error_message": "string",
- "checked_by": "string",
- "run_date": "2019-08-24"
}, - "additional_policies": 0,
- "claim_results": [
- {
- "id": 0,
- "public_id": "string",
- "era_id": "string",
- "claim_id": "string",
- "patient_public_id": "string",
- "patient_name": "string",
- "payer": "string",
- "office_name": "string",
- "result_type": "string",
- "total_billed": "string",
- "total_paid": "string",
- "patient_responsibility": "string",
- "denial_code": "string",
- "denial_reason": "string",
- "denial_detail": "string"
}
], - "open_dental_chart_available": true
}Requires a write-scoped API key. Only phone, dob, and provider may be changed.
| id required | string The resource's public ID. |
| phone | string |
| dob | string <date> |
| provider | string |
{- "phone": "string",
- "dob": "2019-08-24",
- "provider": "string"
}{- "id": "string",
- "name": "string",
- "phone": "string",
- "dob": "2019-08-24",
- "provider": "string",
- "office_name": "string",
- "next_appointment_at": "2019-08-24T14:15:22Z",
- "insurance_policies": [
- {
- "id": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "rank": 0,
- "primary": true,
- "eligibility": {
- "id": "string",
- "patient_name": "string",
- "appointment_time": "string",
- "dob": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "office_name": "string",
- "eligibility_status": "Active",
- "plan": "string",
- "effective_date": "string",
- "termination_date": "string",
- "deductible_met": "string",
- "benefits": { },
- "error_message": "string",
- "checked_by": "string",
- "run_date": "2019-08-24"
}
}
], - "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "eligibility": {
- "id": "string",
- "patient_name": "string",
- "appointment_time": "string",
- "dob": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "office_name": "string",
- "eligibility_status": "Active",
- "plan": "string",
- "effective_date": "string",
- "termination_date": "string",
- "deductible_met": "string",
- "benefits": { },
- "error_message": "string",
- "checked_by": "string",
- "run_date": "2019-08-24"
}, - "additional_policies": 0,
- "claim_results": [
- {
- "id": 0,
- "public_id": "string",
- "era_id": "string",
- "claim_id": "string",
- "patient_public_id": "string",
- "patient_name": "string",
- "payer": "string",
- "office_name": "string",
- "result_type": "string",
- "total_billed": "string",
- "total_paid": "string",
- "patient_responsibility": "string",
- "denial_code": "string",
- "denial_reason": "string",
- "denial_detail": "string"
}
], - "open_dental_chart_available": true
}Requires a write-scoped API key. Triggers a live eligibility check
against the payer for the given insurance policy and records the
result. This is a synchronous call to the payer — it can take a few
seconds to return.
| insurance_policy_id required | string Public ID of the insurance policy to check. |
{- "insurance_policy_id": "string"
}{- "id": "string",
- "patient_name": "string",
- "appointment_time": "string",
- "dob": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "office_name": "string",
- "eligibility_status": "Active",
- "plan": "string",
- "effective_date": "string",
- "termination_date": "string",
- "deductible_met": "string",
- "benefits": { },
- "error_message": "string",
- "checked_by": "string",
- "run_date": "2019-08-24"
}| id required | string The resource's public ID. |
{- "id": "string",
- "patient_name": "string",
- "appointment_time": "string",
- "dob": "string",
- "insurance_company": "string",
- "member_id": "string",
- "group_number": "string",
- "office_name": "string",
- "eligibility_status": "Active",
- "plan": "string",
- "effective_date": "string",
- "termination_date": "string",
- "deductible_met": "string",
- "benefits": { },
- "error_message": "string",
- "checked_by": "string",
- "run_date": "2019-08-24"
}| page | integer >= 1 Default: 1 1-indexed page number. 50 records per page. |
{- "page": 0,
- "per_page": 50,
- "total": 0,
- "has_more": true,
- "data": [
- {
- "id": "string",
- "claim_id": "string",
- "era_id": "string",
- "patient_public_id": "string",
- "patient_name": "string",
- "payer": "string",
- "office_name": "string",
- "result_type": "string",
- "posting_status": "new",
- "posting_status_label": "string",
- "total_billed": "string",
- "total_paid": "string",
- "patient_responsibility": "string",
- "run_date": "2019-08-24"
}
]
}| id required | string The resource's public ID. |
{- "id": 0,
- "public_id": "string",
- "era_id": "string",
- "claim_id": "string",
- "patient_public_id": "string",
- "patient_name": "string",
- "payer": "string",
- "office_name": "string",
- "result_type": "string",
- "total_billed": "string",
- "total_paid": "string",
- "patient_responsibility": "string",
- "denial_code": "string",
- "denial_reason": "string",
- "denial_detail": "string"
}Past-due patient balance collection cases, ordered by soonest next action.
| page | integer >= 1 Default: 1 1-indexed page number. 50 records per page. |
{- "page": 0,
- "per_page": 50,
- "total": 0,
- "has_more": true,
- "data": [
- {
- "id": "string",
- "patient_id": "string",
- "patient_name": "string",
- "office_name": "string",
- "status": "open",
- "current_balance": "string",
- "opened_on": "2019-08-24",
- "next_action_on": "2019-08-24",
- "cadence_position": "Step 3 of 8",
- "close_reason": "string",
- "closed_on": "2019-08-24",
- "auto_paused": true,
- "assigned_to_name": "string"
}
]
}| id required | string The resource's public ID. |
{- "id": "string",
- "patient_id": "string",
- "patient_name": "string",
- "office_name": "string",
- "status": "open",
- "current_balance": "string",
- "opened_on": "2019-08-24",
- "next_action_on": "2019-08-24",
- "cadence_position": "Step 3 of 8",
- "close_reason": "string",
- "closed_on": "2019-08-24",
- "auto_paused": true,
- "assigned_to_name": "string"
}| page | integer >= 1 Default: 1 1-indexed page number. 50 records per page. |
{- "page": 0,
- "per_page": 50,
- "total": 0,
- "has_more": true,
- "data": [
- {
- "id": "string",
- "name": "string",
- "office_name": "string",
- "active": true,
- "billing_interval": "monthly",
- "price": "string",
- "dependent_price": "string",
- "family_discount_percent": "string",
- "additional_service_discount_percent": "string",
- "max_family_members": 0
}
]
}| id required | string The resource's public ID. |
{- "id": "string",
- "name": "string",
- "office_name": "string",
- "active": true,
- "billing_interval": "monthly",
- "price": "string",
- "dependent_price": "string",
- "family_discount_percent": "string",
- "additional_service_discount_percent": "string",
- "max_family_members": 0
}| page | integer >= 1 Default: 1 1-indexed page number. 50 records per page. |
{- "page": 0,
- "per_page": 50,
- "total": 0,
- "has_more": true,
- "data": [
- {
- "id": "string",
- "patient_id": "string",
- "patient_name": "string",
- "office_name": "string",
- "membership_plan_id": "string",
- "membership_plan_name": "string",
- "primary": true,
- "status": "pending",
- "billing_interval": "monthly",
- "price_at_enrollment": "string",
- "enrolled_on": "2019-08-24",
- "next_renewal_on": "2019-08-24",
- "canceled_at": "2019-08-24T14:15:22Z"
}
]
}| id required | string The resource's public ID. |
{- "id": "string",
- "patient_id": "string",
- "patient_name": "string",
- "office_name": "string",
- "membership_plan_id": "string",
- "membership_plan_name": "string",
- "primary": true,
- "status": "pending",
- "billing_interval": "monthly",
- "price_at_enrollment": "string",
- "enrolled_on": "2019-08-24",
- "next_renewal_on": "2019-08-24",
- "canceled_at": "2019-08-24T14:15:22Z"
}