DoseSpot Pharmacies API

Search the Surescripts pharmacy directory by name, location, and specialty, and manage a patient's preferred pharmacies for prescription routing.

OpenAPI Specification

dosespot-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: DoseSpot API
  description: >-
    DoseSpot is a Surescripts- and EPCS-certified electronic prescribing (eRx)
    platform. The REST API (v2) lets healthcare and EHR/EMR applications embed
    the full prescription lifecycle - patients, prescriptions, medications and
    drug search, pharmacies, clinicians/prescribers, eligibility, and
    notifications. Requests are authenticated with an OAuth2 Bearer access token
    obtained from the token endpoint and a per-application Subscription-Key
    header; access is scoped by clinic and clinician keys. Endpoint paths,
    request/response schemas, and field names below are modeled from DoseSpot's
    publicly described API v2 surface and integration guides; consult DoseSpot's
    partner documentation for the authoritative, complete contract.
  termsOfService: https://dosespot.com/
  contact:
    name: DoseSpot Support
    url: https://dosespot.com/full-integration/
  version: '2.0'
servers:
  - url: https://my.dosespot.com/webapi/v2
    description: Production
  - url: https://my.staging.dosespot.com/webapi/v2
    description: Staging
security:
  - bearerAuth: []
    subscriptionKey: []
tags:
  - name: Patients
    description: Patient demographics, allergies, and self-reported medications.
  - name: Prescriptions
    description: Prescription creation, transmission, status, and medication history.
  - name: Medications
    description: Medi-Span drug search and interaction checks.
  - name: Pharmacies
    description: Surescripts pharmacy search and patient pharmacy management.
  - name: Prescribers
    description: Clinician (prescriber) and clinic staff management.
  - name: Notifications
    description: Clinician notification counts and actionable items.
