SendPulse Service REST API

Introduction

Our API interface is used to integrate SendPulse’s distribution service capabilities with client’s personal projects. The API is designed for developers and is accompanied by detailed documentation.

SendPulse’s REST API works over the HTTPS protocol and is essentially a set of methods used to perform requests and receive responses for each operation. All answers return in the form of JSON structures.

All references to API requests in this document include the root URL:

https://api.sendpulse.com

Cross Domain Queries (jQuery Ajax Example) are not allowed. 

AI agent integration

SendPulse API is fully discoverable by LLMs and AI agents. All tools are documented in the OpenAPI 3.1 format and provide machine-readable llms.txt, a native MCP server, and structured metadata extensions.

Discovery endpoints

AI agents can find the full API from the base URL api.sendpulse.com.

Resource URL Purpose
llms.txt (standard) api.sendpulse.com/llms.txt Token-optimized overview of all SendPulse tools and auth for LLMs
llms-full.txt api.sendpulse.com/llms-full.txt Full endpoint reference in Markdown with all SendPulse tools in one file
OpenAPI master index api.sendpulse.com/.well-known/openapi/index.yaml OpenAPI 3.1.0 index with links to per-tool specs
AI Plugin manifest api.sendpulse.com/.well-known/ai-plugin.json ChatGPT / GPT Actions plugin descriptor
Service directory api.sendpulse.com/service-directory.json JSON index of all SendPulse tools and their spec URLs

Model Context Protocol (MCP)

Integrate Claude, GPT-4, Cursor, or any MCP-compatible AI client with your SendPulse account. The MCP server exposes SendPulse's chatbot builder, email service, CRM system, and Automation as native tools through the API so that AI can call them without writing code.

MCP is recommended for agentic workflows where AI can act on its own by sending campaigns, updating CRM contacts, running automated flows, and collecting statistics through natural language prompts.

Read mode: Сonnect and use SendPulse's MCP server for AI integrations.

OpenAPI specifications

Each SendPulse tool has a standalone OpenAPI 3.1.0 spec at api.sendpulse.com/.well-known/openapi/.

All specs include x-ai-role, x-ai-capabilities, x-ai-reasoning-instructions, and x-ai-responding-instructions extensions for AI agent guidance.

Tool Spec Size
Email service bulk-email.yaml 125K
SMTP service smtp.yaml 43K
SMS service sms.yaml 31K
WhatsApp chatbot builder whatsapp.yaml 223K
Telegram chatbot builder telegram.yaml 167K
Facebook chatbot builder facebook.yaml 156K
Instagram chatbot builder instagram.yaml 150K
Viber chatbot builder viber-chatbot.yaml 143K
TikTok chatbot builder tiktok.yaml 139K
Live chat builder live-chat.yaml 139K
CRM system crm.yaml 654K
Automation a360.yaml 15K
Web push service web-push.yaml 18K
Email verifier verifier.yaml 21K
Pop-up builder popups.yaml 71K
File manager file-manager.yaml 30K
Viber campaigns viber.yaml 16K
Online course builder (LMS) edu.yaml 104K
Chatbot builder (base) chatbots.yaml 15K

Quick start for AI developers

Step 1. Send a GET request to load llms.txt:

https://api.sendpulse.com/llms.txt

Step 2. Send a GET request to load the OpenAPI index:

https://api.sendpulse.com/.well-known/openapi/index.yaml

Step 2. To use the MCP server for agentic workflows, follow the setup instructions.

Step 4. To connect through GPT Actions, use the ai-plugin.json file to configure a custom GPT with access to all SendPulse tools.

SendPulse libraries

The latest versions of SendPulse API client libraries are available at GitHub.

You can also check other third-party solutions on Github.

Authorization

SendPulse API uses Bearer token authentication. You must include the token in the Authorization header of every request:

Authorization: Bearer <your_token_or_key>

You can authorize your requests in two ways:

  • API Key (Static): A long-lived token generated manually in your account.
  • OAuth 2.0 (Dynamic): A temporary access token obtained via Client ID and Client Secret.

API keys

An API key is a permanent authentication token. It remains valid until you manually revoke it, making it ideal for simple integrations where you don't want to implement token refresh logic.

