Orangescrum
Documentation index for AI agents (llms.txt). A markdown version of this page is available at /developer/api.md or by requesting this URL with the header Accept: text/markdown.

Partner API reference

59 endpoints across 13 resource groups. Every call is a POST, authenticated with an API key, carrying an encrypted JSON payload. If you have not made a call yet, start with the quick start.

Conventions

All endpoints live under a single base path:

https://<your-orangescrum-host>/api/v1/partner
Cloud customers get their host with their credentials. Self-hosted customers use their own.
  • Everything is POST. Reads use POST too, because the request body is encrypted and a query string cannot carry that.
  • One body field. The JSON body is always { "encrypted_data": "..." }. Your real parameters live inside the encrypted blob.
  • Scope comes from the key. You never pass a company or user ID. The API key is bound to a company and a user, and that is what the call can see.
  • Dates are YYYY-MM-DD unless a field says otherwise.

Authentication

Send your API key in the X-API-KEY header on every request. It is the only header we require beyond Content-Type.

X-API-KEY: your_api_key
Content-Type: application/json

The key is checked against active, unexpired credentials. A missing, unknown, deactivated, or expired key returns 401. Your API secret is never sent: it is only used to encrypt and decrypt the payload, which is what proves the request really came from you.

Encrypting requests

Payloads are encrypted with AES-256-CBC. The exact recipe is:

  1. Serialise your parameters as JSON. An endpoint with no parameters takes {}.
  2. Derive the key: sha256(secret) as raw bytes, giving 32 bytes. Do not hex encode it first.
  3. Generate a fresh random 16 byte IV for every request. Never reuse one.
  4. Encrypt the JSON with that key and IV.
  5. Prepend the IV to the ciphertext, then base64 encode the whole thing.
  6. Send the result as encrypted_data.
import crypto from "node:crypto";

/**
 * Build the "encrypted_data" value.
 *   key        = raw sha256(secret)          -> 32 bytes for AES-256
 *   iv         = 16 random bytes
 *   ciphertext = AES-256-CBC(JSON payload)
 *   result     = base64(iv + ciphertext)
 */
export function encryptPayload(payload, secret) {
  const key = crypto.createHash("sha256").update(secret).digest();
  const iv = crypto.randomBytes(16);
  const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
  const enc = Buffer.concat([
    cipher.update(JSON.stringify(payload), "utf8"),
    cipher.final(),
  ]);
  return Buffer.concat([iv, enc]).toString("base64");
}

export async function call(endpoint, payload) {
  const res = await fetch("https://<your-orangescrum-host>/api/v1/partner" + endpoint, {
    method: "POST",
    headers: {
      "X-API-KEY": process.env.OS_API_KEY,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      encrypted_data: encryptPayload(payload, process.env.OS_API_SECRET),
    }),
  });
  return res.json();
}

// Example
const projects = await call("/projects/list", {});
The same recipe in four languages. Reuse the helper for every call.

Responses and errors

Responses are JSON with a consistent envelope. success tells you what happened, message is human readable, and data carries the result when there is one.

{
  "success": true,
  "message": "Projects retrieved successfully",
  "data": [
    {
      "id": 1042,
      "name": "Website Redesign",
      "short_name": "WEB",
      "status": "Started",
      "priority": "High",
      "start_date": "2026-07-01",
      "end_date": "2026-09-30"
    }
  ]
}

Status codes follow normal HTTP meanings:

CodeWhat it means
200The request worked. Read data from the response body.
201Something was created. The new record is in the response body.
400The payload was rejected. Check errors for the field that failed.
401The API key is missing, wrong, inactive, expired, or the payload could not be decrypted.
404The record you asked for does not exist, or your key cannot see it.
422Validation failed on one or more fields.
429You went over a rate limit. Back off and retry.
500Something broke on our side. Retry, and tell us if it persists.

Rate limits

120 requests per minute and 5000 per day, counted per API key and IP. Going over returns 429.

Back off and retry rather than hammering. If you are backfilling a warehouse or syncing a large account and these limits are the wrong shape for that, tell us what you are doing and we will look at raising them.

Endpoint reference

