onesignal 5.16.0 → 5.18.0

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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/Gemfile.lock +3 -3
  4. data/README.md +3 -3
  5. data/docs/DefaultApi.md +281 -26
  6. data/docs/DuplicateJourneyOverrides.md +30 -0
  7. data/docs/DuplicateJourneyRequest.md +18 -0
  8. data/docs/EmailMetrics.md +34 -0
  9. data/docs/EmailProviderMetrics.md +20 -0
  10. data/docs/EmailProviderMetricsEvent.md +20 -0
  11. data/docs/EmailProviderMetricsResponse.md +18 -0
  12. data/docs/EmailProviderMetricsTimeseriesResponse.md +18 -0
  13. data/docs/JourneyNode.md +2 -2
  14. data/docs/UpdateJourneyNodeRequest.md +2 -2
  15. data/lib/onesignal/api/default_api.rb +265 -6
  16. data/lib/onesignal/api_client.rb +24 -1
  17. data/lib/onesignal/configuration.rb +4 -2
  18. data/lib/onesignal/models/duplicate_journey_overrides.rb +282 -0
  19. data/lib/onesignal/models/duplicate_journey_request.rb +219 -0
  20. data/lib/onesignal/models/email_metrics.rb +300 -0
  21. data/lib/onesignal/models/email_provider_metrics.rb +229 -0
  22. data/lib/onesignal/models/email_provider_metrics_event.rb +229 -0
  23. data/lib/onesignal/models/email_provider_metrics_response.rb +222 -0
  24. data/lib/onesignal/models/email_provider_metrics_timeseries_response.rb +222 -0
  25. data/lib/onesignal/models/journey.rb +1 -1
  26. data/lib/onesignal/models/journey_node.rb +2 -2
  27. data/lib/onesignal/models/update_journey_node_request.rb +2 -2
  28. data/lib/onesignal/version.rb +1 -1
  29. data/lib/onesignal.rb +7 -0
  30. data/spec/api/default_api_spec.rb +49 -3
  31. data/spec/api_client_spec.rb +6 -6
  32. data/spec/models/duplicate_journey_overrides_spec.rb +69 -0
  33. data/spec/models/duplicate_journey_request_spec.rb +33 -0
  34. data/spec/models/email_metrics_spec.rb +81 -0
  35. data/spec/models/email_provider_metrics_event_spec.rb +39 -0
  36. data/spec/models/email_provider_metrics_response_spec.rb +33 -0
  37. data/spec/models/email_provider_metrics_spec.rb +39 -0
  38. data/spec/models/email_provider_metrics_timeseries_response_spec.rb +33 -0
  39. data/vendor/bundle/ruby/3.2.0/cache/date-3.6.0.gem +0 -0
  40. data/vendor/bundle/ruby/3.2.0/cache/io-console-0.9.4.gem +0 -0
  41. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/byebug-13.0.0/gem_make.out +5 -5
  42. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/date-3.6.0/date_core.so +0 -0
  43. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/date-3.6.0/gem_make.out +26 -0
  44. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/{date-3.5.1 → date-3.6.0}/mkmf.log +55 -2
  45. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/{io-console-0.9.2 → io-console-0.9.4}/gem_make.out +12 -10
  46. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/io-console-0.9.4/io/console.so +0 -0
  47. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/{io-console-0.9.2 → io-console-0.9.4}/mkmf.log +33 -6
  48. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/jaro_winkler-1.5.6/gem_make.out +5 -5
  49. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/psych-5.5.0/gem_make.out +5 -5
  50. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.8.1/gem_make.out +5 -5
  51. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/stringio-3.2.0/gem_make.out +5 -5
  52. data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/ext/date/Makefile +1 -1
  53. data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/ext/date/date_core.c +293 -77
  54. data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/ext/date/date_parse.c +14 -4
  55. data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/ext/date/date_strptime.c +13 -13
  56. data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/ext/date/extconf.rb +6 -0
  57. data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/lib/date.rb +1 -1
  58. data/vendor/bundle/ruby/3.2.0/gems/date-3.6.0/lib/date_core.so +0 -0
  59. data/vendor/bundle/ruby/3.2.0/gems/{io-console-0.9.2 → io-console-0.9.4}/ext/io/console/Makefile +3 -3
  60. data/vendor/bundle/ruby/3.2.0/gems/{io-console-0.9.2 → io-console-0.9.4}/ext/io/console/console.c +101 -13
  61. data/vendor/bundle/ruby/3.2.0/gems/{io-console-0.9.2 → io-console-0.9.4}/ext/io/console/extconf.rb +27 -2
  62. data/vendor/bundle/ruby/3.2.0/gems/{io-console-0.9.2 → io-console-0.9.4}/lib/io/console/size.rb +4 -2
  63. data/vendor/bundle/ruby/3.2.0/gems/io-console-0.9.4/lib/io/console.so +0 -0
  64. data/vendor/bundle/ruby/3.2.0/specifications/{date-3.5.1.gemspec → date-3.6.0.gemspec} +3 -3
  65. data/vendor/bundle/ruby/3.2.0/specifications/{io-console-0.9.2.gemspec → io-console-0.9.4.gemspec} +3 -3
  66. metadata +158 -130
  67. data/vendor/bundle/ruby/3.2.0/cache/date-3.5.1.gem +0 -0
  68. data/vendor/bundle/ruby/3.2.0/cache/io-console-0.9.2.gem +0 -0
  69. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/date-3.5.1/date_core.so +0 -0
  70. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/date-3.5.1/gem_make.out +0 -24
  71. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/io-console-0.9.2/io/console.so +0 -0
  72. data/vendor/bundle/ruby/3.2.0/gems/date-3.5.1/lib/date_core.so +0 -0
  73. data/vendor/bundle/ruby/3.2.0/gems/io-console-0.9.2/lib/io/console.so +0 -0
  74. /data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/{date-3.5.1 → date-3.6.0}/gem.build_complete +0 -0
  75. /data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/{io-console-0.9.2 → io-console-0.9.4}/gem.build_complete +0 -0
  76. /data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/BSDL +0 -0
  77. /data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/COPYING +0 -0
  78. /data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/README.md +0 -0
  79. /data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/ext/date/date_strftime.c +0 -0
  80. /data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/ext/date/date_tmx.h +0 -0
  81. /data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/ext/date/prereq.mk +0 -0
  82. /data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/ext/date/zonetab.h +0 -0
  83. /data/vendor/bundle/ruby/3.2.0/gems/{date-3.5.1 → date-3.6.0}/ext/date/zonetab.list +0 -0
  84. /data/vendor/bundle/ruby/3.2.0/gems/{io-console-0.9.2 → io-console-0.9.4}/.document +0 -0
  85. /data/vendor/bundle/ruby/3.2.0/gems/{io-console-0.9.2 → io-console-0.9.4}/BSDL +0 -0
  86. /data/vendor/bundle/ruby/3.2.0/gems/{io-console-0.9.2 → io-console-0.9.4}/COPYING +0 -0
  87. /data/vendor/bundle/ruby/3.2.0/gems/{io-console-0.9.2 → io-console-0.9.4}/README.md +0 -0
  88. /data/vendor/bundle/ruby/3.2.0/gems/{io-console-0.9.2 → io-console-0.9.4}/ext/io/console/win32_vk.inc +0 -0
