Everhour Schedule API

Resource planner assignments.

OpenAPI Specification

everhour-schedule-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Everhour Clients Schedule API
  description: The Everhour API is a RESTful interface providing programmatic access to time tracking, timesheets, timers, projects, tasks, clients, invoices, expenses, resource scheduling, time off, and reporting data in Everhour. The API accepts and returns JSON (UTF-8 only). All requests are authenticated with an X-Api-Key header carrying an API key found at the bottom of your Everhour profile page. An optional X-Accept-Version header pins a specific API version (the most recent, 1.2, is used by default). The API is labeled BETA by Everhour, meaning some calls can be slightly adjusted; breaking changes are pushed in separate API versions. Time values are in seconds and money amounts are in cents throughout.
  version: '1.2'
  contact:
    name: Everhour
    url: https://everhour.com
    email: ask@everhour.com
servers:
- url: https://api.everhour.com
  description: Everhour production API
security:
- apiKey: []
tags:
- name: Schedule
  description: Resource planner assignments.
paths:
  /resource-planner/assignments:
    get:
      operationId: getAllAssignments
      tags:
      - Schedule
      summary: Get all assignments
      description: Returns resource planner assignments, filterable by type, project, task, client, and date range.
      parameters:
      - name: type
        in: query
        description: Filter by assignment type (assignment or time-off).
        schema:
          type: string
          enum:
          - assignment
          - time-off
      - name: project
        in: query
        description: Filter by project ID.
        schema:
          type: string
      - name: task
        in: query
        description: Filter by task ID.
        schema:
          type: string
      - name: client
        in: query
        description: Filter by client ID.
        schema:
          type: integer
      - name: from
        in: query
        description: Assignments starting from this date.
        schema:
          type: string
          format: date
      - name: to
        in: query
        description: Assignments ending at this date.
        schema:
          type: string
          format: date
      responses:
        '200':
          description: A list of assignments.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Assignment'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      operationId: createAssignment
      tags:
      - Schedule
      summary: Create assignment or time off
      description: Creates a resource planner assignment. With type time-off (plus timeOffType, timeOffPeriod, and approval fields) this same endpoint creates time off for a user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssignmentRequest'
      responses:
        '201':
          description: The created assignment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Assignment'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /resource-planner/assignments/{assignmentId}:
    parameters:
    - name: assignmentId
      in: path
      required: true
      description: Assignment ID.
      schema:
        type: integer
    put:
      operationId: updateAssignment
      tags:
      - Schedule
      summary: Update assignment
      description: Updates a resource planner assignment.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssignmentRequest'
      responses:
        '200':
          description: The updated assignment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Assignment'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      operationId: deleteAssignment
      tags:
      - Schedule
      summary: Delete assignment
      description: Deletes a resource planner assignment.
      responses:
        '204':
          description: Assignment deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    Error:
      type: object
      properties:
        code:
          type: integer
        message:
          type: string
    Assignment:
      type: object
      properties:
        id:
          type: integer
        days:
          type: integer
          description: Number of workdays.
        startDate:
          type: string
          format: date
        endDate:
          type: string
          format: date
        project:
          type: string
        time:
          type: integer
          description: Scheduled time in seconds.
        type:
          type: string
          enum:
          - project
          - time-off
        user:
          type: integer
    AssignmentRequest:
      type: object
      properties:
        startDate:
          type: string
          format: date
        endDate:
          type: string
          format: date
        project:
          type: string
        time:
          type: integer
          description: Scheduled time in seconds.
        type:
          type: string
          enum:
          - project
          - time-off
        user:
          type: integer
        users:
          type: array
          description: Create the same schedule for multiple team users.
          items:
            type: integer
        timeOffType:
          type: integer
          description: Time off type ID (time-off type only).
        timeOffPeriod:
          type: string
          enum:
          - full-day
          - half-of-day
          - quarter-of-day
          - half-and-quarter-of-day
        status:
          type: string
          description: Admins can set approved on create; regular users create pending time off.
          enum:
          - pending
          - approved
        reviewer:
          type: integer
          description: Admin who receives the approval notification.
        sendNotification:
          type: boolean
        considerAllocations:
          type: boolean
        forceOverride:
          type: boolean
  responses:
    Unauthorized:
      description: Missing or invalid X-Api-Key header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Rate limit exceeded (around 20 requests per 10 seconds per API key). The Retry-After response header specifies the number of seconds to wait before making another request.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-Api-Key
      description: API key from the bottom of your Everhour profile page.