late-sdk 0.0.638 → 0.0.640

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: 7b716df70c2087a2f56a23b1a70d0903359f06ec0c38f3b1e9a289ddd5824d65
4
- data.tar.gz: d1be1b101ea8b606a6c7fd206d2f37b17df995a1a5733c2c425cd7046ef36485
3
+ metadata.gz: 32bb14aec05997cfeca00157d2d0ea0cadcf0d08248172c1f278e8527aeb42c3
4
+ data.tar.gz: 16ea777414e16dad693c883626bc8ca18f5fef73da8acde9826689c8ba5ddffa
5
5
  SHA512:
6
- metadata.gz: e44281be73d3f6aa4a1507bedfde2ae9111320b1fe7af0440ed4d81190551393421bc3e604d232285f7916970797075dcc5c4428ad556486b04358406087e0e7
7
- data.tar.gz: 3d0dba3b2f96b6655bb545b530b5d0ca5d9e4febced3a18bd8c376dff22d92675fb5fb2469686e6337b7dadcc33f810d628bc23753ad605804912d452130f282
6
+ metadata.gz: 1fa12aa135577a9f00d36492136b22239c01379c3862ad8d891f5004404b9c1e3cd5d991bb26b58b7535d70c32f5ef80e79edf4b7ea73558a2dd8eb3e5052bdc
7
+ data.tar.gz: ca5c2452f4220ce8c067de3cf4da992931a51256a45e4fabe83237fb73d4499a090d201495c784de1b521c1d41c9f49e5c865ea292c60b5804000c5b9bc69c81
@@ -261,7 +261,7 @@ end
261
261
  api_instance = Zernio::AdCampaignsApi.new
262
262
  create_standalone_ad_request = Zernio::CreateStandaloneAdRequest.new({account_id: 'account_id_example', ad_account_id: 'ad_account_id_example', name: 'name_example'}) # CreateStandaloneAdRequest |
263
263
  opts = {
264
- idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes create retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
264
+ idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
265
265
  }
266
266
 
267
267
  begin
@@ -296,7 +296,7 @@ end
296
296
  | Name | Type | Description | Notes |
297
297
  | ---- | ---- | ----------- | ----- |
298
298
  | **create_standalone_ad_request** | [**CreateStandaloneAdRequest**](CreateStandaloneAdRequest.md) | | |
299
- | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes create retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
299
+ | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
300
300
 
301
301
  ### Return type
302
302
 
data/docs/MessagesApi.md CHANGED
@@ -770,11 +770,11 @@ end
770
770
 
771
771
  ## send_inbox_message
772
772
 
773
- > <SendInboxMessage200Response> send_inbox_message(conversation_id, send_inbox_message_request)
773
+ > <SendInboxMessage200Response> send_inbox_message(conversation_id, send_inbox_message_request, opts)
774
774
 
775
775
  Send message
776
776
 
777
- Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`).
777
+ Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`). **Idempotency:** send an `Idempotency-Key` header to make retries safe (e.g. after a client-side timeout where delivery is unknown): same key + same body replays the original response (with `Idempotent-Replayed: true`) instead of sending the message a second time; same key + different body returns 422; a key still in flight returns 409. Works for JSON and multipart (file upload) requests alike. Keys are retained for 24 hours.
778
778
 
779
779
  ### Examples
780
780
 
@@ -790,10 +790,13 @@ end
790
790
  api_instance = Zernio::MessagesApi.new
791
791
  conversation_id = 'conversation_id_example' # String | The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
792
792
  send_inbox_message_request = Zernio::SendInboxMessageRequest.new({account_id: 'account_id_example'}) # SendInboxMessageRequest |
793
+ opts = {
794
+ idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
795
+ }
793
796
 
794
797
  begin
795
798
  # Send message
796
- result = api_instance.send_inbox_message(conversation_id, send_inbox_message_request)
799
+ result = api_instance.send_inbox_message(conversation_id, send_inbox_message_request, opts)
797
800
  p result
798
801
  rescue Zernio::ApiError => e
799
802
  puts "Error when calling MessagesApi->send_inbox_message: #{e}"
@@ -804,12 +807,12 @@ end
804
807
 
805
808
  This returns an Array which contains the response data, status code and headers.
806
809
 
807
- > <Array(<SendInboxMessage200Response>, Integer, Hash)> send_inbox_message_with_http_info(conversation_id, send_inbox_message_request)
810
+ > <Array(<SendInboxMessage200Response>, Integer, Hash)> send_inbox_message_with_http_info(conversation_id, send_inbox_message_request, opts)
808
811
 
