Stitchflow
The Trade Desk logo

The Trade Desk User Management API Guide

API workflow

How to automate user lifecycle operations through APIs with caveats that matter in production.

UpdatedMar 17, 2026

Summary and recommendation

The Trade Desk exposes a REST user management API at https://api.thetradedesk.com/v3 with endpoints for create, read, update, query, and deactivation.

Authentication uses a proprietary token scheme-credentials are exchanged via POST to /v3/authentication, and the returned token is passed as 'TTD {token}' in the Authorization header, not as a standard OAuth 2.0 Bearer token.

Tokens are time-limited;

implement proactive refresh logic to handle expiration without mid-session 401 failures.

Integrating The Trade Desk into an identity graph requires mapping UserId and PartnerId as the stable join keys, with AdvertiserIds tracked as a multi-valued access attribute per user object.

SCIM 2.0 is also available at the enterprise tier, with the endpoint URL provisioned per-customer through account management rather than self-served.

API quick reference

Has user APIYes
Auth methodToken-based authentication. Clients POST credentials to obtain a bearer token, which is then passed in the Authorization header for subsequent requests.
Base URLOfficial docs
SCIM availableYes
SCIM plan requiredCustom (enterprise-tier contract required; contact Trade Desk account management)

Authentication

Auth method: Token-based authentication. Clients POST credentials to obtain a bearer token, which is then passed in the Authorization header for subsequent requests.

Setup steps

  1. Obtain API login credentials (username and password) from your Trade Desk account manager or partner portal.
  2. POST to https://api.thetradedesk.com/v3/authentication with your login and password to receive an auth token.
  3. Include the token in the Authorization header as 'TTD {token}' for all subsequent API requests.
  4. Tokens expire; re-authenticate by repeating the POST to /authentication when a 401 is returned.

User object / data model

Field Type Description On create On update Notes
UserId string Unique identifier for the user. system-assigned read-only Returned on creation; used as path param for updates.
UserName string Login username (typically email address). required optional Must be unique within the partner.
FirstName string User's first name. required optional
LastName string User's last name. required optional
EmailAddress string User's email address. required optional Used for notifications and login.
PartnerId string Partner account the user belongs to. required read-only Determines access scope.
AdvertiserIds array List of advertiser IDs the user has access to. optional optional Empty array grants no advertiser-level access.
UserRole string Role assigned to the user (e.g., Admin, Standard). required optional Controls permissions within the platform.
IsActive boolean Whether the user account is active. optional optional Set to false to deactivate without deleting.
PhoneNumber string User's phone number. optional optional

Core endpoints

Authenticate

  • Method: POST
  • URL: https://api.thetradedesk.com/v3/authentication
  • Watch out for: Token expiration is time-bound; cache and refresh proactively to avoid mid-session 401 errors.

Request example

{
  "Login": "user@example.com",
  "Password": "s3cr3t"
}

Response example

{
  "Token": "TTD abc123...",
  "ExpirationDateUtc": "2024-12-31T23:59:59Z"
}

Create User

  • Method: POST
  • URL: https://api.thetradedesk.com/v3/user
  • Watch out for: UserName must be unique; duplicate submissions return a 400 error.

Request example

{
  "UserName": "newuser@example.com",
  "FirstName": "Jane",
  "LastName": "Doe",
  "EmailAddress": "newuser@example.com",
  "PartnerId": "partner123",
  "UserRole": "Standard"
}

Response example

{
  "UserId": "usr_abc456",
  "UserName": "newuser@example.com",
  "IsActive": true
}

Get User

  • Method: GET
  • URL: https://api.thetradedesk.com/v3/user/{userId}
  • Watch out for: Requesting a userId that does not belong to your partner scope returns 403, not 404.

Request example

GET /v3/user/usr_abc456
Authorization: TTD abc123...

Response example

{
  "UserId": "usr_abc456",
  "UserName": "newuser@example.com",
  "FirstName": "Jane",
  "IsActive": true
}

Update User

  • Method: PUT
  • URL: https://api.thetradedesk.com/v3/user
  • Watch out for: PUT replaces the full user object; omitting optional fields may reset them to defaults.

Request example

{
  "UserId": "usr_abc456",
  "FirstName": "Janet",
  "IsActive": true
}

Response example

{
  "UserId": "usr_abc456",
  "FirstName": "Janet",
  "IsActive": true
}

Query Users

  • Method: POST
  • URL: https://api.thetradedesk.com/v3/user/query
  • Watch out for: Pagination uses PageStartIndex (zero-based offset) and PageSize; max PageSize is 100.

Request example

{
  "PartnerId": "partner123",
  "PageStartIndex": 0,
  "PageSize": 100
}

Response example

{
  "Result": [{"UserId": "usr_abc456", "UserName": "newuser@example.com"}],
  "TotalFilteredCount": 1
}

Deactivate User

  • Method: PUT
  • URL: https://api.thetradedesk.com/v3/user
  • Watch out for: There is no dedicated DELETE endpoint for users; deactivation is achieved by setting IsActive=false via PUT.

Request example

{
  "UserId": "usr_abc456",
  "IsActive": false
}

Response example

{
  "UserId": "usr_abc456",
  "IsActive": false
}

