> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
> Use this file to discover all available pages before exploring further.

# TikTok Ads adapter compatibility

> Exact AdCP-to-TikTok Ads mapping, implemented coverage, proof state, and known limits.

TikTok Ads is included from the current direct-adapter catalog. Product rows are current-code classifications; operation rows cover the canonical buyer-facing denominator and distinguish callable, absent, and safety-blocked surfaces. None is promoted to deterministic provider certification or fresh account eligibility.

<Note>
  **Review-ready, not provider-endorsed · last verified 2026-08-16.**
  This is an Interchange current-main compatibility snapshot, not provider certification or endorsement. “Implemented” means a provider write/read path exists.
  It does not mean fresh signed live evidence exists or that the selected account
  is currently eligible.
</Note>

## Coverage and execution-package model

| Layer                         | State                                     | Current contract                                                                                                                                                                     |
| ----------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Provider-observed denominator | `partial`                                 | The captured denominator has 58 flows: 38 implemented, 19 blocked, and 1 unavailable. No current signed full-lifecycle artifact exists.                                              |
| Wholesale product archetype   | `classified`                              | Product rows represent materially different launch contracts. Signals, activation resources, targeting and delivery overlays, and creative choices do not create extra product rows. |
| Exact execution package       | `exact_static_base_plus_runtime_bindings` | Each product ID selects the current provider configuration base; account, resources, targeting, creative, budget, bid, and flight remain runtime bindings.                           |
| Current account eligibility   | `account_check_required`                  | Current provider permissions, market, resources, and feature eligibility must be checked for the selected account.                                                                   |

## Claim provenance gaps

Object-mapping and reporting rows have no exported, code-owned complete
denominator on current main. They remain published because they are useful,
but the contract marks the missing drift oracle instead of pretending a
same-test literal prevents drift.

| Claim family      | State                            | Drift enforced | Trace sources                                                | Gap                                                                                             |
| ----------------- | -------------------------------- | -------------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- |
| `object_mappings` | `manual_plan_trace_non_enforced` | `false`        | packages/storefront-adapters/src/platforms/tiktok/adapter.ts | No code-owned complete object-mapping denominator exists; these rows remain manually traced.    |
| `reporting`       | `manual_plan_trace_non_enforced` | `false`        | packages/storefront-adapters/src/platforms/tiktok/adapter.ts | No exported code-owned reporting projection constant exists; these rows are not drift-enforced. |

## Evidence state

Static certification and live certification are different claims. Deterministic
tests can prove code-owned catalog classifications and fail-closed behavior
without contacting the provider. Object-mapping and reporting rows are validated
for shape, presence, and uniqueness only; the provenance table above records that
they are not compared with a complete code-owned denominator.
Fresh live evidence must be dated, signed, bound to the exact account, product,
resources, fixture revision, requested package, readback, no-spend result, and
cleanup result. Live evidence is treated as stale after 30 days, and a newer
failure overrides an older pass.

| Layer                           | State                                           | Last verified | What it means                                                                                                                                                          |
| ------------------------------- | ----------------------------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Static / deterministic contract | `current_code_surface_classified_not_certified` | 2026-08-16    | The direct catalog, callable methods, canonical format IDs, and targeting dimensions are regression-checked. This does not certify each provider write/read lifecycle. |
| Fresh signed live evidence      | `no_current_signed_full_lifecycle_artifact`     | —             | No currently valid dated signed full-lifecycle artifact is published for this adapter.                                                                                 |
| AAO discovery                   | `community_catalog`                             | 2026-08-16    | The public registry record is discovery metadata, not provider-owned authorization or current account eligibility.                                                     |

## Markets

**`account_check_required`.** No global market allowlist is asserted.

This page publishes no global market allowlist.

Authority: The selected account and provider response are authoritative.

## Object mapping

| AdCP / Interchange    | TikTok Ads                       | Mapping                                                                      |
| --------------------- | -------------------------------- | ---------------------------------------------------------------------------- |
| `account`             | `provider advertising account`   | The authenticated selected account is the execution boundary.                |
| `media_buy`           | `campaign`                       | Current adapter hierarchy mapping; lifecycle certification remains separate. |
| `package`             | `ad group`                       | Budget, targeting, optimization, and flight bindings.                        |
| `creative_assignment` | `ad or identity-backed creative` | Creative materialization or assignment surface declared by current code.     |

## Operations

