ResilientLang docsDeveloper documentation (draft, product name is a placeholder)

API keys

KindFormatSecret?Used for
Site keyrl_site_<env>_<22 chars base32>No. Public, embedded in pagesIdentifies a site to the loader and in bundle URLs
Secret API keyrl_sec_<env>_<32 chars base32>YesServer-to-server calls: plugins, backends, CI. Sent as Authorization: Bearer rl_sec_...

<env> is live or test.

Secret key rules#

Scopes#

ScopeAllows
sites:read, sites:writeList and read sites; create, change and scan sites
strings:writeSubmit source strings
translations:read, translations:writeRead, export and glossary; edit, translate and import
bundles:publishBuild and publish bundles
usage:readUsage figures
keys:manageCreate, rotate and revoke keys (test keys cannot create keys)
webhooks:manageManage webhook endpoints
audit:read, audit:manageRead the audit log; change its retention
billing:read, billing:manageReserved for billing; the routes currently check the signed-in role, not the key

Give a key only what it needs: a CI job that publishes needs bundles:publish, not keys:manage.

The public signing key#

Separate from API keys: the Ed25519 public key given to the loader (data-public-key) verifies manifest signatures. It is public. The matching private key stays with the platform and never leaves it. Keys are per site, and several public keys can be listed so a key can be replaced.