LIVEKINDLY · Authentication Profile

Livekindly Authentication

Authentication

LIVEKINDLY secures its APIs with apiKey, http, and oauth2 across 3 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the authorizationCode flow(s).

CompanyFood and BeveragePlant-BasedAlternative ProteinConsumer Packaged GoodsSustainabilityManufacturingRetailContentNewsroom
Methods: apiKey, http, oauth2 Schemes: 3 OAuth flows: authorizationCode API key in: header

Security Schemes

applicationPassword http
scheme: basic
cookieNonce apiKey
· in: header (X-WP-Nonce)
mcp-oauth oauth2
· flows: authorizationCode

Source

Authentication Profile

Raw ↑
generated: '2026-08-04'
method: searched
source: openapi/livekindly-content-openapi.yml
also_source: https://thelivekindlyco.com/.well-known/oauth-authorization-server
docs: null
docs_note: >-
  LIVEKINDLY publishes no developer or authentication documentation. The baseline below was
  derived mechanically from the OpenAPI in this repo (itself derived from the live
  https://thelivekindlyco.com/wp-json/ route index) and then upgraded with the OAuth 2.0
  authorization-server metadata LIVEKINDLY actually serves at /.well-known/, which the spec
  derivation cannot see.
note: >-
  Two independent authentication models coexist on thelivekindlyco.com. (1) The wp/v2 content API
  is ANONYMOUS for reads — every collection in openapi/ returned 200 with no credential — and
  falls back to WordPress Application Passwords over HTTP Basic (or logged-in cookie +
  X-WP-Nonce in a browser) for writes. (2) The MCP endpoints are protected by a real OAuth 2.0
  authorization server with PKCE and a single "mcp" scope. Neither model is documented by
  LIVEKINDLY anywhere a developer would find it.
summary:
  types:
  - apiKey
  - http
  - oauth2
  api_key_in:
  - header
  oauth2_flows:
  - authorizationCode
  anonymous_read: true
schemes:
- name: applicationPassword
  type: http
  scheme: basic
  description: >-
    WordPress Application Passwords over HTTP Basic. Issued per-user from
    https://thelivekindlyco.com/wp-admin/authorize-application.php. Required for every write
    operation on wp/v2 and for the routes that return author or settings data.
  applies_to: livekindly:content
  sources:
  - openapi/livekindly-content-openapi.yml
- name: cookieNonce
  type: apiKey
  in: header
  parameter: X-WP-Nonce
  description: >-
    Logged-in cookie authentication paired with an X-WP-Nonce header. Browser/admin context only;
    not usable by a server-side or agent client.
  applies_to: livekindly:content
  sources:
  - openapi/livekindly-content-openapi.yml
- name: mcp-oauth
  type: oauth2
  description: >-
    OAuth 2.0 authorization code + PKCE (S256 required) protecting the WordPress MCP Adapter
    endpoints. Public clients only — token_endpoint_auth_methods is [none] — and client identity
    is expressed with a client-ID metadata document rather than dynamic client registration.
  applies_to: livekindly:mcp
  issuer: https://thelivekindlyco.com
  flows:
  - flow: authorizationCode
    authorizationUrl: https://thelivekindlyco.com/oauth/authorize
    tokenUrl: https://thelivekindlyco.com/oauth/token
    refreshUrl: https://thelivekindlyco.com/oauth/token
    scopes:
      mcp: The single scope the authorization server advertises.
  revocation_endpoint: https://thelivekindlyco.com/oauth/revoke
  scope_count: 1
  artifact: scopes/livekindly-scopes.yml
  sources:
  - https://thelivekindlyco.com/.well-known/oauth-authorization-server
  - https://thelivekindlyco.com/.well-known/oauth-protected-resource
anonymous_access:
  content_api:
    readable: true
    observed:
    - {operation: getPosts, url: 'https://thelivekindlyco.com/wp-json/wp/v2/posts?per_page=1', status: 200, x_wp_total: 39}
    - {operation: getPages, status: 200, x_wp_total: 19}
    - {operation: getBrand, status: 200, x_wp_total: 4}
    - {operation: getPartner, status: 200, x_wp_total: 4}
    - {operation: getJob, status: 200, x_wp_total: 6}
    - {operation: getMedia, status: 200, x_wp_total: 1145}
    - {operation: getCategories, status: 200, x_wp_total: 3}
    denied:
    - {operation: getUsers, status: 403, note: 'blocked at the edge by the Sucuri WAF (Block ID UAT007), which returns an HTML interstitial rather than the WordPress JSON error envelope — not an application permission check'}
  mcp:
    readable: false
    challenge: 'WWW-Authenticate: Bearer realm="https://thelivekindlyco.com", resource_metadata="https://thelivekindlyco.com/.well-known/oauth-protected-resource"'
    challenge_note: >-
      The 401 carries a correct RFC 9728 bearer challenge pointing at the protected-resource
      metadata, so an MCP client can discover the authorization server from the failure alone
      without any documentation. This is the strongest single piece of auth ergonomics on the
      whole LIVEKINDLY surface.
    observed:
    - {endpoint: /wp-json/mcp/mcp-oauth-server, method: tools/list, status: 401, code: mcp_unauthorized}
    - {endpoint: /wp-json/mcp/mcp-adapter-default-server, method: tools/list, status: 401, code: rest_forbidden}
    - {endpoint: /wp-json/wp-abilities/v1/abilities, status: 401, code: rest_forbidden}
transport_security:
  https_only: true
  tls_version: TLSv1.3
  hsts: false
  note: >-
    No Strict-Transport-Security header is set on thelivekindlyco.com, so a first plaintext
    request is not protected by HSTS. A Content-Security-Policy of upgrade-insecure-requests is
    present instead. See security/livekindly-domain-security.yml.