@@ -0,0 +1,18 @@
1
+ # OneSignal::EmailProviderMetricsResponse
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **providers** | [**Array<EmailProviderMetrics>**](EmailProviderMetrics.md) | One entry per inbox provider that received email from the domain during the reporting window. Empty when the domain is not found for the app or is not currently active for sending. | [optional] |
8
+
9
+ ## Example
10
+
11
+ ```ruby
12
+ require 'onesignal'
13
+
14
+ instance = OneSignal::EmailProviderMetricsResponse.new(
15
+ providers: nil
16
+ )
17
+ ```
18
+
@@ -0,0 +1,18 @@
1
+ # OneSignal::EmailProviderMetricsTimeseriesResponse
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **events** | [**Array<EmailProviderMetricsEvent>**](EmailProviderMetricsEvent.md) | One entry for every time bucket in the reporting window, oldest first. Buckets with no email activity are included with all metrics set to `0`. Empty when the domain is not found for the app or is not currently active for sending. | [optional] |
8
+
9
+ ## Example
10
+
11
+ ```ruby
12
+ require 'onesignal'
13
+
14
+ instance = OneSignal::EmailProviderMetricsTimeseriesResponse.new(
15
+ events: nil
16
+ )
17
+ ```
18
+
data/docs/JourneyNode.md CHANGED
@@ -7,7 +7,7 @@
7
7
  | **id** | **String** | Server-assigned node UUID. Returned on reads. Required on update to keep an existing node. Rejected on create with a 400 validation error. | [optional] |
8
8
  | **kind** | **String** | Node kind. Selects which other fields apply. | |
9
9
  | **client_node_id** | **String** | Optional client-assigned identifier, unique within the journey. Use it to reference this node from elsewhere in the same request. Persisted and returned on reads. | [optional] |
10
- | **annotation** | **String** | Optional free-text label, up to 255 characters. Stored and returned as-is with no effect on journey behavior. | [optional] |
10
+ | **annotation** | **String** | Optional free-text label, up to 1024 characters. Stored and returned as-is with no effect on journey behavior. | [optional] |
11
11
  | **duration_seconds** | **Integer** | wait nodes: seconds to hold the user. Minimum 60, maximum 31556952 (1 year). | [optional] |
12
12
  | **relative_to** | **String** | time_window nodes: schedule_in_timezone uses the configured windows; last_active_time holds relative to the user's last active time. | [optional] |
13
13
  | **windows** | [**Array<JourneyTimeWindow>**](JourneyTimeWindow.md) | time_window nodes: one or more time windows. A window with no day_of_week applies to every day. Required when relative_to is schedule_in_timezone; omit when it is last_active_time. | [optional] |
@@ -19,7 +19,7 @@
19
19
  | **webhook_id** | **String** | send_webhook nodes: UUID of the webhook to send. | [optional] |
20
20
  | **assignments** | **Hash<String, String>** | tag nodes: tag key-value pairs to assign. An empty string value removes the tag. Keys are limited to 255 characters and values to 1024. | [optional] |
21
21
  | **randomize_on_entry** | **Boolean** | split_range nodes: when true, assigns each user to a branch at random on entry. Defaults to false. | [optional] |
22
- | **branches** | [**Array<JourneyBranch>**](JourneyBranch.md) | Branching nodes: nested branches. split_range requires 2-20 weighted branches that sum to 100. yes_no requires exactly 2 branches. wait_until requires 1-10 condition branches. | [optional] |
22
+ | **branches** | [**Array<JourneyBranch>**](JourneyBranch.md) | Branching nodes: nested branches. split_range requires 2-25 weighted branches that sum to 100. yes_no requires exactly 2 branches. wait_until requires 1-25 condition branches. | [optional] |
23
23
  | **expiration** | [**JourneyWaitUntilExpiration**](JourneyWaitUntilExpiration.md) | | [optional] |
