late-sdk 0.0.924 → 0.0.926

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf24143555959fa49543fc6fe2eca720bd7430d4eb42a8adadbbc5be4ff553ea
4
- data.tar.gz: 9faf45cfea04a6c573e6ca9b56ce19b133a9fa39598c803fb62c80a25c4fb568
3
+ metadata.gz: 43137fee183322363f1eb9958b2f1f7c52d3bc295a3af75204c3d809c990f0d1
4
+ data.tar.gz: 972a1b1f952857c995325b1f9445b0546464719fdec007f0aa3a08e5f27a845a
5
5
  SHA512:
6
- metadata.gz: ee2a7d4763a3e28a225681d9fb2c7997dd322a58dbab142b5da406e2692c0f802f77e5782bc97d7ebb1543e407846ada611d5763031c33bc46b126bd24a2078e
7
- data.tar.gz: be07d9a84e3dd2b4c4e3309508a28879c145b7e5cb428473689ac5aec9bbba9be3c0239ec3292f49f57d9bb75855841217492ad25e9a94fe15d63dc56c87eacc
6
+ metadata.gz: 20b13b22d973d66981b40a9ec06fc45e7bd94579364e0d5f279ac8afe83ab45b338f36c8bf2b199d09ae28fc4405be74ed3f69a19017f04243710f32745cf56c
7
+ data.tar.gz: 86b5cfd0a0b27d097c96a7fb0beb805d12f216ca64d98ebd186ad9fb4c2583603364c70354232a71ae810664f63583fc2d4ff0c44ca762d253a68af57f64b2c0
data/README.md CHANGED
@@ -2050,6 +2050,7 @@ Class | Method | HTTP request | Description
2050
2050
  - [Zernio::OnWhatsAppAutomaticEventRequest](docs/OnWhatsAppAutomaticEventRequest.md)
2051
2051
  - [Zernio::OnWhatsAppAutomaticEventRequestCustomData](docs/OnWhatsAppAutomaticEventRequestCustomData.md)
2052
2052
  - [Zernio::OnWhatsAppNumberActionRequiredRequest](docs/OnWhatsAppNumberActionRequiredRequest.md)
2053
+ - [Zernio::OnWhatsAppNumberActionRequiredRequestRequirementsInner](docs/OnWhatsAppNumberActionRequiredRequestRequirementsInner.md)
2053
2054
  - [Zernio::OnWhatsAppNumberActivatedRequest](docs/OnWhatsAppNumberActivatedRequest.md)
2054
2055
  - [Zernio::OnWhatsAppNumberActivatedRequestNumber](docs/OnWhatsAppNumberActivatedRequestNumber.md)
2055
2056
  - [Zernio::OnWhatsAppNumberDeclinedRequest](docs/OnWhatsAppNumberDeclinedRequest.md)
@@ -295,7 +295,7 @@ end
295
295
 
296
296
  Search targeting options
297
297
 
