API Programs > Scheduling API

Scheduling API


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

Documentation/Services Highlights:

  • Added new Eligibility Endpoint
  • New VaccinationList Updates


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.

Eligibility

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

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

Eligibility API

This request will provide the eligibility of specific vaccination or immunization for a given state / dob.

Endpoint URL

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

Endpoint Information

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"
dob required The date of birth . "User's date of birth in YYYY-MM-DD format."

Example Request

curl --request POST \ 
--location 'https://services-qa.walgreens.com/api/vaccine/scheduling/eligibility/v1' \
--header 'Content-Type: application/json' \
--data '{
	"apiKey": "YOUR_API_KEY",
	"affId": "YOUR_AFFILIATE_ID",
	"state": "STATE_OF_PATIENT",
	"dob": "DATE_OF_BIRTH_OF_PATIENT"
}' \

Example Response

{
	"state": "STATE_OF_PATIENT",
	"age": 34,
	"category": null,
	"dob": "09/30/1990",
	"eligibleVaccineList": [{
		"vaccineCode": "VACCINE_CODE",
		"displayName": "DISPLAY_NAME",
		"eligible": ELIGIGIBILITY_FLAG,
		"vaccineType": "VACCINE_TYPE",
		"vaccineDisplayOrder": SUGGESTED_DISPLAY_ORDER,
		"restrictions": [{
			"code": "RESTRICTION_CODE",
			"message": "RESTRICTION_MESSAGE",
			"vaccineCode": "VACCINE_CODE",
			"minimunAge": RESTRICTION_MIN_AGE,
			"maximumAge": RESTRICTION_MAX_AGE
		}],
		"warnings": [{
			"code": "WARNING_CODE",
			"message": "WARNING_MESSAGE",
			"vaccineCode": "VACCINE_CODE",
			"minimunAge": WARNING_MIN_AGE,
			"maximumAge": WARNING_MAX_AGE
		}],
		"multiDose": IS_MULTI_DOSE,
		"seriesNumber": SERIES_NUMBER_META_DATA,
		"group": "IS_GROUPED_META_DATA",
		"serviceId": "SERVICE_ID_META_DATA"
	},
	...shortened for brevity
	],
	"inEligibleVaccineList": [{
		"vaccineCode": "VACCINE_CODE",
		"displayName": "DISPLAY_NAME",
		"eligible": ELIGIGIBILITY_FLAG,
		"vaccineType": "VACCINE_TYPE",
		"vaccineDisplayOrder": SUGGESTED_DISPLAY_ORDER,
		"restrictions": [{
			"code": "RESTRICTION_CODE",
			"message": "RESTRICTION_MESSAGE",
			"vaccineCode": "VACCINE_CODE",
			"minimunAge": RESTRICTION_MIN_AGE,
			"maximumAge": RESTRICTION_MAX_AGE
		}],
		"warnings": [{
			"code": "WARNING_CODE",
			"message": "WARNING_MESSAGE",
			"vaccineCode": "VACCINE_CODE",
			"minimunAge": WARNING_MIN_AGE,
			"maximumAge": WARNING_MAX_AGE
		}],
		"multiDose": IS_MULTI_DOSE,
		"seriesNumber": SERIES_NUMBER_META_DATA,
		"group": "IS_GROUPED_META_DATA",
		"serviceId": "SERVICE_ID_META_DATA"
	},
	...shortened for brevity
	]
}

Eligibility Response Description:

Name Optionality Description Example
state always State from the request. IL
age always Age calculate from dob in the request. 23
category always Category Metadata (not used today). null
dob always Date of Birth from the request. 09/01/2001
eligibleVaccineList always List of Vaccinations or immunizations the patient is eligible to get. EligibleVaccineList Objects
inEligibleVaccineList always List of Vaccinations or immunizations the patient is NOT eligible to get. IneligibleVaccineList Objects

EligibleVaccineList / IneligibleVaccineList Objects:

EligibleVaccineList objects are ones the patient is eligble to get, IneligibleVaccineList the patient is not eligible to get.

Name Optionality Description Example
vaccineCode always The string to identifiy a specific vaccination / immunization. "150"
displayName always The name of the vaccine or immunization. "Flu"
eligible always Boolean, denoting eligibility of patient for the vaccine or immunization. false would mean patient not eligible. true/false
vaccineType always Machine name of the vaccine / immunization "Flu"
vaccineDisplayOrder always The reccomended display order. 5
multiDose always Boolean, for the vaccine or immunization taking multiple doses. true / false
seriesNumber always Meta Data that can be ignored. "0"
group always Meta Data that can be ignored. "N"
serviceId always Meta Data that can be ignored. "99"
restrictions always Resctions are rules that could prevent the patient from being eligible. Must be presented to patient. Restrictions Objects
warnings always Warning are rules that could prevent the patient from being eligible. Must be presented to patient. Warnings Objects

Restrictions / Warnings Objects:

Restrictions objects prevent the patient from being elig, IneligibleVaccineList the patient is not eligible to get.

Name Optionality Description Example
code always The Resctriction or Warning ID "WAG_FC_VACCINE_SEASONAL_01"
"WAG_FC_INCOMPATIBLE_01"
"WAG_FC_AGERESTRICTION_01"
"WAG_FC_PRESCRIPTIONNEEDED_01"
message always The specific message that must be presented to the patient. "This vaccine is seasonal. Appointments will be available again in late summer."
"This vaccine can't be taken with the Hepatitis B vaccine."
"The patient is too young to receive this vaccine in your state."
"The patient is too old to receive this vaccine in your state."
"Prescription is mandatory for the vaccine."
vaccineCode sometimes The vaccine code that would prevent this vaccine from making the patient eligible, in the cases of incompatiblitiy "104"
minimunAge sometimes Minimun Age of patient to be eligible for vaccine or immunization 7
maximumAge sometimes Maximum Age of patient to be eligible for vaccine or immunization 19

Timeslots API

This request will provide the timeslots of available appointments for a specific vaccination or immunization 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

Endpoint Information

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 strings to 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

Appointment Availability Object

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 Object

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 --request POST \ 
--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

Endpoint Information

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 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 Object

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 --request POST \ 
--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 response does not return a Patient ID, and the PII is used only 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 Object containing the information about the patients contact preferences. Contact Object

Contact Object

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 Object

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 Object

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 --request POST \ 
--location 'https://services-qa.walgreens.com/api/vaccine/scheduling/patient/v1' \
--header 'Content-Type: application/json' \
--data '{
	"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

Endpoint Information

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

HTTP Method: PATCH


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 --request PATCH \
--location 'https://services-qa.walgreens.com/api/vaccine/scheduling/confirm/v1' \
--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
115 Td/Tdap (Tetanus, diphtheria with or without pertussis (whooping cough))
134 Japanese Encephalitis
150 Influenza
163 Meningitis B
174 Cholera
206 Mpox (Monkeypox) / Smallpox
207 COVID-19
223 Tick-borne encephalitis (TBE)
317 Chikungunya

Status Codes

Error Codes For Scheduling API:

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.