Skip to main content

Elastic Email REST API

Project description

ElasticEmail

This API is based on the REST API architecture, allowing the user to easily manage their data with this resource-based approach.

Every API call is established on which specific request type (GET, POST, PUT, DELETE) will be used.

The API has a limit of 20 concurrent connections and a hard timeout of 600 seconds per request.

To start using this API, you will need your Access Token (available here). Remember to keep it safe. Required access levels are listed in the given request’s description.

Downloadable library clients can be found in our Github repository here

This Python package is automatically generated by the OpenAPI Generator project:

  • API version: 4.0.0
  • Package version: 4.1.1
  • Build package: org.openapitools.codegen.languages.PythonClientCodegen

Requirements.

Python >=3.7

Migration from other generators like python and python-legacy

Changes

  1. This generator uses spec case for all (object) property names and parameter names.
    • So if the spec has a property name like camelCase, it will use camelCase rather than camel_case
    • So you will need to update how you input and read properties to use spec case
  2. Endpoint parameters are stored in dictionaries to prevent collisions (explanation below)
    • So you will need to update how you pass data in to endpoints
  3. Endpoint responses now include the original response, the deserialized response body, and (todo)the deserialized headers
    • So you will need to update your code to use response.body to access deserialized data
  4. All validated data is instantiated in an instance that subclasses all validated Schema classes and Decimal/str/list/tuple/frozendict/NoneClass/BoolClass/bytes/io.FileIO
    • This means that you can use isinstance to check if a payload validated against a schema class
    • This means that no data will be of type None/True/False
      • ingested None will subclass NoneClass
      • ingested True will subclass BoolClass
      • ingested False will subclass BoolClass
      • So if you need to check is True/False/None, instead use instance.is_true_oapg()/.is_false_oapg()/.is_none_oapg()
  5. All validated class instances are immutable except for ones based on io.File
    • This is because if properties were changed after validation, that validation would no longer apply
    • So no changing values or property values after a class has been instantiated
  6. String + Number types with formats
    • String type data is stored as a string and if you need to access types based on its format like date, date-time, uuid, number etc then you will need to use accessor functions on the instance
    • type string + format: See .as_date_oapg, .as_datetime_oapg, .as_decimal_oapg, .as_uuid_oapg
    • type number + format: See .as_float_oapg, .as_int_oapg
    • this was done because openapi/json-schema defines constraints. string data may be type string with no format keyword in one schema, and include a format constraint in another schema
    • So if you need to access a string format based type, use as_date_oapg/as_datetime_oapg/as_decimal_oapg/as_uuid_oapg
    • So if you need to access a number format based type, use as_int_oapg/as_float_oapg
  7. Property access on AnyType(type unset) or object(dict) schemas
    • Only required keys with valid python names are properties like .someProp and have type hints
    • All optional keys may not exist, so properties are not defined for them
    • One can access optional values with dict_instance['optionalProp'] and KeyError will be raised if it does not exist
    • Use get_item_oapg if you need a way to always get a value whether or not the key exists
      • If the key does not exist, schemas.unset is returned from calling dict_instance.get_item_oapg('optionalProp')
      • All required and optional keys have type hints for this method, and @typing.overload is used
      • A type hint is also generated for additionalProperties accessed using this method
    • So you will need to update you code to use some_instance['optionalProp'] to access optional property and additionalProperty values
  8. The location of the api classes has changed
    • Api classes are located in your_package.apis.tags.some_api
    • This change was made to eliminate redundant code generation
    • Legacy generators generated the same endpoint twice if it had > 1 tag on it
    • This generator defines an endpoint in one class, then inherits that class to generate apis by tags and by paths
    • This change reduces code and allows quicker run time if you use the path apis
      • path apis are at your_package.apis.paths.some_path
    • Those apis will only load their needed models, which is less to load than all of the resources needed in a tag api
    • So you will need to update your import paths to the api classes

Why are Oapg and _oapg used in class and method names?

Classes can have arbitrarily named properties set on them Endpoints can have arbitrary operationId method names set For those reasons, I use the prefix Oapg and _oapg to greatly reduce the likelihood of collisions on protected + public classes/methods. oapg stands for OpenApi Python Generator.

Object property spec case

This was done because when payloads are ingested, they can be validated against N number of schemas. If the input signature used a different property name then that has mutated the payload. So SchemaA and SchemaB must both see the camelCase spec named variable. Also it is possible to send in two properties, named camelCase and camel_case in the same payload. That use case should be support so spec case is used.