298
- Resolve a human-readable query into the platform's opaque targeting ids used in the `TargetingSpec` (`countries`/`regions`/`cities`/`zips`/`metros` geo keys, and `interests`/`behaviors` entity ids) on `POST /v1/ads/create`, `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences. The `dimension` param selects what is searched: - `geo`: locations, further scoped by `geoType` - `interest` - `behavior` - `income` - `language`: Google-only - `workPosition`, `workEmployer`, `workIndustry`: the Meta-only work demographics, whose ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries` Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only). Work industries are a fixed ~30-entry Meta catalog with no server-side query, so `workIndustry` matching, ranking and `limit` happen in Zernio. `language` is likewise a fixed, checked-in table of Google's targetable `language_constant` rows (id, ISO code, name) matched by name or code, capped at 20, with no network call; its ids feed `TargetingSpec.languages`. Results are normalized across platforms into a single shape, so the same client code consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results. TikTok geo searches return every matching level in one list (`type` is `country`, `region`, `city`, `district`, or `metro` for DMA areas), and `geoType` is not applied. Results are scoped to the advertiser's targetable markets, and every id is usable in `regions`/`cities`/`metros` keys on `POST /v1/ads/create`. LinkedIn geo searches also return every matching level in one list, and neither `geoType` nor `countryCode` is applied: LinkedIn's typeahead only returns a name and a URN per result, with no level or country field to filter on. Every result has `type` set to `location`, and its id is a `urn:li:geo:*` URN usable as a `regions[].key` on `POST /v1/ads/create`, `POST /v1/ads/boost` and `POST /v1/ads/targeting/reach-estimate`. Google geo searches resolve against Google's geoTargetConstants and return every matching level in one list; `geoType` is not applied (Google's `target_type` is an open taxonomy that does not map one-to-one onto the `geoType` enum), so filter client-side on the returned `type` (`country`, `region`, `city`, `zip`, `metro`, or the lowercased Google target type for rarer levels). `countryCode` scopes the search to one country. Each id is Google's numeric criterion id, usable as a `regions`/`cities`/`zips`/`metros` `key` on `POST /v1/ads/create`. Google city radius is not supported (pass a `customLocations` lat/lng pin for a radius); country targeting also accepts plain ISO codes via `countries` with no search call. Pinterest resolves against three whole-catalog endpoints (interests, locations, regions) with no server-side query or pagination, so matching, ranking and the `limit` cutoff all happen in Zernio; the catalog is independent of any ad account and results never carry `audienceSize`. Names come back localized to the connected Pinterest account's language (there is no way to force a locale), so match against whatever language that account returns. `geoType` routes to a different Pinterest catalog: - `country` and `metro_area` read the locations catalog (`type` is `country` or `metro`) - `region` reads the regions catalog (`type` is `region`, its id a `regions[].key` on `POST /v1/ads/create`) - `all` and the default `city` merge both catalogs with honest per-entry `type`s, since Pinterest has no city-level catalog and `city` is an alias for `all`, not a literal city search - `zip`, `subcity`, `neighborhood`, `place` and `geo_market` return a 400: Pinterest exposes no postal-code catalog, pass postal codes directly as `targeting.zips: [{ key }]` on `POST /v1/ads/create` For geo queries, `q` should contain only the locality name (e.g. `\"Amsterdam\"`, not `\"Amsterdam, NL\"`). Use `countryCode` to disambiguate.
298
+ Resolve a human-readable query into the platform's opaque targeting ids used in the `TargetingSpec` (`countries`/`regions`/`cities`/`zips`/`metros` geo keys, and `interests`/`behaviors` entity ids) on `POST /v1/ads/create`, `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences. The `dimension` param selects what is searched: - `geo`: locations, further scoped by `geoType` - `interest` - `behavior` - `income` - `language`: Google-only - `workPosition`, `workEmployer`, `workIndustry`: the Meta-only work demographics, whose ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries` - `industry`, `jobFunction`, `seniority`, `companySize`: the LinkedIn-only B2B facets, whose URNs feed `TargetingSpec.industries`/`jobFunctions`/`seniorities`/`companySizes` Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only). Work industries are a fixed ~30-entry Meta catalog with no server-side query, so `workIndustry` matching, ranking and `limit` happen in Zernio. `language` is likewise a fixed, checked-in table of Google's targetable `language_constant` rows (id, ISO code, name) matched by name or code, capped at 20, with no network call; its ids feed `TargetingSpec.languages`. Results are normalized across platforms into a single shape, so the same client code consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results. TikTok geo searches return every matching level in one list (`type` is `country`, `region`, `city`, `district`, or `metro` for DMA areas), and `geoType` is not applied. Results are scoped to the advertiser's targetable markets, and every id is usable in `regions`/`cities`/`metros` keys on `POST /v1/ads/create`. LinkedIn geo searches also return every matching level in one list, and neither `geoType` nor `countryCode` is applied: LinkedIn's typeahead only returns a name and a URN per result, with no level or country field to filter on. Every result has `type` set to `location`, and its id is a `urn:li:geo:*` URN usable as a `regions[].key` on `POST /v1/ads/create`, `POST /v1/ads/boost` and `POST /v1/ads/targeting/reach-estimate`. LinkedIn B2B searches (`industry`, `jobFunction`, `seniority`, `companySize`) return the full URN to pass straight back, so no URN id fragment has to be assembled by hand: `urn:li:industry:4`, `urn:li:function:8`, `urn:li:seniority:6`, `urn:li:staffCountRange:(51,200)`. Only `industry` is a server-side name search (LinkedIn's typeahead finder). LinkedIn exposes no typeahead for job functions, seniorities and company sizes, so Zernio fetches each whole table (26, 10 and 9 entries), caches it, and does the matching, ranking and `limit` cutoff itself. Those three never carry `audienceSize`, and `countryCode` and `geoType` are not applied to any of the four. Google geo searches resolve against Google's geoTargetConstants and return every matching level in one list; `geoType` is not applied (Google's `target_type` is an open taxonomy that does not map one-to-one onto the `geoType` enum), so filter client-side on the returned `type` (`country`, `region`, `city`, `zip`, `metro`, or the lowercased Google target type for rarer levels). `countryCode` scopes the search to one country. Each id is Google's numeric criterion id, usable as a `regions`/`cities`/`zips`/`metros` `key` on `POST /v1/ads/create`. Google city radius is not supported (pass a `customLocations` lat/lng pin for a radius); country targeting also accepts plain ISO codes via `countries` with no search call. Pinterest resolves against three whole-catalog endpoints (interests, locations, regions) with no server-side query or pagination, so matching, ranking and the `limit` cutoff all happen in Zernio; the catalog is independent of any ad account and results never carry `audienceSize`. Names come back localized to the connected Pinterest account's language (there is no way to force a locale), so match against whatever language that account returns. `geoType` routes to a different Pinterest catalog: - `country` and `metro_area` read the locations catalog (`type` is `country` or `metro`) - `region` reads the regions catalog (`type` is `region`, its id a `regions[].key` on `POST /v1/ads/create`) - `all` and the default `city` merge both catalogs with honest per-entry `type`s, since Pinterest has no city-level catalog and `city` is an alias for `all`, not a literal city search - `zip`, `subcity`, `neighborhood`, `place` and `geo_market` return a 400: Pinterest exposes no postal-code catalog, pass postal codes directly as `targeting.zips: [{ key }]` on `POST /v1/ads/create` For geo queries, `q` should contain only the locality name (e.g. `\"Amsterdam\"`, not `\"Amsterdam, NL\"`). Use `countryCode` to disambiguate.
299
299
 
300
300
  ### Examples
301
301
 
@@ -312,7 +312,7 @@ api_instance = Zernio::AdTargetingApi.new
312
312
  account_id = 'account_id_example' # String | Account ID (a connected account on the target ad platform).
313
313
  q = 'q_example' # String | Search query. For geo, the locality name only (no region/country suffix).
314
314
  opts = {
315
- dimension: 'geo', # String | What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
315
+ dimension: 'geo', # String | What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics, `industry`/`jobFunction`/`seniority`/`companySize` resolve LinkedIn B2B facets (LinkedIn only). Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias.
316
316
  geo_type: 'all', # String | Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`.
317
317
  country_code: 'country_code_example', # String | ISO 3166-1 alpha-2 country code (e.g. NL) to scope a geo search.
318
318
  limit: 56 # Integer | Maximum results to return.
@@ -351,7 +351,7 @@ end
351
351
  | ---- | ---- | ----------- | ----- |
352
352
  | **account_id** | **String** | Account ID (a connected account on the target ad platform). | |
353
353
  | **q** | **String** | Search query. For geo, the locality name only (no region/country suffix). | |
354
- | **dimension** | **String** | What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias. | [optional][default to 'interest'] |
354
+ | **dimension** | **String** | What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics, `industry`/`jobFunction`/`seniority`/`companySize` resolve LinkedIn B2B facets (LinkedIn only). Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias. | [optional][default to 'interest'] |
355
355
  | **geo_type** | **String** | Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`. | [optional][default to 'city'] |
356
356
  | **country_code** | **String** | ISO 3166-1 alpha-2 country code (e.g. NL) to scope a geo search. | [optional] |
357
357
  | **limit** | **Integer** | Maximum results to return. | [optional][default to 25] |
@@ -8,6 +8,8 @@
8
8
  | **event** | **String** | | [optional] |
9
9
  | **timestamp** | **Time** | UTC time at which Zernio generated this event (set once when the event payload is built, before delivery is queued). Retries and redeliveries keep the original value, so it reflects the event, not the delivery attempt. | [optional] |
10
10
  | **reason** | **String** | | [optional] |
11
+ | **requirements** | [**Array<OnWhatsAppNumberActionRequiredRequestRequirementsInner>**](OnWhatsAppNumberActionRequiredRequestRequirementsInner.md) | Every requirement on the order with the reviewer's current verdict. Omitted when the order's requirements could not be read. | [optional] |
12
+ | **reviewed_at** | **Time** | When the reviewer last commented on the order. Omitted when there is no reviewer comment. | [optional] |
11
13
  | **number** | [**OnWhatsAppNumberDeclinedRequestNumber**](OnWhatsAppNumberDeclinedRequestNumber.md) | | [optional] |
12
14
 
13
15
  ## Example
@@ -20,6 +22,8 @@ instance = Zernio::OnWhatsAppNumberActionRequiredRequest.new(
20
22
  event: null,
21
23
  timestamp: null,
22
24
  reason: null,
25
+ requirements: null,
26
+ reviewed_at: null,
23
27
  number: null
24
28
  )
25
29
  ```
@@ -0,0 +1,22 @@
1
+ # Zernio::OnWhatsAppNumberActionRequiredRequestRequirementsInner
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **requirement_id** | **String** | Same id as fields[].requirementId on the remediation endpoint. | [optional] |
8
+ | **label** | **String** | | [optional] |
9
+ | **status** | **String** | | [optional] |
10
+
11
+ ## Example
12
+
13
+ ```ruby
14
+ require 'zernio-sdk'
15
+
16
+ instance = Zernio::OnWhatsAppNumberActionRequiredRequestRequirementsInner.new(
17
+ requirement_id: null,
18
+ label: null,
19
+ status: null
20
+ )
21
+ ```
22
+
@@ -6,7 +6,7 @@
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **id** | **String** | The platform's opaque id. Use as a geo `key` (regions/cities/zips/metros) or an entity `id` (interests/behaviors) in TargetingSpec. | |
8
8
  | **name** | **String** | Human-readable label. | |
9
- | **type** | **String** | What the result is (e.g. city, region, country, zip, metro, location, interest, behavior, income). | |
9
+ | **type** | **String** | What the result is (e.g. city, region, country, zip, metro, location, interest, behavior, income, industry, jobFunction, seniority, companySize). | |
10
10
  | **path** | **Array<String>** | Optional breadcrumb of parent labels (e.g. ['United States', 'California', 'Los Angeles']). Disambiguates same-named results. | [optional] |
11
11
  | **audience_size** | **Integer** | Optional estimated reachable users for this option, when the platform returns it. | [optional] |
12
12
 
@@ -23,10 +23,10 @@
23
23
  | **work_positions** | [**Array<CreateStandaloneAdRequestBehaviorsInner>**](CreateStandaloneAdRequestBehaviorsInner.md) | Meta only. Job title entities from /v1/ads/targeting/search?dimension=workPosition. Not interchangeable with the LinkedIn `jobTitles` URN fragments. | [optional] |
24
24
  | **work_employers** | [**Array<CreateStandaloneAdRequestBehaviorsInner>**](CreateStandaloneAdRequestBehaviorsInner.md) | Meta only. Employer entities from /v1/ads/targeting/search?dimension=workEmployer. | [optional] |
25
25
  | **work_industries** | [**Array<CreateStandaloneAdRequestBehaviorsInner>**](CreateStandaloneAdRequestBehaviorsInner.md) | Meta only. Work-industry entities from /v1/ads/targeting/search?dimension=workIndustry. Not interchangeable with the LinkedIn `industries` URN fragments. | [optional] |
26
- | **industries** | **Array<String>** | LinkedIn B2B only. Industry URN id fragments. | [optional] |
27
- | **company_sizes** | **Array<String>** | LinkedIn B2B only. | [optional] |
28
- | **seniorities** | **Array<String>** | LinkedIn B2B only. | [optional] |
29
- | **job_functions** | **Array<String>** | LinkedIn B2B only. | [optional] |
26
+ | **industries** | **Array<String>** | LinkedIn B2B only. Industry URN id fragments, or the full urn:li:industry:* URN from /v1/ads/targeting/search?dimension=industry. | [optional] |
27
+ | **company_sizes** | **Array<String>** | LinkedIn B2B only. Single-letter size codes (A to I), or the full urn:li:staffCountRange:* URN from /v1/ads/targeting/search?dimension=companySize. | [optional] |
28
+ | **seniorities** | **Array<String>** | LinkedIn B2B only. Seniority URN id fragments, or the full urn:li:seniority:* URN from /v1/ads/targeting/search?dimension=seniority. | [optional] |
29
+ | **job_functions** | **Array<String>** | LinkedIn B2B only. Function URN id fragments, or the full urn:li:function:* URN from /v1/ads/targeting/search?dimension=jobFunction. | [optional] |
30
30
  | **audience_include** | **Array<String>** | Platform audience IDs to include, as returned by GET /v1/ads/audiences (Meta custom audience ids, TikTok audience ids, Pinterest customer list ids, LinkedIn segment ids (the platformAudienceId from GET /v1/ads/audiences; Zernio resolves it to the targetable LinkedIn ad segment, an unknown id returns 400), Google user list ids, X custom audience ids). Not supported on OpenAI (400). | [optional] |
31
31
  | **audience_exclude** | **Array<String>** | Platform audience IDs to exclude; same ID formats as audienceInclude. Not supported on OpenAI (400). | [optional] |
32
32
 
@@ -2989,7 +2989,7 @@ nil (empty response body)
2989
2989
 
2990
2990
  WhatsApp number action required event
2991
2991
 
2992
- Fired when the regulator asks for more information on an already-placed regulated number order. The number stays pending (nothing was rejected); the customer can provide the missing information from the dashboard, or via the remediation endpoint. `reason` carries the regulator's request verbatim when available.
2992
+ Fired when the regulator asks for more information on an already-placed regulated number order. The number stays pending (nothing was rejected); the customer can provide the missing information from the dashboard, or via the remediation endpoint. `reason` carries the regulator's request verbatim when available. `requirements` lists every requirement on the order with the reviewer's current verdict; the `declined` ones are what to fix, keyed by the same `requirementId` the remediation endpoint uses. Verdicts only change when a reviewer acts, so they describe the review at `reviewedAt`, the time of the reviewer's last comment.
2993
2993
 
2994
2994
  ### Examples
2995
2995
 
@@ -295,11 +295,11 @@ module Zernio
295
295
  end
296
296
 
297
297
  # Search targeting options
298
- # Resolve a human-readable query into the platform's opaque targeting ids used in the `TargetingSpec` (`countries`/`regions`/`cities`/`zips`/`metros` geo keys, and `interests`/`behaviors` entity ids) on `POST /v1/ads/create`, `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences. The `dimension` param selects what is searched: - `geo`: locations, further scoped by `geoType` - `interest` - `behavior` - `income` - `language`: Google-only - `workPosition`, `workEmployer`, `workIndustry`: the Meta-only work demographics, whose ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries` Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only). Work industries are a fixed ~30-entry Meta catalog with no server-side query, so `workIndustry` matching, ranking and `limit` happen in Zernio. `language` is likewise a fixed, checked-in table of Google's targetable `language_constant` rows (id, ISO code, name) matched by name or code, capped at 20, with no network call; its ids feed `TargetingSpec.languages`. Results are normalized across platforms into a single shape, so the same client code consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results. TikTok geo searches return every matching level in one list (`type` is `country`, `region`, `city`, `district`, or `metro` for DMA areas), and `geoType` is not applied. Results are scoped to the advertiser's targetable markets, and every id is usable in `regions`/`cities`/`metros` keys on `POST /v1/ads/create`. LinkedIn geo searches also return every matching level in one list, and neither `geoType` nor `countryCode` is applied: LinkedIn's typeahead only returns a name and a URN per result, with no level or country field to filter on. Every result has `type` set to `location`, and its id is a `urn:li:geo:*` URN usable as a `regions[].key` on `POST /v1/ads/create`, `POST /v1/ads/boost` and `POST /v1/ads/targeting/reach-estimate`. Google geo searches resolve against Google's geoTargetConstants and return every matching level in one list; `geoType` is not applied (Google's `target_type` is an open taxonomy that does not map one-to-one onto the `geoType` enum), so filter client-side on the returned `type` (`country`, `region`, `city`, `zip`, `metro`, or the lowercased Google target type for rarer levels). `countryCode` scopes the search to one country. Each id is Google's numeric criterion id, usable as a `regions`/`cities`/`zips`/`metros` `key` on `POST /v1/ads/create`. Google city radius is not supported (pass a `customLocations` lat/lng pin for a radius); country targeting also accepts plain ISO codes via `countries` with no search call. Pinterest resolves against three whole-catalog endpoints (interests, locations, regions) with no server-side query or pagination, so matching, ranking and the `limit` cutoff all happen in Zernio; the catalog is independent of any ad account and results never carry `audienceSize`. Names come back localized to the connected Pinterest account's language (there is no way to force a locale), so match against whatever language that account returns. `geoType` routes to a different Pinterest catalog: - `country` and `metro_area` read the locations catalog (`type` is `country` or `metro`) - `region` reads the regions catalog (`type` is `region`, its id a `regions[].key` on `POST /v1/ads/create`) - `all` and the default `city` merge both catalogs with honest per-entry `type`s, since Pinterest has no city-level catalog and `city` is an alias for `all`, not a literal city search - `zip`, `subcity`, `neighborhood`, `place` and `geo_market` return a 400: Pinterest exposes no postal-code catalog, pass postal codes directly as `targeting.zips: [{ key }]` on `POST /v1/ads/create` For geo queries, `q` should contain only the locality name (e.g. `\"Amsterdam\"`, not `\"Amsterdam, NL\"`). Use `countryCode` to disambiguate.
298
+ # Resolve a human-readable query into the platform's opaque targeting ids used in the `TargetingSpec` (`countries`/`regions`/`cities`/`zips`/`metros` geo keys, and `interests`/`behaviors` entity ids) on `POST /v1/ads/create`, `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences. The `dimension` param selects what is searched: - `geo`: locations, further scoped by `geoType` - `interest` - `behavior` - `income` - `language`: Google-only - `workPosition`, `workEmployer`, `workIndustry`: the Meta-only work demographics, whose ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries` - `industry`, `jobFunction`, `seniority`, `companySize`: the LinkedIn-only B2B facets, whose URNs feed `TargetingSpec.industries`/`jobFunctions`/`seniorities`/`companySizes` Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only). Work industries are a fixed ~30-entry Meta catalog with no server-side query, so `workIndustry` matching, ranking and `limit` happen in Zernio. `language` is likewise a fixed, checked-in table of Google's targetable `language_constant` rows (id, ISO code, name) matched by name or code, capped at 20, with no network call; its ids feed `TargetingSpec.languages`. Results are normalized across platforms into a single shape, so the same client code consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results. TikTok geo searches return every matching level in one list (`type` is `country`, `region`, `city`, `district`, or `metro` for DMA areas), and `geoType` is not applied. Results are scoped to the advertiser's targetable markets, and every id is usable in `regions`/`cities`/`metros` keys on `POST /v1/ads/create`. LinkedIn geo searches also return every matching level in one list, and neither `geoType` nor `countryCode` is applied: LinkedIn's typeahead only returns a name and a URN per result, with no level or country field to filter on. Every result has `type` set to `location`, and its id is a `urn:li:geo:*` URN usable as a `regions[].key` on `POST /v1/ads/create`, `POST /v1/ads/boost` and `POST /v1/ads/targeting/reach-estimate`. LinkedIn B2B searches (`industry`, `jobFunction`, `seniority`, `companySize`) return the full URN to pass straight back, so no URN id fragment has to be assembled by hand: `urn:li:industry:4`, `urn:li:function:8`, `urn:li:seniority:6`, `urn:li:staffCountRange:(51,200)`. Only `industry` is a server-side name search (LinkedIn's typeahead finder). LinkedIn exposes no typeahead for job functions, seniorities and company sizes, so Zernio fetches each whole table (26, 10 and 9 entries), caches it, and does the matching, ranking and `limit` cutoff itself. Those three never carry `audienceSize`, and `countryCode` and `geoType` are not applied to any of the four. Google geo searches resolve against Google's geoTargetConstants and return every matching level in one list; `geoType` is not applied (Google's `target_type` is an open taxonomy that does not map one-to-one onto the `geoType` enum), so filter client-side on the returned `type` (`country`, `region`, `city`, `zip`, `metro`, or the lowercased Google target type for rarer levels). `countryCode` scopes the search to one country. Each id is Google's numeric criterion id, usable as a `regions`/`cities`/`zips`/`metros` `key` on `POST /v1/ads/create`. Google city radius is not supported (pass a `customLocations` lat/lng pin for a radius); country targeting also accepts plain ISO codes via `countries` with no search call. Pinterest resolves against three whole-catalog endpoints (interests, locations, regions) with no server-side query or pagination, so matching, ranking and the `limit` cutoff all happen in Zernio; the catalog is independent of any ad account and results never carry `audienceSize`. Names come back localized to the connected Pinterest account's language (there is no way to force a locale), so match against whatever language that account returns. `geoType` routes to a different Pinterest catalog: - `country` and `metro_area` read the locations catalog (`type` is `country` or `metro`) - `region` reads the regions catalog (`type` is `region`, its id a `regions[].key` on `POST /v1/ads/create`) - `all` and the default `city` merge both catalogs with honest per-entry `type`s, since Pinterest has no city-level catalog and `city` is an alias for `all`, not a literal city search - `zip`, `subcity`, `neighborhood`, `place` and `geo_market` return a 400: Pinterest exposes no postal-code catalog, pass postal codes directly as `targeting.zips: [{ key }]` on `POST /v1/ads/create` For geo queries, `q` should contain only the locality name (e.g. `\"Amsterdam\"`, not `\"Amsterdam, NL\"`). Use `countryCode` to disambiguate.
299
299
  # @param account_id [String] Account ID (a connected account on the target ad platform).
300
300
  # @param q [String] Search query. For geo, the locality name only (no region/country suffix).
301
301
  # @param [Hash] opts the optional parameters
302
- # @option opts [String] :dimension What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias. (default to 'interest')
302
+ # @option opts [String] :dimension What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics, `industry`/`jobFunction`/`seniority`/`companySize` resolve LinkedIn B2B facets (LinkedIn only). Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias. (default to 'interest')
303
303
  # @option opts [String] :geo_type Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`. (default to 'city')
304
304
  # @option opts [String] :country_code ISO 3166-1 alpha-2 country code (e.g. NL) to scope a geo search.
305
305
  # @option opts [Integer] :limit Maximum results to return. (default to 25)
@@ -310,11 +310,11 @@ module Zernio
310
310
  end
311
311
 
312
312
  # Search targeting options
313
- # Resolve a human-readable query into the platform's opaque targeting ids used in the `TargetingSpec` (`countries`/`regions`/`cities`/`zips`/`metros` geo keys, and `interests`/`behaviors` entity ids) on `POST /v1/ads/create`, `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences. The `dimension` param selects what is searched: - `geo`: locations, further scoped by `geoType` - `interest` - `behavior` - `income` - `language`: Google-only - `workPosition`, `workEmployer`, `workIndustry`: the Meta-only work demographics, whose ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries` Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only). Work industries are a fixed ~30-entry Meta catalog with no server-side query, so `workIndustry` matching, ranking and `limit` happen in Zernio. `language` is likewise a fixed, checked-in table of Google's targetable `language_constant` rows (id, ISO code, name) matched by name or code, capped at 20, with no network call; its ids feed `TargetingSpec.languages`. Results are normalized across platforms into a single shape, so the same client code consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results. TikTok geo searches return every matching level in one list (`type` is `country`, `region`, `city`, `district`, or `metro` for DMA areas), and `geoType` is not applied. Results are scoped to the advertiser's targetable markets, and every id is usable in `regions`/`cities`/`metros` keys on `POST /v1/ads/create`. LinkedIn geo searches also return every matching level in one list, and neither `geoType` nor `countryCode` is applied: LinkedIn's typeahead only returns a name and a URN per result, with no level or country field to filter on. Every result has `type` set to `location`, and its id is a `urn:li:geo:*` URN usable as a `regions[].key` on `POST /v1/ads/create`, `POST /v1/ads/boost` and `POST /v1/ads/targeting/reach-estimate`. Google geo searches resolve against Google's geoTargetConstants and return every matching level in one list; `geoType` is not applied (Google's `target_type` is an open taxonomy that does not map one-to-one onto the `geoType` enum), so filter client-side on the returned `type` (`country`, `region`, `city`, `zip`, `metro`, or the lowercased Google target type for rarer levels). `countryCode` scopes the search to one country. Each id is Google's numeric criterion id, usable as a `regions`/`cities`/`zips`/`metros` `key` on `POST /v1/ads/create`. Google city radius is not supported (pass a `customLocations` lat/lng pin for a radius); country targeting also accepts plain ISO codes via `countries` with no search call. Pinterest resolves against three whole-catalog endpoints (interests, locations, regions) with no server-side query or pagination, so matching, ranking and the `limit` cutoff all happen in Zernio; the catalog is independent of any ad account and results never carry `audienceSize`. Names come back localized to the connected Pinterest account's language (there is no way to force a locale), so match against whatever language that account returns. `geoType` routes to a different Pinterest catalog: - `country` and `metro_area` read the locations catalog (`type` is `country` or `metro`) - `region` reads the regions catalog (`type` is `region`, its id a `regions[].key` on `POST /v1/ads/create`) - `all` and the default `city` merge both catalogs with honest per-entry `type`s, since Pinterest has no city-level catalog and `city` is an alias for `all`, not a literal city search - `zip`, `subcity`, `neighborhood`, `place` and `geo_market` return a 400: Pinterest exposes no postal-code catalog, pass postal codes directly as `targeting.zips: [{ key }]` on `POST /v1/ads/create` For geo queries, `q` should contain only the locality name (e.g. `\"Amsterdam\"`, not `\"Amsterdam, NL\"`). Use `countryCode` to disambiguate.
313
+ # Resolve a human-readable query into the platform's opaque targeting ids used in the `TargetingSpec` (`countries`/`regions`/`cities`/`zips`/`metros` geo keys, and `interests`/`behaviors` entity ids) on `POST /v1/ads/create`, `POST /v1/ads/targeting/reach-estimate`, and `saved_targeting` audiences. The `dimension` param selects what is searched: - `geo`: locations, further scoped by `geoType` - `interest` - `behavior` - `income` - `language`: Google-only - `workPosition`, `workEmployer`, `workIndustry`: the Meta-only work demographics, whose ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries` - `industry`, `jobFunction`, `seniority`, `companySize`: the LinkedIn-only B2B facets, whose URNs feed `TargetingSpec.industries`/`jobFunctions`/`seniorities`/`companySizes` Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only). Work industries are a fixed ~30-entry Meta catalog with no server-side query, so `workIndustry` matching, ranking and `limit` happen in Zernio. `language` is likewise a fixed, checked-in table of Google's targetable `language_constant` rows (id, ISO code, name) matched by name or code, capped at 20, with no network call; its ids feed `TargetingSpec.languages`. Results are normalized across platforms into a single shape, so the same client code consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results. TikTok geo searches return every matching level in one list (`type` is `country`, `region`, `city`, `district`, or `metro` for DMA areas), and `geoType` is not applied. Results are scoped to the advertiser's targetable markets, and every id is usable in `regions`/`cities`/`metros` keys on `POST /v1/ads/create`. LinkedIn geo searches also return every matching level in one list, and neither `geoType` nor `countryCode` is applied: LinkedIn's typeahead only returns a name and a URN per result, with no level or country field to filter on. Every result has `type` set to `location`, and its id is a `urn:li:geo:*` URN usable as a `regions[].key` on `POST /v1/ads/create`, `POST /v1/ads/boost` and `POST /v1/ads/targeting/reach-estimate`. LinkedIn B2B searches (`industry`, `jobFunction`, `seniority`, `companySize`) return the full URN to pass straight back, so no URN id fragment has to be assembled by hand: `urn:li:industry:4`, `urn:li:function:8`, `urn:li:seniority:6`, `urn:li:staffCountRange:(51,200)`. Only `industry` is a server-side name search (LinkedIn's typeahead finder). LinkedIn exposes no typeahead for job functions, seniorities and company sizes, so Zernio fetches each whole table (26, 10 and 9 entries), caches it, and does the matching, ranking and `limit` cutoff itself. Those three never carry `audienceSize`, and `countryCode` and `geoType` are not applied to any of the four. Google geo searches resolve against Google's geoTargetConstants and return every matching level in one list; `geoType` is not applied (Google's `target_type` is an open taxonomy that does not map one-to-one onto the `geoType` enum), so filter client-side on the returned `type` (`country`, `region`, `city`, `zip`, `metro`, or the lowercased Google target type for rarer levels). `countryCode` scopes the search to one country. Each id is Google's numeric criterion id, usable as a `regions`/`cities`/`zips`/`metros` `key` on `POST /v1/ads/create`. Google city radius is not supported (pass a `customLocations` lat/lng pin for a radius); country targeting also accepts plain ISO codes via `countries` with no search call. Pinterest resolves against three whole-catalog endpoints (interests, locations, regions) with no server-side query or pagination, so matching, ranking and the `limit` cutoff all happen in Zernio; the catalog is independent of any ad account and results never carry `audienceSize`. Names come back localized to the connected Pinterest account's language (there is no way to force a locale), so match against whatever language that account returns. `geoType` routes to a different Pinterest catalog: - `country` and `metro_area` read the locations catalog (`type` is `country` or `metro`) - `region` reads the regions catalog (`type` is `region`, its id a `regions[].key` on `POST /v1/ads/create`) - `all` and the default `city` merge both catalogs with honest per-entry `type`s, since Pinterest has no city-level catalog and `city` is an alias for `all`, not a literal city search - `zip`, `subcity`, `neighborhood`, `place` and `geo_market` return a 400: Pinterest exposes no postal-code catalog, pass postal codes directly as `targeting.zips: [{ key }]` on `POST /v1/ads/create` For geo queries, `q` should contain only the locality name (e.g. `\"Amsterdam\"`, not `\"Amsterdam, NL\"`). Use `countryCode` to disambiguate.
314
314
  # @param account_id [String] Account ID (a connected account on the target ad platform).
315
315
  # @param q [String] Search query. For geo, the locality name only (no region/country suffix).
316
316
  # @param [Hash] opts the optional parameters
317
- # @option opts [String] :dimension What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias. (default to 'interest')
317
+ # @option opts [String] :dimension What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics, `industry`/`jobFunction`/`seniority`/`companySize` resolve LinkedIn B2B facets (LinkedIn only). Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias. (default to 'interest')
318
318
  # @option opts [String] :geo_type Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`. (default to 'city')
319
319
  # @option opts [String] :country_code ISO 3166-1 alpha-2 country code (e.g. NL) to scope a geo search.
320
320
  # @option opts [Integer] :limit Maximum results to return. (default to 25)
@@ -331,7 +331,7 @@ module Zernio
331
331
  if @api_client.config.client_side_validation && q.nil?
332
332
  fail ArgumentError, "Missing the required parameter 'q' when calling AdTargetingApi.search_ad_targeting"
333
333
  end
334
- allowable_values = ["geo", "interest", "behavior", "income", "language", "workPosition", "workEmployer", "workIndustry"]
334
+ allowable_values = ["geo", "interest", "behavior", "income", "language", "workPosition", "workEmployer", "workIndustry", "industry", "jobFunction", "seniority", "companySize"]
335
335
  if @api_client.config.client_side_validation && opts[:'dimension'] && !allowable_values.include?(opts[:'dimension'])
336
336
  fail ArgumentError, "invalid value for \"dimension\", must be one of #{allowable_values}"
337
337
  end
@@ -2858,7 +2858,7 @@ module Zernio
2858
2858
  end
2859
2859
 
2860
2860
  # WhatsApp number action required event
2861
- # Fired when the regulator asks for more information on an already-placed regulated number order. The number stays pending (nothing was rejected); the customer can provide the missing information from the dashboard, or via the remediation endpoint. `reason` carries the regulator's request verbatim when available.
2861
+ # Fired when the regulator asks for more information on an already-placed regulated number order. The number stays pending (nothing was rejected); the customer can provide the missing information from the dashboard, or via the remediation endpoint. `reason` carries the regulator's request verbatim when available. `requirements` lists every requirement on the order with the reviewer's current verdict; the `declined` ones are what to fix, keyed by the same `requirementId` the remediation endpoint uses. Verdicts only change when a reviewer acts, so they describe the review at `reviewedAt`, the time of the reviewer's last comment.
2862
2862
  # @param on_whats_app_number_action_required_request [OnWhatsAppNumberActionRequiredRequest]
2863
2863
  # @param [Hash] opts the optional parameters
2864
2864
  # @return [nil]
@@ -2868,7 +2868,7 @@ module Zernio
2868
2868
  end
2869
2869
 
2870
2870
  # WhatsApp number action required event
2871
- # Fired when the regulator asks for more information on an already-placed regulated number order. The number stays pending (nothing was rejected); the customer can provide the missing information from the dashboard, or via the remediation endpoint. `reason` carries the regulator's request verbatim when available.
2871
+ # Fired when the regulator asks for more information on an already-placed regulated number order. The number stays pending (nothing was rejected); the customer can provide the missing information from the dashboard, or via the remediation endpoint. `reason` carries the regulator's request verbatim when available. `requirements` lists every requirement on the order with the reviewer's current verdict; the `declined` ones are what to fix, keyed by the same `requirementId` the remediation endpoint uses. Verdicts only change when a reviewer acts, so they describe the review at `reviewedAt`, the time of the reviewer's last comment.
2872
2872
  # @param on_whats_app_number_action_required_request [OnWhatsAppNumberActionRequiredRequest]
2873
2873
  # @param [Hash] opts the optional parameters
2874
2874
  # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
@@ -24,6 +24,12 @@ module Zernio
24
24
 
25
25
  attr_accessor :reason
26
26
 
27
+ # Every requirement on the order with the reviewer's current verdict. Omitted when the order's requirements could not be read.
28
+ attr_accessor :requirements
29
+
30
+ # When the reviewer last commented on the order. Omitted when there is no reviewer comment.
31
+ attr_accessor :reviewed_at
32
+
27
33
  attr_accessor :number
28
34
 
29
35
  class EnumAttributeValidator
@@ -55,6 +61,8 @@ module Zernio
55
61
  :'event' => :'event',
56
62
  :'timestamp' => :'timestamp',
57
63
  :'reason' => :'reason',
64
+ :'requirements' => :'requirements',
65
+ :'reviewed_at' => :'reviewedAt',
58
66
  :'number' => :'number'
59
67
  }
60
68
  end
@@ -76,6 +84,8 @@ module Zernio
76
84
  :'event' => :'String',
77
85
  :'timestamp' => :'Time',
78
86
  :'reason' => :'String',
87
+ :'requirements' => :'Array<OnWhatsAppNumberActionRequiredRequestRequirementsInner>',
88
+ :'reviewed_at' => :'Time',
79
89
  :'number' => :'OnWhatsAppNumberDeclinedRequestNumber'
80
90
  }
81
91
  end
@@ -118,6 +128,16 @@ module Zernio
118
128
  self.reason = attributes[:'reason']
119
129
  end
120
130
 
131
+ if attributes.key?(:'requirements')
132
+ if (value = attributes[:'requirements']).is_a?(Array)
133
+ self.requirements = value
134
+ end
135
+ end
136
+
137
+ if attributes.key?(:'reviewed_at')
138
+ self.reviewed_at = attributes[:'reviewed_at']
139
+ end
140
+
121
141
  if attributes.key?(:'number')
122
142
  self.number = attributes[:'number']
123
143
  end
@@ -159,6 +179,8 @@ module Zernio
159
179
  event == o.event &&
160
180
  timestamp == o.timestamp &&
161
181
  reason == o.reason &&
182
+ requirements == o.requirements &&
183
+ reviewed_at == o.reviewed_at &&
162
184
  number == o.number
163
185
  end
164
186
 
@@ -171,7 +193,7 @@ module Zernio
171
193
  # Calculates hash code according to all attributes.
172
194
  # @return [Integer] Hash code
173
195
  def hash
174
- [id, event, timestamp, reason, number].hash
196
+ [id, event, timestamp, reason, requirements, reviewed_at, number].hash
175
197
  end
176
198
 
177
199
  # Builds the object from hash
@@ -0,0 +1,200 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Zernio
17
+ class OnWhatsAppNumberActionRequiredRequestRequirementsInner < ApiModelBase
18
+ # Same id as fields[].requirementId on the remediation endpoint.
19
+ attr_accessor :requirement_id
20
+
21
+ attr_accessor :label
22
+
23
+ attr_accessor :status
24
+
25
+ class EnumAttributeValidator
26
+ attr_reader :datatype
27
+ attr_reader :allowable_values
28
+
29
+ def initialize(datatype, allowable_values)
30
+ @allowable_values = allowable_values.map do |value|
31
+ case datatype.to_s
32
+ when /Integer/i
33
+ value.to_i
34
+ when /Float/i
35
+ value.to_f
36
+ else
37
+ value
38
+ end
39
+ end
40
+ end
41
+
42
+ def valid?(value)
43
+ !value || allowable_values.include?(value)
44
+ end
45
+ end
46
+
47
+ # Attribute mapping from ruby-style variable name to JSON key.
48
+ def self.attribute_map
49
+ {
50
+ :'requirement_id' => :'requirementId',
51
+ :'label' => :'label',
52
+ :'status' => :'status'
53
+ }
54
+ end
55
+
56
+ # Returns attribute mapping this model knows about
57
+ def self.acceptable_attribute_map
58
+ attribute_map
59
+ end
60
+
61
+ # Returns all the JSON keys this model knows about
62
+ def self.acceptable_attributes
63
+ acceptable_attribute_map.values
64
+ end
65
+
66
+ # Attribute type mapping.
67
+ def self.openapi_types
68
+ {
69
+ :'requirement_id' => :'String',
70
+ :'label' => :'String',
71
+ :'status' => :'String'
72
+ }
73
+ end
74
+
75
+ # List of attributes with nullable: true
76
+ def self.openapi_nullable
77
+ Set.new([
78
+ ])
79
+ end
80
+
81
+ # Initializes the object
82
+ # @param [Hash] attributes Model attributes in the form of hash
83
+ def initialize(attributes = {})
84
+ if (!attributes.is_a?(Hash))
85
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Zernio::OnWhatsAppNumberActionRequiredRequestRequirementsInner` initialize method"
86
+ end
87
+
88
+ # check to see if the attribute exists and convert string to symbol for hash key
89
+ acceptable_attribute_map = self.class.acceptable_attribute_map
90
+ attributes = attributes.each_with_object({}) { |(k, v), h|
91
+ if (!acceptable_attribute_map.key?(k.to_sym))
92
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Zernio::OnWhatsAppNumberActionRequiredRequestRequirementsInner`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
93
+ end
94
+ h[k.to_sym] = v
95
+ }
96
+
97
+ if attributes.key?(:'requirement_id')
98
+ self.requirement_id = attributes[:'requirement_id']
99
+ end
100
+
101
+ if attributes.key?(:'label')
102
+ self.label = attributes[:'label']
103
+ end
104
+
105
+ if attributes.key?(:'status')
106
+ self.status = attributes[:'status']
107
+ end
108
+ end
109
+
110
+ # Show invalid properties with the reasons. Usually used together with valid?
111
+ # @return Array for valid properties with the reasons
112
+ def list_invalid_properties
113
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
114
+ invalid_properties = Array.new
115
+ invalid_properties
116
+ end
117
+
118
+ # Check to see if the all the properties in the model are valid
119
+ # @return true if the model is valid
120
+ def valid?
121
+ warn '[DEPRECATED] the `valid?` method is obsolete'
122
+ status_validator = EnumAttributeValidator.new('String', ["approved", "pending", "declined"])
123
+ return false unless status_validator.valid?(@status)
124
+ true
125
+ end
126
+
127
+ # Custom attribute writer method checking allowed values (enum).
128
+ # @param [Object] status Object to be assigned
129
+ def status=(status)
130
+ validator = EnumAttributeValidator.new('String', ["approved", "pending", "declined"])
131
+ unless validator.valid?(status)
132
+ fail ArgumentError, "invalid value for \"status\", must be one of #{validator.allowable_values}."
133
+ end
134
+ @status = status
135
+ end
136
+
137
+ # Checks equality by comparing each attribute.
138
+ # @param [Object] Object to be compared
139
+ def ==(o)
140
+ return true if self.equal?(o)
141
+ self.class == o.class &&
142
+ requirement_id == o.requirement_id &&
143
+ label == o.label &&
144
+ status == o.status
145
+ end
146
+
147
+ # @see the `==` method
148
+ # @param [Object] Object to be compared
149
+ def eql?(o)
150
+ self == o
151
+ end
152
+
153
+ # Calculates hash code according to all attributes.
154
+ # @return [Integer] Hash code
155
+ def hash
156
+ [requirement_id, label, status].hash
157
+ end
158
+
159
+ # Builds the object from hash
160
+ # @param [Hash] attributes Model attributes in the form of hash
161
+ # @return [Object] Returns the model itself
162
+ def self.build_from_hash(attributes)
163
+ return nil unless attributes.is_a?(Hash)
164
+ attributes = attributes.transform_keys(&:to_sym)
165
+ transformed_hash = {}
166
+ openapi_types.each_pair do |key, type|
167
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
168
+ transformed_hash["#{key}"] = nil
169
+ elsif type =~ /\AArray<(.*)>/i
170
+ # check to ensure the input is an array given that the attribute
171
+ # is documented as an array but the input is not
172
+ if attributes[attribute_map[key]].is_a?(Array)
173
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
174
+ end
175
+ elsif !attributes[attribute_map[key]].nil?
176
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
177
+ end
178
+ end
179
+ new(transformed_hash)
180
+ end
181
+
182
+ # Returns the object in the form of hash
183
+ # @return [Hash] Returns the object in the form of hash
184
+ def to_hash
185
+ hash = {}
186
+ self.class.attribute_map.each_pair do |attr, param|
187
+ value = self.send(attr)
188
+ if value.nil?
189
+ is_nullable = self.class.openapi_nullable.include?(attr)
190
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
191
+ end
192
+
193
+ hash[param] = _to_hash(value)
194
+ end
195
+ hash
196
+ end
197
+
198
+ end
199
+
200
+ end
@@ -21,7 +21,7 @@ module Zernio
21
21
  # Human-readable label.