Every endpoint below is a POST to the base path plus the path shown. Parameters go inside the encrypted payload.

Validate1#

A single endpoint to check that your API key and your encryption setup are correct.

POST/validateValidate request
POST/api/v1/partner/validate

Checks the API key, decrypts the payload, and returns the decrypted payload back to you. The payload can contain anything, so there are no required fields.

This endpoint takes no parameters. Send an empty object as the payload.

Projects5#

Read, create, update, and search projects in the connected Orangescrum account.

POST/projects/listList projects
POST/api/v1/partner/projects/list

Returns every project the API key has access to.

NameTypeRequiredDescription
filtersarrayNoReserved filter object. It is accepted and validated, but the list is not narrowed by it. Use the search endpoint to filter.
POST/projects/createCreate a project
POST/api/v1/partner/projects/create

Creates a new project and returns it.

NameTypeRequiredDescription
namestringYesProject name. Max 255 characters.
short_namestringNoShort code for the project. Max 50 characters.
descriptionstringNoProject description.
project_typeinteger or stringNoProject type. Pass the numeric type ID, or a type name to match or create.
statusstringNoOne of: Started, Hold, Stack, Completed.
prioritystringNoOne of: High, Medium, Low.
start_datestring (date)NoProject start date.
end_datestring (date)NoProject end date. Must be on or after start_date.
estimated_hoursnumberNoEstimated hours. Cannot be negative.
status_group_idintegerNoID of the status group to use.
POST/projects/detailGet a project
POST/api/v1/partner/projects/detail

Returns one project by its unique ID.

NameTypeRequiredDescription
project_idstringYesUnique ID of the project.
POST/projects/updateUpdate a project
POST/api/v1/partner/projects/update

Updates the fields you send on an existing project. Fields you leave out are not changed.

NameTypeRequiredDescription
project_idstringYesUnique ID of the project.
namestringNoProject name. Max 255 characters.
short_namestringNoShort code for the project. Max 50 characters.
descriptionstringNoProject description.
project_typeintegerNoNumeric project type ID.
statusstringNoOne of: Started, Hold, Stack, Completed.
prioritystringNoOne of: High, Medium, Low.
isactivebooleanNoWhether the project is active.
start_datestring (date)NoProject start date.
end_datestring (date)NoProject end date. Must be on or after start_date.
estimated_hoursnumberNoEstimated hours. Cannot be negative.
POST/projects/searchSearch projects

Searches projects by text and returns a paginated list.

NameTypeRequiredDescription
qstringNoSearch text. Max 255 characters.
pageintegerNoPage number. Starts at 1.
per_pageintegerNoResults per page. Between 1 and 100.

Tasks5#

Read, create, update, and search tasks inside a project.

POST/tasks/listList tasks
POST/api/v1/partner/tasks/list

Returns a paginated list of tasks, with optional filters.

NameTypeRequiredDescription
filtersarrayNoObject holding the filter fields below.
filters.project_idstring or integerNoUnique ID of the project, or its numeric ID.
filters.statusstringNoOne of: Open, Closed.
filters.prioritystringNoOne of: high, medium, low.
filters.assign_tointegerNoUser ID the task is assigned to.
filters.type_idintegerNoTask type ID.
filters.case_nointegerNoTask number within the project.
filters.qstringNoSearch text.
per_pageintegerNoResults per page. Between 1 and 100.
pageintegerNoPage number. Starts at 1.
POST/tasks/createCreate a task
POST/api/v1/partner/tasks/create

Creates a task in a project and returns it.

NameTypeRequiredDescription
project_idstringYesUnique ID of the project.
titlestringYesTask title. Max 255 characters.
messagestringNoTask description.
type_idintegerYesTask type ID.
prioritystringYesOne of: high, medium, low.
assign_tointegerNoUser ID to assign the task to.
estimated_hoursnumberNoEstimated hours. Cannot be negative.
gantt_start_datestring (date)NoTask start date.
due_datestring (date)NoTask due date.
completedintegerNoProgress state. One of: 0, 1, 2, 3, 4, 5, 6.
legendintegerNoLegend or label ID.
custom_statusstringNoOne of: New, In Progress, Resolved, Closed.
parent_task_idintegerNoID of the parent task, for a subtask.
story_pointnumberNoStory points. Cannot be negative.
epic_idintegerNoID of the epic to link the task to.
milestone_idintegerNoID of the milestone to link the task to.
is_recurringbooleanNoWhether the task repeats.
POST/tasks/detailGet a task
POST/api/v1/partner/tasks/detail

