sendx-ruby-sdk 1.1.0 → 2.0.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 (160) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +220 -81
  3. data/lib/sendx-ruby-sdk/api/campaign_api.rb +95 -143
  4. data/lib/sendx-ruby-sdk/api/contact_api.rb +129 -96
  5. data/lib/sendx-ruby-sdk/api/custom_field_api.rb +391 -0
  6. data/lib/sendx-ruby-sdk/api/email_sending_api.rb +158 -0
  7. data/lib/sendx-ruby-sdk/api/event_api.rb +91 -57
  8. data/lib/sendx-ruby-sdk/api/events_api.rb +158 -0
  9. data/lib/sendx-ruby-sdk/api/getting_started_api.rb +2 -2
  10. data/lib/sendx-ruby-sdk/api/list_api.rb +126 -91
  11. data/lib/sendx-ruby-sdk/api/post_api.rb +380 -0
  12. data/lib/sendx-ruby-sdk/api/post_category_api.rb +362 -0
  13. data/lib/sendx-ruby-sdk/api/post_tag_api.rb +362 -0
  14. data/lib/sendx-ruby-sdk/api/report_api.rb +90 -0
  15. data/lib/sendx-ruby-sdk/api/reports_api.rb +4 -4
  16. data/lib/sendx-ruby-sdk/api/sender_api.rb +28 -37
  17. data/lib/sendx-ruby-sdk/api/tag_api.rb +380 -0
  18. data/lib/sendx-ruby-sdk/api/tags_api.rb +8 -8
  19. data/lib/sendx-ruby-sdk/api/team_member_api.rb +147 -0
  20. data/lib/sendx-ruby-sdk/api/template_api.rb +391 -0
  21. data/lib/sendx-ruby-sdk/api/tracking_api.rb +158 -0
  22. data/lib/sendx-ruby-sdk/api/webhook_api.rb +362 -0
  23. data/lib/sendx-ruby-sdk/api_client.rb +10 -11
  24. data/lib/sendx-ruby-sdk/api_error.rb +3 -3
  25. data/lib/sendx-ruby-sdk/configuration.rb +6 -10
  26. data/lib/sendx-ruby-sdk/models/campaign.rb +23 -7
  27. data/lib/sendx-ruby-sdk/models/campaign_dashboard_data.rb +11 -5
  28. data/lib/sendx-ruby-sdk/models/campaign_request.rb +13 -41
  29. data/lib/sendx-ruby-sdk/models/contact.rb +11 -5
  30. data/lib/sendx-ruby-sdk/models/contact_request.rb +11 -5
  31. data/lib/sendx-ruby-sdk/models/create_response.rb +11 -5
  32. data/lib/sendx-ruby-sdk/models/custom_event_request.rb +37 -42
  33. data/lib/sendx-ruby-sdk/models/custom_field.rb +285 -0
  34. data/lib/sendx-ruby-sdk/models/customfield_customfield_id_delete200_response.rb +220 -0
  35. data/lib/sendx-ruby-sdk/models/dashboard_stats.rb +11 -5
  36. data/lib/sendx-ruby-sdk/models/delete_campaign200_response.rb +11 -5
  37. data/lib/sendx-ruby-sdk/models/delete_request.rb +11 -5
  38. data/lib/sendx-ruby-sdk/models/delete_response.rb +77 -13
  39. data/lib/sendx-ruby-sdk/models/e_custom_field.rb +295 -0
  40. data/lib/sendx-ruby-sdk/models/error_response.rb +288 -0
  41. data/lib/sendx-ruby-sdk/models/event_response.rb +13 -19
  42. data/lib/sendx-ruby-sdk/models/events_revenue_postback_get200_response.rb +229 -0
  43. data/lib/sendx-ruby-sdk/models/events_revenue_postback_get400_response.rb +220 -0
  44. data/lib/sendx-ruby-sdk/models/events_revenue_postback_get500_response.rb +220 -0
  45. data/lib/sendx-ruby-sdk/models/identify_error_response.rb +220 -0
  46. data/lib/sendx-ruby-sdk/models/identify_request.rb +52 -40
  47. data/lib/sendx-ruby-sdk/models/identify_response.rb +16 -19
  48. data/lib/sendx-ruby-sdk/models/last_sent_campaign_stat.rb +11 -5
  49. data/lib/sendx-ruby-sdk/models/link_stat.rb +232 -0
  50. data/lib/sendx-ruby-sdk/models/list_model.rb +11 -6
  51. data/lib/sendx-ruby-sdk/models/list_request.rb +11 -5
  52. data/lib/sendx-ruby-sdk/models/message_response.rb +229 -0
  53. data/lib/sendx-ruby-sdk/models/operation_response.rb +241 -0
  54. data/lib/sendx-ruby-sdk/models/postback_response.rb +229 -0
  55. data/lib/sendx-ruby-sdk/models/report_data.rb +11 -5
  56. data/lib/sendx-ruby-sdk/models/response.rb +11 -5
  57. data/lib/sendx-ruby-sdk/models/rest_e_campaign.rb +539 -0
  58. data/lib/sendx-ruby-sdk/models/rest_e_contact.rb +380 -0
  59. data/lib/sendx-ruby-sdk/models/rest_e_custom_field.rb +299 -0
  60. data/lib/sendx-ruby-sdk/models/rest_e_list.rb +238 -0
  61. data/lib/sendx-ruby-sdk/models/rest_e_post.rb +443 -0
  62. data/lib/sendx-ruby-sdk/models/rest_e_post_category.rb +238 -0
  63. data/lib/sendx-ruby-sdk/models/rest_e_post_tag.rb +238 -0
  64. data/lib/sendx-ruby-sdk/models/rest_e_sender.rb +265 -0
  65. data/lib/sendx-ruby-sdk/models/rest_e_tag.rb +238 -0
  66. data/lib/sendx-ruby-sdk/models/rest_e_template.rb +307 -0
  67. data/lib/sendx-ruby-sdk/models/rest_e_webhook.rb +349 -0
  68. data/lib/sendx-ruby-sdk/models/rest_r_campaign.rb +580 -0
  69. data/lib/sendx-ruby-sdk/models/rest_r_contact.rb +438 -0
  70. data/lib/sendx-ruby-sdk/models/rest_r_custom_field.rb +306 -0
  71. data/lib/sendx-ruby-sdk/models/rest_r_list.rb +291 -0
  72. data/lib/sendx-ruby-sdk/models/rest_r_member.rb +274 -0
  73. data/lib/sendx-ruby-sdk/models/rest_r_post.rb +384 -0
  74. data/lib/sendx-ruby-sdk/models/rest_r_post_category.rb +251 -0
  75. data/lib/sendx-ruby-sdk/models/rest_r_post_tag.rb +250 -0
  76. data/lib/sendx-ruby-sdk/models/rest_r_sender.rb +272 -0
  77. data/lib/sendx-ruby-sdk/models/rest_r_tag.rb +272 -0
  78. data/lib/sendx-ruby-sdk/models/rest_r_template.rb +366 -0
  79. data/lib/sendx-ruby-sdk/models/rest_r_webhook.rb +326 -0
  80. data/lib/sendx-ruby-sdk/models/rest_report_data.rb +312 -0
  81. data/lib/sendx-ruby-sdk/models/revenue_event_request.rb +37 -42
  82. data/lib/sendx-ruby-sdk/models/sender.rb +41 -5
  83. data/lib/sendx-ruby-sdk/models/sender_request.rb +31 -5
  84. data/lib/sendx-ruby-sdk/models/sender_response.rb +51 -5
  85. data/lib/sendx-ruby-sdk/models/tag.rb +11 -5
  86. data/lib/sendx-ruby-sdk/models/tag_request.rb +11 -5
  87. data/lib/sendx-ruby-sdk/models/template_email_message.rb +337 -0
  88. data/lib/sendx-ruby-sdk/models/track_request.rb +28 -20
  89. data/lib/sendx-ruby-sdk/models/track_response.rb +12 -6
  90. data/lib/sendx-ruby-sdk/models/webhook.rb +311 -0
  91. data/lib/sendx-ruby-sdk/models/webhook_object.rb +451 -0
  92. data/lib/sendx-ruby-sdk/models/webhook_request.rb +291 -0
  93. data/lib/sendx-ruby-sdk/models/x_attachment.rb +263 -0
  94. data/lib/sendx-ruby-sdk/models/x_email_message.rb +356 -0
  95. data/lib/sendx-ruby-sdk/models/x_email_response.rb +261 -0
  96. data/lib/sendx-ruby-sdk/models/x_from.rb +246 -0
  97. data/lib/sendx-ruby-sdk/models/x_reply_to.rb +246 -0
  98. data/lib/sendx-ruby-sdk/models/xto.rb +279 -0
  99. data/lib/sendx-ruby-sdk/version.rb +4 -4
  100. data/lib/sendx-ruby-sdk.rb +53 -25
  101. data/spec/api/custom_field_api_spec.rb +98 -0
  102. data/spec/api/email_sending_api_spec.rb +59 -0
  103. data/spec/api/events_api_spec.rb +59 -0
  104. data/spec/api/post_api_spec.rb +97 -0
  105. data/spec/api/post_category_api_spec.rb +95 -0
  106. data/spec/api/post_tag_api_spec.rb +95 -0
  107. data/spec/api/report_api_spec.rb +47 -0
  108. data/spec/api/tag_api_spec.rb +97 -0
  109. data/spec/api/team_member_api_spec.rb +58 -0
  110. data/spec/api/template_api_spec.rb +98 -0
  111. data/spec/api/tracking_api_spec.rb +59 -0
  112. data/spec/api/webhook_api_spec.rb +95 -0
  113. data/spec/models/custom_field_spec.rb +58 -0
  114. data/spec/models/customfield_customfield_id_delete200_response_spec.rb +36 -0
  115. data/spec/models/e_custom_field_spec.rb +64 -0
  116. data/spec/models/error_response_spec.rb +46 -0
  117. data/spec/models/events_revenue_postback_get200_response_spec.rb +42 -0
  118. data/spec/models/events_revenue_postback_get400_response_spec.rb +36 -0
  119. data/spec/models/events_revenue_postback_get500_response_spec.rb +36 -0
  120. data/spec/models/identify_error_response_spec.rb +36 -0
  121. data/spec/models/link_stat_spec.rb +42 -0
  122. data/spec/models/message_response_spec.rb +42 -0
  123. data/spec/models/operation_response_spec.rb +48 -0
  124. data/spec/models/postback_response_spec.rb +42 -0
  125. data/spec/models/rest_e_campaign_spec.rb +154 -0
  126. data/spec/models/rest_e_contact_spec.rb +78 -0
  127. data/spec/models/rest_e_custom_field_spec.rb +52 -0
  128. data/spec/models/rest_e_list_spec.rb +36 -0
  129. data/spec/models/rest_e_post_category_spec.rb +36 -0
  130. data/spec/models/rest_e_post_spec.rb +144 -0
  131. data/spec/models/rest_e_post_tag_spec.rb +36 -0
  132. data/spec/models/rest_e_sender_spec.rb +42 -0
  133. data/spec/models/rest_e_tag_spec.rb +36 -0
  134. data/spec/models/rest_e_template_spec.rb +66 -0
  135. data/spec/models/rest_e_webhook_spec.rb +84 -0
  136. data/spec/models/rest_r_campaign_spec.rb +178 -0
  137. data/spec/models/rest_r_contact_spec.rb +150 -0
  138. data/spec/models/rest_r_custom_field_spec.rb +58 -0
  139. data/spec/models/rest_r_list_spec.rb +64 -0
  140. data/spec/models/rest_r_member_spec.rb +72 -0
  141. data/spec/models/rest_r_post_category_spec.rb +54 -0
  142. data/spec/models/rest_r_post_spec.rb +144 -0
  143. data/spec/models/rest_r_post_tag_spec.rb +54 -0
  144. data/spec/models/rest_r_sender_spec.rb +54 -0
  145. data/spec/models/rest_r_tag_spec.rb +54 -0
  146. data/spec/models/rest_r_template_spec.rb +94 -0
  147. data/spec/models/rest_r_webhook_spec.rb +90 -0
  148. data/spec/models/rest_report_data_spec.rb +90 -0
  149. data/spec/models/template_email_message_spec.rb +72 -0
  150. data/spec/models/webhook_object_spec.rb +180 -0
  151. data/spec/models/webhook_request_spec.rb +78 -0
  152. data/spec/models/webhook_spec.rb +90 -0
  153. data/spec/models/x_attachment_spec.rb +42 -0
  154. data/spec/models/x_email_message_spec.rb +90 -0
  155. data/spec/models/x_email_response_spec.rb +60 -0
  156. data/spec/models/x_from_spec.rb +42 -0
  157. data/spec/models/x_reply_to_spec.rb +42 -0
  158. data/spec/models/xto_spec.rb +60 -0
  159. data/spec/spec_helper.rb +3 -3
  160. metadata +202 -28
