Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/mavenlink-story-state-changes-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
version: 1.0.0
title: Kantata OX API Documentation Story State Changes 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: Story State Changes
description: 'Story State Changes in Kantata OX act as an audit trail for changes to the state of a Story.
Story State Changes cannot be created directly. They will be created for you automatically when you
set the state of a Story. Story State Changes cannot be modified or deleted.'
paths:
/story_state_changes:
get:
summary: Fetching a list of Story State Changes
description: 'The story state changes endpoint provides a list of state changes for a specified story. story_id is a
required parameter to retrieve story state changes for a specified story.
This endpoint returns structured Story State Change 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 `story_state_changes` top-level JSON key.
Please see our Response Format section for more information.'
operationId: Get Story State Changes
tags:
- Story State Changes
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: include
description: 'Any of the below associations can be included in your request by providing the `include` param, e.g. `include=association1,association2`.
- `story` (Story) - Will reference the Story for which the story state change belongs.
- `user` (User) - Will reference the User for which the story state change belongs.'
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: order
description: 'Supply `order` with the name of a valid sort field for the endpoint and a direction.
Valid values: `created_at:asc` and `created_at:desc`.'
schema:
type: string
default: created_at:asc
- 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: 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 Story State Changes 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
story_state_changes:
type: object
additionalProperties:
$ref: '#/components/schemas/StoryStateChange'
users:
type: object
additionalProperties:
$ref: '#/components/schemas/User'
stories:
type: object
additionalProperties:
$ref: '#/components/schemas/Story'
'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'
/story_state_changes/{id}:
get:
summary: Fetching a single Story State Change
description: 'This endpoint returns structured Story State Change 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 `story_state_changes` top-level JSON key.
Please see our Response Format section for more information.'
operationId: Get Story State Change
tags:
- Story State Changes
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`.
- `story` (Story) - Will reference the Story for which the story state change belongs.
- `user` (User) - Will reference the User for which the story state change belongs.'
schema:
type: string
responses:
'200':
description: The Story State Change has 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
story_state_changes:
type: object
additionalProperties:
$ref: '#/components/schemas/StoryStateChange'
users:
type: object
additionalProperties:
$ref: '#/components/schemas/User'
stories:
type: object
additionalProperties:
$ref: '#/components/schemas/Story'
'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:
type: string
description: '`current_assignment_ids` will only be included in the response if `current_assignments` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
custom_field_value_ids:
type: array
items:
type: string
description: '`custom_field_value_ids` will only be included in the response if `custom_field_values` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
custom_task_status_id:
type: integer
format: int32
description: 'The ID of the task''s custom status. If the workspace is not using a custom task status set, this is `null`.
Only returned when requested through the optional_fields param.'
deleted_at:
type: string
format: date-time
descendant_ids:
type: array
items:
type: string
description: '`descendant_ids` will only be included in the response if `descendants` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
description:
type: string
description: The task description. Markdown syntax is included.
due_date:
type: string
format: date
description: When the task is due.
external_reference_ids:
type: array
items:
type: string
description: '`external_reference_ids` will only be included in the response if `external_references` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
fixed_fee:
type: boolean
description: Whether the task is fixed fee (`true`) or time and materials (`false`).
follower_ids:
type: array
items:
type: string
description: '`follower_ids` will only be included in the response if `followers` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
formatted_description:
type: string
description: 'The task description with special formatting, like emoji and @-mentions.
Only returned when requested through the optional_fields param.'
google_document_ids:
type: array
items:
type: string
description: '`google_document_ids` will only be included in the response if `google_documents` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
has_out_of_bounds_sads:
type: boolean
description: 'Whether the task has any [Daily Scheduled Hours](/tag/Daily-Scheduled-Hours-(Story-Allocation-Days)) (i.e. Story Allocation Days) before its start date or after its due date.
Only returned when requested through the optional_fields param.'
invoiced_balance_in_cents:
type: integer
format: int32
description: 'How much has been invoiced for the task, 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.'
is_time_trackable_type:
type: boolean
description: 'Whether the task can have time and expenses tracked against it, as set in account settings.
Only returned when requested through the optional_fields param.'
logged_billable_time_in_minutes:
type: integer
format: int32
description: 'How much billable time has been tracked against the task, in minutes.
Visible when the API user can view story time estimates in the story''s workspace.'
logged_nonbillable_time_in_minutes:
type: integer
format: int32
description: 'How much non-billable time has been tracked against the task, in minutes.
Visible when the API user can view story time estimates in the story''s workspace.'
parent_id:
type: string
description: '`parent_id` will only be included in the response if `parent` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
parsed_description:
type: string
description: 'The task description. Markdown syntax is not included.
Only returned when requested through the optional_fields param.'
percentage_complete:
type: integer
format: int32
description: The percentage of work done on the task.
position:
type: integer
format: int32
description: Represents the task's position in the Task Tracker. This is not the same as the WBS (Work Breakdown Structure) number shown in the UI.
potential_workspace_resource_ids:
type: array
items:
type: string
description: '`potential_workspace_resource_ids` will only be included in the response if `potential_workspace_resources` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
potential_workspace_resources_with_unnamed_ids:
type: array
items:
type: string
description: '`potential_workspace_resources_with_unnamed_ids` will only be included in the response if `potential_workspace_resources_with_unnamed` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
priority:
type: integer
format: int32
description: The priority of the task. Possible values are `critical`, `high`, `normal`, `low`.
project_plan:
type: boolean
description: Whether the story is a project task (`true`) or is a To Do (`false`).
read_only:
type: boolean
description: 'Whether the authenticated user can only view the task and cannot edit it.
Only returned when requested through the optional_fields param.'
render_description_markdown:
type: boolean
description: 'Whether the account the task is in is set to render Markdown in task descriptions as formatted and styled text.
Only returned when requested through the optional_fields param.'
reply_ids:
type: array
items:
type: string
description: '`reply_ids` will only be included in the response if `replies` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
root_id:
type: string
description: '`root_id` will only be included in the response if `root` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
source_dependency_ids:
type: array
items:
type: string
description: '`source_dependency_ids` will only be included in the response if `source_dependencies` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
start_date:
type: string
format: date
description: When the task starts.
state:
type: string
description: 'The status type of the story. Possible values are `not started`, `started`, `needs info`, or `completed`. If task status sets are not activated on the account, the following values are also possible: `new`, `reopened`, `in progress`, `blocked`, `fixed`, `duplicate`, `can''t reproduce`, `resolved`, or `won''t fix`. The actual task status is returned in the `status` field.'
status:
type: string
description: The status of the story.
story_state_change_ids:
type: array
items:
type: string
description: '`story_state_change_ids` will only be included in the response if `story_state_changes` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
story_task_ids:
type: array
items:
type: string
description: '`story_task_ids` will only be included in the response if `story_tasks` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
story_type:
type: string
description: The task's type. Possible values are `task`, `deliverable `, `milestone`, and `issue`.
sub_stories_billable_time_in_minutes:
type: integer
format: int32
description: 'How much billable time has been tracked against the task''s descendants, in minutes.
Visible when the API user can view story time estimates in the story''s workspace.'
sub_stories_budget_estimate_in_cents:
type: integer
format: int32
description: 'The budget of the task''s descendants, 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.'
sub_stories_budget_used_in_cents:
type: integer
format: int32
description: 'How much of the budgets of the task''s descendants 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.'
sub_stories_time_estimate_in_minutes:
type: integer
format: int32
description: 'The estimated time of the task''s descendants, in minutes.
Visible when the API user can view story time estimates in the story''s workspace.'
sub_story_count:
type: integer
format: int32
description: How many descendant tasks the task has.
sub_story_ids:
type: array
items:
type: string
description: '`sub_story_ids` will only be included in the response if `sub_stories` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
subtree_depth:
type: integer
format: int32
description: How many ancestor tasks the task has.
tag_ids:
type: array
items:
type: string
description: '`tag_ids` will only be included in the response if `tags` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
target_dependency_ids:
type: array
items:
type: string
description: '`target_dependency_ids` will only be included in the response if `target_dependencies` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
time_estimate_in_minutes:
type: integer
format: int32
description: 'The estimated time for the task, in minutes.
Visible when the API user can view story time estimates in the story''s workspace.'
time_trackable:
type: boolean
description: Whether time can be tracked against the task.
title:
type: string
description: The title of the task.
uninvoiced_balance_in_cents:
type: integer
format: int32
description: 'How much has not yet been invoiced for the task, 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.'
updated_at:
type: string
format: date-time
weight:
type: integer
format: int32
description: 'If the `story_type` is `milestone`, this is the [weight](https://knowledge.kantata.com/hc/en-us/articles/203499904-Milestone-Weighting) of the task.
Visible when the API user can view story time estimates in the story''s workspace.'
workspace_id:
type: string
description: '`workspace_id` will only be included in the response if `workspace` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
workspace_resource_ids:
type: array
items:
type: string
description: '`workspace_resource_ids` will only be included in the response if `workspace_resources` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
workspace_resources_with_unnamed_ids:
type: array
items:
type: string
description: '`workspace_resources_with_unnamed_ids` will only be included in the response if `workspace_resources_with_unnamed` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
StoryStateChange:
title: Story State Change
description: A Story State Changes in Kantata OX acts as an audit trail for a change to the state of a Story.
type: object
properties:
created_at:
type: string
format: date-time
formatted_state:
type: string
description: The formatted version of the new state of the story.
state:
type: string
description: The new state of the story (state can differ based on the story type).
story_id:
type: string
description: '`story_id` will only be included in the response if `story` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
updated_at:
type: string
format: date-time
user_id:
type: string
description: '`user_id` will only be included in the response if `user` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
Error:
type: object
properties:
type:
type: string
message:
type: string
User:
title: User
description: 'Users represent the individuals that are participating in Kantata OX projects. User objects are often returned as
nested JSON objects within other returned items such as Posts or Stories.'
type: object
properties:
abbreviated_timezone:
type: string
description: 'The abbreviation for the user''s time zone.
Only returned when requested through the optional_fields param.'
account_membership_id:
type: string
description: '`account_membership_id` will only be included in the response if `account_membership` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
bio:
type: string
description: 'A biography (defined by the user).
Only returned when requested through the optional_fields param.'
city:
type: string
description: 'The home city of the user (based on their profile).
Only returned when requested through the optional_fields param.'
classification:
type: string
description: 'Indicates whether a user is Internal or External.
Only returned when requested through the optional_fields param.'
country:
type: string
description: 'The home country of the user (based on their profile).
Only returned when requested through the optional_fields param.'
custom_field_value_ids:
type: array
items:
type: string
description: '`custom_field_value_ids` will only be included in the response if `custom_field_values` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
email_address:
type: string
description: The email address of the user.
external_reference_ids:
type: array
items:
type: string
description: '`external_reference_ids` will only be included in the response if `external_references` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
full_name:
type: string
description: The full name of the user.
headline:
type: string
description: A short description of the user.
last_site_activity:
type: string
format: date-time
description: 'The last time a user logged in. This field is only available in conjunction with the `on_my_account` filter option. Only visible when the API user is an Account Administrator.
Only returned when requested through the optional_fields param.'
manager_id:
type: string
description: '`manager_id` will only be included in the response if `manager` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
photo_path:
type: string
description: The URL of the user's profile photo.
role_id:
type: string
description: '`role_id` will only be included in the response if `role` is in the list of included associations. See <a href=''#section/Includes''>include</a> section for usage.'
skill_ids:
type
# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mavenlink/refs/heads/main/openapi/mavenlink-story-state-changes-api-openapi.yml