The CI the project starts its automated tests in
const url = 'https://beta-api.plune.ai/v1/projects/example/integrations/ci';const options = {method: 'GET', headers: {cookie: 'plune_session=<plune_session>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”An id from GET /v1/projects
Responses
Section titled “ Responses ”The connection, or { "configured": false }
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
Present exactly when configured is true, as every field below but url and the four token….
GitLab only: its address.
GitHub’s owner/name, GitLab’s group/project, CircleCI’s project slug.
userId of the owner who connected it, or last changed it.
When the saved connection was last checked: the save itself, or POST …/test.
object
object
Present exactly when result is failed.
The HTTP status the CI answered with, for unexpected. Never its body.
inputs_missing only: the inputs the workflow does not take.
Owner only: who saved the token. An edit that keeps the token keeps this.
Owner only.
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.
Owner only: whose token it is, when the CI says — the CircleCI user of a personal API token; null otherwise.
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
object
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
object
Example
{ "error": "integrations are not configured on this server — contact your operator"}