SendX REST API
Project description
SendX Python SDK
🚀 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:
- Input Models (
RestE*): For API requests - Output Models (
RestR*): For API responses with prefixed IDs - Internal Models: Core business logic (not exposed in API)
🔐 Security & Authentication
SendX uses API key authentication:
Team API Key
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:
{
"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:
📞 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
Requirements.
Python 3.9+
Installation & Usage
pip install
If the python package is hosted on a repository, you can install directly using:
pip install sendx
(you may need to run pip with root permission: sudo pip install git+https://github.com/sendx/sendx-python-sdk.git)
Then import the package:
import sendx_python_sdk
Tests
Execute pytest to run the tests.
Getting Started
Please follow the installation procedure and then run the following:
import sendx_python_sdk
from sendx_python_sdk.models.contact_request import ContactRequest
from sendx_python_sdk.models.response import Response
from sendx_python_sdk.rest import ApiException
from pprint import pprint
configuration = sendx_python_sdk.Configuration()
# Configure API key authorization: TeamApiKey
configuration.api_key['TeamApiKey'] = os.environ["API_KEY"]
# Enter a context with an instance of the API client
with sendx_python_sdk.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = sendx_python_sdk.ContactApi(api_client)
contact_request = sendx_python_sdk.ContactRequest() # ContactRequest |
contact_request.email = "johndoe@sendx.io"
contact_request.first_name = "John"
contact_request.last_name = "Doe"
contact_request.company = "SendX"
contact_request.tags = ["12nb32nk43k2", "34njnk42bkj3"]
contact_request.custom_fields = {"1434nfk324kn4d": "VIP", "34njnk42bkj3": "Gold"}
contact_request.last_tracked_ip = "34.212.42.122"
try:
# Create a contact
api_response = api_instance.create_contact(contact_request)
print("The response of ContactApi->create_contact:\n")
pprint(api_response)
except ApiException as e:
print("Exception when calling CampaignApi->create_campaign: %s\n" % e)
Documentation for API Endpoints
All URIs are relative to https://api.sendx.io/api/v1/rest
| Class | Method | HTTP request | Description |
|---|---|---|---|
| CampaignApi | create_campaign | POST /campaign | Create campaign |
| CampaignApi | delete_campaign | DELETE /campaign/{identifier} | Delete campaign |
| CampaignApi | get_all_campaigns | GET /campaign | Get all campaigns |
| CampaignApi | get_campaign | GET /campaign/{identifier} | Get campaign by ID |
| ContactApi | create_contact | POST /contact | Create a new contact |
| ContactApi | delete_contact | DELETE /contact/{identifier} | Delete contact |
| ContactApi | get_all_contacts | GET /contact | Get all contacts |
| ContactApi | get_contact | GET /contact/{identifier} | Get contact by ID |
| ContactApi | unsubscribe_contact | POST /contact/unsubscribe/{identifier} | Unsubscribe contact |
| ContactApi | update_contact | PUT /contact/{identifier} | Update contact |
| CustomFieldApi | create_custom_field | POST /customfield | Create custom field |
| CustomFieldApi | delete_custom_field | DELETE /customfield/{identifier} | Delete custom field |
| CustomFieldApi | get_all_custom_fields | GET /customfield | Get all custom fields |
| CustomFieldApi | get_custom_field | GET /customfield/{identifier} | Get custom field by ID |
| CustomFieldApi | update_custom_field | PUT /customfield/{identifier} | Update custom field |
| EmailSendingApi | send_email | POST /send/email | Send transactional email |
| EmailSendingApi | send_email_with_template | POST /send/template | Send email using template |
| EventApi | events_custom_postback_get | GET /events/custom/postback | Custom Event Postback URL |
| EventApi | events_revenue_postback_get | GET /events/revenue/postback | Revenue Event Postback URL |
| EventsApi | track_custom_event | POST /events/custom | Track custom event |
| EventsApi | track_revenue_event | POST /events/revenue | Track revenue event |
| ListApi | create_list | POST /list | Create list |
| ListApi | delete_list | DELETE /list/{identifier} | Delete list |
| ListApi | get_all_lists | GET /list | Get all lists |
| ListApi | get_list | GET /list/{identifier} | Get list by ID |
| ListApi | update_list | PUT /list/{identifier} | Update list |
| PostApi | create_post | POST /post | Create blog post |
| PostApi | delete_post | DELETE /post/{identifier} | Delete post |
| PostApi | get_all_posts | GET /post | Get all posts |
| PostApi | get_post | GET /post/{identifier} | Get post by ID |
| PostApi | update_post | PUT /post/{identifier} | Update post |
| PostCategoryApi | create_post_category | POST /post/category | Create post category |
| PostCategoryApi | delete_post_category | DELETE /post/category/{identifier} | Delete post category |
| PostCategoryApi | get_all_post_categories | GET /post/category | Get all post categories |
| PostCategoryApi | get_post_category | GET /post/category/{identifier} | Get post category by ID |
| PostCategoryApi | update_post_category | PUT /post/category/{identifier} | Update post category |
| PostTagApi | create_post_tag | POST /post/tag | Create post tag |
| PostTagApi | delete_post_tag | DELETE /post/tag/{identifier} | Delete post tag |
| PostTagApi | get_all_post_tags | GET /post/tag | Get all post tags |
| PostTagApi | get_post_tag | GET /post/tag/{identifier} | Get post tag by ID |
| PostTagApi | update_post_tag | PUT /post/tag/{identifier} | Update post tag |
| ReportApi | get_campaign_report | GET /report/campaign/{identifier} | Get campaign report |
| SenderApi | create_sender | POST /sender | Create sender |
| SenderApi | get_all_senders | GET /sender | Get all senders |
| TagApi | create_tag | POST /tag | Create tag |
| TagApi | delete_tag | DELETE /tag/{identifier} | Delete tag |
| TagApi | get_all_tags | GET /tag | Get all tags |
| TagApi | get_tag | GET /tag/{identifier} | Get tag by ID |
| TagApi | update_tag | PUT /tag/{identifier} | Update tag |
| TeamMemberApi | get_all_team_members | GET /team/member | Get all team members |
| TeamMemberApi | get_team_member | GET /team/member/{identifier} | Get a team member by ID |
| TemplateApi | create_email_template | POST /template/email | Create email template |
| TemplateApi | delete_email_template | DELETE /template/email/{identifier} | Delete template |
| TemplateApi | get_all_email_templates | GET /template/email | Get all templates |
| TemplateApi | get_email_template | GET /template/email/{identifier} | Get template by ID |
| TemplateApi | update_email_template | PUT /template/email/{identifier} | Update template |
| TrackingApi | identify_contact | POST /contact/identify | Identify contact |
| TrackingApi | track_contact | POST /contact/track | Track contact |
| WebhookApi | create_webhook | POST /webhook | Create webhook |
| WebhookApi | delete_webhook | DELETE /webhook/{identifier} | Delete webhook |
| WebhookApi | get_all_webhooks | GET /webhook | Get all webhooks |
| WebhookApi | get_webhook | GET /webhook/{identifier} | Get webhook by ID |
| WebhookApi | update_webhook | PUT /webhook/{identifier} | Update webhook |
Documentation For Models
- CustomEventRequest
- DeleteResponse
- ErrorResponse
- EventResponse
- EventsRevenuePostbackGet200Response
- EventsRevenuePostbackGet400Response
- EventsRevenuePostbackGet500Response
- IdentifyRequest
- IdentifyResponse
- LinkStat
- MessageResponse
- PostbackResponse
- RestECampaign
- RestEContact
- RestECustomField
- RestEList
- RestEPost
- RestEPostCategory
- RestEPostTag
- RestESender
- RestETag
- RestETemplate
- RestEWebhook
- RestRCampaign
- RestRContact
- RestRCustomField
- RestRList
- RestRMember
- RestRPost
- RestRPostCategory
- RestRPostTag
- RestRSender
- RestRTag
- RestRTemplate
- RestRWebhook
- RestReportData
- RevenueEventRequest
- TemplateEmailMessage
- TrackRequest
- TrackResponse
- WebhookObject
- XEmailMessage
- XEmailResponse
- XFrom
- XReplyTo
- XTo
Documentation For Authorization
Authentication schemes defined for the API:
TeamApiKey
- Type: API key
- API key parameter name: X-Team-ApiKey
- Location: HTTP header
Author
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sendx-2.0.0.tar.gz.
File metadata
- Download URL: sendx-2.0.0.tar.gz
- Upload date:
- Size: 137.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c4cf659581d562ffba62da964f2fb14915893667a20300a4eef9dd6c61aabd5
|
|
| MD5 |
2902d49c6b866db2f1b95e2b144bc0bb
|
|
| BLAKE2b-256 |
dbf1e6627cf0a63454c973e29a6b85a810bb3ede3ae7dc50f6db08a7a9a0fc51
|
File details
Details for the file sendx-2.0.0-py3-none-any.whl.
File metadata
- Download URL: sendx-2.0.0-py3-none-any.whl
- Upload date:
- Size: 341.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd3ae0790ad4c373c6e5bb662afcac163010de0a16874aa00ba861d3c61fc5bf
|
|
| MD5 |
15e804029a6ac6b3a25ccb47b3d3dc41
|
|
| BLAKE2b-256 |
3ef976c0b4262bf26018e62cd3288cb35eb807ecf485a9480247777f95dfd6c0
|