Assembled Time Off API

Programmatically create, list, and cancel time-off requests, and pull a stream of time-off updates for downstream HRIS or payroll synchronisation. The endpoint underpins the automated time-off and shift-swap workflows offered in Assembled's Pro and Enterprise plans.

Assembled Time Off API is one of 12 APIs that Assembled publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Time Off, Leave, and Workforce Management. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

assembled-time-off-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Assembled Time Off API
  description: |
    Programmatically create, list, and cancel time-off requests and pull a
    stream of time-off updates for downstream HRIS or payroll
    synchronisation.

    Underpins the automated time-off and shift-swap workflows offered in
    Assembled's Pro and Enterprise plans.
  version: '2026-05-24'
  contact:
    name: Assembled Support
    url: https://support.assembled.com
servers:
  - url: https://api.assembledhq.com
    description: Production Server
security:
  - BasicAuth: []
tags:
  - name: Time Off
paths:
  /v0/time_off:
    post:
      summary: Assembled Create Time Off
      operationId: createTimeOff
      tags: [Time Off]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/TimeOffInput' }
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TimeOffRequest' }
  /v0/time_off/requests:
    get:
      summary: Assembled List Time Off Requests
      operationId: listTimeOffRequests
      tags: [Time Off]
      parameters:
        - in: query
          name: status
          schema: { type: string, enum: [pending, approved, denied, cancelled] }
        - in: query
          name: agent_id
          schema: { type: string }
        - in: query
          name: start_time
          schema: { type: string, format: date-time }
        - in: query
          name: end_time
          schema: { type: string, format: date-time }
      responses:
        '200':
          description: Time off requests
          content:
            application/json:
              schema:
                type: object
                properties:
                  requests:
                    type: array
                    items: { $ref: '#/components/schemas/TimeOffRequest' }
  /v0/time_off/{id}/cancel:
    post:
      summary: Assembled Cancel Time Off Request
      operationId: cancelTimeOffRequest
      tags: [Time Off]
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Cancelled
  /v0/time_off/updates:
    get:
      summary: Assembled List Time Off Updates
      operationId: listTimeOffUpdates
      tags: [Time Off]
      parameters:
        - in: query
          name: since
          required: true
          schema: { type: string, format: date-time }
      responses:
        '200':
          description: Time off update stream
          content:
            application/json:
              schema:
                type: object
                properties:
                  updates:
                    type: array
                    items:
                      type: object
                      properties:
                        request_id: { type: string }
                        change_type: { type: string }
                        updated_at: { type: string, format: date-time }
components:
  securitySchemes:
    BasicAuth: { type: http, scheme: basic }
  schemas:
    TimeOffRequest:
      type: object
      properties:
        id: { type: string }
        agent_id: { type: string }
        type: { type: string, example: pto }
        status: { type: string, enum: [pending, approved, denied, cancelled] }
        start_time: { type: string, format: date-time }
        end_time: { type: string, format: date-time }
        all_day: { type: boolean }
        notes: { type: string }
        approver_id: { type: string, nullable: true }
        created_at: { type: string, format: date-time }
        updated_at: { type: string, format: date-time }
    TimeOffInput:
      type: object
      required: [agent_id, start_time, end_time]
      properties:
        agent_id: { type: string }
        type: { type: string }
        start_time: { type: string, format: date-time }
        end_time: { type: string, format: date-time }
        all_day: { type: boolean }
        notes: { type: string }