Skip to main content

Overview

The Pharmacy API provides GraphQL access to prescription data, medication information, and pharmacy operations. GraphQL Endpoint: https://api.allcare.ai/graphql Authentication: API Key or OAuth 2.0 required Required Scope: read:pharmacy (read), write:pharmacy (write)

Core Entities

Prescription

Complete prescription information including medication, patient, prescriber, and pharmacy details.

Medication

Drug information from First Databank including interactions, dosing, and clinical data.

Pharmacy

Pharmacy profiles, locations, and contact information.

Queries

Get Prescription

query GetPrescription($id: ID!) {
  prescription(id: $id) {
    id
    rxNumber
    status
    patient {
      id
      firstName
      lastName
      dateOfBirth
    }
    prescriber {
      firstName
      lastName
      npi
      dea
    }
    medication {
      name
      genericName
      ndc
      strength
      dosageForm
    }
    dosage
    quantity
    daysSupply
    refills
    refillsRemaining
    writtenDate
    fillDate
    expirationDate
    pharmacy {
      name
      ncpdpId
      phone
      address {
        street1
        city
        state
        zipCode
      }
    }
    isControlledSubstance
    deaSchedule
    notes
  }
}

Search Prescriptions

query SearchPrescriptions(
  $patientId: ID
  $prescriberId: ID
  $pharmacyId: ID
  $status: PrescriptionStatus
  $startDate: Date
  $endDate: Date
) {
  prescriptions(
    patientId: $patientId
    prescriberId: $prescriberId
    pharmacyId: $pharmacyId
    status: $status
    dateRange: { start: $startDate, end: $endDate }
  ) {
    id
    rxNumber
    status
    patient {
      firstName
      lastName
    }
    medication {
      name
    }
    writtenDate
    fillDate
  }
}

Get Medication Information

query GetMedication($ndc: String!) {
  medication(ndc: $ndc) {
    ndc
    name
    genericName
    brandName
    manufacturer
    strength
    dosageForm
    route
    deaSchedule
    therapeuticClass
    interactions {
      severity
      description
      contraindication
    }
    sideEffects
    warnings
    pricing {
      awp
      wac
    }
  }
}

Search Medications

query SearchMedications($query: String!, $limit: Int = 20) {
  searchMedications(query: $query, limit: $limit) {
    ndc
    name
    genericName
    strength
    dosageForm
    deaSchedule
    isGeneric
  }
}

Get Pharmacy Queue

query GetPharmacyQueue($pharmacyId: ID!, $status: PrescriptionStatus) {
  pharmacy(id: $pharmacyId) {
    id
    name
    prescriptionQueue(status: $status) {
      id
      rxNumber
      status
      patient {
        firstName
        lastName
      }
      medication {
        name
        strength
      }
      priority
      receivedAt
      assignedTo
    }
  }
}

Mutations

Send Prescription

mutation SendPrescription($input: PrescriptionInput!) {
  sendPrescription(input: $input) {
    id
    rxNumber
    status
    sentAt
  }
}
Variables:
{
  "input": {
    "patientId": "pat_12345",
    "prescriberId": "doc_67890",
    "pharmacyId": "pharm_11111",
    "medicationNdc": "00002-1234-56",
    "dosage": "10 mg",
    "quantity": 30,
    "daysSupply": 30,
    "refills": 3,
    "instructions": "Take one tablet daily with food",
    "indication": "Hypertension"
  }
}

Update Prescription Status

mutation UpdatePrescriptionStatus($id: ID!, $status: PrescriptionStatus!, $notes: String) {
  updatePrescriptionStatus(id: $id, status: $status, notes: $notes) {
    id
    status
    updatedAt
    statusHistory {
      status
      timestamp
      updatedBy
    }
  }
}

Cancel Prescription

mutation CancelPrescription($id: ID!, $reason: String!) {
  cancelPrescription(id: $id, reason: $reason) {
    id
    status
    cancelledAt
    cancelReason
  }
}

