API Programs > Scheduling API

Scheduling API


The Walgreens Scheduling API allows developers to integrate the ability to get timeslots, hold appointment, attach patients, and confirm appointments for vaccines or immunizations at any Walgreens location across the United States and Puerto Rico.

Documentation/Services Highlights:

  • First version of the documentation, let us know if we need to add anything!

Below are the technical steps you will need to go through in order to get your integration configured and branded correctly:


The services listed below make up the complete list of services that are required in order to complete all phases of the Scheduling experience. Please note that all of the service endpoints documented below are brand new for this version of the API.

Timeslots

  • Timeslots:
    POST/api/vaccine/scheduling/timeslots/v1

Hold Appointment

  • Hold Appointment:
    POST/api/vaccine/scheduling/hold/v1

Patient Attach

  • Patient Attach:
    POST/api/vaccine/scheduling/patient/v1

Confirm Appointment

  • Confirm Appointment:
    POST/api/vaccine/scheduling/confirm/v1

Timeslots API

This request will provide the timeslots of available appointments for a specific vaccination or immuninization at specific Walgreens locations.

Endpoint URL

Sandbox:
https://services-qa.walgreens.com/api/vaccine/scheduling/timeslots/v1
Production:
https://services.walgreens.com/api/vaccine/scheduling/timeslots/v1


Request format JSON
Response format JSON
Authentication? Yes
Rate limited? Yes
Requests Per Minute 300

Request Body

Name Optionality Description Example
apiKey required Your API Key. "AbCdEfGhIjKlMnOpQrStUvWxYz"
affId required Your AffiliateID. "AAAAAAAAAA"
state required Two-character state code where the vaccination is being sought. "IL"
zipCode required Zipcode of the location where the vaccination is being sought. "60610"
dob required The date of birth . "User's date of birth in YYYY-MM-DD format."
vaccine required A array of string identifiy specific vaccination / immunization ID's. Limit of 4 different ID's per request. ["207"]
Vaccination List
appointmentAvailability required An appointmentAvailability object, used to filter specific dates. Appointment Availability
position required A position object, used to locate store results. Position

appointmentAvailability

Name Optionality Description Example
startDateTime required Start date for the timeslot search in YYYY-MM-DD format. 2024-04-25
endDateTime optional End date for the timeslot search in YYYY-MM-DD format. 2024-04-26

position

Name Optionality Description Example
latitude required The Latitude coordinate of the user. 41.876468
longitude required The Longitude coordinate of the user. -87.639176

Example Request

curl --location 'https://services-qa.walgreens.com/api/vaccine/scheduling/timeslots/v1' \
--header 'Content-Type: application/json' \
--data '{
  "apiKey": "YOUR_API_KEY",
  "affId": "YOUR_AFFILIATE_ID",
  "state": "IL",
  "zipCode": "94015",
  "dob": "2001-01-01",
  "vaccine": [
    "207",
    "150",
    "93"
  ],
  "isEligibility": false,
  "appointmentAvailability": {
    "startDateTime": "2024-04-28",
    "endDateTime": "2024-04-29"
  },
  "position": {
    "latitude": 42.0646736,
    "longitude": -87.93838219999999
  }
}' \
                        

Example Response

{
  "locations": [{
    "locationId": "THE_LOCATION_ID",
    "name": "THE_LOCATION_NAME",
    "storenumber": "THE_STORE_NUMBER",
    "description": "THE_STORE_DESCRIPTION",
    "position": {
      "latitude": STORE_LATITUDE,
      "longitude": STORE_LONGITUDE
    },
    "address": {
      "line1": "STORE_STREET_ADDRESS",
      "line2": "STORE_STREET_ADDRESS_2",
      "city": "STORE_CITY",
      "state": "STORE_STATE",
      "country": "STORE_COUNTRY",
      "zip": "STORE_ZIP"
    },
    "phone": [{
      "type": "STORE_PHONE_TYPE",
      "number": "STORE_PHONE_NUMBER"
    },
    ...shortened for brevity
    ],
    "distance": #.#,
    "timeZone": "STORE_TIMEZONE_2_CHAR",
    "appointmentAvailability": [{
      "manufacturer": [{
        "productId": "MANUFACTURER_PRODUCT_ID",
        "vaccineCode": "WALGREENS_VACCINE_CODE",
        "vaccineName": "WALGREENS_VACCINE_NAME",
        "category": "WALGREENS_VACCINE_CATEGORY",
        "prescriptionRequired": true or false
      },
      ...shortened for brevity
      ],
      "date": "YYYY-MM-DD",
      "day": "DAY_OF_WEEK",
      "slots": [
        "HH:MM am",
        "HH:MM pm",
      ...shortened for brevity
      ],
      "numberOfSlotsAvailable": NUMBER_OF_SLOTS_AVAILABLE
    },
    ...shortened for brevity
    ]
  },
  ...shortened for brevity
  ]
}
							
                            