@@ -1,12 +1,12 @@
1
1
  =begin
2
2
  #SendX REST API
3
3
 
4
- ## Introduction SendX is an email marketing product. It helps you convert website visitors to customers, send them promotional emails, engage with them using drip sequences and craft custom journeys using powerful but simple automations. The SendX API is organized around REST. Our API has predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs. The SendX Rest API doesn’t support bulk updates. You can work on only one object per request. <br>
4
+ ## SendX REST API Documentation ## 🚀 Introduction The SendX API is organized around REST principles. Our API has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs. **Key Features:** - 🔒 **Security**: Team-based authentication with optional member-level access - 🎯 **Resource-Oriented**: RESTful design with clear resource boundaries - 📊 **Rich Data Models**: Three-layer model system (Input/Output/Internal) - 🔗 **Relationships**: Automatic prefix handling for resource relationships - 📈 **Scalable**: Built for high-volume email marketing operations ## 🏗️ Architecture Overview SendX uses a three-layer model architecture: 1. **Input Models** (`RestE*`): For API requests 2. **Output Models** (`RestR*`): For API responses with prefixed IDs 3. **Internal Models**: Core business logic (not exposed in API) ## 🔐 Security & Authentication SendX uses API key authentication: ### Team API Key ```http X-Team-ApiKey: YOUR_TEAM_API_KEY ``` - **Required for all requests** - Team-level access to resources - Available in SendX Settings → Team API Key ## 🆔 Encrypted ID System SendX uses encrypted IDs for security and better developer experience: - **Internal IDs**: Sequential integers (not exposed) - **Encrypted IDs**: 22-character alphanumeric strings - **Prefixed IDs**: Resource-type prefixes in API responses (`contact_<22-char-id>`) ### ID Format **All resource IDs follow this pattern:** ``` <resource_prefix>_<22_character_alphanumeric_string> ``` **Example:** ```json { \"id\": \"contact_BnKjkbBBS500CoBCP0oChQ\", \"lists\": [\"list_OcuxJHdiAvujmwQVJfd3ss\", \"list_0tOFLp5RgV7s3LNiHrjGYs\"], \"tags\": [\"tag_UhsDkjL772Qbj5lWtT62VK\", \"tag_fL7t9lsnZ9swvx2HrtQ9wM\"] } ``` ## 📚 Resource Prefixes | Resource | Prefix | Example | |----------|--------|---------| | Contact | `contact_` | `contact_BnKjkbBBS500CoBCP0oChQ` | | Campaign | `campaign_` | `campaign_LUE9BTxmksSmqHWbh96zsn` | | List | `list_` | `list_OcuxJHdiAvujmwQVJfd3ss` | | Tag | `tag_` | `tag_UhsDkjL772Qbj5lWtT62VK` | | Sender | `sender_` | `sender_4vK3WFhMgvOwUNyaL4QxCD` | | Template | `template_` | `template_f3lJvTEhSjKGVb5Lwc5SWS` | | Custom Field | `field_` | `field_MnuqBAG2NPLm7PZMWbjQxt` | | Webhook | `webhook_` | `webhook_9l154iiXlZoPo7vngmamee` | | Post | `post_` | `post_XyZ123aBc456DeF789GhI` | | Post Category | `post_category_` | `post_category_YzS1wOU20yw87UUHKxMzwn` | | Post Tag | `post_tag_` | `post_tag_123XyZ456AbC` | | Member | `member_` | `member_JkL012MnO345PqR678` | ## 🎯 Best Practices ### Error Handling - **Always check status codes**: 2xx = success, 4xx = client error, 5xx = server error - **Read error messages**: Descriptive messages help debug issues - **Handle rate limits**: Respect API rate limits for optimal performance ### Data Validation - **Email format**: Must be valid email addresses - **Required fields**: Check documentation for mandatory fields - **Field lengths**: Respect maximum length constraints ### Performance - **Pagination**: Use offset/limit for large datasets - **Batch operations**: Process multiple items when supported - **Caching**: Cache responses when appropriate ## 🛠️ SDKs & Integration Official SDKs available for: - [Golang](https://github.com/sendx/sendx-go-sdk) - [Python](https://github.com/sendx/sendx-python-sdk) - [Ruby](https://github.com/sendx/sendx-ruby-sdk) - [Java](https://github.com/sendx/sendx-java-sdk) - [PHP](https://github.com/sendx/sendx-php-sdk) - [JavaScript](https://github.com/sendx/sendx-javascript-sdk) ## 📞 Support Need help? Contact us: - 💬 **Website Chat**: Available on sendx.io - 📧 **Email**: hello@sendx.io - 📚 **Documentation**: Full guides at help.sendx.io --- **API Endpoint:** `https://api.sendx.io/api/v1/rest` [<img src=\"https://run.pstmn.io/button.svg\" alt=\"Run In Postman\" style=\"width: 128px; height: 32px;\">](https://god.gw.postman.com/run-collection/33476323-44b198b0-5219-4619-a01f-cfc24d573885?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D33476323-44b198b0-5219-4619-a01f-cfc24d573885%26entityType%3Dcollection%26workspaceId%3D6b1e4f65-96a9-4136-9512-6266c852517e)
5
5
 