24
24
 
25
25
  ## Example
@@ -5,7 +5,7 @@
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **client_node_id** | **String** | Optional client-assigned identifier, unique within the journey. Use it to reference this node from elsewhere in the same request. Persisted and returned on reads. | [optional] |
8
- | **annotation** | **String** | Optional free-text label, up to 255 characters. Stored and returned as-is with no effect on journey behavior. | [optional] |
8
+ | **annotation** | **String** | Optional free-text label, up to 1024 characters. Stored and returned as-is with no effect on journey behavior. | [optional] |
9
9
  | **duration_seconds** | **Integer** | wait nodes: seconds to hold the user. Minimum 60, maximum 31556952 (1 year). | [optional] |
10
10
  | **relative_to** | **String** | time_window nodes: schedule_in_timezone uses the configured windows; last_active_time holds relative to the user's last active time. | [optional] |
11
11
  | **windows** | [**Array<JourneyTimeWindow>**](JourneyTimeWindow.md) | time_window nodes: one or more time windows. A window with no day_of_week applies to every day. Required when relative_to is schedule_in_timezone; omit when it is last_active_time. | [optional] |
@@ -17,7 +17,7 @@
17
17
  | **webhook_id** | **String** | send_webhook nodes: UUID of the webhook to send. | [optional] |
18
18
  | **assignments** | **Hash<String, String>** | tag nodes: tag key-value pairs to assign. An empty string value removes the tag. Keys are limited to 255 characters and values to 1024. | [optional] |
19
19
  | **randomize_on_entry** | **Boolean** | split_range nodes: when true, assigns each user to a branch at random on entry. Defaults to false. | [optional] |
20
- | **branches** | [**Array<JourneyBranch>**](JourneyBranch.md) | Branching nodes: nested branches. split_range requires 2-20 weighted branches that sum to 100. yes_no requires exactly 2 branches. wait_until requires 1-10 condition branches. | [optional] |
20
+ | **branches** | [**Array<JourneyBranch>**](JourneyBranch.md) | Branching nodes: nested branches. split_range requires 2-25 weighted branches that sum to 100. yes_no requires exactly 2 branches. wait_until requires 1-25 condition branches. | [optional] |
21
21
  | **expiration** | [**JourneyWaitUntilExpiration**](JourneyWaitUntilExpiration.md) | | [optional] |
22
22
  | **concurrency_key** | **String** | Optional optimistic-concurrency token. Pass the concurrency_key from a prior fetch to reject the update with 409 if the journey changed. Omit to skip the check. It is not merged onto the node. | [optional] |
23
23
 
@@ -1203,7 +1203,7 @@ module OneSignal
1203
1203
  # Delete Segment
1204
1204
  # Delete a segment (not user devices) - Required: OneSignal Paid Plan You can delete a segment under your app by calling this API. You must provide an API key in the Authorization header that has admin access on the app. The segment_id can be found in the URL of the segment when viewing it in the dashboard.
1205
1205
  # @param app_id [String] The OneSignal App ID for your app. Available in Keys & IDs.
1206
- # @param segment_id [String] The segment_id can be found in the URL of the segment when viewing it in the dashboard.
1206
+ # @param segment_id [String] The segment's unique identifier. In the dashboard, go to Audience > Segments, open the segment's options menu, and select Copy segment ID. You can also get it from the View Segments API or the segment's URL in the dashboard.
1207
1207
  # @param [Hash] opts the optional parameters
1208
1208
  # @return [GenericSuccessBoolResponse]
1209
1209
  def delete_segment(app_id, segment_id, opts = {})
@@ -1214,7 +1214,7 @@ module OneSignal
1214
1214
  # Delete Segment
1215
1215
  # Delete a segment (not user devices) - Required: OneSignal Paid Plan You can delete a segment under your app by calling this API. You must provide an API key in the Authorization header that has admin access on the app. The segment_id can be found in the URL of the segment when viewing it in the dashboard.
1216
1216
  # @param app_id [String] The OneSignal App ID for your app. Available in Keys & IDs.
1217
- # @param segment_id [String] The segment_id can be found in the URL of the segment when viewing it in the dashboard.
1217
+ # @param segment_id [String] The segment's unique identifier. In the dashboard, go to Audience > Segments, open the segment's options menu, and select Copy segment ID. You can also get it from the View Segments API or the segment's URL in the dashboard.
1218
1218
  # @param [Hash] opts the optional parameters
1219
1219
  # @return [Array<(GenericSuccessBoolResponse, Integer, Hash)>] GenericSuccessBoolResponse data, response status code and response headers
1220
1220
  def delete_segment_with_http_info(app_id, segment_id, opts = {})
@@ -1479,6 +1479,82 @@ module OneSignal
1479
1479
  return data, status_code, headers
1480
1480
  end
1481
1481
 