Hold Appointment API

This request enables users to hold vaccinations or immunization appointment timeslots at nearby Walgreens stores based on vaccine availability which were selected from the Timeslots request.

Endpoint URL

Sandbox:
https://services-qa.walgreens.com/api/vaccine/scheduling/hold/v1
Production:
https://services.walgreens.com/api/vaccine/scheduling/hold/v1


Request format JSON
Response format JSON
Authentication? Yes
Rate limited? Yes
Requests Per Minute 300

Request Body

Name Optionality Description Example
apiKey required Your API Key. "AbCdEfGhIjKlMnOpQrStUvWxYz"
affId required Your AffiliateID. "AAAAAAAAAA"
locationId required ID of the location returned by the TimeSlot API. "b8805d18-fb10-4833-ba43-3cc8df4d7c1d"
appointmentDate required Date time stamp of the appointment in in ISO format YYYY-MM-DDTHH:MM:SS-HH:MM. "2024-04-25T09:30:00-06:00"
slot required Appointment timeslot. "09:30 am"
channel required The channel in which the request is coming from. "Web" or "Mobile"
client required Your client name. "AAAAAAAAAA" (contact us)
engagementType required Your engagementType will always be "Guest". "Guest" (static value)
vaccines required A Vaccines Object array, used to specify the specific vaccinations or immunizations being requested. Vaccines Object Array

vaccines

Name Optionality Description Example
code required The code of the vaccination / immunization. "150"
productId required The product ID from the TimeSlot API. "5fe2f39e8c6dd20dec60a594"

Example Request

curl --location 'https://services-qa.walgreens.com/api/vaccine/scheduling/hold/v1' \
--header 'Content-Type: application/json' \
--data '{
  "apiKey": "YOUR_API_KEY",
  "affId": "YOUR_AFFILIATE_ID",
  "locationId": "USER_SELECTED_TIMESLOT_LOCATION_ID", 
  "appointmentDate": "USER_SELECTED_TIMESLOT_APPOINTMENT_DATE_TIME_STAMP",
  "slot": "USER_SELECTED_TIMESLOT_TIME",
  "channel": "Web",
  "client": "YOUR_CLIENT_NAME",
  "engagementType": "Guest",
  "vaccines": [{
    "code": "USER_SELECTED_TIMESLOT_VACCINATION_CODE",
    "productId": "USER_SELECTED_TIMESLOT_VACCINATION_PRODUCT_ID"
  }]
}' \
                        

Example Response

{
  "engagementId": "USER_SESSION_ENGAGEMENT_ID"
}
                            

Patient Attach API

This request creates a new patient record with personal identifiable information (PII) for a given engagementId retrieved from the Hold Appointment API. The repsonse does not return a Patient ID, and the PII is used soley to create vaccination or immunization appointment booking.

Endpoint URL

Sandbox:
https://services-qa.walgreens.com/api/vaccine/scheduling/patient/v1
Production:
https://services.walgreens.com/api/vaccine/scheduling/patient/v1


Request format JSON
Response format JSON
Authentication? Yes
Rate limited? Yes
Requests Per Minute 300

Request Body

Name Optionality Description Example
apiKey required Your API Key. "AbCdEfGhIjKlMnOpQrStUvWxYz"
affId required Your AffiliateID. "AAAAAAAAAA"
engagementId required Your AffiliateID. "662c410d1310e000648d6bae"
partnerId required Your client name. "AAAAAAAAAA" (contact us)
firstName required Patient first name. "John"
middleName optional Patient middle name. "David" or ""
lastName required Patient last name. "Smith"
dob required Patient date of birth in "YYYY-MM-DD" format. "1990-01-01"
gender required Patient gender. "male" or "female" or "other" or "unknown".
contact required A Contact Objcet containing the information about the customers contact preferences. Contact Object

contact

Name Optionality Description Example
phones required A Phones Object array containing the phone number object. Used to send SMS confirmation of appointment. Phones Object array
emails required A Emails Object array containing the email object. Used to send Email confirmation of appointment. Emails Object array

phones

