This is a Bash client script for accessing Elastic Email REST API service.
The script uses cURL underneath for making all REST calls.
# Make sure the script has executable rights
$ chmod u+x ElasticEmail
# Print the list of operations available on the service
$ ./ElasticEmail -h
# Print the service description
$ ./ElasticEmail --about
# Print detailed information about specific operation
$ ./ElasticEmail <operationId> -h
# Make GET request
./ElasticEmail --host http://<hostname>:<port> --accept xml <operationId> <queryParam1>=<value1> <header_key1>:<header_value2>
# Make GET request using arbitrary curl options (must be passed before <operationId>) to an SSL service using username:password
ElasticEmail -k -sS --tlsv1.2 --host https://<hostname> -u <user>:<password> --accept xml <operationId> <queryParam1>=<value1> <header_key1>:<header_value2>
# Make POST request
$ echo '<body_content>' | ElasticEmail --host <hostname> --content-type json <operationId> -
# Make POST request with simple JSON content, e.g.:
# {
#   "key1": "value1",
#   "key2": "value2",
#   "key3": 23
# }
$ echo '<body_content>' | ElasticEmail --host <hostname> --content-type json <operationId> key1==value1 key2=value2 key3:=23 -
# Make POST request with form data
$ ElasticEmail --host <hostname> <operationId> key1:=value1 key2:=value2 key3:=23
# Preview the cURL command without actually executing it
$ ElasticEmail --host http://<hostname>:<port> --dry-run <operationid>
You can easily create a Docker image containing a preconfigured environment for using the REST Bash client including working autocompletion and short welcome message with basic instructions, using the generated Dockerfile:
docker build -t my-rest-client .
docker run -it my-rest-clientBy default you will be logged into a Zsh environment which has much more advanced auto completion, but you can switch to Bash, where basic autocompletion is also available.
The generated bash-completion script can be either directly loaded to the current Bash session using:
source ElasticEmail.bash-completionAlternatively, the script can be copied to the /etc/bash-completion.d (or on OSX with Homebrew to /usr/local/etc/bash-completion.d):
sudo cp ElasticEmail.bash-completion /etc/bash-completion.d/ElasticEmailOn OSX you might need to install bash-completion using Homebrew:
brew install bash-completionand add the following to the ~/.bashrc:
if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion
fiIn Zsh, the generated _ElasticEmail Zsh completion file must be copied to one of the folders under $FPATH variable.
All URIs are relative to /v4
| Class | Method | HTTP request | Description | 
|---|---|---|---|
| CampaignsApi | campaignsByNameDelete | DELETE /campaigns/{name} | Delete Campaign | 
| CampaignsApi | campaignsByNameGet | GET /campaigns/{name} | Load Campaign | 
| CampaignsApi | campaignsByNamePausePut | PUT /campaigns/{name}/pause | Pause Campaign | 
| CampaignsApi | campaignsByNamePut | PUT /campaigns/{name} | Update Campaign | 
| CampaignsApi | campaignsGet | GET /campaigns | Load Campaigns | 
| CampaignsApi | campaignsPost | POST /campaigns | Add Campaign | 
| ContactsApi | contactsByEmailDelete | DELETE /contacts/{email} | Delete Contact | 
| ContactsApi | contactsByEmailGet | GET /contacts/{email} | Load Contact | 
| ContactsApi | contactsByEmailPut | PUT /contacts/{email} | Update Contact | 
| ContactsApi | contactsDeletePost | POST /contacts/delete | Delete Contacts Bulk | 
| ContactsApi | contactsExportByIdStatusGet | GET /contacts/export/{id}/status | Check Export Status | 
| ContactsApi | contactsExportPost | POST /contacts/export | Export Contacts | 
| ContactsApi | contactsGet | GET /contacts | Load Contacts | 
| ContactsApi | contactsImportPost | POST /contacts/import | Upload Contacts | 
| ContactsApi | contactsPost | POST /contacts | Add Contact | 
| DomainsApi | domainsByDomainDelete | DELETE /domains/{domain} | Delete Domain | 
| DomainsApi | domainsByDomainGet | GET /domains/{domain} | Load Domain | 
| DomainsApi | domainsByDomainPut | PUT /domains/{domain} | Update Domain | 
| DomainsApi | domainsByDomainRestrictedGet | GET /domains/{domain}/restricted | Check for domain restriction | 
| DomainsApi | domainsByDomainVerificationPut | PUT /domains/{domain}/verification | Verify Domain | 
| DomainsApi | domainsByEmailDefaultPatch | PATCH /domains/{email}/default | Set Default | 
| DomainsApi | domainsGet | GET /domains | Load Domains | 
| DomainsApi | domainsPost | POST /domains | Add Domain | 
| EmailsApi | emailsByMsgidViewGet | GET /emails/{msgid}/view | View Email | 
| EmailsApi | emailsByTransactionidStatusGet | GET /emails/{transactionid}/status | Get Status | 
| EmailsApi | emailsMergefilePost | POST /emails/mergefile | Send Bulk Emails CSV | 
| EmailsApi | emailsPost | POST /emails | Send Bulk Emails | 
| EmailsApi | emailsTransactionalPost | POST /emails/transactional | Send Transactional Email | 
| EventsApi | eventsByTransactionidGet | GET /events/{transactionid} | Load Email Events | 
| EventsApi | eventsChannelsByNameExportPost | POST /events/channels/{name}/export | Export Channel Events | 
| EventsApi | eventsChannelsByNameGet | GET /events/channels/{name} | Load Channel Events | 
| EventsApi | eventsChannelsExportByIdStatusGet | GET /events/channels/export/{id}/status | Check Channel Export Status | 
| EventsApi | eventsExportByIdStatusGet | GET /events/export/{id}/status | Check Export Status | 
| EventsApi | eventsExportPost | POST /events/export | Export Events | 
| EventsApi | eventsGet | GET /events | Load Events | 
| FilesApi | filesByNameDelete | DELETE /files/{name} | Delete File | 
| FilesApi | filesByNameGet | GET /files/{name} | Download File | 
| FilesApi | filesByNameInfoGet | GET /files/{name}/info | Load File Details | 
| FilesApi | filesGet | GET /files | List Files | 
| FilesApi | filesPost | POST /files | Upload File | 
| InboundRouteApi | inboundrouteByIdDelete | DELETE /inboundroute/{id} | Delete Route | 
| InboundRouteApi | inboundrouteByIdGet | GET /inboundroute/{id} | Get Route | 
| InboundRouteApi | inboundrouteByIdPut | PUT /inboundroute/{id} | Update Route | 
| InboundRouteApi | inboundrouteGet | GET /inboundroute | Get Routes | 
| InboundRouteApi | inboundrouteOrderPut | PUT /inboundroute/order | Update Sorting | 
| InboundRouteApi | inboundroutePost | POST /inboundroute | Create Route | 
| ListsApi | listsByListnameContactsGet | GET /lists/{listname}/contacts | Load Contacts in List | 
| ListsApi | listsByNameContactsPost | POST /lists/{name}/contacts | Add Contacts to List | 
| ListsApi | listsByNameContactsRemovePost | POST /lists/{name}/contacts/remove | Remove Contacts from List | 
| ListsApi | listsByNameDelete | DELETE /lists/{name} | Delete List | 
| ListsApi | listsByNameGet | GET /lists/{name} | Load List | 
| ListsApi | listsByNamePut | PUT /lists/{name} | Update List | 
| ListsApi | listsGet | GET /lists | Load Lists | 
| ListsApi | listsPost | POST /lists | Add List | 
| SecurityApi | securityApikeysByNameDelete | DELETE /security/apikeys/{name} | Delete ApiKey | 
| SecurityApi | securityApikeysByNameGet | GET /security/apikeys/{name} | Load ApiKey | 
| SecurityApi | securityApikeysByNamePut | PUT /security/apikeys/{name} | Update ApiKey | 
| SecurityApi | securityApikeysGet | GET /security/apikeys | List ApiKeys | 
| SecurityApi | securityApikeysPost | POST /security/apikeys | Add ApiKey | 
| SecurityApi | securitySmtpByNameDelete | DELETE /security/smtp/{name} | Delete SMTP Credential | 
| SecurityApi | securitySmtpByNameGet | GET /security/smtp/{name} | Load SMTP Credential | 
| SecurityApi | securitySmtpByNamePut | PUT /security/smtp/{name} | Update SMTP Credential | 
| SecurityApi | securitySmtpGet | GET /security/smtp | List SMTP Credentials | 
| SecurityApi | securitySmtpPost | POST /security/smtp | Add SMTP Credential | 
| SegmentsApi | segmentsByNameDelete | DELETE /segments/{name} | Delete Segment | 
| SegmentsApi | segmentsByNameGet | GET /segments/{name} | Load Segment | 
| SegmentsApi | segmentsByNamePut | PUT /segments/{name} | Update Segment | 
| SegmentsApi | segmentsGet | GET /segments | Load Segments | 
| SegmentsApi | segmentsPost | POST /segments | Add Segment | 
| StatisticsApi | statisticsCampaignsByNameGet | GET /statistics/campaigns/{name} | Load Campaign Stats | 
| StatisticsApi | statisticsCampaignsGet | GET /statistics/campaigns | Load Campaigns Stats | 
| StatisticsApi | statisticsChannelsByNameGet | GET /statistics/channels/{name} | Load Channel Stats | 
| StatisticsApi | statisticsChannelsGet | GET /statistics/channels | Load Channels Stats | 
| StatisticsApi | statisticsGet | GET /statistics | Load Statistics | 
| SubAccountsApi | subaccountsByEmailCreditsPatch | PATCH /subaccounts/{email}/credits | Add, Subtract Email Credits | 
| SubAccountsApi | subaccountsByEmailDelete | DELETE /subaccounts/{email} | Delete SubAccount | 
| SubAccountsApi | subaccountsByEmailGet | GET /subaccounts/{email} | Load SubAccount | 
| SubAccountsApi | subaccountsByEmailSettingsEmailPut | PUT /subaccounts/{email}/settings/email | Update SubAccount Email Settings | 
| SubAccountsApi | subaccountsGet | GET /subaccounts | Load SubAccounts | 
| SubAccountsApi | subaccountsPost | POST /subaccounts | Add SubAccount | 
| SuppressionsApi | suppressionsBouncesGet | GET /suppressions/bounces | Get Bounce List | 
| SuppressionsApi | suppressionsBouncesImportPost | POST /suppressions/bounces/import | Add Bounces Async | 
| SuppressionsApi | suppressionsBouncesPost | POST /suppressions/bounces | Add Bounces | 
| SuppressionsApi | suppressionsByEmailDelete | DELETE /suppressions/{email} | Delete Suppression | 
| SuppressionsApi | suppressionsByEmailGet | GET /suppressions/{email} | Get Suppression | 
| SuppressionsApi | suppressionsComplaintsGet | GET /suppressions/complaints | Get Complaints List | 
| SuppressionsApi | suppressionsComplaintsImportPost | POST /suppressions/complaints/import | Add Complaints Async | 
| SuppressionsApi | suppressionsComplaintsPost | POST /suppressions/complaints | Add Complaints | 
| SuppressionsApi | suppressionsGet | GET /suppressions | Get Suppressions | 
| SuppressionsApi | suppressionsUnsubscribesGet | GET /suppressions/unsubscribes | Get Unsubscribes List | 
| SuppressionsApi | suppressionsUnsubscribesImportPost | POST /suppressions/unsubscribes/import | Add Unsubscribes Async | 
| SuppressionsApi | suppressionsUnsubscribesPost | POST /suppressions/unsubscribes | Add Unsubscribes | 
| TemplatesApi | templatesByNameDelete | DELETE /templates/{name} | Delete Template | 
| TemplatesApi | templatesByNameGet | GET /templates/{name} | Load Template | 
| TemplatesApi | templatesByNamePut | PUT /templates/{name} | Update Template | 
| TemplatesApi | templatesGet | GET /templates | Load Templates | 
| TemplatesApi | templatesPost | POST /templates | Add Template | 
| VerificationsApi | verificationsByEmailDelete | DELETE /verifications/{email} | Delete Email Verification Result | 
| VerificationsApi | verificationsByEmailGet | GET /verifications/{email} | Get Email Verification Result | 
| VerificationsApi | verificationsByEmailPost | POST /verifications/{email} | Verify Email | 
| VerificationsApi | verificationsFilesByIdDelete | DELETE /verifications/files/{id} | Delete File Verification Result | 
| VerificationsApi | verificationsFilesByIdResultDownloadGet | GET /verifications/files/{id}/result/download | Download File Verification Result | 
| VerificationsApi | verificationsFilesByIdResultGet | GET /verifications/files/{id}/result | Get Detailed File Verification Result | 
| VerificationsApi | verificationsFilesByIdVerificationPost | POST /verifications/files/{id}/verification | Start verification | 
| VerificationsApi | verificationsFilesPost | POST /verifications/files | Upload File with Emails | 
| VerificationsApi | verificationsFilesResultGet | GET /verifications/files/result | Get Files Verification Results | 
| VerificationsApi | verificationsGet | GET /verifications | Get Emails Verification Results | 
- AccessLevel
 - AccountStatusEnum
 - ApiKey
 - ApiKeyPayload
 - BodyContentType
 - BodyPart
 - Campaign
 - CampaignOptions
 - CampaignRecipient
 - CampaignStatus
 - CampaignTemplate
 - CertificateValidationStatus
 - ChannelLogStatusSummary
 - CompressionFormat
 - ConsentData
 - ConsentTracking
 - Contact
 - ContactActivity
 - ContactPayload
 - ContactSource
 - ContactStatus
 - ContactUpdatePayload
 - ContactsList
 - DeliveryOptimizationType
 - DomainData
 - DomainDetail
 - DomainOwner
 - DomainPayload
 - DomainUpdatePayload
 - EmailContent
 - EmailData
 - EmailJobFailedStatus
 - EmailJobStatus
 - EmailMessageData
 - EmailPredictedValidationStatus
 - EmailRecipient
 - EmailSend
 - EmailStatus
 - EmailTransactionalMessageData
 - EmailValidationResult
 - EmailValidationStatus
 - EmailView
 - EmailsPayload
 - EncodingType
 - EventType
 - EventsOrderBy
 - ExportFileFormats
 - ExportLink
 - ExportStatus
 - FileInfo
 - FilePayload
 - FileUploadResult
 - InboundPayload
 - InboundRoute
 - InboundRouteActionType
 - InboundRouteFilterType
 - ListPayload
 - ListUpdatePayload
 - LogJobStatus
 - LogStatusSummary
 - MergeEmailPayload
 - MessageAttachment
 - MessageCategory
 - MessageCategoryEnum
 - NewApiKey
 - NewSmtpCredentials
 - Options
 - RecipientEvent
 - Segment
 - SegmentPayload
 - SmtpCredentials
 - SmtpCredentialsPayload
 - SortOrderItem
 - SplitOptimizationType
 - SplitOptions
 - SubAccountInfo
 - SubaccountEmailCreditsPayload
 - SubaccountEmailSettings
 - SubaccountEmailSettingsPayload
 - SubaccountPayload
 - SubaccountSettingsInfo
 - SubaccountSettingsInfoPayload
 - Suppression
 - Template
 - TemplatePayload
 - TemplateScope
 - TemplateType
 - TrackingType
 - TrackingValidationStatus
 - TransactionalRecipient
 - Utm
 - VerificationFileResult
 - VerificationFileResultDetails
 - VerificationStatus
 
- Type: API key
 - API key parameter name: X-ElasticEmail-ApiKey
 - Location: HTTP header
 
- Type: API key
 - API key parameter name: X-Auth-Token
 - Location: HTTP header