1482
+ # Duplicate journey
1483
+ # The Journeys API is in beta. Endpoints and response fields can still change. Copy an existing journey into a new draft. The source does not change. The copy is always a draft, and started_at and archived_at are null. If you omit the body, or omit overrides, the copy keeps the source description, audience, nodes, early_exit, and reentry_rules. The copy takes the source name plus \" (Copy)\". The copy does not keep schedule. Send schedule under overrides to set it. Server-controlled fields are rejected with 400. The authenticated App API key must have permission to create journeys.
1484
+ # @param app_id [String] Your OneSignal App ID in UUID v4 format.
1485
+ # @param journey_id [String] UUID of the journey to copy.
1486
+ # @param [Hash] opts the optional parameters
1487
+ # @option opts [DuplicateJourneyRequest] :duplicate_journey_request
1488
+ # @return [Journey]
1489
+ def duplicate_journey(app_id, journey_id, opts = {})
1490
+ data, _status_code, _headers = duplicate_journey_with_http_info(app_id, journey_id, opts)
1491
+ data
1492
+ end
1493
+
1494
+ # Duplicate journey
1495
+ # The Journeys API is in beta. Endpoints and response fields can still change. Copy an existing journey into a new draft. The source does not change. The copy is always a draft, and started_at and archived_at are null. If you omit the body, or omit overrides, the copy keeps the source description, audience, nodes, early_exit, and reentry_rules. The copy takes the source name plus \&quot; (Copy)\&quot;. The copy does not keep schedule. Send schedule under overrides to set it. Server-controlled fields are rejected with 400. The authenticated App API key must have permission to create journeys.
1496
+ # @param app_id [String] Your OneSignal App ID in UUID v4 format.
1497
+ # @param journey_id [String] UUID of the journey to copy.
1498
+ # @param [Hash] opts the optional parameters
1499
+ # @option opts [DuplicateJourneyRequest] :duplicate_journey_request
1500
+ # @return [Array<(Journey, Integer, Hash)>] Journey data, response status code and response headers
1501
+ def duplicate_journey_with_http_info(app_id, journey_id, opts = {})
1502
+ if @api_client.config.debugging
1503
+ @api_client.config.logger.debug 'Calling API: DefaultApi.duplicate_journey ...'
1504
+ end
1505
+ # verify the required parameter 'app_id' is set
1506
+ if @api_client.config.client_side_validation && app_id.nil?
1507
+ fail ArgumentError, "Missing the required parameter 'app_id' when calling DefaultApi.duplicate_journey"
1508
+ end
1509
+ # verify the required parameter 'journey_id' is set
1510
+ if @api_client.config.client_side_validation && journey_id.nil?
1511
+ fail ArgumentError, "Missing the required parameter 'journey_id' when calling DefaultApi.duplicate_journey"
1512
+ end
1513
+ # resource path
1514
+ local_var_path = '/apps/{app_id}/journeys/{journey_id}/duplicate'.sub('{' + 'app_id' + '}', CGI.escape(app_id.to_s)).sub('{' + 'journey_id' + '}', CGI.escape(journey_id.to_s))
1515
+
1516
+ # query parameters
1517
+ query_params = opts[:query_params] || {}
1518
+
1519
+ # header parameters
1520
+ header_params = opts[:header_params] || {}
1521
+ # HTTP header 'Accept' (if needed)
1522
+ header_params['Accept'] = @api_client.select_header_accept(['application/json'])
1523
+ # HTTP header 'Content-Type'
1524
+ content_type = @api_client.select_header_content_type(['application/json'])
1525
+ if !content_type.nil?
1526
+ header_params['Content-Type'] = content_type
1527
+ end
1528
+
1529
+ # form parameters
1530
+ form_params = opts[:form_params] || {}
1531
+
1532
+ # http body (model)
1533
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(opts[:'duplicate_journey_request'])
1534
+
1535
+ # return_type
1536
+ return_type = opts[:debug_return_type] || 'Journey'
1537
+
1538
+ # auth_names
1539
+ auth_names = opts[:debug_auth_names] || ['rest_api_key']
1540
+
1541
+ new_options = opts.merge(
1542
+ :operation => :"DefaultApi.duplicate_journey",
1543
+ :header_params => header_params,
1544
+ :query_params => query_params,
1545
+ :form_params => form_params,
1546
+ :body => post_body,
1547
+ :auth_names => auth_names,
1548
+ :return_type => return_type
1549
+ )
1550
+
1551
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
1552
+ if @api_client.config.debugging
1553
+ @api_client.config.logger.debug "API called: DefaultApi#duplicate_journey\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1554
+ end
1555
+ return data, status_code, headers
1556
+ end
1557
+
1482
1558
  # Estimate notification recipients
1483
1559
  # Returns the estimated number of recipients for a notification's targeting, without creating or sending anything. The returned `count` reflects the same audience-size estimate you would see under \"Choose your target audience\" when composing a message. It is based on the user targeting method you've set and the specific platforms the message is targeted to send to. This endpoint only supports a subset of targeting parameters: `included_segments` is required (its `\"All\"` shorthand targets every subscriber), and `excluded_segments`, `filters`, `include_aliases`, and `target_channel` narrow that audience further. Use `target_channel` to select platforms. `include_subscription_ids` and the other raw subscription id/token fields, and the individual `isIos` / `isAndroid` / etc. platform flags, are not supported. All other notification fields (content, delivery options, and so on) are accepted, but ignored.
1484
1560
  # @param estimate_notification_recipients_request [EstimateNotificationRecipientsRequest]
@@ -1947,6 +2023,189 @@ module OneSignal
1947
2023
  return data, status_code, headers
1948
2024
  end
1949
2025
 
