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 External References 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: External References
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`…
paths:
/external_references:
get:
summary: Fetches all external references on a user's account
description: 'Returns external references, for objects of particular types, that are synced with the
third-party systems.
This endpoint returns structured External Reference 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 `external_references` top-level JSON key.
Please see our Response Format section for more information.'
operationId: Get External References
tags:
- External References
parameters:
- in: query
name: subject_type
required: true
description: 'The type of the Kantata OX object that has the external reference. 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`.'
schema:
type: string
- 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: external_message
description: Only include external references with the specified external message.
schema:
type: string
- in: query
name: external_status
description: The status of the external object in the external system.
schema:
type: string
- 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`.
- `subject` (polymorphic) - The item with which the external reference is associated.'
schema:
type: string
- in: query
name: last_synced_after
description: Filter for records last synced 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: last_synced_before
description: Filter for records last synced 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: 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: order
description: 'Supply `order` with the name of a valid sort field for the endpoint and a direction.
Valid values: `created_at:asc`, `created_at:desc`, `last_synced_at:asc`, and `last_synced_at:desc`.'
schema:
type: string
default: last_synced_at:desc
- 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: service_model
description: The type of the external object.
schema:
type: string
- in: query
name: service_model_ref
description: The object ID of an external object.
schema:
type: string
- in: query
name: service_name
description: The provider name of the integration.
schema:
type: string
- in: query
name: status
description: The status of the integration. Options are 'pending', 'successful', or 'failed'.
schema:
type: string
- in: query
name: subject_id
required: false
description: The ID of the Kantata OX object that has the external reference.
schema:
type: integer
format: int32
- 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
responses:
'200':
description: A list of External References 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
external_references:
type: object
additionalProperties:
$ref: '#/components/schemas/ExternalReference'
assignments:
type: object
additionalProperties:
$ref: '#/components/schemas/Assignment'
billing_milestones:
type: object
additionalProperties:
$ref: '#/components/schemas/BillingMilestone'
custom_fields:
type: object
additionalProperties:
$ref: '#/components/schemas/CustomField'
custom_field_choices:
type: object
additionalProperties:
$ref: '#/components/schemas/CustomFieldChoice'
custom_field_sets:
type: object
additionalProperties:
$ref: '#/components/schemas/CustomFieldSet'
custom_field_values:
type: object
additionalProperties:
$ref: '#/components/schemas/CustomFieldValue'
estimates:
type: object
additionalProperties:
$ref: '#/components/schemas/Estimate'
estimate_scenarios:
type: object
additionalProperties:
$ref: '#/components/schemas/EstimateScenario'
estimate_scenario_resources:
type: object
additionalProperties:
$ref: '#/components/schemas/EstimateScenarioResource'
expenses:
type: object
additionalProperties:
$ref: '#/components/schemas/Expense'
expense_budgets:
type: object
additionalProperties:
$ref: '#/components/schemas/ExpenseBudget'
invoices:
type: object
additionalProperties:
$ref: '#/components/schemas/Invoice'
participations:
type: object
additionalProperties:
$ref: '#/components/schemas/Participation'
posts:
type: object
additionalProperties:
$ref: '#/components/schemas/Post'
rate_cards:
type: object
additionalProperties:
$ref: '#/components/schemas/RateCard'
roles:
type: object
additionalProperties:
$ref: '#/components/schemas/Role'
skills:
type: object
additionalProperties:
$ref: '#/components/schemas/Skill'
status_reports:
type: object
additionalProperties:
$ref: '#/components/schemas/StatusReport'
stories:
type: object
additionalProperties:
$ref: '#/components/schemas/Story'
story_allocation_days:
type: object
additionalProperties:
$ref: '#/components/schemas/StoryAllocationDay'
submissions:
type: object
additionalProperties:
$ref: '#/components/schemas/Submission'
survey_answers:
type: object
additionalProperties:
$ref: '#/components/schemas/SurveyAnswer'
survey_questions:
type: object
additionalProperties:
$ref: '#/components/schemas/SurveyQuestion'
survey_responses:
type: object
additionalProperties:
$ref: '#/components/schemas/SurveyResponse'
survey_templates:
type: object
additionalProperties:
$ref: '#/components/schemas/SurveyTemplate'
time_entries:
type: object
additionalProperties:
$ref: '#/components/schemas/TimeEntry'
time_off_entries:
type: object
additionalProperties:
$ref: '#/components/schemas/TimeOffEntry'
users:
type: object
additionalProperties:
$ref: '#/components/schemas/User'
vendors:
type: object
additionalProperties:
$ref: '#/components/schemas/Vendor'
workspaces:
type: object
additionalProperties:
$ref: '#/components/schemas/Workspace'
workspace_allocations:
type: object
additionalProperties:
$ref: '#/components/schemas/WorkspaceAllocation'
workspace_groups:
type: object
additionalProperties:
$ref: '#/components/schemas/WorkspaceGroup'
workspace_resources:
type: object
additionalProperties:
$ref: '#/components/schemas/WorkspaceResource'
'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'
/external_references/create_or_update:
post:
summary: Create or update an external reference
description: 'This endpoint returns structured External Reference 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 `external_references` top-level JSON key.
Please see our Response Format section for more information.'
operationId: Create Or Update External Reference
tags:
- External References
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`.
- `subject` (polymorphic) - The item with which the external reference is associated.'
schema:
type: string
responses:
'200':
description: External Reference 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
external_references:
type: object
additionalProperties:
$ref: '#/components/schemas/ExternalReference'
assignments:
type: object
additionalProperties:
$ref: '#/components/schemas/Assignment'
billing_milestones:
type: object
additionalProperties:
$ref: '#/components/schemas/BillingMilestone'
custom_fields:
type: object
additionalProperties:
$ref: '#/components/schemas/CustomField'
custom_field_choices:
type: object
additionalProperties:
$ref: '#/components/schemas/CustomFieldChoice'
custom_field_sets:
type: object
additionalProperties:
$ref: '#/components/schemas/CustomFieldSet'
custom_field_values:
type: object
additionalProperties:
$ref: '#/components/schemas/CustomFieldValue'
estimates:
type: object
additionalProperties:
$ref: '#/components/schemas/Estimate'
estimate_scenarios:
type: object
additionalProperties:
$ref: '#/components/schemas/EstimateScenario'
estimate_scenario_resources:
type: object
additionalProperties:
$ref: '#/components/schemas/EstimateScenarioResource'
expenses:
type: object
additionalProperties:
$ref: '#/components/schemas/Expense'
expense_budgets:
type: object
additionalProperties:
$ref: '#/components/schemas/ExpenseBudget'
invoices:
type: object
additionalProperties:
$ref: '#/components/schemas/Invoice'
participations:
type: object
additionalProperties:
$ref: '#/components/schemas/Participation'
posts:
type: object
additionalProperties:
$ref: '#/components/schemas/Post'
rate_cards:
type: object
additionalProperties:
$ref: '#/components/schemas/RateCard'
roles:
type: object
additionalProperties:
$ref: '#/components/schemas/Role'
skills:
type: object
additionalProperties:
$ref: '#/components/schemas/Skill'
status_reports:
type: object
additionalProperties:
$ref: '#/components/schemas/StatusReport'
stories:
type: object
additionalProperties:
$ref: '#/components/schemas/Story'
story_allocation_days:
type: object
additionalProperties:
$ref: '#/components/schemas/StoryAllocationDay'
submissions:
type: object
additionalProperties:
$ref: '#/components/schemas/Submission'
survey_answers:
type: object
additionalProperties:
$ref: '#/components/schemas/SurveyAnswer'
survey_questions:
type: object
additionalProperties:
$ref: '#/components/schemas/SurveyQuestion'
survey_responses:
type: object
additionalProperties:
$ref: '#/components/schemas/SurveyResponse'
survey_templates:
type: object
additionalProperties:
$ref: '#/components/schemas/SurveyTemplate'
time_entries:
type: object
additionalProperties:
$ref: '#/components/schemas/TimeEntry'
time_off_entries:
type: object
additionalProperties:
$ref: '#/components/schemas/TimeOffEntry'
users:
type: object
additionalProperties:
$ref: '#/components/schemas/User'
vendors:
type: object
additionalProperties:
$ref: '#/components/schemas/Vendor'
workspaces:
type: object
additionalProperties:
$ref: '#/components/schemas/Workspace'
workspace_allocations:
type: object
additionalProperties:
$ref: '#/components/schemas/WorkspaceAllocation'
workspace_groups:
type: object
additionalProperties:
$ref: '#/components/schemas/WorkspaceGroup'
workspace_resources:
type: object
additionalProperties:
$ref: '#/components/schemas/WorkspaceResource'
'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:
external_reference:
type: object
properties:
subject_type:
type: string
description: 'The type of the Kantata OX object to which this external reference belongs.
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`.'
subject_id:
type: integer
format: int32
description: The ID of the Kantata OX object to which this external reference belongs.
service_name:
type: string
description: The provider name of the integration.
service_model:
type: string
description: The type of the external object to which this reference belongs.
service_model_ref:
type: string
description: The ID of the external object to which this external reference belongs.
status:
type: string
description: The status of the integration. Options are 'pending', 'successful', or 'failed'.
external_link:
type: string
description: A URL that links to either the external object or event.
external_status:
type: string
description: The status of the external object in the external system.
external_message:
type: string
description: An optional message about the external object.
locked:
type: boolean
description: 'An optional field, indicates whether the subject should be locked. To prevent changes
to the object in Kantata OX, set this to true. This currently only applies to expense
report rejections.'
required:
- subject_type
- subject_id
- service_name
- service_model
- service_model_ref
required: true
/external_references/{id}:
delete:
summary: Deleting an existing External Reference
description: '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 External Reference
tags:
- External References
parameters:
- in: path
name: id
required: true
description: The ID of the Model.
schema:
type: integer
responses:
'204':
description: External Reference 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:
Story:
title: Story
description: 'Stories (known as [tasks](https://knowledge.kantata.com/hc/en-us/articles/202806550-Tasks-Overview) in the UI)
are the tasks, deliverables, issues, and milestones required to complete a project.
Stories belong to [Workspaces](/tag/Workspaces), appear in the
[Local Task Tracker](https://knowledge.kantata.com/hc/en-us/articles/202490134-Project-Task-Tracker) and the
[Global Tasks Tracker](https://knowledge.kantata.com/hc/en-us/articles/216424897-Global-Tasks-Tracker),
can be linked to [Posts](/tag/Posts), can have substories (subtasks) and
[Story Tasks](https://developer.kantata.com/tag/Story-Tasks) (checklists), and have many attributes for
planning, organization, and financials.'
type: object
properties:
ancestor_ids:
type: array
items:
type: string
description: The IDs of all the ancestor (i.e. parent) tasks of the task. This is empty for a top-level task.
ancestry_depth:
type: integer
format: int32
description: The number of levels a subtask is nested below the top-level task. Possible values are between `0` (i.e. a top-level task) and `4`.
archived:
type: boolean
description: Whether the task is archived.
archived_editable:
type: boolean
description: 'For archived tasks, whether the authenticated user can edit the task.
Only returned when requested through the optional_fields param.'
assigned_role_id:
type: string
description: '`assigned_role_id` will only be included in the response if `assigned_role` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
assignee_ids:
type: array
items:
type: string
description: '`assignee_ids` will only be included in the response if `assignees` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
assignment_timestamped_at:
type: string
format: date-time
attachment_ids:
type: array
items:
type: string
description: '`attachment_ids` will only be included in the response if `attachments` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
billable:
type: boolean
description: Whether the task is billable.
budget_estimate_in_cents:
type: integer
format: int32
description: 'The task budget, in the subunits of the currency (e.g. cents for USD).
Visible when the API user can view story budgets in the story''s workspace.'
budget_used_in_cents:
type: integer
format: int32
description: 'How much of the task budget has been used, in the subunits of the currency (e.g. cents for USD).
Visible when the API user can view story budgets in the story''s workspace.'
can_align_time:
type: boolean
description: 'Whether [Daily Scheduled Hours](/tag/Daily-Scheduled-Hours-(Story-Allocation-Days)) (i.e. Story Allocation Days) that are out of sync with the task start or due date can be realigned to the task start date.
Only returned when requested through the optional_fields param.'
can_edit:
type: boolean
description: 'Whether the authenticated user can edit the task. For archived tasks, refer to `archived_editable` instead.
Only returned when requested through the optional_fields param.'
can_post:
type: boolean
description: 'Whether the authenticated user can create posts in the project the task is in.
Only returned when requested through the optional_fields param.'
created_at:
type: string
format: date-time
creator_id:
type: string
description: '`creator_id` will only be included in the response if `creator` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
current_assignment_ids:
type: array
items:
# --- truncated at 32 KB (168 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mavenlink/refs/heads/main/openapi/mavenlink-external-references-api-openapi.yml