Go to Settings > API > API keys and click Generate. Give your key a name and optionally restrict access to specific IP addresses.

You can create up to 5 independent keys. This allows you to manage different integrations separately and revoke them individually if needed.

OAuth 2.0 (Client Credentials)

This method allows you to programmatically obtain a temporary access token using your Client ID and Client Secret.

The access token is valid for 1 hour. You should request a new token only after the current one expires.

Go to Settings > API > API keys and copy your ID and Secret.

To get the token, send a POST request to:

https://api.sendpulse.com/oauth/access_token

Request parameters:

Parameter Type Description  
grant_type string Has to be equal to client_credentials required
client_id string Your ID required
client_secret string Your Secret required

Request example:

{
   "grant_type":"client_credentials",
   "client_id":"0aadb081f2f81c05bafe39621910000",
   "client_secret":"a99e7d506d3701c5c04de3db1913eeee"
}

If request is successful, you will receive a response:

{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjI5NTQ4NDVjZWJlZjg5Nzk0YmYzMzk4ZDdiNTQ3OTA2MWUzNDQ2N2I5NTUwMmFlNzE1YmViZmU4MDBmNTMxMjIxMTU2MTcyOWM2MjI5NGRjIn0.eyJhdWQiOiIyMzdiNGFmOWM5OWQwZjg5YmRiZDg3NmRjZDVhMDE3ZiIsImp0aSI6IjI5NTQ4NDVjZWJlZjg5Nzk0YmYzMzk4ZDdiNTQ3OTA2MWUzNDQ2N2I5NTUwMmFlNzE1YmViZmU4MDBmNTMxMjIxMTU2MTcyOWM2MjI5NGRjIiwiaWF0IjaaNjI0NTI0OTA0LCJuYmYiOjE2MjQ1MjQ5MDQsImV4cCI6MTYyNDUyODUwNCwic3ViIjoiIiwic2NvcGVzIjpbXSwidXNlciI6eyJpZCI6Njc0MTgwNCwiZ3JvdXBfaWQiOm51bGwsInBhcmVudF9pZCI6bnVsbCwiYXJlYSI6InJlc3QifX0.jiP3Sv7IF1mHGmW0oGIrPAw0oOiIEnC8Tb6wlWu5eVM2UrHL6RZsDlIslLSQNEvL_e50nDlgtgyfX5Qty4qlQ4XyW53FAgjwHbyQG7DJ6iVRAtVBtFNbkFVNbHvKw8zQy7WyxhICpAF8zdF8-gBHBnzuMhKSnASYEosJ9IAPqUkxQXrd8LpUSk-etzjEqcpMkbGj2M7Y0OxO4_BfRhVNU6ZcbiawD09m0A9uWoSnoZKxXw0o64PE3anJta6lFns5SDuyeGxanOtuZSS5I3umI2OOnUVzNG9_5WjCe6LPVQLAPAPt0m8S5WkI35_jCJ0A-gDBBdsgnUudGCvsDcgEog",
  "token_type": "Bearer",
  "expires_in": 3600
}

Account information

To get information about your account, send a GET request to:

https://api.sendpulse.com/user/info

If request is successful, you will receive a response:

{
  "id": 7043663,
  "name": "Frodo Baggins",
  "first_name": "Frodo",
  "last_name": "Baggins",
  "email": "frodo.baggins@shire.me",
  "phone": "380680899608",
  "lang": "en:English",
  "avatar": "https://login.sendpulse.com/files/avatars/frodo_ring.png",
  "currency": "USD",
  "country": "NZ",
  "city": "Hobbiton",
  "locale": "Pacific/Auckland",
  "time_zone": "12",
  "team_name": "Fellowship of the Ring",
  "team_avatar": "https://login.sendpulse.com/files/avatars/fellowship.png",
  "phone_confirm": true
}

Invited users

To get information about your team members, send a GET request to:

https://api.sendpulse.com/user/invited-users-list

If request is successful, you will receive a response:

