openapi: 3.0.1 info: title: SendPulse API description: >- REST API for the SendPulse multichannel marketing platform. Covers email address books and bulk campaigns, SMTP transactional email, SMS, web push notifications, chatbots, and Automation 360. All requests are made over HTTPS against https://api.sendpulse.com and authenticated with a Bearer access token obtained via the OAuth2 client_credentials grant at POST /oauth/access_token. Tokens are valid for approximately one hour. termsOfService: https://sendpulse.com/legal/terms contact: name: SendPulse Support url: https://sendpulse.com/contacts version: '1.0' servers: - url: https://api.sendpulse.com security: - bearerAuth: [] tags: - name: Authorization description: OAuth2 token issuance. - name: Address Books description: Mailing lists and their subscribers. - name: Email Campaigns description: Bulk email campaign creation and reporting. - name: Senders description: Email sender addresses. - name: Email Blacklist description: Global email blacklist management. - name: SMTP description: Transactional email sending and tracking. - name: SMS description: SMS phone management and campaigns. - name: Web Push description: Web push websites, subscriptions, and campaigns. - name: Automation 360 description: Event-triggered automation flows. - name: Account description: Account balance. paths: /oauth/access_token: post: operationId: getAccessToken tags: - Authorization summary: Obtain an OAuth2 access token. security: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TokenRequest' responses: '200': description: Access token issued. content: application/json: schema: $ref: '#/components/schemas/TokenResponse' /addressbooks: get: operationId: listAddressBooks tags: - Address Books summary: List address books. parameters: - name: limit in: query schema: type: integer - name: offset in: query schema: type: integer responses: '200': description: A list of address books. content: application/json: schema: type: array items: $ref: '#/components/schemas/AddressBook' post: operationId: createAddressBook tags: - Address Books summary: Create an address book. requestBody: required: true content: application/json: schema: type: object required: - bookName properties: bookName: type: string responses: '200': description: Address book created. content: application/json: schema: $ref: '#/components/schemas/CreateResult' /addressbooks/{id}: get: operationId: getAddressBook tags: - Address Books summary: Get information about an address book. parameters: - $ref: '#/components/parameters/AddressBookId' responses: '200': description: Address book information. content: application/json: schema: type: array items: $ref: '#/components/schemas/AddressBook' put: operationId: editAddressBook tags: - Address Books summary: Edit an address book name. parameters: - $ref: '#/components/parameters/AddressBookId' requestBody: required: true content: application/json: schema: type: object required: - name properties: name: type: string responses: '200': description: Address book updated. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' delete: operationId: deleteAddressBook tags: - Address Books summary: Remove an address book. parameters: - $ref: '#/components/parameters/AddressBookId' responses: '200': description: Address book removed. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /addressbooks/{id}/emails: get: operationId: listEmailsFromBook tags: - Address Books summary: List emails in an address book. parameters: - $ref: '#/components/parameters/AddressBookId' responses: '200': description: A list of subscribers. content: application/json: schema: type: array items: $ref: '#/components/schemas/Subscriber' post: operationId: addEmailsToBook tags: - Address Books summary: Add emails to an address book. parameters: - $ref: '#/components/parameters/AddressBookId' requestBody: required: true content: application/json: schema: type: object required: - emails properties: emails: type: array items: $ref: '#/components/schemas/SubscriberInput' responses: '200': description: Emails added. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' delete: operationId: removeEmailsFromBook tags: - Address Books summary: Remove emails from an address book. parameters: - $ref: '#/components/parameters/AddressBookId' requestBody: required: true content: application/json: schema: type: object required: - emails properties: emails: type: array items: type: string format: email responses: '200': description: Emails removed. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /campaigns: get: operationId: listCampaigns tags: - Email Campaigns summary: List email campaigns. parameters: - name: limit in: query schema: type: integer - name: offset in: query schema: type: integer responses: '200': description: A list of campaigns. content: application/json: schema: type: array items: $ref: '#/components/schemas/Campaign' post: operationId: createCampaign tags: - Email Campaigns summary: Create and send an email campaign. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CampaignInput' responses: '200': description: Campaign created. content: application/json: schema: $ref: '#/components/schemas/Campaign' /campaigns/{id}: get: operationId: getCampaign tags: - Email Campaigns summary: Get email campaign information. parameters: - name: id in: path required: true schema: type: integer responses: '200': description: Campaign information. content: application/json: schema: $ref: '#/components/schemas/Campaign' delete: operationId: cancelCampaign tags: - Email Campaigns summary: Cancel an email campaign. parameters: - name: id in: path required: true schema: type: integer responses: '200': description: Campaign cancelled. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /senders: get: operationId: listSenders tags: - Senders summary: List email senders. responses: '200': description: A list of senders. content: application/json: schema: type: array items: $ref: '#/components/schemas/Sender' post: operationId: addSender tags: - Senders summary: Add an email sender. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Sender' responses: '200': description: Sender added. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /blacklist: get: operationId: listBlacklist tags: - Email Blacklist summary: View blacklisted emails. responses: '200': description: A list of blacklisted emails. content: application/json: schema: type: array items: type: string format: email post: operationId: addToBlacklist tags: - Email Blacklist summary: Add emails to the blacklist. requestBody: required: true content: application/json: schema: type: object required: - emails properties: emails: type: string description: Base64-encoded, comma-separated list of emails. comment: type: string responses: '200': description: Emails blacklisted. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' delete: operationId: removeFromBlacklist tags: - Email Blacklist summary: Remove emails from the blacklist. requestBody: required: true content: application/json: schema: type: object required: - emails properties: emails: type: string description: Base64-encoded, comma-separated list of emails. responses: '200': description: Emails removed from blacklist. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /smtp/emails: get: operationId: listSmtpEmails tags: - SMTP summary: List sent transactional emails. parameters: - name: limit in: query schema: type: integer - name: offset in: query schema: type: integer responses: '200': description: A list of sent emails. content: application/json: schema: type: array items: $ref: '#/components/schemas/SmtpEmail' post: operationId: sendSmtpEmail tags: - SMTP summary: Send a transactional email. requestBody: required: true content: application/json: schema: type: object required: - email properties: email: $ref: '#/components/schemas/SmtpEmailInput' responses: '200': description: Email accepted for delivery. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /smtp/emails/{id}: get: operationId: getSmtpEmail tags: - SMTP summary: Get a transactional email by ID. parameters: - name: id in: path required: true schema: type: string responses: '200': description: Email information. content: application/json: schema: $ref: '#/components/schemas/SmtpEmail' /smtp/unsubscribe: get: operationId: listSmtpUnsubscribed tags: - SMTP summary: List unsubscribed emails. responses: '200': description: A list of unsubscribed emails. content: application/json: schema: type: array items: type: string format: email post: operationId: addSmtpUnsubscribe tags: - SMTP summary: Add emails to the unsubscribe list. requestBody: required: true content: application/json: schema: type: object properties: emails: type: array items: type: object properties: email: type: string format: email comment: type: string responses: '200': description: Emails unsubscribed. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /sms/send: post: operationId: sendSms tags: - SMS summary: Send SMS to a list of phone numbers. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SmsSendInput' responses: '200': description: SMS accepted. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /sms/campaigns: post: operationId: createSmsCampaign tags: - SMS summary: Create an SMS campaign from an address book. requestBody: required: true content: application/json: schema: type: object required: - addressBookId - body properties: addressBookId: type: integer body: type: string transliterate: type: integer sender: type: string responses: '200': description: SMS campaign created. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /sms/campaigns/list: get: operationId: listSmsCampaigns tags: - SMS summary: List SMS campaigns. responses: '200': description: A list of SMS campaigns. content: application/json: schema: type: array items: $ref: '#/components/schemas/SmsCampaign' /push/tasks: get: operationId: listPushCampaigns tags: - Web Push summary: List web push campaigns. parameters: - name: limit in: query schema: type: integer - name: skip in: query schema: type: integer responses: '200': description: A list of push campaigns. content: application/json: schema: type: array items: $ref: '#/components/schemas/PushCampaign' post: operationId: createPushCampaign tags: - Web Push summary: Create a web push campaign. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PushCampaignInput' responses: '200': description: Push campaign created. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /push/websites: get: operationId: listPushWebsites tags: - Web Push summary: List registered websites. responses: '200': description: A list of websites. content: application/json: schema: type: array items: $ref: '#/components/schemas/PushWebsite' /events/name/{eventName}: post: operationId: startEventAutomation tags: - Automation 360 summary: Trigger an Automation 360 event flow. parameters: - name: eventName in: path required: true schema: type: string requestBody: required: true content: application/json: schema: type: object description: >- Subscriber data for the event. Must include the identifier fields configured for the event (for example email or phone) plus any custom variables. additionalProperties: true responses: '200': description: Event accepted. content: application/json: schema: $ref: '#/components/schemas/SuccessResult' /balance: get: operationId: getBalance tags: - Account summary: Get account balance. responses: '200': description: Account balance. content: application/json: schema: $ref: '#/components/schemas/Balance' components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: >- Bearer access token obtained from POST /oauth/access_token using the client_credentials grant. parameters: AddressBookId: name: id in: path required: true schema: type: integer schemas: TokenRequest: type: object required: - grant_type - client_id - client_secret properties: grant_type: type: string example: client_credentials client_id: type: string client_secret: type: string TokenResponse: type: object properties: access_token: type: string token_type: type: string example: Bearer expires_in: type: integer example: 3600 AddressBook: type: object properties: id: type: integer name: type: string all_email_qty: type: integer active_email_qty: type: integer inactive_email_qty: type: integer creationdate: type: string status: type: integer status_explain: type: string Subscriber: type: object properties: email: type: string format: email status: type: integer status_explain: type: string variables: type: array items: type: object properties: name: type: string type: type: string value: type: string SubscriberInput: type: object required: - email properties: email: type: string format: email variables: type: object additionalProperties: true Campaign: type: object properties: id: type: integer name: type: string message: type: object properties: sender_name: type: string sender_email: type: string format: email subject: type: string list_id: type: integer status: type: integer all_email_qty: type: integer send_date: type: string CampaignInput: type: object required: - sender_name - sender_email - subject - body - list_id properties: sender_name: type: string sender_email: type: string format: email subject: type: string body: type: string description: Base64-encoded HTML body. list_id: type: integer name: type: string Sender: type: object required: - email - name properties: email: type: string format: email name: type: string status: type: string SmtpEmail: type: object properties: id: type: string sender: type: string format: email total_size: type: integer sender_ip: type: string smtp_answer_code: type: integer smtp_answer_subcode: type: string smtp_answer_data: type: string used_ip: type: string recipient: type: string format: email subject: type: string send_date: type: string SmtpEmailInput: type: object required: - subject - from - to properties: html: type: string description: Base64-encoded HTML body. text: type: string subject: type: string from: type: object properties: name: type: string email: type: string format: email to: type: array items: type: object properties: name: type: string email: type: string format: email SmsSendInput: type: object required: - phones - body properties: phones: type: array items: type: string body: type: string sender: type: string transliterate: type: integer route: type: object additionalProperties: true SmsCampaign: type: object properties: id: type: integer address_book_id: type: integer company_price: type: number company_currency: type: string send_date: type: string status: type: integer task_phones: type: integer PushCampaign: type: object properties: id: type: integer title: type: string body: type: string website_id: type: integer status: type: integer send_date: type: string PushCampaignInput: type: object required: - title - website_id - body - ttl properties: title: type: string website_id: type: integer body: type: string ttl: type: integer link: type: string stretch_time: type: integer filter_lang: type: string PushWebsite: type: object properties: id: type: integer url: type: string add_date: type: string status: type: integer Balance: type: object properties: currency: type: string balance_currency: type: number CreateResult: type: object properties: id: type: integer SuccessResult: type: object properties: result: type: boolean ErrorResult: type: object properties: error_code: type: integer message: type: string is_error: type: boolean