Rate limits, pagination, and events

  • Rate limits: The Trade Desk API enforces rate limits but does not publicly document specific numeric thresholds in its developer portal. Limits are enforced per partner/advertiser account.

  • Rate-limit headers: Unknown

  • Retry-After header: Unknown

  • Rate-limit notes: Official docs do not specify rate-limit headers or Retry-After behavior. Contact your TTD account manager for partner-specific limits.

  • Pagination method: offset

  • Default page size: 100

  • Max page size: 100

  • Pagination pointer: PageStartIndex / PageSize

  • Webhooks available: No

  • Webhook notes: The Trade Desk API does not document a webhook or event-subscription system for user management events in its public developer portal.

  • Alternative event strategy: Poll the /user/query endpoint periodically to detect user state changes.

SCIM API status

  • SCIM available: Yes

  • SCIM version: 2.0

  • Plan required: Custom (enterprise-tier contract required; contact Trade Desk account management)

  • Endpoint: Not documented

  • Supported operations: Create User, Update User, Deactivate User, List Users

Limitations:

  • SCIM endpoint URL is provisioned per-customer and not publicly documented; it is provided by The Trade Desk during enterprise onboarding.
  • No publicly documented IdP-specific connector pages for Okta, Entra ID, Google Workspace, or OneLogin.
  • Plan gating requires a custom enterprise agreement; not available on self-serve tiers.
  • Specific SCIM attribute mappings and supported schema extensions are not publicly disclosed.

Common scenarios

Three primary automation scenarios are supported by the documented endpoints.

First, provisioning: POST to /v3/user with UserName, PartnerId, UserRole, and an explicit AdvertiserIds array-omitting AdvertiserIds creates a user with no advertiser-level access regardless of role.

Second, bulk auditing: POST to /v3/user/query with PageStartIndex and PageSize (max 100);

loop by incrementing PageStartIndex until TotalFilteredCount is exhausted, then filter client-side for IsActive=true since no server-side active/inactive filter is documented.

Third, offboarding: retrieve the full user object via GET /v3/user/{userId} first, then PUT the full object back with IsActive=false-skipping the GET risks silently clearing AdvertiserIds or other fields because PUT is a full replacement, not a partial update.

No DELETE endpoint exists;

deactivation via IsActive=false is the only supported removal mechanism.

Provision a new platform user for an advertiser

  1. POST to /v3/authentication with admin credentials to obtain a TTD token.
  2. POST to /v3/user with UserName, FirstName, LastName, EmailAddress, PartnerId, UserRole, and the target AdvertiserIds array.
  3. Store the returned UserId for future update or deactivation operations.
  4. Verify creation by GET /v3/user/{userId}.

Watch out for: AdvertiserIds must be explicitly set; omitting the field may result in a user with no advertiser-level access even if UserRole is Standard.

Bulk-list and audit all active users under a partner

  1. POST to /v3/authentication to obtain a token.
  2. POST to /v3/user/query with PartnerId, PageStartIndex=0, PageSize=100.
  3. Check TotalFilteredCount; if greater than 100, loop incrementing PageStartIndex by 100 until all pages are retrieved.
  4. Filter results client-side for IsActive=true to identify active accounts.

Watch out for: Max PageSize is 100; large partner accounts require multiple paginated requests. There is no server-side active/inactive filter documented in the query body.

Offboard a departing employee

  1. POST to /v3/authentication to obtain a token.
  2. GET /v3/user/{userId} to retrieve the current full user object.
  3. PUT to /v3/user with the full user object, setting IsActive=false.
  4. Confirm deactivation by GET /v3/user/{userId} and verifying IsActive=false in the response.

Watch out for: Because PUT is a full replacement, retrieve the existing object first to avoid accidentally clearing AdvertiserIds or other fields during the deactivation update.

Why building this yourself is a trap

Several non-obvious behaviors create integration risk. PUT semantics apply to all user updates with no PATCH support, so any automation that constructs a partial payload will overwrite unspecified fields with defaults. Cross-partner user lookups return 403, not 404, which can cause incorrect error-handling logic if partner scope isolation is not accounted for in the client.

Rate limits are enforced per partner/advertiser account but numeric thresholds and retry headers are not publicly documented; contact your TTD account manager for partner-specific limits before building high-frequency polling. Webhooks are not available for user management events, making periodic polling of /v3/user/query the only mechanism for detecting state changes.

SCIM endpoint URLs are not self-service and must be requested during enterprise onboarding, meaning SCIM cannot be activated without account manager involvement even if the contract tier supports it.

Automate The Trade Desk workflows without one-off scripts

Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.

Every app coverage, including apps without APIs
60+ app integrations plus browser automation for apps without APIs
IT graph reconciliation across apps and your IdP
Less than a week to launch, maintained as APIs and admin consoles change
SOC 2 Type II. ~2 hours of your team's time

UpdatedMar 17, 2026

* Details sourced from official product documentation and admin references.

Keep exploring

Related apps

15Five logo

15Five

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

15Five uses a fixed role-based permission model with six predefined roles: Account Admin, HR Admin, Billing Admin, Group Admin, Manager, and Employee. No custom roles can be constructed. User management lives at Settings gear → People → Manage people p

1Password logo

1Password

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

1Password's admin console at my.1password.com covers the full user lifecycle — invitations, group assignments, vault access, suspension, and deletion — without any third-party tooling. Like every app that mixes role-based and resource-level permissions

8x8 logo

8x8

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

8x8 Admin Console supports full lifecycle user management — create, deactivate, and delete — across its X Series unified communications platform. Every app a user can access (8x8 Work desktop, mobile, web, Agent Workspace) is gated by license assignmen