6
6
  The version of the OpenAPI document: 1.0.0
7
- Contact: support@sendx.io
7
+ Contact: hello@sendx.io
8
8
  Generated by: https://openapi-generator.tech
9
- Generator version: 7.8.0
9
+ Generator version: 7.13.0
10
10
 
11
11
  =end
12
12
 
@@ -19,28 +19,28 @@ module SendX
19
19
  def initialize(api_client = ApiClient.default)
20
20
  @api_client = api_client
21
21
  end
22
- # Create a contact
23
- # Create Contact with given data
24
- # @param contact_request [ContactRequest]
22
+ # Create a new contact
23
+ # Creates a new contact in your SendX team with the provided information. **🎯 Key Features:** - Email validation and duplicate detection - Automatic relationship building with lists and tags - Smart custom field handling **📋 Business Rules:** - Email is mandatory and must be unique within the team - Last tracked IP is stored for analytics
24
+ # @param rest_e_contact [RestEContact]
25
25
  # @param [Hash] opts the optional parameters
26
- # @return [Response]
27
- def create_contact(contact_request, opts = {})
28
- data, _status_code, _headers = create_contact_with_http_info(contact_request, opts)
26
+ # @return [RestRContact]
27
+ def create_contact(rest_e_contact, opts = {})
28
+ data, _status_code, _headers = create_contact_with_http_info(rest_e_contact, opts)
29
29
  data
