Skip to content

API Keys

Learnomy supports API keys for REST access. There is no API Keys screen in wp-admin – the standalone settings section was removed in Learnomy 1.5.0 – but the feature itself ships and is managed over the REST API.

Learnomy 1.5.0 removed the API Keys section from LMS Settings (along with its sidebar item). It was gated behind a feature flag and never reached general availability as a screen. Only the admin UI was retired; the authentication method was not.

Learnomy’s REST API accepts four kinds of credential. The first one that resolves a user wins, and an already-authenticated session is never overridden (includes/api/class-api-key-auth.php:28-56):

Method Use it for How it travels
Cookie + nonce Same-site requests from your own theme or admin screens WordPress session
Application Passwords The Learnomy companion mobile app Standard WordPress Basic auth
API key Server-to-server integrations and scripts X-API-Key header
JWT Headless front ends and custom integrations Authorization: Bearer <token>

Application Passwords are WordPress core, so nothing in Learnomy needs enabling for the app to sign in.

Keys are created, listed and revoked over REST by any logged-in user, for their own account:

  1. CreatePOST /wp-json/learnomy/v1/auth/api-keys. The plaintext key is returned once, at creation. Store it then; it is not retrievable later.
  2. ListGET /wp-json/learnomy/v1/auth/api-keys. Returns metadata only, never the key itself.
  3. RevokeDELETE /wp-json/learnomy/v1/auth/api-keys/{key_id}, where key_id is the UUID from the list call.

Keys are stored against the owning user in wp_usermeta, not in a dedicated table.

Send it in the X-API-Key header:

curl https://example.com/wp-json/learnomy/v1/courses \
-H "X-API-Key: <your-key>"

The header is the only accepted transport. A key passed as a query parameter is ignored (includes/api/class-api-key-auth.php:61-72), which keeps keys out of server access logs and browser history.

An API key acts as the user who created it and carries exactly that user’s permissions. It is not a privileged or site-wide credential. Revoke a key the moment it leaks, and issue a fresh one.

  • The companion mobile app, or anything acting as a real member: Application Passwords.
  • A cron job, a reporting script, or another server calling in as one fixed account: API key.
  • A headless front end that signs users in and needs short-lived, refreshable credentials: JWT (15-minute access token, 30-day refresh).