Skip to main content

Authentication

The Two Auth Modes

There are two distinct auth paths.

1. Normal User/App Auth

Normal user-facing API requests use:

X-ACM2-Session-Token

This is the token the WordPress plugin obtains from:

  • POST /api/auth/login
  • POST /api/auth/refresh

This is the auth mode used by the frontend app.

2. Trusted Plugin Auth

Privileged server-to-server requests use:

X-ACM2-Plugin-Secret

This is used for actions like:

  • user creation
  • login token exchange
  • refresh
  • password rekey
  • membership activate/deactivate
  • credit addition
  • backend user deletion

This is not for browsers.

What Is Not Used

Normal browser API-key auth is gone.

Do not build new clients around X-ACM2-API-Key for user requests.

Example: Normal Authenticated Request

curl -sS \
-H "X-ACM2-Session-Token: $SESSION_TOKEN" \
https://api.apicostx.com/api/runs

Example: Trusted Plugin Request

curl -sS \
-X POST \
-H "Content-Type: application/json" \
-H "X-ACM2-Plugin-Secret: $PLUGIN_SECRET" \
-d '{"uuid":"USER_UUID","db_key_hex":"..."}' \
https://api.apicostx.com/api/auth/login

Why Refresh Can Fail After Restart

Refresh needs the backend to still have the user's DB key in RAM.

If the backend restarted and lost that key cache, refresh returns 401 and the user must log into WordPress again.