809
812
  ```ruby
810
813
  begin
811
814
  # Send message
812
- data, status_code, headers = api_instance.send_inbox_message_with_http_info(conversation_id, send_inbox_message_request)
815
+ data, status_code, headers = api_instance.send_inbox_message_with_http_info(conversation_id, send_inbox_message_request, opts)
813
816
  p status_code # => 2xx
814
817
  p headers # => { ... }
815
818
  p data # => <SendInboxMessage200Response>
@@ -824,6 +827,7 @@ end
824
827
  | ---- | ---- | ----------- | ----- |
825
828
  | **conversation_id** | **String** | The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID. | |
826
829
  | **send_inbox_message_request** | [**SendInboxMessageRequest**](SendInboxMessageRequest.md) | | |
830
+ | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
827
831
 
828
832
  ### Return type
829
833
 
@@ -15,6 +15,7 @@
15
15
  | **follows** | **Integer** | Instagram feed posts and stories only: organic accounts that started following from this post. 0 for reels and other platforms. | [optional] |
16
16
  | **ig_reels_avg_watch_time** | **Integer** | Instagram Reels only: average watch time per play, in milliseconds. 0 for non-Reels media and other platforms. | [optional] |
17
17
  | **ig_reels_video_view_total_time** | **Integer** | Instagram Reels only: total watch time including replays, in milliseconds. 0 for non-Reels media and other platforms. | [optional] |
18
+ | **video_duration_seconds** | **Integer** | Video length in seconds. Currently Instagram Reels only; combine with igReelsAvgWatchTime (ms) to estimate retention. Null when unknown (other platforms, non-video media, or when Instagram does not expose the media URL, e.g. reels with copyrighted audio). | [optional] |
18
19
  | **engagement_rate** | **Float** | | [optional] |
19
20
  | **last_updated** | **Time** | | [optional] |
20
21
 
@@ -35,6 +36,7 @@ instance = Zernio::PostAnalytics.new(
35
36
  follows: 0,
36
37
  ig_reels_avg_watch_time: 0,
37
38
  ig_reels_video_view_total_time: 0,
39
+ video_duration_seconds: 30,
38
40
  engagement_rate: 0,
39
41
  last_updated: null
40
42
  )
data/docs/ProfilesApi.md CHANGED
@@ -33,7 +33,7 @@ end
33
33
  api_instance = Zernio::ProfilesApi.new
34
34
  create_profile_request = Zernio::CreateProfileRequest.new({name: 'name_example'}) # CreateProfileRequest |
35
35
  opts = {
36
- idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes create retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
36
+ idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
37
37
  }
38
38
 
39
39
  begin
@@ -68,7 +68,7 @@ end
68
68
  | Name | Type | Description | Notes |
69
69
  | ---- | ---- | ----------- | ----- |
70
70
  | **create_profile_request** | [**CreateProfileRequest**](CreateProfileRequest.md) | | |
71
- | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes create retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
71
+ | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
72
72
 
73
73
  ### Return type
74
74
 
data/docs/SMSApi.md CHANGED
@@ -1157,7 +1157,7 @@ end
1157
1157
  api_instance = Zernio::SMSApi.new
1158
1158
  send_sms_request = Zernio::SendSmsRequest.new({from: 'from_example', to: 'to_example'}) # SendSmsRequest |
1159
1159
  opts = {
1160
- idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes send retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
1160
+ idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
1161
1161
  }
1162
1162
 
1163
1163
  begin
@@ -1192,7 +1192,7 @@ end
1192
1192
  | Name | Type | Description | Notes |
1193
1193
  | ---- | ---- | ----------- | ----- |
1194
1194
  | **send_sms_request** | [**SendSmsRequest**](SendSmsRequest.md) | | |
1195
- | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes send retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
1195
+ | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
1196
1196
 
1197
1197
  ### Return type
1198
1198
 
data/docs/VoiceApi.md CHANGED
@@ -39,7 +39,7 @@ end
39
39
  api_instance = Zernio::VoiceApi.new
40
40
  create_voice_call_request = Zernio::CreateVoiceCallRequest.new({to: 'to_example'}) # CreateVoiceCallRequest |
41
41
  opts = {
42
- idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes dial retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
42
+ idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
43
43
  }
44
44
 
45
45
  begin
@@ -74,7 +74,7 @@ end
74
74
  | Name | Type | Description | Notes |
75
75
  | ---- | ---- | ----------- | ----- |
76
76
  | **create_voice_call_request** | [**CreateVoiceCallRequest**](CreateVoiceCallRequest.md) | | |
77
- | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes dial retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
77
+ | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
78
78
 
79
79
  ### Return type
80
80
 
@@ -756,7 +756,7 @@ end
756
756
  api_instance = Zernio::WhatsAppCallingApi.new
757
757
  initiate_whats_app_call_request = Zernio::InitiateWhatsAppCallRequest.new({account_id: 'account_id_example', to: 'to_example'}) # InitiateWhatsAppCallRequest |
758
758
  opts = {
759
- idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes dial retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
759
+ idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
760
760
  }
761
761
 
762
762
  begin
@@ -791,7 +791,7 @@ end
791
791
  | Name | Type | Description | Notes |
792
792
  | ---- | ---- | ----------- | ----- |
793
793
  | **initiate_whats_app_call_request** | [**InitiateWhatsAppCallRequest**](InitiateWhatsAppCallRequest.md) | | |
794
- | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes dial retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
794
+ | **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
795
795
 
796
796
  ### Return type
797
797
 
@@ -234,7 +234,7 @@ module Zernio
234
234
  # Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, LinkedIn, and OpenAI Ads (ChatGPT Ads). Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and an attach shape via adSetId that adds one new ad to an existing ad set, inheriting its budget, targeting, and schedule (Meta, TikTok, and LinkedIn; on LinkedIn adSetId is the existing Campaign id, and the budget, schedule, targeting and bidding fields must be omitted). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \"dark post\" authored by a Company Page (see `organizationId`); supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an `Idempotency-Key` header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with `Idempotent-Replayed: true`) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
235
235
  # @param create_standalone_ad_request [CreateStandaloneAdRequest]
236
236
  # @param [Hash] opts the optional parameters
237
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes create retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
237
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
238
238
  # @return [CreateStandaloneAd200Response]
239
239
  def create_standalone_ad(create_standalone_ad_request, opts = {})
240
240
  data, _status_code, _headers = create_standalone_ad_with_http_info(create_standalone_ad_request, opts)
@@ -245,7 +245,7 @@ module Zernio
245
245
  # Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, LinkedIn, and OpenAI Ads (ChatGPT Ads). Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and an attach shape via adSetId that adds one new ad to an existing ad set, inheriting its budget, targeting, and schedule (Meta, TikTok, and LinkedIn; on LinkedIn adSetId is the existing Campaign id, and the budget, schedule, targeting and bidding fields must be omitted). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \&quot;dark post\&quot; authored by a Company Page (see &#x60;organizationId&#x60;); supported goals are engagement, traffic, awareness, and video_views (video ads use the &#x60;video&#x60; field; video_views requires a video), and traffic ads require &#x60;linkUrl&#x60;. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an &#x60;Idempotency-Key&#x60; header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with &#x60;Idempotent-Replayed: true&#x60;) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
246
246
  # @param create_standalone_ad_request [CreateStandaloneAdRequest]
247
247
  # @param [Hash] opts the optional parameters
248
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes create retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
248
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
249
249
  # @return [Array<(CreateStandaloneAd200Response, Integer, Hash)>] CreateStandaloneAd200Response data, response status code and response headers
250
250
  def create_standalone_ad_with_http_info(create_standalone_ad_request, opts = {})
251
251
  if @api_client.config.debugging
@@ -839,10 +839,11 @@ module Zernio
839
839
  end
840
840
 
841
841
  # Send message
842
- # Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`).
842
+ # Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`). **Idempotency:** send an `Idempotency-Key` header to make retries safe (e.g. after a client-side timeout where delivery is unknown): same key + same body replays the original response (with `Idempotent-Replayed: true`) instead of sending the message a second time; same key + different body returns 422; a key still in flight returns 409. Works for JSON and multipart (file upload) requests alike. Keys are retained for 24 hours.
843
843
  # @param conversation_id [String] The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
