API reference
Issue tracking
/ v1/ orgs/ :orgId/ issues/ calendar/ agendaThe caller's dates between from and to (YYYY-MM-DD, at most 100 days); tzOffset in minutes east of UTC dates sprint boundaries.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).
Query parameters
fromstringrequiredMatches
^\d{4}-\d{2}-\d{2}$.tostringrequiredMatches
^\d{4}-\d{2}-\d{2}$.tzOffsetinteger-840–840. Coerced from a string.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/calendar/agenda?from=example&to=example' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
entries: {
id: string
kind: "due" | "start" | "sprintStart" | "sprintEnd" | "release"
date: string
title: string
key?: string
spaceKey: string
done?: boolean
url: string
}[]
}/ v1/ orgs/ :orgId/ issues/ calendar/ schedule/ :issueKeyBooks time for an issue in one of the caller's Mail calendars (a mailbox they're a member of; its default calendar unless calendarId): the event links back to the issue, and the issue lists the event. Guests aren't invited.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scopes
- issues:write, calendar:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
mailboxIdstringrequiredUp to 64 characters.
calendarIdstringUp to 64 characters.
startstringrequiredMatches
^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2})?$.endstringrequiredMatches
^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2})?$.timeZonestringrequired1–64 characters.
allDaybooleanDefault
false.titlestringUp to 500 characters. Trimmed.
Errors
403Calendars are for people.404Mailbox not found404Calendar not found
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/calendar/schedule/{issueKey}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"mailboxId": "<mailboxId>",
"start": "example",
"end": "example",
"timeZone": "example"
}'Response 201
{
event: {
eventId: string
calendarId: string
uid: string
version: number
summary: string
description: string
location: string
allDay: boolean
start: number
end: number
startLocal: string
endLocal: string
timeZone: string
organizer: null | {
email: string
name?: string
}
attendees: {
email: string
name?: string
role: "optional" | "required" | "chair" | "non-participant"
status: "accepted" | "delegated" | "tentative" | "needs-action" | "declined"
rsvp: boolean
kind: "unknown" | "resource" | "group" | "individual" | "room"
delegatedTo?: string[]
delegatedFrom?: string[]
}[]
isOrganizer: boolean
myStatus: null | "accepted" | "delegated" | "tentative" | "needs-action" | "declined"
status: "cancelled" | "confirmed" | "tentative"
busyStatus: "busy" | "free" | "tentative" | "oof" | "workingElsewhere"
sensitivity: "private" | "personal" | "normal" | "confidential"
reminders: number[]
categories: string[]
url: null | string
recurrence: null | {
count?: number
byDay?: {
day: "SA" | "SU" | "MO" | "TU" | "WE" | "TH" | "FR"
nth?: number
}[]
interval: number
weekStart?: "SA" | "SU" | "MO" | "TU" | "WE" | "TH" | "FR"
freq: "daily" | "weekly" | "monthly" | "yearly"
byMonthDay?: number[]
byMonth?: number[]
bySetPos?: number[]
until?: string
}
rrule: null | string
exceptions: {
recurrenceId: number
start: number
end: number
startLocal: string
endLocal: string
summary: string
location: string
status: "cancelled" | "confirmed" | "tentative"
myStatus: null | "accepted" | "delegated" | "tentative" | "needs-action" | "declined"
}[]
sequence: number
}
linkId: string
url: string
}/ v1/ orgs/ :orgId/ issues/ searchThe same search as GET /issues with the query in the body (long queries).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).
Request body
jqlstringDefault
"". Up to 10,000 characters.startAtintegerDefault
0. 0–100000. Coerced from a string.maxResultsintegerDefault
50. 1–1000. Coerced from a string.order"rank" | "updated" | "created" | "key"
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/search' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"jql": "",
"startAt": 0,
"maxResults": 50
}'Response 200
{
issues: {
orgId: string
issueId: string
spaceId: string
number: number
key: string
typeId: string
summary: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
statusChangedAt?: number
resolutionId?: string
resolvedAt?: number
priorityId?: string
assigneeId?: string
reporterId?: string
creatorId?: string
labels: string[]
componentIds: string[]
fixVersionIds: string[]
affectsVersionIds: string[]
dueDate?: string
startDate?: string
storyPoints?: number
originalEstimate?: number
remainingEstimate?: number
timeSpent?: number
environment?: string
location?: {
lat: number
lon: number
label?: string
}
parentId?: string
sprintId?: string
closedSprintIds: string[]
rank: string
watchers: string[]
voters: string[]
securityLevelId?: string
fields: {
[key: string]: boolean | null | string | number | string[] | {
parent: string
child?: string
}
}
excerpt: string
statusLog: [string, number][]
commentCount: number
attachmentCount: number
requestTypeId?: string
channel?: string
participants: string[]
requesterEmail?: string
emailParticipants: string[]
approvals: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
satisfaction?: number
satisfactionComment?: string
sla: {
[key: string]: {
runningSince?: number
elapsed: number
paused?: boolean
stopped?: boolean
goal?: number
calendar: "business" | "always"
breached?: boolean
startedAt?: number
stoppedAt?: number
}
}
version: number
createdAt: number
updatedAt: number
}[]
total: number
startAt: number
maxResults: number
scanned: number
}/ v1/ orgs/ :orgId/ issues/ links/ amongLinks among up to 500 issues (by id), each once from its outward side: timeline dependencies.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).
Request body
issuesstring[]requiredUp to 500 items. Each up to 64 characters.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/links/among' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"issues": [
"example"
]
}'Response 200
{
links: {
linkId: string
typeId: string
label: string
from: string
to: string
fromKey: string
toKey: string
}[]
}/ v1/ orgs/ :orgId/ issuesSearches with the query language (jql), paged. Default order: most recently updated.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).
Query parameters
jqlstringDefault
"". Up to 10,000 characters.startAtintegerDefault
0. 0–100000. Coerced from a string.maxResultsintegerDefault
50. 1–1000. Coerced from a string.order"rank" | "updated" | "created" | "key"
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
issues: {
orgId: string
issueId: string
spaceId: string
number: number
key: string
typeId: string
summary: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
statusChangedAt?: number
resolutionId?: string
resolvedAt?: number
priorityId?: string
assigneeId?: string
reporterId?: string
creatorId?: string
labels: string[]
componentIds: string[]
fixVersionIds: string[]
affectsVersionIds: string[]
dueDate?: string
startDate?: string
storyPoints?: number
originalEstimate?: number
remainingEstimate?: number
timeSpent?: number
environment?: string
location?: {
lat: number
lon: number
label?: string
}
parentId?: string
sprintId?: string
closedSprintIds: string[]
rank: string
watchers: string[]
voters: string[]
securityLevelId?: string
fields: {
[key: string]: boolean | null | string | number | string[] | {
parent: string
child?: string
}
}
excerpt: string
statusLog: [string, number][]
commentCount: number
attachmentCount: number
requestTypeId?: string
channel?: string
participants: string[]
requesterEmail?: string
emailParticipants: string[]
approvals: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
satisfaction?: number
satisfactionComment?: string
sla: {
[key: string]: {
runningSince?: number
elapsed: number
paused?: boolean
stopped?: boolean
goal?: number
calendar: "business" | "always"
breached?: boolean
startedAt?: number
stoppedAt?: number
}
}
version: number
createdAt: number
updatedAt: number
}[]
total: number
startAt: number
maxResults: number
scanned: number
}/ v1/ orgs/ :orgId/ issues/ exportIssues matching a query as a CSV (Jira-style columns) or JSON download, up to 10,000.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).
Query parameters
jqlstringDefault
"". Up to 10,000 characters.format"csv" | "json"Default
"csv".
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/export' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200 with no body
/ v1/ orgs/ :orgId/ issues/ importImports a Jira CSV export (or this API's JSON export) into a space, 200 rows per call: pass startRow and keyMap from the previous answer until done. Space admins only.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).
Request body (up to 5,120 KB)
spacestringrequired1–64 characters.
format"csv" | "json"requiredcontentstringrequired1–5,242,880 characters.
startRowinteger≥ 0.
keyMapobjectKeys up to 64 characters. Values: string (up to 64 characters).
createMissingboolean
Errors
413Import files can be up to 5 MB.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/import' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"space": "example",
"format": "csv",
"content": "example"
}'Response 200
{
total: number
processed: number
done: boolean
nextRow: null | number
keyMap: {
[key: string]: string
}
results: {
row: number
key?: string
from?: string
error?: string
warnings?: string[]
}[]
}/ v1/ orgs/ :orgId/ issues/ placesPlaces for an issue's location (docs/tasks/locations.md): up to 5 named like q (3 to 200 characters), nearest near (lat,lon) first. Shown to pick from, never kept: saving { address } looks the pick up again as a place to keep. Counts against the hour's address lookups (maps.places.searchHour); 429 past it.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).
Query parameters
qstringrequiredUp to 200 characters.
nearstringMatches
^-?\d{1,2}(\.\d+)?,-?\d{1,3}(\.\d+)?$.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/places?q=example' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
places: {
name: string
detail?: string
lat: number
lon: number
}[]
}/ v1/ orgs/ :orgId/ issues/ labelsLabels in use (most used first), for suggestions; space narrows to one space.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).
Query parameters
spacestringUp to 64 characters.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/labels' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
labels: string[]
}/ v1/ orgs/ :orgId/ issuesCreates an issue. Catalog fields take names or ids, people take ids or emails, parent an issue key.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).
Request body
typestringUp to 80 characters.
summarystringUp to 255 characters.
descriptionstringUp to 65,536 characters.
prioritystringor nullUp to 80 characters.
assigneestringor nullUp to 320 characters.
reporterstringor nullUp to 320 characters.
labelsstring[]Up to 30 items. Each up to 64 characters.
componentsstring[]Up to 50 items. Each up to 100 characters.
fixVersionsstring[]Up to 50 items. Each up to 100 characters.
affectsVersionsstring[]Up to 50 items. Each up to 100 characters.
dueDatestringor nullMatches
^\d{4}-\d{2}-\d{2}$.startDatestringor nullMatches
^\d{4}-\d{2}-\d{2}$.storyPointsnumberor null0–10000.
originalEstimatenumber | stringor null0–315360000. Up to 40 characters.
remainingEstimatenumber | stringor null0–315360000. Up to 40 characters.
environmentstringor nullUp to 32,768 characters.
locationobject | objector nullparentstringor nullUp to 64 characters.
sprintstringor nullUp to 100 characters.
securityLevelstringor nullUp to 80 characters.
resolutionstringor nullUp to 80 characters.
fieldsobjectKeys up to 100 characters. Values: any JSON.
requestTypestringUp to 80 characters.
participantsstring[]Up to 100 items. Each up to 320 characters.
spacestringrequired1–64 characters.
summarystringrequired1–255 characters. Trimmed.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"space": "example",
"summary": "Example"
}'Response 201
{
issue: {
orgId: string
issueId: string
spaceId: string
number: number
key: string
typeId: string
summary: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
statusChangedAt?: number
resolutionId?: string
resolvedAt?: number
priorityId?: string
assigneeId?: string
reporterId?: string
creatorId?: string
labels: string[]
componentIds: string[]
fixVersionIds: string[]
affectsVersionIds: string[]
dueDate?: string
startDate?: string
storyPoints?: number
originalEstimate?: number
remainingEstimate?: number
timeSpent?: number
environment?: string
location?: {
lat: number
lon: number
label?: string
}
parentId?: string
sprintId?: string
closedSprintIds: string[]
rank: string
watchers: string[]
voters: string[]
securityLevelId?: string
fields: {
[key: string]: boolean | null | string | number | string[] | {
parent: string
child?: string
}
}
excerpt: string
statusLog: [string, number][]
commentCount: number
attachmentCount: number
requestTypeId?: string
channel?: string
participants: string[]
requesterEmail?: string
emailParticipants: string[]
approvals: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
satisfaction?: number
satisfactionComment?: string
sla: {
[key: string]: {
runningSince?: number
elapsed: number
paused?: boolean
stopped?: boolean
goal?: number
calendar: "business" | "always"
breached?: boolean
startedAt?: number
stoppedAt?: number
}
}
version: number
createdAt: number
updatedAt: number
}
}/ v1/ orgs/ :orgId/ issues/ rankReorders issues: puts them (in order) right before or after another issue.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).
Request body
issuesstring[]required1–200 items. Each up to 64 characters.
beforestringUp to 64 characters.
afterstringUp to 64 characters.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/rank' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"issues": [
"example"
]
}'Response 200
{
issues: {
issueId: string
key: string
rank: string
}[]
}/ v1/ orgs/ :orgId/ issues/ bulkRuns one operation (edit, labels, transition, comment, move, delete, watch, unwatch) on up to 200 issues; each reports its own result.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).
Request body
issuesstring[]required1–200 items. Each up to 64 characters.
operation"edit" | "labels" | "transition" | "comment" | "move" | "delete" | "watch" | "unwatch"requiredfieldsobjectfields.typestringUp to 80 characters.
fields.summarystringUp to 255 characters.
fields.descriptionstringUp to 65,536 characters.
fields.prioritystringor nullUp to 80 characters.
fields.assigneestringor nullUp to 320 characters.
fields.reporterstringor nullUp to 320 characters.
fields.labelsstring[]Up to 30 items. Each up to 64 characters.
fields.componentsstring[]Up to 50 items. Each up to 100 characters.
fields.fixVersionsstring[]Up to 50 items. Each up to 100 characters.
fields.affectsVersionsstring[]Up to 50 items. Each up to 100 characters.
fields.dueDatestringor nullMatches
^\d{4}-\d{2}-\d{2}$.fields.startDatestringor nullMatches
^\d{4}-\d{2}-\d{2}$.fields.storyPointsnumberor null0–10000.
fields.originalEstimatenumber | stringor null0–315360000. Up to 40 characters.
fields.remainingEstimatenumber | stringor null0–315360000. Up to 40 characters.
fields.environmentstringor nullUp to 32,768 characters.
fields.locationobject | objector nullfields.parentstringor nullUp to 64 characters.
fields.sprintstringor nullUp to 100 characters.
fields.securityLevelstringor nullUp to 80 characters.
fields.resolutionstringor nullUp to 80 characters.
fields.fieldsobjectKeys up to 100 characters. Values: any JSON.
fields.requestTypestringUp to 80 characters.
fields.participantsstring[]Up to 100 items. Each up to 320 characters.
transitionstringUp to 80 characters.
commentstringUp to 32,768 characters.
addLabelsstring[]Up to 30 items. Each up to 255 characters.
removeLabelsstring[]Up to 30 items. Each up to 255 characters.
spacestringUp to 64 characters.
typestringUp to 80 characters.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/bulk' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"issues": [
"example"
],
"operation": "edit"
}'Response 200
{
results: {
issue: string
ok: true
} | {
issue: string
ok: false
error: string
}[]
done: number
failed: number
}/ v1/ orgs/ :orgId/ issues/ :issueKeyEverything the issue page shows: fields, description, comments, links, attachments, children, transitions.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Query parameters
remember"0" | "1"
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
issue: {
orgId: string
issueId: string
spaceId: string
number: number
key: string
typeId: string
summary: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
statusChangedAt?: number
resolutionId?: string
resolvedAt?: number
priorityId?: string
assigneeId?: string
reporterId?: string
creatorId?: string
labels: string[]
componentIds: string[]
fixVersionIds: string[]
affectsVersionIds: string[]
dueDate?: string
startDate?: string
storyPoints?: number
originalEstimate?: number
remainingEstimate?: number
timeSpent?: number
environment?: string
location?: {
lat: number
lon: number
label?: string
}
parentId?: string
sprintId?: string
closedSprintIds: string[]
rank: string
watchers: string[]
voters: string[]
securityLevelId?: string
fields: {
[key: string]: boolean | null | string | number | string[] | {
parent: string
child?: string
}
}
excerpt: string
statusLog: [string, number][]
commentCount: number
attachmentCount: number
requestTypeId?: string
channel?: string
participants: string[]
requesterEmail?: string
emailParticipants: string[]
approvals: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
satisfaction?: number
satisfactionComment?: string
sla: {
[key: string]: {
runningSince?: number
elapsed: number
paused?: boolean
stopped?: boolean
goal?: number
calendar: "business" | "always"
breached?: boolean
startedAt?: number
stoppedAt?: number
}
}
version: number
createdAt: number
updatedAt: number
}
space: {
spaceId: string
key: string
name: string
template: "basic" | "service" | "scrum" | "kanban" | "bugs"
icon?: string
color?: string
leadId?: string
archived: boolean
}
description: string
comments: {
commentId: string
issueId: string
body: string
authorId: string
authorType: string
visibility: "public" | "internal"
mentions: string[]
reactions: {
[key: string]: string[]
}
editedAt?: number
createdAt: number
updatedAt: number
}[]
links: {
issue: {
issueId: string
key: string
summary: string
typeId: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
priorityId?: string
assigneeId?: string
}
linkId: string
typeId: string
direction: "outward" | "inward"
label: string
}[]
remoteLinks: {
linkId: string
kind: "deployment" | "branch" | "pull" | "event" | "commit" | "page" | "web"
url?: string
title: string
ref?: string
meta: {
[key: string]: unknown
}
createdBy?: string
createdAt: number
updatedAt: number
}[]
attachments: {
attachmentId: string
name: string
size: number
contentType: string
uploadedBy: string
createdAt: number
}[]
children: {
issueId: string
key: string
summary: string
typeId: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
priorityId?: string
assigneeId?: string
}[]
parent?: {
issueId: string
key: string
summary: string
typeId: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
priorityId?: string
assigneeId?: string
}
worklogs: {
worklogId: string
issueId: string
spaceId: string
authorId: string
started: number
seconds: number
comment: string
createdAt: number
updatedAt: number
}[]
transitions: {
id: string
name: string
to: string
toName: string
toCategory: string
fields: string[]
blocked?: string
}[]
workflow: {
workflowId: string
name: string
}
sla: {
elapsed: number
remaining?: number
breached: boolean
running: boolean
paused: boolean
stopped: boolean
breachAt?: number
id: string
name: string
goalMinutes?: number
calendar: "business" | "always"
}[]
approvals: {
approverNames: {
userId: string
name: string
}[]
mine: boolean
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
permissions: {
edit: boolean
delete: boolean
link?: boolean
move?: boolean
comment?: boolean
worklog?: boolean
create?: boolean
browse?: boolean
editOwn?: boolean
transition?: boolean
assign?: boolean
assignable?: boolean
deleteOwn?: boolean
editComments?: boolean
deleteComments?: boolean
attach?: boolean
deleteAttachments?: boolean
manageWatchers?: boolean
manageSprints?: boolean
administer?: boolean
serviceAgent?: boolean
}
}/ v1/ orgs/ :orgId/ issues/ :issueKeyEdits fields (status changes go through transitions).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
typestringUp to 80 characters.
summarystringUp to 255 characters.
descriptionstringUp to 65,536 characters.
prioritystringor nullUp to 80 characters.
assigneestringor nullUp to 320 characters.
reporterstringor nullUp to 320 characters.
labelsstring[]Up to 30 items. Each up to 64 characters.
componentsstring[]Up to 50 items. Each up to 100 characters.
fixVersionsstring[]Up to 50 items. Each up to 100 characters.
affectsVersionsstring[]Up to 50 items. Each up to 100 characters.
dueDatestringor nullMatches
^\d{4}-\d{2}-\d{2}$.startDatestringor nullMatches
^\d{4}-\d{2}-\d{2}$.storyPointsnumberor null0–10000.
originalEstimatenumber | stringor null0–315360000. Up to 40 characters.
remainingEstimatenumber | stringor null0–315360000. Up to 40 characters.
environmentstringor nullUp to 32,768 characters.
locationobject | objector nullparentstringor nullUp to 64 characters.
sprintstringor nullUp to 100 characters.
securityLevelstringor nullUp to 80 characters.
resolutionstringor nullUp to 80 characters.
fieldsobjectKeys up to 100 characters. Values: any JSON.
requestTypestringUp to 80 characters.
participantsstring[]Up to 100 items. Each up to 320 characters.
curl -X PATCH 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"type": "example",
"summary": "Example",
"description": "example"
}'Response 200
{
issue: {
orgId: string
issueId: string
spaceId: string
number: number
key: string
typeId: string
summary: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
statusChangedAt?: number
resolutionId?: string
resolvedAt?: number
priorityId?: string
assigneeId?: string
reporterId?: string
creatorId?: string
labels: string[]
componentIds: string[]
fixVersionIds: string[]
affectsVersionIds: string[]
dueDate?: string
startDate?: string
storyPoints?: number
originalEstimate?: number
remainingEstimate?: number
timeSpent?: number
environment?: string
location?: {
lat: number
lon: number
label?: string
}
parentId?: string
sprintId?: string
closedSprintIds: string[]
rank: string
watchers: string[]
voters: string[]
securityLevelId?: string
fields: {
[key: string]: boolean | null | string | number | string[] | {
parent: string
child?: string
}
}
excerpt: string
statusLog: [string, number][]
commentCount: number
attachmentCount: number
requestTypeId?: string
channel?: string
participants: string[]
requesterEmail?: string
emailParticipants: string[]
approvals: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
satisfaction?: number
satisfactionComment?: string
sla: {
[key: string]: {
runningSince?: number
elapsed: number
paused?: boolean
stopped?: boolean
goal?: number
calendar: "business" | "always"
breached?: boolean
startedAt?: number
stoppedAt?: number
}
}
version: number
createdAt: number
updatedAt: number
}
changes: {
field: string
from?: unknown
to?: unknown
fromText?: string
toText?: string
}[]
}/ v1/ orgs/ :orgId/ issues/ :issueKeyDeletes an issue with its comments, attachments, work logs and subtasks.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
issueId: string
key: string
subtasks: number
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ transitionsTransitions available from the issue's status, with the reason when a condition blocks one.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/transitions' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
transitions: {
id: string
name: string
to: string
toName: string
toCategory: string
fields: string[]
blocked?: string
}[]
workflow: {
workflowId: string
name: string
definition: {
initialStatusId: string
statuses: {
statusId: string
x?: number
y?: number
}[]
transitions: {
id: string
name: string
from: string[]
to: string
fields?: string[]
conditions?: {
type: "orgRole"
roles: object
} | {
type: "spaceRole"
roles: object
} | {
type: "assignee"
} | {
type: "reporter"
} | {
type: "permission"
permission: "link" | "move" | "edit" | "comment" | "worklog" | "delete" | "create" | "browse" | "editOwn" | "transition" | "assign" | "assignable" | "deleteOwn" | "editComments" | "deleteComments" | "attach" | "deleteAttachments" | "manageWatchers" | "manageSprints" | "administer" | "serviceAgent"
} | {
type: "fieldSet"
field: string
} | {
type: "subtasksDone"
}[]
validators?: {
type: "required"
fields: object
message?: string
} | {
type: "query"
query: string
message: string
}[]
postFunctions?: {
type: "assign"
to: "reporter" | "currentUser" | "lead" | "unassigned"
} | {
type: "setResolution"
resolutionId: null | string
} | {
type: "setField"
field: string
value: unknown
} | {
type: "clearField"
field: string
} | {
type: "comment"
body: string
}[]
}[]
autoResolution?: boolean
}
}
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ transitionsMoves the issue through its workflow (by transition id or name, or the target status name).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
transitionstringrequired1–80 characters.
fieldsobjectfields.typestringUp to 80 characters.
fields.summarystringUp to 255 characters.
fields.descriptionstringUp to 65,536 characters.
fields.prioritystringor nullUp to 80 characters.
fields.assigneestringor nullUp to 320 characters.
fields.reporterstringor nullUp to 320 characters.
fields.labelsstring[]Up to 30 items. Each up to 64 characters.
fields.componentsstring[]Up to 50 items. Each up to 100 characters.
fields.fixVersionsstring[]Up to 50 items. Each up to 100 characters.
fields.affectsVersionsstring[]Up to 50 items. Each up to 100 characters.
fields.dueDatestringor nullMatches
^\d{4}-\d{2}-\d{2}$.fields.startDatestringor nullMatches
^\d{4}-\d{2}-\d{2}$.fields.storyPointsnumberor null0–10000.
fields.originalEstimatenumber | stringor null0–315360000. Up to 40 characters.
fields.remainingEstimatenumber | stringor null0–315360000. Up to 40 characters.
fields.environmentstringor nullUp to 32,768 characters.
fields.locationobject | objector nullfields.parentstringor nullUp to 64 characters.
fields.sprintstringor nullUp to 100 characters.
fields.securityLevelstringor nullUp to 80 characters.
fields.resolutionstringor nullUp to 80 characters.
fields.fieldsobjectKeys up to 100 characters. Values: any JSON.
fields.requestTypestringUp to 80 characters.
fields.participantsstring[]Up to 100 items. Each up to 320 characters.
commentstringUp to 32,768 characters.
commentVisibility"public" | "internal"
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/transitions' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"transition": "example"
}'Response 200
{
issue: {
orgId: string
issueId: string
spaceId: string
number: number
key: string
typeId: string
summary: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
statusChangedAt?: number
resolutionId?: string
resolvedAt?: number
priorityId?: string
assigneeId?: string
reporterId?: string
creatorId?: string
labels: string[]
componentIds: string[]
fixVersionIds: string[]
affectsVersionIds: string[]
dueDate?: string
startDate?: string
storyPoints?: number
originalEstimate?: number
remainingEstimate?: number
timeSpent?: number
environment?: string
location?: {
lat: number
lon: number
label?: string
}
parentId?: string
sprintId?: string
closedSprintIds: string[]
rank: string
watchers: string[]
voters: string[]
securityLevelId?: string
fields: {
[key: string]: boolean | null | string | number | string[] | {
parent: string
child?: string
}
}
excerpt: string
statusLog: [string, number][]
commentCount: number
attachmentCount: number
requestTypeId?: string
channel?: string
participants: string[]
requesterEmail?: string
emailParticipants: string[]
approvals: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
satisfaction?: number
satisfactionComment?: string
sla: {
[key: string]: {
runningSince?: number
elapsed: number
paused?: boolean
stopped?: boolean
goal?: number
calendar: "business" | "always"
breached?: boolean
startedAt?: number
stoppedAt?: number
}
}
version: number
createdAt: number
updatedAt: number
}
changes: {
field: string
from?: unknown
to?: unknown
fromText?: string
toText?: string
}[]
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ approvals/ :approvalIdApproves or declines a service request as one of its approvers; a final decision moves it on.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).approvalIdApproval id (
apr_…): an issue's, from itsapprovals; under/v1/me/sign-in-approvalsa sign-in request.
Request body
decision"approve" | "decline"required
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/approvals/{approvalId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"decision": "approve"
}'Response 200
{
approval: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}
issue: {
orgId: string
issueId: string
spaceId: string
number: number
key: string
typeId: string
summary: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
statusChangedAt?: number
resolutionId?: string
resolvedAt?: number
priorityId?: string
assigneeId?: string
reporterId?: string
creatorId?: string
labels: string[]
componentIds: string[]
fixVersionIds: string[]
affectsVersionIds: string[]
dueDate?: string
startDate?: string
storyPoints?: number
originalEstimate?: number
remainingEstimate?: number
timeSpent?: number
environment?: string
location?: {
lat: number
lon: number
label?: string
}
parentId?: string
sprintId?: string
closedSprintIds: string[]
rank: string
watchers: string[]
voters: string[]
securityLevelId?: string
fields: {
[key: string]: boolean | null | string | number | string[] | {
parent: string
child?: string
}
}
excerpt: string
statusLog: [string, number][]
commentCount: number
attachmentCount: number
requestTypeId?: string
channel?: string
participants: string[]
requesterEmail?: string
emailParticipants: string[]
approvals: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
satisfaction?: number
satisfactionComment?: string
sla: {
[key: string]: {
runningSince?: number
elapsed: number
paused?: boolean
stopped?: boolean
goal?: number
calendar: "business" | "always"
breached?: boolean
startedAt?: number
stoppedAt?: number
}
}
version: number
createdAt: number
updatedAt: number
}
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ moveMoves the issue (and its subtasks) to another space under a new key; the old key keeps working.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
spacestringrequired1–64 characters.
typestringUp to 80 characters.
statusstringUp to 80 characters.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/move' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"space": "example"
}'Response 200
{
issue: {
orgId: string
issueId: string
spaceId: string
number: number
key: string
typeId: string
summary: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
statusChangedAt?: number
resolutionId?: string
resolvedAt?: number
priorityId?: string
assigneeId?: string
reporterId?: string
creatorId?: string
labels: string[]
componentIds: string[]
fixVersionIds: string[]
affectsVersionIds: string[]
dueDate?: string
startDate?: string
storyPoints?: number
originalEstimate?: number
remainingEstimate?: number
timeSpent?: number
environment?: string
location?: {
lat: number
lon: number
label?: string
}
parentId?: string
sprintId?: string
closedSprintIds: string[]
rank: string
watchers: string[]
voters: string[]
securityLevelId?: string
fields: {
[key: string]: boolean | null | string | number | string[] | {
parent: string
child?: string
}
}
excerpt: string
statusLog: [string, number][]
commentCount: number
attachmentCount: number
requestTypeId?: string
channel?: string
participants: string[]
requesterEmail?: string
emailParticipants: string[]
approvals: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
satisfaction?: number
satisfactionComment?: string
sla: {
[key: string]: {
runningSince?: number
elapsed: number
paused?: boolean
stopped?: boolean
goal?: number
calendar: "business" | "always"
breached?: boolean
startedAt?: number
stoppedAt?: number
}
}
version: number
createdAt: number
updatedAt: number
}
from: string
subtasks: number
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ cloneCopies an issue (optionally with subtasks and links) and links the copy to the original.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
summarystring1–255 characters. Trimmed.
subtasksbooleanlinksboolean
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/clone' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"summary": "Example",
"subtasks": true,
"links": true
}'Response 201
{
issue: {
orgId: string
issueId: string
spaceId: string
number: number
key: string
typeId: string
summary: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
statusChangedAt?: number
resolutionId?: string
resolvedAt?: number
priorityId?: string
assigneeId?: string
reporterId?: string
creatorId?: string
labels: string[]
componentIds: string[]
fixVersionIds: string[]
affectsVersionIds: string[]
dueDate?: string
startDate?: string
storyPoints?: number
originalEstimate?: number
remainingEstimate?: number
timeSpent?: number
environment?: string
location?: {
lat: number
lon: number
label?: string
}
parentId?: string
sprintId?: string
closedSprintIds: string[]
rank: string
watchers: string[]
voters: string[]
securityLevelId?: string
fields: {
[key: string]: boolean | null | string | number | string[] | {
parent: string
child?: string
}
}
excerpt: string
statusLog: [string, number][]
commentCount: number
attachmentCount: number
requestTypeId?: string
channel?: string
participants: string[]
requesterEmail?: string
emailParticipants: string[]
approvals: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
satisfaction?: number
satisfactionComment?: string
sla: {
[key: string]: {
runningSince?: number
elapsed: number
paused?: boolean
stopped?: boolean
goal?: number
calendar: "business" | "always"
breached?: boolean
startedAt?: number
stoppedAt?: number
}
}
version: number
createdAt: number
updatedAt: number
}
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ childrenChild issues (subtasks, or stories of an epic).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/children' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
issues: {
issueId: string
key: string
summary: string
typeId: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
priorityId?: string
assigneeId?: string
}[]
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ historyField changes, newest first.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/history' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
history: {
changeId: string
actorId: string
actorType: string
at: number
items: {
field: string
from?: unknown
to?: unknown
fromText?: string
toText?: string
}[]
}[]
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ commentsComments, oldest first (order=desc for newest first). Internal comments only for agents.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Query parameters
order"asc" | "desc"
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/comments' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
comments: {
commentId: string
issueId: string
body: string
authorId: string
authorType: string
visibility: "public" | "internal"
mentions: string[]
reactions: {
[key: string]: string[]
}
editedAt?: number
createdAt: number
updatedAt: number
}[]
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ commentsAdds a comment (Markdown; mention people as @[Name](user:usr_…)). Internal comments are for service desk agents.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
bodystringrequired1–32,768 characters.
visibility"public" | "internal"
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/comments' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"body": "example"
}'Response 201
{
comment: {
commentId: string
issueId: string
body: string
authorId: string
authorType: string
visibility: "public" | "internal"
mentions: string[]
reactions: {
[key: string]: string[]
}
editedAt?: number
createdAt: number
updatedAt: number
}
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ comments/ :commentIdEdits a comment (the previous body is kept as a revision) or changes its visibility.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).commentIdComment id (
icm_…).
Request body
bodystring1–32,768 characters.
visibility"public" | "internal"
curl -X PATCH 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/comments/{commentId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"body": "example",
"visibility": "public"
}'Response 200
{
comment: {
commentId: string
issueId: string
body: string
authorId: string
authorType: string
visibility: "public" | "internal"
mentions: string[]
reactions: {
[key: string]: string[]
}
editedAt?: number
createdAt: number
updatedAt: number
}
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ comments/ :commentIdDeletes a comment.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).commentIdComment id (
icm_…).
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/comments/{commentId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
commentId: string
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ comments/ :commentId/ revisionsEarlier versions of an edited comment.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).commentIdComment id (
icm_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/comments/{commentId}/revisions' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
revisions: {
body: string
at: number
}[]
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ comments/ :commentId/ reactionsToggles the caller's reaction.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).commentIdComment id (
icm_…).
Request body
emojistringrequired1–16 characters.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/comments/{commentId}/reactions' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"emoji": "example"
}'Response 200
{
reactions: {
[key: string]: string[]
}
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ linksIssue links and remote links (web pages, Notes pages, branches, commits, pull requests, deployments).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/links' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
links: {
issue: {
issueId: string
key: string
summary: string
typeId: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
priorityId?: string
assigneeId?: string
}
linkId: string
typeId: string
direction: "outward" | "inward"
label: string
}[]
remoteLinks: {
linkId: string
kind: "deployment" | "branch" | "pull" | "event" | "commit" | "page" | "web"
url?: string
title: string
ref?: string
meta: {
[key: string]: unknown
}
createdBy?: string
createdAt: number
updatedAt: number
}[]
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ linksLinks to another issue by link type (id, name, or either direction's wording, e.g. "is blocked by").
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
typestringrequired1–80 characters.
issuestringrequired1–64 characters.
inwardboolean
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/links' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"type": "example",
"issue": "example"
}'Response 201
{
linkId: string
typeId: string
source: string
target: string
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ links/ :linkIdRemoves a link from both issues.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).linkIdLink id (
ilk_…for issue links,irl_…for remote links,plk_…for Photos links,lnk_…for sharing links and a drive's share links: not the link's secret).
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/links/{linkId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
linkId: string
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ remote-linksLinks a web page or Notes page.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
urlstringrequiredUp to 2,000 characters. URL.
titlestringUp to 200 characters.
kind"web" | "page"
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/remote-links' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"url": "https://example.com"
}'Response 201
{
linkId: string
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ remote-links/ :linkIdRemoves a remote link.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).linkIdLink id (
ilk_…for issue links,irl_…for remote links,plk_…for Photos links,lnk_…for sharing links and a drive's share links: not the link's secret).
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/remote-links/{linkId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
linkId: string
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ attachmentsAttachments.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/attachments' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
attachments: {
attachmentId: string
name: string
size: number
contentType: string
uploadedBy: string
createdAt: number
}[]
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ attachmentsStarts an upload: returns a presigned PUT (15 minutes, size and type signed). Finish with /complete.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
namestringrequired1–255 characters.
sizeintegerrequired≥ 1.
contentTypestringUp to 200 characters.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/attachments' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"size": 1
}'Response 201
{
attachmentId: string
uploadUrl: string
headers: {
"content-type": string
}
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ attachments/ :attachmentId/ completeFinishes an upload once the file is in place.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).attachmentIdAttachment id (
att_…).
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/attachments/{attachmentId}/complete' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
attachmentId: string
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ attachments/ :attachmentIdA 5-minute download link (inline=1 opens images, PDFs and plain text in the browser).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).attachmentIdAttachment id (
att_…).
Query parameters
inline"0" | "1"
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/attachments/{attachmentId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
url: string
name: string
contentType: string
size: number
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ attachments/ :attachmentIdDeletes an attachment and its file.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).attachmentIdAttachment id (
att_…).
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/attachments/{attachmentId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
attachmentId: string
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ worklogsWork logs.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:read
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/worklogs' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
worklogs: {
worklogId: string
issueId: string
spaceId: string
authorId: string
started: number
seconds: number
comment: string
createdAt: number
updatedAt: number
}[]
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ worklogsLogs work ("1h 30m" or seconds); the remaining estimate goes down unless told otherwise.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
timeSpentinteger | stringrequired60–604800. 1–40 characters.
startedintegercommentstringUp to 4,000 characters.
remainingobject | object | object
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/worklogs' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"timeSpent": 1
}'Response 201
{
worklogId: string
issue: {
orgId: string
issueId: string
spaceId: string
number: number
key: string
typeId: string
summary: string
statusId: string
statusCategory: "done" | "todo" | "inprogress"
statusChangedAt?: number
resolutionId?: string
resolvedAt?: number
priorityId?: string
assigneeId?: string
reporterId?: string
creatorId?: string
labels: string[]
componentIds: string[]
fixVersionIds: string[]
affectsVersionIds: string[]
dueDate?: string
startDate?: string
storyPoints?: number
originalEstimate?: number
remainingEstimate?: number
timeSpent?: number
environment?: string
location?: {
lat: number
lon: number
label?: string
}
parentId?: string
sprintId?: string
closedSprintIds: string[]
rank: string
watchers: string[]
voters: string[]
securityLevelId?: string
fields: {
[key: string]: boolean | null | string | number | string[] | {
parent: string
child?: string
}
}
excerpt: string
statusLog: [string, number][]
commentCount: number
attachmentCount: number
requestTypeId?: string
channel?: string
participants: string[]
requesterEmail?: string
emailParticipants: string[]
approvals: {
id: string
statusId: string
approvers: string[]
needed: "all" | "one"
decisions: {
userId: string
decision: "approved" | "declined"
at: number
}[]
state: "pending" | "approved" | "declined"
createdAt: number
decidedAt?: number
}[]
satisfaction?: number
satisfactionComment?: string
sla: {
[key: string]: {
runningSince?: number
elapsed: number
paused?: boolean
stopped?: boolean
goal?: number
calendar: "business" | "always"
breached?: boolean
startedAt?: number
stoppedAt?: number
}
}
version: number
createdAt: number
updatedAt: number
}
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ worklogs/ :worklogIdChanges a work log.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).worklogIdWork log id (
wlg_…).
Request body
timeSpentinteger | string60–604800. 1–40 characters.
startedintegercommentstringUp to 4,000 characters.
curl -X PATCH 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/worklogs/{worklogId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"timeSpent": 1,
"started": 1,
"comment": "example"
}'Response 200
{
worklogId: string
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ worklogs/ :worklogIdDeletes a work log (its time goes back on the remaining estimate).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).worklogIdWork log id (
wlg_…).
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/worklogs/{worklogId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
worklogId: string
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ watchersStarts or stops watching (the caller, or someone else with manage watchers).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
watchingbooleanrequireduserIdstringUp to 64 characters.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/watchers' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"watching": true
}'Response 200
{
watchers: string[]
}/ v1/ orgs/ :orgId/ issues/ :issueKey/ votesVotes for an issue, or withdraws the vote.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- issues:write
Path parameters
orgIdOrganization id (
org_…).issueKeyIssue key (
WEB-12; former keys of moved issues and renamed spaces work too) or issue id (iss_…).
Request body
votingbooleanrequired
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/issues/{issueKey}/votes' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"voting": true
}'Response 200
{
voters: string[]
}