2026
+ # Get email inbox provider metrics
2027
+ # Email delivery, opens, clicks, bounces, failures, and spam complaints broken down by inbox provider (Gmail, Outlook, Yahoo, Apple, and more) to pinpoint where deliverability problems are coming from. Metrics are reported for a single sending domain over the requested time range. `start` must be before `end` and no more than 365 days ago. `providers` is empty when the domain is not found for the app or is not currently active for sending.
2028
+ # @param app_id [String] Your OneSignal App ID in UUID v4 format.
2029
+ # @param domain [String] The sending domain to report on. Must be an email domain configured for this app.
2030
+ # @param start [Time] Start of the reporting window, as an ISO 8601 timestamp (for example, &#x60;2026-08-01T00:00:00Z&#x60;).
2031
+ # @param _end [Time] End of the reporting window, as an ISO 8601 timestamp (for example, &#x60;2026-08-08T00:00:00Z&#x60;).
2032
+ # @param [Hash] opts the optional parameters
2033
+ # @return [EmailProviderMetricsResponse]
2034
+ def get_email_provider_metrics(app_id, domain, start, _end, opts = {})
2035
+ data, _status_code, _headers = get_email_provider_metrics_with_http_info(app_id, domain, start, _end, opts)
2036
+ data
2037
+ end
2038
+
2039
+ # Get email inbox provider metrics
2040
+ # Email delivery, opens, clicks, bounces, failures, and spam complaints broken down by inbox provider (Gmail, Outlook, Yahoo, Apple, and more) to pinpoint where deliverability problems are coming from. Metrics are reported for a single sending domain over the requested time range. &#x60;start&#x60; must be before &#x60;end&#x60; and no more than 365 days ago. &#x60;providers&#x60; is empty when the domain is not found for the app or is not currently active for sending.
2041
+ # @param app_id [String] Your OneSignal App ID in UUID v4 format.
2042
+ # @param domain [String] The sending domain to report on. Must be an email domain configured for this app.
2043
+ # @param start [Time] Start of the reporting window, as an ISO 8601 timestamp (for example, &#x60;2026-08-01T00:00:00Z&#x60;).
2044
+ # @param _end [Time] End of the reporting window, as an ISO 8601 timestamp (for example, &#x60;2026-08-08T00:00:00Z&#x60;).
2045
+ # @param [Hash] opts the optional parameters
2046
+ # @return [Array<(EmailProviderMetricsResponse, Integer, Hash)>] EmailProviderMetricsResponse data, response status code and response headers
2047
+ def get_email_provider_metrics_with_http_info(app_id, domain, start, _end, opts = {})
2048
+ if @api_client.config.debugging
2049
+ @api_client.config.logger.debug 'Calling API: DefaultApi.get_email_provider_metrics ...'
2050
+ end
2051
+ # verify the required parameter 'app_id' is set
2052
+ if @api_client.config.client_side_validation && app_id.nil?
2053
+ fail ArgumentError, "Missing the required parameter 'app_id' when calling DefaultApi.get_email_provider_metrics"
2054
+ end
2055
+ # verify the required parameter 'domain' is set
2056
+ if @api_client.config.client_side_validation && domain.nil?
2057
+ fail ArgumentError, "Missing the required parameter 'domain' when calling DefaultApi.get_email_provider_metrics"
2058
+ end
2059
+ # verify the required parameter 'start' is set
2060
+ if @api_client.config.client_side_validation && start.nil?
2061
+ fail ArgumentError, "Missing the required parameter 'start' when calling DefaultApi.get_email_provider_metrics"
2062
+ end
2063
+ # verify the required parameter '_end' is set
2064
+ if @api_client.config.client_side_validation && _end.nil?
2065
+ fail ArgumentError, "Missing the required parameter '_end' when calling DefaultApi.get_email_provider_metrics"
2066
+ end
2067
+ # resource path
2068
+ local_var_path = '/apps/{app_id}/email_analytics/provider_metrics'.sub('{' + 'app_id' + '}', CGI.escape(app_id.to_s))
2069
+
2070
+ # query parameters
2071
+ query_params = opts[:query_params] || {}
2072
+ query_params[:'domain'] = domain
2073
+ query_params[:'start'] = start
2074
+ query_params[:'end'] = _end
2075
+
2076
+ # header parameters
2077
+ header_params = opts[:header_params] || {}
2078
+ # HTTP header 'Accept' (if needed)
2079
+ header_params['Accept'] = @api_client.select_header_accept(['application/json'])
2080
+
2081
+ # form parameters
2082
+ form_params = opts[:form_params] || {}
2083
+
2084
+ # http body (model)
2085
+ post_body = opts[:debug_body]
2086
+
2087
+ # return_type
2088
+ return_type = opts[:debug_return_type] || 'EmailProviderMetricsResponse'
2089
+
2090
+ # auth_names
2091
+ auth_names = opts[:debug_auth_names] || ['rest_api_key']
2092
+
2093
+ new_options = opts.merge(
2094
+ :operation => :"DefaultApi.get_email_provider_metrics",
2095
+ :header_params => header_params,
2096
+ :query_params => query_params,
2097
+ :form_params => form_params,
2098
+ :body => post_body,
2099
+ :auth_names => auth_names,
2100
+ :return_type => return_type
2101
+ )
2102
+
2103
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
2104
+ if @api_client.config.debugging
2105
+ @api_client.config.logger.debug "API called: DefaultApi#get_email_provider_metrics\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
2106
+ end
2107
+ return data, status_code, headers
2108
+ end
2109
+
2110
+ # Get email inbox provider metrics over time
2111
+ # Email delivery, opens, clicks, bounces, failures, and spam complaints for a sending domain over time, bucketed by hour, day, or month. Use `providers[]` to narrow the totals to specific inbox providers (Gmail, Outlook, Yahoo, Apple, and more) and track how deliverability to them changes. Each event's metrics are totaled across the requested providers, or across all providers when none are given. `start` must be before `end` and no more than 365 days ago, or 60 days ago for `hourly` granularity. `events` is empty when the domain is not found for the app or is not currently active for sending.
2112
+ # @param app_id [String] Your OneSignal App ID in UUID v4 format.
2113
+ # @param domain [String] The sending domain to report on. Must be an email domain configured for this app.
2114
+ # @param start [Time] Start of the reporting window, as an ISO 8601 timestamp (for example, &#x60;2026-08-01T00:00:00Z&#x60;).
2115
+ # @param _end [Time] End of the reporting window, as an ISO 8601 timestamp (for example, &#x60;2026-08-08T00:00:00Z&#x60;).
2116
+ # @param granularity [String] The size of each time bucket. Hourly data is only available for the last 60 days.
2117
+ # @param [Hash] opts the optional parameters
2118
+ # @option opts [Array<String>] :providers Inbox providers to include in the totals. Omit to include all providers. Accepted values: &#x60;apple&#x60;, &#x60;att&#x60;, &#x60;canadian&#x60;, &#x60;chinese&#x60;, &#x60;comcast&#x60;, &#x60;free_fr&#x60;, &#x60;french&#x60;, &#x60;german&#x60;, &#x60;gmail&#x60;, &#x60;google_workspace&#x60;, &#x60;googlers&#x60;, &#x60;inbox_lv&#x60;, &#x60;italian&#x60;, &#x60;japanese&#x60;, &#x60;outlook_365&#x60;, &#x60;outlook_eu&#x60;, &#x60;outlook_us&#x60;, &#x60;proton&#x60;, &#x60;rackspace&#x60;, &#x60;russian&#x60;, &#x60;uk&#x60;, &#x60;united_online&#x60;, &#x60;yahoo_eu&#x60;, &#x60;yahoo_us&#x60;, &#x60;other_eu&#x60;, &#x60;other_us&#x60;, and &#x60;other&#x60;. Example: providers[]&#x3D;gmail&amp;providers[]&#x3D;yahoo_us
2119
+ # @return [EmailProviderMetricsTimeseriesResponse]
2120
+ def get_email_provider_metrics_timeseries(app_id, domain, start, _end, granularity, opts = {})
2121
+ data, _status_code, _headers = get_email_provider_metrics_timeseries_with_http_info(app_id, domain, start, _end, granularity, opts)
2122
+ data
2123
+ end
2124
+
2125
+ # Get email inbox provider metrics over time
2126
+ # Email delivery, opens, clicks, bounces, failures, and spam complaints for a sending domain over time, bucketed by hour, day, or month. Use &#x60;providers[]&#x60; to narrow the totals to specific inbox providers (Gmail, Outlook, Yahoo, Apple, and more) and track how deliverability to them changes. Each event&#39;s metrics are totaled across the requested providers, or across all providers when none are given. &#x60;start&#x60; must be before &#x60;end&#x60; and no more than 365 days ago, or 60 days ago for &#x60;hourly&#x60; granularity. &#x60;events&#x60; is empty when the domain is not found for the app or is not currently active for sending.
2127
+ # @param app_id [String] Your OneSignal App ID in UUID v4 format.
2128
+ # @param domain [String] The sending domain to report on. Must be an email domain configured for this app.
2129
+ # @param start [Time] Start of the reporting window, as an ISO 8601 timestamp (for example, &#x60;2026-08-01T00:00:00Z&#x60;).
2130
+ # @param _end [Time] End of the reporting window, as an ISO 8601 timestamp (for example, &#x60;2026-08-08T00:00:00Z&#x60;).
2131
+ # @param granularity [String] The size of each time bucket. Hourly data is only available for the last 60 days.
2132
+ # @param [Hash] opts the optional parameters
2133
+ # @option opts [Array<String>] :providers Inbox providers to include in the totals. Omit to include all providers. Accepted values: &#x60;apple&#x60;, &#x60;att&#x60;, &#x60;canadian&#x60;, &#x60;chinese&#x60;, &#x60;comcast&#x60;, &#x60;free_fr&#x60;, &#x60;french&#x60;, &#x60;german&#x60;, &#x60;gmail&#x60;, &#x60;google_workspace&#x60;, &#x60;googlers&#x60;, &#x60;inbox_lv&#x60;, &#x60;italian&#x60;, &#x60;japanese&#x60;, &#x60;outlook_365&#x60;, &#x60;outlook_eu&#x60;, &#x60;outlook_us&#x60;, &#x60;proton&#x60;, &#x60;rackspace&#x60;, &#x60;russian&#x60;, &#x60;uk&#x60;, &#x60;united_online&#x60;, &#x60;yahoo_eu&#x60;, &#x60;yahoo_us&#x60;, &#x60;other_eu&#x60;, &#x60;other_us&#x60;, and &#x60;other&#x60;. Example: providers[]&#x3D;gmail&amp;providers[]&#x3D;yahoo_us
2134
+ # @return [Array<(EmailProviderMetricsTimeseriesResponse, Integer, Hash)>] EmailProviderMetricsTimeseriesResponse data, response status code and response headers
2135
+ def get_email_provider_metrics_timeseries_with_http_info(app_id, domain, start, _end, granularity, opts = {})
2136
+ if @api_client.config.debugging
2137
+ @api_client.config.logger.debug 'Calling API: DefaultApi.get_email_provider_metrics_timeseries ...'
2138
+ end
2139
+ # verify the required parameter 'app_id' is set
2140
+ if @api_client.config.client_side_validation && app_id.nil?
2141
+ fail ArgumentError, "Missing the required parameter 'app_id' when calling DefaultApi.get_email_provider_metrics_timeseries"
2142
+ end
2143
+ # verify the required parameter 'domain' is set
2144
+ if @api_client.config.client_side_validation && domain.nil?
2145
+ fail ArgumentError, "Missing the required parameter 'domain' when calling DefaultApi.get_email_provider_metrics_timeseries"
2146
+ end
2147
+ # verify the required parameter 'start' is set
2148
+ if @api_client.config.client_side_validation && start.nil?
2149
+ fail ArgumentError, "Missing the required parameter 'start' when calling DefaultApi.get_email_provider_metrics_timeseries"
2150
+ end
2151
+ # verify the required parameter '_end' is set
2152
+ if @api_client.config.client_side_validation && _end.nil?
2153
+ fail ArgumentError, "Missing the required parameter '_end' when calling DefaultApi.get_email_provider_metrics_timeseries"
2154
+ end
2155
+ # verify the required parameter 'granularity' is set
2156
+ if @api_client.config.client_side_validation && granularity.nil?
2157
+ fail ArgumentError, "Missing the required parameter 'granularity' when calling DefaultApi.get_email_provider_metrics_timeseries"
2158
+ end
2159
+ # verify enum value
2160
+ allowable_values = ["hourly", "daily", "monthly"]
2161
+ if @api_client.config.client_side_validation && !allowable_values.include?(granularity)
2162
+ fail ArgumentError, "invalid value for \"granularity\", must be one of #{allowable_values}"
2163
+ end
2164
+ # resource path
2165
+ local_var_path = '/apps/{app_id}/email_analytics/provider_metrics_timeseries'.sub('{' + 'app_id' + '}', CGI.escape(app_id.to_s))
2166
+
2167
+ # query parameters
2168
+ query_params = opts[:query_params] || {}
2169
+ query_params[:'domain'] = domain
2170
+ query_params[:'start'] = start
2171
+ query_params[:'end'] = _end
2172
+ query_params[:'granularity'] = granularity
2173
+ query_params[:'providers[]'] = @api_client.build_collection_param(opts[:'providers'], :multi) if !opts[:'providers'].nil?
2174
+
2175
+ # header parameters
2176
+ header_params = opts[:header_params] || {}
2177
+ # HTTP header 'Accept' (if needed)
2178
+ header_params['Accept'] = @api_client.select_header_accept(['application/json'])
2179
+
2180
+ # form parameters
2181
+ form_params = opts[:form_params] || {}
2182
+
2183
+ # http body (model)
2184
+ post_body = opts[:debug_body]
2185
+
2186
+ # return_type
2187
+ return_type = opts[:debug_return_type] || 'EmailProviderMetricsTimeseriesResponse'
2188
+
2189
+ # auth_names
2190
+ auth_names = opts[:debug_auth_names] || ['rest_api_key']
2191
+
2192
+ new_options = opts.merge(
2193
+ :operation => :"DefaultApi.get_email_provider_metrics_timeseries",
2194
+ :header_params => header_params,
2195
+ :query_params => query_params,
2196
+ :form_params => form_params,
2197
+ :body => post_body,
2198
+ :auth_names => auth_names,
2199
+ :return_type => return_type
2200
+ )
2201
+
2202
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
2203
+ if @api_client.config.debugging
2204
+ @api_client.config.logger.debug "API called: DefaultApi#get_email_provider_metrics_timeseries\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
2205
+ end
2206
+ return data, status_code, headers
2207
+ end
2208
+
1950
2209
  # Get email reputation statistics