844
844
  # @param send_inbox_message_request [SendInboxMessageRequest]
845
845
  # @param [Hash] opts the optional parameters
846
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
846
847
  # @return [SendInboxMessage200Response]
847
848
  def send_inbox_message(conversation_id, send_inbox_message_request, opts = {})
848
849
  data, _status_code, _headers = send_inbox_message_with_http_info(conversation_id, send_inbox_message_request, opts)
@@ -850,10 +851,11 @@ module Zernio
850
851
  end
851
852
 
852
853
  # Send message
853
- # Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the &#x60;template&#x60; field with a single element carrying the template reference: &#x60;{ \&quot;elements\&quot;: [{ \&quot;name\&quot;: ..., \&quot;language\&quot;: ..., \&quot;components\&quot;: [...] }] }&#x60;. See the &#x60;template&#x60; field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the &#x60;interactive&#x60; field. Tap events are delivered through the &#x60;message.received&#x60; webhook with WhatsApp-specific &#x60;metadata&#x60; fields (&#x60;interactiveType&#x60;, &#x60;interactiveId&#x60;, &#x60;flowResponseJson&#x60;, &#x60;flowResponseData&#x60;).
854
+ # Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the &#x60;template&#x60; field with a single element carrying the template reference: &#x60;{ \&quot;elements\&quot;: [{ \&quot;name\&quot;: ..., \&quot;language\&quot;: ..., \&quot;components\&quot;: [...] }] }&#x60;. See the &#x60;template&#x60; field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the &#x60;interactive&#x60; field. Tap events are delivered through the &#x60;message.received&#x60; webhook with WhatsApp-specific &#x60;metadata&#x60; fields (&#x60;interactiveType&#x60;, &#x60;interactiveId&#x60;, &#x60;flowResponseJson&#x60;, &#x60;flowResponseData&#x60;). **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe (e.g. after a client-side timeout where delivery is unknown): same key + same body replays the original response (with &#x60;Idempotent-Replayed: true&#x60;) instead of sending the message a second time; same key + different body returns 422; a key still in flight returns 409. Works for JSON and multipart (file upload) requests alike. Keys are retained for 24 hours.
854
855
  # @param conversation_id [String] The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
855
856
  # @param send_inbox_message_request [SendInboxMessageRequest]
856
857
  # @param [Hash] opts the optional parameters
858
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
857
859
  # @return [Array<(SendInboxMessage200Response, Integer, Hash)>] SendInboxMessage200Response data, response status code and response headers
858
860
  def send_inbox_message_with_http_info(conversation_id, send_inbox_message_request, opts = {})
859
861
  if @api_client.config.debugging
@@ -867,6 +869,10 @@ module Zernio
867
869
  if @api_client.config.client_side_validation && send_inbox_message_request.nil?
868
870
  fail ArgumentError, "Missing the required parameter 'send_inbox_message_request' when calling MessagesApi.send_inbox_message"
869
871
  end
872
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
873
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling MessagesApi.send_inbox_message, the character length must be smaller than or equal to 255.'
874
+ end
875
+
870
876
  # resource path
871
877
  local_var_path = '/v1/inbox/conversations/{conversationId}/messages'.sub('{' + 'conversationId' + '}', CGI.escape(conversation_id.to_s))
872
878
 
@@ -882,6 +888,7 @@ module Zernio
882
888
  if !content_type.nil?
883
889
  header_params['Content-Type'] = content_type
884
890
  end
891
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
885
892
 
886
893
  # form parameters
887
894
  form_params = opts[:form_params] || {}
@@ -23,7 +23,7 @@ module Zernio
23
23
  # Creates a new profile with a name, optional description, and color. Names are unique per workspace: a duplicate returns a 409 whose details.existingProfileId carries the id of the existing profile. Send an Idempotency-Key header to make retries safe: a retried create with the same key and body replays the original 201 (same _id) instead of conflicting.