22
22
  attr_accessor :name
23
23
 
24
- # What the result is (e.g. city, region, country, zip, metro, location, interest, behavior, income).
24
+ # What the result is (e.g. city, region, country, zip, metro, location, interest, behavior, income, industry, jobFunction, seniority, companySize).
25
25
  attr_accessor :type
26
26
 
27
27
  # Optional breadcrumb of parent labels (e.g. ['United States', 'California', 'Los Angeles']). Disambiguates same-named results.
@@ -72,16 +72,16 @@ module Zernio
72
72
  # Meta only. Work-industry entities from /v1/ads/targeting/search?dimension=workIndustry. Not interchangeable with the LinkedIn `industries` URN fragments.
73
73
  attr_accessor :work_industries
74
74
 
75
- # LinkedIn B2B only. Industry URN id fragments.
75
+ # LinkedIn B2B only. Industry URN id fragments, or the full urn:li:industry:* URN from /v1/ads/targeting/search?dimension=industry.
76
76
  attr_accessor :industries
77
77
 
78
- # LinkedIn B2B only.
78
+ # LinkedIn B2B only. Single-letter size codes (A to I), or the full urn:li:staffCountRange:* URN from /v1/ads/targeting/search?dimension=companySize.
79
79
  attr_accessor :company_sizes
