---
title: "List a Sonic Drive-In restaurant's order-ahead time slots"
method: GET
path: "/sonic/availability"
tags: ["Sonic"]
---

# List a Sonic Drive-In restaurant's order-ahead time slots

`GET /sonic/availability`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/sonic/availability`
- Auth: API key in header `x-api-key`

Returns the bookable order-ahead windows for one Sonic Drive-In restaurant, grouped by service channel and local date. Each window has a UTC start_time and end_time. Also returns the store's timezone, how long each window lasts (slot_duration_minutes), the prep/handoff buffer before the first bookable window (lead_time_minutes), and service_types -- every channel the store supports, which is a superset of the channels that currently have windows. fulfillment selects the request method and accepts exactly `PICKUP` or `DELIVERY`; note the per-window service_type is a separate, finer vocabulary and can be `ORDER_AHEAD`, `CURBSIDE_PICKUP`, `DRIVE_THROUGH`, `STORE`, `PICKUP` or `DELIVERY`. A closed or fully-booked restaurant returns an empty channels array with total_slots 0, not an error. An unknown store_id returns 404.

## Query parameters

- `store_id` string, required
- `fulfillment` 'PICKUP' | 'DELIVERY'

## Headers

- `x-api-key` string, required

## Response `200`

OK

- SonicAvailabilityResponseDoc
  - `code` integer: Code is the HTTP status code or a custom code used to indicate the result of the request @example 200
  - `data` SonicAvailabilityResponse
    - `channels` SonicAvailabilityChannel[]
      - `days` SonicAvailabilityDay[]
        - `count` integer
        - `date` string
        - `slots` SonicAvailabilitySlot[]
          - `end_time` string
          - `start_time` string
      - `service_type` string: ServiceType is Sonic's own channel name, e.g. "ORDER_AHEAD", "CURBSIDE_PICKUP", "DRIVE_THROUGH", "DELIVERY".
    - `fetched_at` string
    - `fulfillment` string
    - `lead_time_minutes` integer: LeadTimeMinutes is the store's prep/handoff buffer before the first bookable slot -- the upstream reports it as pickupBuffer on a PICKUP query and deliveryBuffer on a DELIVERY one; both are surfaced here under one name.
    - `service_types` string[]: ServiceTypes is every channel the store supports, which is a superset of the channels that have slots in this response.
    - `slot_duration_minutes` integer: SlotDurationMinutes is how long each window lasts.
    - `source_url` string
    - `store_id` string
    - `timezone` string
    - `total_slots` integer
  - `msg` unknown

## Other responses

- `400`: Bad Request
- `404`: Not Found
- `429`: Too Many Requests
- `503`: Service Unavailable

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/afac9b012a27?raw)
