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
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.