Returns one task by its unique ID.

NameTypeRequiredDescription
task_idstringYesUnique ID of the task.
POST/tasks/updateUpdate a task
POST/api/v1/partner/tasks/update

Updates the fields you send on an existing task. Fields you leave out are not changed.

NameTypeRequiredDescription
task_idstringYesUnique ID of the task.
titlestringNoTask title. Max 255 characters.
messagestringNoTask description.
type_idintegerNoTask type ID.
prioritystringNoOne of: high, medium, low.
assign_tointegerNoUser ID to assign the task to.
estimated_hoursnumberNoEstimated hours. Cannot be negative.
gantt_start_datestring (date)NoTask start date.
due_datestring (date)NoTask due date.
completedintegerNoProgress state. One of: 0, 1, 2, 3, 4, 5, 6.
legendintegerNoLegend or label ID.
custom_statusstringNoOne of: New, In Progress, Resolved, Closed.
statusstringNoOne of: Open, Closed.
POST/tasks/searchSearch tasks

Searches tasks by text and returns a paginated list.

NameTypeRequiredDescription
qstringNoSearch text. Max 255 characters.
pageintegerNoPage number. Starts at 1.
per_pageintegerNoResults per page. Between 1 and 100.
project_idstringNoUnique ID of a project, to limit the search to that project.

Timelogs5#

Read and record time entries against projects and tasks.

POST/timelogs/listList timelogs
POST/api/v1/partner/timelogs/list

Returns a paginated list of time entries, with optional filters.

NameTypeRequiredDescription
per_pageintegerNoResults per page. Between 1 and 100.
pageintegerNoPage number. Starts at 1.
filtersarrayNoObject holding the filter fields below.
filters.project_idstringNoUnique ID of the project.
filters.task_idstringNoUnique ID of the task.
filters.fromstring (date)NoStart of the date range.
filters.tostring (date)NoEnd of the date range. Must be on or after filters.from.
filters.is_billablebooleanNoOnly billable or non billable entries.
filters.timesheet_flagbooleanNoOnly entries on a timesheet.
filters.qstringNoSearch text. Max 255 characters.
POST/timelogs/searchSearch timelogs

Searches time entries and returns a paginated list. Takes the same filters as the list endpoint.

NameTypeRequiredDescription
per_pageintegerNoResults per page. Between 1 and 100.
pageintegerNoPage number. Starts at 1.
filtersarrayNoObject holding the filter fields below.
filters.project_idstringNoUnique ID of the project.
filters.task_idstringNoUnique ID of the task.
filters.fromstring (date)NoStart of the date range.
filters.tostring (date)NoEnd of the date range. Must be on or after filters.from.
filters.is_billablebooleanNoOnly billable or non billable entries.
filters.timesheet_flagbooleanNoOnly entries on a timesheet.
filters.qstringNoSearch text. Max 255 characters.
POST/timelogs/detailGet a timelog
POST/api/v1/partner/timelogs/detail

Returns one time entry by its unique ID.

NameTypeRequiredDescription
timelog_idstringYesUnique ID of the time entry.
POST/timelogs/createCreate a timelog
POST/api/v1/partner/timelogs/create

Records a new time entry against a project, and optionally against a task.

