Skip to Content
We are live but in Staging 🎉
SecretsAPI ReferenceOverview

Secrets — API Reference

Package: dodil.ignite.v1 · Service: SecretService

CRUD over named, Vault-backed credential slots (a git PAT or a registry login), scoped per organization and referenced by name from builds and deploys. All four RPCs are unary.

RPCHTTPDescription
CreateSecretPOST /v1/ignite/secretsCreate or overwrite a named slot
GetSecretGET /v1/ignite/secrets/{name}Read a slot, including its value
ListSecretsGET /v1/ignite/secretsList slots (metadata only)
DeleteSecretDELETE /v1/ignite/secrets/{name}Remove a slot (idempotent)

HTTP examples use staging (https://api.dev.dodil.io) and send camelCase JSON; gRPC examples use $IGNITE_GRPC and proto snake_case (see Conventions). Every call needs Authorization: Bearer $DODIL_TOKEN.

The SecretValue shape

A slot holds exactly one credential, modeled as a oneof — set git_secret or registry_secret, never both.

GitSecret

FieldTypeDescription
usernamestringGit username (e.g. GitHub username; Bitbucket workspace)
tokenstringPersonal access token / app password for HTTPS clone

RegistrySecret

FieldTypeDescription
usernamestringRegistry login
passwordstringRegistry password or token
server_addressstringRegistry host (ghcr.io, quay.io, …). Optional; empty defaults to Docker Hub

SecretMetadata (returned by every RPC that reports a slot)

FieldTypeDescription
namestringSlot name
typestringDiscriminator: "git_secret" or "registry_secret"
created_at_msint64Creation time (epoch ms; JSON string)
updated_at_msint64Last-write time (epoch ms; JSON string)

CreateSecret

POST /v1/ignite/secrets — create a slot, or overwrite an existing one with the same name (this is how you rotate). Returns metadata only.

Request

FieldTypeDescription
namestringSlot name (1–64 chars; letters, digits, -, _)
valueSecretValueExactly one of git_secret / registry_secret
curl -X POST https://api.dev.dodil.io/v1/ignite/secrets \ -H "Authorization: Bearer $DODIL_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "ghcr-pull", "value": { "registrySecret": { "username": "acme-bot", "password": "ghp_xxx", "serverAddress": "ghcr.io" } } }'

Response

CreateSecretResponsemetadata (SecretMetadata).


GetSecret

GET /v1/ignite/secrets/{name} — read a slot including its value.

Slots are not write-only: this returns the stored token/password in cleartext to the owning org. Treat the GetSecret scope as access to the credential itself — see How Secrets Work.

curl https://api.dev.dodil.io/v1/ignite/secrets/ghcr-pull \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

GetSecretResponsename (string), value (SecretValue — the real credential), metadata (SecretMetadata).


ListSecrets

GET /v1/ignite/secrets — list every slot in the org. Metadata only — values are never returned here.

curl https://api.dev.dodil.io/v1/ignite/secrets \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

ListSecretsResponsesecrets (repeated SecretMetadata).


DeleteSecret

DELETE /v1/ignite/secrets/{name} — remove a slot. Idempotent: deleting a name that doesn’t exist is not an error.

curl -X DELETE https://api.dev.dodil.io/v1/ignite/secrets/ghcr-pull \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

DeleteSecretResponsedeleted (bool): true if a slot was removed, false if none existed.


See also