[
    {
        "id": 7043663,
        "firstname": "john",
        "lastname": "harrington",
        "email": "john.harrington@example.com",
        "group_id": null,
        "is_active": true,
        "avatar": "https://example.com/avatars/test-user-1.png",
        "lang": "ua:Українська",
        "locale": "Europe/Kyiv",
        "currency": "UAH",
        "country": "UA",
        "phone": 380671112233
    },
    {
        "id": 8802086,
        "firstname": "amelia",
        "lastname": "rowe",
        "email": "amelia.rowe@example.org",
        "group_id": 6,
        "is_active": true,
        "avatar": null,
        "lang": "en:English",
        "locale": "Europe/Berlin",
        "currency": "EUR",
        "country": "DE",
        "phone": 499876543210
    },
    {
        "id": 8700831,
        "firstname": "william",
        "lastname": "dawson",
        "email": "william.dawson@example.net",
        "group_id": 1,
        "is_active": true,
        "avatar": null,
        "lang": "ua:Українська",
        "locale": "Europe/Berlin",
        "currency": "UAH",
        "country": "DE",
        "phone": 380631234567
    }
]

Balance information

To get detailed balance information, send a GET request to:

https://api.sendpulse.com/user/balance/detail

If request is successful, you will receive a response:

{
    "balance": {
        "main": "9.36",
        "bonus": "5.00",
        "currency": "USD"
    },
    "email": {
        "tariff_name": "Pay as you go 10 000",
        "finished_time": "2019-04-25 08:03:02",
        "emails_left": 9914,
        "maximum_subscribers": 10000,
        "current_subscribers": 0
    },
    "smtp": {
        "tariff_name": "SMTP Free",
        "end_date": "2018-11-21 15:05:39",
        "auto_renew": 1
    },
    "push": {
        "tariff_name": "White Label",
        "end_date": "2018-11-30",
        "auto_renew": 1
    }
}

Request limits

There are limits and quotas on SendPulse API requests to protect the system from receiving more data than it can handle and ensure an equitable distribution of the system resources. API limits per minute and per day depend on the category of your selected pricing plan

General quota limits

The following quotas apply when sending API requests:

Pricing plan tier Requests per minute Requests per day Pricing plans in SendPulse tools
Free 1,000 500,000 All free pricing plans in Email, SMTP, Websites, Push, Chatbot, Courses, CRM, and Pop-ups
Standard 2,000 1,000,000 All pricing plans from "Free" to "Enterprise"

Pop-ups and Courses with the "Pro" plan

Enterprise 3,000 3,000,000 Email and Websites with the "Enterprise" plan

Push with the "Pro" plan and more than 50,000 subscribers

Chatbots with the "Pro" plan and more than 5,000 subscribers

SMTP with more than 100,000 emails

CRM with the "Pro" plan

Not available in Pop-ups and Courses

Blocklist 0 0
Allowlist

Exceeding quota limits

If you exceed this quota, the API returns the following error:

429 Too many requests

To be able to send more requests, you need to upgrade your current pricing plan.

Error codes 

Error code Description
8 No data
10 Sender email address missing
11 Can’t find recipients addresses
13 Empty email message content field
14 Can’t find email address with the specified ID
17 Can’t find the email address
19 Email address already exists
20 Using free email services (not allowed)
21 No such email address awaiting activation
97 Invalid email address type. Using free email services is not allowed.
201 Empty mailing list name
203 This mailing list name already exists
211 Mailing list empty
213 Mailing list not found
303 Can’t find email addresses in the mailing list
400 Specified SMTP user doesn’t exist. Create an SMTP account.
502 Can’t find the email address
602 Can’t find the campaign. Probably, it has already been sent.
701 Sender email address or name not specified.
703 Can’t find the mailing list
704 Can’t find the sender
707 Account balance depleted
708 The number of campaign recipients exceeds your current pricing plan limits
711 Wait before create new push campaign by this website
720 Empty subject field
721 Email message empty
722 Mailing list ID not specified
791 API-campaigns limit exceeded (4 per hour)
799 Incorrect date format. Use YYYY-MM-DD hh:ii:ss that equals or greater than the current date
800 Invalid operation
802 Campaign not found
901 Sender name not specified
902 Selected email address already in use
903 Sender email address not specified
904 Email address blacklisted
905 Sender address quota reached
906 Email address syntax error
1101 Email address not specified
1003 The specified sender doesn’t exist
1004 The activation code has been sent. Wait 15 minutes to retry
1005 Error sending confirmation
1104 Activation code not specified
2020202020 More than 10 requests per second