NameTypeRequiredDescription
project_idstringYesUnique ID of the project.
task_idstringNoUnique ID of the task.
task_datestring (date)YesDate the work was done.
start_datetimestring (date)NoFull start date and time.
end_datetimestring (date)NoFull end date and time. Must be after start_datetime.
start_timestring (date)NoStart time in HH:MM:SS format. Required when start_datetime is not sent.
end_timestring (date)NoEnd time in HH:MM:SS format. Required when end_datetime is not sent.
total_hoursnumberNoTotal hours logged. Cannot be negative.
break_timenumberNoBreak time in hours. Cannot be negative.
descriptionstringYesWhat the time was spent on. Max 1000 characters.
is_from_timerbooleanNoWhether the entry came from a running timer.
is_billablebooleanNoWhether the time is billable.
timesheet_flagbooleanNoWhether the entry belongs to a timesheet.
task_statusintegerNoStatus of the task at the time of logging.
pending_statusintegerNoApproval status of the entry.
approver_idintegerNoUser ID of the approver.
ipstringNoIP address the entry was logged from. Must be a valid IP.
POST/timelogs/updateUpdate a timelog
POST/api/v1/partner/timelogs/update

Updates the fields you send on an existing time entry. Fields you leave out are not changed.

NameTypeRequiredDescription
timelog_idstringYesUnique ID of the time entry.
project_idstringNoUnique ID of the project.
task_idstringNoUnique ID of the task.
task_datestring (date)NoDate the work was done.
start_datetimestring (date)NoFull start date and time.
end_datetimestring (date)NoFull end date and time. Must be after start_datetime.
start_timestring (date)NoStart time in HH:MM:SS format.
end_timestring (date)NoEnd time in HH:MM:SS format.
total_hoursnumberNoTotal hours logged. Cannot be negative.
break_timenumberNoBreak time in hours. Cannot be negative.
descriptionstringNoWhat the time was spent on. Max 1000 characters.
is_from_timerbooleanNoWhether the entry came from a running timer.
is_billablebooleanNoWhether the time is billable.
timesheet_flagbooleanNoWhether the entry belongs to a timesheet.
task_statusintegerNoStatus of the task at the time of logging.
pending_statusintegerNoApproval status of the entry.
approver_idintegerNoUser ID of the approver.
ipstringNoIP address the entry was logged from. Must be a valid IP.

Users2#

Read the people in the connected Orangescrum account. These endpoints are read only.

POST/users/listList users
POST/api/v1/partner/users/list

Returns a paginated list of users, with optional filters.

NameTypeRequiredDescription
filtersarrayNoObject holding the filter fields below.
filters.searchstringNoSearch by name or email.
filters.project_idstringNoUnique ID of a project, to return only its members.
pageintegerNoPage number. Starts at 1.
per_pageintegerNoResults per page. Between 1 and 100.
POST/users/detailGet a user
POST/api/v1/partner/users/detail

Returns one user by their unique ID.

NameTypeRequiredDescription
uniq_idstringYesUnique ID of the user.

Test cases5#

Manage test cases, the individual checks that belong to a project and optionally to a test scenario.

POST/test-cases/listList test cases
POST/api/v1/partner/test-cases/list

Returns a paginated list of test cases, with optional filters.

NameTypeRequiredDescription
project_idstringNoUnique ID of the project.
scenario_idstringNoUnique ID of the test scenario.
statusstringNoTest case status. Max 50 characters.
prioritystringNoTest case priority. Max 100 characters.
qstringNoSearch text. Max 255 characters.
include_archivedbooleanNoInclude archived test cases.
pageintegerNoPage number. Starts at 1.
per_pageintegerNoResults per page. Between 1 and 100.
POST/test-cases/createCreate a test case
POST/api/v1/partner/test-cases/create

Creates a test case in a project and returns it.

NameTypeRequiredDescription
project_idstringYesUnique ID of the project.
namestringYesTest case name. Max 255 characters.
descriptionstringNoTest case description. Max 255 characters.
typestringNoTest case type. Max 50 characters.
prioritystringNoTest case priority. Max 100 characters.
severitystringNoTest case severity. Max 100 characters.
behaviourstringNoExpected behaviour. Max 100 characters.
automation_statusstringNoAutomation status. Max 100 characters.
pre_conditionstringNoWhat must be true before the test runs.
post_conditionstringNoWhat should be true after the test runs.
expected_resultstringNoExpected result. Max 255 characters.
statusstringNoTest case status. Max 50 characters.
versionstringNoVersion label. Max 50 characters.
scenario_idstringNoUnique ID of the test scenario to link to.
epic_idintegerNoID of the epic to link to.
feature_idintegerNoID of the feature to link to.
story_idintegerNoID of the story to link to.
POST/test-cases/detailGet a test case
POST/api/v1/partner/test-cases/detail

