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