Every call to /api/v1/* needs an Authorization: Bearer … header carrying one of your keys — the one exception is signed output-download URLs, which carry their own expiring signature instead. Keys are 41 characters, prefixedvvx_live_, and tied to your getvivix account's credit wallet.
Key creation requires a Pro, Pro Plus, or Ultimate plan — Settings hides the "API & Webhooks" section on Free/Standard, and a direct call returns the same 403 TIER_LOCKED either way.
Open Settings → API & Webhooks. Click Create new key, give it an optional name (helpful for distinguishing "production" from "ci" from "local"), copy the plaintext. Accounts can hold up to 10 keys at once — revoke an old one to make room.
The plaintext is shown ONCE. After 30 seconds the panel auto-clears, and there's no way for us to recover it — only the sha256 hash is stored on our side. If you lose it, create a new one and revoke the old.
curl https://getvivix.com/api/v1/credits \
-H "Authorization: Bearer vvx_live_aB3cD4eF5gH6iJ7kL8mN9oP0qR1sT2uV"That's it. Same header on every request.
Best practice: rotate on a schedule, especially after any suspected leak (laptop stolen, contractor offboarded, secrets repo accidentally made public).
401.revoked_at on the row but keep the record for audit. Auth checks reject any key with a non-null revoked_at..env.local, secrets managers, your platform's vault.vvx_live_aB3).401 AUTH_MISSING, 401 KEY_INVALID, 401 KEY_REVOKED, and 403 TIER_LOCKED