24
24
  # @param create_profile_request [CreateProfileRequest]
25
25
  # @param [Hash] opts the optional parameters
26
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes create retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
26
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
27
27
  # @return [ProfileCreateResponse]
28
28
  def create_profile(create_profile_request, opts = {})
29
29
  data, _status_code, _headers = create_profile_with_http_info(create_profile_request, opts)
@@ -34,7 +34,7 @@ module Zernio
34
34
  # Creates a new profile with a name, optional description, and color. Names are unique per workspace: a duplicate returns a 409 whose details.existingProfileId carries the id of the existing profile. Send an Idempotency-Key header to make retries safe: a retried create with the same key and body replays the original 201 (same _id) instead of conflicting.
35
35
  # @param create_profile_request [CreateProfileRequest]
36
36
  # @param [Hash] opts the optional parameters
37
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes create retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
37
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
38
38
  # @return [Array<(ProfileCreateResponse, Integer, Hash)>] ProfileCreateResponse data, response status code and response headers
39
39
  def create_profile_with_http_info(create_profile_request, opts = {})
40
40
  if @api_client.config.debugging
@@ -1072,7 +1072,7 @@ module Zernio
1072
1072
  # Sends an SMS (or MMS when `mediaUrls` is set) from one of your SMS-enabled numbers. At least one of `text` / `mediaUrls` is required. Both numbers are normalized to E.164, so `from` matches regardless of formatting and replies thread into the same inbox conversation. US numbers must have an approved carrier registration (`/v1/sms/registrations`) before messages deliver. **Idempotency:** send an `Idempotency-Key` header to make retries safe: same key + same body replays the original response instead of sending a second message; same key + different body returns 422; a key still in flight returns 409.
1073
1073
  # @param send_sms_request [SendSmsRequest]
1074
1074
  # @param [Hash] opts the optional parameters
1075
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes send retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
1075
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
1076
1076
  # @return [SendSms200Response]
1077
1077
  def send_sms(send_sms_request, opts = {})
1078
1078
  data, _status_code, _headers = send_sms_with_http_info(send_sms_request, opts)
@@ -1083,7 +1083,7 @@ module Zernio
1083
1083
  # Sends an SMS (or MMS when &#x60;mediaUrls&#x60; is set) from one of your SMS-enabled numbers. At least one of &#x60;text&#x60; / &#x60;mediaUrls&#x60; is required. Both numbers are normalized to E.164, so &#x60;from&#x60; matches regardless of formatting and replies thread into the same inbox conversation. US numbers must have an approved carrier registration (&#x60;/v1/sms/registrations&#x60;) before messages deliver. **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe: same key + same body replays the original response instead of sending a second message; same key + different body returns 422; a key still in flight returns 409.
1084
1084
  # @param send_sms_request [SendSmsRequest]
1085
1085
  # @param [Hash] opts the optional parameters
1086
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes send retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
1086
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
1087
1087
  # @return [Array<(SendSms200Response, Integer, Hash)>] SendSms200Response data, response status code and response headers
1088
1088
  def send_sms_with_http_info(send_sms_request, opts = {})
1089
1089
  if @api_client.config.debugging
@@ -23,7 +23,7 @@ module Zernio
23
23
  # Dials `to` FROM one of your voice-enabled numbers and, on answer, bridges the callee to the number's stored forward destination, or to the per-call `forwardTo` override. Destinations can be your own AI voice agent (Vapi/Retell), a phone, or a SIP endpoint. An optional `greeting` is spoken to the callee before the bridge. The 200 response means the call is dialing; the lifecycle continues asynchronously (track it via `GET /v1/voice/calls/{id}` or the `call.*` webhooks). Outbound calls are capped per rolling hour (429 when hit). **Idempotency:** send an `Idempotency-Key` header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
24
24
  # @param create_voice_call_request [CreateVoiceCallRequest]
25
25
  # @param [Hash] opts the optional parameters
26
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes dial retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
26
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
27
27
  # @return [CreateVoiceCall200Response]
28
28
  def create_voice_call(create_voice_call_request, opts = {})
29
29
  data, _status_code, _headers = create_voice_call_with_http_info(create_voice_call_request, opts)
@@ -34,7 +34,7 @@ module Zernio
34
34
  # Dials &#x60;to&#x60; FROM one of your voice-enabled numbers and, on answer, bridges the callee to the number&#39;s stored forward destination, or to the per-call &#x60;forwardTo&#x60; override. Destinations can be your own AI voice agent (Vapi/Retell), a phone, or a SIP endpoint. An optional &#x60;greeting&#x60; is spoken to the callee before the bridge. The 200 response means the call is dialing; the lifecycle continues asynchronously (track it via &#x60;GET /v1/voice/calls/{id}&#x60; or the &#x60;call.*&#x60; webhooks). Outbound calls are capped per rolling hour (429 when hit). **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
35
35
  # @param create_voice_call_request [CreateVoiceCallRequest]
36
36
  # @param [Hash] opts the optional parameters
37
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes dial retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
37
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
38
38
  # @return [Array<(CreateVoiceCall200Response, Integer, Hash)>] CreateVoiceCall200Response data, response status code and response headers
39
39
  def create_voice_call_with_http_info(create_voice_call_request, opts = {})
40
40
  if @api_client.config.debugging
