Skip to main content
Settings → API tokens issues credentials for reading Pipefort from somewhere that is not a browser. Admins only.

What a token can do

A token acts as the member who created it. It carries no permissions of its own, which means nobody can mint a token more powerful than themselves — and it inherits their role, so a token made by a non-admin cannot reach an admin-only endpoint.
A token can only read. Every request that is not a GET is refused, and so is the one GET that changes state — /api/github/callback, which links a GitHub App installation. Without that second rule a “read-only” credential could have attached an installation to its own organisation and granted itself repository access.
It also cannot outlive its creator’s membership. Removing a member revokes their tokens, and every request independently re-checks that the creator is still a member — so a token that somehow escaped revocation still stops working.

The value is shown once

Only a SHA-256 of the token is stored. It is displayed at creation and never again, by the page or by anyone else, because there is nothing left to display it from. If you lose it, revoke it and create another. The listing shows a hint (pf_625d53d4…) instead — the public half, which identifies the row and cannot be used to reconstruct the token.

Choosing an expiry

30 days, 90 days, a year, or never. “Never” is offered and labelled rather than being a silent default: a credential with no end date is a decision, and the page says what it means — the token stays valid until someone revokes it or its creator leaves.

Last used

The column that makes the page worth opening. Never used and last used in March are different words, not a shared blank cell, because only one of them means “safe to revoke without asking anyone”. Use is recorded to the minute. A busy caller does not turn every read into a write, and no finer resolution helps answer the only question the column exists for.

Revoking

Immediate and permanent. A revoked token stays listed, struck through, with its own history — so “this existed, it was used until the 12th, and it is now dead” remains readable rather than vanishing. Creating and revoking a token are both recorded in the audit log.

Every rejection looks the same

An unknown token, a wrong one, a revoked one and an expired one all return the same 401 with the same body. A client that could tell them apart could use the difference to work out which tokens exist.