Skip to content

The CI the project starts its automated tests in

GET
/v1/projects/{id}/integrations/ci
curl --request GET \
--url https://beta-api.plune.ai/v1/projects/example/integrations/ci \
--cookie plune_session=<plune_session>

Every member of the project reads it, a reader too: { "configured": false } when none is connected, otherwise the CI (GitHub Actions, GitLab CI or CircleCI), the repository or project, the workflow or pipeline file and the branch or tag, who connected it and when, and what its last check found. The owner reads four more fields — who saved the token, when, when the CI says it expires, and whose it is — and nobody reads the token. A project you are not in answers 404, the same as one that does not exist. Session cookie only: a CLI token is refused with 401.

id
required
string

An id from GET /v1/projects

The connection, or { "configured": false }

Media type application/json

The CI of a project, as a member of it reads it. With none connected it is { "configured": false }. The token is not in it.

object
configured
required
boolean
provider

Present exactly when configured is true, as every field below but url and the four token….

string
Allowed values: github gitlab circleci
url

GitLab only: its address.

string
repository

GitHub’s owner/name, GitLab’s group/project, CircleCI’s project slug.

string
workflow
string
ref
string
savedBy

userId of the owner who connected it, or last changed it.

string
savedAt
string format: date-time
verifiedAt

When the saved connection was last checked: the save itself, or POST …/test.

string format: date-time
nullable
verifyResult
object
ok
required
boolean
steps
required
Array<object>
object
step
required
string
Allowed values: token repository actions workflow inputs
result
required
string
Allowed values: ok failed skipped
code

Present exactly when result is failed.

string
Allowed values: unreachable rate_limited token_rejected repository_not_found actions_denied workflow_not_found workflow_disabled ref_not_found no_workflow_dispatch inputs_missing variables_denied address_refused unexpected
status

The HTTP status the CI answered with, for unexpected. Never its body.

integer
missing

inputs_missing only: the inputs the workflow does not take.

Array<string>
Allowed values: plune_run grep ref
tokenSavedBy

Owner only: who saved the token. An edit that keeps the token keeps this.

string
tokenSavedAt

Owner only.

string format: date-time
tokenExpiresAt

Owner only: when the CI says the token expires, as of its last check; null when it does not, or the CI did not say.

string format: date-time
nullable
tokenOwner

Owner only: whose token it is, when the CI says — the CircleCI user of a personal API token; null otherwise.

string
nullable
Example
{
"configured": true,
"provider": "github",
"repository": "plune-ai/cli",
"workflow": ".github/workflows/plune.yml",
"ref": "main",
"savedBy": "u-shop",
"savedAt": "2026-09-16T09:12:04.151Z",
"verifiedAt": "2026-09-16T09:12:04.151Z",
"verifyResult": {
"ok": true,
"steps": [
{
"step": "token",
"result": "ok"
},
{
"step": "repository",
"result": "ok"
},
{
"step": "actions",
"result": "ok"
},
{
"step": "workflow",
"result": "ok"
},
{
"step": "inputs",
"result": "ok"
}
]
},
"tokenSavedBy": "u-shop",
"tokenSavedAt": "2026-09-16T09:12:04.151Z",
"tokenExpiresAt": null
}

No / invalid session — a CLI token is refused here

No such project among yours

Media type application/json
object
error
required
string
Example
{
"error": "project 'u-shop::default' not found"
}

The server has no key to keep tokens under — the operator has not set INTEGRATIONS_ENCRYPTION_KEY

Media type application/json
object
error
required
string
Example
{
"error": "integrations are not configured on this server — contact your operator"
}