@@ -739,7 +739,7 @@ module Zernio
739
739
  # Initiates an outbound Business-Initiated Call. The Telnyx-side SIP leg is originated server-side (Option B: SIP-first). Telnyx INVITEs Meta directly over TLS:5061 with the SIP digest credentials we captured at calling-enablement time). No client-side SDP is required; pass only `accountId` and `to`. To send the consumer the call-consent prompt instead of placing a call, pass `action: \"send_call_permission_request\"` (+ optional `bodyText`). The consumer must tap Allow in WhatsApp before `start_call` is permitted; Meta limits the prompt to 1 per consumer per 24h (2 per 7 days) and requires an open 24h service window. **Idempotency:** send an `Idempotency-Key` header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
740
740
  # @param initiate_whats_app_call_request [InitiateWhatsAppCallRequest]
741
741
  # @param [Hash] opts the optional parameters
742
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes dial retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
742
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
743
743
  # @return [InitiateWhatsAppCall200Response]
744
744
  def initiate_whats_app_call(initiate_whats_app_call_request, opts = {})
745
745
  data, _status_code, _headers = initiate_whats_app_call_with_http_info(initiate_whats_app_call_request, opts)
@@ -750,7 +750,7 @@ module Zernio
750
750
  # Initiates an outbound Business-Initiated Call. The Telnyx-side SIP leg is originated server-side (Option B: SIP-first). Telnyx INVITEs Meta directly over TLS:5061 with the SIP digest credentials we captured at calling-enablement time). No client-side SDP is required; pass only &#x60;accountId&#x60; and &#x60;to&#x60;. To send the consumer the call-consent prompt instead of placing a call, pass &#x60;action: \&quot;send_call_permission_request\&quot;&#x60; (+ optional &#x60;bodyText&#x60;). The consumer must tap Allow in WhatsApp before &#x60;start_call&#x60; is permitted; Meta limits the prompt to 1 per consumer per 24h (2 per 7 days) and requires an open 24h service window. **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
751
751
  # @param initiate_whats_app_call_request [InitiateWhatsAppCallRequest]
752
752
  # @param [Hash] opts the optional parameters
753
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes dial retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
753
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
754
754
  # @return [Array<(InitiateWhatsAppCall200Response, Integer, Hash)>] InitiateWhatsAppCall200Response data, response status code and response headers
755
755
  def initiate_whats_app_call_with_http_info(initiate_whats_app_call_request, opts = {})
756
756
  if @api_client.config.debugging
@@ -41,6 +41,9 @@ module Zernio
41
41
  # Instagram Reels only: total watch time including replays, in milliseconds. 0 for non-Reels media and other platforms.
42
42
  attr_accessor :ig_reels_video_view_total_time
43
43
 
44
+ # Video length in seconds. Currently Instagram Reels only; combine with igReelsAvgWatchTime (ms) to estimate retention. Null when unknown (other platforms, non-video media, or when Instagram does not expose the media URL, e.g. reels with copyrighted audio).
45
+ attr_accessor :video_duration_seconds
46
+
44
47
  attr_accessor :engagement_rate
45
48
 
46
49
  attr_accessor :last_updated
@@ -59,6 +62,7 @@ module Zernio
59
62
  :'follows' => :'follows',
60
63
  :'ig_reels_avg_watch_time' => :'igReelsAvgWatchTime',
61
64
  :'ig_reels_video_view_total_time' => :'igReelsVideoViewTotalTime',
65
+ :'video_duration_seconds' => :'videoDurationSeconds',
62
66
  :'engagement_rate' => :'engagementRate',
63
67
  :'last_updated' => :'lastUpdated'
64
68
  }
@@ -88,6 +92,7 @@ module Zernio
88
92
  :'follows' => :'Integer',
89
93
  :'ig_reels_avg_watch_time' => :'Integer',
90
94
  :'ig_reels_video_view_total_time' => :'Integer',
95
+ :'video_duration_seconds' => :'Integer',
91
96
  :'engagement_rate' => :'Float',
92
97
  :'last_updated' => :'Time'
93
98
  }
@@ -96,6 +101,7 @@ module Zernio
96
101
  # List of attributes with nullable: true
97
102
  def self.openapi_nullable
98
103
  Set.new([
104
+ :'video_duration_seconds',
99
105
  ])
100
106
  end
101
107
 
@@ -159,6 +165,10 @@ module Zernio
159
165
  self.ig_reels_video_view_total_time = attributes[:'ig_reels_video_view_total_time']
160
166
  end
161
167
 
168
+ if attributes.key?(:'video_duration_seconds')
169
+ self.video_duration_seconds = attributes[:'video_duration_seconds']
170
+ end
171
+
162
172
  if attributes.key?(:'engagement_rate')
163
173
  self.engagement_rate = attributes[:'engagement_rate']
164
174
  end
@@ -199,6 +209,7 @@ module Zernio
199
209
  follows == o.follows &&
200
210
  ig_reels_avg_watch_time == o.ig_reels_avg_watch_time &&
201
211
  ig_reels_video_view_total_time == o.ig_reels_video_view_total_time &&
212
+ video_duration_seconds == o.video_duration_seconds &&
202
213
  engagement_rate == o.engagement_rate &&
203
214
  last_updated == o.last_updated
204
215
  end
@@ -212,7 +223,7 @@ module Zernio
212
223
  # Calculates hash code according to all attributes.
213
224
  # @return [Integer] Hash code
214
225
  def hash
215
- [impressions, reach, likes, comments, shares, saves, clicks, views, follows, ig_reels_avg_watch_time, ig_reels_video_view_total_time, engagement_rate, last_updated].hash
226
+ [impressions, reach, likes, comments, shares, saves, clicks, views, follows, ig_reels_avg_watch_time, ig_reels_video_view_total_time, video_duration_seconds, engagement_rate, last_updated].hash
216
227
  end
