# Find Provider Availability and Book Appointments Before using this guide you will need a developer account and an access token. You can contact us about creating a developer account [here](https://developer.zocdoc.com/?utm_medium=organicpro&utm_routing=API_Sender#api-form). To get an access token, review the [authentication and access tokens](/guides/authentication) guide. ## 1. Get NPIs First you need to retrieve the list of active provider NPIs within your Zocdoc directory. A Zocdoc directory is a developer-managed list of Zocdoc providers. Each developer account has at least one directory, and multiple directories can be created if needed to support your specific API use case. The primary purpose of a directory is to define which providers are available for booking through your application. You can also use directories to explore the Zocdoc marketplace and identify providers you may want to include in your bookable directory. ## 2. Get provider information There are three ways to retrieve provider-specific information: details summary strong Search by NPI NPIs retrieved in the previous step can be used to fetch detailed provider information, including name, gender identity, spoken languages, specialties, visit reasons, and affiliated locations. Up to 50 NPIs can be queried in a single request. details summary strong Search by ZIP and specialty or visit reason If you don’t have NPIs, you can search by ZIP code and specialty or visit reason to find providers. This is beneficial when looking by distance or specifc reason. details summary strong Search by provider location You can also retrieve provider information using specific `provider_location_id`s. This is useful for patients who want to see a specific doctor at a specific location. ## 3. Get availability Using a specific `provider_location_id`, `visit_reason_id`, and `patient_type`, you can retrieve the provider's availability. `start_date_in_provider_local_time` defaults to current date in US Eastern Time. `YYYY-MM-DD` format. `end_date_in_provider_local_time` defaults to 7 days after the current date. Must be 30 days or less after the start date. You can request availability up to a maximum of 150 days into the future. ## 4. Book an appointment Using an available `start_time` you can create an appointment for the patient. This will return an `appointment_id` which can be used to confirm, cancel, or reschedule the appointment.