Criteo · Authentication Profile

Criteo Authentication

Authentication

Criteo secures its APIs with oauth2 across 1 declared security scheme, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the clientCredentials and authorizationCode flow(s).

AdvertisingAgent SkillsAnalyticsAudiencesCampaignsCatalogCommerceCommerce MediaDisplay AdvertisingMarketingMCPMediaAuthenticationOpenAPIReportingRetailRetail MediaSponsored Products
Methods: oauth2 Schemes: 1 OAuth flows: clientCredentials, authorizationCode API key in:

Security Schemes

oauth oauth2
· flows: clientCredentials, authorizationCode

Source

Authentication Profile

Raw ↑
generated: '2026-08-13'
method: searched
source: openapi/criteo-retail-media-api-openapi.yml, openapi/criteo-marketing-solutions-api-openapi.yml, openapi/criteo-commerce-grid-api-openapi.yml
docs: https://developers.criteo.com/criteo-apis/docs/api-authorization
supersedes: >-
  Rewritten 2026-08-13 against Criteo's real published OpenAPI. The prior version was derived
  from a hand-authored scaffold and carried an authorizationUrl of
  https://consent.criteo.com/authorize; the real spec and the real RFC 8414 metadata both
  give different values, recorded below.

summary:
  types: [oauth2]
  oauth2_flows: [clientCredentials, authorizationCode]
  api_key_in: []
  scope_count: 22
  token_transport: Bearer token in the Authorization header
  token_lifetime_seconds: 900
  anonymous_operations: 0
  security_coverage: >-
    All 219 operations across the three specs declare a security requirement — there are no
    unauthenticated operations. Four of them require a valid token but no specific scope
    (empty scope array): GetCurrentApplication in each of the three services, and
    ListAdvertisers in Marketing Solutions.
  token_endpoint_not_in_spec: >-
    POST https://api.criteo.com/oauth2/token is NOT declared in any of the three published
    OpenAPI documents. The one operation every client must call first is absent from the
    machine-readable contract and exists only in prose. An agent bootstrapping purely from
    the spec cannot obtain a token.

schemes:
- name: oauth
  type: oauth2
  flows:
  - flow: clientCredentials
    tokenUrl: https://api.criteo.com/oauth2/token
    declared_scopes: 0
  - flow: authorizationCode
    authorizationUrl: https://api.criteo.com/oauth2
    tokenUrl: https://api.criteo.com/oauth2/token
    declared_scopes: 0
  sources:
  - openapi/criteo-retail-media-api-openapi.yml
  - openapi/criteo-marketing-solutions-api-openapi.yml
  - openapi/criteo-commerce-grid-api-openapi.yml
  note: >-
    The flow `scopes` maps are empty in all three specs; the 22 real scope strings live on
    per-operation security requirements. See scopes/criteo-scopes.yml.

grants:
- grant: client_credentials
  audience: Server-to-server integrations acting for the app owner
  rate_limit: 250 calls/min default, 40 calls/min on reporting endpoints
  rate_limit_applies_at: application level
  consent_required: false
  note: >-
    A single shared access token per application. Criteo's own rate-limit guidance warns that
    this is the constraining choice for multi-tenant platforms: ten concurrent users share
    one 250/min budget.
- grant: authorization_code
  audience: Self-service platforms acting on behalf of a consenting advertiser
  rate_limit: 10 calls/min per consented account, scaling linearly with accounts consented
  rate_limit_applies_at: account level
  consent_required: true
  consent_url: https://consent.criteo.com/request
  revocable: true
  revocation_note: >-
    Advertisers manage and revoke app access from a consent dashboard. A revoked grant
    surfaces as HTTP 403 on subsequent calls, not 401.
- grant: refresh_token
  audience: Authorization Code applications refreshing an expired access token
  source: https://mcp.criteo.com/.well-known/oauth-authorization-server

discovery:
  rfc8414_metadata: https://mcp.criteo.com/.well-known/oauth-authorization-server
  rfc9728_metadata: https://mcp.criteo.com/.well-known/oauth-protected-resource
  issuer: https://api.criteo.com
  authorization_endpoint: https://consent.criteo.com/request
  token_endpoint: https://api.criteo.com/oauth2/token
  grant_types_supported: [authorization_code, refresh_token]
  response_types_supported: [code]
  bearer_methods_supported: [header]
  saved_to: [well-known/criteo-oauth-authorization-server.json, well-known/criteo-oauth-protected-resource.json]
  finding: >-
    Criteo publishes RFC 8414 authorization-server metadata, but ONLY on the MCP host
    (mcp.criteo.com). The same path returns 404 on api.criteo.com and developers.criteo.com,
    so a client that discovers Criteo through the REST API or the docs cannot find it. The
    metadata it publishes also omits client_credentials from grant_types_supported even
    though the REST API's primary grant IS client_credentials — the document describes the
    MCP server's grants, not the platform's.

application_model:
  docs: https://developers.criteo.com/criteo-apis/docs/create-your-app
  credentials_docs: https://developers.criteo.com/criteo-apis/docs/get-credentials
  steps:
  - Create a partner account on the developer portal
  - Create an organization
  - Create an API application, choosing a service and a per-domain authorization level
  - Retrieve client_id and client_secret
  - For Authorization Code apps, generate a consent URL and have the advertiser grant access
  note: >-
    Credentials are issued per application, not per user, and the permission set is fixed at
    app-configuration time rather than requested per token.

errors:
  '401': Missing, malformed or expired token
  '403': >-
    Valid token, but the application lacks permission on the advertiser or domain, or consent
    was never granted or has been revoked. Criteo's guidance is to relaunch the OAuth2 flow.
  caveat: >-
    On BULK endpoints a missing resource or an insufficient permission returns HTTP 200 with
    an empty response rather than 403 — documented by Criteo and important for any agent that
    treats 200 as success.
  reference: https://developers.criteo.com/criteo-apis/docs/api-error-codes

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.
All 92 tools →

Call it yourself

curl for this page
This security artifact
curl "https://apis.io/api/v1/security/criteo-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.