Skip to content

Test AutomationCI/CD PipelinesCI Tokens tab

CI Tokens tab

The CI Tokens tab of the CI/CD Pipelines screen (/pipelines?tab=tokens) manages the credentials CI jobs authenticate with.

CI Tokens tab — create a token and review existing ones with their last-used time

A CI token is a machine credential — separate from user logins — that can do three things: trigger runs, read their status, and cancel them. It cannot browse test cases, change settings, or read your project. Tokens start with tvci_ and are stored hashed on the server, which is why the value can only be displayed once.

Only admins create and revoke tokens. Testers and viewers see the list.

Type a descriptive name (e.g. github-pr-gate, jenkins-release), choose its scope and expiry, and click Create Token (or press Enter). The value appears in a dialog with a copy button and the next setup steps.

May trigger decides which pipeline mappings the token can start:

Token create form with Only these mappings selected (a Sample CI Run checkbox) and Suites, cycles and shell commands selected, showing the amber shell-command warning
  • Every pipeline mapping — any mapping, including ones created later.
  • Only these mappings — just the ticked ones. A token scoped this way also only sees and cancels runs of those mappings.

Ad-hoc targets decides whether the token may bypass mappings with the CLI’s --suite, --cycle and --command flags:

SettingAllows
Not allowed (default)Saved pipeline mappings only.
Any suite or cycleAlso --suite and --cycle.
Suites, cycles and shell commandsAlso --command — any shell command on the Testver server.

Tokens expire after 30 days, 90 days, 1 year (the default), or never. An expired token is refused with CI token "…" has expired, and the list marks it expired. Create a new one and update the CI secret before the date.

Store it as a secret in your CI platform, conventionally named TESTVER_CI_TOKEN:

PlatformWhere the secret goes
GitHub ActionsSettings → Secrets and variables → Actions
GitLab CISettings → CI/CD → Variables (tick Masked)
JenkinsManage Jenkins → Credentials → Secret Text, with id testver-ci-token
Azure PipelinesPipeline → Edit → Variables, tick Keep this value secret
Bitbucket PipelinesRepository settings → Repository variables, tick Secured
CircleCIProject Settings → Environment Variables (or a shared context)

For local use, export it instead: export TESTVER_CI_TOKEN=tvci_…, or pass --token to testver trigger.

Each row shows the token name, its prefix (the first few characters, enough to tell tokens apart without revealing the value), what it may trigger, when it expires, who created it and when, and when it was last used. Tokens that may run shell commands carry a runs commands badge.

Two active tokens, GitHub and LocalRun, each with its tvci_ prefix, expiry, scope, creator, last-used time and a red revoke button

Revoked tokens are hidden under Revoked tokens (n) at the bottom; expand it to see who revoked each one and when.

The ⊘ button asks for confirmation, then revokes the token immediately. Any job still using it fails at the trigger step with Invalid or revoked CI token, which is what you want when a token leaks or a project is retired.

Revoking is permanent — it does not delete the record, so the name stays visible in your history, and the name becomes available for a new token again. Creating and revoking tokens, and every trigger and cancel a token makes, is recorded in the Audit Log.

  • One token per pipeline or team, scoped to its mappings. Sharing a single token everywhere means a leak forces you to rotate every pipeline at once — and lets it trigger everything.
  • Give tokens an expiry. A yearly rotation is cheap insurance against a forgotten secret.
  • Name tokens after where they live, not what they do — github-pr-gate tells you exactly which secret to update after revoking it.
  • Rotate on people changes. Tokens outlive employees; revoking and re-issuing costs a minute.
  • Never commit a token. It belongs in your CI platform’s secret store, not in the pipeline file — the generated configs read it from a secret for exactly this reason.
SymptomLikely cause / fix
Invalid or revoked CI token (401)The token was revoked or mistyped, or the CI secret isn’t reaching the job. Confirm the secret name matches the pipeline config.
CI token "…" has expired (401)Create a new token and update the CI secret.
… is not allowed to trigger this pipeline mapping (403)The token is scoped to other mappings. Use a token that includes this one.
… may only trigger saved pipeline mappings / may not run ad-hoc commands (403)The CLI used --suite, --cycle or --command with a token that doesn’t allow it. Trigger a mapping instead, or use a token with ad-hoc access.
No Create Token formOnly admins can create or revoke tokens.
I lost the token valueIt cannot be recovered. Revoke it and create a replacement.
”An active token named … already exists”Names must be unique among active tokens. Pick another name, or revoke the old one first.
Last used stays emptyNothing has authenticated with it yet — the CI job may still be failing before it reaches Testver.