1951
2210
  # The email bounce and spam complaint rates received for the app over the last 24 hours, 7 days, and 30 days. Rates are expressed as fractions of successfully delivered emails (for example, `0.02` means 2%). A window reports `0` for both rates when the app has not successfully delivered any email in that period.
1952
2211
  # @param app_id [String] Your OneSignal App ID in UUID v4 format.
@@ -2319,7 +2578,7 @@ module OneSignal
2319
2578
  # View Segment
2320
2579
  # Retrieve details for a single segment by its ID, including subscriber count and optionally segment metadata and filters.
2321
2580
  # @param app_id [String] The OneSignal App ID for your app. Available in Keys &amp; IDs.
2322
- # @param segment_id [String] The segment&#39;s unique identifier. Can be found using the View Segments API or in the URL of the segment when viewing it in the dashboard.
2581
+ # @param segment_id [String] The segment&#39;s unique identifier. In the dashboard, go to Audience &gt; Segments, open the segment&#39;s options menu, and select Copy segment ID. You can also get it from the View Segments API or the segment&#39;s URL in the dashboard.
2323
2582
  # @param [Hash] opts the optional parameters
2324
2583
  # @option opts [Boolean] :include_segment_detail Set to true to include segment metadata and filters in the response.
2325
2584
  # @return [GetSegmentSuccessResponse]
