Project Secrets (CI/CD)
Create, list and revoke the project tokens that let CI/CD pipelines deploy your game.
A project secret is a long-lived token, scoped to a single project, that lets an automated
caller (a CI/CD pipeline, a script, another service) act on that project without a human login. You
present it to the control plane in the X-Project-Token header, and it authorizes exactly the
project it was minted for — for example to upload a build artifact and publish a new version from a
GitHub Actions workflow.
Each token is shown once, at creation. Only a one-way hash is stored, so a lost token cannot be recovered — create a new one and revoke the old. There is no "edit": the value is immutable, so the management surface is create, list and delete.
Who can manage secrets
These routes are for logged-in users — authenticate management calls with a developer token in
the X-Auth-Token header (issued when you log in via the CLI or console). A X-Project-Token
cannot manage secrets, so a leaked CI token can never mint or revoke other tokens. For
organization-owned projects, any member may list secrets, but only an owner or admin may
create or delete them.
All examples below target the production control plane at
https://control-plane.prod.620cloud.com and assume PROJECT_ID is your project's id and
AUTH_TOKEN is your developer token.
Create a secret
Mint a new token for the project. The response includes the token exactly once — store it immediately (e.g. as a CI secret).
curl -X POST "https://control-plane.prod.620cloud.com/projects/$PROJECT_ID/secrets" \
-H "X-Auth-Token: $AUTH_TOKEN"
{
"secret": "6717f2c1a4e8b90b3c2d1e4f:Hh1Qd8m2Zk0pVtY7Rn4Lx6Bs3Wc5Ja9",
"id": "6717f2c1a4e8b90b3c2d1e4f",
"createdAt": "2026-06-16T12:00:00Z"
}
The secret value is the full project token. Use it verbatim as the X-Project-Token header. The
id is the part before the : and is what you pass when listing or deleting.
List secrets
Returns metadata only — never the token value or its hash. Use it to audit which tokens exist and when they were created.
curl "https://control-plane.prod.620cloud.com/projects/$PROJECT_ID/secrets" \
-H "X-Auth-Token: $AUTH_TOKEN"
{
"items": [
{ "id": "6717f2c1a4e8b90b3c2d1e4f", "createdAt": "2026-06-16T12:00:00Z" }
]
}
Delete (revoke) a secret
Revokes a token by id. Once deleted, any caller presenting that X-Project-Token is no longer
authenticated.
curl -X DELETE "https://control-plane.prod.620cloud.com/projects/$PROJECT_ID/secrets/$SECRET_ID" \
-H "X-Auth-Token: $AUTH_TOKEN"
Rotation
There is no update endpoint. To rotate a token, create a new one, update wherever it is used, then delete the old one — overlapping briefly so deploys never break.
Using a secret from CI
Store the created secret as a repository secret (e.g. SIXTWENTY_PROJECT_TOKEN in GitHub Actions),
then send it as X-Project-Token on the deploy calls your pipeline makes. For example, requesting an
artifact upload URL as part of publishing a new version:
# .github/workflows/deploy.yml
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# ... build your game artifact ...
- name: Request artifact upload URL
run: |
curl "https://control-plane.prod.620cloud.com/projects/${{ vars.SIXTWENTY_PROJECT_ID }}/artifact-upload-url?contentSizeBytes=$(stat -c%s build/game.jar)" \
-H "X-Project-Token: ${{ secrets.SIXTWENTY_PROJECT_TOKEN }}"
# ...then upload the artifact and POST /projects/{id}/versions to publish.
A project token is scoped to its single project, so the same token cannot touch any other project — keep one token per pipeline and revoke it the moment it might be exposed.