Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
version: 1.0.0
title: Kantata OX API Documentation Time Off Entries API
description: Kantata OX's API provides access to the majority of Kantata OX's data model.
termsOfService: https://www.kantata.com/terms-of-use
contact:
name: Kantata OX Support
url: https://knowledge.kantata.com/hc/en-us
license:
name: COPYRIGHT © 2026 Kantata, Inc.
url: https://www.kantata.com/terms-of-use
x-logo:
url: https://theme.zdassets.com/theme_assets/56104/04e93064d309f75d054b8cee885d1ea51e9be8f7.png
backgroundColor: '#FFFFFF'
altText: Kantata OX API Documentation
href: https://developer.kantata.com
servers:
- url: https://api.mavenlink.com/api/v1
tags:
- name: Time Off Entries
description: Time Off Entries represent the time and dates that a user has requested off from work, such as PTO or vacation days.
paths:
/time_off_entries:
get:
summary: Fetching a list of Time Off Entries
description: 'Returns time off entries which are visible to the user. Items are visible to a user if
they are on the same account.
This endpoint returns structured Time Off Entry objects.
As with all Kantata OX API endpoints, the returned data will be referenced in sorted order in the `results` array
and will be indexed by ID in the `time_off_entries` top-level JSON key.
Please see our Response Format section for more information.'
operationId: Get Time Off Entries
tags:
- Time Off Entries
parameters:
- in: query
name: created_after
description: Filter for records created after a specified datetime. The datetime must be in [ISO 8601](https://www.w3.org/TR/NOTE-datetime) format.
schema:
type: string
format: date-time
- in: query
name: created_before
description: Filter for records created before a specified datetime. The datetime must be in [ISO 8601](https://www.w3.org/TR/NOTE-datetime) format.
schema:
type: string
format: date-time
- in: query
name: end_date
description: Include only time off entries prior to the specified date. The date must be in [ISO 8601](https://www.w3.org/TR/NOTE-datetime) format.
schema:
type: string
format: date
- in: query
name: external_reference_external_message
description: Filter the objects based on the external message of their associated external references. This is an exact match.
schema:
type: string
- in: query
name: external_reference_external_status
description: Filter by the status of the external object in the external system.
schema:
type: string
- in: query
name: external_reference_service_model
description: Filter by the type of the external object this external reference belongs to.
schema:
type: string
- in: query
name: external_reference_service_model_ref
description: Filter by the id of the external object this external reference belongs to.
schema:
type: integer
format: int32
- in: query
name: external_reference_service_model_refs
description: Filter for objects that correlate to the specified external object IDs. Provide a comma-separated list of up to 200 external IDs.
schema:
type: string
- in: query
name: external_reference_service_name
description: Filter by the name of the provider for integration.
schema:
type: string
- in: query
name: external_reference_status
description: Filter by the status of the integration, this can be successful or fail.
schema:
type: string
- in: query
name: has_external_references
description: Filter by whether or not the object has external references.
schema:
type: boolean
- in: query
name: include
description: 'Any of the below associations can be included in your request by providing the `include` param, e.g. `include=association1,association2`.
- `external_references` (ExternalReference) - Includes references to external integrations for this object.
- `role` (Role) - Retrieves the account role of the user associated to the time off entry, if any. The response will include `role_id`, which references the data in the `roles` top-level key.
- `user` (User) - Reference the user associated to the time off entry.'
schema:
type: string
- in: query
name: only
description: 'Allows you to request one or more resources directly by ID. Multiple IDs can be supplied
in a comma separated list, like `GET /api/v1/workspaces.json?only=5,6,7`.'
schema:
type: string
- in: query
name: page
schema:
type: integer
format: int32
default: 1
- in: query
name: per_page
schema:
type: integer
format: int32
default: 20
maximum: 200
- in: query
name: start_date
description: Include only time off entries after the specified date. The date must be in [ISO 8601](https://www.w3.org/TR/NOTE-datetime) format.
schema:
type: string
format: date
- in: query
name: updated_after
description: Filter for records updated after a specified datetime. The datetime must be in [ISO 8601](https://www.w3.org/TR/NOTE-datetime) format.
schema:
type: string
format: date-time
- in: query
name: updated_before
description: Filter for records updated before a specified datetime. The datetime must be in [ISO 8601](https://www.w3.org/TR/NOTE-datetime) format.
schema:
type: string
format: date-time
- in: query
name: user_id
description: Include only time off entries for the specified User ID.
schema:
type: integer
format: int32
- in: query
name: user_ids
description: Include only time off entries for the specified users. Provide a comma-separated list of user IDs.
schema:
type: array
items:
type: integer
format: int32
- in: query
name: without_external_reference_service_name
description: Exclude by the existence of an external reference with the specified service name.
schema:
type: string
- in: query
name: workspace_id
description: Filter for participants of a specific project.
schema:
type: integer
format: int32
responses:
'200':
description: A list of Time Off Entries have been retrieved.
content:
application/json:
schema:
type: object
properties:
count:
type: integer
format: int32
meta:
type: object
properties:
count:
type: integer
format: int32
page_count:
type: integer
format: int32
page_number:
type: integer
format: int32
page_size:
type: integer
format: int32
results:
type: array
items:
type: object
properties:
key:
type: string
id:
type: string
time_off_entries:
type: object
additionalProperties:
$ref: '#/components/schemas/TimeOffEntry'
external_references:
type: object
additionalProperties:
$ref: '#/components/schemas/ExternalReference'
users:
type: object
additionalProperties:
$ref: '#/components/schemas/User'
roles:
type: object
additionalProperties:
$ref: '#/components/schemas/Role'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'401':
description: Unauthorized request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'403':
description: Forbidden request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'404':
description: Page Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'503':
description: Service is unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
post:
summary: Creating one or many Time Off Entries
description: 'Creates a single or multiple time off entries for a user. Multiple time off entries can be created for
the same day, in a single request or separate requests. Entries for the same day are combined into one
time off entry. Time off hours cannot exceed the user''s possible workday hours for that day.
This endpoint returns structured Time Off Entry objects.
As with all Kantata OX API endpoints, the returned data will be referenced in sorted order in the `results` array
and will be indexed by ID in the `time_off_entries` top-level JSON key.
Please see our Response Format section for more information.'
operationId: Create Time Off Entry
tags:
- Time Off Entries
parameters:
- in: query
name: include
description: 'Any of the below associations can be included in your request by providing the `include` param, e.g. `include=association1,association2`.
- `external_references` (ExternalReference) - Includes references to external integrations for this object.
- `role` (Role) - Retrieves the account role of the user associated to the time off entry, if any. The response will include `role_id`, which references the data in the `roles` top-level key.
- `user` (User) - Reference the user associated to the time off entry.'
schema:
type: string
responses:
'200':
description: Time Off Entry has been created.
content:
application/json:
schema:
type: object
properties:
count:
type: integer
format: int32
meta:
type: object
properties:
count:
type: integer
format: int32
page_count:
type: integer
format: int32
page_number:
type: integer
format: int32
page_size:
type: integer
format: int32
results:
type: array
items:
type: object
properties:
key:
type: string
id:
type: string
time_off_entries:
type: object
additionalProperties:
$ref: '#/components/schemas/TimeOffEntry'
external_references:
type: object
additionalProperties:
$ref: '#/components/schemas/ExternalReference'
users:
type: object
additionalProperties:
$ref: '#/components/schemas/User'
roles:
type: object
additionalProperties:
$ref: '#/components/schemas/Role'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'401':
description: Unauthorized request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'403':
description: Forbidden request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'404':
description: Page Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'503':
description: Service is unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
requestBody:
content:
application/json:
schema:
type: object
properties:
time_off_entry:
type: object
properties:
user_id:
type: integer
format: int32
description: The ID of the user who has requested time off.
hours:
type: number
format: float
description: The number of hours of time off requested for the day (quarter hour increments recommended).
requested_date:
type: string
format: date
description: The date for which time off is requested. The date must be in [ISO 8601](https://www.w3.org/TR/NOTE-datetime) format.
external_reference:
type: object
description: 'Typically populated programmatically by a third party system via an integration, this is an optional
object that holds data from an external system. It connects objects in an external system with objects in
Kantata OX (for example, to connect a Jira issue to a Kantata OX Project).'
properties:
service_name:
type: string
description: The provider name of the integration. If you are adding multiple external references to the same object, the `service_name` must be unique.
service_model:
type: string
description: The object type of the external object this external reference belongs to.
service_model_ref:
type: string
description: The object ID of the external object this external reference belongs to.
status:
type: string
description: The status of the integration. Options are `successful`, `pending`, or `failed`.
external_message:
type: string
description: The message on the external object.
external_link:
type: string
description: The link to the external object.
external_status:
type: string
description: The status of the external object in the external system.
locked:
type: boolean
description: Whether the subject is locked.
required:
- service_name
- service_model
- service_model_ref
required:
- user_id
- hours
- requested_date
time_off_entries:
type: array
description: Multiple time off entries and their attributes in an array.
items:
type: object
properties:
user_id:
type: integer
format: int32
description: The ID of the user who has requested time off.
hours:
type: number
format: float
description: The number of hours of time off requested for the day (quarter hour increments recommended).
requested_date:
type: string
format: date
description: The date for which time off is requested. The date must be in [ISO 8601](https://www.w3.org/TR/NOTE-datetime) format.
external_reference:
type: object
description: 'Typically populated programmatically by a third party system via an integration, this is an optional
object that holds data from an external system. It connects objects in an external system with objects in
Kantata OX (for example, to connect a Jira issue to a Kantata OX Project).'
properties:
service_name:
type: string
description: The provider name of the integration. If you are adding multiple external references to the same object, the `service_name` must be unique.
service_model:
type: string
description: The object type of the external object this external reference belongs to.
service_model_ref:
type: string
description: The object ID of the external object this external reference belongs to.
status:
type: string
description: The status of the integration. Options are `successful`, `pending`, or `failed`.
external_message:
type: string
description: The message on the external object.
external_link:
type: string
description: The link to the external object.
external_status:
type: string
description: The status of the external object in the external system.
locked:
type: boolean
description: Whether the subject is locked.
required:
- service_name
- service_model
- service_model_ref
required:
- user_id
- hours
- requested_date
required: true
delete:
summary: Delete multiple time off entries
description: 'The IDs of the time off entries to delete can be provided in the `ids` query parameter or via the request body.
Request body example:
```{
"ids": "1,2,3"
}```
If any specified time off entries cannot be deleted, the entire request will fail and an error message
will be returned that specifies which ones could not be deleted and why.
This endpoint returns structured Time Off Entry objects.
As with all Kantata OX API endpoints, the returned data will be referenced in sorted order in the `results` array
and will be indexed by ID in the `time_off_entries` top-level JSON key.
Please see our Response Format section for more information.'
operationId: Delete Time Off Entries
tags:
- Time Off Entries
parameters:
- in: query
name: ids
required: false
description: 'A comma-separated list of IDs of time off entries. You can provide up to 100 IDs. The IDs can be
provided in this query parameter or via the request body.'
schema:
type: string
responses:
'204':
description: Time Off Entry has been deleted.
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'401':
description: Unauthorized request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'403':
description: Forbidden request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'404':
description: Page Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'503':
description: Service is unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
/time_off_entries/{id}:
put:
summary: Updating an existing Time Off Entry
description: 'Update a Time Off Entry. Only the hours and external references can be modified. Time off hours cannot
exceed the user''s possible workday hours for that day.
This endpoint returns structured Time Off Entry objects.
As with all Kantata OX API endpoints, the returned data will be referenced in sorted order in the `results` array
and will be indexed by ID in the `time_off_entries` top-level JSON key.
Please see our Response Format section for more information.'
operationId: Update Time Off Entry
tags:
- Time Off Entries
parameters:
- in: path
name: id
required: true
description: The ID of the Model.
schema:
type: integer
- in: query
name: include
description: 'Any of the below associations can be included in your request by providing the `include` param, e.g. `include=association1,association2`.
- `external_references` (ExternalReference) - Includes references to external integrations for this object.
- `role` (Role) - Retrieves the account role of the user associated to the time off entry, if any. The response will include `role_id`, which references the data in the `roles` top-level key.
- `user` (User) - Reference the user associated to the time off entry.'
schema:
type: string
responses:
'200':
description: Time Off Entry has been updated.
content:
application/json:
schema:
type: object
properties:
count:
type: integer
format: int32
meta:
type: object
properties:
count:
type: integer
format: int32
page_count:
type: integer
format: int32
page_number:
type: integer
format: int32
page_size:
type: integer
format: int32
results:
type: array
items:
type: object
properties:
key:
type: string
id:
type: string
time_off_entries:
type: object
additionalProperties:
$ref: '#/components/schemas/TimeOffEntry'
external_references:
type: object
additionalProperties:
$ref: '#/components/schemas/ExternalReference'
users:
type: object
additionalProperties:
$ref: '#/components/schemas/User'
roles:
type: object
additionalProperties:
$ref: '#/components/schemas/Role'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'401':
description: Unauthorized request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'403':
description: Forbidden request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'404':
description: Page Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'503':
description: Service is unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
requestBody:
content:
application/json:
schema:
type: object
properties:
time_off_entry:
type: object
properties:
hours:
type: number
format: float
description: The number of hours of time off requested for the day (quarter hour increments recommended).
external_reference:
type: object
description: 'Typically populated programmatically by a third party system via an integration, this is an optional
object that holds data from an external system. It connects objects in an external system with objects in
Kantata OX (for example, to connect a Jira issue to a Kantata OX Project).'
properties:
service_name:
type: string
description: The provider name of the integration. If you are adding multiple external references to the same object, the `service_name` must be unique.
service_model:
type: string
description: The object type of the external object this external reference belongs to.
service_model_ref:
type: string
description: The object ID of the external object this external reference belongs to.
status:
type: string
description: The status of the integration. Options are `successful`, `pending`, or `failed`.
external_message:
type: string
description: The message on the external object.
external_link:
type: string
description: The link to the external object.
external_status:
type: string
description: The status of the external object in the external system.
locked:
type: boolean
description: Whether the subject is locked.
required:
- service_name
- service_model
- service_model_ref
required:
- hours
required: true
delete:
summary: Deleting an existing Time Off Entry
description: 'This will delete the time off entry.
The response will contain no content and an HTTP 204 status code if the request was
successful, or a standard Kantata OX error message explaining why the object could not be deleted.'
operationId: Delete Time Off Entry
tags:
- Time Off Entries
parameters:
- in: path
name: id
required: true
description: The ID of the Model.
schema:
type: integer
responses:
'204':
description: Time Off Entry has been deleted.
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'401':
description: Unauthorized request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'403':
description: Forbidden request
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'404':
description: Page Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
'503':
description: Service is unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Errors'
components:
schemas:
ExternalReference:
title: External Reference
description: 'External References allows users see which objects (one of `Assignment`, `BillingMilestone`, `CustomField`, `CustomFieldChoice`, `CustomFieldSet`, `CustomFieldValue`, `Estimate`, `EstimateScenario`, `EstimateScenarioResource`, `Expense`, `ExpenseBudget`, `Invoice`, `Participation`, `Post`, `RateCard`, `Role`, `Skill`, `StatusReport`, `Story`, `StoryAllocationDay`, `Submission`, `SurveyAnswer`, `SurveyQuestion`, `SurveyResponse`, `SurveyTemplate`, `TimeEntry`, `TimeOffEntry`, `User`, `Vendor`, `Workspace`, `WorkspaceAllocation`, `WorkspaceGroup`, or `WorkspaceResource`
are synced with third party systems. This allows you to view the sync status of items in addition to the integration
specifics for a synced object.
Objects that are synced with a third party system have external integration
attributes that include the corresponding ID of the third party object with
which it is synced, a link that allows you to view the object in the third
party system, the status of the external object in the external system,
the status of the sync, and a link to exceptions.'
type: object
properties:
crea
# --- truncated at 32 KB (45 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mavenlink/refs/heads/main/openapi/mavenlink-time-off-entries-api-openapi.yml