Skip to main content
This guide shows you how to build, price, and maintain your taxonomy at The Trade Desk (TTD) over the API, with nobody signed in. The taxonomy is where third-party audiences are listed. Each audience is an element in it, and the element sets who can buy the audience and at what price. To attach data to an element and deliver it, see Third-party delivery via the API. First-party delivery uses no taxonomy; see First-party delivery via the API. Before you start, complete the prerequisites and set up API access.

1. Plan the tree

A taxonomy is a tree of taxonomy elements. A folder (buyable: false) organizes. An audience (buyable: true) is what buyers purchase, and it carries the dataset and the rate cards.
Name the root for your audience product. Create it even if you never plan to sell openly. It is the level everything else hangs from, and reshaping the top of the tree after audiences are live cannot be cleanly undone. Keep one-to-one deals under their own folder. TTD suggests a folder such as Custom Audiences for audiences priced for a single advertiser or partner. It is a naming convention, not a special element type. Price every audience on the audience itself. Give each buyable element its own rate card.

2. Create the folders

One endpoint creates every element. buyable is what separates a folder from an audience.
The response is 201 with the new element, a draft:
Record the element_id. Child elements name it as parent_element_id. Then create Custom Audiences the same way, with parent_element_id set to the root’s element_id.

3. Create an audience

An audience is the same call with buyable: true, a parent, a dataset, and the rate cards that decide who can buy it and at what price.
The response is 201. Each dataset you attached appears under connections as a draft, and each rate under data_rates:
The connector checks each dataset’s schema against The Trade Desk when you attach it, and rejects a dataset TTD would not accept with 400 TTD Taxonomies Creation: Invalid Dataset Schema. To prepare a dataset, follow steps 1 through 4 of Third-party delivery via the API.

Who can buy it

Each entry in data_rates sets a price and who gets it: One element can carry several rates. To price one audience differently for different buyers, add one entry per advertiser or partner:
The element returns them as data_rate_advertiser, data_rate_partner, and data_rate_system. Advertiser and partner IDs come from your TTD account representative, and they go straight onto the rate card. You do not register them with Narrative first.

Setting the rate

Set rate_type to hybrid, which TTD asks for on marketplace segments, and send both cpm_rate (US dollars per thousand impressions) and percent_of_media_cost_rate (a fraction, so 0.15 is 15%).

4. Revise before you synchronize

Elements you create are drafts, and nothing reaches The Trade Desk until you synchronize. Until then you can change anything with PUT. It replaces the whole element, so send every field:
To drop a draft you no longer want, delete it. The connector archives the element and everything beneath it:
Once an element is active, its rates are fixed. A PUT that changes them is rejected with data rates cannot be updated for active taxonomy element, while one that sends the same rates again goes through. The display name and description can still change, and the connector sends a new name or description on to TTD. See Maintain the taxonomy. Put every buyer you expect on the element when you create it. Changing the price or the buyers of a live audience is not self-service. Ask your Narrative relationship manager, who arranges it with The Trade Desk.

5. Synchronize

The response is 201 with the request and the work it queued:
The jobs object counts the work in three parts: elements created in TTD (create_taxonomy_elements), rate batches (create_data_rate_batches), and delivery connections for attached datasets (create_connections). Poll the request list and pick out your request by its id. The list holds your whole synchronization history, so your request is not necessarily the first record:
status moves from pending through in-progress to completed or failed. When a part fails, its failures list carries the error for each job. Two rules shape how you automate this:
  • Synchronization publishes every draft in your account, not only the element you just changed. Create everything you want published, then synchronize once.
  • Only one synchronization runs at a time. A second request while one is pending or in progress is rejected with 409. A loop that creates one audience and synchronizes it breaks on its second pass, so batch your changes instead.
A request from a profile with no Brand ID is refused. A request with nothing to send is rejected with 400:

6. Wait for approval

The response is the whole tree under children, each element with its own children. After synchronization each element is active, and each rate card carries the TTD batch it was sent in:
Each element reports two statuses, and an audience sells only once it is active and its compliance_status is Approved:
  • status is the element’s lifecycle in Narrative, from draft to pending to active.
  • compliance_status is TTD’s review, from NotInQueue to Pending to Approved or Denied.
See Element status and approval for every value. Narrative re-checks review status with TTD every 30 minutes, so a decision on their side can take up to half an hour to appear. Poll on that cadence, because anything faster tells you nothing new.
Plan for lead time on your first taxonomy. Ask your Narrative relationship manager how long TTD takes to review elements you add later. If later elements also wait for review, your integration must treat each new audience as pending until TTD approves it.

7. Maintain the taxonomy

Add audiences by repeating step 3, then synchronizing. Batch several new elements into one synchronization. Change the name or description of a live audience with PUT, sending the rates it already has. The connector sends the new name and description to TTD:
Refresh who is in an audience by writing to its dataset. The delivery connection keeps running, so you do not touch the element or its price. See Keeping the audience current. Watch the match rate. Each element’s statistics reports received_ids_count, the identifiers Narrative sent, and active_ids_count, the subset TTD matched. See Confirm delivery. Create a new audience rather than reworking an old one when the price changes, the schema changes, or it is a different audience for a different buyer. A live element’s rates are fixed, so a new element is the only self-service way to price separately. Retiring a live audience is not self-service. Contact your TTD Technical Account Manager and your Narrative relationship manager. Removing a custom segment from a named buyer requires 30 days’ advance notice to that buyer.
DELETE /taxonomies/elements/{element_id} archives the element and everything beneath it in Narrative only. Nothing is sent to The Trade Desk, and an element that is already live there stays buyable. Use it to clean up drafts, not to retire an audience.

Taxonomy endpoints

All on https://thetradedesk.narrativeconnectors.com.

Troubleshooting

Getting help

Contact your Narrative relationship manager with your company ID, the element ID, and the failing request and response. For review status, Brand ID, advertiser IDs, or partner IDs, your TTD account representative is the faster path.

Third-party delivery via the API

Attach data to an element and deliver it

First-party delivery via the API

Deliver into one advertiser’s own seat, with no taxonomy

The Trade Desk Connector

Full settings reference, identifiers, and status vocabularies

API Keys

Create and rotate keys for programmatic access