80
80
 
81
- # LinkedIn B2B only.
81
+ # LinkedIn B2B only. Seniority URN id fragments, or the full urn:li:seniority:* URN from /v1/ads/targeting/search?dimension=seniority.
82
82
  attr_accessor :seniorities
83
83
 
84
- # LinkedIn B2B only.
84
+ # LinkedIn B2B only. Function URN id fragments, or the full urn:li:function:* URN from /v1/ads/targeting/search?dimension=jobFunction.
85
85
  attr_accessor :job_functions
86
86
 
87
87
  # Platform audience IDs to include, as returned by GET /v1/ads/audiences (Meta custom audience ids, TikTok audience ids, Pinterest customer list ids, LinkedIn segment ids (the platformAudienceId from GET /v1/ads/audiences; Zernio resolves it to the targetable LinkedIn ad segment, an unknown id returns 400), Google user list ids, X custom audience ids). Not supported on OpenAI (400).
@@ -11,5 +11,5 @@ Generator version: 7.19.0
11
11
  =end
12
12
 
13
13
  module Zernio
14
- VERSION = '0.0.924'
14
+ VERSION = '0.0.926'
15
15
  end
data/lib/zernio-sdk.rb CHANGED
@@ -1269,6 +1269,7 @@ require 'zernio-sdk/models/on_verification_failed_request_verification'
1269
1269
  require 'zernio-sdk/models/on_whats_app_automatic_event_request'