| Public adapter operation | Surface              | State             | Provider path                                                                                                  |
| ------------------------ | -------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------- |
| `list_accounts`          | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `sync_accounts`          | AdCP buyer operation | `not_implemented` | Account synchronization is not implemented.                                                                    |
| `get_products`           | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `sync_creatives`         | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `list_creatives`         | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `create_media_buy`       | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `get_media_buys`         | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `update_media_buy`       | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `get_media_buy_delivery` | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `get_signals`            | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `sync_audiences`         | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `sync_event_sources`     | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `log_event`              | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `sync_catalogs`          | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `get_account_financials` | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |

## Wholesale products and exact execution bases

| Product ID                                               | Exact provider execution base                                               | Implemented               | Static certification | Current eligibility      | Known gap                                                   |
| -------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------- | -------------------- | ------------------------ | ----------------------------------------------------------- |
| `tiktok_reach`                                           | objective `REACH`; optimization `REACH`; billing `CPM`                      | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_video_views`                                     | objective `VIDEO_VIEWS`; optimization `ENGAGED_VIEW`; billing `CPV`         | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_video_views_15s`                                 | objective `VIDEO_VIEWS`; optimization `ENGAGED_VIEW_FIFTEEN`; billing `CPV` | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_traffic`                                         | objective `TRAFFIC`; optimization `CLICK`; billing `CPC`                    | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_traffic_clicks`                            | objective `TRAFFIC`; optimization `CLICK`; billing `CPC`                    | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_traffic_landing_page_views`                | objective `TRAFFIC`; optimization `LANDING_PAGE_VIEW`; billing `OCPM`       | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_followers`                                       | objective `ENGAGEMENT`; optimization `FOLLOWERS`; billing `OCPM`            | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_profile_visits`                                  | objective `ENGAGEMENT`; optimization `PAGE_VISIT`; billing `CPC`            | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_conversions`                                     | objective `WEB_CONVERSIONS`; optimization `CONVERSION`; billing `OCPM`      | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_sales_website_catalog`                           | objective `PRODUCT_SALES`; optimization `CONVERT`; billing `OCPM`           | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_installs`                                    | objective `APP_PROMOTION`; optimization `INSTALL`; billing `OCPM`           | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_app_install`                               | objective `APP_PROMOTION`; optimization `INSTALL`; billing `OCPM`           | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_app_in_app_event`                          | objective `APP_PROMOTION`; optimization `IN_APP_EVENT`; billing `OCPM`      | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_app_value`                                 | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_app_value_purchase_target_roas_day7`       | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_app_value_purchase_target_roas_day0`       | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_app_value_ad_revenue_highest_value_day7`   | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_app_value_ad_revenue_highest_value_day0`   | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_app_value_ad_revenue_target_roas_day7`     | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_app_value_ad_revenue_target_roas_day0`     | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_install_clicks`                              | objective `APP_PROMOTION`; optimization `CLICK`; billing `CPC`              | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_install_in_app_event`                        | objective `APP_PROMOTION`; optimization `IN_APP_EVENT`; billing `OCPM`      | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_retargeting_in_app_event`                    | objective `APP_PROMOTION`; optimization `IN_APP_EVENT`; billing `OCPM`      | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_retargeting_value_maximum_delivery`          | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_install_value`                               | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_install_value_target_roas_day7`              | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_install_value_purchase_target_roas_day0`     | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_install_value_ad_revenue_highest_value_day7` | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_install_value_ad_revenue_highest_value_day0` | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_install_value_ad_revenue_target_roas_day7`   | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_app_install_value_ad_revenue_target_roas_day0`   | objective `APP_PROMOTION`; optimization `VALUE`; billing `OCPM`             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_lead_gen`                                        | objective `LEAD_GENERATION`; optimization `LEAD_GENERATION`; billing `OCPM` | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_lead_gen_website`                                | objective `LEAD_GENERATION`; optimization `CONVERSION`; billing `OCPM`      | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_lead_gen_direct_message_clicks`                  | objective `LEAD_GENERATION`; optimization `CLICK`; billing `CPC`            | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_lead_gen_direct_message_conversations`           | objective `LEAD_GENERATION`; optimization `CONVERSATION`; billing `OCPM`    | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_lead_gen_phone_call_clicks`                      | objective `LEAD_GENERATION`; optimization `CLICK`; billing `CPC`            | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_lead_gen_messaging_app_clicks`                   | objective `LEAD_GENERATION`; optimization `CLICK`; billing `CPC`            | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_lead_gen_messaging_app_conversations`            | objective `LEAD_GENERATION`; optimization `CONVERSATION`; billing `OCPM`    | `current_code_classified` | `not_certified`      | `account_check_required` | —                                                           |
| `tiktok_smart_web_conversion`                            | objective `WEB_CONVERSIONS`; optimization `CONVERSION`; billing `OCPM`      | `not_implemented`         | `not_certified`      | `not_eligible`           | provider\_pixel\_event\_eligibility\_inventory\_unavailable |
| `tiktok_smart_web_value`                                 | objective `WEB_CONVERSIONS`; optimization `VALUE`; billing `OCPM`           | `not_implemented`         | `not_certified`      | `not_eligible`           | provider\_pixel\_value\_eligibility\_inventory\_unavailable |
| `tiktok_smart_catalog_conversion`                        | objective `WEB_CONVERSIONS`; optimization `CONVERSION`; billing `OCPM`      | `not_implemented`         | `not_certified`      | `not_eligible`           | provider\_pixel\_event\_eligibility\_inventory\_unavailable |
| `tiktok_smart_catalog_value`                             | objective `WEB_CONVERSIONS`; optimization `VALUE`; billing `OCPM`           | `not_implemented`         | `not_certified`      | `not_eligible`           | provider\_pixel\_value\_eligibility\_inventory\_unavailable |

## Creative formats

The format state is deliberately narrower than the provider format catalog.
Only `executable` formats have the ordinary provider write and readback path;
`canary_only` formats are restricted to governed proof, and
`catalog_declared` formats are present in current code without a public
ordinary-execution certification claim.
`declared_not_buyer_selectable` formats are not sold through the adapter.

| Format ID                     | Kind                    | State              | Provider shape                                                                                             |
| ----------------------------- | ----------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------- |
| `tiktok_in_feed_video`        | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `tiktok_image_ad`             | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `tiktok_carousel`             | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `tiktok_spark_video`          | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `tiktok_promoted_offerings`   | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `tiktok_generated_image_9x16` | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `tiktok_generated_video_9x16` | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `tiktok_generated_offerings`  | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |

## Placements

This provider exposes no placement selector that Interchange can map without inventing inventory.

## Targeting

| AdCP dimension     | State             | Provider mapping                                                                            |
| ------------------ | ----------------- | ------------------------------------------------------------------------------------------- |
| `audience_exclude` | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |
| `audience_include` | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |
| `geo_countries`    | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |
| `geo_regions`      | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |
| `frequency_cap`    | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |
| `signals`          | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |

## Reporting

| AdCP output | Provider source           | Notes                                                                                              |
| ----------- | ------------------------- | -------------------------------------------------------------------------------------------------- |
| `delivery`  | `provider reporting task` | A delivery method is callable; exact metric parity and full-lifecycle evidence remain uncertified. |

## Conversion and audience support

* **Optimization:** Product configuration is current-code classified; resource and event eligibility remain account-bound.
* **Event-source setup:** A callable sync\_event\_sources surface exists; provider behavior is not certified here.
* **Event ingestion:** A callable log\_event surface exists; provider behavior is not certified here.
* **Audiences:** A callable audience synchronization surface exists; provider behavior is not certified here.

## Known limits

* The captured denominator has 58 flows: 38 implemented, 19 blocked, and 1 unavailable. No current signed full-lifecycle artifact exists.
* Executable in the direct catalog means current-code classification, not deterministic certification, fresh signed live evidence, or present account eligibility.
* Formats marked catalog\_declared are not claims of ordinary provider write/read support.

## Public review endpoints

* [AAO registry record](https://agenticadvertising.org/api/registry/publisher?domain=tiktok.com\&include=placements)
* Staging MCP/AdCP state: `relationship_gated_storefront_id_required`.
* Route template after a storefront relationship supplies its registered platform ID: `https://api.staging.interchange.io/seller/{registered_storefront_platform_id}/mcp`
* No provider-ID-derived URL is published. The shared MCP route requires a registered storefront platform ID assigned to the relationship; the adapter provider ID tiktok is not asserted to be that record ID.

The staging endpoint is connection-gated. Its presence here is not an invitation
to send mutating requests without a jointly approved test account and canary window.

## Provider references

* [TikTok Ads public documentation](https://business-api.tiktok.com/portal/docs)

## Review questions

If a provider mapping is incomplete or has changed, send the exact product, format, targeting dimension, metric, market, or provider API field that differs. We update the governed contract and add code-owned drift checks where a denominator exists; otherwise the explicit non-enforced provenance gap remains.