Name Optionality Description Example
type required The type of phone. We prefer this to be "Mobile" always so SMS appointment confirmation can be delivered. "Mobile"
number required The mobile phone number of the patient, format ###-###-####. 111-111-1111
smsConsent required The patient's sms consent field. If set to Agree patient will get SMS appointment confirmation delivered. "Agree" or "Disagree"

emails

Name Optionality Description Example
type required The type of email address. "Email"
address required The address of the email example@walgreens.com

Example Request

curl --location 'https://services-qa.walgreens.com/api/vaccine/scheduling/patient/v1' \
--header 'Content-Type: application/json' \
--data-raw '{
  "apiKey": "YOUR_API_KEY",
  "affId": "YOUR_AFFILIATE_ID",
  "engagementId": "USER_SESSION_ENGAGEMENT_ID"
  "partnerId": "YOUR_CLIENT_NAME",
  "firstName": "PATIENT_FIRST_NAME",
  "middleName": "PATIENT_MIDDLE_NAME",
  "lastName": "PATIENT_LAST_NAME",
  "dob": "PATIENT_DOB",
  "gender": "PATIENT_GENDER",
  "contact": {
    "phones": [{
      "type": "Mobile",
      "number": "PATIENT_PHONE_NUMBER",
      "smsConsent": "Agree"
    }],
    "emails": [{
      "type": "Email",
      "address": "PATIENT_EMAIL"
    }]
  }
}'
							

Example Response

201 HTTP Status Code
                            

Confirm Appointment API

This request enables users to confirm vaccination or immunization appointment based on engagementId. An appointment is not actually booked until a successful response is returned from this request.

Endpoint URL

Sandbox:
https://services-qa.walgreens.com/api/vaccine/scheduling/confirm/v1
Production:
https://services.walgreens.com/api/vaccine/scheduling/confirm/v1


Request format JSON
Response format JSON
Authentication? Yes
Rate limited? Yes
Requests Per Minute 300

HTTP Method: PATCH


Request Body

Name Optionality Description Example
apiKey required Your API Key. "AbCdEfGhIjKlMnOpQrStUvWxYz"
affId required Your AffiliateID. "AAAAAAAAAA"
engagementId required Engagement ID received from the Hold Appointment API. "AAAAAAAAAAAAAA1234567890"

Example Request

curl --location 'https://services-qa.walgreens.com/api/vaccine/scheduling/confirm/v1' \ --request PATCH
--header 'Content-Type: application/json' \
--data '{
  "apiKey": "YOUR_API_KEY",
  "affId": "YOUR_AFFILIATE_ID",
  "engagementId": "USER_SESSION_ENGAGEMENT_ID"
}' \

Example Response

204 HTTP Status Code

Vaccination/Immunization List:

Please find below the list of current vaccination or immunization codes and names.

Code Name
03 MMR
10 Polio
18 Rabies
21 Chickenpox
33 Pneumonia
37 Yellow Fever
43 Hepatitis B - Adult
52 Hepatitis A - Adult
62 HPV
87 Shingles
93 RSV
101 Typhoid
104 Hepatitis A/B Combo
113 Td
115 Tdap
134 Japanese Encephalitis
136 Meningitis
150 Influenza
163 Meningitis B
174 Cholera
207 COVID-19

Statuses / Error Codes:

Please see the various tables below mapping the various status codes and error codes across each endpoint.

ENDPOINT HTTP STATUS CODE DESCRIPTION
TIMESLOTS 200 Success, returns timeslots avilable based on requested filters.
TIMESLOTS 400 Malformed request body.
TIMESLOTS 403 Invalid apiKey.
TIMESLOTS 500 Internal server error.
TIMESLOTS 502 Bad gateway to internal server.
HOLD 200 Appointment held successfully, returns engagementId.
HOLD 400 Malformed request body.
HOLD 403 Invalid apiKey.
HOLD 401 The request is not authorized.
HOLD 409 Error placing a hold for requested timeslot.
HOLD 500 Internal server error.
PATIENT 201 Patient attached to appointment successfully.
PATIENT 400 Malformed request body.
PATIENT 401 The request is not authorized.
PATIENT 403 Invalid apiKey.
PATIENT 409 Patient information already exists for engagementId.
PATIENT 500 Internal server error.
PATIENT 502 Bad gateway to internal server.
CONFIRM 204 Appointment confirmed successfully.
CONFIRM 401 The request is not authorized.
CONFIRM 403 Invalid APIKey.
CONFIRM 409 Error confirming the appointment.
CONFIRM 500 Internal server error.