Open Dental Patients API

CONFIRMED. Patient demographic records.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/opendental-patients-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

opendental-patients-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Open Dental Accounts & Ledger Patients API
  description: 'REST API for Open Dental dental practice management software. The web service is hosted at Open Dental headquarters and lets approved third-party applications read and write practice data on behalf of Open Dental customers. Requests authenticate with a per-application Developer Key and a per-customer Customer Key, sent together in a single header as "Authorization: ODFHIR {DeveloperKey}/{CustomerKey}". The full published specification documents 130+ resource groups; this document models a representative, load-bearing subset. The paths under Patients, Appointments, Providers, ProcedureLogs (Procedures), Claims, and Payments are grounded in the published per-resource reference pages and are marked CONFIRMED below. The remaining resource groups (Accounts/Ledger, Fees & Fee Schedules, Recalls, Documents, Medications & Prescriptions, Referrals, Sheets) follow Open Dental''s standard REST CRUD convention and are marked MODELED - verify exact paths and fields against the live spec before use. A separate local API Service (talks to the on-premises Open Dental program without routing through Open Dental servers) and a FHIR interface also exist and are out of scope for this document.'
  version: v1
  contact:
    name: Open Dental Software Vendor Relations
    url: https://www.opendental.com/site/apispecification.html
    email: vendor.relations@opendental.com
  license:
    name: Open Dental (proprietary; source viewable under Open Dental license)
    url: https://www.opendental.com/site/sourcecode.html
servers:
- url: https://api.opendental.com/api/v1
  description: Open Dental cloud-hosted API service (headquarters)
security:
- odfhirAuth: []
tags:
- name: Patients
  description: CONFIRMED. Patient demographic records.
paths:
  /patients/{PatNum}:
    get:
      tags:
      - Patients
      summary: Get a single patient
      description: CONFIRMED. Retrieves one patient by PatNum.
      parameters:
      - $ref: '#/components/parameters/PatNum'
      responses:
        '200':
          $ref: '#/components/responses/Ok'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Patients
      summary: Update a patient
      description: CONFIRMED. Updates an existing patient. Patients cannot be deleted via the API.
      parameters:
      - $ref: '#/components/parameters/PatNum'
      requestBody:
        $ref: '#/components/requestBodies/Generic'
      responses:
        '200':
          $ref: '#/components/responses/Ok'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
  /patients/Simple:
    get:
      tags:
      - Patients
      summary: List patients (Simple)
      description: CONFIRMED. Fast listing of patients with optional filters. Faster than the full patient search.
      parameters:
      - name: LName
        in: query
        schema:
          type: string
      - name: FName
        in: query
        schema:
          type: string
      - name: PatStatus
        in: query
        schema:
          type: string
      - name: Birthdate
        in: query
        schema:
          type: string
          format: date
      - name: ClinicNum
        in: query
        schema:
          type: integer
      - name: DateTStamp
        in: query
        schema:
          type: string
      - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /patients:
    get:
      tags:
      - Patients
      summary: Search patients
      description: CONFIRMED. Searches patients using Patient Select-style logic with many optional criteria.
      parameters:
      - name: LName
        in: query
        schema:
          type: string
      - name: FName
        in: query
        schema:
          type: string
      - name: Phone
        in: query
        schema:
          type: string
      - name: Address
        in: query
        schema:
          type: string
      - name: hideInactive
        in: query
        schema:
          type: boolean
      - name: SSN
        in: query
        schema:
          type: string
      - name: ChartNumber
        in: query
        schema:
          type: string
      - name: Birthdate
        in: query
        schema:
          type: string
          format: date
      - name: Email
        in: query
        schema:
          type: string
      - name: clinicNums
        in: query
        schema:
          type: string
      - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/Ok'
    post:
      tags:
      - Patients
      summary: Create a patient
      description: CONFIRMED. Creates a new patient.
      requestBody:
        $ref: '#/components/requestBodies/Generic'
      responses:
        '201':
          $ref: '#/components/responses/Created'
        '400':
          $ref: '#/components/responses/BadRequest'
components:
  responses:
    Created:
      description: Created. Typically returns a Location header and the created object.
      content:
        application/json:
          schema:
            type: object
            additionalProperties: true
    BadRequest:
      description: Bad request - invalid or missing fields.
    NotFound:
      description: The requested resource was not found.
    Ok:
      description: Success. Returns one item or an array of items.
      content:
        application/json:
          schema:
            oneOf:
            - type: object
              additionalProperties: true
            - type: array
              items:
                type: object
                additionalProperties: true
  parameters:
    Offset:
      name: Offset
      in: query
      required: false
      description: Number of records to skip for pagination.
      schema:
        type: integer
        default: 0
    PatNum:
      name: PatNum
      in: path
      required: true
      description: Primary key of the patient.
      schema:
        type: integer
  requestBodies:
    Generic:
      description: Resource fields as a JSON object. See the per-resource reference page on opendental.com/site/apispecification.html for exact field names.
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: true
  securitySchemes:
    odfhirAuth:
      type: apiKey
      in: header
      name: Authorization
      description: Send "ODFHIR {DeveloperKey}/{CustomerKey}" - the per-application Developer Key issued by Open Dental Vendor Relations combined with the per-customer Customer Key. Some endpoints also accept HTTP Basic auth with the Developer Key as username and the Customer Key as password.