Dental Claim Professionals API (1.0)

Download OpenAPI specification:

License: Proprietary

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.

Getting an API key

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.

Authentication

Send your key as a bearer token on every request:

curl https://app.dentalclaimprofessionals.com/api/v1/patients \
  -H "Authorization: Bearer rcrm_xxxxxxxxxxxxxxxxxxxxxxxx"

Versioning

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.

Pagination

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

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

Patients

Patient roster and records.

List patients

One page of the partner's patient roster.

Authorizations:
bearerAuth
query Parameters
page
integer >= 1
Default: 1

1-indexed page number. 50 records per page.

Responses

Response samples

Content type
application/json
{
  • "page": 0,
  • "per_page": 50,
  • "total": 0,
  • "has_more": true,
  • "data": [
    ]
}

Create a patient

Requires a write-scoped API key. Manually adds a patient under one of the partner's offices.

Authorizations:
bearerAuth
Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "office_id": "string",
  • "dob": "2019-08-24",
  • "provider": "string",
  • "phone": "string"
}

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "insurance_company": "string",
  • "member_id": "string",
  • "group_number": "string",
  • "eligibility": {
    },
  • "additional_policies": 0,
  • "claim_results": [
    ],
  • "open_dental_chart_available": true
}

Get a patient

Authorizations:
bearerAuth
path Parameters
id
required
string

The resource's public ID.

Responses

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "insurance_company": "string",
  • "member_id": "string",
  • "group_number": "string",
  • "eligibility": {
    },
  • "additional_policies": 0,
  • "claim_results": [
    ],
  • "open_dental_chart_available": true
}

Update a patient

Requires a write-scoped API key. Only phone, dob, and provider may be changed.

Authorizations:
bearerAuth
path Parameters
id
required
string

The resource's public ID.

Request Body schema: application/json
phone
string
dob
string <date>
provider
string

Responses

Request samples

Content type
application/json
{
  • "phone": "string",
  • "dob": "2019-08-24",
  • "provider": "string"
}

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "insurance_company": "string",
  • "member_id": "string",
  • "group_number": "string",
  • "eligibility": {
    },
  • "additional_policies": 0,
  • "claim_results": [
    ],
  • "open_dental_chart_available": true
}

Eligibility

Real-time insurance eligibility checks.

Run a real-time eligibility check

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.

Authorizations:
bearerAuth
Request Body schema: application/json
required
insurance_policy_id
required
string

Public ID of the insurance policy to check.

Responses

Request samples

Content type
application/json
{
  • "insurance_policy_id": "string"
}

Response samples

Content type
application/json
{
  • "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"
}

Get an eligibility result

Authorizations:
bearerAuth
path Parameters
id
required
string

The resource's public ID.

Responses

Response samples

Content type
application/json
{
  • "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"
}

Claims

Payer remittance/claim results.

List claim results

Authorizations:
bearerAuth
query Parameters
page
integer >= 1
Default: 1

1-indexed page number. 50 records per page.

Responses

Response samples

Content type
application/json
{
  • "page": 0,
  • "per_page": 50,
  • "total": 0,
  • "has_more": true,
  • "data": [
    ]
}

Get a claim result

Authorizations:
bearerAuth
path Parameters
id
required
string

The resource's public ID.

Responses

Response samples

Content type
application/json
{
  • "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"
}

AR Recovery

Past-due patient balance collection cases.

List AR recovery cases

Past-due patient balance collection cases, ordered by soonest next action.

Authorizations:
bearerAuth
query Parameters
page
integer >= 1
Default: 1

1-indexed page number. 50 records per page.

Responses

Response samples

Content type
application/json
{
  • "page": 0,
  • "per_page": 50,
  • "total": 0,
  • "has_more": true,
  • "data": [
    ]
}

Get a recovery case

Authorizations:
bearerAuth
path Parameters
id
required
string

The resource's public ID.

Responses

Response samples

Content type
application/json
{
  • "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"
}

Membership Plans

In-house membership plan templates.

List membership plan templates

Authorizations:
bearerAuth
query Parameters
page
integer >= 1
Default: 1

1-indexed page number. 50 records per page.

Responses

Response samples

Content type
application/json
{
  • "page": 0,
  • "per_page": 50,
  • "total": 0,
  • "has_more": true,
  • "data": [
    ]
}

Get a membership plan

Authorizations:
bearerAuth
path Parameters
id
required
string

The resource's public ID.

Responses

Response samples

Content type
application/json
{
  • "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
}

Patient Memberships

Patient enrollments against membership plans.

List patient membership enrollments

Authorizations:
bearerAuth
query Parameters
page
integer >= 1
Default: 1

1-indexed page number. 50 records per page.

Responses

Response samples

Content type
application/json
{
  • "page": 0,
  • "per_page": 50,
  • "total": 0,
  • "has_more": true,
  • "data": [
    ]
}

Get a patient membership enrollment

Authorizations:
bearerAuth
path Parameters
id
required
string

The resource's public ID.

Responses

Response samples

Content type
application/json
{
  • "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"
}