paths:
  /patients:
    get:
      operationId: searchPatients
      tags:
        - Patients
      summary: Search patients
      description: Search for patients within the clinic by name, date of birth, or other demographics.
      parameters:
        - name: firstName
          in: query
          schema:
            type: string
        - name: lastName
          in: query
          schema:
            type: string
        - name: dateOfBirth
          in: query
          schema:
            type: string
            format: date
        - name: pageNumber
          in: query
          schema:
            type: integer
      responses:
        '200':
          description: A paged list of patients.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatientListResult'
    post:
      operationId: createPatient
      tags:
        - Patients
      summary: Create a patient
      description: Create a new patient record with demographics required for prescribing.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Patient'
      responses:
        '200':
          description: The created patient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatientResult'
  /patients/{patientId}:
    get:
      operationId: getPatient
      tags:
        - Patients
      summary: Get a patient
      description: Retrieve a single patient record by ID.
      parameters:
        - name: patientId
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: The requested patient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatientResult'
    post:
      operationId: updatePatient
      tags:
        - Patients
      summary: Update a patient
      description: Update demographics for an existing patient.
      parameters:
        - name: patientId
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Patient'
      responses:
        '200':
          description: The updated patient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatientResult'
  /patients/{patientId}/prescriptions:
    get:
      operationId: getPatientPrescriptions
      tags:
        - Prescriptions
      summary: List a patient's prescriptions
      description: Retrieve prescriptions and their statuses for a patient.
      parameters:
        - name: patientId
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: A list of prescriptions for the patient.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PrescriptionListResult'
    post:
      operationId: createPatientPrescription
      tags:
        - Prescriptions
      summary: Create a prescription
      description: Create a new prescription for a patient, ready to be sent to a pharmacy.
      parameters:
        - name: patientId
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Prescription'
      responses:
        '200':
          description: The created prescription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PrescriptionResult'
  /patients/{patientId}/prescriptions/{prescriptionId}:
    get:
      operationId: getPatientPrescription
      tags:
        - Prescriptions
      summary: Get a prescription
      description: Retrieve a single prescription and its current status.
      parameters:
        - name: patientId
          in: path
          required: true
          schema:
            type: integer
        - name: prescriptionId
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: The requested prescription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PrescriptionResult'
  /patients/{patientId}/medicationHistory:
    get:
      operationId: getMedicationHistory
      tags:
        - Prescriptions
      summary: Get aggregated medication history
      description: Retrieve aggregated medication history data for a patient from pharmacy and payer sources.
      parameters:
        - name: patientId
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: The patient's medication history.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MedicationHistoryResult'
  /medications/search:
    get:
      operationId: searchMedications
      tags:
        - Medications
      summary: Search the drug database
      description: Search the Medi-Span drug database for medications and supplies by name.
      parameters:
        - name: name
          in: query
          required: true
          schema:
            type: string
        - name: pageNumber
          in: query
          schema:
            type: integer
      responses:
        '200':
          description: Matching medications.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MedicationSearchResult'
  /medications/interactions:
    post:
      operationId: checkMedicationInteractions
      tags:
        - Medications
      summary: Check drug interactions
      description: Run drug-drug and drug-allergy interaction checks for a set of medications.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InteractionCheckRequest'
      responses:
        '200':
          description: Detected interactions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InteractionCheckResult'
  /pharmacies/search:
    get:
      operationId: searchPharmacies
      tags:
        - Pharmacies
      summary: Search pharmacies
      description: Search the Surescripts pharmacy directory by name, city, state, ZIP, or specialty.
      parameters:
        - name: name
          in: query
          schema:
            type: string
        - name: city
          in: query
          schema:
            type: string
        - name: state
          in: query
          schema:
            type: string
        - name: zip
          in: query
          schema:
            type: string
        - name: specialty
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Matching pharmacies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PharmacySearchResult'
  /patients/{patientId}/pharmacies:
    get:
      operationId: getPatientPharmacies
      tags:
        - Pharmacies
      summary: List a patient's pharmacies
      description: Retrieve the pharmacies saved to a patient for prescription routing.
      parameters:
        - name: patientId
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: The patient's pharmacies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PharmacySearchResult'
    post:
      operationId: addPatientPharmacy
      tags:
        - Pharmacies
      summary: Add a pharmacy to a patient
      description: Save a pharmacy to a patient's preferred pharmacy list.
      parameters:
        - name: patientId
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddPharmacyRequest'
      responses:
        '200':
          description: The result of adding the pharmacy.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResult'
  /clinicians:
    get:
      operationId: searchClinicians
      tags:
        - Prescribers
      summary: Search clinicians
      description: Retrieve clinicians (prescribers) and supporting staff in the clinic.
      parameters:
        - name: pageNumber
          in: query
          schema:
            type: integer
      responses:
        '200':
          description: A list of clinicians.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClinicianListResult'
    post:
      operationId: createClinician
      tags:
        - Prescribers
      summary: Create a clinician
      description: Create a new clinician (prescriber) within the clinic.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Clinician'
      responses:
        '200':
          description: The created clinician.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClinicianResult'
  /clinicians/{clinicianId}:
    get:
      operationId: getClinician
      tags:
        - Prescribers
      summary: Get a clinician
      description: Retrieve a single clinician (prescriber) record by ID.
      parameters:
        - name: clinicianId
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: The requested clinician.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClinicianResult'
  /notifications/counts:
    get:
      operationId: getNotificationCounts
      tags:
        - Notifications
      summary: Get notification counts
      description: >-
        Retrieve the count of pending notifications and actionable items
        (transmission errors, refill requests, pharmacy responses) for the
        authenticated clinician.
      responses:
        '200':
          description: Notification counts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotificationCountResult'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        OAuth2 access token obtained from the DoseSpot token endpoint
        (POST /webapi/v2/connect/token) using your clinic and clinician
        credentials, sent as an Authorization: Bearer header.
    subscriptionKey:
      type: apiKey
      in: header
      name: Subscription-Key
      description: Per-application subscription key issued by DoseSpot.
  schemas:
    ApiResult:
      type: object
      properties:
        Result:
          $ref: '#/components/schemas/ResultStatus'
    ResultStatus:
      type: object
      properties:
        ResultCode:
          type: string
          description: OK or ERROR.
        ResultDescription:
          type: string
    Patient:
      type: object
      properties:
        PatientId:
          type: integer
        Prefix:
          type: string
        FirstName:
          type: string
        MiddleName:
          type: string
        LastName:
          type: string
        Suffix:
          type: string
        DateOfBirth:
          type: string
          format: date
        Gender:
          type: string
          description: Male, Female, or Unknown.
        Email:
          type: string
        PrimaryPhone:
          type: string
        PrimaryPhoneType:
          type: string
        Address1:
          type: string
        Address2:
          type: string
        City:
          type: string
        State:
          type: string
        ZipCode:
          type: string
        Active:
          type: boolean
        NonDoseSpotMedicalRecordNumber:
          type: string
    PatientResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            Item:
              $ref: '#/components/schemas/Patient'
    PatientListResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            Items:
              type: array
              items:
                $ref: '#/components/schemas/Patient'
            PageResult:
              $ref: '#/components/schemas/PageResult'
    Prescription:
      type: object
      properties:
        PrescriptionId:
          type: integer
        Status:
          type: string
          description: e.g. Entered, Printed, Sending, eRxSent, FaxSent, Error, Deleted, Requested, Edited, EpcsSigned.
        WrittenDate:
          type: string
          format: date-time
        Directions:
          type: string
        Quantity:
          type: string
        DispenseUnitId:
          type: integer
        Refills:
          type: string
        DaysSupply:
          type: integer
        PharmacyId:
          type: integer
        PharmacyNotes:
          type: string
        NoSubstitutions:
          type: boolean
        Medication:
          $ref: '#/components/schemas/Medication'
    PrescriptionResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            Item:
              $ref: '#/components/schemas/Prescription'
    PrescriptionListResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            Items:
              type: array
              items:
                $ref: '#/components/schemas/Prescription'
            PageResult:
              $ref: '#/components/schemas/PageResult'
    Medication:
      type: object
      properties:
        NDC:
          type: string
        LexiGenProductId:
          type: integer
        LexiDrugSynId:
          type: integer
        LexiSynonymTypeId:
          type: integer
        Name:
          type: string
        Strength:
          type: string
        GenericProductName:
          type: string
        DrugClassification:
          type: string
        Schedule:
          type: string
          description: DEA schedule for controlled substances.
    MedicationSearchResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            Items:
              type: array
              items:
                $ref: '#/components/schemas/Medication'
            PageResult:
              $ref: '#/components/schemas/PageResult'
    MedicationHistoryResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            Items:
              type: array
              items:
                $ref: '#/components/schemas/Medication'
    InteractionCheckRequest:
      type: object
      properties:
        PatientId:
          type: integer
        MedicationIds:
          type: array
          items:
            type: integer
    InteractionCheckResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            Interactions:
              type: array
              items:
                type: object
                properties:
                  Severity:
                    type: string
                  Description:
                    type: string
    Pharmacy:
      type: object
      properties:
        PharmacyId:
          type: integer
        StoreName:
          type: string
        Address1:
          type: string
        Address2:
          type: string
        City:
          type: string
        State:
          type: string
        ZipCode:
          type: string
        PrimaryPhone:
          type: string
        PrimaryFax:
          type: string
        PharmacySpecialties:
          type: array
          items:
            type: string
    PharmacySearchResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            Items:
              type: array
              items:
                $ref: '#/components/schemas/Pharmacy'
            PageResult:
              $ref: '#/components/schemas/PageResult'
    AddPharmacyRequest:
      type: object
      properties:
        PharmacyId:
          type: integer
        SetAsPrimary:
          type: boolean
    Clinician:
      type: object
      properties:
        ClinicianId:
          type: integer
        Prefix:
          type: string
        FirstName:
          type: string
        MiddleName:
          type: string
        LastName:
          type: string
        Suffix:
          type: string
        DateOfBirth:
          type: string
          format: date
        Email:
          type: string
        NPINumber:
          type: string
        DEANumber:
          type: string
        Address1:
          type: string
        City:
          type: string
        State:
          type: string
        ZipCode:
          type: string
        PrimaryPhone:
          type: string
        PrimaryFax:
          type: string
        Roles:
          type: array
          items:
            type: string
    ClinicianResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            Item:
              $ref: '#/components/schemas/Clinician'
    ClinicianListResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            Items:
              type: array
              items:
                $ref: '#/components/schemas/Clinician'
            PageResult:
              $ref: '#/components/schemas/PageResult'
    NotificationCountResult:
      allOf:
        - $ref: '#/components/schemas/ApiResult'
        - type: object
          properties:
            PendingPrescriptionsCount:
              type: integer
            TransmissionErrorsCount:
              type: integer
            RefillRequestsCount:
              type: integer
            PharmacyResponsesCount:
              type: integer
            TotalNotificationCount:
              type: integer
    PageResult:
      type: object
      properties:
        CurrentPage:
          type: integer
        TotalPages:
          type: integer
        PageSize:
          type: integer
        HasPrevious:
          type: boolean
        HasNext:
          type: boolean