AdRoll · Authentication Profile

Adroll Authentication

Authentication

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

AdvertisingDisplay AdvertisingRetargetingMarketingAdTechProgrammatic
Methods: oauth2, apiKey, http Schemes: 5 OAuth flows: authorizationCode, implicit, password, refreshToken API key in: query

Security Schemes

apikey apiKey
· in: query (apikey)
personalAccessToken http
scheme: Token · in: header ()
oauth2 oauth2
· flows: authorizationCode, implicit, password, refreshToken
serverAccessToken http
scheme: Token · in: header ()
mcpOAuth oauth2

Source

Authentication Profile

adroll-authentication.yml Raw ↑
generated: '2026-08-13'
method: searched
source: https://apidocs.nextroll.com/guides/get-started.html
docs: https://apidocs.nextroll.com/guides/oauth.html
note: >-
  NextRoll publishes no OpenAPI file, so this profile is read from the published
  auth guides rather than derived from securitySchemes. Every NextRoll API
  requires TWO credentials at once: a user credential (OAuth access token or
  Personal Access Token) in the Authorization header AND the registered
  application's client ID in the `apikey` query parameter. Omitting the apikey
  returns HTTP 401 apiproxy:3 even when the user credential is valid — verified
  live against https://services.adroll.com/reporting/api/v1/query.

summary:
  types: [oauth2, apiKey, http]
  api_key_in: [query]
  oauth2_flows: [authorizationCode, implicit, password, refreshToken]
  requires_two_credentials: true
  registration_required: true
  registration_url: https://developers.nextroll.com/accounts/create

schemes:
- name: apikey
  type: apiKey
  in: query
  parameter: apikey
  required_on: every request to every service
  description: >-
    The registered application's consumer key (client ID). Always sent in the URL
    query string regardless of HTTP method — the docs state explicitly that it
    must NOT be placed in the body of POST/PUT/PATCH requests.
  obtained_from: https://developers.nextroll.com/my-apps/new-app
  source: https://apidocs.nextroll.com/guides/api-key-migration.html

- name: personalAccessToken
  type: http
  scheme: Token
  in: header
  header: Authorization
  format: 'Authorization: Token MYTOKEN'
  description: >-
    Personal Access Token identifying the AdRoll user, for scripts and simple
    integrations. Created and revoked by the user at
    https://app.adroll.com/settings/personal-access-tokens. Must be paired with
    the application's client ID in the apikey query parameter.
  source: https://apidocs.nextroll.com/guides/get-started.html

- name: oauth2
  type: oauth2
  conforms_to: [RFC 6749, RFC 6750]
  authorizationUrl: https://services.adroll.com/auth/authorize
  tokenUrl: https://services.adroll.com/auth/token
  flows:
  - flow: authorizationCode
    note: three-legged; the most commonly used grant
  - flow: implicit
    note: for clients that cannot keep a secret, e.g. single-page apps
  - flow: password
    note: >-
      Resource Owner Password Credentials. The docs recommend it only when
      browser redirection is impossible.
  - flow: refreshToken
    note: >-
      Refresh tokens expire one year after issue AND on first use; a new refresh
      token is returned with every new access token.
  token_lifetime:
    access_token: 24 hours (all grant types)
    refresh_token: 1 year, single-use
  token_transport:
  - 'Authorization: Bearer {ACCESS_TOKEN}'
  - 'form-encoded body parameter access_token={ACCESS_TOKEN}'
  - 'URL query parameter ?access_token={ACCESS_TOKEN}'
  scopes: [all]
  source: https://apidocs.nextroll.com/guides/oauth.html

- name: serverAccessToken
  type: http
  scheme: Token
  in: header
  header: Authorization
  applies_to: Server-to-Server (S2S) Event API — https://srv.adroll.com/api
  description: >-
    Server Access Tokens (SATs) are a separate credential class for the S2S event
    endpoint. They are not self-service: the docs say you must contact your
    account manager, and NextRoll shares the credential through a one-time
    1Password share link that expires after seven days.
  self_service: false
  source: https://apidocs.nextroll.com/server-to-server-api/reference.html

- name: mcpOAuth
  type: oauth2
  applies_to: AdRoll MCP Server — https://services.adroll.com/mcp
  conforms_to: [RFC 8414, RFC 9728, RFC 7591, PKCE RFC 7636]
  issuer: https://services.adroll.com/mcp
  authorizationUrl: https://services.adroll.com/mcp/auth/authorize
  tokenUrl: https://services.adroll.com/mcp/auth/token
  registrationUrl: https://services.adroll.com/mcp/auth/register
  revocationUrl: https://services.adroll.com/mcp/auth/revoke
  introspectionUrl: https://services.adroll.com/mcp/auth/introspect
  grant_types: [authorization_code, refresh_token]
  code_challenge_methods: [S256]
  token_endpoint_auth_methods: [none, client_secret_basic, client_secret_post]
  scopes: [mcp]
  dynamic_client_registration: true
  note: >-
    A separate authorization surface from the platform OAuth above, published as
    RFC 8414 / RFC 9728 metadata documents. This one supports Dynamic Client
    Registration and mandatory PKCE, which the platform OAuth guide does not
    mention.
  source: https://services.adroll.com/.well-known/oauth-authorization-server

transport:
  https_only: true
  note: 'The docs state HTTPS is the only supported protocol.'

gaps:
- >-
  Fine-grained OAuth scopes are not implemented — the docs say "At this time, we
  only support a single scope" (`all`), with finer scopes "in the future". An
  agent granted an AdRoll token therefore holds full account access.
- >-
  Passing the access token in a URL query parameter is documented as a supported
  option; tokens in URLs leak through logs, referrers and proxies.
- >-
  The S2S credential is distributed by human handoff (account manager + a
  1Password share link), so it cannot be provisioned programmatically.

x-evidence:
  checked: '2026-08-13'
  probes:
  - {url: 'https://services.adroll.com/reporting/api/v1/query', http_status: 401, body: "apiproxy:3 Missing 'apikey' query parameter"}
  - {url: 'https://services.adroll.com/.well-known/oauth-authorization-server', http_status: 200}