Automattic · Authentication Profile

Automattic Authentication

Authentication

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

CompanyContent ManagementPublishingBloggingWebsite HostingWeb PublishingContentCommentsSpam FilteringMediaAnalyticsDomainsE-CommerceOpen SourceDeveloper ToolsModel Context Protocol
Methods: oauth2, openIdConnect, http, apiKey Schemes: 6 OAuth flows: authorizationCode, refreshToken, clientCredentials API key in: body

Security Schemes

oauth2 oauth2
· flows: authorizationCode, refreshToken, clientCredentials
openIdConnect openIdConnect
bearerAuth http
scheme: bearer
applicationPassword http
scheme: basic
akismetApiKey apiKey
· in: body ()
vipPlatformToken http
scheme: bearer

Source

Authentication Profile

Raw ↑
generated: '2026-07-31'
method: searched
source: https://public-api.wordpress.com/.well-known/openid-configuration
docs: https://developer.wordpress.com/docs/api/oauth2/
summary:
  types: [oauth2, openIdConnect, http, apiKey]
  oauth2_flows: [authorizationCode, refreshToken, clientCredentials]
  api_key_in: [body]
  note: >-
    One OAuth 2.1 / OpenID Connect authorization server covers all three WordPress.com REST
    namespaces and the hosted MCP server. Akismet is the exception: it is a separate product on a
    separate host with a plain API key passed as a request field.
schemes:
- name: oauth2
  type: oauth2
  spec: OAuth 2.1
  issuer: https://public-api.wordpress.com
  discovery: https://public-api.wordpress.com/.well-known/oauth-authorization-server
  flows:
  - flow: authorizationCode
    authorizationUrl: https://public-api.wordpress.com/oauth2-1/authorize
    tokenUrl: https://public-api.wordpress.com/oauth2-1/token
    scopes: 21
  - flow: refreshToken
    tokenUrl: https://public-api.wordpress.com/oauth2-1/token
  - flow: clientCredentials
    tokenUrl: https://public-api.wordpress.com/oauth2-1/token
  pkce: [S256]
  dynamic_client_registration: https://public-api.wordpress.com/oauth2-1/register
  token_endpoint_auth_methods: [client_secret_basic, client_secret_post, none]
  revocation: https://public-api.wordpress.com/oauth2-1/revoke
  introspection: https://public-api.wordpress.com/oauth2-1/token-info
  resource_indicators_supported: true
  token_expiry: two weeks
  scopes_artifact: scopes/automattic-scopes.yml
  applies_to: [/rest/v1.x, /wp/v2, /wpcom/v2, /wpcom/v2/mcp/v1]
  sources:
  - https://public-api.wordpress.com/.well-known/oauth-authorization-server
  - openapi/automattic-wordpress-com-rest-v1-1-openapi.yml
  - openapi/automattic-wordpress-com-wp-v2-openapi.yml
  - openapi/automattic-wordpress-com-wpcom-v2-openapi.yml
- name: openIdConnect
  type: openIdConnect
  openIdConnectUrl: https://public-api.wordpress.com/.well-known/openid-configuration
  id_token_signing_alg_values_supported: [RS256]
  subject_types_supported: [public]
  userinfo_endpoint: https://public-api.wordpress.com/oauth2-1/userinfo
  jwks_uri: https://public-api.wordpress.com/.well-known/jwks.json
  claims_supported: [sub, iss, aud, exp, iat, auth_time, nonce, name, preferred_username, picture,
    email, email_verified, updated_at]
  sources: [https://public-api.wordpress.com/.well-known/openid-configuration]
- name: bearerAuth
  type: http
  scheme: bearer
  description: 'Authorization: Bearer <access_token> — the wire format for every OAuth 2.1 token.'
  bearer_methods_supported: [header]
  sources:
  - https://public-api.wordpress.com/.well-known/oauth-protected-resource
  - openapi/automattic-wordpress-com-rest-v1-1-openapi.yml
- name: applicationPassword
  type: http
  scheme: basic
  description: >-
    Application Passwords are documented as a shortcut for personal and development use against
    WordPress.com, in place of the full OAuth2 flow.
  docs: https://developer.wordpress.com/docs/api/
  sources: [https://developer.wordpress.com/docs/api/]
- name: akismetApiKey
  type: apiKey
  in: body
  parameter_name: key
  description: >-
    Akismet authenticates with an API key sent as a request field alongside a `blog` field
    identifying the site. There is no OAuth on this API and no bearer header.
  applies_to: [https://rest.akismet.com]
  sources: [openapi/automattic-akismet-openapi.yml, https://akismet.com/development/api/]
- name: vipPlatformToken
  type: http
  scheme: bearer
  description: >-
    The WordPress VIP GraphQL Platform API requires a VIP token; unauthenticated requests to
    https://api.wpvip.com/graphql return 401 Unauthorized.
  docs: https://docs.wpvip.com/vip-api/getting-started
  sources: [graphql/automattic-vip-platform-api.yml]
legacy_and_deprecated:
- item: implicit flow
  status: legacy/deprecated
  source: https://developer.wordpress.com/docs/api/oauth2/
- item: password grant
  status: development and testing only
  source: https://developer.wordpress.com/docs/api/oauth2/
- item: /oauth2/authorize and /oauth2/token
  status: >-
    older endpoint pair still documented and still referenced by the ai-plugin manifest; the
    /oauth2-1/ pair is what the discovery documents advertise.
x-evidence:
  fetched: '2026-07-31'
  urls:
  - https://public-api.wordpress.com/.well-known/openid-configuration
  - https://public-api.wordpress.com/.well-known/oauth-authorization-server
  - https://public-api.wordpress.com/.well-known/oauth-protected-resource
  - https://developer.wordpress.com/docs/api/oauth2/