athenahealth athenaOne REST API

The athenaOne proprietary REST API exposes the complete provider, patient, and biller workflow surface of athenahealth's cloud-based EHR and practice management platform. Resources include Patients, Appointments, Encounters, Claims, Documents, Charts, Providers, Departments, Insurance, Orders, and Billing. Authenticated via OAuth 2.0 client_credentials at the athenahealth Developer Portal; scoped per practice via the practiceid path parameter.

athenahealth athenaOne REST API is one of 5 APIs that athenahealth publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 6 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 2 JSON Schema definitions.

Tagged areas include EHR, Healthcare, Practice Management, Patients, and Appointments. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, a JSON-LD context, 6 Naftiko capability specs, and 2 JSON Schemas.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

athenahealth-athenaone-rest-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: athenahealth athenaOne REST API
  description: |
    The athenaOne proprietary REST API exposes the full provider, patient,
    scheduling, clinical, and biller workflow surface of the athenahealth
    cloud-based EHR and practice management platform. All resources are
    scoped to a practice via the practiceid path parameter.
  version: 1.0.0
  contact:
    name: athenahealth Developer Support
    url: https://docs.athenahealth.com/api/support
  license:
    name: athenahealth API Terms
    url: https://www.athenahealth.com/legal/terms
servers:
- url: https://api.platform.athenahealth.com/v1/{practiceid}
  description: Production athenaOne API
  variables:
    practiceid:
      default: '195900'
      description: athenaOne practice identifier
- url: https://api.preview.platform.athenahealth.com/v1/{practiceid}
  description: Preview (sandbox) athenaOne API
  variables:
    practiceid:
      default: '195900'
      description: athenaOne preview practice identifier
security:
- oauth2: []
paths:
  /patients:
    get:
      summary: Search Patients
      operationId: searchPatients
      tags: [Patients]
      parameters:
      - name: firstname
        in: query
        schema: {type: string}
      - name: lastname
        in: query
        schema: {type: string}
      - name: dob
        in: query
        schema: {type: string, format: date}
      - name: departmentid
        in: query
        schema: {type: integer}
      responses:
        '200':
          description: List of matching patients
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatientList'
    post:
      summary: Create Patient
      operationId: createPatient
      tags: [Patients]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatientCreate'
      responses:
        '200':
          description: Created patient
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Patient'
  /patients/{patientid}:
    get:
      summary: Get Patient
      operationId: getPatient
      tags: [Patients]
      parameters:
      - name: patientid
        in: path
        required: true
        schema: {type: integer}
      responses:
        '200':
          description: Patient record
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Patient'
    put:
      summary: Update Patient
      operationId: updatePatient
      tags: [Patients]
      parameters:
      - name: patientid
        in: path
        required: true
        schema: {type: integer}
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatientUpdate'
      responses:
        '200':
          description: Update result
  /appointments:
    get:
      summary: Search Appointments
      operationId: searchAppointments
      tags: [Appointments]
      parameters:
      - name: departmentid
        in: query
        required: true
        schema: {type: integer}
      - name: startdate
        in: query
        schema: {type: string}
      - name: enddate
        in: query
        schema: {type: string}
      responses:
        '200':
          description: Appointments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentList'
  /appointments/open:
    get:
      summary: Get Open Appointment Slots
      operationId: getOpenAppointmentSlots
      tags: [Appointments]
      parameters:
      - name: departmentid
        in: query
        required: true
        schema: {type: integer}
      - name: providerid
        in: query
        schema: {type: integer}
      - name: startdate
        in: query
        schema: {type: string}
      - name: enddate
        in: query
        schema: {type: string}
      responses:
        '200':
          description: Open slots
  /appointments/{appointmentid}:
    get:
      summary: Get Appointment
      operationId: getAppointment
      tags: [Appointments]
      parameters:
      - name: appointmentid
        in: path
        required: true
        schema: {type: integer}
      responses:
        '200':
          description: Appointment
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
  /appointments/{appointmentid}/cancel:
    put:
      summary: Cancel Appointment
      operationId: cancelAppointment
      tags: [Appointments]
      parameters:
      - name: appointmentid
        in: path
        required: true
        schema: {type: integer}
      responses:
        '200':
          description: Cancellation result
  /appointments/{appointmentid}/checkin:
    post:
      summary: Check In Appointment
      operationId: checkInAppointment
      tags: [Appointments]
      parameters:
      - name: appointmentid
        in: path
        required: true
        schema: {type: integer}
      responses:
        '200':
          description: Check-in result
  /appointments/{appointmentid}/reschedule:
    put:
      summary: Reschedule Appointment
      operationId: rescheduleAppointment
      tags: [Appointments]
      parameters:
      - name: appointmentid
        in: path
        required: true
        schema: {type: integer}
      responses:
        '200':
          description: Reschedule result
  /chart/{patientid}/encounters:
    get:
      summary: List Patient Encounters
      operationId: listPatientEncounters
      tags: [Encounters]
      parameters:
      - name: patientid
        in: path
        required: true
        schema: {type: integer}
      - name: departmentid
        in: query
        schema: {type: integer}
      responses:
        '200':
          description: Encounters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EncounterList'
  /chart/encounter/{encounterid}:
    get:
      summary: Get Encounter
      operationId: getEncounter
      tags: [Encounters]
      parameters:
      - name: encounterid
        in: path
        required: true
        schema: {type: integer}
      responses:
        '200':
          description: Encounter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Encounter'
  /claims:
    get:
      summary: Search Claims
      operationId: searchClaims
      tags: [Claims]
      parameters:
      - name: departmentid
        in: query
        schema: {type: integer}
      - name: patientid
        in: query
        schema: {type: integer}
      responses:
        '200':
          description: Claims
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClaimList'
  /patients/{patientid}/documents:
    get:
      summary: List Patient Documents
      operationId: listPatientDocuments
      tags: [Documents]
      parameters:
      - name: patientid
        in: path
        required: true
        schema: {type: integer}
      - name: departmentid
        in: query
        schema: {type: integer}
      responses:
        '200':
          description: Documents
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentList'
  /providers:
    get:
      summary: List Providers
      operationId: listProviders
      tags: [Providers]
      responses:
        '200':
          description: Providers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProviderList'
  /departments:
    get:
      summary: List Departments
      operationId: listDepartments
      tags: [Departments]
      responses:
        '200':
          description: Departments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepartmentList'
  /practiceinfo:
    get:
      summary: Get Practice Info
      operationId: getPracticeInfo
      tags: [Practice]
      responses:
        '200':
          description: Practice info