@@ -2331,7 +2590,7 @@ module OneSignal
2331
2590
  # View Segment
2332
2591
  # Retrieve details for a single segment by its ID, including subscriber count and optionally segment metadata and filters.
2333
2592
  # @param app_id [String] The OneSignal App ID for your app. Available in Keys &amp; IDs.
2334
- # @param segment_id [String] The segment&#39;s unique identifier. Can be found using the View Segments API or in the URL of the segment when viewing it in the dashboard.
2593
+ # @param segment_id [String] The segment&#39;s unique identifier. In the dashboard, go to Audience &gt; Segments, open the segment&#39;s options menu, and select Copy segment ID. You can also get it from the View Segments API or the segment&#39;s URL in the dashboard.
2335
2594
  # @param [Hash] opts the optional parameters
2336
2595
  # @option opts [Boolean] :include_segment_detail Set to true to include segment metadata and filters in the response.
2337
2596
  # @return [Array<(GetSegmentSuccessResponse, Integer, Hash)>] GetSegmentSuccessResponse data, response status code and response headers
@@ -3360,7 +3619,7 @@ module OneSignal
3360
3619
  # Update Segment
3361
3620
  # Update an existing segment's name and/or filters. The name parameter is always required. When filters are provided, all existing filters are replaced with the new ones.
