Download OpenAPI specification:
The Connext REST API lets you programmatically manage subscribers, send messages, schedule blasts, and view delivery logs for your organization.
All endpoints return JSON and use standard HTTP methods (GET, POST, PATCH, DELETE) with RESTful URL paths.
Every request must include an API key in the Authorization header:
Authorization: Bearer cnxt_your_api_key_here
API keys are scoped to the user who created them. A key inherits the user's organization and permissions — it can only access data within that organization and is limited to the actions the user is allowed to perform.
From the API Key page (accessible via the profile dropdown) you can:
The API returns standard HTTP status codes:
| Status | Meaning |
|---|---|
200 |
Success |
201 |
Resource created |
204 |
Resource deleted (no body) |
400 |
Bad request — missing or invalid parameters |
401 |
Unauthorized — invalid or missing API key |
403 |
Forbidden — valid key but insufficient permissions |
404 |
Not found — resource doesn't exist or is outside your organization |
405 |
Method not allowed |
500 |
Server error |
Error responses include a JSON body:
{
"message": "Description of what went wrong"
}
201 with the created resource.200 with the updated resource.204 with no body.200 with an operation result.List endpoints (GET /subscribers, GET /schedules, GET /logs) accept limit and offset query parameters.
GET /v1/subscribers?limit=25&offset=0
| keyword | string Search across name, phone, email, address |
| group | string Filter by group number |
| sort | string Enum: "phone" "email" "first" "last" |
| order | string Enum: "asc" "desc" |
| limit | integer Default: 10 |
| offset | integer Default: 0 |
[- {
- "id": 0,
- "first": "string",
- "last": "string",
- "phone": "string",
- "type": "sms",
- "enabled": true,
- "address": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "email": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "groups": [
- 0
], - "phone_blocked": 0,
- "email_blocked": 0
}
]| phone required | string^\d{10}$ |
string <email> | |
| first | string |
| last | string |
| address | string |
| city | string |
| state | string |
| zip | string |
| enabled | boolean |
| type | string Enum: "sms" "phone" |
| groups | Array of integers (GroupNumbers) Array of group numbers (not IDs) |
{- "phone": "string",
- "email": "user@example.com",
- "first": "string",
- "last": "string",
- "address": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "enabled": true,
- "type": "sms",
- "groups": [
- 0
]
}{- "id": 0,
- "first": "string",
- "last": "string",
- "phone": "string",
- "type": "sms",
- "enabled": true,
- "address": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "email": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "groups": [
- 0
]
}| id required | integer |
| phone | string^\d{10}$ |
string <email> | |
| first | string |
| last | string |
| address | string |
| city | string |
| state | string |
| zip | string |
| enabled | boolean |
| type | string Enum: "sms" "phone" |
| groups | Array of integers (GroupNumbers) Array of group numbers (not IDs) |
{- "phone": "string",
- "email": "user@example.com",
- "first": "string",
- "last": "string",
- "address": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "enabled": true,
- "type": "sms",
- "groups": [
- 0
]
}{- "id": 0,
- "first": "string",
- "last": "string",
- "phone": "string",
- "type": "sms",
- "enabled": true,
- "address": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "email": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "groups": [
- 0
]
}| recipient required | string 10-digit phone number or email address |
{- "recipient": "string"
}{- "recipient": "string",
- "type": "phone",
- "reason": "string",
- "created_at": "2019-08-24T14:15:22Z"
}Supports file attachments via multipart/form-data. When uploading files, send the JSON parameters in a form field named body and attach files in fields prefixed with media (for SMS/email) or audio (for audio blasts).
| types required | Array of strings (MessageTypes) non-empty Items Enum: "sms" "voice" "email" "audio" |
| groups required | Array of integers (GroupNumbers) Array of group numbers (not IDs) |
| message | string |
| subject | string Email subject line |
| ivr | boolean |
| shorten_links | boolean Default: false |
{- "types": [
- "sms"
], - "groups": [
- 0
], - "message": "string",
- "subject": "string",
- "ivr": true,
- "shorten_links": false
}{- "message": "string"
}Sends to the authenticated user only, not to groups. Supports the same file upload options as /blasts/send — use multipart/form-data with a body field and file fields prefixed with media or audio.
| types required | Array of strings (MessageTypes) non-empty Items Enum: "sms" "voice" "email" "audio" |
| groups required | Array of integers (GroupNumbers) Array of group numbers (not IDs) |
| message | string |
| subject | string Email subject line |
| ivr | boolean |
| shorten_links | boolean Default: false |
{- "types": [
- "sms"
], - "groups": [
- 0
], - "message": "string",
- "subject": "string",
- "ivr": true,
- "shorten_links": false
}{- "message": "string"
}| types required | Array of strings (MessageTypes) non-empty Items Enum: "sms" "voice" "email" "audio" |
| groups required | Array of integers (GroupNumbers) Array of group numbers (not IDs) |
| message | string |
| has_media | boolean |
| shorten_links | boolean |
{- "types": [
- "sms"
], - "groups": [
- 0
], - "message": "string",
- "has_media": true,
- "shorten_links": true
}{ }[- {
- "id": 0,
- "title": "string",
- "types": [
- "sms"
], - "message": "string",
- "subject": "string",
- "voice_fallback": 0,
- "groups": [
- 0
], - "dnc": [
- 0
], - "files": [
- {
- "url": "string",
- "name": "string",
- "type": "string",
- "size": 0,
- "key": "string"
}
], - "shorten_links": 0,
- "ivr": 0
}
]Supports file attachments via multipart/form-data. Send the JSON parameters in a body form field and attach files in fields prefixed with media or audio. Same limits as /blasts/send.
| title required | string non-empty |
| types required | Array of strings (MessageTypes) non-empty Items Enum: "sms" "voice" "email" "audio" |
| message | string |
| subject | string |
| voice_fallback | boolean |
| groups | Array of integers (GroupNumbers) Array of group numbers (not IDs) |
| dnc | Array of integers (GroupNumbers) Array of group numbers (not IDs) |
| shorten_links | boolean Default: false |
| ivr | boolean |
{- "title": "string",
- "types": [
- "sms"
], - "message": "string",
- "subject": "string",
- "voice_fallback": true,
- "groups": [
- 0
], - "dnc": [
- 0
], - "shorten_links": false,
- "ivr": true
}{- "id": 0,
- "title": "string",
- "types": [
- "sms"
], - "message": "string",
- "subject": "string",
- "voice_fallback": 0,
- "groups": [
- 0
], - "dnc": [
- 0
], - "files": [
- {
- "url": "string",
- "name": "string",
- "type": "string",
- "size": 0,
- "key": "string"
}
], - "shorten_links": 0,
- "ivr": 0
}Supports file attachments via multipart/form-data. Same format as template creation.
| id required | integer |
| title | string non-empty |
| types | Array of strings (MessageTypes) non-empty Items Enum: "sms" "voice" "email" "audio" |
| message | string |
| subject | string |
| voice_fallback | boolean |
| groups | Array of integers (GroupNumbers) Array of group numbers (not IDs) |
| dnc | Array of integers (GroupNumbers) Array of group numbers (not IDs) |
| shorten_links | boolean Default: false |
| ivr | boolean |
| files | Array of strings URLs of files to retain on the template. Each entry must match a URL already on
the template — send |
{- "title": "string",
- "types": [
- "sms"
], - "message": "string",
- "subject": "string",
- "voice_fallback": true,
- "groups": [
- 0
], - "dnc": [
- 0
], - "shorten_links": false,
- "ivr": true,
- "files": [
- "string"
]
}{- "id": 0,
- "title": "string",
- "types": [
- "sms"
], - "message": "string",
- "subject": "string",
- "voice_fallback": 0,
- "groups": [
- 0
], - "dnc": [
- 0
], - "files": [
- {
- "url": "string",
- "name": "string",
- "type": "string",
- "size": 0,
- "key": "string"
}
], - "shorten_links": 0,
- "ivr": 0
}| keyword | string Search in title or message |
| limit | integer Default: 10 |
| offset | integer Default: 0 |
[- {
- "id": 0,
- "title": "string",
- "subject": "string",
- "message": "string",
- "groups": [
- 0
], - "types": "string",
- "active": 0,
- "next": "2019-08-24T14:15:22Z",
- "media": [ ],
- "every": 0,
- "frequency": "minutes",
- "remaining": 0,
- "days": 0
}
]Supports file attachments via multipart/form-data. Same upload format and limits as /blasts/send.
| startDate required | string <date> |
| startTime required | string^\d{1,2}:\d{2}(:\d{2})?$ HH:MM format |
| title required | string non-empty |
| types required | Array of strings (MessageTypes) non-empty Items Enum: "sms" "voice" "email" "audio" |
| groups required | Array of integers (GroupNumbers) Array of group numbers (not IDs) |
| message | string |
| subject | string |
| ivr | boolean |
| shorten_links | boolean Default: false |
| frequency | string Enum: "minutes" "hours" "days" "weeks" "months" Makes the schedule recurring |
| every | integer >= 1 Interval for recurrence (required if frequency set) |
| remaining | integer >= 1 Max number of iterations |
| days | integer [ 0 .. 127 ] Day-of-week bitmap (only with frequency) |
{- "startDate": "2019-08-24",
- "startTime": "string",
- "title": "string",
- "types": [
- "sms"
], - "groups": [
- 0
], - "message": "string",
- "subject": "string",
- "ivr": true,
- "shorten_links": false,
- "frequency": "minutes",
- "every": 1,
- "remaining": 1,
- "days": 127
}{- "id": 0,
- "title": "string",
- "subject": "string",
- "message": "string",
- "groups": [
- 0
], - "types": "string",
- "active": 0,
- "next": "2019-08-24T14:15:22Z",
- "media": [ ],
- "every": 0,
- "frequency": "minutes",
- "remaining": 0,
- "days": 0
}| id required | integer |
| message | string |
| subject | string |
| title | string |
| every | integer >= 1 |
| frequency | string Enum: "minutes" "hours" "days" "weeks" "months" |
| remaining | integer |
| active | integer Enum: 0 1 |
| days | integer [ 0 .. 127 ] |
| startDate | string <date> Must be paired with startTime |
| startTime | string^\d{1,2}:\d{2}(:\d{2})?$ Must be paired with startDate |
{- "message": "string",
- "subject": "string",
- "title": "string",
- "every": 1,
- "frequency": "minutes",
- "remaining": 0,
- "active": 0,
- "days": 127,
- "startDate": "2019-08-24",
- "startTime": "string"
}{- "id": 0,
- "title": "string",
- "subject": "string",
- "message": "string",
- "groups": [
- 0
], - "types": "string",
- "active": 0,
- "next": "2019-08-24T14:15:22Z",
- "media": [ ],
- "every": 0,
- "frequency": "minutes",
- "remaining": 0,
- "days": 0
}| keyword | string Search in username or message |
| limit | integer Default: 10 |
| offset | integer Default: 0 |
[- {
- "username": "string",
- "id": 0,
- "id_schedule": 0,
- "id_poll": 0,
- "message": "string",
- "date": "2019-08-24T14:15:22Z",
- "types": "string",
- "media": [ ],
- "count": 0,
- "groups": [
- 0
], - "details": {
- "segments": 0,
- "delivered": 0,
- "queued": 0,
- "failed": 0
}
}
]| id required | integer |
| keyword | string Filter by recipient |
| status | string Enum: "queued" "sent" "delivered" "failed" "clicked" |
| limit | integer Default: 10 |
| offset | integer Default: 0 |
| getClicks | string Value: "true" Include click counts per recipient |
[- {
- "recipient": "string",
- "type": "sms",
- "received": "2019-08-24T14:15:22Z",
- "status": 0,
- "clicks": 0
}
]| name required | string |
| number | integer Auto-assigned if omitted |
| private | boolean Default: false |
{- "name": "string",
- "number": 0,
- "private": false
}{- "id": 0,
- "name": "string",
- "number": 0
}| id required | integer |
| name required | string |
| number required | integer |
| private | boolean |
{- "name": "string",
- "number": 0,
- "private": true
}{- "id": 0,
- "name": "string",
- "number": 0
}