Returns one test case by its unique ID.

NameTypeRequiredDescription
test_case_idstringYesUnique ID of the test case.
POST/test-cases/updateUpdate a test case
POST/api/v1/partner/test-cases/update

Updates the fields you send on an existing test case. Fields you leave out are not changed.

NameTypeRequiredDescription
test_case_idstringYesUnique ID of the test case.
namestringNoTest case name. Max 255 characters.
descriptionstringNoTest case description. Max 255 characters.
typestringNoTest case type. Max 50 characters.
prioritystringNoTest case priority. Max 100 characters.
severitystringNoTest case severity. Max 100 characters.
behaviourstringNoExpected behaviour. Max 100 characters.
automation_statusstringNoAutomation status. Max 100 characters.
pre_conditionstringNoWhat must be true before the test runs.
post_conditionstringNoWhat should be true after the test runs.
expected_resultstringNoExpected result. Max 255 characters.
statusstringNoTest case status. Max 50 characters.
versionstringNoVersion label. Max 50 characters.
scenario_idstringNoUnique ID of the test scenario to link to.
epic_idintegerNoID of the epic to link to.
feature_idintegerNoID of the feature to link to.
story_idintegerNoID of the story to link to.
POST/test-cases/deleteDelete a test case
POST/api/v1/partner/test-cases/delete

Archives a test case, or removes it permanently when hard_delete is true.

NameTypeRequiredDescription
test_case_idstringYesUnique ID of the test case.
hard_deletebooleanNoSet to true to delete permanently instead of archiving.

Test scenarios5#

Manage test scenarios, the groupings that test cases belong to.

POST/test-scenarios/listList test scenarios
POST/api/v1/partner/test-scenarios/list

Returns a paginated list of test scenarios, with optional filters.

NameTypeRequiredDescription
project_idstringNoUnique ID of the project.
statusstringNoScenario status. Max 50 characters.
typestringNoScenario type. Max 100 characters.
qstringNoSearch text. Max 255 characters.
include_archivedbooleanNoInclude archived scenarios.
pageintegerNoPage number. Starts at 1.
per_pageintegerNoResults per page. Between 1 and 100.
POST/test-scenarios/createCreate a test scenario
POST/api/v1/partner/test-scenarios/create

Creates a test scenario in a project and returns it.

NameTypeRequiredDescription
project_idstringYesUnique ID of the project.
namestringYesScenario name. Max 255 characters.
descriptionstringNoScenario description. Max 255 characters.
typestringNoScenario type. Max 100 characters.
coverage_percentagenumberNoCoverage percentage. Between 0 and 100.
test_strategy_idintegerNoID of the test strategy.
statusstringNoScenario status. Max 50 characters.
versionstringNoVersion label. Max 50 characters.
POST/test-scenarios/detailGet a test scenario
POST/api/v1/partner/test-scenarios/detail

Returns one test scenario by its unique ID.

NameTypeRequiredDescription
scenario_idstringYesUnique ID of the test scenario.
POST/test-scenarios/updateUpdate a test scenario
POST/api/v1/partner/test-scenarios/update

Updates the fields you send on an existing test scenario. Fields you leave out are not changed.

NameTypeRequiredDescription
scenario_idstringYesUnique ID of the test scenario.
namestringNoScenario name. Max 255 characters.
descriptionstringNoScenario description. Max 255 characters.
typestringNoScenario type. Max 100 characters.
coverage_percentagenumberNoCoverage percentage. Between 0 and 100.
test_strategy_idintegerNoID of the test strategy.
statusstringNoScenario status. Max 50 characters.
versionstringNoVersion label. Max 50 characters.
POST/test-scenarios/deleteDelete a test scenario
POST/api/v1/partner/test-scenarios/delete

Archives a test scenario, or removes it permanently when hard_delete is true.

NameTypeRequiredDescription
scenario_idstringYesUnique ID of the test scenario.
hard_deletebooleanNoSet to true to delete permanently instead of archiving.

Test steps5#

Manage the ordered steps inside a test case.