3362
3621
  # @param app_id [String] The OneSignal App ID for your app. Available in Keys &amp; IDs.
3363
- # @param segment_id [String] The segment&#39;s unique identifier. Can be found using the View Segments API or in the URL of the segment when viewing it in the dashboard.
3622
+ # @param segment_id [String] The segment&#39;s unique identifier. In the dashboard, go to Audience &gt; Segments, open the segment&#39;s options menu, and select Copy segment ID. You can also get it from the View Segments API or the segment&#39;s URL in the dashboard.
3364
3623
  # @param [Hash] opts the optional parameters
3365
3624
  # @option opts [UpdateSegmentRequest] :update_segment_request
3366
3625
  # @return [UpdateSegmentSuccessResponse]
@@ -3372,7 +3631,7 @@ module OneSignal
3372
3631
  # Update Segment
3373
3632
  # Update an existing segment&#39;s name and/or filters. The name parameter is always required. When filters are provided, all existing filters are replaced with the new ones.
3374
3633
  # @param app_id [String] The OneSignal App ID for your app. Available in Keys &amp; IDs.
3375
- # @param segment_id [String] The segment&#39;s unique identifier. Can be found using the View Segments API or in the URL of the segment when viewing it in the dashboard.
3634
+ # @param segment_id [String] The segment&#39;s unique identifier. In the dashboard, go to Audience &gt; Segments, open the segment&#39;s options menu, and select Copy segment ID. You can also get it from the View Segments API or the segment&#39;s URL in the dashboard.
3376
3635
  # @param [Hash] opts the optional parameters
3377
3636
  # @option opts [UpdateSegmentRequest] :update_segment_request
3378
3637
  # @return [Array<(UpdateSegmentSuccessResponse, Integer, Hash)>] UpdateSegmentSuccessResponse data, response status code and response headers
@@ -89,13 +89,14 @@ module OneSignal
89
89
  url = build_request_url(path, opts)
90
90
  http_method = http_method.to_sym.downcase
91
91
 
92
- opts[:header_params]['OS-Usage-Data'] = 'kind=sdk, sdk-name=onesignal-ruby, version=5.16.0'
92
+ opts[:header_params]['OS-Usage-Data'] = 'kind=sdk, sdk-name=onesignal-ruby, version=5.18.0'
93
93
  header_params = @default_headers.merge(opts[:header_params] || {})
94
94
  query_params = opts[:query_params] || {}
95
95
  form_params = opts[:form_params] || {}
96
96
  follow_location = opts[:follow_location] || true
97
97
 
98
98
  update_params_for_auth! header_params, query_params, opts[:auth_names]
99
+ query_params = serialize_query_params(query_params)
99
100
 
100
101
  # set ssl_verifyhosts option based on @config.verify_ssl_host (true/false)
101
102
  _verify_ssl_host = @config.verify_ssl_host ? 2 : 0
@@ -388,5 +389,27 @@ module OneSignal
388
389
  fail "unknown collection format: #{collection_format.inspect}"
389
390
  end
390
391
  end
392
+
393
+ # Serialize query parameter values for the wire.
394
+ # Time, DateTime and Date values are sent as ISO 8601 (Time#to_s is not),
395
+ # including inside arrays; other values are passed through unchanged.
396
+ # @param [Hash] query_params Query parameters
397
+ # @return [Hash] Query parameters with serialized values
398
+ def serialize_query_params(query_params)
399
+ query_params.transform_values { |value| serialize_query_value(value) }
400
+ end
401
+
402
+ # @param [Object] value Query parameter value
403
+ # @return [Object] ISO 8601 string for Time/Date values, the value otherwise
404
+ def serialize_query_value(value)
405
+ case value
406
+ when Array
407
+ value.map { |item| serialize_query_value(item) }
408
+ when Time, Date
409
+ value.iso8601
410
+ else
411
+ value
412
+ end
413
+ end
391
414
  end
392
415
  end
@@ -102,7 +102,9 @@ module OneSignal
102
102
  attr_accessor :key_file
103
103
 
104
104
  # Set this to customize parameters encoding of array parameter with multi collectionFormat.
105
- # Default to nil.
105
+ # Defaults to :multi, which sends arrays as repeated keys (ids=a&ids=b), matching
106
+ # OpenAPI `style: form, explode: true`. nil falls back to Ethon's default
107
+ # (ids[0]=a&ids[1]=b).
106
108
  #
107
109
  # @see The params_encoding option of Ethon. Related source code:
108
110
  # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96
@@ -128,7 +130,7 @@ module OneSignal
128
130
  @cert_file = nil
129
131
  @key_file = nil
130
132
  @timeout = 0
131
- @params_encoding = nil
133
+ @params_encoding = :multi
132
134
  @debugging = false
133
135
  @inject_format = false
134
136
  @force_ending_format = false