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.
- checksums.yaml +4 -4
- data/README.md +220 -81
- data/lib/sendx-ruby-sdk/api/campaign_api.rb +95 -143
- data/lib/sendx-ruby-sdk/api/contact_api.rb +129 -96
- data/lib/sendx-ruby-sdk/api/custom_field_api.rb +391 -0
- data/lib/sendx-ruby-sdk/api/email_sending_api.rb +158 -0
- data/lib/sendx-ruby-sdk/api/event_api.rb +91 -57
- data/lib/sendx-ruby-sdk/api/events_api.rb +158 -0
- data/lib/sendx-ruby-sdk/api/getting_started_api.rb +2 -2
- data/lib/sendx-ruby-sdk/api/list_api.rb +126 -91
- data/lib/sendx-ruby-sdk/api/post_api.rb +380 -0
- data/lib/sendx-ruby-sdk/api/post_category_api.rb +362 -0
- data/lib/sendx-ruby-sdk/api/post_tag_api.rb +362 -0
- data/lib/sendx-ruby-sdk/api/report_api.rb +90 -0
- data/lib/sendx-ruby-sdk/api/reports_api.rb +4 -4
- data/lib/sendx-ruby-sdk/api/sender_api.rb +28 -37
- data/lib/sendx-ruby-sdk/api/tag_api.rb +380 -0
- data/lib/sendx-ruby-sdk/api/tags_api.rb +8 -8
- data/lib/sendx-ruby-sdk/api/team_member_api.rb +147 -0
- data/lib/sendx-ruby-sdk/api/template_api.rb +391 -0
- data/lib/sendx-ruby-sdk/api/tracking_api.rb +158 -0
- data/lib/sendx-ruby-sdk/api/webhook_api.rb +362 -0
- data/lib/sendx-ruby-sdk/api_client.rb +10 -11
- data/lib/sendx-ruby-sdk/api_error.rb +3 -3
- data/lib/sendx-ruby-sdk/configuration.rb +6 -10
- data/lib/sendx-ruby-sdk/models/campaign.rb +23 -7
- data/lib/sendx-ruby-sdk/models/campaign_dashboard_data.rb +11 -5
- data/lib/sendx-ruby-sdk/models/campaign_request.rb +13 -41
- data/lib/sendx-ruby-sdk/models/contact.rb +11 -5
- data/lib/sendx-ruby-sdk/models/contact_request.rb +11 -5
- data/lib/sendx-ruby-sdk/models/create_response.rb +11 -5
- data/lib/sendx-ruby-sdk/models/custom_event_request.rb +37 -42
- data/lib/sendx-ruby-sdk/models/custom_field.rb +285 -0
- data/lib/sendx-ruby-sdk/models/customfield_customfield_id_delete200_response.rb +220 -0
- data/lib/sendx-ruby-sdk/models/dashboard_stats.rb +11 -5
- data/lib/sendx-ruby-sdk/models/delete_campaign200_response.rb +11 -5
- data/lib/sendx-ruby-sdk/models/delete_request.rb +11 -5
- data/lib/sendx-ruby-sdk/models/delete_response.rb +77 -13
- data/lib/sendx-ruby-sdk/models/e_custom_field.rb +295 -0
- data/lib/sendx-ruby-sdk/models/error_response.rb +288 -0
- data/lib/sendx-ruby-sdk/models/event_response.rb +13 -19
- data/lib/sendx-ruby-sdk/models/events_revenue_postback_get200_response.rb +229 -0
- data/lib/sendx-ruby-sdk/models/events_revenue_postback_get400_response.rb +220 -0
- data/lib/sendx-ruby-sdk/models/events_revenue_postback_get500_response.rb +220 -0
- data/lib/sendx-ruby-sdk/models/identify_error_response.rb +220 -0
- data/lib/sendx-ruby-sdk/models/identify_request.rb +52 -40
- data/lib/sendx-ruby-sdk/models/identify_response.rb +16 -19
- data/lib/sendx-ruby-sdk/models/last_sent_campaign_stat.rb +11 -5
- data/lib/sendx-ruby-sdk/models/link_stat.rb +232 -0
- data/lib/sendx-ruby-sdk/models/list_model.rb +11 -6
- data/lib/sendx-ruby-sdk/models/list_request.rb +11 -5
- data/lib/sendx-ruby-sdk/models/message_response.rb +229 -0
- data/lib/sendx-ruby-sdk/models/operation_response.rb +241 -0
- data/lib/sendx-ruby-sdk/models/postback_response.rb +229 -0
- data/lib/sendx-ruby-sdk/models/report_data.rb +11 -5
- data/lib/sendx-ruby-sdk/models/response.rb +11 -5
- data/lib/sendx-ruby-sdk/models/rest_e_campaign.rb +539 -0
- data/lib/sendx-ruby-sdk/models/rest_e_contact.rb +380 -0
- data/lib/sendx-ruby-sdk/models/rest_e_custom_field.rb +299 -0
- data/lib/sendx-ruby-sdk/models/rest_e_list.rb +238 -0
- data/lib/sendx-ruby-sdk/models/rest_e_post.rb +443 -0
- data/lib/sendx-ruby-sdk/models/rest_e_post_category.rb +238 -0
- data/lib/sendx-ruby-sdk/models/rest_e_post_tag.rb +238 -0
- data/lib/sendx-ruby-sdk/models/rest_e_sender.rb +265 -0
- data/lib/sendx-ruby-sdk/models/rest_e_tag.rb +238 -0
- data/lib/sendx-ruby-sdk/models/rest_e_template.rb +307 -0
- data/lib/sendx-ruby-sdk/models/rest_e_webhook.rb +349 -0
- data/lib/sendx-ruby-sdk/models/rest_r_campaign.rb +580 -0
- data/lib/sendx-ruby-sdk/models/rest_r_contact.rb +438 -0
- data/lib/sendx-ruby-sdk/models/rest_r_custom_field.rb +306 -0
- data/lib/sendx-ruby-sdk/models/rest_r_list.rb +291 -0
- data/lib/sendx-ruby-sdk/models/rest_r_member.rb +274 -0
- data/lib/sendx-ruby-sdk/models/rest_r_post.rb +384 -0
- data/lib/sendx-ruby-sdk/models/rest_r_post_category.rb +251 -0
- data/lib/sendx-ruby-sdk/models/rest_r_post_tag.rb +250 -0
- data/lib/sendx-ruby-sdk/models/rest_r_sender.rb +272 -0
- data/lib/sendx-ruby-sdk/models/rest_r_tag.rb +272 -0
- data/lib/sendx-ruby-sdk/models/rest_r_template.rb +366 -0
- data/lib/sendx-ruby-sdk/models/rest_r_webhook.rb +326 -0
- data/lib/sendx-ruby-sdk/models/rest_report_data.rb +312 -0
- data/lib/sendx-ruby-sdk/models/revenue_event_request.rb +37 -42
- data/lib/sendx-ruby-sdk/models/sender.rb +41 -5
- data/lib/sendx-ruby-sdk/models/sender_request.rb +31 -5
- data/lib/sendx-ruby-sdk/models/sender_response.rb +51 -5
- data/lib/sendx-ruby-sdk/models/tag.rb +11 -5
- data/lib/sendx-ruby-sdk/models/tag_request.rb +11 -5
- data/lib/sendx-ruby-sdk/models/template_email_message.rb +337 -0
- data/lib/sendx-ruby-sdk/models/track_request.rb +28 -20
- data/lib/sendx-ruby-sdk/models/track_response.rb +12 -6
- data/lib/sendx-ruby-sdk/models/webhook.rb +311 -0
- data/lib/sendx-ruby-sdk/models/webhook_object.rb +451 -0
- data/lib/sendx-ruby-sdk/models/webhook_request.rb +291 -0
- data/lib/sendx-ruby-sdk/models/x_attachment.rb +263 -0
- data/lib/sendx-ruby-sdk/models/x_email_message.rb +356 -0
- data/lib/sendx-ruby-sdk/models/x_email_response.rb +261 -0
- data/lib/sendx-ruby-sdk/models/x_from.rb +246 -0
- data/lib/sendx-ruby-sdk/models/x_reply_to.rb +246 -0
- data/lib/sendx-ruby-sdk/models/xto.rb +279 -0
- data/lib/sendx-ruby-sdk/version.rb +4 -4
- data/lib/sendx-ruby-sdk.rb +53 -25
- data/spec/api/custom_field_api_spec.rb +98 -0
- data/spec/api/email_sending_api_spec.rb +59 -0
- data/spec/api/events_api_spec.rb +59 -0
- data/spec/api/post_api_spec.rb +97 -0
- data/spec/api/post_category_api_spec.rb +95 -0
- data/spec/api/post_tag_api_spec.rb +95 -0
- data/spec/api/report_api_spec.rb +47 -0
- data/spec/api/tag_api_spec.rb +97 -0
- data/spec/api/team_member_api_spec.rb +58 -0
- data/spec/api/template_api_spec.rb +98 -0
- data/spec/api/tracking_api_spec.rb +59 -0
- data/spec/api/webhook_api_spec.rb +95 -0
- data/spec/models/custom_field_spec.rb +58 -0
- data/spec/models/customfield_customfield_id_delete200_response_spec.rb +36 -0
- data/spec/models/e_custom_field_spec.rb +64 -0
- data/spec/models/error_response_spec.rb +46 -0
- data/spec/models/events_revenue_postback_get200_response_spec.rb +42 -0
- data/spec/models/events_revenue_postback_get400_response_spec.rb +36 -0
- data/spec/models/events_revenue_postback_get500_response_spec.rb +36 -0
- data/spec/models/identify_error_response_spec.rb +36 -0
- data/spec/models/link_stat_spec.rb +42 -0
- data/spec/models/message_response_spec.rb +42 -0
- data/spec/models/operation_response_spec.rb +48 -0
- data/spec/models/postback_response_spec.rb +42 -0
- data/spec/models/rest_e_campaign_spec.rb +154 -0
- data/spec/models/rest_e_contact_spec.rb +78 -0
- data/spec/models/rest_e_custom_field_spec.rb +52 -0
- data/spec/models/rest_e_list_spec.rb +36 -0
- data/spec/models/rest_e_post_category_spec.rb +36 -0
- data/spec/models/rest_e_post_spec.rb +144 -0
- data/spec/models/rest_e_post_tag_spec.rb +36 -0
- data/spec/models/rest_e_sender_spec.rb +42 -0
- data/spec/models/rest_e_tag_spec.rb +36 -0
- data/spec/models/rest_e_template_spec.rb +66 -0
- data/spec/models/rest_e_webhook_spec.rb +84 -0
- data/spec/models/rest_r_campaign_spec.rb +178 -0
- data/spec/models/rest_r_contact_spec.rb +150 -0
- data/spec/models/rest_r_custom_field_spec.rb +58 -0
- data/spec/models/rest_r_list_spec.rb +64 -0
- data/spec/models/rest_r_member_spec.rb +72 -0
- data/spec/models/rest_r_post_category_spec.rb +54 -0
- data/spec/models/rest_r_post_spec.rb +144 -0
- data/spec/models/rest_r_post_tag_spec.rb +54 -0
- data/spec/models/rest_r_sender_spec.rb +54 -0
- data/spec/models/rest_r_tag_spec.rb +54 -0
- data/spec/models/rest_r_template_spec.rb +94 -0
- data/spec/models/rest_r_webhook_spec.rb +90 -0
- data/spec/models/rest_report_data_spec.rb +90 -0
- data/spec/models/template_email_message_spec.rb +72 -0
- data/spec/models/webhook_object_spec.rb +180 -0
- data/spec/models/webhook_request_spec.rb +78 -0
- data/spec/models/webhook_spec.rb +90 -0
- data/spec/models/x_attachment_spec.rb +42 -0
- data/spec/models/x_email_message_spec.rb +90 -0
- data/spec/models/x_email_response_spec.rb +60 -0
- data/spec/models/x_from_spec.rb +42 -0
- data/spec/models/x_reply_to_spec.rb +42 -0
- data/spec/models/xto_spec.rb +60 -0
- data/spec/spec_helper.rb +3 -3
- metadata +202 -28
@@ -0,0 +1,362 @@
|
|
1
|
+
=begin
|
2
|
+
#SendX REST API
|
3
|
+
|
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
|
+
|
6
|
+
The version of the OpenAPI document: 1.0.0
|
7
|
+
Contact: hello@sendx.io
|
8
|
+
Generated by: https://openapi-generator.tech
|
9
|
+
Generator version: 7.13.0
|
10
|
+
|
11
|
+
=end
|
12
|
+
|
13
|
+
require 'cgi'
|
14
|
+
|
15
|
+
module SendX
|
16
|
+
class WebhookApi
|
17
|
+
attr_accessor :api_client
|
18
|
+
|
19
|
+
def initialize(api_client = ApiClient.default)
|
20
|
+
@api_client = api_client
|
21
|
+
end
|
22
|
+
# Create webhook
|
23
|
+
# Creates a new webhook for event notifications.
|
24
|
+
# @param rest_e_webhook [RestEWebhook]
|
25
|
+
# @param [Hash] opts the optional parameters
|
26
|
+
# @return [RestRWebhook]
|
27
|
+
def create_webhook(rest_e_webhook, opts = {})
|
28
|
+
data, _status_code, _headers = create_webhook_with_http_info(rest_e_webhook, opts)
|
29
|
+
data
|
30
|
+
end
|
31
|
+
|
32
|
+
# Create webhook
|
33
|
+
# Creates a new webhook for event notifications.
|
34
|
+
# @param rest_e_webhook [RestEWebhook]
|
35
|
+
# @param [Hash] opts the optional parameters
|
36
|
+
# @return [Array<(RestRWebhook, Integer, Hash)>] RestRWebhook data, response status code and response headers
|
37
|
+
def create_webhook_with_http_info(rest_e_webhook, opts = {})
|
38
|
+
if @api_client.config.debugging
|
39
|
+
@api_client.config.logger.debug 'Calling API: WebhookApi.create_webhook ...'
|
40
|
+
end
|
41
|
+
# verify the required parameter 'rest_e_webhook' is set
|
42
|
+
if @api_client.config.client_side_validation && rest_e_webhook.nil?
|
43
|
+
fail ArgumentError, "Missing the required parameter 'rest_e_webhook' when calling WebhookApi.create_webhook"
|
44
|
+
end
|
45
|
+
# resource path
|
46
|
+
local_var_path = '/webhook'
|
47
|
+
|
48
|
+
# query parameters
|
49
|
+
query_params = opts[:query_params] || {}
|
50
|
+
|
51
|
+
# header parameters
|
52
|
+
header_params = opts[:header_params] || {}
|
53
|
+
# HTTP header 'Accept' (if needed)
|
54
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
55
|
+
# HTTP header 'Content-Type'
|
56
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
57
|
+
if !content_type.nil?
|
58
|
+
header_params['Content-Type'] = content_type
|
59
|
+
end
|
60
|
+
|
61
|
+
# form parameters
|
62
|
+
form_params = opts[:form_params] || {}
|
63
|
+
|
64
|
+
# http body (model)
|
65
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(rest_e_webhook)
|
66
|
+
|
67
|
+
# return_type
|
68
|
+
return_type = opts[:debug_return_type] || 'RestRWebhook'
|
69
|
+
|
70
|
+
# auth_names
|
71
|
+
auth_names = opts[:debug_auth_names] || ['TeamApiKey']
|
72
|
+
|
73
|
+
new_options = opts.merge(
|
74
|
+
:operation => :"WebhookApi.create_webhook",
|
75
|
+
:header_params => header_params,
|
76
|
+
:query_params => query_params,
|
77
|
+
:form_params => form_params,
|
78
|
+
:body => post_body,
|
79
|
+
:auth_names => auth_names,
|
80
|
+
:return_type => return_type
|
81
|
+
)
|
82
|
+
|
83
|
+
data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
|
84
|
+
if @api_client.config.debugging
|
85
|
+
@api_client.config.logger.debug "API called: WebhookApi#create_webhook\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
86
|
+
end
|
87
|
+
return data, status_code, headers
|
88
|
+
end
|
89
|
+
|
90
|
+
# Delete webhook
|
91
|
+
# Deletes a webhook configuration. **π― Key Features:** - Remove webhooks - Stop event delivery - Clean up endpoints
|
92
|
+
# @param identifier [String] Webhook identifier to update
|
93
|
+
# @param [Hash] opts the optional parameters
|
94
|
+
# @return [DeleteResponse]
|
95
|
+
def delete_webhook(identifier, opts = {})
|
96
|
+
data, _status_code, _headers = delete_webhook_with_http_info(identifier, opts)
|
97
|
+
data
|
98
|
+
end
|
99
|
+
|
100
|
+
# Delete webhook
|
101
|
+
# Deletes a webhook configuration. **π― Key Features:** - Remove webhooks - Stop event delivery - Clean up endpoints
|
102
|
+
# @param identifier [String] Webhook identifier to update
|
103
|
+
# @param [Hash] opts the optional parameters
|
104
|
+
# @return [Array<(DeleteResponse, Integer, Hash)>] DeleteResponse data, response status code and response headers
|
105
|
+
def delete_webhook_with_http_info(identifier, opts = {})
|
106
|
+
if @api_client.config.debugging
|
107
|
+
@api_client.config.logger.debug 'Calling API: WebhookApi.delete_webhook ...'
|
108
|
+
end
|
109
|
+
# verify the required parameter 'identifier' is set
|
110
|
+
if @api_client.config.client_side_validation && identifier.nil?
|
111
|
+
fail ArgumentError, "Missing the required parameter 'identifier' when calling WebhookApi.delete_webhook"
|
112
|
+
end
|
113
|
+
pattern = Regexp.new(/^(webhook_)?[a-zA-Z0-9]{22}$/)
|
114
|
+
if @api_client.config.client_side_validation && identifier !~ pattern
|
115
|
+
fail ArgumentError, "invalid value for 'identifier' when calling WebhookApi.delete_webhook, must conform to the pattern #{pattern}."
|
116
|
+
end
|
117
|
+
|
118
|
+
# resource path
|
119
|
+
local_var_path = '/webhook/{identifier}'.sub('{' + 'identifier' + '}', CGI.escape(identifier.to_s))
|
120
|
+
|
121
|
+
# query parameters
|
122
|
+
query_params = opts[:query_params] || {}
|
123
|
+
|
124
|
+
# header parameters
|
125
|
+
header_params = opts[:header_params] || {}
|
126
|
+
# HTTP header 'Accept' (if needed)
|
127
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
128
|
+
|
129
|
+
# form parameters
|
130
|
+
form_params = opts[:form_params] || {}
|
131
|
+
|
132
|
+
# http body (model)
|
133
|
+
post_body = opts[:debug_body]
|
134
|
+
|
135
|
+
# return_type
|
136
|
+
return_type = opts[:debug_return_type] || 'DeleteResponse'
|
137
|
+
|
138
|
+
# auth_names
|
139
|
+
auth_names = opts[:debug_auth_names] || ['TeamApiKey']
|
140
|
+
|
141
|
+
new_options = opts.merge(
|
142
|
+
:operation => :"WebhookApi.delete_webhook",
|
143
|
+
:header_params => header_params,
|
144
|
+
:query_params => query_params,
|
145
|
+
:form_params => form_params,
|
146
|
+
:body => post_body,
|
147
|
+
:auth_names => auth_names,
|
148
|
+
:return_type => return_type
|
149
|
+
)
|
150
|
+
|
151
|
+
data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
|
152
|
+
if @api_client.config.debugging
|
153
|
+
@api_client.config.logger.debug "API called: WebhookApi#delete_webhook\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
154
|
+
end
|
155
|
+
return data, status_code, headers
|
156
|
+
end
|
157
|
+
|
158
|
+
# Get all webhooks
|
159
|
+
# Retrieves all configured webhooks.
|
160
|
+
# @param [Hash] opts the optional parameters
|
161
|
+
# @return [Array<RestRWebhook>]
|
162
|
+
def get_all_webhooks(opts = {})
|
163
|
+
data, _status_code, _headers = get_all_webhooks_with_http_info(opts)
|
164
|
+
data
|
165
|
+
end
|
166
|
+
|
167
|
+
# Get all webhooks
|
168
|
+
# Retrieves all configured webhooks.
|
169
|
+
# @param [Hash] opts the optional parameters
|
170
|
+
# @return [Array<(Array<RestRWebhook>, Integer, Hash)>] Array<RestRWebhook> data, response status code and response headers
|
171
|
+
def get_all_webhooks_with_http_info(opts = {})
|
172
|
+
if @api_client.config.debugging
|
173
|
+
@api_client.config.logger.debug 'Calling API: WebhookApi.get_all_webhooks ...'
|
174
|
+
end
|
175
|
+
# resource path
|
176
|
+
local_var_path = '/webhook'
|
177
|
+
|
178
|
+
# query parameters
|
179
|
+
query_params = opts[:query_params] || {}
|
180
|
+
|
181
|
+
# header parameters
|
182
|
+
header_params = opts[:header_params] || {}
|
183
|
+
# HTTP header 'Accept' (if needed)
|
184
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
185
|
+
|
186
|
+
# form parameters
|
187
|
+
form_params = opts[:form_params] || {}
|
188
|
+
|
189
|
+
# http body (model)
|
190
|
+
post_body = opts[:debug_body]
|
191
|
+
|
192
|
+
# return_type
|
193
|
+
return_type = opts[:debug_return_type] || 'Array<RestRWebhook>'
|
194
|
+
|
195
|
+
# auth_names
|
196
|
+
auth_names = opts[:debug_auth_names] || ['TeamApiKey']
|
197
|
+
|
198
|
+
new_options = opts.merge(
|
199
|
+
:operation => :"WebhookApi.get_all_webhooks",
|
200
|
+
:header_params => header_params,
|
201
|
+
:query_params => query_params,
|
202
|
+
:form_params => form_params,
|
203
|
+
:body => post_body,
|
204
|
+
:auth_names => auth_names,
|
205
|
+
:return_type => return_type
|
206
|
+
)
|
207
|
+
|
208
|
+
data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
|
209
|
+
if @api_client.config.debugging
|
210
|
+
@api_client.config.logger.debug "API called: WebhookApi#get_all_webhooks\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
211
|
+
end
|
212
|
+
return data, status_code, headers
|
213
|
+
end
|
214
|
+
|
215
|
+
# Get webhook by ID
|
216
|
+
# Retrieves details about a specific webhook.
|
217
|
+
# @param identifier [String] Webhook identifier to retrieve
|
218
|
+
# @param [Hash] opts the optional parameters
|
219
|
+
# @return [RestRWebhook]
|
220
|
+
def get_webhook(identifier, opts = {})
|
221
|
+
data, _status_code, _headers = get_webhook_with_http_info(identifier, opts)
|
222
|
+
data
|
223
|
+
end
|
224
|
+
|
225
|
+
# Get webhook by ID
|
226
|
+
# Retrieves details about a specific webhook.
|
227
|
+
# @param identifier [String] Webhook identifier to retrieve
|
228
|
+
# @param [Hash] opts the optional parameters
|
229
|
+
# @return [Array<(RestRWebhook, Integer, Hash)>] RestRWebhook data, response status code and response headers
|
230
|
+
def get_webhook_with_http_info(identifier, opts = {})
|
231
|
+
if @api_client.config.debugging
|
232
|
+
@api_client.config.logger.debug 'Calling API: WebhookApi.get_webhook ...'
|
233
|
+
end
|
234
|
+
# verify the required parameter 'identifier' is set
|
235
|
+
if @api_client.config.client_side_validation && identifier.nil?
|
236
|
+
fail ArgumentError, "Missing the required parameter 'identifier' when calling WebhookApi.get_webhook"
|
237
|
+
end
|
238
|
+
pattern = Regexp.new(/^(webhook_)?[a-zA-Z0-9]{22}$/)
|
239
|
+
if @api_client.config.client_side_validation && identifier !~ pattern
|
240
|
+
fail ArgumentError, "invalid value for 'identifier' when calling WebhookApi.get_webhook, must conform to the pattern #{pattern}."
|
241
|
+
end
|
242
|
+
|
243
|
+
# resource path
|
244
|
+
local_var_path = '/webhook/{identifier}'.sub('{' + 'identifier' + '}', CGI.escape(identifier.to_s))
|
245
|
+
|
246
|
+
# query parameters
|
247
|
+
query_params = opts[:query_params] || {}
|
248
|
+
|
249
|
+
# header parameters
|
250
|
+
header_params = opts[:header_params] || {}
|
251
|
+
# HTTP header 'Accept' (if needed)
|
252
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
253
|
+
|
254
|
+
# form parameters
|
255
|
+
form_params = opts[:form_params] || {}
|
256
|
+
|
257
|
+
# http body (model)
|
258
|
+
post_body = opts[:debug_body]
|
259
|
+
|
260
|
+
# return_type
|
261
|
+
return_type = opts[:debug_return_type] || 'RestRWebhook'
|
262
|
+
|
263
|
+
# auth_names
|
264
|
+
auth_names = opts[:debug_auth_names] || ['TeamApiKey']
|
265
|
+
|
266
|
+
new_options = opts.merge(
|
267
|
+
:operation => :"WebhookApi.get_webhook",
|
268
|
+
:header_params => header_params,
|
269
|
+
:query_params => query_params,
|
270
|
+
:form_params => form_params,
|
271
|
+
:body => post_body,
|
272
|
+
:auth_names => auth_names,
|
273
|
+
:return_type => return_type
|
274
|
+
)
|
275
|
+
|
276
|
+
data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
|
277
|
+
if @api_client.config.debugging
|
278
|
+
@api_client.config.logger.debug "API called: WebhookApi#get_webhook\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
279
|
+
end
|
280
|
+
return data, status_code, headers
|
281
|
+
end
|
282
|
+
|
283
|
+
# Update webhook
|
284
|
+
# Updates webhook configuration.
|
285
|
+
# @param rest_e_webhook [RestEWebhook]
|
286
|
+
# @param identifier [String] Webhook identifier to update
|
287
|
+
# @param [Hash] opts the optional parameters
|
288
|
+
# @return [RestRWebhook]
|
289
|
+
def update_webhook(rest_e_webhook, identifier, opts = {})
|
290
|
+
data, _status_code, _headers = update_webhook_with_http_info(rest_e_webhook, identifier, opts)
|
291
|
+
data
|
292
|
+
end
|
293
|
+
|
294
|
+
# Update webhook
|
295
|
+
# Updates webhook configuration.
|
296
|
+
# @param rest_e_webhook [RestEWebhook]
|
297
|
+
# @param identifier [String] Webhook identifier to update
|
298
|
+
# @param [Hash] opts the optional parameters
|
299
|
+
# @return [Array<(RestRWebhook, Integer, Hash)>] RestRWebhook data, response status code and response headers
|
300
|
+
def update_webhook_with_http_info(rest_e_webhook, identifier, opts = {})
|
301
|
+
if @api_client.config.debugging
|
302
|
+
@api_client.config.logger.debug 'Calling API: WebhookApi.update_webhook ...'
|
303
|
+
end
|
304
|
+
# verify the required parameter 'rest_e_webhook' is set
|
305
|
+
if @api_client.config.client_side_validation && rest_e_webhook.nil?
|
306
|
+
fail ArgumentError, "Missing the required parameter 'rest_e_webhook' when calling WebhookApi.update_webhook"
|
307
|
+
end
|
308
|
+
# verify the required parameter 'identifier' is set
|
309
|
+
if @api_client.config.client_side_validation && identifier.nil?
|
310
|
+
fail ArgumentError, "Missing the required parameter 'identifier' when calling WebhookApi.update_webhook"
|
311
|
+
end
|
312
|
+
pattern = Regexp.new(/^(webhook_)?[a-zA-Z0-9]{22}$/)
|
313
|
+
if @api_client.config.client_side_validation && identifier !~ pattern
|
314
|
+
fail ArgumentError, "invalid value for 'identifier' when calling WebhookApi.update_webhook, must conform to the pattern #{pattern}."
|
315
|
+
end
|
316
|
+
|
317
|
+
# resource path
|
318
|
+
local_var_path = '/webhook/{identifier}'.sub('{' + 'identifier' + '}', CGI.escape(identifier.to_s))
|
319
|
+
|
320
|
+
# query parameters
|
321
|
+
query_params = opts[:query_params] || {}
|
322
|
+
|
323
|
+
# header parameters
|
324
|
+
header_params = opts[:header_params] || {}
|
325
|
+
# HTTP header 'Accept' (if needed)
|
326
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
327
|
+
# HTTP header 'Content-Type'
|
328
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
329
|
+
if !content_type.nil?
|
330
|
+
header_params['Content-Type'] = content_type
|
331
|
+
end
|
332
|
+
|
333
|
+
# form parameters
|
334
|
+
form_params = opts[:form_params] || {}
|
335
|
+
|
336
|
+
# http body (model)
|
337
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(rest_e_webhook)
|
338
|
+
|
339
|
+
# return_type
|
340
|
+
return_type = opts[:debug_return_type] || 'RestRWebhook'
|
341
|
+
|
342
|
+
# auth_names
|
343
|
+
auth_names = opts[:debug_auth_names] || ['TeamApiKey']
|
344
|
+
|
345
|
+
new_options = opts.merge(
|
346
|
+
:operation => :"WebhookApi.update_webhook",
|
347
|
+
:header_params => header_params,
|
348
|
+
:query_params => query_params,
|
349
|
+
:form_params => form_params,
|
350
|
+
:body => post_body,
|
351
|
+
:auth_names => auth_names,
|
352
|
+
:return_type => return_type
|
353
|
+
)
|
354
|
+
|
355
|
+
data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options)
|
356
|
+
if @api_client.config.debugging
|
357
|
+
@api_client.config.logger.debug "API called: WebhookApi#update_webhook\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
358
|
+
end
|
359
|
+
return data, status_code, headers
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
=begin
|
2
2
|
#SendX REST API
|
3
3
|
|
4
|
-
## Introduction SendX is
|
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:
|
7
|
+
Contact: hello@sendx.io
|
8
8
|
Generated by: https://openapi-generator.tech
|
9
|
-
Generator version: 7.
|
9
|
+
Generator version: 7.13.0
|
10
10
|
|
11
11
|
=end
|
12
12
|
|
@@ -49,7 +49,8 @@ module SendX
|
|
49
49
|
# the data deserialized from response body (may be a Tempfile or nil), response status code and response headers.
|
50
50
|
def call_api(http_method, path, opts = {})
|
51
51
|
request = build_request(http_method, path, opts)
|
52
|
-
tempfile =
|
52
|
+
tempfile = nil
|
53
|
+
(download_file(request) { tempfile = _1 }) if opts[:return_type] == 'File'
|
53
54
|
response = request.run
|
54
55
|
|
55
56
|
if @config.debugging
|
@@ -188,19 +189,17 @@ module SendX
|
|
188
189
|
chunk.force_encoding(encoding)
|
189
190
|
tempfile.write(chunk)
|
190
191
|
end
|
191
|
-
|
192
|
-
|
193
|
-
|
192
|
+
request.on_complete do
|
193
|
+
if !tempfile
|
194
|
+
fail ApiError.new("Failed to create the tempfile based on the HTTP response from the server: #{request.inspect}")
|
195
|
+
end
|
194
196
|
tempfile.close
|
195
197
|
@config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
|
196
198
|
"with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
|
197
199
|
"will be deleted automatically with GC. It's also recommended to delete the temp file "\
|
198
200
|
"explicitly with `tempfile.delete`"
|
199
|
-
|
200
|
-
fail ApiError.new("Failed to create the tempfile based on the HTTP response from the server: #{request.inspect}")
|
201
|
+
yield tempfile if block_given?
|
201
202
|
end
|
202
|
-
|
203
|
-
tempfile
|
204
203
|
end
|
205
204
|
|
206
205
|
# Check if the given MIME is a JSON MIME.
|
@@ -1,12 +1,12 @@
|
|
1
1
|
=begin
|
2
2
|
#SendX REST API
|
3
3
|
|
4
|
-
## Introduction SendX is
|
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:
|
7
|
+
Contact: hello@sendx.io
|
8
8
|
Generated by: https://openapi-generator.tech
|
9
|
-
Generator version: 7.
|
9
|
+
Generator version: 7.13.0
|
10
10
|
|
11
11
|
=end
|
12
12
|
|
@@ -1,12 +1,12 @@
|
|
1
1
|
=begin
|
2
2
|
#SendX REST API
|
3
3
|
|
4
|
-
## Introduction SendX is
|
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:
|
7
|
+
Contact: hello@sendx.io
|
8
8
|
Generated by: https://openapi-generator.tech
|
9
|
-
Generator version: 7.
|
9
|
+
Generator version: 7.13.0
|
10
10
|
|
11
11
|
=end
|
12
12
|
|
@@ -244,12 +244,12 @@ module SendX
|
|
244
244
|
# Returns Auth Settings hash for api client.
|
245
245
|
def auth_settings
|
246
246
|
{
|
247
|
-
'
|
247
|
+
'TeamApiKey' =>
|
248
248
|
{
|
249
249
|
type: 'api_key',
|
250
250
|
in: 'header',
|
251
251
|
key: 'X-Team-ApiKey',
|
252
|
-
value: api_key_with_prefix('
|
252
|
+
value: api_key_with_prefix('X-Team-ApiKey')
|
253
253
|
},
|
254
254
|
}
|
255
255
|
end
|
@@ -262,12 +262,8 @@ module SendX
|
|
262
262
|
description: "Production server",
|
263
263
|
},
|
264
264
|
{
|
265
|
-
url: "https://
|
265
|
+
url: "https://stag1.sendx.io/api/v1/rest",
|
266
266
|
description: "Staging server",
|
267
|
-
},
|
268
|
-
{
|
269
|
-
url: "http://localhost:8080/api/v1/rest",
|
270
|
-
description: "Local server",
|
271
267
|
}
|
272
268
|
]
|
273
269
|
end
|