API reference
Pipelines
/ v1/ runner/ jobThe job's plan: steps, contexts and its secrets. The job counts as running from here.
- Auth
- None.
curl 'https://api.cactive.com.au/v1/runner/job'Response 200
{
plan: {
protocol: number
job: {
id: string
key: string
name: string
runId: string
runNumber: number
attempt: number
workflow: string
repository: string
timeoutMinutes: number
}
contexts: {
[key: string]: boolean | null | string | number | (boolean | null | string | number | object | {
[key: string]: boolean | null | string | number | object
})[] | {
[key: string]: boolean | null | string | number | (boolean | null | string | number | object)[] | object
}
}
env: {
[key: string]: string
}
defaults: {
shell?: string
workingDirectory?: string
}
steps: {
index: number
id?: string
name?: string
if?: string
run?: string
shell?: string
workingDirectory?: string
uses?: "checkout" | "cache" | "upload-artifact" | "download-artifact"
with?: {
[key: string]: string
}
env?: {
[key: string]: string
}
continueOnError?: boolean | string
timeoutMinutes?: string | number
}[]
outputs: {
[key: string]: string
}
marker: string
limits: {
logBytes: number
summaryBytes: number
artifactBytes: number
cacheBytes: number
}
serverUrl: string
}
}/ v1/ runner/ checkoutA git credential for the run's repository, minutes long.
- Auth
- None.
Request body
refstringUp to 255 characters.
curl -X POST 'https://api.cactive.com.au/v1/runner/checkout' \
-H 'Content-Type: application/json' \
-d '{
"ref": "example"
}'Response 200
{
url: string
authorization: string
sha: string
ref: string
}/ v1/ runner/ statusStep progress and a heartbeat; answers whether to stop.
- Auth
- None.
Request body
stepsobject[]requiredUp to 1,100 items.
steps[].indexintegerrequired0–5000.
steps[].namestringrequiredUp to 500 characters.
steps[].status"pending" | "in_progress" | "completed"requiredsteps[].conclusion"success" | "failure" | "cancelled" | "skipped"steps[].outcome"success" | "failure" | "cancelled" | "skipped"steps[].startedAtnumbersteps[].completedAtnumbersteps[].postboolean
curl -X POST 'https://api.cactive.com.au/v1/runner/status' \
-H 'Content-Type: application/json' \
-d '{
"steps": [
{
"index": 1,
"name": "Example",
"status": "pending"
}
]
}'Response 200
{
cancel: boolean
}/ v1/ runner/ completeThe job's result.
- Auth
- None.
Request body
conclusion"success" | "failure" | "cancelled"requiredstepsobject[]Default
[]. Up to 1,100 items.steps[].indexintegerrequired0–5000.
steps[].namestringrequiredUp to 500 characters.
steps[].status"pending" | "in_progress" | "completed"requiredsteps[].conclusion"success" | "failure" | "cancelled" | "skipped"steps[].outcome"success" | "failure" | "cancelled" | "skipped"steps[].startedAtnumbersteps[].completedAtnumbersteps[].postbooleanoutputsobjectDefault
{}. Values: string (up to 65,536 characters).annotationsobject[]Default
[]. Up to 50 items.annotations[].level"error" | "warning" | "notice"requiredannotations[].messagestringrequiredUp to 4,000 characters.
annotations[].filestringUp to 500 characters.
annotations[].lineintegerannotations[].titlestringUp to 200 characters.
annotations[].stepintegersummarystringUp to 65,536 characters.
errorstringUp to 2,000 characters.
timedOutboolean
curl -X POST 'https://api.cactive.com.au/v1/runner/complete' \
-H 'Content-Type: application/json' \
-d '{
"conclusion": "success"
}'Response 200
{
ok: true
}/ v1/ runner/ logsSelf-hosted runners' output, in batches of timestamped lines.
- Auth
- None.
Request body
linesobject[]requiredUp to 20,000 items.
lines[].tnumberrequiredlines[].mstringrequiredUp to 200,000 characters.
curl -X POST 'https://api.cactive.com.au/v1/runner/logs' \
-H 'Content-Type: application/json' \
-d '{
"lines": [
{
"t": 1,
"m": "example"
}
]
}'Response 200
{
ok: true
}/ v1/ runner/ cache/ restoreFinds a cache for key (exact) or restoreKeys (prefixes, newest first) with the same version, in the job's ref, a pull request's target, then the default branch. Answers hit (exact, partial, none) and a presigned download.
- Auth
- None.
Request body
keystringrequired1–512 characters.
restoreKeysstring[]Default
[]. Up to 10 items. Each 1–512 characters.versionstringrequiredMatches
^[0-9a-f]{64}$.
curl -X POST 'https://api.cactive.com.au/v1/runner/cache/restore' \
-H 'Content-Type: application/json' \
-d '{
"key": "example",
"version": "example"
}'Response 200
{
hit: "none"
key?: undefined
size?: undefined
url?: undefined
} | {
hit: "partial" | "exact"
key: string
size: number
url: string
}/ v1/ runner/ cache/ saveA presigned upload for a cache in the job's own ref only (key, version, size), or exists when that key is already saved there (caches are immutable).
- Auth
- None.
Request body
keystringrequired1–512 characters.
versionstringrequiredMatches
^[0-9a-f]{64}$.sizeintegerrequired≥ 1.
curl -X POST 'https://api.cactive.com.au/v1/runner/cache/save' \
-H 'Content-Type: application/json' \
-d '{
"key": "example",
"version": "example",
"size": 1
}'Response 200
{
exists: true
url?: undefined
} | {
url: string
exists?: undefined
}/ v1/ runner/ cache/ commitFinishes a cache after its upload; the repository's oldest unused caches go when it passes its quota.
- Auth
- None.
Request body
keystringrequired1–512 characters.
versionstringrequiredMatches
^[0-9a-f]{64}$.sizeinteger≥ 0.
curl -X POST 'https://api.cactive.com.au/v1/runner/cache/commit' \
-H 'Content-Type: application/json' \
-d '{
"key": "example",
"version": "example"
}'Response 200
{
ok: true
}/ v1/ runner/ artifacts/ uploadStarts an artifact of the job's run (name, size, files, retentionDays): a presigned PUT for exactly that size. Names are unique per run attempt.
- Auth
- None.
Request body
namestringrequiredMatches
^[^\\/:*?"<>|\r\n]{1,100}$.sizeintegerrequired≥ 1.
filesintegerrequired≥ 0.
retentionDaysinteger1–400.
curl -X POST 'https://api.cactive.com.au/v1/runner/artifacts/upload' \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"size": 1,
"files": 1
}'Response 200
{
url: string
}/ v1/ runner/ artifacts/ commitFinishes an artifact after its upload; it's then listed with the run and kept until its retention ends.
- Auth
- None.
Request body
namestringrequiredMatches
^[^\\/:*?"<>|\r\n]{1,100}$.sizeintegerfilesinteger
curl -X POST 'https://api.cactive.com.au/v1/runner/artifacts/commit' \
-H 'Content-Type: application/json' \
-d '{
"name": "Example"
}'Response 200
{
ok: true
}/ v1/ runner/ artifacts/ downloadPresigned downloads of the run's artifacts (name for one; this attempt's first, then earlier attempts').
- Auth
- None.
Request body
namestringMatches
^[^\\/:*?"<>|\r\n]{1,100}$.
curl -X POST 'https://api.cactive.com.au/v1/runner/artifacts/download' \
-H 'Content-Type: application/json' \
-d '{
"name": "Example"
}'Response 200
{
artifacts: {
name: string
size: number
url: string
}[]
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ workflowsThe workflows of a branch (default: the default branch), with their problems and last run.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
Query parameters
refstring1–255 characters.
Errors
404Repository not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/workflows' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
ref: string
sha: string
workflows: {
file: string
name: string
triggers: string[]
dispatch: null | {
inputs: {
name: string
description?: string
type: "string" | "number" | "boolean" | "environment" | "choice"
required: boolean
default?: boolean | string | number
options?: string[]
}[]
}
problems: {
message: string
line?: number
column?: number
severity: "error" | "warning"
}[]
disabled: boolean
lastRun: null | {
runId: string
number: number
attempt: number
workflowFile: string
workflowName: string
event: "push" | "pull_request" | "schedule" | "workflow_dispatch"
ref: string
branch: string
sha: string
title: string
actor: {
id: null | string
label: null | string
}
status: "queued" | "in_progress" | "waiting" | "completed"
conclusion: null | "success" | "failure" | "skipped" | "cancelled" | "timed_out" | "startup_failure"
pullNumber: null | number
cancelRequested: boolean
waitingForConcurrency: boolean
problems: null | {
message: string
line?: number
column?: number
}[]
createdAt: number
startedAt: null | number
completedAt: null | number
}
}[]
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ workflows/ :fileTurns a workflow on or off (off: no event starts it).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
fileWorkflow file name in
.cactive/workflows, e.g.ci.yml.
Request body
enabledbooleanrequired
Errors
404Repository not found404Workflow not found
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/workflows/{file}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"enabled": true
}'Response 200
{
file: string
disabled: boolean
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ workflows/ :file/ dispatchesRuns a workflow by hand on a branch with inputs (workflow_dispatch).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
fileWorkflow file name in
.cactive/workflows, e.g.ci.yml.
Request body
refstringrequired1–255 characters. Trimmed.
inputsobjectDefault
{}. Values: string (up to 10,000 characters), number or boolean.
Errors
404Repository not found
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/workflows/{file}/dispatches' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"ref": "example"
}'Response 201
{
run: {
runId: string
number: number
attempt: number
workflowFile: string
workflowName: string
event: "push" | "pull_request" | "schedule" | "workflow_dispatch"
ref: string
branch: string
sha: string
title: string
actor: {
id: null | string
label: null | string
}
status: "queued" | "in_progress" | "waiting" | "completed"
conclusion: null | "success" | "failure" | "skipped" | "cancelled" | "timed_out" | "startup_failure"
pullNumber: null | number
cancelRequested: boolean
waitingForConcurrency: boolean
problems: null | {
message: string
line?: number
column?: number
}[]
createdAt: number
startedAt: null | number
completedAt: null | number
}
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ runsRuns, newest first, filtered by workflow, branch, status, actor and event.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
Query parameters
workflowstringUp to 100 characters.
branchstringUp to 255 characters.
status"queued" | "in_progress" | "waiting" | "completed" | "success" | "failure" | "cancelled" | "startup_failure"actorstringUp to 64 characters.
event"push" | "pull_request" | "schedule" | "workflow_dispatch"shastringMatches
^[0-9a-f]{40}$.cursorstringUp to 2,000 characters.
limitintegerDefault
25. 1–100. Coerced from a string.
Errors
404Repository not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/runs' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
runs: {
runId: string
number: number
attempt: number
workflowFile: string
workflowName: string
event: "push" | "pull_request" | "schedule" | "workflow_dispatch"
ref: string
branch: string
sha: string
title: string
actor: {
id: null | string
label: null | string
}
status: "queued" | "in_progress" | "waiting" | "completed"
conclusion: null | "success" | "failure" | "skipped" | "cancelled" | "timed_out" | "startup_failure"
pullNumber: null | number
cancelRequested: boolean
waitingForConcurrency: boolean
problems: null | {
message: string
line?: number
column?: number
}[]
createdAt: number
startedAt: null | number
completedAt: null | number
}[]
cursor: null | string
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ runs/ :numberA run (an attempt of it): jobs with steps, the job graph, approvals, artifacts.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
numberIssue or pull request number, or under
pipelinesa run number.
Query parameters
attemptinteger≥ 1. Coerced from a string.
Errors
404Repository not found404Run not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/runs/{number}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
run: {
runId: string
number: number
attempt: number
workflowFile: string
workflowName: string
event: "push" | "pull_request" | "schedule" | "workflow_dispatch"
ref: string
branch: string
sha: string
title: string
actor: {
id: null | string
label: null | string
}
status: "queued" | "in_progress" | "waiting" | "completed"
conclusion: null | "success" | "failure" | "skipped" | "cancelled" | "timed_out" | "startup_failure"
pullNumber: null | number
cancelRequested: boolean
waitingForConcurrency: boolean
problems: null | {
message: string
line?: number
column?: number
}[]
createdAt: number
startedAt: null | number
completedAt: null | number
}
attempt: number
attempts: number[]
graph: {
key: string
name: string
needs: string[]
environment: null | string
matrix: boolean
}[]
jobs: {
jobId: string
key: string
name: string
matrix: null | {
[key: string]: unknown
}
status: "queued" | "in_progress" | "waiting" | "completed"
conclusion: null | "success" | "failure" | "skipped" | "cancelled" | "timed_out" | "startup_failure"
waitingFor: null | "approval" | "timer" | "concurrency" | "capacity" | "runner"
waitUntil: null | number
runner: null | {
kind: "hosted" | "self-hosted"
label: null | string
device: null | string
}
environment: null | {
name: string
url: null | string
}
steps: unknown[]
annotations: unknown[]
summary: null | string
error: null | string
continueOnError: boolean
reusedFrom: null | number
minutes: null | number
queuedAt: null | number
startedAt: null | number
completedAt: null | number
logArchived: boolean
}[]
approvals: {
environment: string
status: "pending" | "expired" | "approved" | "rejected"
reviewers: {
name: string
type: "user" | "team"
id: string
}[]
preventSelfReview: boolean
canReview: boolean
decidedBy: null | string
comment: null | string
decidedAt: null | number
requestedAt: number
}[]
artifacts: {
name: string
size: number
files: number
attempt: number
expiresAt: number
createdAt: number
}[]
scopes: ("platform:admin" | "platform:infra" | "platform:analytics" | "platform:coverage" | "org:read" | "org:write" | "audit:read" | "tenant:read" | "tenant:write" | "members:read" | "members:write" | "projects:read" | "projects:write" | "deployments:read" | "deployments:write" | "env:read" | "env:write" | "keys:read" | "keys:use" | "keys:write" | "domains:read" | "domains:write" | "resources:read" | "resources:write" | "git:read" | "git:write" | "git:admin" | "logs:read" | "analytics:read" | "knowledge:read" | "knowledge:write" | "connectors:read" | "connectors:write" | "chat:use" | "mcp:connect" | "agents:read" | "agents:write" | "agents:run" | "mail:read" | "mail:send" | "mail:admin" | "calendar:read" | "calendar:write" | "contacts:read" | "contacts:write" | "issues:read" | "issues:write" | "issues:admin" | "maps:read" | "maps:write" | "drive:read" | "drive:write" | "crm:read" | "crm:write" | "crm:admin" | "marketing:read" | "marketing:write" | "marketing:send" | "marketing:admin" | "health:read" | "health:write" | "weather:read" | "weather:write" | "food:read" | "food:write" | "vehicles:read" | "vehicles:write" | "vehicles:control" | "vehicles:admin" | "sharing:read" | "sharing:write")[]
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ runs/ :number/ cancelCancels a run: queued and waiting jobs end at once, running ones are stopped. Needs git:write.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
numberIssue or pull request number, or under
pipelinesa run number.
Errors
404Repository not found404Run not found409This run has finished
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/runs/{number}/cancel' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
run: {
runId: string
number: number
attempt: number
workflowFile: string
workflowName: string
event: "push" | "pull_request" | "schedule" | "workflow_dispatch"
ref: string
branch: string
sha: string
title: string
actor: {
id: null | string
label: null | string
}
status: "queued" | "in_progress" | "waiting" | "completed"
conclusion: null | "success" | "failure" | "skipped" | "cancelled" | "timed_out" | "startup_failure"
pullNumber: null | number
cancelRequested: boolean
waitingForConcurrency: boolean
problems: null | {
message: string
line?: number
column?: number
}[]
createdAt: number
startedAt: null | number
completedAt: null | number
}
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ runs/ :number/ rerunRe-runs a finished run as a new attempt: all jobs, the failed ones, or one job (and what needs it).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
numberIssue or pull request number, or under
pipelinesa run number.
Request body
failedOnlybooleanDefault
false.jobstringUp to 100 characters.
Errors
404Repository not found404Run not found
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/runs/{number}/rerun' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"failedOnly": false,
"job": "example"
}'Response 200
{
run: {
runId: string
number: number
attempt: number
workflowFile: string
workflowName: string
event: "push" | "pull_request" | "schedule" | "workflow_dispatch"
ref: string
branch: string
sha: string
title: string
actor: {
id: null | string
label: null | string
}
status: "queued" | "in_progress" | "waiting" | "completed"
conclusion: null | "success" | "failure" | "skipped" | "cancelled" | "timed_out" | "startup_failure"
pullNumber: null | number
cancelRequested: boolean
waitingForConcurrency: boolean
problems: null | {
message: string
line?: number
column?: number
}[]
createdAt: number
startedAt: null | number
completedAt: null | number
}
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ runs/ :number/ approvalsApproves or rejects the jobs of the current attempt waiting for an environment (its reviewers only).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
numberIssue or pull request number, or under
pipelinesa run number.
Request body
environmentstringrequiredMatches
^[A-Za-z0-9 _.-]{1,100}$. Trimmed.decision"approve" | "reject"requiredcommentstringUp to 1,000 characters. Trimmed.
Errors
404Repository not found404Run not found
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/runs/{number}/approvals' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"environment": "example",
"decision": "approve"
}'Response 200
{
ok: true
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ runs/ :number/ jobs/ :jobIdOne job of a run: status, runner, environment, steps, annotations, summary and error.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
numberIssue or pull request number, or under
pipelinesa run number.jobIdJob id: an agent job (
job_…), underpipelinesa pipeline job (pjb_…), or undercrman import or export (cjb_…); undermarketinga list import (mkj_…).
Errors
404Repository not found404Run not found404Job not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/runs/{number}/jobs/{jobId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
run: {
runId: string
number: number
attempt: number
workflowFile: string
workflowName: string
event: "push" | "pull_request" | "schedule" | "workflow_dispatch"
ref: string
branch: string
sha: string
title: string
actor: {
id: null | string
label: null | string
}
status: "queued" | "in_progress" | "waiting" | "completed"
conclusion: null | "success" | "failure" | "skipped" | "cancelled" | "timed_out" | "startup_failure"
pullNumber: null | number
cancelRequested: boolean
waitingForConcurrency: boolean
problems: null | {
message: string
line?: number
column?: number
}[]
createdAt: number
startedAt: null | number
completedAt: null | number
}
job: {
jobId: string
key: string
name: string
matrix: null | {
[key: string]: unknown
}
status: "queued" | "in_progress" | "waiting" | "completed"
conclusion: null | "success" | "failure" | "skipped" | "cancelled" | "timed_out" | "startup_failure"
waitingFor: null | "approval" | "timer" | "concurrency" | "capacity" | "runner"
waitUntil: null | number
runner: null | {
kind: "hosted" | "self-hosted"
label: null | string
device: null | string
}
environment: null | {
name: string
url: null | string
}
steps: unknown[]
annotations: unknown[]
summary: null | string
error: null | string
continueOnError: boolean
reusedFrom: null | number
minutes: null | number
queuedAt: null | number
startedAt: null | number
completedAt: null | number
logArchived: boolean
}
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ runs/ :number/ jobs/ :jobId/ logsA page of a job's log after cursor; done when the job finished and everything was read.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
numberIssue or pull request number, or under
pipelinesa run number.jobIdJob id: an agent job (
job_…), underpipelinesa pipeline job (pjb_…), or undercrman import or export (cjb_…); undermarketinga list import (mkj_…).
Query parameters
cursorstringUp to 4,000 characters.
Errors
404Repository not found404Run not found404Job not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/runs/{number}/jobs/{jobId}/logs' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
status: "queued" | "in_progress" | "waiting" | "completed"
steps: unknown[]
lines: {
n: number
t: number
s: number
m: string
}[]
cursor: string
done: boolean
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ runs/ :number/ jobs/ :jobId/ logs/ rawThe whole log as text (up to 5 MB).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
numberIssue or pull request number, or under
pipelinesa run number.jobIdJob id: an agent job (
job_…), underpipelinesa pipeline job (pjb_…), or undercrman import or export (cjb_…); undermarketinga list import (mkj_…).
Errors
404Repository not found404Run not found404Job not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/runs/{number}/jobs/{jobId}/logs/raw' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200 with no body
/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ runs/ :number/ artifacts/ :artifactA download link for one of the run's artifacts (15 minutes); attempt picks an earlier attempt's.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
numberIssue or pull request number, or under
pipelinesa run number.artifactArtifact name, URL-encoded.
Query parameters
attemptinteger≥ 1. Coerced from a string.
Errors
404Repository not found404Run not found404Artifact not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/runs/{number}/artifacts/{artifact}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
url: string
name: string
size: number
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ runs/ :number/ artifacts/ :artifactDeletes an artifact of the run now. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
numberIssue or pull request number, or under
pipelinesa run number.artifactArtifact name, URL-encoded.
Query parameters
attemptinteger≥ 1. Coerced from a string.
Errors
404Repository not found404Run not found404Artifact not found
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/runs/{number}/artifacts/{artifact}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ statusesWhat the runs of commits add up to (up to 100: ?sha=…&sha=…).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
Errors
400At most 100 commits at a time404Repository not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/statuses' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
statuses: {
[key: string]: {
state: "success" | "pending" | "failure" | "waiting" | "cancelled"
runs: {
number: number
workflowFile: string
workflowName: string
event: string
status: string
conclusion?: string
attempt: number
createdAt: number
}[]
}
}
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ environmentsEnvironments with their rules, and the names of their secrets and variables.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
Errors
404Repository not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/environments' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
environments: {
name: string
reviewers: {
type: "user" | "team"
id: string
}[]
preventSelfReview: boolean
waitMinutes: number
branchPolicy: "all" | "protected" | "selected"
branchPatterns: string[]
secrets: {
name: string
updatedAt: number
updatedBy: null | string
}[]
variables: {
name: string
value: string
updatedAt: number
}[]
updatedAt: number
}[]
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ environments/ :environmentCreates or changes an environment's rules: reviewers (up to 6 people or groups; empty means no approval), preventSelfReview, waitMinutes, branchPolicy (all, protected or selected with branchPatterns). Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
environmentEnvironment name (letters, numbers, spaces,
.,-,_; compared without case).
Request body
reviewersobject[]Default
[]. Up to 6 items.reviewers[].type"user" | "team"requiredreviewers[].idstringrequired3–64 characters.
preventSelfReviewbooleanDefault
false.waitMinutesintegerDefault
0. 0–43200.branchPolicy"all" | "protected" | "selected"Default
"all".branchPatternsstring[]Default
[]. Up to 50 items. Each 1–200 characters, trimmed.
Errors
400At most 100 environments400… … isn't in this organization404Repository not found
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/environments/{environment}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"reviewers": [
{
"type": "user",
"id": "<id>"
}
],
"preventSelfReview": false,
"waitMinutes": 0
}'Response 200
{
environment: {
reviewers: {
type: "user" | "team"
id: string
}[]
name: string
createdAt: number
updatedAt: number
orgId: string
repoId: string
preventSelfReview: boolean
waitMinutes: number
branchPolicy: "all" | "protected" | "selected"
branchPatterns: string[]
}
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ environments/ :environmentRemoves an environment with its secrets and variables. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
environmentEnvironment name (letters, numbers, spaces,
.,-,_; compared without case).
Errors
404Repository not found404Environment not found
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/environments/{environment}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ environments/ :environment/ secrets/ :secretSets an environment secret (value, at most the platform's size). Only that environment's jobs get it, after its rules pass. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
environmentEnvironment name (letters, numbers, spaces,
.,-,_; compared without case).secretSecret name (letters, numbers and
_; stored upper case).
Request body
valuestringrequired1–200,000 characters.
Errors
400At most … secrets here404Repository not found404Environment not found413Secrets are at most … KB
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/environments/{environment}/secrets/{secret}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"value": "example"
}'Response 200
{
name: string
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ environments/ :environment/ secrets/ :secretRemoves an environment secret. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
environmentEnvironment name (letters, numbers, spaces,
.,-,_; compared without case).secretSecret name (letters, numbers and
_; stored upper case).
Errors
404Repository not found
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/environments/{environment}/secrets/{secret}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ environments/ :environment/ variables/ :variableSets an environment variable (value). Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
environmentEnvironment name (letters, numbers, spaces,
.,-,_; compared without case).variableVariable name (letters, numbers and
_; stored upper case).
Request body
valuestringrequiredUp to 48,000 characters.
Errors
404Repository not found404Environment not found
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/environments/{environment}/variables/{variable}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"value": "example"
}'Response 200
{
name: string
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ environments/ :environment/ variables/ :variableRemoves an environment variable. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
environmentEnvironment name (letters, numbers, spaces,
.,-,_; compared without case).variableVariable name (letters, numbers and
_; stored upper case).
Errors
404Repository not found
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/environments/{environment}/variables/{variable}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ secretsSecret names (never values): the repository's, and the org's visible to it. Needs git:write.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
Errors
404Repository not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/secrets' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
secrets: {
name: string
updatedAt: number
updatedBy: null | string
}[]
organization: {
name: string
updatedAt: number
}[]
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ secrets/ :secretSets a repository secret (value): KMS-encrypted, never returned, handed only to running jobs. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
secretSecret name (letters, numbers and
_; stored upper case).
Request body
valuestringrequired1–200,000 characters.
Errors
400At most … secrets here404Repository not found413Secrets are at most … KB
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/secrets/{secret}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"value": "example"
}'Response 200
{
name: string
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ secrets/ :secretRemoves a repository secret. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
secretSecret name (letters, numbers and
_; stored upper case).
Errors
404Repository not found
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/secrets/{secret}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ variablesVariables (values are visible): the repository's and the org's visible to it.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
Errors
404Repository not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/variables' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
variables: {
name: string
value: string
updatedAt: number
}[]
organization: {
name: string
value: string
updatedAt: number
}[]
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ variables/ :variableSets a repository variable (value, readable in vars). Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
variableVariable name (letters, numbers and
_; stored upper case).
Request body
valuestringrequiredUp to 48,000 characters.
Errors
404Repository not found
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/variables/{variable}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"value": "example"
}'Response 200
{
name: string
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ variables/ :variableRemoves a repository variable. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
variableVariable name (letters, numbers and
_; stored upper case).
Errors
404Repository not found
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/variables/{variable}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ cachesThe repository's caches: key, ref, size and when each was last used.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
Errors
404Repository not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/caches' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
caches: {
key: string
ref: string
size: number
version: string
createdAt: number
lastUsedAt: number
}[]
bytes: number
}/ v1/ orgs/ :orgId/ repos/ :name/ pipelines/ cachesRemoves caches: one key (on one ref, or every ref), or all of them.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).nameRepository name.
Query parameters
keystringUp to 512 characters.
refstringUp to 255 characters.
Errors
404Repository not found
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/repos/{name}/pipelines/caches' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
removed: number
}/ v1/ orgs/ :orgId/ pipelines/ secretsOrg secret names and which repositories see them (never values).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pipelines/secrets' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
secrets: {
name: string
visibility: "all" | "selected"
repoIds: string[]
updatedAt: number
updatedBy: null | string
}[]
}/ v1/ orgs/ :orgId/ pipelines/ secrets/ :secretSets an organization secret: value (required for a new one), and visibility (all repositories, or selected with repoIds). Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).secretSecret name (letters, numbers and
_; stored upper case).
Request body
visibility"all" | "selected"Default
"all".repoIdsstring[]Default
[]. Up to 500 items. Each 3–64 characters.valuestring1–200,000 characters.
Errors
400Not repositories of this organization: …400A new secret needs a value400At most … organization secrets413Secrets are at most … KB
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/pipelines/secrets/{secret}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"visibility": "all",
"repoIds": [],
"value": "example"
}'Response 200
{
name: string
}/ v1/ orgs/ :orgId/ pipelines/ secrets/ :secretRemoves an organization secret. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).secretSecret name (letters, numbers and
_; stored upper case).
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/pipelines/secrets/{secret}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ pipelines/ variablesOrganization variables with their values and which repositories see them.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pipelines/variables' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
variables: {
name: string
value: string
visibility: "all" | "selected"
repoIds: string[]
updatedAt: number
}[]
}/ v1/ orgs/ :orgId/ pipelines/ variables/ :variableSets an organization variable: value, visibility and repoIds as for secrets. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).variableVariable name (letters, numbers and
_; stored upper case).
Request body
visibility"all" | "selected"Default
"all".repoIdsstring[]Default
[]. Up to 500 items. Each 3–64 characters.valuestringrequiredUp to 48,000 characters.
Errors
400Not repositories of this organization: …
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/pipelines/variables/{variable}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"value": "example"
}'Response 200
{
name: string
}/ v1/ orgs/ :orgId/ pipelines/ variables/ :variableRemoves an organization variable. Needs git:admin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).variableVariable name (letters, numbers and
_; stored upper case).
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/pipelines/variables/{variable}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ pipelines/ usageMinutes this month (or month=2026-10) against the plan, by runner type.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).
Query parameters
monthstringMatches
^\d{4}-\d{2}$.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pipelines/usage' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
usage: {
month: string
minutes: number
billedMinutes: number
selfHostedMinutes: number
jobs: number
byRunner: {
runner: string
selfHosted: boolean
minutes: number
billedMinutes: number
jobs: number
}[]
}
limits: {
minutes: number
overage: boolean
concurrency: number
maxMinutes: number
logDays: number
artifactDays: number
artifactGb: number
cacheGb: number
}
running: number
artifactBytes: number
}/ v1/ orgs/ :orgId/ pipelines/ runnersHosted runner types the org can use, and its self-hosted runners (devices approved for pipelines).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- git:read
Path parameters
orgIdOrganization id (
org_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pipelines/runners' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
hosted: {
label: string
description: string
multiplier: number
maxMinutes: number
docker: boolean
isDefault: boolean
}[]
selfHosted: {
deviceId: string
name: string
platform: null | string
labels: string[]
customLabels: string[]
networkMode?: "allowlist" | "full"
online: boolean
lastSeenAt: null | number
}[]
}/ v1/ orgs/ :orgId/ pipelines/ runners/ :deviceId/ labelsA self-hosted runner's own labels (runs-on: [self-hosted, <label>]).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scopes
- git:read, agents:write
Path parameters
orgIdOrganization id (
org_…).deviceIdDevice id: an agent's (
dev_…); under/v1/me/notificationsa phone's install id; under/v1/me/sign-in-approvalsa phone that approves sign-ins (apd_…); under/v1/me/vaultthe id a device made for its vault (22 base64url characters).
Request body
labelsstring[]requiredUp to 20 items. Each matches
^[a-z0-9][a-z0-9._-]{0,49}$, trimmed, lowercased.
Errors
404Runner not found
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/pipelines/runners/{deviceId}/labels' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"labels": [
"example"
]
}'Response 200
{
labels: string[]
}