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

# Get a barber's availability

> Get a barber's resolved availability for every date in a range. Each
date resolves the barber's weekly schedule and any overrides into its
working blocks, breaks, off-hours window, and state.

The barber can book any time on any date, including closed dates and
outside working hours. The state and working blocks describe the shape
of the day; they do not limit what the barber can book. Availability is
resolved at read time and can change as appointments are booked, so the
authoritative check happens when an appointment is created.



## OpenAPI

````yaml /api-reference/Barbers/openapi.yaml get /barbers/{id}/availability
openapi: 3.0.0
info:
  title: Barbers
  version: 0.1.0
  contact:
    name: Guile Engineering
    url: https://www.guile.app
    email: engineering@guile.app
  license:
    name: MIT
    url: https://opensource.org/license/mit
  description: The Barbers API provides operations for barbers on the Guile platform.
servers:
  - url: https://api.guile.app
    variables: {}
  - url: https://guile.fly.dev
    variables: {}
security: []
tags:
  - name: Barbers
    description: Barber profiles, schedules, and settings
paths:
  /barbers/{id}/availability:
    get:
      tags:
        - Barbers
      summary: Get a barber's availability
      description: |-
        Get a barber's resolved availability for every date in a range. Each
        date resolves the barber's weekly schedule and any overrides into its
        working blocks, breaks, off-hours window, and state.

        The barber can book any time on any date, including closed dates and
        outside working hours. The state and working blocks describe the shape
        of the day; they do not limit what the barber can book. Availability is
        resolved at read time and can change as appointments are booked, so the
        authoritative check happens when an appointment is created.
      operationId: getBarberAvailability
      parameters:
        - name: id
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/resourceId'
        - name: dates
          in: query
          required: true
          description: |-
            The calendar dates to resolve availability for. The range names both
            its start and end dates and covers at most 42 dates.
          schema:
            $ref: '#/components/schemas/dateRange'
          explode: false
      responses:
        '200':
          description: |-
            Ok.
            The operation succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/barberAvailability'
        '400':
          description: >-
            Bad Request.

            The request body, request headers, and/or query parameters are not
            well-formed.



            This problem response may have one of the following `type` values:

            *
            [https://docs.guile.app/problems/badRequest](https://docs.guile.app/problems/badRequest)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/apiProblem'
        '401':
          description: >-
            Unauthorized.

            The operation requires authentication but no authentication or
            insufficient authentication was given.



            This problem response may have one of the following `type` values:

            *
            [https://docs.guile.app/problems/unauthorized](https://docs.guile.app/problems/unauthorized)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/apiProblem'
        '403':
          description: >-
            Forbidden.

            The authenticated caller is not authorized to perform the requested
            operation.



            This problem response may have one of the following `type` values:

            *
            [https://docs.guile.app/problems/forbidden](https://docs.guile.app/problems/forbidden)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/apiProblem'
        '404':
          description: >-
            Not Found.

            There is no such resource at the request URL.



            This problem response may have one of the following `type` values:

            *
            [https://docs.guile.app/problems/notFound](https://docs.guile.app/problems/notFound)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/apiProblem'
        '422':
          description: >-
            Unprocessable Entity.

            The request body and/or query parameters were well-formed but
            otherwise invalid.



            This problem response may have one of the following `type` values:

            *
            [https://docs.guile.app/problems/unprocessableEntity](https://docs.guile.app/problems/unprocessableEntity)

            *
            [https://docs.guile.app/problems/invalidDateRange](https://docs.guile.app/problems/invalidDateRange)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/apiProblem'
        '429':
          description: >-
            Too Many Requests.

            The client has sent too many requests in a given amount of time.



            This problem response may have one of the following `type` values:

            *
            [https://docs.guile.app/problems/tooManyRequests](https://docs.guile.app/problems/tooManyRequests)
          headers:
            Retry-After:
              required: true
              description: The number of seconds to wait before retrying the request.
              schema:
                type: integer
                format: uint32
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/apiProblem'
      security:
        - BearerAuth: []
components:
  schemas:
    resourceId:
      type: string
      description: >-
        The unique, opaque system identifier for a resource.

        This case-sensitive ID is also used as path parameters in URLs or in
        other

        properties or parameters that reference a resource by ID rather than
        URL.
    dateRange:
      type: string
      maxLength: 24
      pattern: >-
        ^(\d{4}-\d{2}-\d{2}|[\[(](\d{4}-\d{2}-\d{2},(\d{4}-\d{2}-\d{2})?|,\d{4}-\d{2}-\d{2})[)\]])$
      description: >-
        A date range, supporting inclusive or exclusive endpoints.

        Dates ranges use dates expressed in `YYYY-MM-DD` [RFC
        3339](https://tools.ietf.org/html/rfc3339)

        `date` format.

        The value may have the following forms:

        - `YYYY-MM-DD` match the date exactly; equivalent to matching dates in
        the range `[YYYY-MM-DD,YYYY-MM-DD]`

        - `[YYYY-MM-DD,YYYY-MM-DD]` between two dates, inclusive of the
        endpoints

        - `(YYYY-MM-DD,YYYY-MM-DD)` between two dates, exclusive of the
        endpoints

        - `[YYYY-MM-DD,]` on or after the date

        - `(YYYY-MM-DD,)` after the date

        - `[,YYYY-MM-DD]` before or on the date

        - `(,YYYY-MM-DD)` before the date


        Examples:

        - '2022-05-19'

        - '[2022-05-01,2022-05-31]'

        - '[2022-05-01,2022-06-01)'

        - '[2022-05-19,]'

        - '(2022-05-19,)'

        - '[,2022-05-19]'

        - '(,2022-05-19)'.
    barberAvailability:
      type: object
      required:
        - days
      properties:
        days:
          type: array
          items:
            $ref: '#/components/schemas/barberDayAvailability'
          description: >-
            The resolved availability for each date in the requested range, in
            ascending date order.
      description: A barber's resolved availability across a range of calendar dates.
    apiProblem:
      type: object
      required:
        - type
        - title
        - occurredAt
        - id
        - status
      properties:
        type:
          allOf:
            - $ref: '#/components/schemas/uri'
          description: A URI reference that identifies the problem type.
        title:
          type: string
          maxLength: 120
          description: >-
            A short, human-readable summary of the problem type. The title is
            usually the same for all

            problems with the same `type`.
        occurredAt:
          type: string
          format: date-time
          description: >-
            The date-time when this problem occurred, in [RFC
            3339](https://tools.ietf.org/html/rfc3339)

            date-time `YYYY-MM-DDThh:mm:ss.sssZ` format, UTC. This is derived
            and immutable.
        detail:
          type: string
          maxLength: 256
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
        id:
          allOf:
            - $ref: '#/components/schemas/resourceId'
          description: >-
            The unique identifier for this problem. This is an immutable opaque
            string.
        status:
          allOf:
            - $ref: '#/components/schemas/statusCode'
          description: >-
            The [HTTP status
            code](https://datatracker.ietf.org/doc/html/rfc7231#section-6)for
            this

            occurrence of the problem.
        instance:
          allOf:
            - $ref: '#/components/schemas/uri'
          maxLength: 2048
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem. This is the URI of an

            API resource that the problem is related to, with a unique error
            correlation ID URI fragment.
        attributes:
          type: object
          additionalProperties: {}
          description: >-
            Additional optional attributes related to the problem. This data
            conforms to the schema

            associated with the error type.
        recovery:
          allOf:
            - $ref: '#/components/schemas/clientFailureRecovery'
          description: The recovery contract for this problem occurrence.
        problems:
          type: array
          items:
            $ref: '#/components/schemas/problem'
          maxItems: 128
          description: |-
            Optional root-causes if there are multiple problems in the request
            or API call processing.
      description: >-
        API problem or error response, as per

        [RFC 9457
        application/problem+json](https://tools.ietf.org/html/rfc9457).
    barberDayAvailability:
      type: object
      required:
        - date
        - state
        - workingHours
        - breaks
      properties:
        date:
          type: string
          format: date
          description: |-
            The date, in [RFC 3339](https://tools.ietf.org/html/rfc3339)
            date format (YYYY-MM-DD).
        state:
          allOf:
            - $ref: '#/components/schemas/barberDayAvailabilityState'
          description: >-
            Whether the barber works this date. Closed when there are no working
            blocks.
        workingHours:
          type: array
          items:
            $ref: '#/components/schemas/WorkingHours'
          description: >-
            The working blocks for this date, resolved after applying the
            barber's

            weekly schedule and any overrides. Empty when the barber does not
            work

            this date.
        breaks:
          type: array
          items:
            $ref: '#/components/schemas/ScheduledBreak'
          minItems: 0
          maxItems: 2
          description: The scheduled breaks within the working blocks for this date.
        offHours:
          allOf:
            - $ref: '#/components/schemas/OffHoursDayConfiguration'
          description: >-
            The off-hours booking window offered for this date. Present only on
            a

            date the barber works and offers off-hours booking.
        scheduleOverride:
          allOf:
            - $ref: '#/components/schemas/scheduleOverrideReference'
          description: >-
            The schedule override in effect for this date, when one applies.
            Present

            for time-off, holiday, and other overrides, including a partial
            override

            that reduces the working blocks.
      description: >-
        A barber's resolved availability for a single calendar date. The
        barber's

        weekly schedule and any schedule overrides are resolved into this date's

        working blocks. A schedule override of any type removes or reduces the

        working blocks and is reported in scheduleOverride.
    uri:
      type: string
      maxLength: 1024
      format: uri
      description: A URI reference to an internal or external resource.
    statusCode:
      type: integer
      format: uint16
      minimum: 100
      maximum: 599
      description: The HTTP status code for a response.
    clientFailureRecovery:
      type: object
      required:
        - outcome
        - retry
      properties:
        outcome:
          allOf:
            - $ref: '#/components/schemas/clientFailureOutcome'
          description: The known outcome of the request.
        retry:
          allOf:
            - $ref: '#/components/schemas/clientRetryDirective'
          description: The safe retry action for the request.
        sessionAction:
          allOf:
            - $ref: '#/components/schemas/clientSessionAction'
          description: The session action required before the request can continue.
        rateLimit:
          allOf:
            - $ref: '#/components/schemas/rateLimit'
          description: The rate limit state that prevented the request.
      description: The recovery contract for a failed client request.
    problem:
      type: object
      required:
        - type
        - title
        - occurredAt
        - id
        - status
      properties:
        type:
          allOf:
            - $ref: '#/components/schemas/uri'
          description: A URI reference that identifies the problem type.
        title:
          type: string
          maxLength: 120
          description: >-
            A short, human-readable summary of the problem type. The title is
            usually the same for all

            problems with the same `type`.
        occurredAt:
          type: string
          format: date-time
          description: >-
            The date-time when this problem occurred, in [RFC
            3339](https://tools.ietf.org/html/rfc3339)

            date-time `YYYY-MM-DDThh:mm:ss.sssZ` format, UTC. This is derived
            and immutable.
        detail:
          type: string
          maxLength: 256
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
        id:
          allOf:
            - $ref: '#/components/schemas/resourceId'
          description: >-
            The unique identifier for this problem. This is an immutable opaque
            string.
        status:
          allOf:
            - $ref: '#/components/schemas/statusCode'
          description: >-
            The [HTTP status
            code](https://datatracker.ietf.org/doc/html/rfc7231#section-6)for
            this

            occurrence of the problem.
        instance:
          allOf:
            - $ref: '#/components/schemas/uri'
          maxLength: 2048
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem. This is the URI of an

            API resource that the problem is related to, with a unique error
            correlation ID URI fragment.
        attributes:
          type: object
          additionalProperties: {}
          description: >-
            Additional optional attributes related to the problem. This data
            conforms to the schema

            associated with the error type.
      description: >-
        Standard problem or error response, as per

        [RFC 9457
        application/problem+json](https://tools.ietf.org/html/rfc9457).
    barberDayAvailabilityState:
      type: string
      enum:
        - working
        - closed
      description: >-
        Whether a barber works a calendar date, resolved from the weekly
        schedule and any overrides.
    WorkingHours:
      type: object
      required:
        - startsAt
        - duration
      properties:
        startsAt:
          type: string
          format: time
          description: >-
            The start time for this working block, in [RFC
            3339](https://tools.ietf.org/html/rfc3339)

            time format (HH:MM).
        duration:
          type: string
          format: duration
          description: >-
            Duration of this working block. The value is an

            [ISO 8601
            duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) string.
      description: A working hours block during a day.
    ScheduledBreak:
      type: object
      required:
        - startsAt
        - duration
      properties:
        startsAt:
          type: string
          format: time
          description: >-
            The start time for the break, in [RFC
            3339](https://tools.ietf.org/html/rfc3339)

            time format (HH:MM).
        duration:
          type: string
          format: duration
          description: >-
            Duration of the break. The value is an

            [ISO 8601
            duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) string.
        description:
          type: string
          maxLength: 100
          description: Optional description of the break.
      description: A scheduled break during a work day.
    OffHoursDayConfiguration:
      type: object
      properties:
        earliestStartTime:
          type: string
          format: time
          description: >-
            The earliest time bookings can be accepted before regular opening
            hours,

            in [RFC 3339](https://tools.ietf.org/html/rfc3339) time format
            (HH:MM).

            If omitted, no off-hours bookings are accepted before opening.
        latestEndTime:
          type: string
          format: time
          description: >-
            The latest time bookings can be accepted after regular closing
            hours,

            in [RFC 3339](https://tools.ietf.org/html/rfc3339) time format
            (HH:MM).

            If omitted, no off-hours bookings are accepted after closing.
      description: Off-hours time configuration for a single day.
    scheduleOverrideReference:
      type: object
      required:
        - id
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/resourceId'
          description: The unique identifier of the schedule override.
        type:
          allOf:
            - $ref: '#/components/schemas/scheduleOverrideType'
          description: The type of override.
        description:
          type: string
          maxLength: 255
          description: >-
            The reason or description for the override, when the barber provided
            one.
      description: >-
        A reference to the schedule override in effect for a date. This contains
        a

        subset of properties for the override. Use ScheduleOverride for the full

        resource entity.
    clientFailureOutcome:
      type: string
      enum:
        - notApplied
        - unknown
      description: The known outcome of a failed client request.
    clientRetryDirective:
      type: string
      enum:
        - doNotRetry
        - retrySameRequest
        - retrySameRequestAfterDelay
      description: The safe retry action for a failed client request.
    clientSessionAction:
      type: string
      enum:
        - refresh
        - signIn
      description: The session action required before a failed request can continue.
    rateLimit:
      type: object
      required:
        - limit
        - remaining
        - resetsAt
      properties:
        limit:
          type: integer
          format: uint64
          description: The maximum number of requests allowed in the active window.
        remaining:
          type: integer
          format: uint64
          description: The number of requests remaining in the active window.
        resetsAt:
          type: string
          format: date-time
          description: >-
            The date-time when the active window resets, in [RFC
            3339](https://tools.ietf.org/html/rfc3339) date-time
            `YYYY-MM-DDThh:mm:ss.sssZ` format, UTC.
      description: The rate limit state for the request.
    scheduleOverrideType:
      type: string
      enum:
        - timeOff
        - holiday
        - other
      description: Types of schedule overrides.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: Bearer

````