Check the saved connection again
const url = 'https://beta-api.plune.ai/v1/projects/example/integrations/ci/test';const options = {method: 'POST', 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 POST \ --url https://beta-api.plune.ai/v1/projects/example/integrations/ci/test \ --cookie plune_session=<plune_session>Owner only. Asks GitHub five things about the saved connection, with the saved token, and keeps what it found as the last check: token (GitHub accepts it), repository (it reaches the repository), actions (it may start workflows — Actions: Read and write), workflow (the file is on the branch, and switched on) and inputs (the workflow runs on workflow_dispatch and takes plune_run, grep and ref). A check that leans on one that failed is skipped. A fine-grained token cut to Actions cannot read a file of the repository, so the last three are asked of a workflow_dispatch that carries, besides the three inputs, one that no workflow declares: GitHub refuses it with a 422 that says what it found, and starts nothing — should it ever start a run all the same, Plune cancels it at once and the check says unexpected. Requests go to api.github.com only and take 10 seconds at most each; what GitHub answers is read for its status and its message, never kept. At most 10 checks a minute for a project, this and PUT together. Session cookie only.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”An id from GET /v1/projects
Responses
Section titled “ Responses ”What the check found. A failed check carries one of these codes: unreachable — the CI did not answer in time; rate_limited — the CI is limiting the token’s requests: try again in a minute; token_rejected — the CI does not accept the token: it is mistyped, expired or revoked; repository_not_found — the token does not reach the repository, project or project slug: a private one it was not given, or a name that is not there; actions_denied — the token may not start workflows or pipelines: on GitHub, Repository permissions → Actions → Read and write; on GitLab, role Developer and scope api; on CircleCI, a user who may start the project’s pipelines; workflow_not_found — the workflow file, .gitlab-ci.yml or .circleci/config.yml is not there; workflow_disabled — the workflow is switched off on GitHub; ref_not_found — the branch or tag is not there; no_workflow_dispatch — the GitHub workflow does not run on workflow_dispatch; inputs_missing — the workflow, job or config does not take everything Plune sends (GitHub: the inputs plune_run, grep, ref; GitLab: a job for $PLUNE_RUN that greps by $PLUNE_GREP; CircleCI: the parameters plune_run and grep): missing names them; variables_denied — the GitLab project keeps pipeline variables from the token’s role: Settings → CI/CD → Variables → Minimum role to use pipeline variables → Developer; address_refused — the GitLab address is not https, is an IP address, or is on a private network: Plune sends no request there; unexpected — the CI answered with a status the check did not expect: the step carries it.
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.
Example
{ "ok": true, "steps": [ { "step": "token", "result": "ok" }, { "step": "repository", "result": "ok" }, { "step": "actions", "result": "ok" }, { "step": "workflow", "result": "ok" }, { "step": "inputs", "result": "ok" } ], "testedAt": "2026-09-16T09:12:04.151Z"}No / invalid session — a CLI token is refused here
You are in the project, but not as its owner
object
Example
{ "error": "project owner only"}No such project among yours, or no CI is connected
object
Examples
No such project among yours
{ "error": "project 'u-shop::default' not found"}Nothing saved to check
{ "error": "no CI is connected"}The saved token does not open under this server’s key (the key was replaced): connect again with the token
object
Example
{ "error": "the saved token cannot be read on this server — replace it"}More than 10 checks in a minute for this project. Retry-After carries the seconds until the window rolls over
object
Example generated
{ "error": "example"}Headers
Section titled “Headers ”Seconds until the window rolls over
The server has no key to keep tokens under; nothing was sent
object
Example
{ "error": "integrations are not configured on this server — contact your operator"}