POST/test-steps/listList test steps
POST/api/v1/partner/test-steps/list

Returns the steps of one test case, in order and paginated.

NameTypeRequiredDescription
test_case_idstringYesUnique ID of the test case.
include_archivedbooleanNoInclude archived steps.
pageintegerNoPage number. Starts at 1.
per_pageintegerNoResults per page. Between 1 and 100.
POST/test-steps/createCreate a test step
POST/api/v1/partner/test-steps/create

Adds a step to a test case. Send a name, a description, or both.

NameTypeRequiredDescription
test_case_idstringYesUnique ID of the test case.
namestringNoStep name. Max 255 characters.
descriptionstringNoStep description. Max 255 characters. Required when name is not sent.
expected_resultstringNoExpected result. Max 255 characters.
outcomestringNoActual outcome. Max 255 characters.
statusstringNoStep status. Max 50 characters.
versionstringNoVersion label. Max 50 characters.
POST/test-steps/updateUpdate a test step
POST/api/v1/partner/test-steps/update

Updates the fields you send on an existing step. Fields you leave out are not changed.

NameTypeRequiredDescription
test_case_idstringYesUnique ID of the test case.
step_idstringYesUnique ID of the step.
namestringNoStep name. Max 255 characters.
descriptionstringNoStep description. Max 255 characters.
expected_resultstringNoExpected result. Max 255 characters.
outcomestringNoActual outcome. Max 255 characters.
statusstringNoStep status. Max 50 characters.
versionstringNoVersion label. Max 50 characters.
POST/test-steps/reorderReorder test steps
POST/api/v1/partner/test-steps/reorder

Sets the order of the steps in a test case. Send the step IDs in the order you want.

NameTypeRequiredDescription
test_case_idstringYesUnique ID of the test case.
step_idsarrayYesStep IDs in the new order. At least one is required.
step_ids.*stringYesEach entry is the unique ID of a step.
POST/test-steps/deleteDelete a test step
POST/api/v1/partner/test-steps/delete

Archives a step, or removes it permanently when hard_delete is true.

NameTypeRequiredDescription
test_case_idstringYesUnique ID of the test case.
step_idstringYesUnique ID of the step.
hard_deletebooleanNoSet to true to delete permanently instead of archiving.

Checklist configuration1#

Read how the checklist framework is set up for the account.

POST/checklists/configGet checklist configuration
POST/api/v1/partner/checklists/config

Returns the checklist settings for the account, optionally narrowed to one work item type.

NameTypeRequiredDescription
work_item_typestringNoOne of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program.

Checklist groups4#

Manage the account level catalogue of checklist groups.

POST/checklists/groups/listList checklist groups
POST/api/v1/partner/checklists/groups/list

Returns the checklist groups in the account catalogue.

NameTypeRequiredDescription
active_onlybooleanNoReturn only active groups.
POST/checklists/groups/createCreate a checklist group
POST/api/v1/partner/checklists/groups/create

Adds a new checklist group to the account catalogue.

NameTypeRequiredDescription
namestringYesGroup name. Max 255 characters.
colorstringNoColour code for the group. Max 16 characters.
is_activebooleanNoWhether the group is active.
POST/checklists/groups/updateUpdate a checklist group
POST/api/v1/partner/checklists/groups/update

Updates the fields you send on an existing checklist group.

NameTypeRequiredDescription
group_idintegerYesID of the checklist group.
namestringNoGroup name. Max 255 characters.
colorstringNoColour code for the group. Max 16 characters.
is_activebooleanNoWhether the group is active.
POST/checklists/groups/deleteDelete a checklist group
POST/api/v1/partner/checklists/groups/delete

Removes a checklist group from the account catalogue.

NameTypeRequiredDescription
group_idintegerYesID of the checklist group.

Checklist templates4#

Manage reusable checklist templates. A template belongs to a checklist group and holds a list of items.

POST/checklists/templates/listList checklist templates
POST/api/v1/partner/checklists/templates/list

Returns every checklist template in the account. This endpoint takes no parameters.

This endpoint takes no parameters. Send an empty object as the payload.

POST/checklists/templates/createCreate a checklist template
POST/api/v1/partner/checklists/templates/create

