Gladly Business Hours API

**Business Hours** define the operating schedule for your organization. They determine when your organization is available to handle customer communications and can be used to control routing, auto-responses, and other time-sensitive workflows. Business hours configurations include: - **Schedule blocks** for each day of the week specifying start and end times - **Timezone** in IANA format (e.g., America/Los_Angeles) - **Exceptions** for holidays or special dates One business hours configuration is marked as **primary** and serves as the default schedule for your organization. The primary business hours cannot be deleted.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

gladly-business-hours-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Gladly Agents Business Hours API
  version: '1.0'
  description: '# Introducing the Gladly API


    At Gladly, we believe that customer service is best when it''s a conversation.

    That means more than just helping customers with one-off questions or issues: it''s about making them feel known, valued, and respected for the individuals they are.


    The Gladly API was built to help facilitate those relationships, providing agents with the rich customer context

    they need to deliver seamless experiences that make customers feel like they''re more than just a number in a sea of others.


    # Overview


    You can integrate easily with Gladly by calling Gladly''s [REST API](#section/Overview/REST-API)

    and implementing the [Lookup API](#section/Overview/Lookup-API) to provide data from your own services.


    Some examples of what you do through Gladly APIs include managing customer profile data, interacting with a customer''s timeline,

    providing the latest information about a customer''s orders, and more.


    ## REST API


    Clients can access the **REST API** via HTTPS at your organization''s Gladly domain (e.g. `https://{organization}.gladly.com`).


    Resources follow REST semantics and utilize industry-standard HTTP verbs, response codes, and authentication schemes.

    In addition, all responses and payloads are in JSON with consistent error codes and formats.


    ## Lookup API


    The Gladly **Lookup API** allows your organization to provide data services to power the agent''s experience with a complete view of your customers''

    information, transactions, and activity. You can provide a web service that implements the Lookup API and Gladly will call it when that data is needed.


    Like the REST API, the Lookup API is specified using REST semantics, and exchanges JSON requests and responses authenticated and signed with secure keys.


    Gladly will perform lookups when certain activities occur within Gladly, such as when a customer''s profile is loaded.


    A detailed overview of Lookup Adaptor architecture, requests, resposnes and more can be found [here](https://help.gladly.com/developer/docs/lookup-adapter-introduction).


    ## Testing


    Test the myriad possibilities of the Gladly API in a safe, secure space. We''ll enable the Gladly API in a separate sandbox environment, so you can experiment freely without impacting your production environment (or vice versa).


    Your sandbox environment is accessible at `https://{organization}.gladly.qa`, where `organization` is your company name. For specific API endpoints, see documentation below.


    # Getting Started


    Think of this section as getting the keys to unlocking your access to the Gladly APIs.

    First, you''ll need to set up an account with the necessary API [permissions](#/section/Getting-Started/Permissions).

    With these permissions, you can then go on to create the [API Token(s)](#section/Getting-Started/Creating-API-Tokens) you need to access Gladly''s API [resources](#section/Overview/Resources).


    ## Permissions


    Gladly Administrators can set API permissions on an agent-by-agent basis.

    We''ll discuss how this maps to API access in the section on [authentication](#section/Authentication) below.


    To allow a user to create API tokens and access the API:

    1. Log in to your Gladly instance.

    2. Open the menu on the top left-hand corner of the page.

    3. Navigate to **Settings** > **Users*

    4. Search and click the user profile you wish to give access to.

    5. You''ll see a permission called **API User**. Select it, while making sure to keep the user''s **Agent** role intact.

    6. Hit **Save** to give access.


    ![Agent profile screen](assets/permissions-agent.png)


    We recommend creating a dedicated user to make API calls, whose account won''t be used for agent and organization management.

    This will help you with any future audits of API activity vs. agent activity.


    ## Creating API Tokens


    You must create an API token to access Gladly API resources (see above [Permissions](#/section/Getting-Started/Permissions)).

    If your profile already has access to the **API User** permission, you''ll see a menu item titled **More settings**. Click **More settings**:


    ![API Token Menu](assets/permissions-token-nav.png)


    Click **API Tokens**, then the **Create Token** button on the upper right-hand corner of the page:


    ![API Token Add](assets/permissions-token-add.png)


    A token will be generated and named, by default, **New Token** (though depending on whether you have existing tokens, it may be named New Token 2, or New Token 3, etc.).

    You can rename the token to something more easily referenceable by clicking the name to edit.


    This token will be associated with your agent profile, which we refer to as the API User in this document.


    ![API Token View](assets/permissions-token-view.png)


    For security purposes, you''ll only see a new token once before you navigate away from the page.


    ## Replacing/Rotating API Tokens


    Should you lose this token, or wish to rotate your application keys, you can do the following:


    1. Generate a new token.

    2. Store the new token in a secure location.

    3. Delete the old token.

    4. Update your applications/scripts with the new token.


    # Authentication


    <!-- ReDoc-Inject: <security-definitions> -->'
servers:
- url: https://{organization}.gladly.com/api/v1
  description: Production
  variables:
    organization:
      default: organization
      description: Your Gladly organization subdomain
- url: https://{organization}.gladly.qa/api/v1
  description: Sandbox
  variables:
    organization:
      default: organization
      description: Your Gladly QA organization subdomain
security:
- basicAuth: []
tags:
- name: Business Hours
  description: '**Business Hours** define the operating schedule for your organization. They determine when your organization is available to handle customer communications and can be used to control routing, auto-responses, and other time-sensitive workflows.


    Business hours configurations include:

    - **Schedule blocks** for each day of the week specifying start and end times

    - **Timezone** in IANA format (e.g., America/Los_Angeles)

    - **Exceptions** for holidays or special dates


    One business hours configuration is marked as **primary** and serves as the default schedule for your organization. The primary business hours cannot be deleted.

    '
paths:
  /api/v1/business-hours:
    get:
      tags:
      - Business Hours
      summary: List Business Hours
      description: 'Returns a list of all business hours configurations for your organization.

        '
      operationId: getBusinessHours
      responses:
        '200':
          description: Business hours
          content:
            application/json:
              schema:
                title: BusinessHoursList
                type: array
                items:
                  $ref: '#/paths/~1api~1v1~1business-hours/post/responses/201/content/application~1json/schema'
              example:
              - id: bh_WmeA3Y51Q5ayCAaZ1AotIA
                version: 1
                createdAt: '2024-01-15T09:00:00Z'
                updatedAt: '2024-01-15T09:00:00Z'
                name: Default Hours
                primary: true
                officeHours:
                  timezone: America/Los_Angeles
                  monday:
                  - start: 09:00
                    stop: '17:00'
                  tuesday:
                  - start: 09:00
                    stop: '17:00'
                  wednesday:
                  - start: 09:00
                    stop: '17:00'
                  thursday:
                  - start: 09:00
                    stop: '17:00'
                  friday:
                  - start: 09:00
                    stop: '17:00'
    post:
      tags:
      - Business Hours
      summary: Create Business Hours
      description: 'Creates a new business hours configuration for your organization.

        '
      operationId: createBusinessHours
      requestBody:
        required: true
        description: Business hours configuration to create
        content:
          application/json:
            schema:
              title: BusinessHoursCreateRequest
              type: object
              required:
              - name
              - officeHours
              properties:
                name:
                  type: string
                  description: Name of the business hours configuration (max 200 characters)
                  example: Default Hours
                primary:
                  type: boolean
                  description: Whether this should be the primary business hours configuration
                  default: false
                  example: false
                officeHours:
                  title: OfficeHours
                  type: object
                  required:
                  - timezone
                  properties:
                    timezone:
                      type: string
                      description: IANA timezone identifier (e.g., America/Los_Angeles)
                      example: America/Los_Angeles
                    monday:
                      type: array
                      description: Schedule blocks for Monday
                      items:
                        title: ScheduleBlock
                        type: object
                        required:
                        - start
                        - stop
                        properties:
                          start:
                            type: string
                            description: Start time in HH:MM format (24-hour)
                            pattern: ^([01]?[0-9]|2[0-3]):[0-5][0-9]$
                            example: 09:00
                          stop:
                            type: string
                            description: End time in HH:MM format (24-hour)
                            pattern: ^([01]?[0-9]|2[0-3]):[0-5][0-9]$
                            example: '17:00'
                    tuesday:
                      type: array
                      description: Schedule blocks for Tuesday
                      items:
                        $ref: '#/paths/~1api~1v1~1business-hours/post/requestBody/content/application~1json/schema/properties/officeHours/properties/monday/items'
                    wednesday:
                      type: array
                      description: Schedule blocks for Wednesday
                      items:
                        $ref: '#/paths/~1api~1v1~1business-hours/post/requestBody/content/application~1json/schema/properties/officeHours/properties/monday/items'
                    thursday:
                      type: array
                      description: Schedule blocks for Thursday
                      items:
                        $ref: '#/paths/~1api~1v1~1business-hours/post/requestBody/content/application~1json/schema/properties/officeHours/properties/monday/items'
                    friday:
                      type: array
                      description: Schedule blocks for Friday
                      items:
                        $ref: '#/paths/~1api~1v1~1business-hours/post/requestBody/content/application~1json/schema/properties/officeHours/properties/monday/items'
                    saturday:
                      type: array
                      description: Schedule blocks for Saturday
                      items:
                        $ref: '#/paths/~1api~1v1~1business-hours/post/requestBody/content/application~1json/schema/properties/officeHours/properties/monday/items'
                    sunday:
                      type: array
                      description: Schedule blocks for Sunday
                      items:
                        $ref: '#/paths/~1api~1v1~1business-hours/post/requestBody/content/application~1json/schema/properties/officeHours/properties/monday/items'
                    exceptions:
                      type: array
                      description: Schedule exceptions (e.g., holidays)
                      items:
                        title: ScheduleException
                        type: object
                        required:
                        - name
                        - start
                        - stop
                        properties:
                          name:
                            type: string
                            description: Name of the exception (e.g., 'New Year's Day')
                            example: New Year's Day
                          start:
                            type: string
                            format: date-time
                            description: Start datetime of the exception
                            example: '2024-01-01T00:00:00Z'
                          stop:
                            type: string
                            format: date-time
                            description: End datetime of the exception
                            example: '2024-01-02T00:00:00Z'
                          scheduleBlocks:
                            type: array
                            description: Optional schedule blocks during the exception period (empty for closed)
                            items:
                              $ref: '#/paths/~1api~1v1~1business-hours/post/requestBody/content/application~1json/schema/properties/officeHours/properties/monday/items'
            example:
              name: Weekend Support
              primary: false
              officeHours:
                timezone: America/Los_Angeles
                saturday:
                - start: '10:00'
                  stop: '16:00'
                sunday:
                - start: '10:00'
                  stop: '16:00'
      responses:
        '201':
          description: Business hours created
          content:
            application/json:
              schema:
                title: BusinessHours
                type: object
                properties:
                  id:
                    type: string
                    description: Unique identifier for the business hours configuration
                    example: bh_WmeA3Y51Q5ayCAaZ1AotIA
                  version:
                    type: integer
                    description: Version number for optimistic concurrency control
                    example: 1
                  createdAt:
                    type: string
                    format: date-time
                    description: Timestamp when the business hours were created
                    example: '2024-01-15T09:00:00Z'
                  updatedAt:
                    type: string
                    format: date-time
                    description: Timestamp when the business hours were last updated
                    example: '2024-01-15T09:00:00Z'
                  name:
                    type: string
                    description: Name of the business hours configuration
                    example: Default Hours
                  primary:
                    type: boolean
                    description: Whether this is the primary business hours configuration
                    example: true
                  officeHours:
                    $ref: '#/paths/~1api~1v1~1business-hours/post/requestBody/content/application~1json/schema/properties/officeHours'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              examples:
                blankName:
                  summary: Name is required
                  value:
                    errors:
                    - attr: name
                      code: invalid
                      detail: name cannot be blank
                missingTimezone:
                  summary: Timezone is required
                  value:
                    errors:
                    - attr: officeHours.timezone
                      code: blank
                      detail: Timezone is required
                invalidTimezone:
                  summary: Invalid timezone
                  value:
                    errors:
                    - attr: officeHours.timezone
                      code: invalid
                      detail: Timezone is invalid
  /api/v1/business-hours/{businessHoursId}:
    parameters:
    - name: businessHoursId
      in: path
      description: ID of the business hours configuration
      required: true
      schema:
        type: string
        example: bh_WmeA3Y51Q5ayCAaZ1AotIA
    get:
      tags:
      - Business Hours
      summary: Get Business Hours
      description: 'Returns a single business hours configuration by its unique ID.

        '
      operationId: getBusinessHoursById
      responses:
        '200':
          description: Business hours
          content:
            application/json:
              schema:
                $ref: '#/paths/~1api~1v1~1business-hours/post/responses/201/content/application~1json/schema'
        '404':
          description: Business hours not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              example:
                errors:
                - code: not_exist
                  detail: business hours does not exist
    put:
      tags:
      - Business Hours
      summary: Update Business Hours
      description: 'Updates an existing business hours configuration. The `version` field must match the current version of the business hours to prevent conflicting updates.

        '
      operationId: updateBusinessHours
      requestBody:
        required: true
        description: Updated business hours configuration
        content:
          application/json:
            schema:
              title: BusinessHoursUpdateRequest
              type: object
              required:
              - version
              - name
              - officeHours
              properties:
                version:
                  type: integer
                  description: Current version of the business hours (for optimistic concurrency)
                  example: 1
                name:
                  type: string
                  description: Name of the business hours configuration (max 200 characters)
                  example: Updated Hours
                primary:
                  type: boolean
                  description: Whether this should be the primary business hours configuration
                  example: false
                officeHours:
                  $ref: '#/paths/~1api~1v1~1business-hours/post/requestBody/content/application~1json/schema/properties/officeHours'
            example:
              version: 1
              name: Updated Business Hours
              primary: false
              officeHours:
                timezone: America/New_York
                monday:
                - start: 08:00
                  stop: '18:00'
                tuesday:
                - start: 08:00
                  stop: '18:00'
                wednesday:
                - start: 08:00
                  stop: '18:00'
                thursday:
                - start: 08:00
                  stop: '18:00'
                friday:
                - start: 08:00
                  stop: '18:00'
      responses:
        '200':
          description: Business hours updated
          content:
            application/json:
              schema:
                $ref: '#/paths/~1api~1v1~1business-hours/post/responses/201/content/application~1json/schema'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '404':
          description: Business hours not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              example:
                errors:
                - code: not_exist
                  detail: business hours does not exist
        '409':
          description: Version conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              example:
                errors:
                - code: version_outdated
                  detail: the version provided is outdated
    delete:
      tags:
      - Business Hours
      summary: Delete Business Hours
      description: 'Deletes a business hours configuration. The primary business hours configuration cannot be deleted.

        '
      operationId: deleteBusinessHours
      responses:
        '204':
          description: Business hours deleted
        '400':
          description: Cannot delete primary business hours
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              example:
                errors:
                - code: invalid
                  detail: cannot delete primary business hours
        '404':
          description: Business hours not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
              example:
                errors:
                - code: not_exist
                  detail: business hours does not exist
components:
  schemas:
    Errors:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          example:
          - attr: content
            code: blank
            detail: content cannot be blank
    Error:
      type: object
      properties:
        attr:
          type: string
          description: Identifies the field causing the error
        code:
          type: string
          description: Code indicating the error type
        detail:
          type: string
          description: More details describing what went wrong
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: 'Gladly API uses token-based **Basic Authentication**. API tokens are associated with designated Gladly users.

        To create and use an API token, your user must have the API User permission. An API token can be used to perform any API request without restriction.


        | user name   | password  |

        | ----------- | --------- |

        | agent email | API token |


        The credentials must be passed via an `Authorization` HTTP header. All requests must be made over HTTPS.


        ```shell

        curl -u user@organization.com:$GLADLY_API_TOKEN \

        https://organization.gladly.com/api/v1/organization

        ```

        '
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic auth — username is the API user email; password is the API token. Requires the "API User" permission.
x-tagGroups:
- name: REST API
  tags:
  - Agents
  - Public Answer
  - Answer Management
  - Audiences
  - Business Hours
  - Communications
  - Conversations
  - Customers
  - Events
  - Export
  - Freeform Topics
  - Inboxes
  - Organization
  - Proactive Conversations
  - Reports
  - Tasks
  - Teams
  - User Identity
  - Topics
  - Webhooks
- name: Webhooks
  tags:
  - Summary
  - Payloads
- name: Lookup API
  tags:
  - Customer Lookup
- name: Resources
  tags:
  - Versioning
  - Error Handling
  - Rate Limit
  - Rich Content
  - Launching Soon