30
30
  end
31
31
 
32
- # Create a contact
33
- # Create Contact with given data
34
- # @param contact_request [ContactRequest]
32
+ # Create a new contact
33
+ # Creates a new contact in your SendX team with the provided information. **🎯 Key Features:** - Email validation and duplicate detection - Automatic relationship building with lists and tags - Smart custom field handling **📋 Business Rules:** - Email is mandatory and must be unique within the team - Last tracked IP is stored for analytics
34
+ # @param rest_e_contact [RestEContact]
35
35
  # @param [Hash] opts the optional parameters
36
- # @return [Array<(Response, Integer, Hash)>] Response data, response status code and response headers
37
- def create_contact_with_http_info(contact_request, opts = {})
36
+ # @return [Array<(RestRContact, Integer, Hash)>] RestRContact data, response status code and response headers
37
+ def create_contact_with_http_info(rest_e_contact, opts = {})
38
38
  if @api_client.config.debugging
39
39
  @api_client.config.logger.debug 'Calling API: ContactApi.create_contact ...'
40
40
  end
41
- # verify the required parameter 'contact_request' is set
42
- if @api_client.config.client_side_validation && contact_request.nil?
43
- fail ArgumentError, "Missing the required parameter 'contact_request' when calling ContactApi.create_contact"
41
+ # verify the required parameter 'rest_e_contact' is set
42
+ if @api_client.config.client_side_validation && rest_e_contact.nil?
43
+ fail ArgumentError, "Missing the required parameter 'rest_e_contact' when calling ContactApi.create_contact"
44
44
  end
45
45
  # resource path
46
46
  local_var_path = '/contact'
@@ -62,13 +62,13 @@ module SendX
62
62
  form_params = opts[:form_params] || {}
63
63
 
64
64
  # http body (model)
65
- post_body = opts[:debug_body] || @api_client.object_to_http_body(contact_request)
65
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(rest_e_contact)
66
66
 
67
67
  # return_type
68
- return_type = opts[:debug_return_type] || 'Response'
68
+ return_type = opts[:debug_return_type] || 'RestRContact'
69
69
 
70
70
  # auth_names
71
- auth_names = opts[:debug_auth_names] || ['apiKeyAuth']
71
+ auth_names = opts[:debug_auth_names] || ['TeamApiKey']
72
72
 
