# Kantata OX API Documentation

Kantata OX's API provides access to the majority of Kantata OX's data model. The API authenticates requests using OAuth2 tokens and exists primarily to allow scripts and 3rd-party applications to access and manage Kantata OX data on behalf of Kantata OX users.

## Schema

Requests must be sent via HTTPS and can be in either JSON or [Rails structured x-www-form-urlencoded](http://stackoverflow.com/a/950198) format. Responses will always be returned in JSON format.  Dates and times are returned as [ISO 8601](http://www.w3.org/TR/NOTE-datetime) formatted strings. All requests to the API must have URLs relative to the base API URL:


```
https://api.mavenlink.com/api/v1/
```

## Authentication

All requests to the Kantata OX API must be authenticated with an OAuth bearer token. See the application workflow for details on how to register an application with Kantata OX and obtain OAuth bearer tokens.

To authenticate using the `Authorization` header, set the header's value to `Bearer <token>`. So, if your token was `abc123`, your HTTP request would include the header `Authorization: Bearer abc123`.

For example, authenticating a request using `curl` would mean running a command similar to this one:


```curl
curl -H "Authorization: Bearer abc123" "https://api.mavenlink.com/api/v1/workspaces.json"
```

All requests to the Kantata OX API require an Authorization header. For brevity, future API request examples in this documentation will not include the example Authorization header parameter.

### OAuth 2.0

[OAuth 2.0](http://oauth.net/2/) provides an evolving, standardized inter-application authentication workflow for the Web.  To build an application that interacts with Kantata OX on behalf of your users, you will need to register your application, and then obtain an OAuth token for each of your users.

#### Registering your application

Register and manage OAuth2 applications that can connect to Kantata OX at the [application management](https://app.mavenlink.com/oauth/applications) page as a Kantata OX account administrator. You'll need a paid Kantata OX account in order to register applications with us. Applications have a name and a callback URL for OAuth2.

If you only want to use the Kantata OX API for yourself, or as a backend connector, you must still register an Application, but then you can get an OAuth token for yourself on the Application's page. If you want your application to be able to use the Kantata OX API on behalf of other users, read the next section.

#### Obtaining tokens for users

Every request to the Kantata OX API must be accompanied by a valid OAuth token, indicating that your application has been authorized by the Kantata OX user in question. When you register an application with us, we'll provide you with a secret key. That key is unique to your application, and shouldn't be shared with anyone else. Treat it like a password.  You'll need it to request user tokens.

To authorize your application for Kantata OX API access and obtain a user token, follow the below steps for each Kantata OX user:

Note: If you are using an OAuth2 library, many of these steps will be handled for you.

  1. Request a short-term code, granted when the Kantata OX user agrees to allow your application access.

      Send your user to `/oauth/authorize` with the REQUIRED parameters `client_id`, `response_type`, and `redirect_uri`.

        * `client_id` is the ID assigned to your application by Kantata OX
        * `response_type` must be set to "code"
        * `redirect_uri` must be set to a URL where your application can accept codes and then exchange them for access tokens.  It should match the `redirect_uri` specified when you registered your application.

      Here is an example URL that an application located at "myapp.com" might use. (Linebreaks are not included in the URL.)

        ```curl
          https://app.mavenlink.com/oauth/authorize?response_type=code&client_id=abc123&redirect_uri=http%3A%2F%2Fmyapp.com%2Foauth%2Fcallback
        ```

  2. The user will be asked by Kantata OX if they want to authorize your application to interact with Kantata OX on their behalf.

      If something goes wrong (like the user refused to authorize your application), Kantata OX will redirect to the `redirect_uri` with query parameters providing information about the error. For example, if authorization is denied, the user will be redirected to:

        ```curl
          $REDIRECT_URI?error=access_denied&error_description=The+resource+owner+or+authorization+server+denied+the+request.
        ```

      If the user allows your application, then Kantata OX will redirect to the `redirect_uri` with query parameters providing your application with a time-limited code that your application can exchange for an access token within the next 5 minutes. Here is an example redirection with granted access:

        ```curl
          $REDIRECT_URI?code=abc123
        ```

  3. Your application exchanges the code for an access token

      Now that your application has a code, it should make a POST request directly to Kantata OX at `https://app.mavenlink.com/oauth/token` to exchange the code for an access token that will allow continued interaction with the Kantata OX API. The request must include the `client_id`, `client_secret`, `grant_type`, `code`, and `redirect_uri` parameters.

      * `client_id` is the ID assigned to your application by Kantata OX
      * `client_secret` is the secret token assigned to your application by Kantata OX
      * `grant_type` must be set to "authorization_code" in order to exchange a code for an access token
      * `code` is the value that was returned in the `code` query parameter when Kantata OX redirected back to your `redirect_uri`
      * `redirect_uri` is the exact same value that you used in the original request to /oauth/authorize

      If the request is invalid for some reason, an error response like the one described above will be returned. However, the parameters will be returned in the response body, encoded as JSON, instead of in the URL encoded as query parameters.

      If the request is valid, Kantata OX will provide a response body, encoded in JSON, containing `access_token` and `token_type`.

        * `access_token` is the token that your application will use to authenticate requests to the Kantata OX API as this user
        * `token_type` will be "bearer"

  4. Your application uses the access token to make authenticated requests to the Kantata OX API

      At this point, your application can use the access token to authenticate requests made to the Kantata OX API as described above in the [Authentication](#authentication) section.

## Bearer Token
**Security Scheme Type:** API Key

**Header parameter name:** Bearer

## OauthSecurity
**Security Scheme Type:** OAuth2

**Flow type:** `authorizationCode`

**Authorization URL:** `https://app.mavenlink.com/oauth/authorize`

**Token URL:** `https://app.mavenlink.com/oauth/token`

### Security

Kantata OX OAuth access tokens do not expire and must be treated with the same security that you would treat client credentials such as passwords.  All requests must be made over SSL and all user security credentials must be stored using industry best practices.  If a user revokes your application's access, usage of the token will result in an error.

## Response Format

Kantata OX API responses come back as JSON.  All GET responses will be of a format similar to the following:


```json
{
  "count": 2,
  "results": [{ key: "workspaces", id: "10" }, { key: "workspaces", id: "11" }],
  "workspaces": {
    "10": {
      id: "10",
      title: "some project",
      participant_ids: ["2", "6"],
      primary_counterpart_id: "6"
    },
    "11": {
      id: "11",
      title: "another project",
      participant_ids: ["2", "8"],
      primary_counterpart_id: "8"
    }
  },
  "users": {
    "2": { id: "2", full_name: "bob" },
    "6": { id: "6", full_name: "chaz" },
    "8": { id: "8", full_name: "jane" }
  }
}
```

As you can see, Kantata OX API responses can return multiple data types simultaneously, transferring objects and their associations in a single response.  In this example, the developer has likely requested the `/workspaces.json` endpoint, asking for inclusion of those workspaces' participants and primary counterparts.  These associations have come back in the top-level object called `users`.  The developer should always use the returned `results` array to retrieve the canonical results from an API request.  This is because some objects may have associations of the same type and can thus be mixed together with their associations in the JSON.  For example, stories (tasks) have sub_stories which are the same type of object, so looking directly at the returned `stories` key when stories have been requested to include their sub_stories will be confusing and will include both.  Instead, iterate the `results` key to determine exactly which top-level objects matched your query and in what order.

The follow sections explain how to customize further the Kantata OX API responses to your needs.

## Pagination

Large lists of items may be returned in pages. The JSON response will contain a key named `count` with a value of the number of objects returned by the entire query. If that number is greater than the number of objects returned by the request, additional objects may be requested by setting the parameter `page`, the parameter `per_page`, or both.

If you would like to start at a specific offset you may alternatively use `limit` and `offset` parameters.  If both `limit` and `offset` are passed then `page` and `per_page` are ignored, otherwise behavior falls back to `page` and `per_page`.

* `page`
  * type: Integer
  * default: 1
* `per_page`
  * type: Integer
  * default: 20
  * maximum: 200
* `usage`
  * workspaces.json?page=2&per_page=15

-or-

* `limit`
  * type: Integer
  * minimum: 1
* `offset`
  * type: Integer
  * minimum: 0
* `usage`
  * workspaces.json?limit=15&offset=10

## Request by ID

While each API endpoint returns a paginated listing of the data available, it is sometimes more useful to request only one (or only a few) items. The Kantata OX API provides two ways to do this.  The first, via the `only` parameter, allows you to request one or more resources directly by ID. To request the data for a single Workspace with an ID of 5, make an API request to the URL `GET /api/v1/workspaces.json?only=5`. Multiple IDs can be supplied in a comma separated list, like `GET /api/v1/workspaces.json?only=5,6,7`. The returned JSON will contain only the objects with those IDs.

* `only`
  * type: Comma separated Integers
  * default: not applicable
* `usage`
  * workspaces.json?only=5,6

Additionally, we support traditional RESTful routes, such as `GET /api/v1/workspaces/5.json`.  These routes also support our standard filters and includes, both detailed below.  Unlike `only` requests to our "index" routes, these "show" routes will generate a 404 response if the requested resource cannot be found.  Sometimes this is due to default filters being applied, so be sure to check the filter defaults applied in the specific documentation for the requested resource.  More on filters below.

## Filters

Many API endpoints also provide an optional set of filters that can be applied to the data that will be returned. Each filter, and the logic behind it, is documented on the individual endpoint pages, but the general form is a URL query parameter or request parameter like `filter1=arg1&filter2=arg2`, where `filter1` and `filter2` are the names of two different filters, and `arg1` and `arg2` are the arguments to each filter, respectively.  Additionally, some filters have default values, which indicates that they are automatically applied to your request with their default value.  Default values are applied both on "index" (`GET /workspaces.json`) requests and "show" (`GET /workspaces/1.json`) requests.

## Includes

Some objects returned by the API may have associations that are not included in the JSON response by default. Those associated objects can be requested by adding an `include` parameter to the request. For example, to request both a list of posts, and the users that created those posts, you could request `/posts.json?include=user`. The response will consist of a JSON object with an array of result mappings under the `"results"` key, a `"posts"` key with a hash of post objects, keyed by id, and a `"users"` key with a hash of user objects, again keyed by id. To find the user that created a particular post, just use the post object's `"user_id"` key to find the user object keyed with the same id.

Multiple associations may be fetched simultaneously by adding comma-separated values to the `include` parameter. For example, to fetch the user and replies associated with post 6, you might request `/posts.json?only=6&include=user,attachments`, which would supply both the users and the attachments that belong to the posts returned in the response.

_Example_


```curl
curl -H "Authorization: Bearer abc123" "https://api.mavenlink.com/api/v1/posts.json?include=user,attachments"
```

```json
{
  "count": 1,
  "results": [
    { "key": "posts", "id": "16270634" }
  ],
  "posts": {
    "16270634": {
      "id": "16270634",
      "message": "Hello World",
      "has_attachments": true,
      "user_id": "2",
      "workspace_id": "2249167",
      "attachment_ids": ["6700107"]
    }
  },
  "users": {
    "2": {
      "id": "2",
      "full_name": "John Doe",
      "email_address": "johnny_doe@example.com"
    }
  },
  "attachments": {
    "6700107": {
      "id": "6700107",
      "created_at": "2013-04-15T16:48:48-07:00",
      "filename": "turtle.jpg",
      "filesize": 16225
    }
  }
}
```

## Optional Fields

Some objects returned by the API may have fields that are not included in the JSON response by default. Those optional fields can be requested by adding an `optional_fields` parameter to the request. For example, to request a list of stories and include the optional field `can_edit`, you could request `/stories.json?optional_fields=can_edit`. Each story in the response will include the requested optional field in their JSON.

Multiple optional fields may be requested simultaneously by adding comma-separated values to the `optional_fields` parameter. For example, to fetch stories and include both `can_edit` and `can_post` fields in the response, you can request `/stories.json?optional_fields=can_edit,can_post`.

_Example_


```curl
curl -H "Authorization: Bearer abc123" "https://api.mavenlink.com/api/v1/stories.json?optional_fields=can_edit,can_post"
```

```json
{
  "count": 1,
  "results": [
    {
      "key": "stories",
      "id": "1941361"
    }
  ],
  "stories": {
    "1937928": {
      "title": "Example Story",
      "description": "example description",
      ...
      "subtree_depth": 0,
      "ancestry_depth": 0,
      "can_edit": true,
      "can_post": true,
      "time_trackable": true,
      "time_estimate_in_minutes": null,
      ...
      "parent_id": null,
      "root_id": null,
      "id": "1937928"
    }
  },
  "meta": {
    "count": 1,
    "page_count": 1,
    "page_number": 1,
    "page_size": 20
  }
}
```

## Ordering

Each endpoint in the Kantata OX API allows ordering by various fields.  If we're missing a sort field that you need, please ask!  See the specific endpoint documentation for endpoint-specific details.

When ordering, supply `order` with the name of a valid sort field for the endpoint and a direction.  For example, `order=created_at:desc`.

## Searching

Some API endpoints support text search, however only some filters can be combined with search, and results will be returned ordered by relevancy to the search query.  Search does not apply to `only` requests.  If search is unavailable the response will contain a system error describing the problem.

To make a search request, simply add a `search` parameter to the request.  For example, to search for stories with "estimates" in the title, assignee names, or other fields, request `/stories.json?search=estimates`

## Errors

If there is an error while processing your request, the response will include an HTTP status code indicating the error.  Errors are currently returned as a top-level `errors` key with an array of error objects.  For example, on OAuth failure you will receive a HTTP 401 with the following JSON body:
  

```json
{
  errors: [
    {
      type: "oauth"
      message: "Invalid OAuth 2 Request"
    }
  ]
}
```

System errors will look like:


```json
{
  errors: [
    {
      type: "system"
      message: "Your account has been canceled"
    }
  ]
}
```

And model validation errors look like:


```json
{
  errors: [
    {
      type: "validation",
      message: "Please give your project a title",
      field: "title"
    },
    {
      type: "validation",
      message: "Please select a role for this project",
      field: "creator_role"
    }
  ]
}
```


## Rate Limits

When too many requests are made in a short amount of time, the API may reply with the HTTP code 429 Too Many Requests. In that case, simply retry your request after a small delay.

There are general rate limits applied to all requests. The following endpoints also have their own rate limits:

* [Create a workspace](/tag/Workspaces#operation/create-workspace) - `POST /api/v1/workspaces`
* [Get workspaces](/tag/Workspaces#operation/get-workspaces) - `GET /api/v1/workspaces`
* [Create a workspace invitation](/tag/Workspaces#operation/create-workspace-invitation) - `POST /api/v1/workspaces/{id}/invite`
* [Create an account invitation](/tag/Account-Invitations#operation/create-account-invitation) (i.e. Create a new user) - `POST /api/v1/account_invitations`
* [Resend an account invitation](/tag/Account-Invitations#operation/resend-account-invitation) - `PUT /api/v1/account_invitations/{id}/resend`
* [Create custom field value](/tag/Custom-Field-Values#operation/create-custom-field-value) - `POST /api/v1/custom_field_values`
* [Get custom field values](/tag/Custom-Field-Values#operation/get-custom-field-values) - `GET /api/v1/custom_field_values`
* [Create a project snapshot](/tag/Project-Snapshots#operation/create-project-snapshot) - `POST /api/v1/project_snapshots`

Please see the [Knowledge Base](https://knowledge.kantata.com/hc/en-us/articles/9698066628123) for the exact rate limits.

Please note that we reserve the right to change the limits at any time. In addition, if we determine that someone is using the API improperly, we may adjust the limits further.

## Timeouts

All API requests will timeout after 3 minutes. Timeouts typically occur when there is a lot of data to return. You can use the following strategies to avoid your requests timing out:

* Break up your request into smaller requests
* Apply a date filter to your request
* If you are polling multiple endpoints in order to export data or sync Kantata data to a third-party system, use the [Subscribed Events API](/tag/Events) instead. You can get recently updated objects in one request.


Version: 1.0.0
License: COPYRIGHT © 2026 Kantata, Inc.

## Servers

```
https://api.mavenlink.com/api/v1
```

## Security

### BearerToken

Type: apiKey
In: header
Name: Bearer

### OauthSecurity

Type: oauth2

## Download OpenAPI description

[Kantata OX API Documentation](https://developer.kantata.com/_bundle/Kantata/specification.yaml)

## Event Types

A change is called a [Subscribed Event](https://mavenlink.zendesk.com/hc/en-us/articles/4407962435227),
and the type of change is called a *Subscribed Event Type*.

*Note:* Only Account Administrators can access Subscribed Events.

### Fetching a list of Subscribed Event Types

 - [GET /subscribed_events/event_types](https://developer.kantata.com/kantata/specification/event-types/get-subscribed-event-types.md): Returns a list of all Event Types
tracked by Subscribed Events.

The event type schema, accessible using the subscribed_event_type_schemas key, is metadata that shows
the structure of all events. The event types schema includes documentation for the events and fields.
You can reference the event types schema as you build your application that processes subscribed events.

## Events

Up to 9 days of trackable changes ("events") for an account can be accessed via the Subscribed Events API.
For a list of all the event types tracked by Subscribed Events, please see the [Knowledge Base](https://mavenlink.zendesk.com/hc/en-us/articles/4407962435227).
Note that only Account Administrators can access Subscribed Events.

Some actions performed in Kantata OX can generate multiple events. For instance, approving an Expense Report will generate `expense_report:updated` and `expense:updated` events. Note that events for the same action are not guaranteed to appear in the exact order the changes were completed.

Also note that although we try to create events within a few minutes of an action being performed, events may take some time to appear.

Additionally, events may sometimes be duplicated. Your application should handle duplicate events appropriately.

### Fetching a list of Subscribed Events

 - [GET /subscribed_events](https://developer.kantata.com/kantata/specification/events/get-subscribed-events.md): Returns up to 9 days of records for all event types,
unless filter parameters have been applied.

Only records associated with the requester's Kantata OX account are returned.


This endpoint returns structured Subscribed Event 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 subscribed_events top-level JSON key.
Please see our Response Format section for more information.

## Account Locations

Represents a location associated with an account.

### Fetching a list of Account Locations

 - [GET /account_locations](https://developer.kantata.com/kantata/specification/account-locations/get-account-locations.md): This endpoint returns structured Account Location 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 account_locations top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Account Location

 - [POST /account_locations](https://developer.kantata.com/kantata/specification/account-locations/create-account-location.md): This endpoint returns structured Account Location 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 account_locations top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Account Location

 - [PUT /account_locations/{id}](https://developer.kantata.com/kantata/specification/account-locations/update-account-location.md): This endpoint returns structured Account Location 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 account_locations top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Account Location

 - [DELETE /account_locations/{id}](https://developer.kantata.com/kantata/specification/account-locations/delete-account-location.md): 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.

## Access Group Memberships

Access Groups allow you to manage product access for users. An Access Group Membership represents the connection of a user to an Access Group.

### Fetching a list of Access Group Memberships

 - [GET /access_group_memberships](https://developer.kantata.com/kantata/specification/access-group-memberships/get-access-group-memberships.md): Returns all access group memberships. The non-editable "Account Administrators" group is excluded from the response.


This endpoint returns structured Access Group Membership 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 access_group_memberships top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Access Group Membership

 - [POST /access_group_memberships](https://developer.kantata.com/kantata/specification/access-group-memberships/create-access-group-membership.md): Adds a user to an access group. Note: To add a user to the Account Administrators access group, you must update
the user's account membership permission instead.


This endpoint returns structured Access Group Membership 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 access_group_memberships top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Access Group Membership

 - [GET /access_group_memberships/{id}](https://developer.kantata.com/kantata/specification/access-group-memberships/get-access-group-membership.md): This endpoint returns structured Access Group Membership 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 access_group_memberships top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Access Group Membership

 - [DELETE /access_group_memberships/{id}](https://developer.kantata.com/kantata/specification/access-group-memberships/delete-access-group-membership.md): Deletes the specified access group membership (i.e. removes the user from the access group). Note: To remove a user
from the Account Administrators access group, you must update the user's account membership permission instead.


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.

## Account Colors

Account Colors are the colors available on a user's account that can be used to style workspaces.

### Fetching a list of Account Colors

 - [GET /account_colors](https://developer.kantata.com/kantata/specification/account-colors/get-account-colors.md): Each project in Kantata OX can be tagged with a Project Color for categorization purposes. The colors that
are available for projects are defined at the account level. Use the id of Account Color to read and update
Project Colors using the workspaces endpoint.


This endpoint returns structured Account Color 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 account_colors top-level JSON key.
Please see our Response Format section for more information.

## Account Invitations

Account Invitations represent invitations for non-users to join a Kantata OX account.

### Fetching a list of Account Invitations

 - [GET /account_invitations](https://developer.kantata.com/kantata/specification/account-invitations/get-account-invitations.md): This endpoint returns structured Account Invitation 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 account_invitations top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Account Invitation

 - [POST /account_invitations](https://developer.kantata.com/kantata/specification/account-invitations/create-account-invitation.md): Adds a user to your account.

Any members added in excess of your contracted license count are billed at a prorated subscription fee for
the remainder of the billing term. To review your contracted license count,
in Kantata OX, hover over Settings in the left navigation and select Plan.

This endpoint has its own rate limit. See the Knowledge Base for more information.

Bulk Create

This endpoint supports bulk creating up to 50 objects. In the request body, set the top-level key to its plural
form and place the objects in an array. Example:


{
  "account_invitations": [
    {
      "email_address": "email@email.com",
      "full_name": "Full Name"
    },
    {
      "email_address": "email@email.com",
      "full_name": "Full Name"
    }
  ]
}



This endpoint returns structured Account Invitation 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 account_invitations top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Account Invitation

 - [GET /account_invitations/{id}](https://developer.kantata.com/kantata/specification/account-invitations/get-account-invitation.md): This endpoint returns structured Account Invitation 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 account_invitations top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Account Invitation

 - [PUT /account_invitations/{id}](https://developer.kantata.com/kantata/specification/account-invitations/update-account-invitation.md): This endpoint returns structured Account Invitation 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 account_invitations top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Account Invitation

 - [DELETE /account_invitations/{id}](https://developer.kantata.com/kantata/specification/account-invitations/delete-account-invitation.md): 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.

### Resend an account invitation

 - [PUT /account_invitations/{id}/resend](https://developer.kantata.com/kantata/specification/account-invitations/resend-account-invitation.md): Resends an account invitation email to an invited user.

This endpoint has its own rate limit. See the Knowledge Base for more information.


This endpoint returns structured Account Invitation 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 account_invitations top-level JSON key.
Please see our Response Format section for more information.

## Account Memberships

Each user on an account will have an account membership that describes their relationship to the account. When you add a user
to an account, create a new `account_membership`. When you remove a user from an account, delete their account_membership record.

### Fetching a list of Account Memberships

 - [GET /account_memberships](https://developer.kantata.com/kantata/specification/account-memberships/get-account-memberships.md): You can request either GET /api/v1/account_memberships.json?only=5 or
GET /api/v1/account_memberships/5.json. In both cases, default filters will be applied.
Unless you provide the is_active:false filter, you won't receive account membership for inactive users, and will get a 404 status
on the "show" route.


This endpoint returns structured Account Membership 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 account_memberships top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Account Membership

 - [GET /account_memberships/{id}](https://developer.kantata.com/kantata/specification/account-memberships/get-account-membership.md): This endpoint returns structured Account Membership 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 account_memberships top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Account Membership

 - [PUT /account_memberships/{id}](https://developer.kantata.com/kantata/specification/account-memberships/update-account-membership.md): This endpoint returns structured Account Membership 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 account_memberships top-level JSON key.
Please see our Response Format section for more information.

### Remove a user from an account

 - [DELETE /account_memberships/{id}](https://developer.kantata.com/kantata/specification/account-memberships/delete-account-membership.md): This removes the member from your account and places them on a separate Kantata OX account. It is important
to know that the account owner cannot be removed.

WARNING: Since the removed member gets their on own separate Kantata OX account,
they will remain on existing projects but will be View Only and no
longer be able to create projects in your account.

We suggest disabling an account member over removing them since it revokes their ability to access
your account and they will no longer have access to projects for which they were contributing.


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.

### Make a user inactive

 - [PUT /account_memberships/{id}/disable](https://developer.kantata.com/kantata/specification/account-memberships/deactivate-account-membership.md): Disables a user in an account

This endpoint returns structured Account Membership 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 account_memberships top-level JSON key.
Please see our Response Format section for more information.

### Make a user active

 - [PUT /account_memberships/{id}/enable](https://developer.kantata.com/kantata/specification/account-memberships/activate-account-membership.md): Enables a user in an account

This endpoint returns structured Account Membership 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 account_memberships top-level JSON key.
Please see our Response Format section for more information.

## Backup Approver Associations

A Backup Approver Association represents the relationship of a delegated approver to a range of specific dates.
Approval responsibilities are delegated to a backup approver.

### Fetching a list of Backup Approver Associations

 - [GET /backup_approver_associations](https://developer.kantata.com/kantata/specification/backup-approver-associations/get-backup-approver-associations.md): The index endpoint only returns backup approver associations that are visible to the user.
Backup approver associations are only visible to account members.


This endpoint returns structured Backup Approver Association 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 backup_approver_associations top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Backup Approver Association

 - [POST /backup_approver_associations](https://developer.kantata.com/kantata/specification/backup-approver-associations/create-backup-approver-association.md): This endpoint returns structured Backup Approver Association 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 backup_approver_associations top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Backup Approver Association

 - [GET /backup_approver_associations/{id}](https://developer.kantata.com/kantata/specification/backup-approver-associations/get-backup-approver-association.md): This endpoint returns structured Backup Approver Association 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 backup_approver_associations top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Backup Approver Association

 - [PUT /backup_approver_associations/{id}](https://developer.kantata.com/kantata/specification/backup-approver-associations/update-backup-approver-association.md): This endpoint returns structured Backup Approver Association 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 backup_approver_associations top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Backup Approver Association

 - [DELETE /backup_approver_associations/{id}](https://developer.kantata.com/kantata/specification/backup-approver-associations/delete-backup-approver-association.md): 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.

## Billable Utilizations

Represents the billable utilization target for an account member. Each record has an effective date; the active billable utilization is the one with the most recent effective date. These endpoints are only accessible to users who are Administrators on the account.

### Fetching a list of Billable Utilizations

 - [GET /billable_utilizations](https://developer.kantata.com/kantata/specification/billable-utilizations/get-billable-utilizations.md): This endpoint returns structured Billable Utilization 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 billable_utilizations top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Billable Utilization

 - [POST /billable_utilizations](https://developer.kantata.com/kantata/specification/billable-utilizations/create-billable-utilization.md): This endpoint returns structured Billable Utilization 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 billable_utilizations top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Billable Utilization

 - [GET /billable_utilizations/{id}](https://developer.kantata.com/kantata/specification/billable-utilizations/get-billable-utilization.md): This endpoint returns structured Billable Utilization 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 billable_utilizations top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Billable Utilization

 - [PUT /billable_utilizations/{id}](https://developer.kantata.com/kantata/specification/billable-utilizations/update-billable-utilization.md): This endpoint returns structured Billable Utilization 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 billable_utilizations top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Billable Utilization

 - [DELETE /billable_utilizations/{id}](https://developer.kantata.com/kantata/specification/billable-utilizations/delete-billable-utilization.md): 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.

## Cost Rates

Cost Rate represents the hourly cost for an account member, specified in a specific currency. A cost rate
with the same currency as the account default currency is called the `default cost rate`.

### Get Cost Rates

 - [GET /cost_rates](https://developer.kantata.com/kantata/specification/cost-rates/get-cost-rates.md): This endpoint returns structured Cost Rate 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 cost_rates top-level JSON key.
Please see our Response Format section for more information.

### Creating one or many Cost Rates

 - [POST /cost_rates](https://developer.kantata.com/kantata/specification/cost-rates/create-cost-rate.md): Creates a new cost rate for a specified account membership and currency. If a cost rate already exists
for the specified account membership and currency, it will be overridden, effectively making this an
update request as well. Up to 100 cost rates can be created or updated at once.

Note: Updating a cost rate will set the cost rate for future work. Existing time entries will not be affected.


This endpoint returns structured Cost Rate 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 cost_rates top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Cost Rate

 - [PUT /cost_rates/{id}](https://developer.kantata.com/kantata/specification/cost-rates/update-cost-rate.md): This endpoint returns structured Cost Rate 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 cost_rates top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Cost Rate

 - [DELETE /cost_rates/{id}](https://developer.kantata.com/kantata/specification/cost-rates/delete-cost-rate.md): 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.

## Custom Branding

### Fetch Custom Branding Settings

 - [GET /custom_branding](https://developer.kantata.com/kantata/specification/custom-branding/get-custom-branding-settings.md): Retrieve custom branding information for the current user's account.


This endpoint returns structured Custom Branding (Private Label) 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 private_label top-level JSON key.
Please see our Response Format section for more information.

## Organization Memberships

An Organization Membership represents the connection of a user and project to an organization.

### Fetching a list of Organization Memberships

 - [GET /organization_memberships](https://developer.kantata.com/kantata/specification/organization-memberships/get-organization-memberships.md): This endpoint returns structured Organization Membership 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 organization_memberships top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Organization Membership

 - [POST /organization_memberships](https://developer.kantata.com/kantata/specification/organization-memberships/create-organization-membership.md): Applies an organization to a workspace (project) or user.

Bulk Create

This endpoint supports bulk creating up to 100 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "organization_memberships": [
    {
      "geography_id": 123,
      "department_id": 456,
      "member_id": 111,
      "member_type": "User"
    },
    {
      "geography_id": 123,
      "department_id": 456,
      "member_id": 222,
      "member_type": "User"
    }
  ]
}



This endpoint returns structured Organization Membership 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 organization_memberships top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Organization Membership

 - [GET /organization_memberships/{id}](https://developer.kantata.com/kantata/specification/organization-memberships/get-organization-membership.md): This endpoint returns structured Organization Membership 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 organization_memberships top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Organization Membership

 - [PUT /organization_memberships/{id}](https://developer.kantata.com/kantata/specification/organization-memberships/update-organization-membership.md): This endpoint returns structured Organization Membership 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 organization_memberships top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Organization Membership

 - [DELETE /organization_memberships/{id}](https://developer.kantata.com/kantata/specification/organization-memberships/delete-organization-membership.md): 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.

## Organizations

The Organizations feature in Kantata OX is composed of two independent trees:
Department and Geography. Each has its own hierarchy structure.
Users and Workspaces are associated to exact positions in these two trees
via [Organization Memberships](/tag/Organization-Memberships).
The corresponding API fields are `geography_id` and `department_id`.

A user's position in these two trees determines what objects they can see
in Kantata OX—they can see objects associated with every department and
geography going up the hierarchy from their selected department and geography.

### Fetching a list of Organizations

 - [GET /organizations](https://developer.kantata.com/kantata/specification/organizations/get-organizations.md): This endpoint returns structured Organization 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 organizations top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Organization

 - [POST /organizations](https://developer.kantata.com/kantata/specification/organizations/create-organization.md): Creates an organization.

Bulk Create

This endpoint supports bulk creating up to 100 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "organizations": [
    {
      "name": "Organization",
      "parent_id": 123
    },
    {
      "name": "Organization",
      "parent_id": 123
    }
  ]
}



This endpoint returns structured Organization 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 organizations top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Organization

 - [GET /organizations/{id}](https://developer.kantata.com/kantata/specification/organizations/get-organization.md): This endpoint returns structured Organization 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 organizations top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Organization

 - [PUT /organizations/{id}](https://developer.kantata.com/kantata/specification/organizations/update-organization.md): This endpoint returns structured Organization 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 organizations top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Organization

 - [DELETE /organizations/{id}](https://developer.kantata.com/kantata/specification/organizations/delete-organization.md): 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.

## Roles

A Role represents the main position or title assigned to members on an account. Roles may be associated
with account memberships, account invitations, participation, project template assignments, rate card roles,
rate card versions, resources, or time adjustments.

### Fetching a list of Roles

 - [GET /roles](https://developer.kantata.com/kantata/specification/roles/get-roles.md): The Roles endpoint provides a list of all active roles that belong to the account of the user making the request.

The response will contain an array of role objects, sorted alphabetically by the name attribute
available under the key named roles.


This endpoint returns structured Role 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 roles top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Role

 - [POST /roles](https://developer.kantata.com/kantata/specification/roles/create-role.md): This endpoint returns structured Role 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 roles top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Role

 - [GET /roles/{id}](https://developer.kantata.com/kantata/specification/roles/get-role.md): This endpoint returns structured Role 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 roles top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Role

 - [PUT /roles/{id}](https://developer.kantata.com/kantata/specification/roles/update-role.md): This endpoint returns structured Role 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 roles top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Role

 - [DELETE /roles/{id}](https://developer.kantata.com/kantata/specification/roles/delete-role.md): The Role will be soft-deleted if it is currently in use. If not, it will be removed.


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.

## Skill Categories

A Skill Category represents the classification for a group of skills. Options are 'Skill', 'Language', 'Certification', and 'Other'.

Skill categories are defined by Kantata OX and cannot be modified or deleted.

### Fetching a list of Skill Categories

 - [GET /skill_categories](https://developer.kantata.com/kantata/specification/skill-categories/get-skill-categories.md): This endpoint returns structured Skill Category 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 skill_categories top-level JSON key.
Please see our Response Format section for more information.

## Skill Memberships

Skill Memberships represent skills that has been assigned to a specified user.

### Fetching a list of Skill Memberships

 - [GET /skill_memberships](https://developer.kantata.com/kantata/specification/skill-memberships/get-skill-memberships.md): Returns a list of viewable skill memberships.

This endpoint returns structured Skill Membership 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 skill_memberships top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Skill Membership

 - [POST /skill_memberships](https://developer.kantata.com/kantata/specification/skill-memberships/create-skill-membership.md): Adds a skill to a user.

Bulk Create

This endpoint supports bulk creating up to 200 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "skill_memberships": [
    {
      "skill_id": 123,
      "user_id": 111
    },
    {
      "skill_id": 456,
      "user_id": 222
    }
  ]
}



This endpoint returns structured Skill Membership 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 skill_memberships top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Skill Membership

 - [GET /skill_memberships/{id}](https://developer.kantata.com/kantata/specification/skill-memberships/get-skill-membership.md): Returns a skill membership.

This endpoint returns structured Skill Membership 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 skill_memberships top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Skill Membership

 - [PUT /skill_memberships/{id}](https://developer.kantata.com/kantata/specification/skill-memberships/update-skill-membership.md): This endpoint returns structured Skill Membership 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 skill_memberships top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Skill Membership

 - [DELETE /skill_memberships/{id}](https://developer.kantata.com/kantata/specification/skill-memberships/delete-skill-membership.md): Removes a skill from a user.

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.

## Skills

Skills are used in Kantata OX to describe capabilities of users for the purposes of resource planning.
They can be associated with a user through a Skill Membership.
A user can be associated with up to 200 skills.
This model includes categories such as 'Skill', 'Language', 'Certification' and 'Other'.

### Fetching a list of Skills

 - [GET /skills](https://developer.kantata.com/kantata/specification/skills/get-skills.md): The Skills endpoint provides a list of every Skill that belongs to the Account of the User making the request.
The response will contain an array of Skill objects, sorted alphabetically by the name attribute.

NOTE: You cannot create more than 5000 skills per account.


This endpoint returns structured Skill 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 skills top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Skill

 - [POST /skills](https://developer.kantata.com/kantata/specification/skills/create-skill.md): Adds a new skill to the account.

Note: You cannot create more than 5000 skills per account.

Bulk Create

This endpoint supports bulk creating up to 200 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


  {
  "skills": [
    {
      "name": "Skill",
      "skill_category_id": 123
    },
    {
      "name": "Skill 2",
      "skill_category_id": 456
    }
  ]
}



This endpoint returns structured Skill 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 skills top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Skill

 - [GET /skills/{id}](https://developer.kantata.com/kantata/specification/skills/get-skill.md): This endpoint returns structured Skill 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 skills top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Skill

 - [PUT /skills/{id}](https://developer.kantata.com/kantata/specification/skills/update-skill.md): This endpoint returns structured Skill 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 skills top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Skill

 - [DELETE /skills/{id}](https://developer.kantata.com/kantata/specification/skills/delete-skill.md): 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.

## Task Status Sets

Task Status Sets allow you to create custom statuses for tasks (stories) that can then be applied to projects.

### Fetching a list of Task Status Sets

 - [GET /task_status_sets](https://developer.kantata.com/kantata/specification/task-status-sets/get-task-status-sets.md): Gets a list of task status sets on the account. To include information in the response about the statuses within the sets, add ?include=custom_task_statuses to the request.


This endpoint returns structured Task Status Set 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 task_status_sets top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Task Status Set

 - [POST /task_status_sets](https://developer.kantata.com/kantata/specification/task-status-sets/create-task-status-set.md): Creates a task status set on the account that contains only the four default statuses (e.g. custom_task_statuses)—not started, started, needs info, and completed.


This endpoint returns structured Task Status Set 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 task_status_sets top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Task Status Set

 - [GET /task_status_sets/{id}](https://developer.kantata.com/kantata/specification/task-status-sets/get-task-status-set.md): Gets a task status set on the account. To include information in the response about the statuses within the set, add ?include=custom_task_statuses to the request.


This endpoint returns structured Task Status Set 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 task_status_sets top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Task Status Set

 - [PUT /task_status_sets/{id}](https://developer.kantata.com/kantata/specification/task-status-sets/update-task-status-set.md): Updates a task status set. Only the name can be updated with this endpoint. To update the statuses available in the set, use the Custom Task Statuses API instead. To change which set is the account default, use the Set Account Default Task Status Set endpoint instead.


This endpoint returns structured Task Status Set 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 task_status_sets top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Task Status Set

 - [DELETE /task_status_sets/{id}](https://developer.kantata.com/kantata/specification/task-status-sets/delete-task-status-set.md): Deletes a task status set and the statuses within the set. Only task status sets that are not in use can be deleted.


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.

### Update Account Default Task Status Set

 - [PUT /task_status_sets/{id}/update_account_default](https://developer.kantata.com/kantata/specification/task-status-sets/update-account-default.md): Designates a task status set as the default set to be applied to new projects.


This endpoint returns structured Task Status Set 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 task_status_sets top-level JSON key.
Please see our Response Format section for more information.

## Task Statuses

Custom task statuses can be created to be used on tasks (stories). Custom task statuses are associated to task status sets, which can be applied to projects (workspaces).

### Fetching a list of Custom Task Statuses

 - [GET /custom_task_statuses](https://developer.kantata.com/kantata/specification/task-statuses/get-custom-task-statuses.md): This endpoint returns structured Custom Task Status 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 custom_task_statuses top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Custom Task Status

 - [POST /custom_task_statuses](https://developer.kantata.com/kantata/specification/task-statuses/create-custom-task-status.md): Adds a new custom status to a task status set.

This endpoint returns structured Custom Task Status 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 custom_task_statuses top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Custom Task Status

 - [GET /custom_task_statuses/{id}](https://developer.kantata.com/kantata/specification/task-statuses/get-custom-task-status.md): This endpoint returns structured Custom Task Status 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 custom_task_statuses top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Custom Task Status

 - [PUT /custom_task_statuses/{id}](https://developer.kantata.com/kantata/specification/task-statuses/update-custom-task-status.md): Updates a custom task status. The name and position in the task status set can be updated. The status cannot be moved to a different status set and the category cannot be changed.

This endpoint returns structured Custom Task Status 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 custom_task_statuses top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Custom Task Status

 - [DELETE /custom_task_statuses/{id}](https://developer.kantata.com/kantata/specification/task-statuses/delete-custom-task-status.md): Deletes a custom task status within a task status set. If assigned to a task (story), the task’s status will default to the status type (category)—not started, started, needs info, or completed.
- This will delete the task status from this set. If this status is currently being used by a task in a project, the status will reset to its default status type: Not Started, Started, Needs Info, or Completed.


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.

## User Group Memberships

A User Group Membership represents the connection of a user to a [Workspace Group](/tag/Workspace-Groups). You must be an [Account Administrator](https://knowledge.kantata.com/hc/en-us/articles/203041364) to use these endpoints.

### Fetching a list of User Group Memberships

 - [GET /user_group_memberships](https://developer.kantata.com/kantata/specification/user-group-memberships/get-user-group-memberships.md): This endpoint returns structured User Group Membership 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 user_group_memberships top-level JSON key.
Please see our Response Format section for more information.

### Creating a new User Group Membership

 - [POST /user_group_memberships](https://developer.kantata.com/kantata/specification/user-group-memberships/create-user-group-memberships.md): Adds a user to a Workspace Group.

Bulk Create

This endpoint supports bulk creating up to 100 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "user_group_memberships": [
    {
      "user_id": 123,
      "workspace_group_id": 111
    },
    {
      "user_id": 456,
      "workspace_group_id": 111
    }
  ]
}



This endpoint returns structured User Group Membership 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 user_group_memberships top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing User Group Membership

 - [DELETE /user_group_memberships/{id}](https://developer.kantata.com/kantata/specification/user-group-memberships/delete-user-group-membership.md): Removes a user from a Workspace Group.


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.

## Users

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 tasks.

### Fetching visible users

 - [GET /users](https://developer.kantata.com/kantata/specification/users/get-users.md): This endpoint allows you to access all visible users based on the permission level of the requester.

> Note: This endpoint relies on project participation and will not return a member of your account
who is not in a project. To see all users on the account, use the on_my_account option.

If the requester is an Account Administrator, the request will return all users who are participating in a project on the requester's account.
In addition, it will return users not on the requester's account if they are participating in any project with an account member (either on the requester's account or their own account).

If the requester is not an Account Administrator, the request will only return users who are participating in a project with the requester.


This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Fetch your own data

 - [GET /users/me](https://developer.kantata.com/kantata/specification/users/get-my-user-data.md): This endpoint allows you to fetch your own data.


This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single User

 - [GET /users/{id}](https://developer.kantata.com/kantata/specification/users/get-user.md): This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing User

 - [PUT /users/{id}](https://developer.kantata.com/kantata/specification/users/update-user.md): This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Fetch My Work Capacity

 - [GET /users/{id}/capacity](https://developer.kantata.com/kantata/specification/users/get-my-work-capacity.md): This endpoint returns a summary of a user's work capacity for a provided range of dates.


This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Reset Profile Photo

 - [DELETE /users/{id}/profile_photo](https://developer.kantata.com/kantata/specification/users/reset-user-profile-photo.md): Delete the profile photo for the specified user.


This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Update Profile Photo

 - [POST /users/{id}/profile_photo](https://developer.kantata.com/kantata/specification/users/update-user-profile-photo.md): Update the profile photo for the specified user.


This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Fetching visible users

 - [GET /users](https://developer.kantata.com/kantata/specification/users/get-users.md): This endpoint allows you to access all visible users based on the permission level of the requester.

> Note: This endpoint relies on project participation and will not return a member of your account
who is not in a project. To see all users on the account, use the on_my_account option.

If the requester is an Account Administrator, the request will return all users who are participating in a project on the requester's account.
In addition, it will return users not on the requester's account if they are participating in any project with an account member (either on the requester's account or their own account).

If the requester is not an Account Administrator, the request will only return users who are participating in a project with the requester.


This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Fetch your own data

 - [GET /users/me](https://developer.kantata.com/kantata/specification/users/get-my-user-data.md): This endpoint allows you to fetch your own data.


This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single User

 - [GET /users/{id}](https://developer.kantata.com/kantata/specification/users/get-user.md): This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing User

 - [PUT /users/{id}](https://developer.kantata.com/kantata/specification/users/update-user.md): This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Fetch My Work Capacity

 - [GET /users/{id}/capacity](https://developer.kantata.com/kantata/specification/users/get-my-work-capacity.md): This endpoint returns a summary of a user's work capacity for a provided range of dates.


This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Reset Profile Photo

 - [DELETE /users/{id}/profile_photo](https://developer.kantata.com/kantata/specification/users/reset-user-profile-photo.md): Delete the profile photo for the specified user.


This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

### Update Profile Photo

 - [POST /users/{id}/profile_photo](https://developer.kantata.com/kantata/specification/users/update-user-profile-photo.md): Update the profile photo for the specified user.


This endpoint returns structured User 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 users top-level JSON key.
Please see our Response Format section for more information.

## Currencies

This object allows you to view the
[names, ISO codes, and symbols of currencies supported by Kantata OX](https://mavenlink.zendesk.com/hc/en-us/articles/360041576473).

### Get a list of currencies

 - [GET /currencies](https://developer.kantata.com/kantata/specification/currencies/get-currencies.md): Returns all currencies supported by Kantata OX, unless filter parameters have been applied.

## Custom Field Choices

Custom Field Choices are possible values for `'single'` and `'multi'` type custom fields.

### Fetching a list of Custom Field Choices

 - [GET /custom_field_choices](https://developer.kantata.com/kantata/specification/custom-field-choices/get-custom-field-choices.md): Returns all possible choices for all 'single' and 'multi' type custom fields on the requester's account.

This endpoint returns structured Custom Field Choice 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 custom_field_choices top-level JSON key.
Please see our Response Format section for more information.

## Custom Field Sets

Custom Field Sets contain custom fields and definitions of each fields' subject type. The supported
subjects are currently *Workspace*, *Story*, *User*, and *WorkspaceGroup*.

### Fetching a list of Custom Field Sets

 - [GET /custom_field_sets](https://developer.kantata.com/kantata/specification/custom-field-sets/get-custom-field-sets.md): This endpoint returns structured Custom Field Set 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 custom_field_sets top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Custom Field Set

 - [POST /custom_field_sets](https://developer.kantata.com/kantata/specification/custom-field-sets/create-custom-field-set.md): To create a custom field, the current user must be the Account Administrator.

This endpoint returns structured Custom Field Set 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 custom_field_sets top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Custom Field Set

 - [GET /custom_field_sets/{id}](https://developer.kantata.com/kantata/specification/custom-field-sets/get-custom-field-set.md): This endpoint returns structured Custom Field Set 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 custom_field_sets top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Custom Field Set

 - [PUT /custom_field_sets/{id}](https://developer.kantata.com/kantata/specification/custom-field-sets/update-custom-field-set.md): To update a custom field, the current user must be the Account Administrator.

NOTE: subject_type cannot be changed.


This endpoint returns structured Custom Field Set 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 custom_field_sets top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Custom Field Set

 - [DELETE /custom_field_sets/{id}](https://developer.kantata.com/kantata/specification/custom-field-sets/delete-custom-field-set.md): 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.

## Custom Field Values

If [Custom Fields](/tag/Custom-Fields) represent the fields themselves,
Custom Field Values represent the values in/of those fields. The Custom Field Values object allows
you to view, create, update, and delete these values.

### Fetching a list of Custom Field Values

 - [GET /custom_field_values](https://developer.kantata.com/kantata/specification/custom-field-values/get-custom-field-values.md): Returns all values for the specified set of
Custom Fields.

This endpoint has its own rate limit. See the Knowledge Base for more information.

Custom fields are organized into sets,
by the objects they store additional information for (Estimate, Project, Group, Resource, Task, or User).
Use the subject_type parameter to specify which set of Custom Fields to return values for:
* Estimate
* Story (Task)
* User
* Workspace (Project)
* WorkspaceGroup (Group)
* Resource

Custom field values for _archived_ Projects and Tasks are included in returned values.
Values are sorted from less to more recently updated.

##### Note:
The read_access permission setting on each custom field
determines the minimum permission needed to view a custom field and its value.
* Workspace (Project), Resource, and Story (Task) custom fields are project-specific objects,
so their minimum permissions are set at the project level:
  - project_collaboration (default)
  - time_logging
  - financial
  - project_admin

Most account-level permissions supercede project-level permissions. Therefore, Account Administrators
are able to view all Project, Resource, and Task custom fields and values across the account,
regardless of project participation or read_access settings.
* Estimate, WorkspaceGroup (Group), and User custom fields are account-wide objects, so their minimum permissions are
set at the account level:
  - account_collaboration
  - project_creator
  - project_lead
  - reports_viewer
  - reports_viewer_with_cost
  - account_admin (default)


This endpoint returns structured Custom Field Value 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 custom_field_values top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Custom Field Value

 - [POST /custom_field_values](https://developer.kantata.com/kantata/specification/custom-field-values/create-custom-field-value.md): Creates a new value for the specified custom field. Creating a value can also override existing values,
effectively making this an update request as well.

When creating new single or multi choice values that
override existing values, note that new values are not _added_ to existing values, but instead _replace_ existing values.
Additionally, every new value has a unique, new ID.

This endpoint has its own rate limit. See the Knowledge Base for more information.

Bulk Create or Update

This endpoint supports bulk creating or updating up to 100 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "custom_field_values": [
    {
      "subject_type": "Workspace",
      "subject_id": 123,
      "custom_field_id": 456,
      "value": "Hello world"
    },
    {
      "subject_type": "Workspace",
      "subject_id": 123,
      "custom_field_id": 789,
      "value": "Hello world"
    }
  ]
}



This endpoint returns structured Custom Field Value 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 custom_field_values top-level JSON key.
Please see our Response Format section for more information.

### Delete multiple custom field values

 - [DELETE /custom_field_values](https://developer.kantata.com/kantata/specification/custom-field-values/delete-custom-field-values.md): The IDs of the custom field values 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 custom field values 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 Custom Field Value 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 custom_field_values top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Custom Field Value

 - [GET /custom_field_values/{id}](https://developer.kantata.com/kantata/specification/custom-field-values/get-custom-field-value.md): This endpoint returns structured Custom Field Value 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 custom_field_values top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Custom Field Value

 - [PUT /custom_field_values/{id}](https://developer.kantata.com/kantata/specification/custom-field-values/update-custom-field-value.md): Updates an existing value for the specified custom field. Up to 100 values can be updated at one time.


This endpoint returns structured Custom Field Value 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 custom_field_values top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Custom Field Value

 - [DELETE /custom_field_values/{id}](https://developer.kantata.com/kantata/specification/custom-field-values/delete-custom-field-value.md): 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.

## Custom Fields

The [Custom Fields](https://mavenlink.zendesk.com/hc/en-us/articles/202924760-Custom-Fields-Overview-#arrange) object allows you to
view, create, update, and delete extra fields for additional Estimate, Project, Group, Resource, Task, and User information.
If Custom Fields represent the fields themselves, [Custom Field Values](/tag/Custom-Field-Values)
represent the values in/of those fields.

### Fetching a list of Custom Fields

 - [GET /custom_fields](https://developer.kantata.com/kantata/specification/custom-fields/get-custom-fields.md): Returns all Custom Fields, unless filter parameters have been applied.

This endpoint returns structured Custom Field 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 custom_fields top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Custom Field

 - [POST /custom_fields](https://developer.kantata.com/kantata/specification/custom-fields/create-custom-field.md): This endpoint returns structured Custom Field 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 custom_fields top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Custom Field

 - [PUT /custom_fields/{id}](https://developer.kantata.com/kantata/specification/custom-fields/update-custom-field.md): Updates an existing custom field.

### Parameters that cannot be updated
Note that the unique_constraint and value_type parameters cannot be updated.
They are set during the process of creating a custom field.

### Updating choices
This endpoint also allows you to update the list of choices for a custom field with
single or multiple choices. For important details
regarding how this endpoint affects the list of available choices and how to avoid
creating duplicate choices, see the description of the choice body parameter.


This endpoint returns structured Custom Field 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 custom_fields top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Custom Field

 - [DELETE /custom_fields/{id}](https://developer.kantata.com/kantata/specification/custom-fields/delete-custom-field.md): Deletes a custom field. Custom field values are deleted with their custom fields.

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.

## Data Export Schema

This object allows you to export specific data sets from Kantata OX.  You can view the full schema of available data sets using this endpoint.

To use this endpoint, you need to be an [account administrator](https://mavenlink.zendesk.com/hc/en-us/articles/203041364).

### Get Data Set Schema

 - [GET /exports/available_datasets](https://developer.kantata.com/kantata/specification/data-export-schema/get-exports-available-datasets.md): Returns a list of the available data sets to export—as well as the respective available columns within each data set, which could include custom fields. The response will include unique key values for each individual data set and for each column. You will need to properly pass these keys in when you generate your data export.

## Data Exports

This object allows you to export specific data sets from Kantata OX. You can create or cancel exports. You can also view the full schema of available data sets, view details for all exports, and download exports.

To use these endpoints, you need to be an [account administrator](https://mavenlink.zendesk.com/hc/en-us/articles/203041364).

### Get a list of Data Exports

 - [GET /exports](https://developer.kantata.com/kantata/specification/data-exports/get-exports.md): Returns information on all exports that have been requested, including their status and the data sets and columns that were selected for the exports.

This endpoint returns structured Data Export 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 exports top-level JSON key.
Please see our Response Format section for more information.

### Generate a Data Export

 - [POST /exports](https://developer.kantata.com/kantata/specification/data-exports/create-export.md): Generates an export. Use the data set key and each column key that you want to be included in your export. The values need to be properly formatted JSON, which means you may need to escape special characters. If no column keys are provided, the export will fail and return a 422 response.

Example
The following example creates a new export containing all the non-custom field columns for the User dataset created during October 2023.


curl -i -X POST 'https://api.mavenlink.com/api/v1/exports' -H 'Content-Type: application/json' -d '{
  "export": {
    "export_definition": {
      "8ebff9db413b3115": {
        "columns": [
          "4eb02f5e2601433d",
          "b02d7f145ad95122",
          "2bfa2c20999efe62",
          "96cb337e5007738b",
          "27e2565ae34ed9eb",
          "d5111608cc214c2a",
          "e59d1cb61256a8cf",
          "77bfd7e48d5ff668",
          "23ca4c0d7b289c5f",
          "7172de0607dcb1ef"
        ],
        "filters": {
          "start_date": "2023-10-01",
          "end_date": "2023-10-31"
        }
      }
    }
  }
}'



This endpoint returns structured Data Export 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 exports top-level JSON key.
Please see our Response Format section for more information.

### Get a single Data Export

 - [GET /exports/{id}](https://developer.kantata.com/kantata/specification/data-exports/get-export.md): Returns information on a single export that has been requested, including the status and the data sets and columns that were selected for the export.

This endpoint returns structured Data Export 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 exports top-level JSON key.
Please see our Response Format section for more information.

### Cancel a Data Export

 - [PUT /exports/{id}](https://developer.kantata.com/kantata/specification/data-exports/update-export.md): Cancel an export that is in a Queued status.

This endpoint returns structured Data Export 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 exports top-level JSON key.
Please see our Response Format section for more information.

### Download a Data Export

 - [GET /exports/{id}/download_url](https://developer.kantata.com/kantata/specification/data-exports/download-export.md): Returns a download URL for a successfully generated data export that expires in 60 seconds. With this URL, you can use curl or wget to download the export in a CSV format.

This endpoint returns structured Data Export 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 exports top-level JSON key.
Please see our Response Format section for more information.

## Estimate Scenario Resource Allocations

Estimate Scenario Resource Allocations contain time-related data for scenario resources,
used for calculating estimated cost and scheduled hours.

### Updating an existing Estimate Scenario Resource Allocation

 - [PUT /estimate_scenario_resource_allocations/{id}](https://developer.kantata.com/kantata/specification/estimate-scenario-resource-allocations/update-estimate-scenario-resource-allocation.md): This endpoint returns structured Estimate Scenario Resource Allocation 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 estimate_scenario_resource_allocations top-level JSON key.
Please see our Response Format section for more information.

## Estimate Scenario Resources

Estimate Scenario Resources represent placeholders for unnamed resources in a specific estimate scenario.

### Fetching a list of Estimate Scenario Resources

 - [GET /estimate_scenario_resources](https://developer.kantata.com/kantata/specification/estimate-scenario-resources/get-estimate-scenario-resources.md): This endpoint provides a list of all scenario resources associated with the specified estimate
scenario.


This endpoint returns structured Estimate Scenario Resource 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 estimate_scenario_resources top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Estimate Scenario Resource

 - [POST /estimate_scenario_resources](https://developer.kantata.com/kantata/specification/estimate-scenario-resources/create-estimate-scenario-resource.md): This endpoint returns structured Estimate Scenario Resource 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 estimate_scenario_resources top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Estimate Scenario Resource

 - [GET /estimate_scenario_resources/{id}](https://developer.kantata.com/kantata/specification/estimate-scenario-resources/get-estimate-scenario-resource.md): This endpoint returns structured Estimate Scenario Resource 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 estimate_scenario_resources top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Estimate Scenario Resource

 - [PUT /estimate_scenario_resources/{id}](https://developer.kantata.com/kantata/specification/estimate-scenario-resources/update-estimate-scenario-resource.md): This endpoint returns structured Estimate Scenario Resource 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 estimate_scenario_resources top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Estimate Scenario Resource

 - [DELETE /estimate_scenario_resources/{id}](https://developer.kantata.com/kantata/specification/estimate-scenario-resources/delete-estimate-scenario-resource.md): This will delete an estimate scenario resource and its allocations.

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.

## Estimate Scenarios

An Estimate Scenario is a possible project configuration, consisting of an estimated budget,
rate card, resources, and other related fields for a specified estimate.

### Fetching a list of Estimate Scenarios

 - [GET /estimate_scenarios](https://developer.kantata.com/kantata/specification/estimate-scenarios/get-estimate-scenarios.md): This endpoint returns structured Estimate Scenario 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 estimate_scenarios top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Estimate Scenario

 - [POST /estimate_scenarios](https://developer.kantata.com/kantata/specification/estimate-scenarios/create-estimate-scenario.md): This endpoint returns structured Estimate Scenario 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 estimate_scenarios top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Estimate Scenario

 - [GET /estimate_scenarios/{id}](https://developer.kantata.com/kantata/specification/estimate-scenarios/get-estimate-scenario.md): This endpoint returns structured Estimate Scenario 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 estimate_scenarios top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Estimate Scenario

 - [PUT /estimate_scenarios/{id}](https://developer.kantata.com/kantata/specification/estimate-scenarios/update-estimate-scenario.md): This endpoint returns structured Estimate Scenario 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 estimate_scenarios top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Estimate Scenario

 - [DELETE /estimate_scenarios/{id}](https://developer.kantata.com/kantata/specification/estimate-scenarios/delete-estimate-scenario.md): Deletes an estimate scenario, including all of its resources and their allocations.

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.

## Estimates

An Estimate represents a potential project. Estimates allow you to plan out a project's budget, resources,
and allocations through associated estimate scenarios.

### Fetching a list of Estimates

 - [GET /estimates](https://developer.kantata.com/kantata/specification/estimates/get-estimates.md): This endpoint returns structured Estimate 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 estimates top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Estimate

 - [POST /estimates](https://developer.kantata.com/kantata/specification/estimates/create-estimate.md): This endpoint returns structured Estimate 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 estimates top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Estimate

 - [GET /estimates/{id}](https://developer.kantata.com/kantata/specification/estimates/get-estimate.md): This endpoint returns structured Estimate 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 estimates top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Estimate

 - [PUT /estimates/{id}](https://developer.kantata.com/kantata/specification/estimates/update-estimate.md): This endpoint returns structured Estimate 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 estimates top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Estimate

 - [DELETE /estimates/{id}](https://developer.kantata.com/kantata/specification/estimates/delete-estimate.md): Deletes the estimate and it's associated scenarios, scenario resources,
and scenario resource allocations.


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.

## Expense Budgets

Expense budgets allow you to plan for non-labor expenses.

### Fetching a list of Expense Budgets

 - [GET /expense_budgets](https://developer.kantata.com/kantata/specification/expense-budgets/get-expense-budgets.md): Gets a list of expense budgets.

This endpoint returns structured Expense Budgets 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 expense_budgets top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Expense Budgets

 - [POST /expense_budgets](https://developer.kantata.com/kantata/specification/expense-budgets/create-expense-budget.md): Creates a new expense budget.
The following combinations of fixed_fee, burns_budget, and billable are allowed:
- fixed_fee and burns_budget and billable: Known as a fixed fee budget
- burns_budget and billable: Known as an itemized budget
- burns_budget only: Known as a cost-only budget
- billable only: Known as a pass-through budget
- fixed_fee and billable: Known as a pass-through fixed fee budget


This endpoint returns structured Expense Budgets 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 expense_budgets top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Expense Budgets

 - [GET /expense_budgets/{id}](https://developer.kantata.com/kantata/specification/expense-budgets/get-expense-budget.md): Gets a single expense budget.

This endpoint returns structured Expense Budgets 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 expense_budgets top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Expense Budgets

 - [PUT /expense_budgets/{id}](https://developer.kantata.com/kantata/specification/expense-budgets/update-expense-budget.md): Updates an expense budget.

This endpoint returns structured Expense Budgets 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 expense_budgets top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Expense Budgets

 - [DELETE /expense_budgets/{id}](https://developer.kantata.com/kantata/specification/expense-budgets/delete-expense-budget.md): Deletes an expense budget. An expense budget cannot be deleted if there are expenses logged to it.

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.

## Attachments

An Attachment is a file asset that is attached to another Kantata OX object.  Depending on the type of object,
the file is used or displayed in different ways.  The objects that Attachments can be attached to are:
Post and Expense.

To create an Expense or Post with an Attachment, use the resulting attachment_id from the Attachment creation
request in the parameters of the Expense or Post creation request.

### Creating a new Attachment

 - [POST /attachments](https://developer.kantata.com/kantata/specification/attachments/create-attachment.md): There are two different ways to upload file attachments.  Direct CDN upload, or Kantata OX server upload.

## Direct CDN Upload

Uploading directly to the CDN is a three step process but allows for faster uploading, significantly
larger attachments, and more accurate upload progress information.

Retrieving upload credentials has two required fields, direct and attachment.  The direct field must
be set to true.  The attachment field must include two attributes:

 - type (required) must be post_attachment or receipt.
 - filename (required) is the filename of the file to be uploaded.

The file name must not contain spaces or special characters other than an underscore ("_") or a hyphen ("-"),
otherwise the file upload will fail.

After successfully creating an attachment, an upload url and credentials will be returned in JSON format
with an HTTP 200 status code.


curl --form "direct=true" --form "attachment[filename]=attachment.doc"
--form "attachment[type]=post_attachment" "https://api.mavenlink.com/api/v1/attachments.json"


The response JSON will then contain the information to upload the file:


{
   "id": 2,
   "action": "[upload url]",
   "fields":{
      "utf8": "✓",
      "key": " ... ",
      "Content-Disposition": "attachment; filename="attachment.doc"; filename*=UTF-8''attachment.doc",
      "success_action_status": 201,
      "AWSAccessKeyId": " ... ",
      "acl": "private",
      "policy": " ... ",
      "signature": " ... "
   }
}


A second POST request can then be made to the provided action with the field values
returned in the JSON response, in addition to the file data. The AWSAccessKeyId field value
is only active for 5 seconds, so these consecutive calls are meant to be made in quick succession via a script.

Other than $file, variables in the request that start with $ are the values represented by the " ... " blanks in the JSON response.


curl -X POST "[upload url]" -H 'cache-control: no-cache' --form 'AWSAccessKeyId='$awsKey --form 'Content-Disposition="attachment; filename="$file"; filename*=UTF-8''''''$file"' --form 'x-amz-server-side-encryption=AES256' --form 'key='$key --form 'policy='$policy --form 'signature='$sig --form 'acl=private' --form 'success_action_status=201' --form 'utf8=✓' --form 'file=@'$file


Finally, once the upload has completed successfully, a 'sync' request (specified below) is necessary to
mark the upload as complete.

Below is a simplified example using ruby to achieve the same thing as with the curl commands above:

ruby
#!/usr/bin/env ruby

require 'net/https'
require "uri"
require 'json'

TOKEN="Bearer "
ATTACHMENTS_ENDPOINT="https://api.mavenlink.com/api/v1/attachments.json"
BOUNDARY = "AaB03x" # Make sure it is not present in the file you're uploading.

file = ARGV[0]
filename = File.basename(file)

uri = URI.parse(ATTACHMENTS_ENDPOINT)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri)
request['Authorization'] = TOKEN
request.set_form_data(first_request_params)
response = http.request(request)
first_response = JSON.parse(response.body)

# for the second request we manually build the request body
post_body = []

second_request_params = first_response["fields"].merge({ "file" => File.open(file) })
second_request_params.each do |k,v|
  post_body << "--#{BOUNDARY}\r\n"
  if v.is_a?(IO)
    post_body << "Content-Disposition: form-data; name="#{k}"; filename="#{filename}"\r\n"
    post_body << "\r\n"
    post_body << File.read(file)
    post_body << "\r\n"
  else
    post_body << "Content-Disposition: form-data; name="#{k}"\r\n\r\n"
    post_body << v.to_s + "\r\n"
  end
end

post_body << "--#{BOUNDARY}--\r\n"

uri = URI.parse(first_response["action"])
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri)
request.body = post_body.join
request["Content-Type"] = "multipart/form-data, boundary=#{BOUNDARY}"
response = http.request(request)

exit(response.code == second_request_params["success_action_status"].to_s)


### Syncing a created Attachment
Syncing marks an upload as complete, and verifies its existence on the CDN.

A sync request can be made as follows:


curl -X PUT "https://api.mavenlink.com/api/v1/attachments/2/sync.json"


## Kantata OX Server Upload

For small attachments (< 10MB), you may upload to our servers and skip the 3-step direct CDN upload process.
Doing so requires one field, attachment, with two required attributes:

 - type (required) must be either post_attachment or receipt.
 - data (required) is the multipart/form-data encoded file contents.

After successfully creating an attachment its metadata will be returned in JSON format with an HTTP 200
status code. To upload a file using the curl utility, you would run a command like this one:


curl --form "attachment[data]=@test.rb" --form "attachment[type]=post_attachment" "https://api.mavenlink.com/api/v1/attachments.json"



This endpoint returns structured Attachment 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 attachments top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Attachment

 - [PUT /attachments/{id}](https://developer.kantata.com/kantata/specification/attachments/update-attachment.md): This endpoint returns structured Attachment 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 attachments top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Attachment

 - [DELETE /attachments/{id}](https://developer.kantata.com/kantata/specification/attachments/delete-attachment.md): Destroys an attachment from its subject object.


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.

### Sync a created attachment

 - [PUT /attachments/{id}/sync](https://developer.kantata.com/kantata/specification/attachments/sync-attachment.md): Marks an upload as complete, and verifies its existence on the CDN.


This endpoint returns structured Attachment 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 attachments top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Attachment

 - [POST /attachments](https://developer.kantata.com/kantata/specification/attachments/create-attachment.md): There are two different ways to upload file attachments.  Direct CDN upload, or Kantata OX server upload.

## Direct CDN Upload

Uploading directly to the CDN is a three step process but allows for faster uploading, significantly
larger attachments, and more accurate upload progress information.

Retrieving upload credentials has two required fields, direct and attachment.  The direct field must
be set to true.  The attachment field must include two attributes:

 - type (required) must be post_attachment or receipt.
 - filename (required) is the filename of the file to be uploaded.

The file name must not contain spaces or special characters other than an underscore ("_") or a hyphen ("-"),
otherwise the file upload will fail.

After successfully creating an attachment, an upload url and credentials will be returned in JSON format
with an HTTP 200 status code.


curl --form "direct=true" --form "attachment[filename]=attachment.doc"
--form "attachment[type]=post_attachment" "https://api.mavenlink.com/api/v1/attachments.json"


The response JSON will then contain the information to upload the file:


{
   "id": 2,
   "action": "[upload url]",
   "fields":{
      "utf8": "✓",
      "key": " ... ",
      "Content-Disposition": "attachment; filename="attachment.doc"; filename*=UTF-8''attachment.doc",
      "success_action_status": 201,
      "AWSAccessKeyId": " ... ",
      "acl": "private",
      "policy": " ... ",
      "signature": " ... "
   }
}


A second POST request can then be made to the provided action with the field values
returned in the JSON response, in addition to the file data. The AWSAccessKeyId field value
is only active for 5 seconds, so these consecutive calls are meant to be made in quick succession via a script.

Other than $file, variables in the request that start with $ are the values represented by the " ... " blanks in the JSON response.


curl -X POST "[upload url]" -H 'cache-control: no-cache' --form 'AWSAccessKeyId='$awsKey --form 'Content-Disposition="attachment; filename="$file"; filename*=UTF-8''''''$file"' --form 'x-amz-server-side-encryption=AES256' --form 'key='$key --form 'policy='$policy --form 'signature='$sig --form 'acl=private' --form 'success_action_status=201' --form 'utf8=✓' --form 'file=@'$file


Finally, once the upload has completed successfully, a 'sync' request (specified below) is necessary to
mark the upload as complete.

Below is a simplified example using ruby to achieve the same thing as with the curl commands above:

ruby
#!/usr/bin/env ruby

require 'net/https'
require "uri"
require 'json'

TOKEN="Bearer "
ATTACHMENTS_ENDPOINT="https://api.mavenlink.com/api/v1/attachments.json"
BOUNDARY = "AaB03x" # Make sure it is not present in the file you're uploading.

file = ARGV[0]
filename = File.basename(file)

uri = URI.parse(ATTACHMENTS_ENDPOINT)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri)
request['Authorization'] = TOKEN
request.set_form_data(first_request_params)
response = http.request(request)
first_response = JSON.parse(response.body)

# for the second request we manually build the request body
post_body = []

second_request_params = first_response["fields"].merge({ "file" => File.open(file) })
second_request_params.each do |k,v|
  post_body << "--#{BOUNDARY}\r\n"
  if v.is_a?(IO)
    post_body << "Content-Disposition: form-data; name="#{k}"; filename="#{filename}"\r\n"
    post_body << "\r\n"
    post_body << File.read(file)
    post_body << "\r\n"
  else
    post_body << "Content-Disposition: form-data; name="#{k}"\r\n\r\n"
    post_body << v.to_s + "\r\n"
  end
end

post_body << "--#{BOUNDARY}--\r\n"

uri = URI.parse(first_response["action"])
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri)
request.body = post_body.join
request["Content-Type"] = "multipart/form-data, boundary=#{BOUNDARY}"
response = http.request(request)

exit(response.code == second_request_params["success_action_status"].to_s)


### Syncing a created Attachment
Syncing marks an upload as complete, and verifies its existence on the CDN.

A sync request can be made as follows:


curl -X PUT "https://api.mavenlink.com/api/v1/attachments/2/sync.json"


## Kantata OX Server Upload

For small attachments (< 10MB), you may upload to our servers and skip the 3-step direct CDN upload process.
Doing so requires one field, attachment, with two required attributes:

 - type (required) must be either post_attachment or receipt.
 - data (required) is the multipart/form-data encoded file contents.

After successfully creating an attachment its metadata will be returned in JSON format with an HTTP 200
status code. To upload a file using the curl utility, you would run a command like this one:


curl --form "attachment[data]=@test.rb" --form "attachment[type]=post_attachment" "https://api.mavenlink.com/api/v1/attachments.json"



This endpoint returns structured Attachment 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 attachments top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Attachment

 - [PUT /attachments/{id}](https://developer.kantata.com/kantata/specification/attachments/update-attachment.md): This endpoint returns structured Attachment 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 attachments top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Attachment

 - [DELETE /attachments/{id}](https://developer.kantata.com/kantata/specification/attachments/delete-attachment.md): Destroys an attachment from its subject object.


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.

### Sync a created attachment

 - [PUT /attachments/{id}/sync](https://developer.kantata.com/kantata/specification/attachments/sync-attachment.md): Marks an upload as complete, and verifies its existence on the CDN.


This endpoint returns structured Attachment 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 attachments top-level JSON key.
Please see our Response Format section for more information.

## Expense Categories

An Expense Category represents the type of expense that is being reported.
Expense categories have no attributes and consist of just their name
as a string. They can be changed by Account Administrators.

### Fetching a list of Expense Categories

 - [GET /expense_categories](https://developer.kantata.com/kantata/specification/expense-categories/get-expense-categories.md): This endpoint returns structured Expense Category 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 expense_categories top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Expense Category

 - [POST /expense_categories](https://developer.kantata.com/kantata/specification/expense-categories/create-expense-category.md): This endpoint returns structured Expense Category 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 expense_categories top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Expense Category

 - [PUT /expense_categories/{id}](https://developer.kantata.com/kantata/specification/expense-categories/update-expense-category.md): This endpoint returns structured Expense Category 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 expense_categories top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Expense Category

 - [DELETE /expense_categories/{id}](https://developer.kantata.com/kantata/specification/expense-categories/delete-expense-category.md): Deleting an expense category updates the deleted_at attribute to the current time. Deleted
expense categories are not included by default in the index action and can be retrieved by setting
only_active filter as false.


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.

## Expense Report Submissions

Expense report submissions contain a set of expense line items. These expenses must be approved through
an expense report submission before they can be added to an invoice. All submission expenses must be in the
same workspace (project).

### Fetching a list of Expense Report Submissions

 - [GET /expense_report_submissions](https://developer.kantata.com/kantata/specification/expense-report-submissions/get-expense-report-submissions.md): Returns expense report submissions for the logged in user by default. When all_on_account filter is set
to true, the endpoint returns all expense report submissions on the account visible to the user.


This endpoint returns structured Expense Report Submission 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 expense_report_submissions top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Expense Report Submission

 - [POST /expense_report_submissions](https://developer.kantata.com/kantata/specification/expense-report-submissions/create-expense-report-submission.md): This endpoint returns structured Expense Report Submission 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 expense_report_submissions top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Expense Report Submission

 - [GET /expense_report_submissions/{id}](https://developer.kantata.com/kantata/specification/expense-report-submissions/get-expense-report-submission.md): This endpoint returns structured Expense Report Submission 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 expense_report_submissions top-level JSON key.
Please see our Response Format section for more information.

### Approve an Expense Report Submission

 - [PUT /expense_report_submissions/{id}/approve](https://developer.kantata.com/kantata/specification/expense-report-submissions/approve-expense-report-submission.md): You can approve an Expense Report Submission by accessing the approve endpoint

This endpoint returns structured Resolution 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 resolutions top-level JSON key.
Please see our Response Format section for more information.

### Cancel an Expense Report Submission

 - [PUT /expense_report_submissions/{id}/cancel](https://developer.kantata.com/kantata/specification/expense-report-submissions/cancel-expense-report-submission.md): You can cancel an Expense Report Submission by accessing the cancel endpoint

This endpoint returns structured Resolution 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 resolutions top-level JSON key.
Please see our Response Format section for more information.

### Reject an Expense Report Submission

 - [PUT /expense_report_submissions/{id}/reject](https://developer.kantata.com/kantata/specification/expense-report-submissions/reject-expense-report-submission.md): You can reject an Expense Report Submission by accessing the reject endpoint

This endpoint returns structured Resolution 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 resolutions top-level JSON key.
Please see our Response Format section for more information.

## Expenses

Expenses are defined as costs incurred as part of a project, but not related to time. Once created, expenses can
be included in generated invoices.

### Fetching a list of Expenses

 - [GET /expenses](https://developer.kantata.com/kantata/specification/expenses/get-expenses.md): The expenses endpoint provides a list of every expense that the user making the request is allowed to see—
across all projects to which the user belongs.

The response will contain an array of expense objects, sorted by the date attribute in descending order,
available under the expenses key.


This endpoint returns structured Expense 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 expenses top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Expense

 - [POST /expenses](https://developer.kantata.com/kantata/specification/expenses/create-expense.md): Creates an expense.

Bulk Create

This endpoint supports bulk creating up to 100 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "expenses": [
    {
      "workspace_id": 123,
      "date": "2025-01-01",
      "expense_category_id": 456,
      "category": "Travel",
      "amount_in_cents": 20000
    },
    {
      "workspace_id": 123,
      "date": "2025-01-01",
      "expense_category_id": 456,
      "category": "Travel",
      "amount_in_cents": 20000
    }
  ]
}



This endpoint returns structured Expense 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 expenses top-level JSON key.
Please see our Response Format section for more information.

### Delete multiple expenses

 - [DELETE /expenses](https://developer.kantata.com/kantata/specification/expenses/delete-expenses.md): The IDs of the expenses 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 expenses 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 Expense 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 expenses top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Expense

 - [GET /expenses/{id}](https://developer.kantata.com/kantata/specification/expenses/get-expense.md): You can request either GET /api/v1/expenses.json?only=5 or
GET /api/v1/expenses/5.json.  In both cases, default filters will be applied. Unless you
provide the from_archived_workspaces:true filter you won't receive expenses from archived projects,
and will get a 404 status on the "show" route.


This endpoint returns structured Expense 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 expenses top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Expense

 - [PUT /expenses/{id}](https://developer.kantata.com/kantata/specification/expenses/update-expense.md): An expense that has already been created can be updated with an HTTP PUT request. Any required or optional
attribute, with the exception of workspace_id, can be changed in an update.


This endpoint returns structured Expense 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 expenses top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Expense

 - [DELETE /expenses/{id}](https://developer.kantata.com/kantata/specification/expenses/delete-expense.md): 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.

## Vendors

A Vendor is an entity to which an expense can be paid.

### Fetching a list of Vendors

 - [GET /vendors](https://developer.kantata.com/kantata/specification/vendors/get-vendors.md): This endpoint returns structured Vendor 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 vendors top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Vendor

 - [POST /vendors](https://developer.kantata.com/kantata/specification/vendors/create-vendor.md): This endpoint returns structured Vendor 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 vendors top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Vendor

 - [PUT /vendors/{id}](https://developer.kantata.com/kantata/specification/vendors/update-vendor.md): This endpoint returns structured Vendor 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 vendors top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Vendor

 - [DELETE /vendors/{id}](https://developer.kantata.com/kantata/specification/vendors/delete-vendor.md): 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.

## External References

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.

### Fetches all external references on a user's account

 - [GET /external_references](https://developer.kantata.com/kantata/specification/external-references/get-external-references.md): 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.

### Create or update an external reference

 - [POST /external_references/create_or_update](https://developer.kantata.com/kantata/specification/external-references/create-or-update-external-reference.md): 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.

### Deleting an existing External Reference

 - [DELETE /external_references/{id}](https://developer.kantata.com/kantata/specification/external-references/delete-external-reference.md): 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.

## Billing Milestones

Billing milestones allow you to set up billable items in a project that are separate from the Task Tracker work and have invoicing rules.
A set of billing milestones in a project is known as the [Billing Schedule](https://knowledge.kantata.com/hc/en-us/articles/35123275585947).

### Fetching a list of Billing Milestones

 - [GET /billing_milestones](https://developer.kantata.com/kantata/specification/billing-milestones/get-billing-milestones.md): Gets a list of billing milestones.


This endpoint returns structured Billing Milestones 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 billing_milestones top-level JSON key.
Please see our Response Format section for more information.

### Creating one or many Billing Milestones

 - [POST /billing_milestones](https://developer.kantata.com/kantata/specification/billing-milestones/create-billing-milestone.md): Add a billing milestone to your Billing Schedule. Up to 100 billing milestones can be created in one request.

This endpoint returns structured Billing Milestones 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 billing_milestones top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Billing Milestone

 - [GET /billing_milestones/{id}](https://developer.kantata.com/kantata/specification/billing-milestones/get-billing-milestone.md): Gets a single billing milestone.


This endpoint returns structured Billing Milestones 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 billing_milestones top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Billing Milestone

 - [PUT /billing_milestones/{id}](https://developer.kantata.com/kantata/specification/billing-milestones/update-billing-milestone.md): Edit information for a billing milestone in your Billing Schedule. You can only edit billing milestones that have not been invoiced.

This endpoint returns structured Billing Milestones 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 billing_milestones top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Billing Milestones

 - [DELETE /billing_milestones/{id}](https://developer.kantata.com/kantata/specification/billing-milestones/delete-billing-milestone.md): Delete a billing milestone in your Billing Schedule. You can only delete billing milestones that have not been invoiced.


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.

## Exchange Tables

This object allows you to view or edit foreign currency exchange rates, depending on your [Foreign Exchange Access Group Set](https://mavenlink.zendesk.com/hc/en-us/articles/360047485453)
          permissions. If you are not a member of an Access Group with Foreign Exchange (FX) permissions, an account administrator will need to add you to one.
          If you are an account admin that needs FX permissions, you can add yourself to an Access Group with the FX permissions you require.

### Fetching a list of Exchange Tables

 - [GET /foreign_exchange/exchange_tables](https://developer.kantata.com/kantata/specification/exchange-tables/get-exchange-tables.md): Returns a list of exchange tables associated with your account, and their default settings details.

### Creating a new Exchange Table

 - [POST /foreign_exchange/exchange_tables](https://developer.kantata.com/kantata/specification/exchange-tables/create-exchange-table.md): Creates a new exchange table.

### Fetching a single Exchange Table

 - [GET /foreign_exchange/exchange_tables/{id}](https://developer.kantata.com/kantata/specification/exchange-tables/get-exchange-table.md): Returns default settings details for a specified exchange table.

### Updating an existing Exchange Table

 - [PUT /foreign_exchange/exchange_tables/{id}](https://developer.kantata.com/kantata/specification/exchange-tables/update-exchange-table.md): Updates the name and/or default settings for a specified exchange table.

### Import Exchange Rates

 - [POST /foreign_exchange/exchange_tables/{id}/rates](https://developer.kantata.com/kantata/specification/exchange-tables/import-exchange-tables.md): Add or update exchange rates for a specified exchange table by importing rates as a .csv file, or in a JSON array of hashes.

### Fetching a list of Exchange Rates

 - [GET /foreign_exchange/exchange_tables/{id}/rates](https://developer.kantata.com/kantata/specification/exchange-tables/get-exchange-rates.md): Returns all current exchange rates for a specified exchange table, unless filter parameters have been applied..

## Insights Access Group Memberships

[Insights Access Groups](https://mavenlink.zendesk.com/hc/en-us/articles/115002115073) allow you to manage classic Insights access for users. An Insights Access
  Group Membership represents the connection of a user to an Insights Access Group.

  > **Note**: To manage access to dynamic Insights, use [Access Group Memberships](/tag/Access-Group-Memberships) instead.

### Fetching a list of Insights Access Group Memberships

 - [GET /insights_access_group_memberships](https://developer.kantata.com/kantata/specification/insights-access-group-memberships/get-insights-access-group-memberships.md): This endpoint returns structured Insights Access Group Membership 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 insights_access_group_memberships top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Insights Access Group Membership

 - [POST /insights_access_group_memberships](https://developer.kantata.com/kantata/specification/insights-access-group-memberships/create-insights-access-group-membership.md): Adds a user to an Insights Access Group. Only Account Administrators can add users to Insights Access Groups.


This endpoint returns structured Insights Access Group Membership 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 insights_access_group_memberships top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Insights Access Group Membership

 - [GET /insights_access_group_memberships/{id}](https://developer.kantata.com/kantata/specification/insights-access-group-memberships/get-insights-access-group-membership.md): This endpoint returns structured Insights Access Group Membership 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 insights_access_group_memberships top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Insights Access Group Membership

 - [PUT /insights_access_group_memberships/{id}](https://developer.kantata.com/kantata/specification/insights-access-group-memberships/update-insights-access-group-membership.md): Only Account Administrators can update Insights Access Group Memberships.

Note: To move a user from one Insights Access Group to another, delete the existing Access Group
Membership, then create a new one.


This endpoint returns structured Insights Access Group Membership 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 insights_access_group_memberships top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Insights Access Group Membership

 - [DELETE /insights_access_group_memberships/{id}](https://developer.kantata.com/kantata/specification/insights-access-group-memberships/delete-insights-access-group-membership.md): Removes a user from an Insights Access Group. Only Account Administrators can
delete Insights Access Group Memberships.


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.

## Insights Dynamic Dashboards

Built with an easy-to-use, modern, and intuitive dashboard editor, Insights dynamic dashboards are based on
the same powerful data engine as classic dashboards and help you make data-driven decisions for projects,
staffing, and more. Use this API to get information about dynamic dashboards on your account.

### Get Insights Dynamic Dashboards

 - [GET /account_insights_mappings/dynamic](https://developer.kantata.com/kantata/specification/insights-dynamic-dashboards/list-insights-mapping-dashboards.md): Returns a list of Dynamic Account Insights Mappings (i.e. Insights dynamic dashboards) that are visible to the authenticated user.

This endpoint returns structured Account Insights Mapping 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 account_insights_mappings top-level JSON key.
Please see our Response Format section for more information.

## Insights Report Exports

This object allows you to manage scheduled exports of classic Insights reports from Kantata OX. An export of a classic Insights report that is scheduled to recur is called a scheduled job. You can create, update, and delete scheduled jobs. You can also view details of all the exports for a scheduled job, view the details of each export individually, and download the most recently exported report.

To use these endpoints, you need to be an [account administrator](https://mavenlink.zendesk.com/hc/en-us/articles/203041364).

### Get Scheduled Report Exports

 - [GET /scheduled_jobs/insights_report_exports](https://developer.kantata.com/kantata/specification/insights-report-exports/get-scheduled-report-exports.md): Returns a list of scheduled exports of classic Insights reports.

### Create a new Scheduled Report Export

 - [POST /scheduled_jobs/insights_report_exports](https://developer.kantata.com/kantata/specification/insights-report-exports/create-scheduled-report-export.md): Create a new scheduled job. Set a schedule for a classic Insights report to be exported from Kantata OX to download later. You will need to write a script to download the report.

### Get Scheduled Report Export

 - [GET /scheduled_jobs/insights_report_exports/{id}](https://developer.kantata.com/kantata/specification/insights-report-exports/get-scheduled-report-export.md): Returns details for a single scheduled export of a classic Insights report.

### Update a Scheduled Report Export

 - [PUT /scheduled_jobs/insights_report_exports/{id}](https://developer.kantata.com/kantata/specification/insights-report-exports/update-scheduled-report-export.md): Make changes to an existing scheduled job.

### Delete an existing Scheduled Report Export

 - [DELETE /scheduled_jobs/insights_report_exports/{id}](https://developer.kantata.com/kantata/specification/insights-report-exports/delete-scheduled-report-export.md): 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.

### Get Latest Export

 - [GET /scheduled_jobs/insights_report_exports/{insights_report_export_id}/results/latest](https://developer.kantata.com/kantata/specification/insights-report-exports/get-latest-scheduled-report-export.md): Returns the most recent classic Insights report that has been successfully and completely exported by a scheduled job. The response contains a URL to download the report, as well as a timestamp for when the data in the report was last updated, so you may determine if the report reflects current data.

In order to keep exported data secure, the URL returned in the response expires in 60 seconds. The URL expiration period is subject to change. If you do not initiate a download of the report before the link expires, you can send a new request to generate a new URL.

Exporting a report can take from seconds to 20 minutes, depending on the report size. Because export time varies, please send requests until the latest data is returned. If there are no previously exported reports yet, the response code and message will indicate this.

Because exported reports can be up to 10 GB, reports are downloaded in a compressed format (.gz) and must be decompressed in order to access the CSV file.

## Insights Reports

View a list of classic Insights reports.

### Get Insights Reports

 - [GET /insights_reports](https://developer.kantata.com/kantata/specification/insights-reports/get-insights-reports.md): Returns a list of classic Insights reports on your Kantata OX account. When a title is provided, reports that match the title are returned. When a title is not provided, all classic Insights reports on your account are returned.

## Client Invoice Defaults

Represents the default configuration for presenting invoices to clients.

### Fetching a list of Client Invoice Defaults

 - [GET /client_invoice_defaults](https://developer.kantata.com/kantata/specification/client-invoice-defaults/get-client-invoice-defaults.md): This endpoint returns structured Client Invoice Defaults 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 client_invoice_defaults top-level JSON key.
Please see our Response Format section for more information.

### Creating Client Invoice Defaults

 - [POST /client_invoice_defaults](https://developer.kantata.com/kantata/specification/client-invoice-defaults/create-client-invoice-defaults.md): This endpoint returns structured Client Invoice Defaults 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 client_invoice_defaults top-level JSON key.
Please see our Response Format section for more information.

### Fetching Client Invoice Defaults by ID

 - [GET /client_invoice_defaults/{id}](https://developer.kantata.com/kantata/specification/client-invoice-defaults/get-client-invoice-defaults-by-id.md): This endpoint returns structured Client Invoice Defaults 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 client_invoice_defaults top-level JSON key.
Please see our Response Format section for more information.

### Updating Client Invoice Defaults by ID

 - [PUT /client_invoice_defaults/{id}](https://developer.kantata.com/kantata/specification/client-invoice-defaults/update-client-invoice-defaults-by-id.md): This endpoint returns structured Client Invoice Defaults 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 client_invoice_defaults top-level JSON key.
Please see our Response Format section for more information.

### Deleting Client Invoice Defaults by ID

 - [DELETE /client_invoice_defaults/{id}](https://developer.kantata.com/kantata/specification/client-invoice-defaults/delete-client-invoice-defaults-by-id.md): 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.

## External Payments

An external payment is a manual record of a payment made outside of Kantata OX.  An external payment can
be applied to an invoice, or just recorded directly to a project.

### Fetching a list of External Payments

 - [GET /external_payments](https://developer.kantata.com/kantata/specification/external-payments/get-external-payments.md): The external payments currently visible to the user that is logged-in.


This endpoint returns structured External Payment 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_payments top-level JSON key.
Please see our Response Format section for more information.

### Creating a new External Payment

 - [POST /external_payments](https://developer.kantata.com/kantata/specification/external-payments/create-external-payment.md): Creates an external payment for the specified project or invoice. If an invoice ID is provided, a
payment is only created for that invoice when it's a single project invoice and in a non-draft pending state.


This endpoint returns structured External Payment 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_payments top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single External Payment

 - [GET /external_payments/{id}](https://developer.kantata.com/kantata/specification/external-payments/get-external-payment.md): This endpoint returns structured External Payment 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_payments top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing External Payment

 - [DELETE /external_payments/{id}](https://developer.kantata.com/kantata/specification/external-payments/delete-external-payment.md): 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.

## Invoices

Users can create Invoices in a Kantata OX project.  An Invoice must have at least one line item (a time entry,
expense, fixed fee item, or additional item).  By default, the recipient of an invoice is the primary client
in the project.  Manual formatting options are available to define the format and information that should be displayed on an
invoice.

Invoices can only be created and viewed by participants with financial permission in a project.

### Fetching a list of Invoices

 - [GET /invoices](https://developer.kantata.com/kantata/specification/invoices/get-invoices.md): This endpoint returns structured Invoice 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 invoices top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Invoice

 - [POST /invoices](https://developer.kantata.com/kantata/specification/invoices/create-invoice.md): This endpoint returns structured Invoice 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 invoices top-level JSON key.
Please see our Response Format section for more information.

### Retrieve the next available invoice number.

 - [GET /invoices/next_invoice_number](https://developer.kantata.com/kantata/specification/invoices/get-next-invoice-number.md)

### Fetching a single Invoice

 - [GET /invoices/{id}](https://developer.kantata.com/kantata/specification/invoices/get-invoice.md): This endpoint returns structured Invoice 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 invoices top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Invoice

 - [PUT /invoices/{id}](https://developer.kantata.com/kantata/specification/invoices/update-invoice.md): This endpoint returns structured Invoice 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 invoices top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Invoice

 - [DELETE /invoices/{id}](https://developer.kantata.com/kantata/specification/invoices/delete-invoice.md): You can delete draft invoices with this endpoint. Active invoices cannot be
deleted. They must be cancelled instead.


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.

### Cancel an existing invoice.

 - [PUT /invoices/{id}/cancel](https://developer.kantata.com/kantata/specification/invoices/cancel-invoice.md): You can cancel active invoices with this endpoint.

This endpoint returns structured Invoice 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 invoices top-level JSON key.
Please see our Response Format section for more information.

## Workspace Invoice Preferences

Workspace Invoice Preferences specify the default values that are applied to new invoices created for the specified
project. It is only used for projects that have financials enabled.

These preferences can only be created and updated by users who can manage invoice preferences
on the project. This can be found by querying `can_manage_invoice_preferences` on Workspace.

### Creating a new Workspace Invoice Preference

 - [POST /workspace_invoice_preferences](https://developer.kantata.com/kantata/specification/workspace-invoice-preferences/create-workspace-invoice-preferences.md): This endpoint returns structured Workspace Invoice Preference 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 workspace_invoice_preferences top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workspace Invoice Preference

 - [GET /workspace_invoice_preferences/{id}](https://developer.kantata.com/kantata/specification/workspace-invoice-preferences/get-workspace-invoice-preferences.md): This endpoint returns structured Workspace Invoice Preference 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 workspace_invoice_preferences top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Workspace Invoice Preference

 - [PUT /workspace_invoice_preferences/{id}](https://developer.kantata.com/kantata/specification/workspace-invoice-preferences/update-workspace-invoice-preferences.md): This endpoint returns structured Workspace Invoice Preference 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 workspace_invoice_preferences top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Workspace Invoice Preference

 - [POST /workspace_invoice_preferences](https://developer.kantata.com/kantata/specification/workspace-invoice-preferences/create-workspace-invoice-preferences.md): This endpoint returns structured Workspace Invoice Preference 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 workspace_invoice_preferences top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workspace Invoice Preference

 - [GET /workspace_invoice_preferences/{id}](https://developer.kantata.com/kantata/specification/workspace-invoice-preferences/get-workspace-invoice-preferences.md): This endpoint returns structured Workspace Invoice Preference 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 workspace_invoice_preferences top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Workspace Invoice Preference

 - [PUT /workspace_invoice_preferences/{id}](https://developer.kantata.com/kantata/specification/workspace-invoice-preferences/update-workspace-invoice-preferences.md): This endpoint returns structured Workspace Invoice Preference 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 workspace_invoice_preferences top-level JSON key.
Please see our Response Format section for more information.

## Posts

A Post represents a message written by participants in a project that appears in the project. Replies are only
included if they are directly related to a post. Replies to events, such as Change Orders or Story Created
Events, are not included.

### Fetching a list of Posts

 - [GET /posts](https://developer.kantata.com/kantata/specification/posts/get-posts.md): This endpoint returns structured Post 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 posts top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Post

 - [POST /posts](https://developer.kantata.com/kantata/specification/posts/create-post.md): Posts to the Activity Feed of a workspace (project).

Bulk Create

This endpoint supports bulk creating up to 100 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "posts": [
    {
      "workspace_id": 123,
      "message": "Post"
    },
    {
      "workspace_id": 456,
      "message": "Post"
    }
  ]
}



This endpoint returns structured Post 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 posts top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Post

 - [GET /posts/{id}](https://developer.kantata.com/kantata/specification/posts/get-post.md): By default, you won't receive Posts from archived workspaces (and will receive a 404 status
on the "show" route) unless you provide the from_archived_workspaces:true filter.


This endpoint returns structured Post 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 posts top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Post

 - [PUT /posts/{id}](https://developer.kantata.com/kantata/specification/posts/update-post.md): This endpoint returns structured Post 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 posts top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Post

 - [DELETE /posts/{id}](https://developer.kantata.com/kantata/specification/posts/delete-post.md): 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.

## User File Associations

User File Associations in Kantata OX act as a join object between Users, Workspaces, and
Attachments / Google Documents.

### Fetching a list of User File Associations

 - [GET /user_file_associations](https://developer.kantata.com/kantata/specification/user-file-associations/get-user-file-associations.md): This endpoint returns structured User File Association 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 user_file_associations top-level JSON key.
Please see our Response Format section for more information.

## Project Snapshots

Project snapshots capture the state of a project at a specific point in time. Snapshots are useful for gaining a historical perspective on a project, and for comparing the current state of a project to a previous state.

Project financials, tasks, and resources are all captured in a snapshot, as well as project and task custom field values.

To use these endpoints, you must have the Edit Financials permission or higher in a project.

### Fetching a list of Project Snapshots

 - [GET /project_snapshots](https://developer.kantata.com/kantata/specification/project-snapshots/get-project-snapshots.md): Gets a list of Project Snapshots. You can only see snapshots for projects where you have the Edit Financials project permission or higher.


This endpoint returns structured Project Snapshots 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 project_snapshots top-level JSON key.
Please see our Response Format section for more information.

### Creating a Project Snapshot

 - [POST /project_snapshots](https://developer.kantata.com/kantata/specification/project-snapshots/create-project-snapshot.md): Creates a Project Snapshot. You must have the Edit Financials project permission or higher to create a project snapshot. 

This endpoint has its own rate limit. See the Knowledge Base for more information.


This endpoint returns structured Project Snapshots 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 project_snapshots top-level JSON key.
Please see our Response Format section for more information.

### Updating a Project Snapshot

 - [PUT /project_snapshots/{id}](https://developer.kantata.com/kantata/specification/project-snapshots/update-project-snapshot.md): Updates the metadata of a Project Snapshot.


This endpoint returns structured Project Snapshots 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 project_snapshots top-level JSON key.
Please see our Response Format section for more information.

## Project Template Additional Tabs

Project Template Additional Tabs are additional tabs configured in a project template that are
added to a project when the template is applied.

### Fetching a list of Project Template Additional Tabs

 - [GET /project_template_additional_tabs](https://developer.kantata.com/kantata/specification/project-template-additional-tabs/get-project-template-additional-tabs.md): This endpoint returns structured Project Template Additional Tab 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 project_template_additional_tabs top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Project Template Additional Tab

 - [POST /project_template_additional_tabs](https://developer.kantata.com/kantata/specification/project-template-additional-tabs/create-project-template-additional-tab.md): Adds an additional tab to a project template.


This endpoint returns structured Project Template Additional Tab 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 project_template_additional_tabs top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Project Template Additional Tab

 - [DELETE /project_template_additional_tabs/{id}](https://developer.kantata.com/kantata/specification/project-template-additional-tabs/delete-project-template-additional-tab.md): 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.

## Project Template Assignments

Project Template Assignments(Project Template Resources) represent placeholders for task assignees
in project templates. These assignments are mapped to project template stories and are assigned to
real users when the template is applied.

### Fetching a list of Project Template Assignments

 - [GET /project_template_assignments](https://developer.kantata.com/kantata/specification/project-template-assignments/get-project-template-assignments.md): This endpoint returns structured Project Template Assignment 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 project_template_assignments top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Project Template Assignment

 - [POST /project_template_assignments](https://developer.kantata.com/kantata/specification/project-template-assignments/create-project-template-assignment.md): This endpoint returns structured Project Template Assignment 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 project_template_assignments top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Project Template Assignment

 - [GET /project_template_assignments/{id}](https://developer.kantata.com/kantata/specification/project-template-assignments/get-project-template-assignment.md): This endpoint returns structured Project Template Assignment 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 project_template_assignments top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Project Template Assignment

 - [PUT /project_template_assignments/{id}](https://developer.kantata.com/kantata/specification/project-template-assignments/update-project-template-assignment.md): This endpoint returns structured Project Template Assignment 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 project_template_assignments top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Project Template Assignment

 - [DELETE /project_template_assignments/{id}](https://developer.kantata.com/kantata/specification/project-template-assignments/delete-project-template-assignment.md): 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.

## Project Template Expense Budgets

Project Template Expense Budgets are expense budgets configured in a
project template that are added to a project when the template is applied.

### Fetching a list of Project Template Expense Budgets

 - [GET /project_template_expense_budgets](https://developer.kantata.com/kantata/specification/project-template-expense-budgets/get-project-template-expense-budgets.md): This endpoint returns structured Project Template Expense Budget 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 project_template_expense_budgets top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Project Template Expense Budget

 - [POST /project_template_expense_budgets](https://developer.kantata.com/kantata/specification/project-template-expense-budgets/create-project-template-expense-budget.md): Adds an expense budget to a project template.

Bulk Create

This endpoint supports bulk creating up to 100 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "project_template_expense_budgets": [
    {
      "project_template_id": 123,
      "title": "Expense",
      "billable": true,
      "burns_budget": true,
      "fixed_fee": false,
      "cost_per_unit_in_subunits": 10000,
      "markup_type": "percentage",
      "markup_percentage": 10,
      "quantity": 1
    },
    {
      "project_template_id": 123,
      "title": "Expense 2",
      "billable": true,
      "burns_budget": true,
      "fixed_fee": false,
      "cost_per_unit_in_subunits": 20000,
      "markup_type": "percentage",
      "markup_percentage": 10,
      "quantity": 1
    }
  ]
}              



This endpoint returns structured Project Template Expense Budget 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 project_template_expense_budgets top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Project Template Expense Budget

 - [GET /project_template_expense_budgets/{id}](https://developer.kantata.com/kantata/specification/project-template-expense-budgets/get-project-template-expense-budget.md): This endpoint returns structured Project Template Expense Budget 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 project_template_expense_budgets top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Project Template Expense Budget

 - [PUT /project_template_expense_budgets/{id}](https://developer.kantata.com/kantata/specification/project-template-expense-budgets/update-project-template-expense-budget.md): This endpoint returns structured Project Template Expense Budget 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 project_template_expense_budgets top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Project Template Expense Budget

 - [DELETE /project_template_expense_budgets/{id}](https://developer.kantata.com/kantata/specification/project-template-expense-budgets/delete-project-template-expense-budget.md): Removes an expense budget from a project template.


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.

## Project Templates

Project Templates are sets of tasks and attributes that can be applied to new or existing projects.
A single template can be used on any number of projects.
A project template's tasks are all stored in an attribute located on the project template object called raw_json.
It is a JSON hash of all the stories that has been turned into a string and is stored on the object.


##### Project Template Stories (Tasks) - raw_json

A project template's tasks are all stored in an attribute located on the project template object called raw_json.
It is a JSON hash of all the stories that has been turned into a string and is stored on the object.

Stories within the JSON have the following attributes:

  * `title` - The title of the task.
  * `billable` - The title of the project template.
  * `relative_start_date` - An integer that represents the start day of the task relative to the start of the project.
  * `relative_due_date` - An integer that represents the end day of the task relative to the start of the project.
  * `duration` - The number of days the task will take to complete.
  * `temp_id` - The unique reference ID for the task (used for dependencies).
  * `description` - The task description.
  * `budget_estimate_in_cents` - An integer (whole number) that represents the budget estimate, in cents, for the task.
  * `time_estimate_in_minutes` - An integer (whole number) that represents the time estimate, in minutes, for the task.
  * `sub_stories` - An nested array of sub-tasks that have the same structure as tasks.

  * `checklist` - An array of strings, each being a checklist item on the task.
        For example, "checklist":["item one", "item two"].

  * `tag_list` - A string with tags that are comma separated.
        For example, "design, engineering, this has spaces."
  This creates three tags: "design", "engineering", and "this has spaces."

  * `assignments` - An array of objects with key value pairs "assignee_id":id.
        For example, [{"assignee_id":100},{"assignee_id":101}]
  This task would have two resources assigned to it. These are the IDs of two associated project template assignments.
  Project template assignments are associated objects.

  * `dependencies` - An array of objects that represent a task's dependencies.
  A dependency is an object that connects two tasks, and is used in Gantt charts. A dependency object lives
  in the dependencies array on it's source task, not it's target.

Dependencies have the following attributes:

  * `source_id` - The temporary ID of the first task (source task) in the dependency.
  * `target_id` - The temporary ID of the second task (target task) in the dependency.
  * `type` - There are four types of dependencies, numbered zero through three.
      * 0 - From the beginning of the source task to the beginning of the target task.
      * 1 - From the beginning of the source task to the end of the target task.
      * 2 - From the end of the source task to beginning of the target task.
      * 3 - From the end of the source task to end of the target task.
  * `lag` - An integer that represents the number of days delay that occurs between the two tasks in the dependency.


raw_json example:
```
[
  {
    "story_type":"task",
    "billable":true,
    "relative_start_date":1,
    "relative_due_date":2,
    "title":"Task One",
    "temp_id":1,
    "dependencies":[{"source_id":1, "target_id":2, "type":2, "lag":0}],
    "description":"this is a task",
    "assignments":[{"assignee_id":"26"}],
    "tag_list":"difficult,easy",
    "budget_estimate_in_cents":40000,
    "time_estimate_in_minutes":1200,
    "sub_stories": [
      {
        "story_type":"task",
        "billable":true,
        "due_date":nil,
        "start_date":nil,
        "relative_start_date":1,
        "relative_due_date":3,
        "title":"Sub Task One",
        "description":"this is a sub task",
        "assignments":[{"assignee_id":"27"}],
        "budget_estimate_in_cents":20000,
        "time_estimate_in_minutes":300,
        "temp_id":3
      }
    ]
  },
  {
    "story_type":"deliverable",
    "billable":true,
    "endDay":4,
    "relative_start_date":1,
    "relative_due_date":4,
    "title":"Deliverable One",
    "temp_id":2,
    "description":"this is a deliverable",
    "sub_stories":[]
  },
  {
    "story_type":"milestone",
    "billable":true,
    "title":"Milestone One",
    "description":"this is a milestone",
    "weight":100,
    "duration":0,
    "relative_start_date":5,
    "sub_stories":[],
    "checklist":["item one", "item two"],
    "temp_id":4
  }
]
```.

### Fetching a list of Project Templates

 - [GET /project_templates](https://developer.kantata.com/kantata/specification/project-templates/get-project-templates.md): This endpoint returns structured Project Template 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 project_templates top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Project Template

 - [POST /project_templates](https://developer.kantata.com/kantata/specification/project-templates/create-project-template.md): This endpoint returns structured Project Template 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 project_templates top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Project Template

 - [GET /project_templates/{id}](https://developer.kantata.com/kantata/specification/project-templates/get-project-template.md): This endpoint returns structured Project Template 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 project_templates top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Project Template

 - [PUT /project_templates/{id}](https://developer.kantata.com/kantata/specification/project-templates/update-project-template.md): This endpoint returns structured Project Template 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 project_templates top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Project Template

 - [DELETE /project_templates/{id}](https://developer.kantata.com/kantata/specification/project-templates/delete-project-template.md): 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.

## Participations

A participation represents the relationship between a participant and a project, including a participant's permission level,
whether they're a provider or client, and many other properties. See the 200 status code
response sample for an example of participation properties you can access.

### Fetching a list of Participations

 - [GET /participations](https://developer.kantata.com/kantata/specification/participations/get-participations.md): The Participations index action only returns participations from projects that are visible to the requester.
See the Projects KB documentation for more information about how visibility restrictions work.


This endpoint returns structured Participation 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 participations top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Participation

 - [POST /participations](https://developer.kantata.com/kantata/specification/participations/create-participation.md): Adds a user to a project (workspace).

Bulk Create

This endpoint supports bulk creating up to 100 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "participations": [
    {
      "workspace_id": 123,
      "role": "maven",
      "user_id": 111
    },
    {
      "workspace_id": 123,
      "role": "maven",
      "user_id": 222
    }
  ]
}



This endpoint returns structured Participation 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 participations top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Participation

 - [GET /participations/{id}](https://developer.kantata.com/kantata/specification/participations/get-participation.md): This endpoint returns structured Participation 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 participations top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Participation

 - [PUT /participations/{id}](https://developer.kantata.com/kantata/specification/participations/update-participation.md): This endpoint returns structured Participation 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 participations top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Participation

 - [DELETE /participations/{id}](https://developer.kantata.com/kantata/specification/participations/delete-participation.md): Removes a participant from a project and deletes their associated project data.


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.

## Project Accounting Records

The [Project Accounting](https://mavenlink.zendesk.com/hc/en-us/articles/4403832107419-Project-Accounting)
Records object allows you to view, create, and delete financial records
related to revenue recognition, forecasting, and earned value.

### Fetching a list of Project Accounting Records

 - [GET /project_accounting_records](https://developer.kantata.com/kantata/specification/project-accounting-records/get-project-accounting-records.md): Returns all project accounting records (Baseline, Earned Value, Earned Value Forecasting,
Forecasting,  and Recognition), unless filter parameters have been applied.


This endpoint returns structured Project Accounting Records 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 project_accounting_records top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Project Accounting Records

 - [POST /project_accounting_records](https://developer.kantata.com/kantata/specification/project-accounting-records/create-project-accounting-record.md): Creates a single or multiple project accounting records.

This endpoint returns structured Project Accounting Records 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 project_accounting_records top-level JSON key.
Please see our Response Format section for more information.

### Soft Deleting a Project Accounting Record

 - [PUT /project_accounting_records/delete](https://developer.kantata.com/kantata/specification/project-accounting-records/soft-delete-project-accounting-record.md): Soft deletes a specified project accounting record. View deleted records by
Fetching a list of Project Accounting Records with the show_deleted filter set to true.


This endpoint returns structured Project Accounting Records 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 project_accounting_records top-level JSON key.
Please see our Response Format section for more information.

### Exporting Project Account Records in a CSV

 - [GET /project_accounting_records/export_to_csv](https://developer.kantata.com/kantata/specification/project-accounting-records/export-project-accounting-record-to-csv.md): Downloads a .csv file of all project accounting records.


This endpoint returns structured Project Accounting Records 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 project_accounting_records top-level JSON key.
Please see our Response Format section for more information.

### Importing Project Account Records in a CSV

 - [POST /project_accounting_records/import_csv](https://developer.kantata.com/kantata/specification/project-accounting-records/import-project-accounting-records.md): Imports up to 5000 project accounting records with a
csv file
with a .txt or .csv extension.

Each row/line is a record, and each record has attributes. Headers
indicate which attributes are being specified for imported records.
Headers can include:

* Project ID (required)
* Story ID
* Role ID
* User ID
* Type (recommended)
* Period Start Date (required)
* Period End Date (required)
* Contract Date
* Currency (required)
* Revenue Method
* Amount
* Amount To Date
* Forecast
* Budget
* Cost
* Cost to Date
* Cost EAC
* Fees
* Labor Type
* Hours
* Hours EAC
* Hours ETC
* Total Estimated Hours
* Total Hours to Date
* Percent Complete
* Status
* Service Type
* Description
* Notes

Only Project ID, Period Start Date, Period End Date,
and Currency are required for a csv import. But when it is not specified,
Type defaults to Recognition. Other valid values for Type are
Baseline, Earned Value, Earned Value Forecasting, and Forecasting.


This endpoint returns structured Project Accounting Records 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 project_accounting_records top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Project Accounting Records

 - [GET /project_accounting_records/{id}](https://developer.kantata.com/kantata/specification/project-accounting-records/get-project-accounting-record.md): Returns a specified project accounting record.


This endpoint returns structured Project Accounting Records 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 project_accounting_records top-level JSON key.
Please see our Response Format section for more information.

## Status Reports

A Status Report represents a snapshot of a Workspace's status across several categories at a moment
in time. Status Reports are usually referred to as Health Reports in the UI.

### Fetching a list of Status Reports

 - [GET /status_reports](https://developer.kantata.com/kantata/specification/status-reports/get-status-reports.md): This endpoint returns structured Status Report 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 status_reports top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Status Report

 - [POST /status_reports](https://developer.kantata.com/kantata/specification/status-reports/create-status-report.md): This endpoint returns structured Status Report 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 status_reports top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Status Report

 - [GET /status_reports/{id}](https://developer.kantata.com/kantata/specification/status-reports/get-status-report.md): This endpoint returns structured Status Report 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 status_reports top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Status Report

 - [PUT /status_reports/{id}](https://developer.kantata.com/kantata/specification/status-reports/update-status-report.md): This endpoint returns structured Status Report 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 status_reports top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Status Report

 - [DELETE /status_reports/{id}](https://developer.kantata.com/kantata/specification/status-reports/delete-status-report.md): 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.

## Workspace Allocations

A workspace allocation represents a resource’s allocation over a specific period of time.
A workspace allocation is always associate with a workspace resource.

### Fetching a list of Workspace Allocations

 - [GET /workspace_allocations](https://developer.kantata.com/kantata/specification/workspace-allocations/get-workspace-allocations.md): This endpoint returns structured Workspace Allocation 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 workspace_allocations top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Workspace Allocation

 - [POST /workspace_allocations](https://developer.kantata.com/kantata/specification/workspace-allocations/create-workspace-allocation.md): Creates a workspace allocation for a resource.

Bulk Create

This endpoint supports bulk creating up to 200 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "workspace_allocations": [
    {
      "resource_id": 123,
      "start_date": "2025-03-03",
      "end_date": "2025-03-07",
      "minutes": 2100
    },
    {
      "resource_id": 123,
      "start_date": "2025-04-07",
      "end_date": "2025-07-11",
      "minutes": 2100
    }
  ]
}



This endpoint returns structured Workspace Allocation 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 workspace_allocations top-level JSON key.
Please see our Response Format section for more information.

### Splitting an Allocation

 - [PUT /workspace_allocations/split](https://developer.kantata.com/kantata/specification/workspace-allocations/split-workspace-allocation-by-date.md): Split an existing allocation into two on the specified date.

This endpoint returns structured Workspace Allocation 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 workspace_allocations top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workspace Allocation

 - [GET /workspace_allocations/{id}](https://developer.kantata.com/kantata/specification/workspace-allocations/get-workspace-allocation.md): This endpoint returns structured Workspace Allocation 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 workspace_allocations top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Workspace Allocation

 - [PUT /workspace_allocations/{id}](https://developer.kantata.com/kantata/specification/workspace-allocations/update-workspace-allocation.md): This endpoint returns structured Workspace Allocation 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 workspace_allocations top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Workspace Allocation

 - [DELETE /workspace_allocations/{id}](https://developer.kantata.com/kantata/specification/workspace-allocations/delete-workspace-allocation.md): 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.

## Workspace Baselines

A Gantt workspace baseline is a snapshot of a workspace at a particular point in time.
The snapshot contains aggregate statistics and certain data about each story (task).

### Fetching a list of Workspace Baselines

 - [GET /workspace_baselines](https://developer.kantata.com/kantata/specification/workspace-baselines/get-workspace-baselines.md): Returns a list of Gantt workspace baselines associated with workspaces (projects) that are visible to the authenticated user.
Visibility restrictions on projects are detailed in the Workspaces API documentation


This endpoint returns structured Workspace Baseline 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 workspace_baselines top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Workspace Baseline

 - [POST /workspace_baselines](https://developer.kantata.com/kantata/specification/workspace-baselines/create-workspace-baseline.md): Creates a Gantt workspace baseline for a specified workspace (project). The baseline will contain aggregate statistics and certain data about each story (task).


This endpoint returns structured Workspace Baseline 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 workspace_baselines top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workspace Baseline

 - [GET /workspace_baselines/{id}](https://developer.kantata.com/kantata/specification/workspace-baselines/get-workspace-baseline.md): Returns a specified Gantt workspace baseline.


This endpoint returns structured Workspace Baseline 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 workspace_baselines top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Workspace Baseline

 - [PUT /workspace_baselines/{id}](https://developer.kantata.com/kantata/specification/workspace-baselines/update-workspace-baseline.md): Updates a specified Gantt workspace baseline.


This endpoint returns structured Workspace Baseline 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 workspace_baselines top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Workspace Baseline

 - [DELETE /workspace_baselines/{id}](https://developer.kantata.com/kantata/specification/workspace-baselines/delete-workspace-baseline.md): 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.

## Workspace Groups

Workspace Groups (also known as groups) allow for the categorization of Kantata OX Workspaces. Workspace Groups are unique to each Kantata OX Account.

### Fetching a list of Workspace Groups

 - [GET /workspace_groups](https://developer.kantata.com/kantata/specification/workspace-groups/get-workspace-groups.md): This endpoint returns structured Workspace Group 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 workspace_groups top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Workspace Group

 - [POST /workspace_groups](https://developer.kantata.com/kantata/specification/workspace-groups/create-workspace-group.md): This endpoint returns structured Workspace Group 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 workspace_groups top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workspace Group

 - [GET /workspace_groups/{id}](https://developer.kantata.com/kantata/specification/workspace-groups/get-workspace-group.md): This endpoint returns structured Workspace Group 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 workspace_groups top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Workspace Group

 - [PUT /workspace_groups/{id}](https://developer.kantata.com/kantata/specification/workspace-groups/update-workspace-group.md): This endpoint returns structured Workspace Group 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 workspace_groups top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Workspace Group

 - [DELETE /workspace_groups/{id}](https://developer.kantata.com/kantata/specification/workspace-groups/delete-workspace-group.md): 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.

## Workspace Resource Skills

Workspace Resource Skills represent skills that have been assigned to a workspace resource.

### Fetching a list of Workspace Resource Skills

 - [GET /workspace_resource_skills](https://developer.kantata.com/kantata/specification/workspace-resource-skills/get-workspace-resource-skills.md): Returns a list of Workspace Resource Skills that represent the skills associated with workspace
resources visible to the logged in user.


This endpoint returns structured Workspace Resource Skill 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 workspace_resource_skills top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Workspace Resource Skill

 - [POST /workspace_resource_skills](https://developer.kantata.com/kantata/specification/workspace-resource-skills/create-workspace-resource-skill.md): This endpoint returns structured Workspace Resource Skill 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 workspace_resource_skills top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workspace Resource Skill

 - [GET /workspace_resource_skills/{id}](https://developer.kantata.com/kantata/specification/workspace-resource-skills/get-workspace-resource-skill.md): This endpoint returns structured Workspace Resource Skill 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 workspace_resource_skills top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Workspace Resource Skill

 - [PUT /workspace_resource_skills/{id}](https://developer.kantata.com/kantata/specification/workspace-resource-skills/update-workspace-resource-skill.md): This endpoint returns structured Workspace Resource Skill 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 workspace_resource_skills top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Workspace Resource Skill

 - [DELETE /workspace_resource_skills/{id}](https://developer.kantata.com/kantata/specification/workspace-resource-skills/delete-workspace-resource-skill.md): 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.

## Workspace Resources

A workspace resource is the object that is tied to assignments and allocations within a Workspace.

Workspace Resources can be:
  - Named Resources: Resources with a user_id.
  - Unnamed Resources: Resources with no user_id.

With workspace resources it is possible for a user to have many resources with different roles
within a single workspace.
Workspace resources can be assigned to tasks via Assignments.

e.g. In an example workspace, 'the Accounting Project', we could have 3 workspace resources:
  1. Alice as an Engineer in the Accounting Project
  2. Alice as an Designer in the Accounting Project
  3. Bob as a Designer in the Accounting Project

With workspace resources, Alice could be assigned to one task as an Engineer and use the
Engineer rate for that task, and another task be assigned as a Designer and thus the designer
rate would be used there.

When a named workspace resource is created, if role_id is not specified, it will default to
the user's primary role within the project (see primary role definition below). When the
workspace resource is created, label with be generated based on the user's primary role.

##### Primary Project Role

A user's primary project role is defined by role_id on the user's Participation for the
workspace if that is set. If role_id is not set on the user's participation, primary project
role is defined by default_role_id on the user's account_membership only if the user's
account_membership.account_id matches the workspace.account_id
(the user belongs to the project's account).

### Fetching a list of Workspace Resources

 - [GET /workspace_resources](https://developer.kantata.com/kantata/specification/workspace-resources/get-workspace-resources.md): This endpoint returns structured Workspace Resource 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 workspace_resources top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Workspace Resource

 - [POST /workspace_resources](https://developer.kantata.com/kantata/specification/workspace-resources/create-workspace-resource.md): Adds a named or unnamed resource to a project (workspace).

Bulk Create

This endpoint supports bulk creating up to 200 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "workspace_resources": [
    {
      "workspace_id": 123,
      "user_id": 111,
      "role_id": 555
    },
    {
      "workspace_id": 123,
      "user_id": 222,
      "role_id": 666
    }
  ]
}



This endpoint returns structured Workspace Resource 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 workspace_resources top-level JSON key.
Please see our Response Format section for more information.

### Creating Allocations from Scheduled Hours for Resources

 - [POST /workspace_resources/allocations_matching_scheduled_hours](https://developer.kantata.com/kantata/specification/workspace-resources/create-workspace-resource-allocations-from-scheduled-hours.md): This will create allocations for workspace resources based on their scheduled hours.
This endpoint is only usable for Account Administrators and users with Users can edit
allocations for unnamed resources or Users can edit allocations for named resources
access in the Edit Allocations section of the Resource Management Access Group Set.


This endpoint returns structured Workspace Resource 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 workspace_resources top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workspace Resource

 - [GET /workspace_resources/{id}](https://developer.kantata.com/kantata/specification/workspace-resources/get-workspace-resource.md): This endpoint returns structured Workspace Resource 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 workspace_resources top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Workspace Resource

 - [PUT /workspace_resources/{id}](https://developer.kantata.com/kantata/specification/workspace-resources/update-workspace-resource.md): This endpoint returns structured Workspace Resource 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 workspace_resources top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Workspace Resource

 - [DELETE /workspace_resources/{id}](https://developer.kantata.com/kantata/specification/workspace-resources/delete-workspace-resource.md): This will delete a workspace resource and their assignments if the resource is deletable.
A workspace resource is not deletable if it is the last resource for a user's primary
role within a workspace.


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.

### Creating Allocations from Scheduled Hours for Resources

 - [POST /workspace_resources/{id}/allocations_matching_scheduled_hours](https://developer.kantata.com/kantata/specification/workspace-resources/create-workspace-resource-allocations-from-scheduled-hours-by-id.md): This will create allocations for workspace resources based on their scheduled hours.
This endpoint is only usable for Account Administrators and users with Users can edit
allocations for unnamed resources or Users can edit allocations for named resources
access in the Edit Allocations section of the Resource Management Access Group Set.


This endpoint returns structured Workspace Resource 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 workspace_resources top-level JSON key.
Please see our Response Format section for more information.

## Workspace Status Changes

Workspace Status Changes represent changes made to the status of a project.

### Fetching a list of Workspace Status Changes

 - [GET /workspace_status_changes](https://developer.kantata.com/kantata/specification/workspace-status-changes/get-workspace-status-changes.md): Returns all project status changes that are visible to the user for the passed project ID.


This endpoint returns structured Workspace Status 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 workspace_status_changes top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Workspace Status Change

 - [POST /workspace_status_changes](https://developer.kantata.com/kantata/specification/workspace-status-changes/create-workspace-status-change.md): This endpoint returns structured Workspace Status 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 workspace_status_changes top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workspace Status Change

 - [GET /workspace_status_changes/{id}](https://developer.kantata.com/kantata/specification/workspace-status-changes/get-workspace-status-change.md): Return the status change for the passed project status change ID.


This endpoint returns structured Workspace Status 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 workspace_status_changes top-level JSON key.
Please see our Response Format section for more information.

## Workspace Task Status Sets

Workspace Task Status Sets represent the connection between workspaces (projects) and task (story) status sets, which enable the use of custom task statuses.

### Update task status set on multiple workspaces

 - [PUT /workspace_task_status_sets/bulk_update](https://developer.kantata.com/kantata/specification/workspace-task-status-sets/update-workspace-task-status-set.md): Updates the task status set for multiple projects. You must have permission to select task status sets to use the endpoint. If any specified workspaces cannot be updated, the entire request will fail and an error message will be returned that specifies which ones could be updated and why.


This endpoint returns structured Workspace Task Status Sets 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 workspace_task_status_sets top-level JSON key.
Please see our Response Format section for more information.

## Workspaces

Workspaces (also called projects) represent the space in which Kantata OX users plan, communicate, and collaborate.

### Fetching a list of Workspaces

 - [GET /workspaces](https://developer.kantata.com/kantata/specification/workspaces/get-workspaces.md): Gets a list of projects.

This endpoint has its own rate limit. See the Knowledge Base for more information.

#### Archived Projects

By default, archived projects are not returned in the response. Use the include_archived=true filter
to retrieve archived projects.


This endpoint returns structured Workspace 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 workspaces top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Workspace

 - [POST /workspaces](https://developer.kantata.com/kantata/specification/workspaces/create-workspace.md): Creates a new workspace (project).

This endpoint has its own rate limit. See the Knowledge Base for more information.

Bulk Create

This endpoint supports bulk creating up to 100 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "workspaces": [
    {
      "title": "Acme Inc - Website Redesign"
    },
    {
      "title": "Acme Inc - Marketing Plan"
    }
  ]
}



This endpoint returns structured Workspace 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 workspaces top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workspace

 - [GET /workspaces/{id}](https://developer.kantata.com/kantata/specification/workspaces/get-workspace.md): Gets a project by ID.

By default, you will receive a 404 status if you try to retrieve an archived project. Use the include_archived:true
filter to retrieve an archived project.

Users with Project Lead (or lower) account permissions can retrieve projects they are not participating in if they have
the All projects or All projects accessible to their organization (if Organizations are enabled) permission in the
View Resource Center section of the Resource Management Access Group set.


This endpoint returns structured Workspace 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 workspaces top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Workspace

 - [PUT /workspaces/{id}](https://developer.kantata.com/kantata/specification/workspaces/update-workspace.md): This endpoint returns structured Workspace 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 workspaces top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Workspace

 - [DELETE /workspaces/{id}](https://developer.kantata.com/kantata/specification/workspaces/delete-workspace.md): 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.

### Apply a Project Template to an existing Workspace

 - [PUT /workspaces/{id}/apply_template](https://developer.kantata.com/kantata/specification/workspaces/apply-project-template-to-workspace.md): Applies a template to an existing project.


This endpoint returns structured Workspace 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 workspaces top-level JSON key.
Please see our Response Format section for more information.

### Creating a Workspace Invitation

 - [POST /workspaces/{id}/invite](https://developer.kantata.com/kantata/specification/workspaces/create-workspace-invitation.md): Sends an invitation to a project.

To add participants to a project, they must first be invited. Users that already exist in Kantata OX will
automatically accept the invitation and be added to the project. If your account allows anyone to be invited
to projects, users that don't already exist will have the option to create an account. Otherwise, the invited
user must be a member of your account.

This endpoint has its own rate limit. See the Knowledge Base for more information.


This endpoint returns structured Workspace Invitation 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 workspace_invitations top-level JSON key.
Please see our Response Format section for more information.

### Fetch permissions in a Workspace

 - [GET /workspaces/{id}/permissions](https://developer.kantata.com/kantata/specification/workspaces/get-my-permissions-in-workspace.md): Gets less common project permissions for the authenticated user.

This endpoint returns structured Workspace 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 workspaces top-level JSON key.
Please see our Response Format section for more information.

### Update expense approval setting

 - [PUT /workspaces/{id}/toggle_expense_approvals](https://developer.kantata.com/kantata/specification/workspaces/update-workspace-expense-approval-setting.md): Turns the expense approval setting for a project on or off.

If a backfill_date is specified, expenses until the specified date will be approved and the results of the
approval will be emailed to the authenticated user. Once the expenses have been approved, they cannot be unapproved.


This endpoint returns structured Workspace 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 workspaces top-level JSON key.
Please see our Response Format section for more information.

### Update time approval setting

 - [PUT /workspaces/{id}/toggle_time_approvals](https://developer.kantata.com/kantata/specification/workspaces/update-workspace-time-approval-setting.md): Turns the time approval setting for a project on or off.

If you enable the time approval setting and specify a backfill_date, time entries until the specified date will be approved and the results of the
approval will be emailed to the authenticated user. Once the time entries have been approved, they cannot be unapproved.

This setting can't be turned off if there are active timesheet submissions or approvals for the project.


This endpoint returns structured Workspace 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 workspaces top-level JSON key.
Please see our Response Format section for more information.

### Unarchive Workspace with Approvals

 - [PUT /workspaces/{id}/unarchive_with_approvals](https://developer.kantata.com/kantata/specification/workspaces/unarchive-workspace-with-approvals.md): Unarchives a project.

If a time lock is set for the account and the project’s time approval setting is enabled, this endpoint will also
approve all unsubmitted time entries on or before the time lock date.


This endpoint returns structured Workspace 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 workspaces top-level JSON key.
Please see our Response Format section for more information.

## Activations

The Rate Card activation endpoints allow you to check whether the Rate Cards feature has been activated on
the user's account. It also allows you to activate the feature on the user's account.

### Check Rate Cards Activation Status

 - [GET /account_rate_cards_activations](https://developer.kantata.com/kantata/specification/activations/get-activation-status-rate-cards.md): This endpoint allows you to check whether the Rate Cards feature has been activated on
the user's account.
  This endpoint is only accessible to users with Financial access (Project Lead or higher) on the account.

### Activate Rate Cards

 - [POST /account_rate_cards_activations](https://developer.kantata.com/kantata/specification/activations/activate-rate-cards.md): Activate Rate Cards on a user's account by submitting a rate card set version that belongs to
the default Rate Card Set. Only an Account Administrator can activate rate cards on an account.

The initial request to this endpoint will generate an account default Rate Card Set and create a
Rate Card Set Version. This account default Rate Card Set will include a separate Rate Card for every currency
used in projects on the user's account.

## Rate Card Role (Rate for a Role)

Rate Card Roles belong to a Rate Card Version and represent the bill rate, in cents per hour, for a specific Role.
For example, the rate for the role of Developer may be 2000 cents per hour. It is not necessary, however, to create a Rate Card Role for
every role on your account if the rate is the same as the default rate on the Rate Card Version. When an
explicit Rate Card Role does not exist for a role on the account, the default rate on the Rate Card Version
is used to calculate the total bill rate.

Rate Card Roles can only be accessed, edited, or deleted by an Administrator on the account.

### Fetching a list of Rate Card Roles

 - [GET /rate_card_roles](https://developer.kantata.com/kantata/specification/rate-card-role-(rate-for-a-role)/get-rate-card-roles.md): Returns the Rate Card Roles associated with all Rate Card Versions on Rate Cards that belong to the logged-in user's account.

Rate Card Roles can only be accessed by an Administrator on the account.


This endpoint returns structured Rate Card Role 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 rate_card_roles top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Rate Card Role

 - [POST /rate_card_roles](https://developer.kantata.com/kantata/specification/rate-card-role-(rate-for-a-role)/create-rate-card-role.md): A Rate Card Role can only be created by an Administrator on the account.


This endpoint returns structured Rate Card Role 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 rate_card_roles top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Rate Card Role

 - [GET /rate_card_roles/{id}](https://developer.kantata.com/kantata/specification/rate-card-role-(rate-for-a-role)/get-rate-card-role.md): A Rate Card Role can only be accessed by an Administrator on the account.


This endpoint returns structured Rate Card Role 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 rate_card_roles top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Rate Card Role

 - [PUT /rate_card_roles/{id}](https://developer.kantata.com/kantata/specification/rate-card-role-(rate-for-a-role)/update-rate-card-role.md): A Rate Card Role can only be modified by an Administrator on the account.


This endpoint returns structured Rate Card Role 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 rate_card_roles top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Rate Card Role

 - [DELETE /rate_card_roles/{id}](https://developer.kantata.com/kantata/specification/rate-card-role-(rate-for-a-role)/delete-rate-card-role.md): If a A Rate Card Role belongs to a Rate Card Version that is in use, it cannot be deleted. A Rate Card Role can
only be deleted by an Administrator on the account.


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.

## Rate Card Set Version (Effective version by Date)

In the Rate Card system, Rate Card Set Versions represent snapshots of a Rate Card Set,
that take effect on the set published date. A Rate Card Set Version owns a copy of each Rate Card Version
of a Rate Card in the associated Rate Card Set.

Rate Card Roles can only be accessed, edited, or published by an Administrator on the account.

Since Rate Cards and Rate Card Versions are immutable after they are published and in use, generating a
Rate Card Set Version is the correct process for making any changes. When a new Rate Card Set Version
is created or cloned, all of the Rate Card Versions from the old Rate Card Set Version are copied
to a new one.

### Fetching a list of Rate Card Set Versions

 - [GET /rate_card_set_versions](https://developer.kantata.com/kantata/specification/rate-card-set-version-(effective-version-by-date)/get-rate-card-set-versions.md): Rate Card Set Versions are only accessible to Administrators on the account.


This endpoint returns structured Rate Card Set Version 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 rate_card_set_versions top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Rate Card Set Version

 - [POST /rate_card_set_versions](https://developer.kantata.com/kantata/specification/rate-card-set-version-(effective-version-by-date)/create-rate-card-set-version.md): Rate Card Set Versions can only created by an Administrator on the account.

Creating/Cloning a Rate Card Set Version on a Rate Card Set, does the following:
  - Creates/Clones a Rate Card Version for each existing Rate Card on the associated Rate Card Set.
  - Creates/Clones necessary associations for each Rate Card Version.


This endpoint returns structured Rate Card Set Version 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 rate_card_set_versions top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Rate Card Set Version

 - [GET /rate_card_set_versions/{id}](https://developer.kantata.com/kantata/specification/rate-card-set-version-(effective-version-by-date)/get-rate-card-set-version.md): A Rate Card Set Version is only accessible to an Administrator on the account.


This endpoint returns structured Rate Card Set Version 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 rate_card_set_versions top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Rate Card Set Version

 - [PUT /rate_card_set_versions/{id}](https://developer.kantata.com/kantata/specification/rate-card-set-version-(effective-version-by-date)/update-rate-card-set-version.md): A Rate Card Set Version can only be modified when the effective date is in the future, or when it is not yet
published.


This endpoint returns structured Rate Card Set Version 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 rate_card_set_versions top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Rate Card Set Version

 - [DELETE /rate_card_set_versions/{id}](https://developer.kantata.com/kantata/specification/rate-card-set-version-(effective-version-by-date)/delete-rate-card-set-version.md): 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.

### Publish a Rate Card Set Version

 - [PUT /rate_card_set_versions/{id}/publish](https://developer.kantata.com/kantata/specification/rate-card-set-version-(effective-version-by-date)/publish-rate-card-set-version.md): Publishing a Rate Card Set Version means activating the version from the set effective date.
A Rate Card Set Version can be published to any future date, but cannot be published on the same
effective date as another Rate Card Set Version on the same Rate Card Set. Once published, a Rate Card
Set Version cannot be unpublished.


This endpoint returns structured Rate Card Set Version 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 rate_card_set_versions top-level JSON key.
Please see our Response Format section for more information.

## Rate Card Sets (Group of Rate Cards)

A Rate Card Set represents a group of Rate Cards with multiple currencies that
can be bundled together. A Rate Card Set belongs to an account and can have several Rate Card Set Versions, each representing the
effective version for a specified date.

If the Rate Card feature is enabled, an account will always have an account default Rate Card Set. Rate
Cards belonging to the account default Rate Card Set are applied to projects by default when a Rate Card
is not explicitly set.

Additional custom Rate Card Sets can be created after the Rate Cards feature has been enabled on the
account. This can be done by making a request to the activations
endpoint.

### Fetching a list of Rate Card Sets

 - [GET /rate_card_sets](https://developer.kantata.com/kantata/specification/rate-card-sets-(group-of-rate-cards)/get-rate-card-sets.md): Rate Card Sets are only accessible to users with Financial access (Project Lead or higher) on the account.

An initial request to this endpoint, will generate an account default Rate Card Set and a create a
Rate Card Set Version. This account default Rate Card Set will include a separate Rate Card for every currency
used in projects on the user's account.


This endpoint returns structured Rate Card Set 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 rate_card_sets top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Rate Card Set

 - [POST /rate_card_sets](https://developer.kantata.com/kantata/specification/rate-card-sets-(group-of-rate-cards)/create-rate-card-set.md): This endpoint returns structured Rate Card Set 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 rate_card_sets top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Rate Card Set

 - [GET /rate_card_sets/{id}](https://developer.kantata.com/kantata/specification/rate-card-sets-(group-of-rate-cards)/get-rate-card-set.md): A Rate Card Set can only be accessed by users with Financial access (Project Lead or higher) on the account.


This endpoint returns structured Rate Card Set 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 rate_card_sets top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Rate Card Set

 - [PUT /rate_card_sets/{id}](https://developer.kantata.com/kantata/specification/rate-card-sets-(group-of-rate-cards)/update-rate-card-set.md): This endpoint returns structured Rate Card Set 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 rate_card_sets top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Rate Card Set

 - [DELETE /rate_card_sets/{id}](https://developer.kantata.com/kantata/specification/rate-card-sets-(group-of-rate-cards)/delete-rate-card-set.md): A Rate Card Set cannot be deleted if:
  - The Rate Card Set is the account default.
  - A Rate Card belonging to the Rate Card Set is being used by a project.


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.

## Rate Card Table Rows

Each Rate Card Table Row represents a role and its rates and currencies
for a specific [Rate Card Set Version](/tag/Rate-Card-Set-Version-(Effective-version-by-Date)).

### Fetch Rate Card Table Rows

 - [GET /rate_card_set_versions/{rate_card_set_version_id}/rate_card_table_rows](https://developer.kantata.com/kantata/specification/rate-card-table-rows/get-rate-card-table-rows-for-set-version.md): Returns all Rate Card Table Rows for a specified Rate Card Set Version.

### Delete a Rate Card Table Row

 - [DELETE /rate_card_set_versions/{rate_card_set_version_id}/rate_card_table_rows/{role_id}](https://developer.kantata.com/kantata/specification/rate-card-table-rows/delete-rate-card-table-row.md): Deletes all Rate Card Roles for a specified Rate Card Set Version and Role.

### Create or Update Rate Card Table Row

 - [PUT /rate_card_set_versions/{rate_card_set_version_id}/rate_card_table_rows/{role_id}](https://developer.kantata.com/kantata/specification/rate-card-table-rows/create-or-update-rate-table-row.md): Creates or updates a Rate Card Table Row for a specified Rate Card Set Version and Role.

## Rate Card Versions

Rate Card Versions represent a snapshot of a Rate Card at a specified point in time. They are used to set the
default rate. Rate Card Versions belong to a Rate Card Set Version and own many Rate Card Roles.

Rate Card Versions cannot be explicitly created. This is done through the creation of Rate Cards or
Rate Card Set Versions.

### Fetching a list of Rate Card Versions

 - [GET /rate_card_versions](https://developer.kantata.com/kantata/specification/rate-card-versions/get-rate-card-versions.md): Rate Card Versions are only accessible by Administrators on the account.


This endpoint returns structured Rate Card Version 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 rate_card_versions top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Rate Card Version

 - [GET /rate_card_versions/{id}](https://developer.kantata.com/kantata/specification/rate-card-versions/get-rate-card-version.md): Rate Card Versions are only accessible by Administrators on the account.


This endpoint returns structured Rate Card Version 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 rate_card_versions top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Rate Card Version

 - [PUT /rate_card_versions/{id}](https://developer.kantata.com/kantata/specification/rate-card-versions/update-rate-card-version.md): Rate Card Versions can only be modified by Administrators on the account.


This endpoint returns structured Rate Card Version 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 rate_card_versions top-level JSON key.
Please see our Response Format section for more information.

## Rate Cards (Multiple Currencies)

Rate Cards belong to a Rate Card Set and represent the currencies in that set. Rate Cards have
many Rate Card Versions which represent the effective version of a Rate Card at a specified point of time.
Rate Cards are accessible to users with Financial access (Project Lead or higher) on the account. However, they
can only created, modified or deleted by Administrators on the account.

### Fetching a list of Rate Cards

 - [GET /rate_cards](https://developer.kantata.com/kantata/specification/rate-cards-(multiple-currencies)/get-rate-cards.md): Returns Rate Cards on every Rate Card Set belonging to the account of the user that is logged-in.
This endpoint is only accessible to users with Financial access (Project Lead or higher) on the account.


This endpoint returns structured Rate Card 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 rate_cards top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Rate Card

 - [POST /rate_cards](https://developer.kantata.com/kantata/specification/rate-cards-(multiple-currencies)/create-rate-card.md): Creating a Rate Card automatically creates a Rate Card Version and associates it with the specified
Rate Card Set Version. If you are adding a Rate Card with a new currency on a custom Rate Card Set, it needs to
be added to the account default Rate Card Set first.
When you add a Rate Card with a new currency on a Rate Card Set that already has published Rate Card Set
versions, a cloned Rate Card Version will be added to all previous Rate Card Set Versions on the Rate
Card Set.
A Rate Card can only be created by Administrators on the account.


This endpoint returns structured Rate Card 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 rate_cards top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Rate Card

 - [GET /rate_cards/{id}](https://developer.kantata.com/kantata/specification/rate-cards-(multiple-currencies)/get-rate-card.md): This endpoint is only accessible to users with Financial access (Project Lead or higher) on the account.


This endpoint returns structured Rate Card 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 rate_cards top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Rate Card

 - [PUT /rate_cards/{id}](https://developer.kantata.com/kantata/specification/rate-cards-(multiple-currencies)/update-rate-card.md): A Rate Card can only be editied by an Administrator on the account. The currency of the Rate Card
cannot be changed if it is already in use by a project.


This endpoint returns structured Rate Card 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 rate_cards top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Rate Card

 - [DELETE /rate_cards/{id}](https://developer.kantata.com/kantata/specification/rate-cards-(multiple-currencies)/delete-rate-card.md): When you delete a Rate Card, its Rate Card Versions and the Rate Card Roles associated
with the Rate Card Versions will also be deleted. Once a Rate Card is deleted, neither the Rate Card nor
its associated data is recoverable. A Rate Card cannot be deleted if it is already in use by a project.
A Rate Card can only be deleted by an Administrator on the account.


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.

## Recommendations

A Recommendation suggests a User for an Unnamed Resource (or some other un-staffed position).
The system recommends Users based on how well they match the attributes of a
target resource. Attributes include, but are not limited to:
  - Role
  - Skill(s)
  - Single Choice Custom Field(s)
  - Allocation(s).

### Fetch Estimate Scenario Resource Recommendations

 - [GET /recommendations/estimate_scenario_resource](https://developer.kantata.com/kantata/specification/recommendations/get-estimate-scenario-resource-recommendations.md): Returns an ordered list of Recommendations (up to 1000) for an estimate scenario resource.

## Resource Requests

Resource Requests are used as a method for a requestor to ask an approver to staff a resource.
Resource Requests are associated to a workspace resource and must have an approver associated.

### Fetching a list of Resource Requests

 - [GET /resource_requests](https://developer.kantata.com/kantata/specification/resource-requests/get-resource-requests.md): Returns resource requests visible to the logged in user by default. When pending_requests_only filter is set
to true, the endpoint returns only pending resource requests.


This endpoint returns structured Resource Requests 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 resource_requests top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Resource Requests

 - [POST /resource_requests](https://developer.kantata.com/kantata/specification/resource-requests/create-resource-request.md): This endpoint returns structured Resource Requests 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 resource_requests top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Resource Requests

 - [GET /resource_requests/{id}](https://developer.kantata.com/kantata/specification/resource-requests/get-resource-request.md): This endpoint returns structured Resource Requests 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 resource_requests top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Resource Requests

 - [PUT /resource_requests/{id}](https://developer.kantata.com/kantata/specification/resource-requests/update-resource-request.md): This endpoint returns structured Resource Requests 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 resource_requests top-level JSON key.
Please see our Response Format section for more information.

### Update Resource Request Approver

 - [PUT /resource_requests/{id}/update_approver](https://developer.kantata.com/kantata/specification/resource-requests/update-resource-request-approver.md): This endpoint returns structured Resource Requests 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 resource_requests top-level JSON key.
Please see our Response Format section for more information.

## Holiday Calendar Associations

A Holiday Calendar Association represents the relationship between holiday objects and calendar objects.
A Holiday can be associated with several different calendars. To associate a holiday with a calendar,
create a Holiday Calendar Assocation.

### Fetching a list of Holiday Calendar Associations

 - [GET /holiday_calendar_associations](https://developer.kantata.com/kantata/specification/holiday-calendar-associations/get-holiday-calendar-associations.md): This endpoint returns structured Holiday Calendar Association 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 holiday_calendar_associations top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Holiday Calendar Association

 - [POST /holiday_calendar_associations](https://developer.kantata.com/kantata/specification/holiday-calendar-associations/create-holiday-calendar-association.md): This endpoint returns structured Holiday Calendar Association 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 holiday_calendar_associations top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Holiday Calendar Association

 - [GET /holiday_calendar_associations/{id}](https://developer.kantata.com/kantata/specification/holiday-calendar-associations/get-holiday-calendar-association.md): This endpoint returns structured Holiday Calendar Association 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 holiday_calendar_associations top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Holiday Calendar Association

 - [DELETE /holiday_calendar_associations/{id}](https://developer.kantata.com/kantata/specification/holiday-calendar-associations/delete-holiday-calendar-association.md): 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.

## Holiday Calendar Memberships

A list of all calendars associated to an individual user.

### Fetching a list of Holiday Calendar Memberships

 - [GET /holiday_calendar_memberships](https://developer.kantata.com/kantata/specification/holiday-calendar-memberships/get-holiday-calendar-memberships.md): This endpoint returns structured Holiday Calendar Membership 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 holiday_calendar_memberships top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Holiday Calendar Membership

 - [POST /holiday_calendar_memberships](https://developer.kantata.com/kantata/specification/holiday-calendar-memberships/create-holiday-calendar-membership.md): This endpoint returns structured Holiday Calendar Membership 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 holiday_calendar_memberships top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Holiday Calendar Membership

 - [GET /holiday_calendar_memberships/{id}](https://developer.kantata.com/kantata/specification/holiday-calendar-memberships/get-holiday-calendar-membership.md): This endpoint returns structured Holiday Calendar Membership 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 holiday_calendar_memberships top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Holiday Calendar Membership

 - [PUT /holiday_calendar_memberships/{id}](https://developer.kantata.com/kantata/specification/holiday-calendar-memberships/update-holiday-calendar-membership.md): This endpoint returns structured Holiday Calendar Membership 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 holiday_calendar_memberships top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Holiday Calendar Membership

 - [DELETE /holiday_calendar_memberships/{id}](https://developer.kantata.com/kantata/specification/holiday-calendar-memberships/delete-holiday-calendar-membership.md): Unlink the calendar from the user.


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.

## Holiday Calendars

Holiday Calendars define the days in which account members are unavailable to work due to company-wide days off.

### Fetching a list of Holiday Calendars

 - [GET /holiday_calendars](https://developer.kantata.com/kantata/specification/holiday-calendars/get-holiday-calendars.md): This endpoint returns structured Holiday Calendar 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 holiday_calendars top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Holiday Calendar

 - [POST /holiday_calendars](https://developer.kantata.com/kantata/specification/holiday-calendars/create-holiday-calendar.md): This endpoint returns structured Holiday Calendar 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 holiday_calendars top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Holiday Calendar

 - [GET /holiday_calendars/{id}](https://developer.kantata.com/kantata/specification/holiday-calendars/get-holiday-calendar.md): This endpoint returns structured Holiday Calendar 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 holiday_calendars top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Holiday Calendar

 - [PUT /holiday_calendars/{id}](https://developer.kantata.com/kantata/specification/holiday-calendars/update-holiday-calendar.md): This endpoint returns structured Holiday Calendar 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 holiday_calendars top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Holiday Calendar

 - [DELETE /holiday_calendars/{id}](https://developer.kantata.com/kantata/specification/holiday-calendars/delete-holiday-calendar.md): 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.

## Holidays

Holidays are the company-wide days off that have been added to a user's Kantata OX account.

### Fetching a list of Holidays

 - [GET /holidays](https://developer.kantata.com/kantata/specification/holidays/get-holidays.md): This endpoint returns structured Holiday 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 holidays top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Holiday

 - [POST /holidays](https://developer.kantata.com/kantata/specification/holidays/create-holiday.md): This endpoint returns structured Holiday 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 holidays top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Holiday

 - [GET /holidays/{id}](https://developer.kantata.com/kantata/specification/holidays/get-holiday.md): This endpoint returns structured Holiday 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 holidays top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Holiday

 - [PUT /holidays/{id}](https://developer.kantata.com/kantata/specification/holidays/update-holiday.md): This endpoint returns structured Holiday 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 holidays top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Holiday

 - [DELETE /holidays/{id}](https://developer.kantata.com/kantata/specification/holidays/delete-holiday.md): 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.

## Time Off Entries

Time Off Entries represent the time and dates that a user has requested off from work, such as PTO or vacation days.

### Fetching a list of Time Off Entries

 - [GET /time_off_entries](https://developer.kantata.com/kantata/specification/time-off-entries/get-time-off-entries.md): 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.

### Creating one or many Time Off Entries

 - [POST /time_off_entries](https://developer.kantata.com/kantata/specification/time-off-entries/create-time-off-entry.md): 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.

### Delete multiple time off entries

 - [DELETE /time_off_entries](https://developer.kantata.com/kantata/specification/time-off-entries/delete-time-off-entries.md): 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.

### Updating an existing Time Off Entry

 - [PUT /time_off_entries/{id}](https://developer.kantata.com/kantata/specification/time-off-entries/update-time-off-entry.md): 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.

### Deleting an existing Time Off Entry

 - [DELETE /time_off_entries/{id}](https://developer.kantata.com/kantata/specification/time-off-entries/delete-time-off-entry.md): 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.

## Workweek Memberships

A Workweek Membership represents the relationship of a user to a workweek.

### Fetching a list of Workweek Memberships

 - [GET /workweek_memberships](https://developer.kantata.com/kantata/specification/workweek-memberships/get-workweek-memberships.md): The Workweek Memberships endpoint provides a list of all workweek memberships that belongs to the
account of the user making the request. The response will contain an array of workweek membership
objects, sorted by their start_date.


This endpoint returns structured Workweek Membership 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 workweek_memberships top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Workweek Membership

 - [POST /workweek_memberships](https://developer.kantata.com/kantata/specification/workweek-memberships/create-workweek-membership.md): This endpoint returns structured Workweek Membership 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 workweek_memberships top-level JSON key.
Please see our Response Format section for more information.

### Switch to default workweek

 - [PUT /workweek_memberships/standardize_to_default](https://developer.kantata.com/kantata/specification/workweek-memberships/update-user-workweek-to-default.md): Switches the specified user to the account default workweek, starting on the specified date.

This endpoint returns structured Workweek Membership 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 workweek_memberships top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workweek Membership

 - [GET /workweek_memberships/{id}](https://developer.kantata.com/kantata/specification/workweek-memberships/get-workweek-membership.md): This endpoint returns structured Workweek Membership 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 workweek_memberships top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Workweek Membership

 - [PUT /workweek_memberships/{id}](https://developer.kantata.com/kantata/specification/workweek-memberships/update-workweek-membership.md): This endpoint returns structured Workweek Membership 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 workweek_memberships top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Workweek Membership

 - [DELETE /workweek_memberships/{id}](https://developer.kantata.com/kantata/specification/workweek-memberships/delete-workweek-membership.md): 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.

## Workweeks

Workweeks in Kantata OX are owned by an Account. They can be used as the default for an Account or
can be associated to a User through a Workweek Membership.

### Fetching a list of Workweeks

 - [GET /workweeks](https://developer.kantata.com/kantata/specification/workweeks/get-workweeks.md): The Workweeks endpoint provides a list of every default Workweek that belongs to the Account of the User making the request.
The response will contain an array of Workweek objects, sorted by their start_date.


This endpoint returns structured Workweek 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 workweeks top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Workweek

 - [POST /workweeks](https://developer.kantata.com/kantata/specification/workweeks/create-workweek.md): This endpoint returns structured Workweek 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 workweeks top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Workweek

 - [GET /workweeks/{id}](https://developer.kantata.com/kantata/specification/workweeks/get-workweek.md): This endpoint returns structured Workweek 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 workweeks top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Workweek

 - [PUT /workweeks/{id}](https://developer.kantata.com/kantata/specification/workweeks/update-workweek.md): This endpoint returns structured Workweek 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 workweeks top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Workweek

 - [DELETE /workweeks/{id}](https://developer.kantata.com/kantata/specification/workweeks/delete-workweek.md): 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.

## Survey Answers (Legacy)

Survey Answers (Legacy) appear on and can be responded to through surveys. Survey Answers (Legacy) are required to have a value
for the answer (i.e. answers must have at least one choice selected or a non-null value). Additionally, only
one value type can be specified for the answer (e.g. specifying a date value as well as choice values is
invalid). 

**Note**: This feature requires the Surveys (Legacy) account add-on. This feature is unrelated to Pulse surveys.

### Fetching a list of Survey Answers

 - [GET /survey_answers](https://developer.kantata.com/kantata/specification/survey-answers-(legacy)/get-survey-answers.md): This endpoint returns structured Survey Answer 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 survey_answers top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Survey Answer

 - [POST /survey_answers](https://developer.kantata.com/kantata/specification/survey-answers-(legacy)/create-survey-answer.md): This endpoint returns structured Survey Answer 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 survey_answers top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Survey Answer

 - [PUT /survey_answers/{id}](https://developer.kantata.com/kantata/specification/survey-answers-(legacy)/update-survey-answer.md): This endpoint returns structured Survey Answer 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 survey_answers top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Survey Answer

 - [DELETE /survey_answers/{id}](https://developer.kantata.com/kantata/specification/survey-answers-(legacy)/delete-survey-answer.md): 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.

## Survey Questions (Legacy)

Survey Questions (Legacy) appear on and can be responded to through surveys.

**Note**: This feature requires the Surveys (Legacy) account add-on. This feature is unrelated to Pulse surveys.

### Fetching a list of Survey Questions

 - [GET /survey_questions](https://developer.kantata.com/kantata/specification/survey-questions-(legacy)/get-survey-questions.md): This endpoint returns structured Survey Question 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 survey_questions top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Survey Question

 - [POST /survey_questions](https://developer.kantata.com/kantata/specification/survey-questions-(legacy)/create-survey-question.md): This endpoint returns structured Survey Question 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 survey_questions top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Survey Question

 - [PUT /survey_questions/{id}](https://developer.kantata.com/kantata/specification/survey-questions-(legacy)/update-survey-question.md): This endpoint returns structured Survey Question 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 survey_questions top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Survey Question

 - [DELETE /survey_questions/{id}](https://developer.kantata.com/kantata/specification/survey-questions-(legacy)/delete-survey-question.md): 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.

## Survey Templates (Legacy)

Survey Templates (Legacy) define a set of questions and defaults from which Survey Responses can be created.

**Note**: This feature requires the Surveys (Legacy) account add-on. This feature is unrelated to Pulse surveys.

### Fetching a list of Survey Templates

 - [GET /survey_templates](https://developer.kantata.com/kantata/specification/survey-templates-(legacy)/get-survey-templates.md): This endpoint returns structured Survey Template 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 survey_templates top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Survey Template

 - [POST /survey_templates](https://developer.kantata.com/kantata/specification/survey-templates-(legacy)/create-survey-template.md): This endpoint returns structured Survey Template 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 survey_templates top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Survey Template

 - [PUT /survey_templates/{id}](https://developer.kantata.com/kantata/specification/survey-templates-(legacy)/update-survey-template.md): This endpoint returns structured Survey Template 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 survey_templates top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Survey Template

 - [DELETE /survey_templates/{id}](https://developer.kantata.com/kantata/specification/survey-templates-(legacy)/delete-survey-template.md): 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.

## Surveys Responses (Legacy)

Survey Response (Legacy) represents an instance of a particular survey that has been assigned for response.

**Note**: This feature requires the Surveys (Legacy) account add-on. This feature is unrelated to Pulse surveys.

### Fetching a list of Survey Responses

 - [GET /survey_responses](https://developer.kantata.com/kantata/specification/surveys-responses-(legacy)/get-survey-responses.md): This endpoint returns structured Survey Response 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 survey_responses top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Survey Response

 - [POST /survey_responses](https://developer.kantata.com/kantata/specification/surveys-responses-(legacy)/create-survey-response.md): This endpoint returns structured Survey Response 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 survey_responses top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Survey Response

 - [PUT /survey_responses/{id}](https://developer.kantata.com/kantata/specification/surveys-responses-(legacy)/update-survey-response.md): This endpoint returns structured Survey Response 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 survey_responses top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Survey Response

 - [DELETE /survey_responses/{id}](https://developer.kantata.com/kantata/specification/surveys-responses-(legacy)/delete-survey-response.md): 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.

## Assignments

The Assignments object allows you to view and manage task assignments for
named or [unnamed resources](https://mavenlink.zendesk.com/hc/en-us/articles/115004696493#Unnamed).

**Note:** Because
[Daily Scheduled Hours](/tag/Daily-Scheduled-Hours-(Story-Allocation-Days))
are a part of Assignments, they can be affected when an assignment changes.

### Fetching a list of Assignments

 - [GET /assignments](https://developer.kantata.com/kantata/specification/assignments/get-assignments.md): For Account Administrators, returns task assignments in all projects across an account.
For non-Account Administrators, returns task assignments only in projects they are part of.


This endpoint returns structured Assignment 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 assignments top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Assignment

 - [POST /assignments](https://developer.kantata.com/kantata/specification/assignments/create-assignment.md): This endpoint returns structured Assignment 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 assignments top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Assignment

 - [GET /assignments/{id}](https://developer.kantata.com/kantata/specification/assignments/get-assignment.md): This endpoint returns structured Assignment 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 assignments top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Assignment

 - [PUT /assignments/{id}](https://developer.kantata.com/kantata/specification/assignments/update-assignment.md): This endpoint returns structured Assignment 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 assignments top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Assignment

 - [DELETE /assignments/{id}](https://developer.kantata.com/kantata/specification/assignments/delete-assignment.md): Unassigns a resource from a task. The assignment is soft deleted by
setting the current field to false. The assignment is then
considered inactive. Using this endpoint is the same as using
the update an existing assignment
endpoint and setting the current parameter to false.


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.

## Daily Scheduled Hours (Story Allocation Days)

Daily Scheduled Hours (also called Story Allocation Days) is the allocation of time for a resource to
spend on a specific task, on a specific day.
Daily Scheduled Hours are part of [Assignments](/tag/Assignments),
so if an Assignment is deleted, so are its Daily Scheduled Hours.

### Fetching a list of Daily Scheduled Hours (Story Allocation Days)

 - [GET /story_allocation_days](https://developer.kantata.com/kantata/specification/daily-scheduled-hours-(story-allocation-days)/get-story-allocation-days.md): Returns all Daily Scheduled Hours that are visible to the requester,
based on permissions. Filter results by specific projects, users, tasks, and more.

NOTES:
- The response includes Daily Scheduled Hours that are part of inactive Assignments, by default.
To filter these out, use the current parameter.
- If you are an Account Administrator, you can use the only_my_account parameter to filter for
Daily Scheduled Hours from only your account. This optimizes performance of the endpoint.

The returned Daily Scheduled Hours are sorted by when they were last updated.


This endpoint returns structured Daily Scheduled Hours (Story Allocation Day) 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_allocation_days top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Daily Scheduled Hours (Story Allocation Day)

 - [POST /story_allocation_days](https://developer.kantata.com/kantata/specification/daily-scheduled-hours-(story-allocation-days)/create-story-allocation-day.md): This endpoint returns structured Daily Scheduled Hours (Story Allocation Day) 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_allocation_days top-level JSON key.
Please see our Response Format section for more information.

### Delete multiple Daily Scheduled Hours (Story Allocation Days)

 - [DELETE /story_allocation_days](https://developer.kantata.com/kantata/specification/daily-scheduled-hours-(story-allocation-days)/delete-story-allocation-days.md): The IDs of the Daily Scheduled Hours to delete can be provided in the ids query parameter or
via the request body. Only daily scheduled hours on your account can be deleted.
Request body example:
{
  "ids": "1,2,3"
}
If any specified Daily Scheduled Hours 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 Daily Scheduled Hours (Story Allocation Day) 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_allocation_days top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Daily Scheduled Hours (Story Allocation Day)

 - [GET /story_allocation_days/{id}](https://developer.kantata.com/kantata/specification/daily-scheduled-hours-(story-allocation-days)/get-story-allocation-day.md): This endpoint returns structured Daily Scheduled Hours (Story Allocation Day) 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_allocation_days top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Daily Scheduled Hours (Story Allocation Day)

 - [PUT /story_allocation_days/{id}](https://developer.kantata.com/kantata/specification/daily-scheduled-hours-(story-allocation-days)/update-story-allocation-day.md): This endpoint returns structured Daily Scheduled Hours (Story Allocation Day) 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_allocation_days top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Daily Scheduled Hours (Story Allocation Day)

 - [DELETE /story_allocation_days/{id}](https://developer.kantata.com/kantata/specification/daily-scheduled-hours-(story-allocation-days)/delete-story-allocation-day.md): 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.

## Followers

Story Follows allow users to follow a task to which they are not assigned.

### Fetching a list of Story Follows

 - [GET /story_follows](https://developer.kantata.com/kantata/specification/followers/get-story-follows.md): By default, you will get all story follows that you are permitted to see. If you are an Administrator,
you will see every story follow on your account. Otherwise you will see every story follow in projects
in which you are participating.

### Following a story

 - [POST /story_follows](https://developer.kantata.com/kantata/specification/followers/create-story-follow.md)

### Retrieving a single Story Follow

 - [GET /story_follows/{id}](https://developer.kantata.com/kantata/specification/followers/get-story-follow.md)

### Unfollowing a story

 - [DELETE /story_follows/{id}](https://developer.kantata.com/kantata/specification/followers/delete-story-follow.md): 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.

## Stories

Stories are tasks, milestones, deliverables, or issues in
Kantata OX. They belong to Workspaces, show up in the local and
global task trackers, can be linked to Posts, can have sub-Stories
and TaskLists, and have many attributes for planning, tasking, and
financials.

### Fetching a list of Stories

 - [GET /stories](https://developer.kantata.com/kantata/specification/stories/get-stories.md): This endpoint returns structured Story 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 stories top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Story

 - [POST /stories](https://developer.kantata.com/kantata/specification/stories/create-story.md): Creates a task (story) in a project (workspace).

Bulk Create

This endpoint supports bulk creating up to 300 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "stories": [
    {
      "workspace_id": 123,
      "title": "Task"
    },
    {
      "workspace_id": 456,
      "title": "Task 2"
    }
  ]
}



This endpoint returns structured Story 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 stories top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Story

 - [GET /stories/{id}](https://developer.kantata.com/kantata/specification/stories/get-story.md): This endpoint returns structured Story 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 stories top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Story

 - [PUT /stories/{id}](https://developer.kantata.com/kantata/specification/stories/update-story.md): This endpoint returns structured Story 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 stories top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Story

 - [DELETE /stories/{id}](https://developer.kantata.com/kantata/specification/stories/delete-story.md): Soft deletes a task (by setting a value for deleted_at). You can view soft deleted tasks by fetching a
list of tasks with the only_deleted filter set to true.

Note: Tasks are only permanently deleted when the project is deleted.


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.

## Story Dependencies

Story dependencies define relationships between tasks and the sequence in which they must be completed in order to close a project. A dependency is between two tasks (stories) in a project (workspace), with one being the predecessor (source) task, and the other the successor (target) task. Each relationship is characterized by the type of dependency and lag between tasks. There are four (4) types of dependencies:
- Finish to Start (FS)—The predecessor ends before the successor can begin.
- Start to Start (SS)—The predecessor begins before the successor can begin.
- Finish to Finish (FF)—The predecessor ends before the successor can end.
- Start to Finish (SF)—The predecessor begins before the successor can end.
Lag is the number of days between the predecessor task ending and the successor task beginning.
To learn more about dependencies, see our [Gantt Chart Dependencies article](https://mavenlink.zendesk.com/hc/en-us/articles/360000456874-Gantt-Chart-Dependencies).

### Fetching a list of Story Dependencies

 - [GET /story_dependencies](https://developer.kantata.com/kantata/specification/story-dependencies/get-story-dependencies.md): This endpoint returns structured Story Dependency 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_dependencies top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Story Dependency

 - [GET /story_dependencies/{id}](https://developer.kantata.com/kantata/specification/story-dependencies/get-story-dependency.md): This endpoint returns structured Story Dependency 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_dependencies top-level JSON key.
Please see our Response Format section for more information.

## Story State Changes

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.

### Fetching a list of Story State Changes

 - [GET /story_state_changes](https://developer.kantata.com/kantata/specification/story-state-changes/get-story-state-changes.md): 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.

### Fetching a single Story State Change

 - [GET /story_state_changes/{id}](https://developer.kantata.com/kantata/specification/story-state-changes/get-story-state-change.md): 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.

## Story Tasks

Story Tasks are used in Kantata OX to track a list of checklist items within a Story.
This model includes a completion boolean and a position integer.

### Fetching a list of Story Tasks

 - [GET /story_tasks](https://developer.kantata.com/kantata/specification/story-tasks/get-story-tasks.md): Returns all story tasks belonging to stories in projects that the user is partcipating in.


This endpoint returns structured Story Task 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_tasks top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Story Task

 - [POST /story_tasks](https://developer.kantata.com/kantata/specification/story-tasks/create-story-task.md): This endpoint returns structured Story Task 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_tasks top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Story Task

 - [GET /story_tasks/{id}](https://developer.kantata.com/kantata/specification/story-tasks/get-story-task.md): This endpoint returns structured Story Task 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_tasks top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Story Task

 - [PUT /story_tasks/{id}](https://developer.kantata.com/kantata/specification/story-tasks/update-story-task.md): This endpoint returns structured Story Task 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_tasks top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Story Task

 - [DELETE /story_tasks/{id}](https://developer.kantata.com/kantata/specification/story-tasks/delete-story-task.md): 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.

## Line Item Locks

Line Item Locks provide a way for you to lock time in the past so that previous time entries
cannot be edited or updated and new time entries cannot be created before the selected lock date.

Line Items can be locked to any Saturday in the past on a per-account basis.

Keep in mind that this feature does not lock the ability to invoice approved time entries,
nor does it lock the submission or approval of expenses.

Also note: Line Item Locks cannot be modified or deleted. If you would like to move the lock date forward,
simply create a new lock at a later date, and your account will be locked at the new date.
Once your account has been locked, the lock cannot be moved earlier, or removed.

### Fetching a list of Line Item Locks

 - [GET /line_item_locks](https://developer.kantata.com/kantata/specification/line-item-locks/get-line-item-locks.md): This endpoint returns structured Line Item Lock 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 line_item_locks top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Line Item Lock

 - [POST /line_item_locks](https://developer.kantata.com/kantata/specification/line-item-locks/create-line-item-lock.md): A line item lock will be created on your account at the specified lock date. On successful creation of a
line item lock, a representation of it will be returned to you.

If your account requires time to be approved, creation will fail unless all time entries before the
specified lock date have been approved. The Kantata OX UI has an auto approval tool for your convenience
if you find yourself in this scenario.


This endpoint returns structured Line Item Lock 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 line_item_locks top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Line Item Lock

 - [GET /line_item_locks/{id}](https://developer.kantata.com/kantata/specification/line-item-locks/get-line-item-lock.md): This endpoint returns structured Line Item Lock 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 line_item_locks top-level JSON key.
Please see our Response Format section for more information.

## Time Entries

This object allows you to manage Kantata OX time entries, depending on your permissions.
Creating and updating time entries allows you to include time when invoicing clients.

### Fetching a list of Time Entries

 - [GET /time_entries](https://developer.kantata.com/kantata/specification/time-entries/get-time-entries.md): Returns all time entries visible to the requesting user, unless filter parameters
have been applied.


This endpoint returns structured Time 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_entries top-level JSON key.
Please see our Response Format section for more information.

### Creating a new Time Entry

 - [POST /time_entries](https://developer.kantata.com/kantata/specification/time-entries/create-time-entry.md): Creates time entries for a user.

Bulk Create

This endpoint supports bulk creating up to 100 objects. In the request body, set the top-level key to its plural form and place the objects in an array. Example:


{
  "time_entries": [
    {
      "workspace_id": 123,
      "date_performed": "2025-01-23",
      "time_in_minutes": 60
    },
    {
      "workspace_id": 123,
      "date_performed": "2025-01-24",
      "time_in_minutes": 60
    }
  ]
}



This endpoint returns structured Time 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_entries top-level JSON key.
Please see our Response Format section for more information.

### Delete multiple time entries

 - [DELETE /time_entries](https://developer.kantata.com/kantata/specification/time-entries/delete-time-entries.md): The IDs of the time 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 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 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_entries top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Time Entry

 - [GET /time_entries/{id}](https://developer.kantata.com/kantata/specification/time-entries/get-time-entry.md): This endpoint returns structured Time 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_entries top-level JSON key.
Please see our Response Format section for more information.

### Updating an existing Time Entry

 - [PUT /time_entries/{id}](https://developer.kantata.com/kantata/specification/time-entries/update-time-entry.md): This endpoint returns structured Time 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_entries top-level JSON key.
Please see our Response Format section for more information.

### Deleting an existing Time Entry

 - [DELETE /time_entries/{id}](https://developer.kantata.com/kantata/specification/time-entries/delete-time-entry.md): Deletes the time entry if it is deletable. A time entry cannot be destroyed if:
  - the time is locked before a certain date,
  - the time has been invoiced, or
  - a time adjustment is linked with it.


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.

## Timesheet Approvals

This section contains an endpoint to approve multiple Timesheet Submissions at once.

### Approve Multiple Timesheet Submissions

 - [POST /timesheet_approvals](https://developer.kantata.com/kantata/specification/timesheet-approvals/approve-timesheet-submissions.md): This endpoint allows you to approve multiple pending Timesheet Submissions at once.


This endpoint returns structured Resolution 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 resolutions top-level JSON key.
Please see our Response Format section for more information.

## Timesheet Cancellations

This section contains an endpoint to cancel multiple Timesheet Submissions at once.

### Cancel Multiple Timesheet Submissions

 - [POST /timesheet_cancellations](https://developer.kantata.com/kantata/specification/timesheet-cancellations/cancel-timesheet-submissions.md): This endpoint allows you to cancel multiple Timesheet Submissions at once.


This endpoint returns structured Resolution 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 resolutions top-level JSON key.
Please see our Response Format section for more information.

## Timesheet Rejections

This section contains an endpoint to reject multiple Timesheet Submissions at once.

### Reject Multiple Timesheet Submissions

 - [POST /timesheet_rejections](https://developer.kantata.com/kantata/specification/timesheet-rejections/reject-timesheet-submissions.md): This endpoint allows you to reject multiple Timesheet Submissions at once.


This endpoint returns structured Resolution 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 resolutions top-level JSON key.
Please see our Response Format section for more information.

## Timesheet Submissions

Timesheet Submissions hold a set of time entries for a specified week, and can be approved, rejected,
or canceled.

You can enable timesheet submissions and approval in your
[project settings](https://knowledge.kantata.com/hc/en-us/articles/204346530#Financials).
Once enabled, time entries must be approved through a Timesheet Submission before it is invoiceable.

**Note**: Each Timesheet Submission can only be associated with a single project. So when a timesheet
is submitted through the UI with time entries for multiple projects, a separate Timesheet Submission
object is created for each project in the backend.

This section contains endpoints to approve, reject, or cancel a single timesheet submission.
To approve, reject, or cancel multiple timesheet submissions at once, see
[Timesheet Approvals](/tag/Timesheet-Approvals), [Timesheet Cancellations](/tag/Timesheet-Cancellations),
and [Timesheet Rejections](/tag/Timesheet-Rejections).

### Fetching a list of Timesheet Submissions

 - [GET /timesheet_submissions](https://developer.kantata.com/kantata/specification/timesheet-submissions/get-timesheet-submissions.md): This endpoint returns structured Timesheet Submission 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 timesheet_submissions top-level JSON key.
Please see our Response Format section for more information.

### Create a Timesheet Submission

 - [POST /timesheet_submissions](https://developer.kantata.com/kantata/specification/timesheet-submissions/create-timesheet-submission.md): Create a new TimesheetSubmission.

Note: A TimesheetSubmission can be associated with only one project.


This endpoint returns structured Timesheet Submission 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 timesheet_submissions top-level JSON key.
Please see our Response Format section for more information.

### Fetching a single Timesheet Submission

 - [GET /timesheet_submissions/{id}](https://developer.kantata.com/kantata/specification/timesheet-submissions/get-timesheet-submission.md): This endpoint returns structured Timesheet Submission 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 timesheet_submissions top-level JSON key.
Please see our Response Format section for more information.

### Approve a Single Timesheet Submission

 - [PUT /timesheet_submissions/{id}/approve](https://developer.kantata.com/kantata/specification/timesheet-submissions/approve-timesheet-submission.md): Approves a single Timesheet Submission. You must have
Time Approval permissions
to use this endpoint. To approve multiple Timesheet Submissions at once, see
Timesheet Approvals.


This endpoint returns structured Resolution 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 resolutions top-level JSON key.
Please see our Response Format section for more information.

### Cancel a Single Timesheet Submission

 - [PUT /timesheet_submissions/{id}/cancel](https://developer.kantata.com/kantata/specification/timesheet-submissions/cancel-timesheet-submission.md): Cancels a single Timesheet Submission. You must have
Time Approval permissions
to use this endpoint. To cancel multiple Timesheet Submissions at once, see
Timesheet Cancellations.


This endpoint returns structured Resolution 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 resolutions top-level JSON key.
Please see our Response Format section for more information.

### Reject a Single Timesheet Submission

 - [PUT /timesheet_submissions/{id}/reject](https://developer.kantata.com/kantata/specification/timesheet-submissions/reject-timesheet-submission.md): Rejects a single Timesheet Submission. You must have
Time Approval permissions
to use this endpoint. To reject multiple Timesheet Submissions at once, see
Timesheet Rejections.


This endpoint returns structured Resolution 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 resolutions top-level JSON key.
Please see our Response Format section for more information.