1270
1270
  require 'zernio-sdk/models/on_whats_app_automatic_event_request_custom_data'
1271
1271
  require 'zernio-sdk/models/on_whats_app_number_action_required_request'
1272
+ require 'zernio-sdk/models/on_whats_app_number_action_required_request_requirements_inner'
1272
1273
  require 'zernio-sdk/models/on_whats_app_number_activated_request'
1273
1274
  require 'zernio-sdk/models/on_whats_app_number_activated_request_number'
1274
1275
  require 'zernio-sdk/models/on_whats_app_number_declined_request'
data/openapi.yaml CHANGED
@@ -9238,10 +9238,10 @@ components:
9238
9238
  properties:
9239
9239
  id: { type: string }
9240
9240
  name: { type: string }
9241
- industries: { type: array, items: { type: string }, description: "LinkedIn B2B only. Industry URN id fragments." }
9242
- companySizes: { type: array, items: { type: string }, description: "LinkedIn B2B only." }
9243
- seniorities: { type: array, items: { type: string }, description: "LinkedIn B2B only." }
9244
- jobFunctions: { type: array, items: { type: string }, description: "LinkedIn B2B only." }
9241
+ industries: { type: array, items: { type: string }, description: "LinkedIn B2B only. Industry URN id fragments, or the full urn:li:industry:* URN from /v1/ads/targeting/search?dimension=industry." }
9242
+ companySizes: { type: array, items: { type: string }, description: "LinkedIn B2B only. Single-letter size codes (A to I), or the full urn:li:staffCountRange:* URN from /v1/ads/targeting/search?dimension=companySize." }
9243
+ seniorities: { type: array, items: { type: string }, description: "LinkedIn B2B only. Seniority URN id fragments, or the full urn:li:seniority:* URN from /v1/ads/targeting/search?dimension=seniority." }
9244
+ jobFunctions: { type: array, items: { type: string }, description: "LinkedIn B2B only. Function URN id fragments, or the full urn:li:function:* URN from /v1/ads/targeting/search?dimension=jobFunction." }
9245
9245
  audienceInclude: { type: array, items: { type: string }, description: 'Platform audience IDs to include, as returned by GET /v1/ads/audiences (Meta custom audience ids, TikTok audience ids, Pinterest customer list ids, LinkedIn segment ids (the platformAudienceId from GET /v1/ads/audiences; Zernio resolves it to the targetable LinkedIn ad segment, an unknown id returns 400), Google user list ids, X custom audience ids). Not supported on OpenAI (400).' }
