FORGEZERO

REFERENCE

API keys

How external callers authenticate. The key is a signing seed rather than a password, so it never travels and we store nothing that can authenticate.

The key is a seed, not a password

The SDK derives an Ed25519 + ML-DSA-65 keypair from it and signs every request. The seed itself is never transmitted, and ForgeZero stores only the public halves — a full dump of our key collection yields nothing anyone can sign with.

fz_live_<keyId>_<seed>     fz_test_... outside production

Scope every key to exactly what it needs

Scopes name exact entries; wildcards are not accepted. An external key can never read a whole vault — a full project sync is available only to an attested managed node, and that is checked on the credential itself rather than on the scope list, so it cannot be granted by mistake.

vault.read:<project>/<env>/<entry>
vault.write:<project>/<env>/<entry>
vault.list:<project>/<env>

Controls, and what each is actually worth

Scopes, expiry and revocation are real: status is read fresh on every call, so a revoked key stops working on the next request rather than when some token expires. An IP allowlist is real for fixed egress. An origin allowlist is advisory only — any server-side caller can set that header — and the interface says so rather than implying a guarantee it cannot make.

Read-only unless you say otherwise

Write scope is opt-in and listed separately, because the person who writes a secret should not silently become the person handing out access to it. A leaked key should cost you one entry, not the vault.