/api/v2/storefront/esa/{esaId}/signals
Embedded sales agent (ESA) signal endpoints let a storefront operator manage the
signals exposed by a specific ESA adapter. Use these endpoints when the signal
is backed by the ESA’s downstream ad server or audience system, such as Google
Ad Manager audience segments or custom targeting keys and values.
Start every authoring workflow by reading adapter capabilities. Capabilities
describe which mapping kinds, candidate types, value types, composition models,
and parent-child candidate filters the adapter supports. Do not assume every ESA
supports GAM fields.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /api/v2/storefront/esa/{esaId}/signals | List signals registered on the ESA |
GET | /api/v2/storefront/esa/{esaId}/signals/{signalId} | Read one registered ESA signal |
POST | /api/v2/storefront/esa/{esaId}/signals | Create or register a signal on the ESA |
POST | /api/v2/storefront/esa/{esaId}/signals:validate | Validate a signal draft without creating it |
GET | /api/v2/storefront/esa/{esaId}/signals/adapter-capabilities | Describe adapter signal authoring support |
GET | /api/v2/storefront/esa/{esaId}/signals/candidates | Browse adapter-backed candidate values |
Adapter capabilities
Capability fields
| Field | Notes |
|---|---|
adapter | Adapter implementation behind the ESA, for example google_ad_manager |
supportsSignalMappingAuthoring | false means the ESA can list signals but cannot create drafts from this API |
mappingKinds | Signal mapping kinds the adapter can create, such as audience_segment, custom_key_value, or gam_targeting_groups |
candidateTypes | Browseable adapter objects. Child types can require parent_id when supportsParentFilter is true |
targetingSemantics | Composition behavior, include/exclude modes, buyer targeting fields, and warnings such as exclusivity |
valueTypes | Allowed valueType values for signal drafts |
Browse candidates
Candidates are adapter values that can be used to build a signal draft. For parent-child candidate types, first browse the parent and then pass itsexternalId as parent_id when browsing the child.
Candidate query parameters
| Parameter | Required | Notes |
|---|---|---|
candidate_type | Yes | Candidate type from candidateTypes[].candidateType |
q or query | No | Adapter search string |
parent_id | No | Parent candidate externalId, required by child types that support parent filtering |
limit | No | Page size |
cursor | No | Cursor returned as nextCursor |
Signal draft shape
Creation and validation use the same request body:| Field | Type | Required | Notes |
|---|---|---|---|
signalId | string | Yes | Stable caller-supplied signal identifier |
name | string | Yes | Human-readable signal name |
description | string or null | No | Operator-facing description |
valueType | string | Yes | One of the adapter capability valueTypes |
tags | string[] | No | Optional labels |
adapterConfig | object | Yes | Adapter mapping configuration |
Audience segment
Direct GAM key-value signal
Use a directcustom_key_value signal when the adapter exposes a specific
custom targeting value as directly mappable. Browse values with parent_id so
the value remains tied to the correct key.
Grouped GAM targeting
Usegam_targeting_groups for composite GAM logic. Groups are OR’d together;
criteria inside a group are AND’d together; multiple values inside one criterion
are OR’d by GAM for that key. A criterion with exclude: true excludes matching
values.
Grouped GAM targeting can be exclusive depending on the adapter semantics. If
targetingSemantics.mappingKinds[].exclusiveWithOtherSignals is true, do not
combine the grouped signal with another signal targeting the same buyer field.
Validate a draft
adapterConfig manually.
Create a signal
List and get signals
signalId and name; adapters can
return additional fields such as description, status, valueType,
adapterConfig, coverageForecast, createdAt, and updatedAt.
Errors
400 VALIDATION_ERROR— invalid ESA id, malformed draft, missing required fields, or an adapter validation issue.401 UNAUTHORIZED— missing or invalid bearer token.404 NOT_FOUND— ESA or signal does not exist for the caller.502or503— the ESA adapter or tenant-management service could not complete the request.
Related
Storefront signal tasks
Storefront-owned signal CRUD and discovery
Signal overview
Signal model and lifecycle
Storefront API reference
OpenAPI reference for storefront routes