Zemanta · Authentication Profile

Zemanta Authentication

Authentication

Zemanta declares 2 security scheme(s) across its OpenAPI definitions.

CompanyAdvertisingNative AdvertisingProgrammaticDSPAdTechContent RecommendationMarketingCampaign ManagementDemand Side PlatformMedia Buying
Methods: Schemes: 2 OAuth flows: API key in:

Security Schemes

oauth2
http
scheme: bearer

Source

Authentication Profile

zemanta-authentication.yml Raw ↑
generated: '2026-08-12'
method: searched
source: https://dev.zemanta.com/one/api/
docs: https://dev.zemanta.com/one/api/
api: zemanta:teads-dsp-api
summary: >-
  The Teads DSP REST API (formerly the Zemanta One API) uses two-legged OAuth 2.0
  with the client_credentials grant. Client credentials are self-issued from the
  DSP console; the resulting bearer token is presented on every REST call.
schemes:
- key: oauth2ClientCredentials
  type: oauth2
  flow: clientCredentials
  token_url: https://oneapi.zemanta.com/o/token/
  token_endpoint_auth_method: client_secret_basic
  token_request_content_type: application/x-www-form-urlencoded
  grant_type: client_credentials
  scopes:
  - read
  - write
  token_type: Bearer
  token_lifetime_seconds: 36000
  token_lifetime_note: >-
    Access tokens are valid for 10 hours; the docs instruct clients to cache and
    reuse the token for the duration of its validity rather than re-issuing per call.
  applied_to: all /rest/v1/ operations
  evidence: >-
    "Teads DSP REST API uses two-legged OAuth2 authentication using client credentials."
    POST https://oneapi.zemanta.com/o/token/ with Authorization: Basic base64(client_id:client_secret)
    and body grant_type=client_credentials returns {"access_token": ..., "token_type": "Bearer",
    "expires_in": 36000, "scope": "read write"}.
- key: bearerToken
  type: http
  scheme: bearer
  header: Authorization
  format: 'Bearer <access_token>'
  applied_to: all /rest/v1/ operations
  evidence: >-
    "The client credentials are used to acquire an access token, which must then be
    passed to all REST API calls as the header Authorization: Bearer <access_token>"
credential_issuance:
  self_service: partial
  console_url: https://dsp.outbrain.com/o/applications/
  steps:
  - Log in to the Teads DSP console (one.zemanta.com now 301-redirects to dsp.outbrain.com).
  - Open https://dsp.outbrain.com/o/applications/ and click "New Application".
  - Name the application and save; the resulting Client ID and Client Secret are the API credentials.
  gate: >-
    API access itself is sales-gated — "In order to use Teads DSP REST API, please contact
    your sales representative." The credential-creation screen is only reachable by an
    authenticated DSP customer.
  support_contact: api-support@zemanta.com
probes:
- url: https://oneapi.zemanta.com/o/token/
  method: POST
  http_status: 405
  note: GET/HEAD rejected; the route exists.
- url: https://dsp.outbrain.com/o/token/
  method: POST
  body: grant_type=client_credentials
  http_status: 401
  response: '{"error": "invalid_client"}'
  headers_observed:
  - 'www-authenticate: Bearer error="invalid_client"'
  note: >-
    Live, anonymous confirmation that the OAuth2 token endpoint is deployed and speaks
    RFC 6749 / RFC 6750 error semantics. dsp.outbrain.com is the same Django application
    as oneapi.zemanta.com (both emit the x_z1_trace_id header, "z1" = Zemanta One).
notes:
- No API-key, mutualTLS or OpenID Connect scheme is documented for this API.
- No /.well-known/openid-configuration or /.well-known/oauth-authorization-server document is served on any Zemanta host (see well-known/zemanta-well-known.yml).