Zipwhip Software API

Zipwhip’s Software API allows Zipwhip software customers to integrate Zipwhip into their proprietary CRM or line-of-business app. The Software API includes the ability to send and receive text messages on a Zipwhip text-enabled line, and to sync contacts and conversations with the Zipwhip apps.

*PLEASE NOTE: Your Zipwhip account will be charged additional fees for messages sent via the Software API. Please contact us for more information on our Software API pricing plans.*

API Specs

Zipwhip APIs are available in both OpenAPI and Postman format.


If you are using the Zipwhip API for the first time please start by using the /user/login call to generate a session key. A session key is required for all messaging API calls to authenticate the user and phone line. A unique session key is required for every phone line that you wish to use (if you use multiple lines). The session key does not expire so make sure to record it.

Single-User vs. Multi-User Authentication

The Zipwhip Messaging API supports both single-user and multi-user authentication. They have different login requirements and allow for a different number of API user types.

Single-User Authentication

Single-user authentication means that there is a single username and password assigned to the line. Logging in with this username and password starts a session that has full administrative access. All users who share the account will be administrators.

The username for single-user logins must be the text-enabled phone number. The following is an example of a single-user login request:

$ curl -X POST \ \
  -d username=5556661234 \
  -d password=mypassword

Multi-User Authentication

Multi-user authentication means that there are several tiers of authentication. Each text-enabled line can be assigned only a single phone number, but it can be assigned multiple usernames and multiple passwords. In a multi-user scenario, you can authenticate as:

System - Uses the phone number assigned to the line and the account password to log in. As the System, you have full administrative rights. The system is meant only to perform administrative tasks, update software, or troubleshoot system issues. There is no username associated with a system session.

Administrator - The Admin username is a combination of a personal prefix and the phone number assigned to the line as the suffix: scott@5556661234. Admins have full administrative rights, the same rights as when you log in as the System. However, a username is associated with the session.

Operator - The Operator username is the same format as the Admin username. Operators have limited rights: they can send and receive messages. The Operator’s username is associated with the session. This is the suggested session for sending/recieving text messages. You can create more operator accounts by logging into your web app, going to settings and then going to the operators section.

The following is an example of an Operator login request:

$ curl -X POST \ \
  -d username=scott@4255551212 \
  -d password=scottpassword


The Zipwhip Software API supports two types of message requests – SMS and MMS. Text only messages are sent as SMS. Messages with file attachments are sent as MMS.

Feature SMS MMS
Maximum text body size 600 bytes 600 bytes
Maximum file attachment size NA 600 kb

If you need to send text bodies larger than 700 bytes you can send it as an MMS with a .txt attachment.

If a message does not include an attachment, it will be sent and billed as an SMS message. If it does include an attachment, it will be sent and billed as an MMS message.

File Attachments

Attachments can be added to MMS messages in .jpg, .png, .gif and .txt formats. You can send up to two attachments at a time. The maximum payload for a message is 600kb.

Message Send Status Codes

The status codes listed in this section are returned immediately when sending an SMS or MMS request via message/send or messaging/send.

If an error occurs in the send request, a "success": false message will be returned with a response object describing the error. The response object will be formatted in one of two ways.

It will include a desription of the error in the reponse.

  "success": false,
  "response": "Required String parameter 'body' is not present"

Or it will include a response object containing a nested description and status code.

  "success": false,
  "response": {
    "desc": "You cannot send to line opted out numbers: +XXXXXXXXXX !",
    "code": -1234

The list of status codes that are returned in response to a send request are shown in the table below:

Code Description State Retry
-1234 Recipient sent “STOP” message, must send “UNSTOP” to resolve Failure No
-855 Internal Error Failure Yes
-704 Internal Error Failure No
-703 Internal Error - Bad argument (incorrect/invalid input) Failure No
-700 Internal Error Failure No
-394 Invalid Parameter Length Failure No
-124 Unable to Determine Carrier Failure No
-1 Unknown Error Unknown Yes

Message Delivery Status Codes

After a message has been sent, a statusCode field will be added to the message object representing its delivery status. The statusCode will change as the message flows from Zipwhip to the carrier to the handset. The delivery status can be fetched via conversation/get, message/list, and message/get APIs, or via Webhooks.

Status Code Description State Final State
0 Successful transmission - no acknowledgment from carrier Success True
1 In Process Transient False
2 Queued Transient False
4 Successful delivery to carrier Success True
5 Failed delivery to carrier Failure True
6 Successful delivery to handset (toll-free numbers only) Success True
7 Failed delivery to handset (toll-free numbers only) Failure True