217
228
 
218
229
  # Builds the object from hash
@@ -11,5 +11,5 @@ Generator version: 7.19.0
11
11
  =end
12
12
 
13
13
  module Zernio
14
- VERSION = '0.0.638'
14
+ VERSION = '0.0.640'
15
15
  end
data/openapi.yaml CHANGED
@@ -504,7 +504,20 @@ components:
504
504
  in: query
505
505
  description: Page number (1-based)
506
506
  schema: { type: integer, minimum: 1, default: 1 }
507
+ IdempotencyKeyHeader:
508
+ name: Idempotency-Key
509
+ in: header
510
+ required: false
511
+ schema: { type: string, maxLength: 255 }
512
+ description: >-
513
+ Optional client-generated unique key (e.g. a UUID) that makes retries
514
+ safe. Same key + same body replays the original response; same key +
515
+ different body → 422; key still processing → 409.
507
516
  responses:
517
+ IdempotencyKeyInFlight:
518
+ description: Same Idempotency-Key still processing; retry after a short backoff
519
+ IdempotencyKeyReused:
520
+ description: Idempotency-Key reused with a different body
508
521
  BadRequest:
509
522
  description: Invalid request
510
523
  content:
@@ -6093,6 +6106,7 @@ components:
6093
6106
  follows: { type: integer, example: 0, description: 'Instagram feed posts and stories only: organic accounts that started following from this post. 0 for reels and other platforms.' }
6094
6107
  igReelsAvgWatchTime: { type: integer, example: 0, description: 'Instagram Reels only: average watch time per play, in milliseconds. 0 for non-Reels media and other platforms.' }
6095
6108
  igReelsVideoViewTotalTime: { type: integer, example: 0, description: 'Instagram Reels only: total watch time including replays, in milliseconds. 0 for non-Reels media and other platforms.' }
6109
+ videoDurationSeconds: { type: [integer, "null"], example: 30, description: 'Video length in seconds. Currently Instagram Reels only; combine with igReelsAvgWatchTime (ms) to estimate retention. Null when unknown (other platforms, non-video media, or when Instagram does not expose the media URL, e.g. reels with copyrighted audio).' }
6096
6110
  engagementRate: { type: number, example: 0 }
6097
6111
  lastUpdated: { type: string, format: date-time }
6098
6112
  PlatformAnalytics:
@@ -13959,15 +13973,7 @@ paths:
13959
13973
  with the same key and body replays the original 201 (same _id)
13960
13974
  instead of conflicting.
13961
13975
  parameters:
13962
- - name: Idempotency-Key
13963
- in: header
13964
- required: false
13965
- schema: { type: string, maxLength: 255 }
13966
- description: >-
13967
- Optional client-generated unique key (e.g. a UUID) that makes
13968
- create retries safe. Same key + same body replays the original
13969
- response; same key + different body → 422; key still processing →
13970
- 409.
13976
+ - $ref: '#/components/parameters/IdempotencyKeyHeader'
13971
13977
  requestBody:
13972
13978
  required: true
13973
13979
  content:
@@ -14005,7 +14011,7 @@ paths:
14005
14011
  '402': { $ref: '#/components/responses/PaymentRequired' }
14006
14012
  '403': { description: Profile limit exceeded }
14007
14013
  '409': { description: 'A profile with this name already exists (code: profile_name_conflict); details.existingProfileId carries the id of the existing profile. Also returned while a request with the same Idempotency-Key is still processing.' }
14008
- '422': { description: Idempotency-Key reused with a different body }
14014
+ '422': { $ref: '#/components/responses/IdempotencyKeyReused' }
14009
14015
  /v1/profiles/{profileId}:
14010
14016
  get:
14011
14017
  operationId: getProfile
@@ -23262,6 +23268,13 @@ paths:
23262
23268
  are available via the `interactive` field. Tap events are delivered through
23263
23269
  the `message.received` webhook with WhatsApp-specific `metadata` fields