Adds a new checklist template, with its items, to a checklist group.

NameTypeRequiredDescription
checklist_group_idintegerYesID of the checklist group.
namestringYesTemplate name. Max 255 characters.
auto_attachbooleanNoAttach this template automatically when a matching work item is created.
is_activebooleanNoWhether the template is active.
itemsarrayNoThe checklist items in the template.
items.*.labelstringNoText of each item. Max 2000 characters. Required when items is sent.
POST/checklists/templates/updateUpdate a checklist template
POST/api/v1/partner/checklists/templates/update

Updates the fields you send on an existing checklist template.

NameTypeRequiredDescription
template_idintegerYesID of the checklist template.
checklist_group_idintegerNoID of the checklist group.
namestringNoTemplate name. Max 255 characters.
auto_attachbooleanNoAttach this template automatically when a matching work item is created.
is_activebooleanNoWhether the template is active.
itemsarrayNoThe checklist items in the template.
items.*.labelstringNoText of each item. Max 2000 characters. Required when items is sent.
POST/checklists/templates/deleteDelete a checklist template
POST/api/v1/partner/checklists/templates/delete

Removes a checklist template from the account.

NameTypeRequiredDescription
template_idintegerYesID of the checklist template.

Work item checklists11#

Read and edit the checklist attached to a single work item, such as a task, story, or defect. Groups and items here live on the work item itself, not in the account catalogue.

POST/work-items/checklist/detailGet a work item checklist
POST/api/v1/partner/work-items/checklist/detail

Returns the checklist groups, items, and completion counts for one work item.

NameTypeRequiredDescription
work_item_typestringYesOne of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program.
work_item_idintegerYesNumeric ID of the work item.
POST/work-items/checklist/items/addAdd a checklist item
POST/api/v1/partner/work-items/checklist/items/add

Adds one item to a checklist group on a work item.

NameTypeRequiredDescription
work_item_typestringYesOne of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program.
work_item_idintegerYesNumeric ID of the work item.
work_item_group_idintegerYesID of the checklist group on the work item.
labelstringYesText of the item. Max 2000 characters.
POST/work-items/checklist/items/updateUpdate a checklist item
POST/api/v1/partner/work-items/checklist/items/update

Changes the text of one checklist item.

NameTypeRequiredDescription
item_idintegerYesID of the checklist item.
labelstringYesNew text of the item. Max 2000 characters.
POST/work-items/checklist/items/deleteDelete a checklist item
POST/api/v1/partner/work-items/checklist/items/delete

Removes one checklist item from a work item.

NameTypeRequiredDescription
item_idintegerYesID of the checklist item.
POST/work-items/checklist/items/completeComplete a checklist item
POST/api/v1/partner/work-items/checklist/items/complete

Marks a checklist item as done, or reopens it.

NameTypeRequiredDescription
item_idintegerYesID of the checklist item.
is_completedbooleanNoTrue to mark the item done, false to reopen it.
POST/work-items/checklist/groups/addAdd a checklist group
POST/api/v1/partner/work-items/checklist/groups/add

Copies a group from the account catalogue onto a work item.

NameTypeRequiredDescription
work_item_typestringYesOne of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program.
work_item_idintegerYesNumeric ID of the work item.
source_group_idintegerYesID of the catalogue checklist group to copy.
POST/work-items/checklist/groups/create-customCreate a custom checklist group
POST/api/v1/partner/work-items/checklist/groups/create-custom

Creates a group that exists only on this work item, not in the account catalogue.

NameTypeRequiredDescription
work_item_typestringYesOne of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program.
work_item_idintegerYesNumeric ID of the work item.
namestringYesGroup name. Max 255 characters.
POST/work-items/checklist/groups/renameRename a checklist group
POST/api/v1/partner/work-items/checklist/groups/rename

Changes the name of a checklist group on a work item.

NameTypeRequiredDescription
work_item_group_idintegerYesID of the checklist group on the work item.
namestringYesNew group name. Max 255 characters.
POST/work-items/checklist/groups/deleteDelete a checklist group
POST/api/v1/partner/work-items/checklist/groups/delete

