Acquia · Authentication Profile
Acquia Authentication
Authentication
Acquia secures its APIs with apiKey and oauth2 across 2 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the clientCredentials flow(s).
ContentExperienceDrupalDXPCMSDigital Asset ManagementCloud HostingHeadless
Methods: apiKey, oauth2
Schemes: 2
OAuth flows: clientCredentials
API key in: header
Security Schemes
Acquia_Cloud_API_Documentation_OAuth2 oauth2
· flows: clientCredentials
Codebase_Service_JWT apiKey
· in: header (Authorization)
Source
Authentication Profile
generated: '2026-08-30'
method: searched
source: openapi/acquia-account-api-openapi.yml, openapi/acquia-agreements-api-openapi.yml, openapi/acquia-application-performance-monitoring-services-api-openapi.yml,
openapi/acquia-applications-api-openapi.yml, openapi/acquia-cloud-ide-api-openapi.yml, openapi/acquia-codebases-api-openapi.yml,
openapi/acquia-current-system-health-api-openapi.yml, openapi/acquia-distributions-api-openapi.yml,
openapi/acquia-email-api-openapi.yml, openapi/acquia-environments-api-openapi.yml, openapi/acquia-identity-providers-api-openapi.yml,
openapi/acquia-invite-api-openapi.yml ...
summary:
types:
- apiKey
- oauth2
api_key_in:
- header
oauth2_flows:
- clientCredentials
schemes:
- name: Acquia_Cloud_API_Documentation_OAuth2
type: oauth2
flows:
- flow: clientCredentials
tokenUrl: https://accounts.acquia.com/api/token
scopes: 0
description: 'All Cloud API calls need to be authenticated in order to work. You authenticate using
a token that you can generate on your Acquia Profile page.
### To generate a token:
1. Sign in to the [Acquia Cloud](https://cloud.acquia.com/) interface using your email address and
Acquia password.
2. Click your user avatar in the upper right corner, and then click **Account Settings**.
3. On the Profile page'
sources:
- openapi/acquia-account-api-openapi.yml
- openapi/acquia-agreements-api-openapi.yml
- openapi/acquia-application-performance-monitoring-services-api-openapi.yml
- openapi/acquia-applications-api-openapi.yml
- openapi/acquia-cloud-ide-api-openapi.yml
- openapi/acquia-codebases-api-openapi.yml
- openapi/acquia-current-system-health-api-openapi.yml
- openapi/acquia-distributions-api-openapi.yml
- openapi/acquia-email-api-openapi.yml
- openapi/acquia-environments-api-openapi.yml
- openapi/acquia-identity-providers-api-openapi.yml
- openapi/acquia-invite-api-openapi.yml
- openapi/acquia-messages-api-openapi.yml
- openapi/acquia-notifications-api-openapi.yml
- openapi/acquia-options-api-openapi.yml
- openapi/acquia-organizations-api-openapi.yml
- openapi/acquia-private-networks-api-openapi.yml
- openapi/acquia-subscriptions-api-openapi.yml
- openapi/acquia-teams-and-permissions-api-openapi.yml
- name: Codebase_Service_JWT
type: apiKey
in: header
parameter: Authorization
description: Value for the Authorization header parameter.
sources:
- openapi/acquia-account-api-openapi.yml
- openapi/acquia-agreements-api-openapi.yml
- openapi/acquia-application-performance-monitoring-services-api-openapi.yml
- openapi/acquia-applications-api-openapi.yml
- openapi/acquia-cloud-ide-api-openapi.yml
- openapi/acquia-codebases-api-openapi.yml
- openapi/acquia-current-system-health-api-openapi.yml
- openapi/acquia-distributions-api-openapi.yml
- openapi/acquia-email-api-openapi.yml
- openapi/acquia-environments-api-openapi.yml
- openapi/acquia-identity-providers-api-openapi.yml
- openapi/acquia-invite-api-openapi.yml
- openapi/acquia-messages-api-openapi.yml
- openapi/acquia-notifications-api-openapi.yml
- openapi/acquia-options-api-openapi.yml
- openapi/acquia-organizations-api-openapi.yml
- openapi/acquia-private-networks-api-openapi.yml
- openapi/acquia-subscriptions-api-openapi.yml
- openapi/acquia-teams-and-permissions-api-openapi.yml
docs:
- https://dev.acquia.com/source-cms/reference/authentication.md
- https://docs.acquia.com/acquia-cloud-platform/cloud-platform-api-v2-authentication
- https://cloudapi-docs.acquia.com/
searched_upgrade_note: Upgraded derived -> searched on 2026-08-30. The derived profile saw only the Cloud
Platform securitySchemes; the Source CMS OAuth surface below - three grants, published token lifetimes,
a 22-scope vocabulary, dynamic client registration and the exact failure diagnostics - is read from
Acquia's own authentication reference and was absent from every prior round.
surfaces:
- name: Cloud Platform API
base_url: https://cloud.acquia.com/api
type: oauth2
flows:
- client_credentials
token_url: https://accounts.acquia.com/api/token
credential_origin: API key + secret generated by the user at cloud.acquia.com > Account Settings > API
Tokens. The secret is displayed once.
authorization_model: Teams and Permissions roles, not OAuth scopes
scopes: organization:{uuid} only, and only under Federated Authentication
docs: https://docs.acquia.com/acquia-cloud-platform/cloud-platform-api-v2-authentication
- name: Acquia Content API (Source CMS)
base_url: '{DRUPAL_SITE_URL}'
type: oauth2
flows:
- client_credentials
- authorization_code
- refresh_token
token_url: '{DRUPAL_SITE_URL}/oauth/token'
authorize_url: '{DRUPAL_SITE_URL}/oauth/authorize'
request_header: 'Authorization: Bearer <token> (exactly one space after Bearer)'
token_format: JWT
credential_origin: API client ID and secret created in the site admin UI at API > API clients; the secret
is shown only once.
token_lifetimes:
access_token_seconds: 300
authorization_code_seconds: 300
refresh_token_seconds: 1209600
refresh_token_availability: Returned only by the authorization_code and refresh_token grants. client_credentials
NEVER returns one.
scope_count: 22
anonymous_access: A site's Public access setting (API > JSON:API) can allow unauthenticated GETs of
published content. Unpublished content always requires content:administer.
docs: https://dev.acquia.com/source-cms/reference/authentication.md
- name: Acquia Source MCP server
base_url: '{DRUPAL_SITE_URL}/mcp'
type: oauth2
flows:
- client_credentials
- authorization_code (via dynamic client registration)
dynamic_client_registration: '{DRUPAL_SITE_URL}/oauth/register'
discovery:
- '{DRUPAL_SITE_URL}/.well-known/oauth-protected-resource'
- '{DRUPAL_SITE_URL}/.well-known/oauth-protected-resource/mcp'
- '{DRUPAL_SITE_URL}/.well-known/oauth-authorization-server'
- '{DRUPAL_SITE_URL}/.well-known/jwks.json'
scopes_supported: 16
challenge_gap: The 401 WWW-Authenticate header is only Bearer realm="mcp_server" - it does NOT carry
an RFC 9728 resource_metadata parameter, so a client must know the well-known URL out of band.
docs: https://dev.acquia.com/source-cms/reference/mcp-server.md
- name: Acquia identity provider (accounts.acquia.com)
type: openIdConnect
issuer: https://id.acquia.com/oauth2/default
discovery: https://accounts.acquia.com/.well-known/openid-configuration
discovery_status: 200
saved_to: well-known/acquia-openid-configuration.json
grants_supported:
- authorization_code
- implicit
- refresh_token
- password
- client_credentials
- device_code
- CIBA
note: Okta-backed. This is the human/SSO identity layer, distinct from the API token surfaces above.
failure_diagnostics:
- condition: expired access token
status: 401
where: WWW-Authenticate header, NOT the body
detail: error="access_denied", error_description="Access token could not be verified"
- condition: malformed token
status: 401
where: WWW-Authenticate header; the BODY IS HTML, not JSON
detail: e.g. Bearer realm="OAuth", error="access_denied", error_description="The JWT string must have
two dots"
- condition: wrong client id or secret
status: 401
where: JSON body from /oauth/token
detail: '{"error":"invalid_client","error_description":"Client authentication failed"}'
- condition: unknown or unselected scope requested
status: 400
where: JSON body from /oauth/token; hint names the offending scope
detail: '{"error":"invalid_scope","error_description":"The requested scope is invalid, unknown, or malformed"}'
- condition: valid token missing the needed scope
status: 403
where: JSON:API error document; detail names the missing permission
detail: Existing tokens do NOT gain scopes retroactively - select the scope, then request a new token.
cross_links:
scopes: scopes/acquia-scopes.yml
conventions: conventions/acquia-conventions.yml
errors: errors/acquia-problem-types.yml
mcp: mcp/acquia-mcp.yml
Work with this as data
Every security artifact here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for security posture
4 MCP tools reach this
find_securityBrowse and filter every security artifact in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This security artifact
curl "https://apis.io/api/v1/security/acquia-authentication"
All security posture
curl "https://apis.io/api/v1/security?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.