Parameter spec case

Parameters can be included in different locations including:

  • query
  • path
  • header
  • cookie

Any of those parameters could use the same parameter names, so if every parameter was included as an endpoint parameter in a function signature, they would collide. For that reason, each of those inputs have been separated out into separate typed dictionaries:

  • query_params
  • path_params
  • header_params
  • cookie_params

So when updating your code, you will need to pass endpoint parameters in using those dictionaries.

Endpoint responses

Endpoint responses have been enriched to now include more information. Any response reom an endpoint will now include the following properties: response: urllib3.HTTPResponse body: typing.Union[Unset, Schema] headers: typing.Union[Unset, TODO] Note: response header deserialization has not yet been added

Installation & Usage

pip install

If the python package is hosted on a repository, you can install directly using:

pip install git+https://github.com/elasticemail/elasticemail-python.git

(you may need to run pip with root permission: sudo pip install git+https://github.com/elasticemail/elasticemail-python.git)

Then import the package:

import ElasticEmail

Setuptools

Install via Setuptools.

python setup.py install --user

(or sudo python setup.py install to install the package for all users)

Then import the package:

import ElasticEmail

Getting Started

Please follow the installation procedure and then run the following:

import time
import ElasticEmail
from pprint import pprint
from ElasticEmail.apis.tags import campaigns_api
from ElasticEmail.model.campaign import Campaign
# Defining the host is optional and defaults to https://api.elasticemail.com/v4
# See configuration.py for a list of all supported configuration parameters.
configuration = ElasticEmail.Configuration(
    host = "https://api.elasticemail.com/v4"
)

# The client must configure the authentication and authorization parameters
# in accordance with the API server security policy.
# Examples for each auth method are provided below, use the example that
# satisfies your auth use case.

# Configure API key authorization: apikey
configuration.api_key['apikey'] = 'YOUR_API_KEY'

# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
# configuration.api_key_prefix['apikey'] = 'Bearer'

# Enter a context with an instance of the API client
with ElasticEmail.ApiClient(configuration) as api_client:
    # Create an instance of the API class
    api_instance = campaigns_api.CampaignsApi(api_client)
    name = "name_example" # str | Name of Campaign to delete

    try:
        # Delete Campaign
        api_instance.campaigns_by_name_delete(name)
    except ElasticEmail.ApiException as e:
        print("Exception when calling CampaignsApi->campaigns_by_name_delete: %s\n" % e)

Examples

Function
addCampaign readme
addContacts readme
addList readme
addTemplate readme
deleteCampaign readme
deleteContacts readme
deleteList readme
deleteTemplate readme
exportContacts readme
loadCampaign readme
loadCampaignsStats readme
loadChannelsStats readme
loadList readme
loadStatistics readme
loadTemplate readme
sendBulkEmails readme
sendTransactionalEmails readme
updateCampaign readme
uploadContacts readme

Documentation for API Endpoints

All URIs are relative to https://api.elasticemail.com/v4

Class Method HTTP request Description
CampaignsApi campaigns_by_name_delete delete /campaigns/{name} Delete Campaign
CampaignsApi campaigns_by_name_get get /campaigns/{name} Load Campaign
CampaignsApi campaigns_by_name_put put /campaigns/{name} Update Campaign
CampaignsApi campaigns_get get /campaigns Load Campaigns
CampaignsApi campaigns_post post /campaigns Add Campaign
ContactsApi contacts_by_email_delete delete /contacts/{email} Delete Contact
ContactsApi contacts_by_email_get get /contacts/{email} Load Contact
ContactsApi contacts_by_email_put put /contacts/{email} Update Contact
ContactsApi contacts_delete_post post /contacts/delete Delete Contacts Bulk
ContactsApi contacts_export_by_id_status_get get /contacts/export/{id}/status Check Export Status
ContactsApi contacts_export_post post /contacts/export Export Contacts
ContactsApi contacts_get get /contacts Load Contacts
ContactsApi contacts_import_post post /contacts/import Upload Contacts
ContactsApi contacts_post post /contacts Add Contact
EmailsApi emails_by_msgid_view_get get /emails/{msgid}/view View Email
EmailsApi emails_by_transactionid_status_get get /emails/{transactionid}/status Get Status
EmailsApi emails_mergefile_post post /emails/mergefile Send Bulk Emails CSV
EmailsApi emails_post post /emails Send Bulk Emails
EmailsApi emails_transactional_post post /emails/transactional Send Transactional Email
EventsApi events_by_transactionid_get get /events/{transactionid} Load Email Events
EventsApi events_channels_by_name_export_post post /events/channels/{name}/export Export Channel Events
EventsApi events_channels_by_name_get get /events/channels/{name} Load Channel Events
EventsApi events_channels_export_by_id_status_get get /events/channels/export/{id}/status Check Channel Export Status
EventsApi events_export_by_id_status_get get /events/export/{id}/status Check Export Status
EventsApi events_export_post post /events/export Export Events
EventsApi events_get get /events Load Events
FilesApi files_by_name_delete delete /files/{name} Delete File
FilesApi files_by_name_get get /files/{name} Download File
FilesApi files_by_name_info_get get /files/{name}/info Load File Details
FilesApi files_get get /files List Files
FilesApi files_post post /files Upload File
InboundRouteApi inboundroute_by_id_delete delete /inboundroute/{id} Delete Route
InboundRouteApi inboundroute_by_id_get get /inboundroute/{id} Get Route
InboundRouteApi inboundroute_by_id_put put /inboundroute/{id} Update Route
InboundRouteApi inboundroute_get get /inboundroute Get Routes
InboundRouteApi inboundroute_order_put put /inboundroute/order Update Sorting
InboundRouteApi inboundroute_post post /inboundroute Create Route
ListsApi lists_by_listname_contacts_get get /lists/{listname}/contacts Load Contacts in List
ListsApi lists_by_name_contacts_post post /lists/{name}/contacts Add Contacts to List
ListsApi lists_by_name_contacts_remove_post post /lists/{name}/contacts/remove Remove Contacts from List
ListsApi lists_by_name_delete delete /lists/{name} Delete List
ListsApi lists_by_name_get get /lists/{name} Load List
ListsApi lists_by_name_put put /lists/{name} Update List
ListsApi lists_get get /lists Load Lists
ListsApi lists_post post /lists Add List
SecurityApi security_apikeys_by_name_delete delete /security/apikeys/{name} Delete ApiKey
SecurityApi security_apikeys_by_name_get get /security/apikeys/{name} Load ApiKey
SecurityApi security_apikeys_by_name_put put /security/apikeys/{name} Update ApiKey
SecurityApi security_apikeys_get get /security/apikeys List ApiKeys
SecurityApi security_apikeys_post post /security/apikeys Add ApiKey
SecurityApi security_smtp_by_name_delete delete /security/smtp/{name} Delete SMTP Credential
SecurityApi security_smtp_by_name_get get /security/smtp/{name} Load SMTP Credential
SecurityApi security_smtp_by_name_put put /security/smtp/{name} Update SMTP Credential
SecurityApi security_smtp_get get /security/smtp List SMTP Credentials
SecurityApi security_smtp_post post /security/smtp Add SMTP Credential
SegmentsApi segments_by_name_delete delete /segments/{name} Delete Segment
SegmentsApi segments_by_name_get get /segments/{name} Load Segment
SegmentsApi segments_by_name_put put /segments/{name} Update Segment
SegmentsApi segments_get get /segments Load Segments
SegmentsApi segments_post post /segments Add Segment
StatisticsApi statistics_campaigns_by_name_get get /statistics/campaigns/{name} Load Campaign Stats
StatisticsApi statistics_campaigns_get get /statistics/campaigns Load Campaigns Stats
StatisticsApi statistics_channels_by_name_get get /statistics/channels/{name} Load Channel Stats
StatisticsApi statistics_channels_get get /statistics/channels Load Channels Stats
StatisticsApi statistics_get get /statistics Load Statistics
SubAccountsApi subaccounts_by_email_credits_patch patch /subaccounts/{email}/credits Add, Subtract Email Credits
SubAccountsApi subaccounts_by_email_delete delete /subaccounts/{email} Delete SubAccount
SubAccountsApi subaccounts_by_email_get get /subaccounts/{email} Load SubAccount
SubAccountsApi subaccounts_by_email_settings_email_put put /subaccounts/{email}/settings/email Update SubAccount Email Settings
SubAccountsApi subaccounts_get get /subaccounts Load SubAccounts
SubAccountsApi subaccounts_post post /subaccounts Add SubAccount
SuppressionsApi suppressions_bounces_get get /suppressions/bounces Get Bounce List
SuppressionsApi suppressions_bounces_import_post post /suppressions/bounces/import Add Bounces Async
SuppressionsApi suppressions_bounces_post post /suppressions/bounces Add Bounces
SuppressionsApi suppressions_by_email_delete delete /suppressions/{email} Delete Suppression
SuppressionsApi suppressions_by_email_get get /suppressions/{email} Get Suppression
SuppressionsApi suppressions_complaints_get get /suppressions/complaints Get Complaints List
SuppressionsApi suppressions_complaints_import_post post /suppressions/complaints/import Add Complaints Async
SuppressionsApi suppressions_complaints_post post /suppressions/complaints Add Complaints
SuppressionsApi suppressions_get get /suppressions Get Suppressions
SuppressionsApi suppressions_unsubscribes_get get /suppressions/unsubscribes Get Unsubscribes List
SuppressionsApi suppressions_unsubscribes_import_post post /suppressions/unsubscribes/import Add Unsubscribes Async
SuppressionsApi suppressions_unsubscribes_post post /suppressions/unsubscribes Add Unsubscribes
TemplatesApi templates_by_name_delete delete /templates/{name} Delete Template
TemplatesApi templates_by_name_get get /templates/{name} Load Template
TemplatesApi templates_by_name_put put /templates/{name} Update Template
TemplatesApi templates_get get /templates Load Templates
TemplatesApi templates_post post /templates Add Template
VerificationsApi verifications_by_email_delete delete /verifications/{email} Delete Email Verification Result
VerificationsApi verifications_by_email_get get /verifications/{email} Get Email Verification Result
VerificationsApi verifications_by_email_post post /verifications/{email} Verify Email
VerificationsApi verifications_files_by_id_delete delete /verifications/files/{id} Delete File Verification Result
VerificationsApi verifications_files_by_id_result_download_get get /verifications/files/{id}/result/download Download File Verification Result
VerificationsApi verifications_files_by_id_result_get get /verifications/files/{id}/result Get Detailed File Verification Result
VerificationsApi verifications_files_by_id_verification_post post /verifications/files/{id}/verification Start verification
VerificationsApi verifications_files_post post /verifications/files Upload File with Emails
VerificationsApi verifications_files_result_get get /verifications/files/result Get Files Verification Results
VerificationsApi verifications_get get /verifications Get Emails Verification Results

Documentation For Models

Documentation For Authorization

Authentication schemes defined for the API:

apikey

  • Type: API key
  • API key parameter name: X-ElasticEmail-ApiKey
  • Location: HTTP header

Author

support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com support@elasticemail.com

Notes for Large OpenAPI documents

If the OpenAPI document is large, imports in ElasticEmail.apis and ElasticEmail.models may fail with a RecursionError indicating the maximum recursion limit has been exceeded. In that case, there are a couple of solutions:

Solution 1: Use specific imports for apis and models like:

  • from ElasticEmail.apis.default_api import DefaultApi
  • from ElasticEmail.model.pet import Pet

Solution 1: Before importing the package, adjust the maximum recursion limit as shown below:

import sys
sys.setrecursionlimit(1500)
import ElasticEmail
from ElasticEmail.apis import *
from ElasticEmail.models import *

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

elasticemail-4.1.1.tar.gz (206.7 kB view details)

Uploaded Source

Built Distribution

ElasticEmail-4.1.1-py3-none-any.whl (776.9 kB view details)

Uploaded Python 3

File details

Details for the file elasticemail-4.1.1.tar.gz.

File metadata

  • Download URL: elasticemail-4.1.1.tar.gz
  • Upload date:
  • Size: 206.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for elasticemail-4.1.1.tar.gz
Algorithm Hash digest
SHA256 3832e8946785469678e867137e1616756bd69bc964a7e2e29a22ce02ae1788e0
MD5 b1d169c0c77d87bb8ed4744be338d52c
BLAKE2b-256 092590db4b28a839d7dc3b13c8ad349a46f78dee8845555cc77843c582c1d1fa

See more details on using hashes here.

File details

Details for the file ElasticEmail-4.1.1-py3-none-any.whl.

File metadata

  • Download URL: ElasticEmail-4.1.1-py3-none-any.whl
  • Upload date:
  • Size: 776.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for ElasticEmail-4.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b897d98330677e19949d2aa55e269a35302608744365bdf9bd4e15ef67e9c18d
MD5 ac3b0ad59d99cd7f23cb48626819ae9d
BLAKE2b-256 a9ce5cd1bef5b910baa42e309918e688395bdcee6b614d9df09060b07ffab22b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page