73
73
  new_options = opts.merge(
74
74
  :operation => :"ContactApi.create_contact",
@@ -87,21 +87,21 @@ module SendX
87
87
  return data, status_code, headers
88
88
  end
89
89
 
90
- # Delete Contact
91
- # Deletes Contact
92
- # @param identifier [String] The Contact ID/ Email to delete
90
+ # Delete contact
91
+ # Soft deletes a contact from your team. **🎯 Key Features:** - Soft delete preserves data - Removes from all lists - Cancels pending campaigns - Maintains historical data
92
+ # @param identifier [String] Resource identifier with prefix (e.g., &#x60;contact_BnKjkbBBS500CoBCP0oChQ&#x60;) **Format:** &#x60;&lt;prefix&gt;_&lt;22-character-id&gt;&#x60;
93
93
  # @param [Hash] opts the optional parameters
94
- # @return [Response]
94
+ # @return [DeleteResponse]
95
95
  def delete_contact(identifier, opts = {})
96
96
  data, _status_code, _headers = delete_contact_with_http_info(identifier, opts)
97
97
  data
98
98
  end
99
99
 
100
- # Delete Contact
101
- # Deletes Contact
102
- # @param identifier [String] The Contact ID/ Email to delete
100
+ # Delete contact
101
+ # Soft deletes a contact from your team. **🎯 Key Features:** - Soft delete preserves data - Removes from all lists - Cancels pending campaigns - Maintains historical data
102
+ # @param identifier [String] Resource identifier with prefix (e.g., &#x60;contact_BnKjkbBBS500CoBCP0oChQ&#x60;) **Format:** &#x60;&lt;prefix&gt;_&lt;22-character-id&gt;&#x60;
103
103
  # @param [Hash] opts the optional parameters
104
- # @return [Array<(Response, Integer, Hash)>] Response data, response status code and response headers
104
+ # @return [Array<(DeleteResponse, Integer, Hash)>] DeleteResponse data, response status code and response headers
105
105
  def delete_contact_with_http_info(identifier, opts = {})
106
106
  if @api_client.config.debugging
107
107
  @api_client.config.logger.debug 'Calling API: ContactApi.delete_contact ...'
@@ -110,6 +110,11 @@ module SendX
110
110
  if @api_client.config.client_side_validation && identifier.nil?
111
111
  fail ArgumentError, "Missing the required parameter 'identifier' when calling ContactApi.delete_contact"
112
112
  end
113
+ pattern = Regexp.new(/^[a-z_]+_[a-zA-Z0-9]{22}$/)
114
+ if @api_client.config.client_side_validation && identifier !~ pattern
115
+ fail ArgumentError, "invalid value for 'identifier' when calling ContactApi.delete_contact, must conform to the pattern #{pattern}."
116
+ end
117
+
113
118
  # resource path
114
119
  local_var_path = '/contact/{identifier}'.sub('{' + 'identifier' + '}', CGI.escape(identifier.to_s))
115
120
 
@@ -128,10 +133,10 @@ module SendX
128
133
  post_body = opts[:debug_body]
129
134
 
130
135
  # return_type
131
- return_type = opts[:debug_return_type] || 'Response'
136
+ return_type = opts[:debug_return_type] || 'DeleteResponse'
132
137
 
133
138
  # auth_names
134
- auth_names = opts[:debug_auth_names] || ['apiKeyAuth']
139
+ auth_names = opts[:debug_auth_names] || ['TeamApiKey']
135
140
 
136
141
  new_options = opts.merge(
137
142
  :operation => :"ContactApi.delete_contact",
@@ -150,35 +155,49 @@ module SendX
150
155
  return data, status_code, headers
151
156
  end
152
157
 
153
- # Get All Contacts
154
- # Find all contacts with optional filters
158
+ # Get all contacts
159
+ # Retrieves a paginated list of all contacts in your team with optional filtering capabilities. **🎯 Key Features:** - Pagination support with offset/limit - Search contacts by name or email - All relationships included (lists, tags, custom fields) - Prefixed IDs for easy integration **📊 Pagination:** - Default limit: 10 contacts per page - Maximum limit: 100 contacts per page - Use offset for page navigation **🔍 Search:** - Searches across firstName, lastName, and email fields - Case-insensitive partial matching - Combine with pagination for large datasets
155
160
  # @param [Hash] opts the optional parameters
156
- # @option opts [Integer] :offset Offset for pagination (default to 0)
157
- # @option opts [Integer] :limit Limit for pagination (default to 10)
158
- # @option opts [String] :contact_type Filter contacts by type
159
- # @option opts [String] :search Search term to filter contacts
160
- # @return [Array<Contact>]
161
+ # @option opts [Integer] :offset Number of records to skip for pagination. **Examples:** - &#x60;0&#x60; - First page (default) - &#x60;50&#x60; - Second page (with limit&#x3D;50) - &#x60;100&#x60; - Third page (with limit&#x3D;50) (default to 0)
162
+ # @option opts [Integer] :limit Maximum number of records to return. **Constraints:** - Minimum: 1 - Maximum: 100 - Default: 10 (default to 50)
163
+ # @option opts [String] :search Search term to filter contacts by name or email. **Search Behavior:** - Searches firstName, lastName, and email fields - Case-insensitive partial matching - Minimum 2 characters for search **Examples:** - &#x60;john&#x60; - Finds \&quot;John Doe\&quot;, \&quot;johnson@example.com\&quot; - &#x60;@company.com&#x60; - Finds all emails from company.com - &#x60;smith&#x60; - Finds \&quot;John Smith\&quot;, \&quot;smith@email.com\&quot;
164
+ # @return [Array<RestRContact>]
161
165
  def get_all_contacts(opts = {})
162
166
  data, _status_code, _headers = get_all_contacts_with_http_info(opts)
163
167
  data
164
168
  end
165
169
 
166
- # Get All Contacts
167
- # Find all contacts with optional filters
170
+ # Get all contacts
171
+ # Retrieves a paginated list of all contacts in your team with optional filtering capabilities. **🎯 Key Features:** - Pagination support with offset/limit - Search contacts by name or email - All relationships included (lists, tags, custom fields) - Prefixed IDs for easy integration **📊 Pagination:** - Default limit: 10 contacts per page - Maximum limit: 100 contacts per page - Use offset for page navigation **🔍 Search:** - Searches across firstName, lastName, and email fields - Case-insensitive partial matching - Combine with pagination for large datasets
168
172
  # @param [Hash] opts the optional parameters
169
- # @option opts [Integer] :offset Offset for pagination (default to 0)
170
- # @option opts [Integer] :limit Limit for pagination (default to 10)
171
- # @option opts [String] :contact_type Filter contacts by type
172
- # @option opts [String] :search Search term to filter contacts
173
- # @return [Array<(Array<Contact>, Integer, Hash)>] Array<Contact> data, response status code and response headers
173
+ # @option opts [Integer] :offset Number of records to skip for pagination. **Examples:** - &#x60;0&#x60; - First page (default) - &#x60;50&#x60; - Second page (with limit&#x3D;50) - &#x60;100&#x60; - Third page (with limit&#x3D;50) (default to 0)
174
+ # @option opts [Integer] :limit Maximum number of records to return. **Constraints:** - Minimum: 1 - Maximum: 100 - Default: 10 (default to 50)
175
+ # @option opts [String] :search Search term to filter contacts by name or email. **Search Behavior:** - Searches firstName, lastName, and email fields - Case-insensitive partial matching - Minimum 2 characters for search **Examples:** - &#x60;john&#x60; - Finds \&quot;John Doe\&quot;, \&quot;johnson@example.com\&quot; - &#x60;@company.com&#x60; - Finds all emails from company.com - &#x60;smith&#x60; - Finds \&quot;John Smith\&quot;, \&quot;smith@email.com\&quot;
176
+ # @return [Array<(Array<RestRContact>, Integer, Hash)>] Array<RestRContact> data, response status code and response headers
174
177
  def get_all_contacts_with_http_info(opts = {})
175
178
  if @api_client.config.debugging
176
179
  @api_client.config.logger.debug 'Calling API: ContactApi.get_all_contacts ...'
177
180
  end
178
- allowable_values = ["all", "unsubscribed", "bounced", "markedspam"]
179
- if @api_client.config.client_side_validation && opts[:'contact_type'] && !allowable_values.include?(opts[:'contact_type'])
180
- fail ArgumentError, "invalid value for \"contact_type\", must be one of #{allowable_values}"
181
+ if @api_client.config.client_side_validation && !opts[:'offset'].nil? && opts[:'offset'] < 0
182
+ fail ArgumentError, 'invalid value for "opts[:"offset"]" when calling ContactApi.get_all_contacts, must be greater than or equal to 0.'
181
183
  end
184
+
185
+ if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 1000
186
+ fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling ContactApi.get_all_contacts, must be smaller than or equal to 1000.'
187
+ end
188
+
189
+ if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 1
190
+ fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling ContactApi.get_all_contacts, must be greater than or equal to 1.'
191
+ end
192
+
193
+ if @api_client.config.client_side_validation && !opts[:'search'].nil? && opts[:'search'].to_s.length > 255
194
+ fail ArgumentError, 'invalid value for "opts[:"search"]" when calling ContactApi.get_all_contacts, the character length must be smaller than or equal to 255.'
195
+ end
196
+
197
+ if @api_client.config.client_side_validation && !opts[:'search'].nil? && opts[:'search'].to_s.length < 2
198
+ fail ArgumentError, 'invalid value for "opts[:"search"]" when calling ContactApi.get_all_contacts, the character length must be great than or equal to 2.'
199
+ end
200
+
182
201
  # resource path
183
202
  local_var_path = '/contact'
184
203
 
@@ -186,7 +205,6 @@ module SendX
186
205
  query_params = opts[:query_params] || {}
187
206
  query_params[:'offset'] = opts[:'offset'] if !opts[:'offset'].nil?
188
207
  query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
189
- query_params[:'contactType'] = opts[:'contact_type'] if !opts[:'contact_type'].nil?
190
208
  query_params[:'search'] = opts[:'search'] if !opts[:'search'].nil?
191
209
 
192
210
  # header parameters
@@ -201,10 +219,10 @@ module SendX
201
219
  post_body = opts[:debug_body]
202
220
 
203
221
  # return_type
204
- return_type = opts[:debug_return_type] || 'Array<Contact>'
222
+ return_type = opts[:debug_return_type] || 'Array<RestRContact>'
205
223
 
206
224
  # auth_names
207
- auth_names = opts[:debug_auth_names] || ['apiKeyAuth']
225
+ auth_names = opts[:debug_auth_names] || ['TeamApiKey']
208
226
 
209
227
  new_options = opts.merge(
210
228
  :operation => :"ContactApi.get_all_contacts",
@@ -223,29 +241,34 @@ module SendX
223
241
  return data, status_code, headers
224
242
  end
225
243
 
226
- # Get Contact by Identifier
227
- # Retrieve a specific contact by its identifier.
228
- # @param identifier [String] The ID or Email of the contact to retrieve.
244
+ # Get contact by ID
245
+ # Retrieves detailed information about a specific contact. **🎯 Key Features:** - Returns complete contact profile - Includes all lists and tags - Shows custom field values - Provides engagement metrics
246
+ # @param identifier [String] Resource identifier with prefix (e.g., &#x60;contact_BnKjkbBBS500CoBCP0oChQ&#x60;) **Format:** &#x60;&lt;prefix&gt;_&lt;22-character-id&gt;&#x60;
229
247
  # @param [Hash] opts the optional parameters
230
- # @return [Contact]
231
- def get_contact_by_id(identifier, opts = {})
232
- data, _status_code, _headers = get_contact_by_id_with_http_info(identifier, opts)
248
+ # @return [RestRContact]
249
+ def get_contact(identifier, opts = {})
250
+ data, _status_code, _headers = get_contact_with_http_info(identifier, opts)
233
251
  data
234
252
  end
235
253
 
236
- # Get Contact by Identifier
237
- # Retrieve a specific contact by its identifier.
238
- # @param identifier [String] The ID or Email of the contact to retrieve.
254
+ # Get contact by ID
255
+ # Retrieves detailed information about a specific contact. **🎯 Key Features:** - Returns complete contact profile - Includes all lists and tags - Shows custom field values - Provides engagement metrics
256
+ # @param identifier [String] Resource identifier with prefix (e.g., &#x60;contact_BnKjkbBBS500CoBCP0oChQ&#x60;) **Format:** &#x60;&lt;prefix&gt;_&lt;22-character-id&gt;&#x60;
239
257
  # @param [Hash] opts the optional parameters
240
- # @return [Array<(Contact, Integer, Hash)>] Contact data, response status code and response headers
241
- def get_contact_by_id_with_http_info(identifier, opts = {})
258
+ # @return [Array<(RestRContact, Integer, Hash)>] RestRContact data, response status code and response headers
259
+ def get_contact_with_http_info(identifier, opts = {})
242
260
  if @api_client.config.debugging
243
- @api_client.config.logger.debug 'Calling API: ContactApi.get_contact_by_id ...'
261
+ @api_client.config.logger.debug 'Calling API: ContactApi.get_contact ...'
244
262
  end
245
263
  # verify the required parameter 'identifier' is set
246
264
  if @api_client.config.client_side_validation && identifier.nil?
247
- fail ArgumentError, "Missing the required parameter 'identifier' when calling ContactApi.get_contact_by_id"
265
+ fail ArgumentError, "Missing the required parameter 'identifier' when calling ContactApi.get_contact"
248
266
  end
267
+ pattern = Regexp.new(/^[a-z_]+_[a-zA-Z0-9]{22}$/)
268
+ if @api_client.config.client_side_validation && identifier !~ pattern
269
+ fail ArgumentError, "invalid value for 'identifier' when calling ContactApi.get_contact, must conform to the pattern #{pattern}."
270
+ end
271
+
249
272
  # resource path
250
273
  local_var_path = '/contact/{identifier}'.sub('{' + 'identifier' + '}', CGI.escape(identifier.to_s))
251
274
 
@@ -264,13 +287,13 @@ module SendX
264
287
  post_body = opts[:debug_body]
265
288
 
266
289
  # return_type
267
- return_type = opts[:debug_return_type] || 'Contact'
290
+ return_type = opts[:debug_return_type] || 'RestRContact'
268
291
 
269
292
  # auth_names
270
- auth_names = opts[:debug_auth_names] || ['apiKeyAuth']
293
+ auth_names = opts[:debug_auth_names] || ['TeamApiKey']
271
294
 
272
295
  new_options = opts.merge(
273
- :operation => :"ContactApi.get_contact_by_id",
296
+ :operation => :"ContactApi.get_contact",
274
297
  :header_params => header_params,
275
298
  :query_params => query_params,
276
299
  :form_params => form_params,
@@ -281,26 +304,26 @@ module SendX
281
304
 
282
305
  data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
283
306
  if @api_client.config.debugging
284
- @api_client.config.logger.debug "API called: ContactApi#get_contact_by_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
307
+ @api_client.config.logger.debug "API called: ContactApi#get_contact\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
285
308
  end
286
309
  return data, status_code, headers
287
310
  end
288
311
 
289
- # Unsubscribe Contact
290
- # Unsubscribe a globally existing contact
291
- # @param identifier [String] The Contact ID or email to unsubscribe
312
+ # Unsubscribe contact
313
+ # Unsubscribes a contact from all marketing communications. **🎯 Key Features:** - Marks contact as unsubscribed - Removes from all active campaigns - Maintains unsubscribe history - Complies with anti-spam regulations
314
+ # @param identifier [String] Resource identifier with prefix (e.g., &#x60;contact_BnKjkbBBS500CoBCP0oChQ&#x60;) **Format:** &#x60;&lt;prefix&gt;_&lt;22-character-id&gt;&#x60;
292
315
  # @param [Hash] opts the optional parameters
293
- # @return [Response]
316
+ # @return [MessageResponse]
294
317
  def unsubscribe_contact(identifier, opts = {})
295
318
  data, _status_code, _headers = unsubscribe_contact_with_http_info(identifier, opts)
296
319
  data
297
320
  end
298
321
 
299
- # Unsubscribe Contact
300
- # Unsubscribe a globally existing contact
301
- # @param identifier [String] The Contact ID or email to unsubscribe
322
+ # Unsubscribe contact
323
+ # Unsubscribes a contact from all marketing communications. **🎯 Key Features:** - Marks contact as unsubscribed - Removes from all active campaigns - Maintains unsubscribe history - Complies with anti-spam regulations
324
+ # @param identifier [String] Resource identifier with prefix (e.g., &#x60;contact_BnKjkbBBS500CoBCP0oChQ&#x60;) **Format:** &#x60;&lt;prefix&gt;_&lt;22-character-id&gt;&#x60;
302
325
  # @param [Hash] opts the optional parameters
303
- # @return [Array<(Response, Integer, Hash)>] Response data, response status code and response headers
326
+ # @return [Array<(MessageResponse, Integer, Hash)>] MessageResponse data, response status code and response headers
304
327
  def unsubscribe_contact_with_http_info(identifier, opts = {})
305
328
  if @api_client.config.debugging
306
329
  @api_client.config.logger.debug 'Calling API: ContactApi.unsubscribe_contact ...'
@@ -309,6 +332,11 @@ module SendX
309
332
  if @api_client.config.client_side_validation && identifier.nil?
310
333
  fail ArgumentError, "Missing the required parameter 'identifier' when calling ContactApi.unsubscribe_contact"
311
334
  end
335
+ pattern = Regexp.new(/^[a-z_]+_[a-zA-Z0-9]{22}$/)
336
+ if @api_client.config.client_side_validation && identifier !~ pattern
337
+ fail ArgumentError, "invalid value for 'identifier' when calling ContactApi.unsubscribe_contact, must conform to the pattern #{pattern}."
338
+ end
339
+
312
340
  # resource path
313
341
  local_var_path = '/contact/unsubscribe/{identifier}'.sub('{' + 'identifier' + '}', CGI.escape(identifier.to_s))
314
342
 
@@ -327,10 +355,10 @@ module SendX
327
355
  post_body = opts[:debug_body]
328
356
 
329
357
  # return_type
330
- return_type = opts[:debug_return_type] || 'Response'
358
+ return_type = opts[:debug_return_type] || 'MessageResponse'
331
359
 
332
360
  # auth_names
333
- auth_names = opts[:debug_auth_names] || ['apiKeyAuth']
361
+ auth_names = opts[:debug_auth_names] || ['TeamApiKey']
334
362
 
335
363
  new_options = opts.merge(
336
364
  :operation => :"ContactApi.unsubscribe_contact",
@@ -349,35 +377,40 @@ module SendX
349
377
  return data, status_code, headers
350
378
  end
351
379
 
352
- # Update Contact
353
- # Update Contact with given data
354
- # @param contact_request [ContactRequest]
355
- # @param identifier [String] The ID or email of the Contact to update
380
+ # Update contact
381
+ # Updates an existing contact's information. **🎯 Key Features:** - Partial updates supported - Add/remove lists and tags - Update custom fields - Change email address
382
+ # @param rest_e_contact [RestEContact]
383
+ # @param identifier [String] Resource identifier with prefix (e.g., &#x60;contact_BnKjkbBBS500CoBCP0oChQ&#x60;) **Format:** &#x60;&lt;prefix&gt;_&lt;22-character-id&gt;&#x60;
356
384
  # @param [Hash] opts the optional parameters
357
- # @return [Contact]
358
- def update_contact(contact_request, identifier, opts = {})
359
- data, _status_code, _headers = update_contact_with_http_info(contact_request, identifier, opts)
385
+ # @return [RestRContact]
386
+ def update_contact(rest_e_contact, identifier, opts = {})
387
+ data, _status_code, _headers = update_contact_with_http_info(rest_e_contact, identifier, opts)
360
388
  data
361
389
  end
362
390
 
363
- # Update Contact
364
- # Update Contact with given data
365
- # @param contact_request [ContactRequest]
366
- # @param identifier [String] The ID or email of the Contact to update
391
+ # Update contact
392
+ # Updates an existing contact&#39;s information. **🎯 Key Features:** - Partial updates supported - Add/remove lists and tags - Update custom fields - Change email address
393
+ # @param rest_e_contact [RestEContact]
394
+ # @param identifier [String] Resource identifier with prefix (e.g., &#x60;contact_BnKjkbBBS500CoBCP0oChQ&#x60;) **Format:** &#x60;&lt;prefix&gt;_&lt;22-character-id&gt;&#x60;
367
395
  # @param [Hash] opts the optional parameters
368
- # @return [Array<(Contact, Integer, Hash)>] Contact data, response status code and response headers
369
- def update_contact_with_http_info(contact_request, identifier, opts = {})
396
+ # @return [Array<(RestRContact, Integer, Hash)>] RestRContact data, response status code and response headers
397
+ def update_contact_with_http_info(rest_e_contact, identifier, opts = {})
370
398
  if @api_client.config.debugging
371
399
  @api_client.config.logger.debug 'Calling API: ContactApi.update_contact ...'
372
400
  end
373
- # verify the required parameter 'contact_request' is set
374
- if @api_client.config.client_side_validation && contact_request.nil?
375
- fail ArgumentError, "Missing the required parameter 'contact_request' when calling ContactApi.update_contact"
401
+ # verify the required parameter 'rest_e_contact' is set
402
+ if @api_client.config.client_side_validation && rest_e_contact.nil?
403
+ fail ArgumentError, "Missing the required parameter 'rest_e_contact' when calling ContactApi.update_contact"
376
404
  end
377
405
  # verify the required parameter 'identifier' is set
378
406
  if @api_client.config.client_side_validation && identifier.nil?
379
407
  fail ArgumentError, "Missing the required parameter 'identifier' when calling ContactApi.update_contact"
380
408
  end
409
+ pattern = Regexp.new(/^[a-z_]+_[a-zA-Z0-9]{22}$/)
410
+ if @api_client.config.client_side_validation && identifier !~ pattern
411
+ fail ArgumentError, "invalid value for 'identifier' when calling ContactApi.update_contact, must conform to the pattern #{pattern}."
412
+ end
413
+
381
414
  # resource path
382
415
  local_var_path = '/contact/{identifier}'.sub('{' + 'identifier' + '}', CGI.escape(identifier.to_s))
383
416
 
@@ -398,13 +431,13 @@ module SendX
398
431
  form_params = opts[:form_params] || {}
399
432
 
400
433
  # http body (model)
401
- post_body = opts[:debug_body] || @api_client.object_to_http_body(contact_request)
434
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(rest_e_contact)
402
435
 
403
436
  # return_type
404
- return_type = opts[:debug_return_type] || 'Contact'
437
+ return_type = opts[:debug_return_type] || 'RestRContact'
405
438
 
406
439
  # auth_names
407
- auth_names = opts[:debug_auth_names] || ['apiKeyAuth']
440
+ auth_names = opts[:debug_auth_names] || ['TeamApiKey']
408
441
 
409
442
  new_options = opts.merge(
410
443
  :operation => :"ContactApi.update_contact",