Normalized, platform-agnostic ad-targeting spec. Every field is optional, an empty object targets the platform's default broadest audience. Field names are camelCase and identical across POST /v1/ads/create (the targeting object), POST /v1/ads/targeting/reach-estimate, and saved_targeting audiences, so a spec resolved once can be reused verbatim. Entity ids (regions[].key, cities[].key, zips[].key, metros[].key, interests[].id, behaviors[].id) are the platform's opaque identifiers resolved via GET /v1/ads/targeting/search. A spec is therefore meaningful only for the platform it was built against, except the portable fields (countries, ageMin/ageMax, gender, incomeTier, languages) which carry across platforms. Fields a platform cannot honour are rejected at create time with INVALID_FIELD_VALUE naming the offending field (not silently dropped).
| Name |
Type |
Description |
Notes |
| countries |
List<String> |
ISO 3166-1 alpha-2 country codes (e.g. ['US']). |
[optional] |
| regions |
List<CreateStandaloneAdRequestZipsInner> |
Region/state targeting. `key` is the platform location ID from /v1/ads/targeting/search?dimension=geo&geoType=region. |
[optional] |
| cities |
List<TargetingSpecCitiesInner> |
City targeting. Optional `radius` + `distanceUnit` extend beyond the city limits; both must be set together or both omitted. `radius` is only honoured on platforms whose capability map allows city radius (Meta). |
[optional] |
| zips |
List<CreateStandaloneAdRequestZipsInner> |
Postal/ZIP targeting. `key` is the platform's postal location ID (e.g. Meta `US:94304`). Supported on Meta, Google, TikTok, Pinterest, X. |
[optional] |
| metros |
List<CreateStandaloneAdRequestZipsInner> |
DMA / metro-area targeting. `key` is the platform's metro ID (e.g. Meta `DMA:807`). |
[optional] |
| customLocations |
List<TargetingSpecCustomLocationsInner> |
Point-radius (lat/lng) targeting (Meta custom_locations / Google proximity). Honoured only where the capability map allows radius (Meta). |
[optional] |
| excludedLocations |
TargetingSpecExcludedLocations |
|
[optional] |
| ageMin |
Integer |
|
[optional] |
| ageMax |
Integer |
|
[optional] |
| gender |
GenderEnum |
Restrict by gender. 'all' (default) targets everyone. |
[optional] |
| incomeTier |
IncomeTierEnum |
Normalized household-income tier (ZIP/percentile based). Meta and TikTok express all four. Google maps only `top_10` (its INCOME_RANGE_90_UP); other tiers on Google, and any income tier on LinkedIn / X / Pinterest, are rejected. On Meta, income/zip targeting requires the relevant `specialAdCategories` to be unset (housing/employment/credit ads cannot use it). |
[optional] |
| languages |
List<String> |
Language codes (e.g. ['en']). |
[optional] |
| interests |
List<CreateStandaloneAdRequestBehaviorsInner> |
Interest entities from /v1/ads/targeting/search?dimension=interest. Each carries the platform's opaque id. |
[optional] |
| behaviors |
List<CreateStandaloneAdRequestBehaviorsInner> |
Behaviour entities from /v1/ads/targeting/search?dimension=behavior. Supported on Meta and TikTok. |
[optional] |
| industries |
List<String> |
LinkedIn B2B only. Industry URN id fragments. |
[optional] |
| companySizes |
List<String> |
LinkedIn B2B only. |
[optional] |
| seniorities |
List<String> |
LinkedIn B2B only. |
[optional] |
| jobFunctions |
List<String> |
LinkedIn B2B only. |
[optional] |
| audienceInclude |
List<String> |
Platform audience IDs to include. |
[optional] |
| audienceExclude |
List<String> |
Platform audience IDs to exclude. |
[optional] |
| Name |
Value |
| ALL |
"all" |
| MALE |
"male" |
| FEMALE |
"female" |
| Name |
Value |
| TOP_5 |
"top_5" |
| TOP_10 |
"top_10" |
| TOP_10_25 |
"top_10_25" |
| TOP_25_50 |
"top_25_50" |