> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eat-now.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Search bookable reservation slots

> Returns only slots that are currently bookable for the requested `party_size` and filters. When a shift does not require room selection, `room_id` is `null`. When room selection is required, the same `start_at` may appear multiple times with different `room_id` values.



## OpenAPI

````yaml https://app.eat-now.io/api/partner/v1/openapi.json get /api/partner/v1/availability
openapi: 3.0.3
info:
  title: EatNow Partner API
  version: v1
  description: >-
    Version 1 of the EatNow partner API.


    This API is designed for trusted partner integrations that need
    restaurant-scoped access to availability, reservation management, and
    operational reference data.


    Authentication

    - Use `Authorization: Bearer <token>` with a partner API token created from
    the EatNow dashboard.

    - Access is controlled by credential scopes and each request is resolved to
    a single restaurant.


    Base URL

    - The server URL in this document is the canonical base URL for the current
    environment.


    Errors

    - Errors follow a consistent envelope with `error.code`, `error.message`,
    and `error.request_id`.

    - Validation, authentication, authorization, conflicts, and not-found cases
    all use the same top-level error shape.


    Rate limits

    - Partner API traffic is rate limited. Clients should treat `429` responses
    as retryable and back off accordingly.


    Public endpoints

    - `GET /api/partner/v1` and `GET /api/partner/v1/openapi.json` are public.

    - All business endpoints require Bearer authentication.
servers:
  - url: https://app.eat-now.io
security: []
tags:
  - name: Meta
    description: Platform metadata and schema endpoints
  - name: Authentication
    description: Credential validation and auth context endpoints
  - name: Availability
    description: Bookable slot search and exact slot validation
  - name: Catalog
    description: Reference data for restaurant tables, rooms, prescribers, and discounts
  - name: Reservations
    description: Reservation lookup, search, update, and cancellation
  - name: Missed Calls
    description: Report missed calls and trigger WhatsApp follow-up templates
paths:
  /api/partner/v1/availability:
    get:
      tags:
        - Availability
      summary: Search bookable reservation slots
      description: >-
        Returns only slots that are currently bookable for the requested
        `party_size` and filters. When a shift does not require room selection,
        `room_id` is `null`. When room selection is required, the same
        `start_at` may appear multiple times with different `room_id` values.
      operationId: searchPartnerAvailability
      parameters:
        - schema:
            type: string
            format: date-time
            description: Lower inclusive datetime bound for the search window.
          required: true
          description: Lower inclusive datetime bound for the search window.
          name: start_at_from
          in: query
        - schema:
            type: string
            format: date-time
            description: Upper inclusive datetime bound for the search window.
          required: true
          description: Upper inclusive datetime bound for the search window.
          name: start_at_to
          in: query
        - schema:
            type: integer
            minimum: 1
            description: Party size used to filter bookable slots.
          required: true
          description: Party size used to filter bookable slots.
          name: party_size
          in: query
        - schema:
            type: string
            minLength: 1
            description: Optional room filter. Only slots for this room are returned.
          required: false
          description: Optional room filter. Only slots for this room are returned.
          name: room_id
          in: query
        - schema:
            type: string
            minLength: 1
            description: Optional shift filter. Only slots for this shift are returned.
          required: false
          description: Optional shift filter. Only slots for this shift are returned.
          name: shift_id
          in: query
      responses:
        '200':
          description: >-
            Bookable slots only. Unavailable slots and remaining capacity counts
            are not returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiAvailabilitySearchResponse'
              examples:
                noRoomSelection:
                  summary: Shift without room selection
                  value:
                    data:
                      slots:
                        - start_at: '2026-04-08T19:15:00+01:00'
                          shift_id: shift_dinner
                          room_id: null
                roomSelection:
                  summary: Shift with room-specific slots
                  value:
                    data:
                      slots:
                        - start_at: '2026-04-08T20:00:00+01:00'
                          shift_id: shift_dinner
                          room_id: room_main
                        - start_at: '2026-04-08T20:00:00+01:00'
                          shift_id: shift_dinner
                          room_id: room_terrace
        '400':
          description: Request validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
        '401':
          description: Authentication failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
        '403':
          description: Scope is insufficient
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
      security:
        - PartnerBearerToken: []
components:
  schemas:
    PartnerApiAvailabilitySearchResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            slots:
              type: array
              items:
                $ref: '#/components/schemas/PartnerApiAvailabilitySlot'
              description: >-
                Only bookable slots matching the requested party size and
                filters. Unavailable slots are never returned.
          required:
            - slots
      required:
        - data
    PartnerApiError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              $ref: '#/components/schemas/PartnerApiErrorCode'
            message:
              type: string
            request_id:
              type: string
            details:
              type: object
              additionalProperties:
                nullable: true
          required:
            - code
            - message
            - request_id
      required:
        - error
    PartnerApiAvailabilitySlot:
      type: object
      properties:
        start_at:
          type: string
          format: date-time
          description: >-
            Bookable slot start datetime in the restaurant timezone, including
            offset.
        shift_id:
          type: string
          description: Identifier of the shift that makes this slot bookable.
        room_id:
          type: string
          nullable: true
          description: >-
            Identifier of the room for this slot when room selection is
            required. Null means the slot is bookable without selecting a
            specific room.
      required:
        - start_at
        - shift_id
        - room_id
    PartnerApiErrorCode:
      type: string
      enum:
        - AUTHENTICATION_REQUIRED
        - INVALID_AUTHENTICATION
        - INSUFFICIENT_SCOPE
        - VALIDATION_ERROR
        - RESOURCE_NOT_FOUND
        - RESOURCE_CONFLICT
        - RATE_LIMITED
        - INTERNAL_ERROR
  securitySchemes:
    PartnerBearerToken:
      type: http
      scheme: bearer
      bearerFormat: API Token
      description: >-
        Restaurant-scoped partner API token passed as `Authorization: Bearer
        <token>`.
      x-default: your_token_here

````