9246
9246
  audienceExclude: { type: array, items: { type: string }, description: 'Platform audience IDs to exclude; same ID formats as audienceInclude. Not supported on OpenAI (400).' }
9247
9247
  MetaCreativeFeatures:
@@ -11595,7 +11595,11 @@ webhooks:
11595
11595
  regulated number order. The number stays pending (nothing was rejected);
11596
11596
  the customer can provide the missing information from the dashboard, or
11597
11597
  via the remediation endpoint. `reason` carries the regulator's request
11598
- verbatim when available.
11598
+ verbatim when available. `requirements` lists every requirement on the
11599
+ order with the reviewer's current verdict; the `declined` ones are what to
11600
+ fix, keyed by the same `requirementId` the remediation endpoint uses.
11601
+ Verdicts only change when a reviewer acts, so they describe the review at
11602
+ `reviewedAt`, the time of the reviewer's last comment.
11599
11603
  tags: [Webhook Events]
11600
11604
  requestBody:
11601
11605
  required: true
@@ -11611,6 +11615,21 @@ webhooks:
11611
11615
  format: date-time
11612
11616
  description: 'UTC time at which Zernio generated this event (set once when the event payload is built, before delivery is queued). Retries and redeliveries keep the original value, so it reflects the event, not the delivery attempt.'
11613
11617
  reason: { type: string }
11618
+ requirements:
11619
+ type: array
11620
+ description: "Every requirement on the order with the reviewer's current verdict. Omitted when the order's requirements could not be read."
11621
+ items:
11622
+ type: object
11623
+ properties:
11624
+ requirementId:
11625
+ type: string
11626
+ description: 'Same id as fields[].requirementId on the remediation endpoint.'
11627
+ label: { type: string }
11628
+ status: { type: string, enum: [approved, pending, declined] }
11629
+ reviewedAt:
11630
+ type: string
11631
+ format: date-time
11632
+ description: 'When the reviewer last commented on the order. Omitted when there is no reviewer comment.'
11614
11633
  number:
11615
11634
  type: object
11616
11635
  properties:
@@ -52795,6 +52814,8 @@ paths:
52795
52814
  - `language`: Google-only
52796
52815
  - `workPosition`, `workEmployer`, `workIndustry`: the Meta-only work demographics, whose
52797
52816
  ids feed `TargetingSpec.workPositions`/`workEmployers`/`workIndustries`
52817
+ - `industry`, `jobFunction`, `seniority`, `companySize`: the LinkedIn-only B2B facets, whose
52818
+ URNs feed `TargetingSpec.industries`/`jobFunctions`/`seniorities`/`companySizes`
52798
52819
 
52799
52820
  Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only).
52800
52821
  Work industries are a fixed ~30-entry Meta catalog with no server-side query,
@@ -52819,6 +52840,15 @@ paths:
52819
52840
  `urn:li:geo:*` URN usable as a `regions[].key` on `POST /v1/ads/create`,
52820
52841
  `POST /v1/ads/boost` and `POST /v1/ads/targeting/reach-estimate`.
52821
52842
 