components:
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://api.platform.athenahealth.com/oauth2/v1/token
          scopes:
            athena/service/Athenanet.MDP.*: athenahealth MDP scope
        authorizationCode:
          authorizationUrl: https://api.platform.athenahealth.com/oauth2/v1/authorize
          tokenUrl: https://api.platform.athenahealth.com/oauth2/v1/token
          scopes:
            athena/service/Athenanet.MDP.*: athenahealth MDP scope
  schemas:
    Patient:
      type: object
      properties:
        patientid: {type: string}
        firstname: {type: string}
        lastname: {type: string}
        dob: {type: string, format: date}
        sex: {type: string, enum: [M, F, U]}
        homephone: {type: string}
        mobilephone: {type: string}
        email: {type: string, format: email}
        address1: {type: string}
        city: {type: string}
        state: {type: string}
        zip: {type: string}
        departmentid: {type: integer}
    PatientCreate:
      type: object
      required: [firstname, lastname, dob, departmentid]
      properties:
        firstname: {type: string}
        lastname: {type: string}
        dob: {type: string, format: date}
        departmentid: {type: integer}
        sex: {type: string}
    PatientUpdate:
      type: object
      properties:
        firstname: {type: string}
        lastname: {type: string}
        mobilephone: {type: string}
        email: {type: string, format: email}
    PatientList:
      type: array
      items:
        $ref: '#/components/schemas/Patient'
    Appointment:
      type: object
      properties:
        appointmentid: {type: string}
        date: {type: string, format: date}
        starttime: {type: string}
        duration: {type: integer}
        patientid: {type: string}
        providerid: {type: integer}
        departmentid: {type: integer}
        appointmenttype: {type: string}
        appointmentstatus: {type: string}
    AppointmentList:
      type: array
      items:
        $ref: '#/components/schemas/Appointment'
    Encounter:
      type: object
      properties:
        encounterid: {type: string}
        patientid: {type: string}
        appointmentid: {type: string}
        encountertype: {type: string}
        encounterdate: {type: string, format: date}
        providerid: {type: integer}
        departmentid: {type: integer}
        status: {type: string}
    EncounterList:
      type: array
      items:
        $ref: '#/components/schemas/Encounter'
    Claim:
      type: object
      properties:
        claimid: {type: string}
        patientid: {type: string}
        servicedate: {type: string, format: date}
        billedamount: {type: number}
        status: {type: string}
    ClaimList:
      type: array
      items:
        $ref: '#/components/schemas/Claim'
    Document:
      type: object
      properties:
        documentid: {type: string}
        patientid: {type: string}
        documenttype: {type: string}
        createddate: {type: string, format: date-time}
        documentclass: {type: string}
    DocumentList:
      type: array
      items:
        $ref: '#/components/schemas/Document'
    Provider:
      type: object
      properties:
        providerid: {type: integer}
        firstname: {type: string}
        lastname: {type: string}
        npi: {type: string}
        providertype: {type: string}
        specialty: {type: string}
    ProviderList:
      type: array
      items:
        $ref: '#/components/schemas/Provider'
    Department:
      type: object
      properties:
        departmentid: {type: integer}
        name: {type: string}
        address: {type: string}
        city: {type: string}
        state: {type: string}
        zip: {type: string}
        timezone: {type: string}
    DepartmentList:
      type: array
      items:
        $ref: '#/components/schemas/Department'