# Zemanta / Teads DSP > Zemanta is a programmatic native-advertising demand-side platform founded in 2007 in Ljubljana, Slovenia. Outbrain acquired it in 2017 and it now trades as Teads DSP. The Teads DSP REST Campaign Management API — formerly the Zemanta One API — is live and still served from Zemanta-owned hosts: the API endpoint is https://oneapi.zemanta.com and the public reference is https://dev.zemanta.com/one/api/. This file was generated by API Evangelist from the provider's published developer surface. The provider does not serve an llms.txt of its own (probed 2026-08-12: dev.zemanta.com/llms.txt 404, oneapi.zemanta.com/llms.txt returns the single-page-app HTML shell). ## API - [Teads DSP API reference](https://dev.zemanta.com/one/api/): Complete REST reference for the Teads DSP Campaign Management API — accounts, credits, campaigns, budgets, goals, ad groups, ads, creatives, video assets, bid modifiers, measurement, audiences, publisher groups, deals, keyword lists, reporting and real-time statistics, plus a large constants reference. - API endpoint: `https://oneapi.zemanta.com` — resources live under `/rest/v1/`. - [Developer landing page](https://www.zemanta.com/api/): "Connect, Sync and Automate with our API." - Swagger UI: `https://dsp.outbrain.com/swagger/` — exists but is behind customer login; there is no public OpenAPI document. ## Authentication - Two-legged OAuth 2.0, `client_credentials` grant. - Token endpoint: `POST https://oneapi.zemanta.com/o/token/` with `Authorization: Basic base64(client_id:client_secret)` and body `grant_type=client_credentials`. - Response scope is `read write`; access tokens are valid for 10 hours (`expires_in: 36000`) and must be cached and reused. - Every REST call carries `Authorization: Bearer `. - Credentials are created at `https://dsp.outbrain.com/o/applications/` by an authenticated DSP customer. API access itself is sales-gated: "In order to use Teads DSP REST API, please contact your sales representative." ## Conventions - Send `Content-Type: application/json` on POST/PUT bodies. - Send `Api-Policy: strict` to make the server reject unknown fields with 400 and list them. - Success payloads are wrapped: `{"data": ...}`. List payloads add `count`, `next` and (limit-offset only) `previous`. - PUT performs a partial update — send only the fields that change. - Pagination is marker-offset by default (`marker`, `limit`); `offset` switches to limit-offset, which the provider warns is slower on large lists. `limit` maxes at 1000, defaults to 100. - Errors are a flat vendor envelope: `{"errorCode": "...", "details": "..."}`. This is not RFC 9457 problem+json. - Rate limit: 30 requests per second per user; exhaustion returns 429. No rate-limit response headers are published, so pace client-side. - No idempotency keys. POST creates are not safe to retry blindly. - No webhooks. Long-running work is polled: ad/creative batch uploads return a batch id, reports return a job id, video uploads return an asset whose status is polled. - Versioning is in the path (`/rest/v1/`); v1 is the only version ever published. - HTTPS is required. ## Resources - Accounts: `/rest/v1/accounts/`, `/rest/v1/accounts/{accountId}/sources/`, `/rest/v1/accounts/{accountId}/credits/` - Campaigns: `/rest/v1/campaigns/`, `/rest/v1/campaigns/{campaignId}/budgets/`, `/rest/v1/campaigns/{campaignId}/goals/`, `/rest/v1/campaigns/{campaignId}/stats/` - Ad groups: `/rest/v1/adgroups/`, `/rest/v1/adgroups/{adGroupId}/sources/`, `/rest/v1/adgroups/{adGroupId}/bid-modifiers`, `/rest/v1/adgroups/{adGroupId}/stats` - Ads and creatives: `/rest/v1/ads/`, `/rest/v1/adgroups/{adGroupId}/ads/batch`, `/rest/v1/creatives/`, `/rest/v1/creatives/batch`, `/rest/v1/video-assets/` - Measurement: `/rest/v1/measurement-services/`, `/rest/v1/conversion-definitions/`, `/rest/v1/audiences/` - Inventory control: `/rest/v1/publisher-groups/`, `/rest/v1/publishers/{publisherId}`, `/rest/v1/deals/`, `/rest/v1/keyword-lists/` - Reporting: `/rest/v1/reports/jobs/`, `/rest/v1/reports/books-closed/`, `/rest/v1/stats/` - Reference data: `/rest/v1/geolocations/`, `/rest/v1/dmp-categories/`, `/rest/v1/sources/` ## Support and change notices - Announcements (new features and maintenance windows): [Teads DSP API Announcements Mailing List](https://groups.google.com/forum/#!forum/zemanta-api-announcements/join) - Help center: [Outbrain / Teads DSP Help Center](https://intercom.help/outbrain_dsp/) - API support: api-support@zemanta.com - There is no public changelog and no status page. ## Optional - [Company site](https://www.zemanta.com/) - [GitHub organisation](https://github.com/Zemanta) — engineering and ad-tech repos (Prebid.js/prebid-server forks, py-secretcrypt, a Go Avro codec fork); no API client library. - [Terms of service](https://vault.pactsafe.io/s/9ac72792-c7df-4d0d-832d-0ca873f73a64/legal.html#terms-of-service) - [Privacy policy](https://www.outbrain.com/privacy/privacy-policy-outbrain-dsp/) - [Opt out](https://www.zemanta.com/opt-out/) - [Security / vulnerability disclosure](https://www.outbrain.com/security/bug-bounty/)