52843
+ LinkedIn B2B searches (`industry`, `jobFunction`, `seniority`, `companySize`) return the
52844
+ full URN to pass straight back, so no URN id fragment has to be assembled by hand:
52845
+ `urn:li:industry:4`, `urn:li:function:8`, `urn:li:seniority:6`,
52846
+ `urn:li:staffCountRange:(51,200)`. Only `industry` is a server-side name search
52847
+ (LinkedIn's typeahead finder). LinkedIn exposes no typeahead for job functions,
52848
+ seniorities and company sizes, so Zernio fetches each whole table (26, 10 and 9 entries),
52849
+ caches it, and does the matching, ranking and `limit` cutoff itself. Those three never
52850
+ carry `audienceSize`, and `countryCode` and `geoType` are not applied to any of the four.
52851
+
52822
52852
  Google geo searches resolve against Google's geoTargetConstants and return
52823
52853
  every matching level in one list; `geoType` is not applied (Google's
52824
52854
  `target_type` is an open taxonomy that does not map one-to-one onto the
@@ -52856,7 +52886,7 @@ paths:
52856
52886
  parameters:
52857
52887
  - { name: accountId, in: query, required: true, schema: { type: string }, description: "Account ID (a connected account on the target ad platform)." }
52858
52888
  - { name: q, in: query, required: true, schema: { type: string }, description: "Search query. For geo, the locality name only (no region/country suffix)." }
52859
- - { name: dimension, in: query, required: false, schema: { type: string, enum: [geo, interest, behavior, income, language, workPosition, workEmployer, workIndustry], default: interest }, description: "What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics. Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias." }
52889
+ - { name: dimension, in: query, required: false, schema: { type: string, enum: [geo, interest, behavior, income, language, workPosition, workEmployer, workIndustry, industry, jobFunction, seniority, companySize], default: interest }, description: "What to search. `geo` resolves locations (scope further with `geoType`), `interest`/`behavior` resolve audience entities, `income` resolves income-tier options, `language` resolves Google's targetable language_constant table (Google only), `workPosition`/`workEmployer`/`workIndustry` resolve Meta work demographics, `industry`/`jobFunction`/`seniority`/`companySize` resolve LinkedIn B2B facets (LinkedIn only). Defaults to `interest` for backward compatibility with the deprecated /v1/ads/interests alias." }
52860
52890
  - { name: geoType, in: query, required: false, schema: { type: string, enum: [all, country, region, city, subcity, neighborhood, place, zip, metro_area, geo_market], default: city }, description: "Only used when `dimension=geo`. The kind of location to resolve. `all` searches every type in one relevance-ranked call. Defaults to `city`." }
52861
52891
  - { name: countryCode, in: query, required: false, schema: { type: string, minLength: 2, maxLength: 2 }, description: "ISO 3166-1 alpha-2 country code (e.g. NL) to scope a geo search." }
52862
52892
  - { name: limit, in: query, required: false, schema: { type: integer, minimum: 1, maximum: 100, default: 25 }, description: "Maximum results to return." }
@@ -52877,7 +52907,7 @@ paths:
52877
52907
  properties:
52878
52908
  id: { type: string, description: "The platform's opaque id. Use as a geo `key` (regions/cities/zips/metros) or an entity `id` (interests/behaviors) in TargetingSpec." }
52879
52909
  name: { type: string, description: "Human-readable label." }
52880
- type: { type: string, description: "What the result is (e.g. city, region, country, zip, metro, location, interest, behavior, income)." }
52910
+ type: { type: string, description: "What the result is (e.g. city, region, country, zip, metro, location, interest, behavior, income, industry, jobFunction, seniority, companySize)." }
52881
52911
  path: { type: array, items: { type: string }, description: "Optional breadcrumb of parent labels (e.g. ['United States', 'California', 'Los Angeles']). Disambiguates same-named results." }
52882
52912
  audienceSize: { type: [integer, "null"], description: "Optional estimated reachable users for this option, when the platform returns it." }
52883
52913
  '400':
@@ -83,11 +83,11 @@ describe 'AdTargetingApi' do
83
83
 
84
84
  # unit tests for search_ad_targeting
85
85
  # Search targeting options
86
- # Resolve a human-readable query into the platform&#39;s opaque targeting ids used in the &#x60;TargetingSpec&#x60; (&#x60;countries&#x60;/&#x60;regions&#x60;/&#x60;cities&#x60;/&#x60;zips&#x60;/&#x60;metros&#x60; geo keys, and &#x60;interests&#x60;/&#x60;behaviors&#x60; entity ids) on &#x60;POST /v1/ads/create&#x60;, &#x60;POST /v1/ads/targeting/reach-estimate&#x60;, and &#x60;saved_targeting&#x60; audiences. The &#x60;dimension&#x60; param selects what is searched: - &#x60;geo&#x60;: locations, further scoped by &#x60;geoType&#x60; - &#x60;interest&#x60; - &#x60;behavior&#x60; - &#x60;income&#x60; - &#x60;language&#x60;: Google-only - &#x60;workPosition&#x60;, &#x60;workEmployer&#x60;, &#x60;workIndustry&#x60;: the Meta-only work demographics, whose ids feed &#x60;TargetingSpec.workPositions&#x60;/&#x60;workEmployers&#x60;/&#x60;workIndustries&#x60; Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only). Work industries are a fixed ~30-entry Meta catalog with no server-side query, so &#x60;workIndustry&#x60; matching, ranking and &#x60;limit&#x60; happen in Zernio. &#x60;language&#x60; is likewise a fixed, checked-in table of Google&#39;s targetable &#x60;language_constant&#x60; rows (id, ISO code, name) matched by name or code, capped at 20, with no network call; its ids feed &#x60;TargetingSpec.languages&#x60;. Results are normalized across platforms into a single shape, so the same client code consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results. TikTok geo searches return every matching level in one list (&#x60;type&#x60; is &#x60;country&#x60;, &#x60;region&#x60;, &#x60;city&#x60;, &#x60;district&#x60;, or &#x60;metro&#x60; for DMA areas), and &#x60;geoType&#x60; is not applied. Results are scoped to the advertiser&#39;s targetable markets, and every id is usable in &#x60;regions&#x60;/&#x60;cities&#x60;/&#x60;metros&#x60; keys on &#x60;POST /v1/ads/create&#x60;. LinkedIn geo searches also return every matching level in one list, and neither &#x60;geoType&#x60; nor &#x60;countryCode&#x60; is applied: LinkedIn&#39;s typeahead only returns a name and a URN per result, with no level or country field to filter on. Every result has &#x60;type&#x60; set to &#x60;location&#x60;, and its id is a &#x60;urn:li:geo:*&#x60; URN usable as a &#x60;regions[].key&#x60; on &#x60;POST /v1/ads/create&#x60;, &#x60;POST /v1/ads/boost&#x60; and &#x60;POST /v1/ads/targeting/reach-estimate&#x60;. Google geo searches resolve against Google&#39;s geoTargetConstants and return every matching level in one list; &#x60;geoType&#x60; is not applied (Google&#39;s &#x60;target_type&#x60; is an open taxonomy that does not map one-to-one onto the &#x60;geoType&#x60; enum), so filter client-side on the returned &#x60;type&#x60; (&#x60;country&#x60;, &#x60;region&#x60;, &#x60;city&#x60;, &#x60;zip&#x60;, &#x60;metro&#x60;, or the lowercased Google target type for rarer levels). &#x60;countryCode&#x60; scopes the search to one country. Each id is Google&#39;s numeric criterion id, usable as a &#x60;regions&#x60;/&#x60;cities&#x60;/&#x60;zips&#x60;/&#x60;metros&#x60; &#x60;key&#x60; on &#x60;POST /v1/ads/create&#x60;. Google city radius is not supported (pass a &#x60;customLocations&#x60; lat/lng pin for a radius); country targeting also accepts plain ISO codes via &#x60;countries&#x60; with no search call. Pinterest resolves against three whole-catalog endpoints (interests, locations, regions) with no server-side query or pagination, so matching, ranking and the &#x60;limit&#x60; cutoff all happen in Zernio; the catalog is independent of any ad account and results never carry &#x60;audienceSize&#x60;. Names come back localized to the connected Pinterest account&#39;s language (there is no way to force a locale), so match against whatever language that account returns. &#x60;geoType&#x60; routes to a different Pinterest catalog: - &#x60;country&#x60; and &#x60;metro_area&#x60; read the locations catalog (&#x60;type&#x60; is &#x60;country&#x60; or &#x60;metro&#x60;) - &#x60;region&#x60; reads the regions catalog (&#x60;type&#x60; is &#x60;region&#x60;, its id a &#x60;regions[].key&#x60; on &#x60;POST /v1/ads/create&#x60;) - &#x60;all&#x60; and the default &#x60;city&#x60; merge both catalogs with honest per-entry &#x60;type&#x60;s, since Pinterest has no city-level catalog and &#x60;city&#x60; is an alias for &#x60;all&#x60;, not a literal city search - &#x60;zip&#x60;, &#x60;subcity&#x60;, &#x60;neighborhood&#x60;, &#x60;place&#x60; and &#x60;geo_market&#x60; return a 400: Pinterest exposes no postal-code catalog, pass postal codes directly as &#x60;targeting.zips: [{ key }]&#x60; on &#x60;POST /v1/ads/create&#x60; For geo queries, &#x60;q&#x60; should contain only the locality name (e.g. &#x60;\&quot;Amsterdam\&quot;&#x60;, not &#x60;\&quot;Amsterdam, NL\&quot;&#x60;). Use &#x60;countryCode&#x60; to disambiguate.
86
+ # Resolve a human-readable query into the platform&#39;s opaque targeting ids used in the &#x60;TargetingSpec&#x60; (&#x60;countries&#x60;/&#x60;regions&#x60;/&#x60;cities&#x60;/&#x60;zips&#x60;/&#x60;metros&#x60; geo keys, and &#x60;interests&#x60;/&#x60;behaviors&#x60; entity ids) on &#x60;POST /v1/ads/create&#x60;, &#x60;POST /v1/ads/targeting/reach-estimate&#x60;, and &#x60;saved_targeting&#x60; audiences. The &#x60;dimension&#x60; param selects what is searched: - &#x60;geo&#x60;: locations, further scoped by &#x60;geoType&#x60; - &#x60;interest&#x60; - &#x60;behavior&#x60; - &#x60;income&#x60; - &#x60;language&#x60;: Google-only - &#x60;workPosition&#x60;, &#x60;workEmployer&#x60;, &#x60;workIndustry&#x60;: the Meta-only work demographics, whose ids feed &#x60;TargetingSpec.workPositions&#x60;/&#x60;workEmployers&#x60;/&#x60;workIndustries&#x60; - &#x60;industry&#x60;, &#x60;jobFunction&#x60;, &#x60;seniority&#x60;, &#x60;companySize&#x60;: the LinkedIn-only B2B facets, whose URNs feed &#x60;TargetingSpec.industries&#x60;/&#x60;jobFunctions&#x60;/&#x60;seniorities&#x60;/&#x60;companySizes&#x60; Availability of each dimension varies by platform (e.g. behaviours are Meta/TikTok only). Work industries are a fixed ~30-entry Meta catalog with no server-side query, so &#x60;workIndustry&#x60; matching, ranking and &#x60;limit&#x60; happen in Zernio. &#x60;language&#x60; is likewise a fixed, checked-in table of Google&#39;s targetable &#x60;language_constant&#x60; rows (id, ISO code, name) matched by name or code, capped at 20, with no network call; its ids feed &#x60;TargetingSpec.languages&#x60;. Results are normalized across platforms into a single shape, so the same client code consumes Meta, TikTok, LinkedIn, X, Pinterest, and Google results. TikTok geo searches return every matching level in one list (&#x60;type&#x60; is &#x60;country&#x60;, &#x60;region&#x60;, &#x60;city&#x60;, &#x60;district&#x60;, or &#x60;metro&#x60; for DMA areas), and &#x60;geoType&#x60; is not applied. Results are scoped to the advertiser&#39;s targetable markets, and every id is usable in &#x60;regions&#x60;/&#x60;cities&#x60;/&#x60;metros&#x60; keys on &#x60;POST /v1/ads/create&#x60;. LinkedIn geo searches also return every matching level in one list, and neither &#x60;geoType&#x60; nor &#x60;countryCode&#x60; is applied: LinkedIn&#39;s typeahead only returns a name and a URN per result, with no level or country field to filter on. Every result has &#x60;type&#x60; set to &#x60;location&#x60;, and its id is a &#x60;urn:li:geo:*&#x60; URN usable as a &#x60;regions[].key&#x60; on &#x60;POST /v1/ads/create&#x60;, &#x60;POST /v1/ads/boost&#x60; and &#x60;POST /v1/ads/targeting/reach-estimate&#x60;. LinkedIn B2B searches (&#x60;industry&#x60;, &#x60;jobFunction&#x60;, &#x60;seniority&#x60;, &#x60;companySize&#x60;) return the full URN to pass straight back, so no URN id fragment has to be assembled by hand: &#x60;urn:li:industry:4&#x60;, &#x60;urn:li:function:8&#x60;, &#x60;urn:li:seniority:6&#x60;, &#x60;urn:li:staffCountRange:(51,200)&#x60;. Only &#x60;industry&#x60; is a server-side name search (LinkedIn&#39;s typeahead finder). LinkedIn exposes no typeahead for job functions, seniorities and company sizes, so Zernio fetches each whole table (26, 10 and 9 entries), caches it, and does the matching, ranking and &#x60;limit&#x60; cutoff itself. Those three never carry &#x60;audienceSize&#x60;, and &#x60;countryCode&#x60; and &#x60;geoType&#x60; are not applied to any of the four. Google geo searches resolve against Google&#39;s geoTargetConstants and return every matching level in one list; &#x60;geoType&#x60; is not applied (Google&#39;s &#x60;target_type&#x60; is an open taxonomy that does not map one-to-one onto the &#x60;geoType&#x60; enum), so filter client-side on the returned &#x60;type&#x60; (&#x60;country&#x60;, &#x60;region&#x60;, &#x60;city&#x60;, &#x60;zip&#x60;, &#x60;metro&#x60;, or the lowercased Google target type for rarer levels). &#x60;countryCode&#x60; scopes the search to one country. Each id is Google&#39;s numeric criterion id, usable as a &#x60;regions&#x60;/&#x60;cities&#x60;/&#x60;zips&#x60;/&#x60;metros&#x60; &#x60;key&#x60; on &#x60;POST /v1/ads/create&#x60;. Google city radius is not supported (pass a &#x60;customLocations&#x60; lat/lng pin for a radius); country targeting also accepts plain ISO codes via &#x60;countries&#x60; with no search call. Pinterest resolves against three whole-catalog endpoints (interests, locations, regions) with no server-side query or pagination, so matching, ranking and the &#x60;limit&#x60; cutoff all happen in Zernio; the catalog is independent of any ad account and results never carry &#x60;audienceSize&#x60;. Names come back localized to the connected Pinterest account&#39;s language (there is no way to force a locale), so match against whatever language that account returns. &#x60;geoType&#x60; routes to a different Pinterest catalog: - &#x60;country&#x60; and &#x60;metro_area&#x60; read the locations catalog (&#x60;type&#x60; is &#x60;country&#x60; or &#x60;metro&#x60;) - &#x60;region&#x60; reads the regions catalog (&#x60;type&#x60; is &#x60;region&#x60;, its id a &#x60;regions[].key&#x60; on &#x60;POST /v1/ads/create&#x60;) - &#x60;all&#x60; and the default &#x60;city&#x60; merge both catalogs with honest per-entry &#x60;type&#x60;s, since Pinterest has no city-level catalog and &#x60;city&#x60; is an alias for &#x60;all&#x60;, not a literal city search - &#x60;zip&#x60;, &#x60;subcity&#x60;, &#x60;neighborhood&#x60;, &#x60;place&#x60; and &#x60;geo_market&#x60; return a 400: Pinterest exposes no postal-code catalog, pass postal codes directly as &#x60;targeting.zips: [{ key }]&#x60; on &#x60;POST /v1/ads/create&#x60; For geo queries, &#x60;q&#x60; should contain only the locality name (e.g. &#x60;\&quot;Amsterdam\&quot;&#x60;, not &#x60;\&quot;Amsterdam, NL\&quot;&#x60;). Use &#x60;countryCode&#x60; to disambiguate.
87
87
  # @param account_id Account ID (a connected account on the target ad platform).
88
88
  # @param q Search query. For geo, the locality name only (no region/country suffix).
89
89
  # @param [Hash] opts the optional parameters
90
- # @option opts [String] :dimension What to search. &#x60;geo&#x60; resolves locations (scope further with &#x60;geoType&#x60;), &#x60;interest&#x60;/&#x60;behavior&#x60; resolve audience entities, &#x60;income&#x60; resolves income-tier options, &#x60;language&#x60; resolves Google&#39;s targetable language_constant table (Google only), &#x60;workPosition&#x60;/&#x60;workEmployer&#x60;/&#x60;workIndustry&#x60; resolve Meta work demographics. Defaults to &#x60;interest&#x60; for backward compatibility with the deprecated /v1/ads/interests alias.
90
+ # @option opts [String] :dimension What to search. &#x60;geo&#x60; resolves locations (scope further with &#x60;geoType&#x60;), &#x60;interest&#x60;/&#x60;behavior&#x60; resolve audience entities, &#x60;income&#x60; resolves income-tier options, &#x60;language&#x60; resolves Google&#39;s targetable language_constant table (Google only), &#x60;workPosition&#x60;/&#x60;workEmployer&#x60;/&#x60;workIndustry&#x60; resolve Meta work demographics, &#x60;industry&#x60;/&#x60;jobFunction&#x60;/&#x60;seniority&#x60;/&#x60;companySize&#x60; resolve LinkedIn B2B facets (LinkedIn only). Defaults to &#x60;interest&#x60; for backward compatibility with the deprecated /v1/ads/interests alias.
91
91
  # @option opts [String] :geo_type Only used when &#x60;dimension&#x3D;geo&#x60;. The kind of location to resolve. &#x60;all&#x60; searches every type in one relevance-ranked call. Defaults to &#x60;city&#x60;.
92
92
  # @option opts [String] :country_code ISO 3166-1 alpha-2 country code (e.g. NL) to scope a geo search.
93
93
  # @option opts [Integer] :limit Maximum results to return.
@@ -0,0 +1,52 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Zernio::OnWhatsAppNumberActionRequiredRequestRequirementsInner
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Zernio::OnWhatsAppNumberActionRequiredRequestRequirementsInner do
21
+ #let(:instance) { Zernio::OnWhatsAppNumberActionRequiredRequestRequirementsInner.new }
22
+
23
+ describe 'test an instance of OnWhatsAppNumberActionRequiredRequestRequirementsInner' do
24
+ it 'should create an instance of OnWhatsAppNumberActionRequiredRequestRequirementsInner' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Zernio::OnWhatsAppNumberActionRequiredRequestRequirementsInner)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "requirement_id"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "label"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "status"' do
43
+ it 'should work' do
44
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
45
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["approved", "pending", "declined"])
46
+ # validator.allowable_values.each do |value|
47
+ # expect { instance.status = value }.not_to raise_error
48
+ # end
49
+ end
50
+ end
51
+
52
+ end
@@ -55,6 +55,18 @@ describe Zernio::OnWhatsAppNumberActionRequiredRequest do
55
55
  end