Removes a checklist group, and its items, from a work item.

NameTypeRequiredDescription
work_item_group_idintegerYesID of the checklist group on the work item.
POST/work-items/checklist/groups/reorderReorder checklist groups
POST/api/v1/partner/work-items/checklist/groups/reorder

Sets the order of the checklist groups on a work item.

NameTypeRequiredDescription
work_item_typestringYesOne of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program.
work_item_idintegerYesNumeric ID of the work item.
group_idsarrayYesGroup IDs in the new order. At least one is required.
group_ids.*integerYesEach entry is the ID of a checklist group.
POST/work-items/checklist/groups/add-from-templateAdd a checklist group from a template
POST/api/v1/partner/work-items/checklist/groups/add-from-template

Adds a group to a work item using a checklist template, including all of its items.

NameTypeRequiredDescription
work_item_typestringYesOne of: epic, feature, story, task, defect, test_scenario, test_case, test_defect, project, program.
work_item_idintegerYesNumeric ID of the work item.
template_idintegerYesID of the checklist template to apply.

Defects6#

Track defects raised against a project, and link them to test cases, test steps, or tasks.

POST/defects/listList defects
POST/api/v1/partner/defects/list

Returns a paginated list of defects, with optional filters.

NameTypeRequiredDescription
project_idstringNoUnique ID of the project.
statusstringNoDefect status. Max 50 characters.
prioritystringNoDefect priority. Max 50 characters.
severitystringNoDefect severity. Max 50 characters.
test_case_idstringNoUnique ID of a linked test case.
qstringNoSearch text. Max 255 characters.
pageintegerNoPage number. Starts at 1.
per_pageintegerNoResults per page. Between 1 and 100.
POST/defects/createCreate a defect
POST/api/v1/partner/defects/create

Raises a new defect in a project and returns it.

NameTypeRequiredDescription
project_idstringYesUnique ID of the project.
titlestringYesDefect title. Max 255 characters.
descriptionstringNoDefect description. Max 255 characters.
typestringNoDefect type. Max 50 characters.
prioritystringNoDefect priority. Max 50 characters.
severitystringNoDefect severity. Max 50 characters.
statusstringNoDefect status. Max 50 characters.
test_case_idstringNoUnique ID of the test case to link to.
test_step_idstringNoUnique ID of the test step to link to.
task_idstringNoUnique ID of the task to link to.
epic_idintegerNoID of the epic to link to.
feature_idintegerNoID of the feature to link to.
POST/defects/detailGet a defect
POST/api/v1/partner/defects/detail

Returns one defect by its unique ID.

NameTypeRequiredDescription
defect_idstringYesUnique ID of the defect.
POST/defects/updateUpdate a defect
POST/api/v1/partner/defects/update

Updates the fields you send on an existing defect. Fields you leave out are not changed.

NameTypeRequiredDescription
defect_idstringYesUnique ID of the defect.
titlestringNoDefect title. Max 255 characters.
descriptionstringNoDefect description. Max 255 characters.
typestringNoDefect type. Max 50 characters.
prioritystringNoDefect priority. Max 50 characters.
severitystringNoDefect severity. Max 50 characters.
statusstringNoDefect status. Max 50 characters.
epic_idintegerNoID of the epic to link to.
feature_idintegerNoID of the feature to link to.
POST/defects/linkLink a defect

Links a defect to a test case, a test step, or a task. Send at least one of the three.

NameTypeRequiredDescription
defect_idstringYesUnique ID of the defect.
test_case_idstringNoUnique ID of the test case. Required when test_step_id and task_id are both missing.
test_step_idstringNoUnique ID of the test step.
task_idstringNoUnique ID of the task.
POST/defects/statusSet defect status
POST/api/v1/partner/defects/status

Changes the status of a defect.

NameTypeRequiredDescription
defect_idstringYesUnique ID of the defect.
statusstringYesNew defect status. Max 50 characters.

Something wrong here?

If an endpoint behaves differently from what this page says, the page is probably out of date and we want to know. Email support@orangescrum.com with the endpoint and what you saw.

Looking to let an AI assistant work in Orangescrum instead of writing an integration? See the MCP server.