Developers Authentication

Developers

Authentication

Create Frontpage API keys, store them safely, and authenticate the CLI in interactive and CI environments.

Create a key

  1. Open app.frontpage.host and sign in.
  2. Profile menu → Developers.
  3. Create key, then copy fp_live_… immediately.

Only site owners who own at least one Scale (or higher) site can create keys (editor session, not Bearer). Keys work for all sites that owner can access, at that user’s role on each site. Site-scoped commands on Starter or Growth return 403. There is no per-site key and no “viewer-only” key. Sharing a key shares push, People, inbox, settings, and every other CLI verb on entitled sites.

Key mint is limited to 5 per user per 24 hours (RL-MINT). The secret is shown once. Rotate (delete) leaked keys from the same Developers panel.

Interactive login

frontpage login
# paste the key when prompted

frontpage whoami
frontpage doctor

On macOS the CLI prefers the OS keychain (service frontpage-cli). Otherwise it stores the key in ~/.config/frontpage/api-key with mode 0600.

Non-interactive / CI

export FRONTPAGE_API_KEY=fp_live_…
frontpage doctor --json
frontpage sites --json

FRONTPAGE_API_KEY always wins over the keychain for that process. Optional:

export FRONTPAGE_API_BASE=https://app.frontpage.host

Default API base is production https://app.frontpage.host.

Pass the key once on the command line

frontpage login "$FRONTPAGE_API_KEY"

Logout

frontpage logout

List sites

frontpage sites --json

Human output reminds you to use the subdomain with frontpage use. JSON includes at least:

Field Use it for
siteId Internal UUID. Never pass this to --site or frontpage use
subdomain The only legal --site / frontpage use value. Example acme, not acme.frontpage.host
role viewer, editor, or admin on that site. Viewer cannot mutate People, SEO, redirects, or push files
name Display name. Not a CLI target
customDomain Display only. Never pass this to --site

Link a working folder

cd ~/sites/acme
frontpage use acme
cat .frontpage/state.json
# { "slug": "acme" }

Switching sites with use clears baseCommitSha. Run pull again before push.