56
56
  end
57
57
 
58
+ describe 'test attribute "requirements"' do
59
+ it 'should work' do
60
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
61
+ end
62
+ end
63
+
64
+ describe 'test attribute "reviewed_at"' do
65
+ it 'should work' do
66
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
67
+ end
68
+ end
69
+
58
70
  describe 'test attribute "number"' do
59
71
  it 'should work' do
60
72
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: late-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.924
4
+ version: 0.0.926
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenAPI-Generator
@@ -1361,6 +1361,7 @@ files:
1361
1361
  - docs/OnWhatsAppAutomaticEventRequest.md
1362
1362
  - docs/OnWhatsAppAutomaticEventRequestCustomData.md
1363
1363
  - docs/OnWhatsAppNumberActionRequiredRequest.md
1364
+ - docs/OnWhatsAppNumberActionRequiredRequestRequirementsInner.md
1364
1365
  - docs/OnWhatsAppNumberActivatedRequest.md
1365
1366
  - docs/OnWhatsAppNumberActivatedRequestNumber.md
1366
1367
  - docs/OnWhatsAppNumberDeclinedRequest.md
@@ -3488,6 +3489,7 @@ files:
3488
3489
  - lib/zernio-sdk/models/on_whats_app_automatic_event_request.rb
3489
3490
  - lib/zernio-sdk/models/on_whats_app_automatic_event_request_custom_data.rb
3490
3491
  - lib/zernio-sdk/models/on_whats_app_number_action_required_request.rb
3492
+ - lib/zernio-sdk/models/on_whats_app_number_action_required_request_requirements_inner.rb
3491
3493
  - lib/zernio-sdk/models/on_whats_app_number_activated_request.rb
3492
3494
  - lib/zernio-sdk/models/on_whats_app_number_activated_request_number.rb
3493
3495
  - lib/zernio-sdk/models/on_whats_app_number_declined_request.rb
@@ -5581,6 +5583,7 @@ files:
5581
5583
  - spec/models/on_verification_failed_request_verification_spec.rb
5582
5584
  - spec/models/on_whats_app_automatic_event_request_custom_data_spec.rb
5583
5585
  - spec/models/on_whats_app_automatic_event_request_spec.rb
5586
+ - spec/models/on_whats_app_number_action_required_request_requirements_inner_spec.rb
5584
5587
  - spec/models/on_whats_app_number_action_required_request_spec.rb
5585
5588
  - spec/models/on_whats_app_number_activated_request_number_spec.rb
5586
5589
  - spec/models/on_whats_app_number_activated_request_spec.rb
@@ -6355,7 +6358,7 @@ files:
6355
6358
  - spec/models/you_tube_video_retention_response_retention_curve_inner_spec.rb
6356
6359
  - spec/models/you_tube_video_retention_response_spec.rb
6357
6360
  - spec/spec_helper.rb
6358
- - zernio-sdk-0.0.924.gem
6361
+ - zernio-sdk-0.0.926.gem
6359
6362
  - zernio-sdk.gemspec
6360
6363
  homepage: https://openapi-generator.tech
6361
6364
  licenses:
@@ -8409,6 +8412,7 @@ test_files:
8409
8412
  - spec/models/get_google_business_reviews200_response_spec.rb
8410
8413
  - spec/models/list_whats_app_flow_versions200_response_spec.rb
8411
8414
  - spec/models/create_inbox_conversation_request_template_button_params_inner_spec.rb
8415
+ - spec/models/on_whats_app_number_action_required_request_requirements_inner_spec.rb
8412
8416
  - spec/models/create_google_business_media_request_spec.rb
8413
8417
  - spec/models/validate_phone_number_kyc_address400_response_details_spec.rb
8414
8418
  - spec/models/replace_ad_audience_companies_request_companies_inner_spec.rb
Binary file