23264
23270
  (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`).
23271
+
23272
+ **Idempotency:** send an `Idempotency-Key` header to make retries safe
23273
+ (e.g. after a client-side timeout where delivery is unknown): same key +
23274
+ same body replays the original response (with `Idempotent-Replayed: true`)
23275
+ instead of sending the message a second time; same key + different body
23276
+ returns 422; a key still in flight returns 409. Works for JSON and
23277
+ multipart (file upload) requests alike. Keys are retained for 24 hours.
23265
23278
  tags: [Messages]
23266
23279
  security: [{ bearerAuth: [] }]
23267
23280
  parameters:
@@ -23270,6 +23283,7 @@ paths:
23270
23283
  required: true
23271
23284
  schema: { type: string }
23272
23285
  description: The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
23286
+ - $ref: '#/components/parameters/IdempotencyKeyHeader'
23273
23287
  requestBody:
23274
23288
  required: true
23275
23289
  content:
@@ -23755,6 +23769,8 @@ paths:
23755
23769
  '401': { $ref: '#/components/responses/Unauthorized' }
23756
23770
  '403':
23757
23771
  description: Inbox addon required
23772
+ '409': { $ref: '#/components/responses/IdempotencyKeyInFlight' }
23773
+ '422': { $ref: '#/components/responses/IdempotencyKeyReused' }
23758
23774
 
23759
23775
  /v1/whatsapp/media/{mediaId}:
23760
23776
  get:
@@ -26428,15 +26444,7 @@ paths:
26428
26444
  security:
26429
26445
  - bearerAuth: []
26430
26446
  parameters:
26431
- - name: Idempotency-Key
26432
- in: header
26433
- required: false
26434
- schema: { type: string, maxLength: 255 }
26435
- description: >-
26436
- Optional client-generated unique key (e.g. a UUID) that makes
26437
- dial retries safe. Same key + same body replays the original
26438
- response; same key + different body → 422; key still processing →
26439
- 409.
26447
+ - $ref: '#/components/parameters/IdempotencyKeyHeader'
26440
26448
  requestBody:
26441
26449
  required: true
26442
26450
  content:
@@ -26774,15 +26782,7 @@ paths:
26774
26782
  security:
26775
26783
  - bearerAuth: []
26776
26784
  parameters:
26777
- - name: Idempotency-Key
26778
- in: header
26779
- required: false
26780
- schema: { type: string, maxLength: 255 }
26781
- description: >-
26782
- Optional client-generated unique key (e.g. a UUID) that makes
26783
- dial retries safe. Same key + same body replays the original
26784
- response; same key + different body → 422; key still processing →
26785
- 409.
26785
+ - $ref: '#/components/parameters/IdempotencyKeyHeader'
26786
26786
  requestBody:
26787
26787
  required: true
26788
26788
  content:
@@ -27116,14 +27116,7 @@ paths:
27116
27116
  security:
27117
27117
  - bearerAuth: []
27118
27118
  parameters:
27119
- - name: Idempotency-Key
27120
- in: header
27121
- required: false
27122
- schema: { type: string, maxLength: 255 }
27123
- description: >-
27124
- Optional client-generated unique key (e.g. a UUID) that makes send
27125
- retries safe. Same key + same body replays the original response;
27126
- same key + different body → 422; key still processing → 409.
27119
+ - $ref: '#/components/parameters/IdempotencyKeyHeader'
27127
27120
  requestBody:
27128
27121
  required: true
27129
27122
  content:
@@ -27157,8 +27150,8 @@ paths:
27157
27150
  status: { type: string, enum: [sent] }
27158
27151
  '401': { $ref: '#/components/responses/Unauthorized' }
27159
27152
  '404': { description: "No SMS-enabled number matches `from`" }
27160
- '409': { description: Same Idempotency-Key still processing; retry after a short backoff }
27161
- '422': { description: Idempotency-Key reused with a different body }
27153
+ '409': { $ref: '#/components/responses/IdempotencyKeyInFlight' }
27154
+ '422': { $ref: '#/components/responses/IdempotencyKeyReused' }
27162
27155
  '502': { description: Carrier-side send failed }
27163
27156
 
27164
27157
  /v1/sms/lookup:
@@ -37799,14 +37792,7 @@ paths:
37799
37792
  security:
37800
37793
  - bearerAuth: []
37801
37794
  parameters:
37802
- - name: Idempotency-Key
37803
- in: header
37804
- required: false
37805
- schema: { type: string, maxLength: 255 }
37806
- description: >-
37807
- Optional client-generated unique key (e.g. a UUID) that makes create
37808
- retries safe. Same key + same body replays the original response;
37809
- same key + different body → 422; key still processing → 409.
37795
+ - $ref: '#/components/parameters/IdempotencyKeyHeader'
37810
37796
  requestBody:
37811
37797
  required: true
37812
37798
  content:
@@ -74,7 +74,7 @@ describe 'AdCampaignsApi' do
74
74
  # Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, LinkedIn, and OpenAI Ads (ChatGPT Ads). Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and an attach shape via adSetId that adds one new ad to an existing ad set, inheriting its budget, targeting, and schedule (Meta, TikTok, and LinkedIn; on LinkedIn adSetId is the existing Campaign id, and the budget, schedule, targeting and bidding fields must be omitted). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \&quot;dark post\&quot; authored by a Company Page (see &#x60;organizationId&#x60;); supported goals are engagement, traffic, awareness, and video_views (video ads use the &#x60;video&#x60; field; video_views requires a video), and traffic ads require &#x60;linkUrl&#x60;. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an &#x60;Idempotency-Key&#x60; header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with &#x60;Idempotent-Replayed: true&#x60;) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
75
75
  # @param create_standalone_ad_request
76
76
  # @param [Hash] opts the optional parameters
77
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes create retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
77
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
78
78
  # @return [CreateStandaloneAd200Response]
79
79
  describe 'create_standalone_ad test' do
80
80
  it 'should work' do
@@ -180,10 +180,11 @@ describe 'MessagesApi' do
180
180
 
181
181
  # unit tests for send_inbox_message
182
182
  # Send message
183
- # Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the &#x60;template&#x60; field with a single element carrying the template reference: &#x60;{ \&quot;elements\&quot;: [{ \&quot;name\&quot;: ..., \&quot;language\&quot;: ..., \&quot;components\&quot;: [...] }] }&#x60;. See the &#x60;template&#x60; field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the &#x60;interactive&#x60; field. Tap events are delivered through the &#x60;message.received&#x60; webhook with WhatsApp-specific &#x60;metadata&#x60; fields (&#x60;interactiveType&#x60;, &#x60;interactiveId&#x60;, &#x60;flowResponseJson&#x60;, &#x60;flowResponseData&#x60;).
183
+ # Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the &#x60;template&#x60; field with a single element carrying the template reference: &#x60;{ \&quot;elements\&quot;: [{ \&quot;name\&quot;: ..., \&quot;language\&quot;: ..., \&quot;components\&quot;: [...] }] }&#x60;. See the &#x60;template&#x60; field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the &#x60;interactive&#x60; field. Tap events are delivered through the &#x60;message.received&#x60; webhook with WhatsApp-specific &#x60;metadata&#x60; fields (&#x60;interactiveType&#x60;, &#x60;interactiveId&#x60;, &#x60;flowResponseJson&#x60;, &#x60;flowResponseData&#x60;). **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe (e.g. after a client-side timeout where delivery is unknown): same key + same body replays the original response (with &#x60;Idempotent-Replayed: true&#x60;) instead of sending the message a second time; same key + different body returns 422; a key still in flight returns 409. Works for JSON and multipart (file upload) requests alike. Keys are retained for 24 hours.
184
184
  # @param conversation_id The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
185
185
  # @param send_inbox_message_request
186
186
  # @param [Hash] opts the optional parameters
187
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
187
188
  # @return [SendInboxMessage200Response]
188
189
  describe 'send_inbox_message test' do
189
190
  it 'should work' do
@@ -37,7 +37,7 @@ describe 'ProfilesApi' do
37
37
  # Creates a new profile with a name, optional description, and color. Names are unique per workspace: a duplicate returns a 409 whose details.existingProfileId carries the id of the existing profile. Send an Idempotency-Key header to make retries safe: a retried create with the same key and body replays the original 201 (same _id) instead of conflicting.
38
38
  # @param create_profile_request
39
39
  # @param [Hash] opts the optional parameters
40
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes create retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
40
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
41
41
  # @return [ProfileCreateResponse]
42
42
  describe 'create_profile test' do
43
43
  it 'should work' do
@@ -229,7 +229,7 @@ describe 'SMSApi' do
229
229
  # Sends an SMS (or MMS when &#x60;mediaUrls&#x60; is set) from one of your SMS-enabled numbers. At least one of &#x60;text&#x60; / &#x60;mediaUrls&#x60; is required. Both numbers are normalized to E.164, so &#x60;from&#x60; matches regardless of formatting and replies thread into the same inbox conversation. US numbers must have an approved carrier registration (&#x60;/v1/sms/registrations&#x60;) before messages deliver. **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe: same key + same body replays the original response instead of sending a second message; same key + different body returns 422; a key still in flight returns 409.
230
230
  # @param send_sms_request
231
231
  # @param [Hash] opts the optional parameters
232
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes send retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
232
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
233
233
  # @return [SendSms200Response]
234
234
  describe 'send_sms test' do
235
235
  it 'should work' do
@@ -37,7 +37,7 @@ describe 'VoiceApi' do
37
37
  # Dials &#x60;to&#x60; FROM one of your voice-enabled numbers and, on answer, bridges the callee to the number&#39;s stored forward destination, or to the per-call &#x60;forwardTo&#x60; override. Destinations can be your own AI voice agent (Vapi/Retell), a phone, or a SIP endpoint. An optional &#x60;greeting&#x60; is spoken to the callee before the bridge. The 200 response means the call is dialing; the lifecycle continues asynchronously (track it via &#x60;GET /v1/voice/calls/{id}&#x60; or the &#x60;call.*&#x60; webhooks). Outbound calls are capped per rolling hour (429 when hit). **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
38
38
  # @param create_voice_call_request
39
39
  # @param [Hash] opts the optional parameters
40
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes dial retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
40
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
41
41
  # @return [CreateVoiceCall200Response]
42
42
  describe 'create_voice_call test' do
43
43
  it 'should work' do
@@ -167,7 +167,7 @@ describe 'WhatsAppCallingApi' do
167
167
  # Initiates an outbound Business-Initiated Call. The Telnyx-side SIP leg is originated server-side (Option B: SIP-first). Telnyx INVITEs Meta directly over TLS:5061 with the SIP digest credentials we captured at calling-enablement time). No client-side SDP is required; pass only &#x60;accountId&#x60; and &#x60;to&#x60;. To send the consumer the call-consent prompt instead of placing a call, pass &#x60;action: \&quot;send_call_permission_request\&quot;&#x60; (+ optional &#x60;bodyText&#x60;). The consumer must tap Allow in WhatsApp before &#x60;start_call&#x60; is permitted; Meta limits the prompt to 1 per consumer per 24h (2 per 7 days) and requires an open 24h service window. **Idempotency:** send an &#x60;Idempotency-Key&#x60; header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
168
168
  # @param initiate_whats_app_call_request
169
169
  # @param [Hash] opts the optional parameters
170
- # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes dial retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
170
+ # @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
171
171
  # @return [InitiateWhatsAppCall200Response]
172
172
  describe 'initiate_whats_app_call test' do
173
173
  it 'should work' do
@@ -93,6 +93,12 @@ describe Zernio::PostAnalytics do
93
93
  end
94
94
  end
95
95
 
96
+ describe 'test attribute "video_duration_seconds"' do
97
+ it 'should work' do
98
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
99
+ end
100
+ end
101
+
96
102
  describe 'test attribute "engagement_rate"' do
97
103
  it 'should work' do
98
104
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: late-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.638
4
+ version: 0.0.640
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenAPI-Generator
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-08-01 00:00:00.000000000 Z
11
+ date: 2026-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
@@ -4919,7 +4919,7 @@ files:
4919
4919
  - spec/models/you_tube_video_retention_response_retention_curve_inner_spec.rb
4920
4920
  - spec/models/you_tube_video_retention_response_spec.rb
4921
4921
  - spec/spec_helper.rb
4922
- - zernio-sdk-0.0.638.gem
4922
+ - zernio-sdk-0.0.640.gem
4923
4923
  - zernio-sdk.gemspec
4924
4924
  homepage: https://openapi-generator.tech
4925
4925
  licenses:
Binary file