> ## 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.

# Reddit Ads adapter compatibility

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

Reddit 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 | `not_certified`                           | No provider-flow denominator or current signed full-lifecycle artifact is captured; sandbox buyer discovery remains a known gap.                                                     |
| 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/reddit/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/reddit/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    | Reddit 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` | `promoted post or 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                         |
| -------------------------------- | ------------------------------------------------------------------------------------ | ------------------------- | -------------------- | ------------------------ | --------------------------------- |
| `reddit_promoted_post_awareness` | objective `IMPRESSIONS`; optimization `provider_default_or_omitted`; billing `CPM`   | `current_code_classified` | `not_certified`      | `account_check_required` | —                                 |
| `reddit_traffic`                 | objective `CLICKS`; optimization `CLICKS`; billing `CPC`                             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                 |
| `reddit_conversions`             | objective `CLICKS`; optimization `CLICKS`; billing `CPC`                             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                 |
| `reddit_app_installs`            | objective `CLICKS`; optimization `CLICKS`; billing `CPC`                             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                 |
| `reddit_community`               | objective `CLICKS`; optimization `CLICKS`; billing `CPC`                             | `current_code_classified` | `not_certified`      | `account_check_required` | —                                 |
| `reddit_image_awareness`         | objective `IMPRESSIONS`; optimization `provider_default_or_omitted`; billing `CPM`   | `not_implemented`         | `not_certified`      | `not_eligible`           | creative\_round\_trip\_incomplete |
| `reddit_video_awareness`         | objective `VIDEO_VIEWABLE_IMPRESSIONS`; optimization `VIDEO_VIEW_6S`; billing `CPV6` | `not_implemented`         | `not_certified`      | `not_eligible`           | creative\_round\_trip\_incomplete |
| `reddit_carousel`                | objective `CLICKS`; optimization `CLICKS`; billing `CPC`                             | `not_implemented`         | `not_certified`      | `not_eligible`           | creative\_round\_trip\_incomplete |

## 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                                                                                             |
| ---------------------------- | ----------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------- |
| `image_feed`                 | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `image_conversation`         | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `video_feed`                 | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `video_conversation`         | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `carousel`                   | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `freeform`                   | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `reddit_existing_post`       | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `reddit_promoted_offerings`  | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `reddit_generated_image`     | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `reddit_generated_video`     | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row. |
| `reddit_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                                                                            |
| --------------- | ----------------- | ------------------------------------------------------------------------------------------- |
| `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. |
| `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

* No provider-flow denominator or current signed full-lifecycle artifact is captured; sandbox buyer discovery remains a known gap.
* 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=reddit.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 reddit 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

* [Reddit Ads public documentation](https://ads-api.reddit.com/docs/v3/)

## 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.