Fill Prescription

mutation FillPrescription($id: ID!, $input: FillPrescriptionInput!) {
  fillPrescription(id: $id, input: $input) {
    id
    status
    fillDate
    pharmacist {
      name
      licenseNumber
    }
    ndc
    lotNumber
    expirationDate
  }
}

Prescription Status

Prescriptions flow through these statuses:
StatusDescription
PENDINGReceived, awaiting review
VERIFIEDPharmacist verified
FILLINGBeing prepared
READYReady for pickup/delivery
DISPENSEDDispensed to patient
CANCELLEDCancelled
EXPIREDExpired

Drug Interaction Checking

query CheckInteractions($patientId: ID!, $newMedicationNdc: String!) {
  checkDrugInteractions(patientId: $patientId, newMedicationNdc: $newMedicationNdc) {
    severity
    type
    description
    existingMedication {
      name
      ndc
    }
    newMedication {
      name
      ndc
    }
    recommendation
    clinicalSignificance
  }
}
Severity Levels:
  • CRITICAL - Contraindicated, do not prescribe
  • MAJOR - May require dosage adjustment or monitoring
  • MODERATE - Monitor for adverse effects
  • MINOR - Usually clinically insignificant

Controlled Substances

C-II Prescriptions

Schedule II controlled substances require additional handling:
query GetControlledSubstancePrescription($id: ID!) {
  prescription(id: $id) {
    id
    isControlledSubstance
    deaSchedule
    prescriber {
      dea
      deaExpiration
      deaVerified
    }
    epcsSignature {
      signed
      signedAt
      method
      verified
    }
    inventory {
      tracked
      lotNumber
      dispensedQuantity
    }
  }
}

DEA Reporting

query GetDEAReport($pharmacyId: ID!, $startDate: Date!, $endDate: Date!) {
  deaReport(
    pharmacyId: $pharmacyId
    dateRange: { start: $startDate, end: $endDate }
  ) {
    scheduleII {
      received
      dispensed
      returned
      destroyed
      balance
    }
    scheduleIII_V {
      dispensed
    }
  }
}

Inventory Management

query GetInventory($pharmacyId: ID!, $ndc: String) {
  pharmacyInventory(pharmacyId: $pharmacyId, ndc: $ndc) {
    ndc
    medication {
      name
      strength
    }
    quantityOnHand
    quantityAvailable
    reorderPoint
    reorderQuantity
    lastRestockDate
    expiringStock {
      lotNumber
      quantity
      expirationDate
    }
  }
}
mutation UpdateInventory($pharmacyId: ID!, $ndc: String!, $quantity: Int!, $lotNumber: String!) {
  updateInventory(
    pharmacyId: $pharmacyId
    ndc: $ndc
    quantity: $quantity
    lotNumber: $lotNumber
  ) {
    ndc
    quantityOnHand
    updatedAt
  }
}

Claims and Billing

query GetClaim($claimId: ID!) {
  pharmacyClaim(id: $claimId) {
    id
    prescription {
      rxNumber
    }
    payer {
      name
      bin
      pcn
    }
    submittedAmount
    paidAmount
    patientPay
    status
    submittedAt
    paidAt
    rejectionReason
  }
}

Webhooks

Subscribe to pharmacy events:
  • prescription.received
  • prescription.verified
  • prescription.filled
  • prescription.cancelled
  • inventory.low
  • claim.rejected
  • claim.paid

Best Practices

Compliance

DEA Compliance RequiredAll controlled substance handling must comply with:
  • DEA regulations (21 CFR Part 1300)
  • EPCS requirements for electronic prescriptions
  • State pharmacy board regulations
  • Prescription monitoring program (PMP) reporting

Rate Limits

  • Query operations: 100 requests/minute
  • Mutation operations: 50 requests/minute
  • Inventory updates: 200 requests/minute