Owners and admins connect intSignal Connect to other systems in Admin → Integrations, titled API & Integrations. Anyone else who opens it sees "You need to be an owner or admin to manage integrations."
| Integration | Use it to |
|---|---|
| API keys and REST API | Let your systems place calls, send texts, sync contacts and read call data |
| Webhooks | Notify your systems when calls and texts happen |
| CRM screen-pop | Open a customer's record when their call rings |
Turn on the API
The Public API switch is off until you turn it on: "When on, valid API keys can call /api/v1/*. Turning it off instantly rejects every key." The rest of the page appears once it's on.
Turning the switch off is the quickest way to stop every integration at once, for example if you suspect a key has leaked.
Calling the API from your servers
To call the API from your own servers and cloud services, contact intSignal to enable API access for your workspace.
API keys
Create a key
Name it
Enter a Key name that says which system uses it, such as CRM sync.
Choose scopes
Tick only the scopes that system needs. talk:read, text:read and contacts:read are ticked to start with. At least one is required.
Create and copy
Select Create key. "Copy your new key now — it won't be shown again." Store it in your system's secure settings or a secrets manager, never in code or a shared document.
| Scope | Allows |
|---|---|
| talk:read | List call history |
| talk:write | Place calls (click-to-dial) |
| text:read | List messages |
| text:write | Send texts |
| contacts:read | Read the shared address book |
| contacts:write | Create, update and delete contacts |
| video:write | Create meetings and join links |
| numbers:read | List your phone numbers |
| recordings:read | List and download call recordings |
| presence:read | Read live extension status |
Manage keys
The keys table shows each key's Name, the start of the Key, its Scopes and when it was Last used. Select Revoke to disable a key: "Revoke this key? Any integration using it stops working immediately."
Keys don't expire. To replace a key, create a new one, update your system, then revoke the old one. Review Last used regularly, and revoke keys nothing uses.
Using the API
- Base URL:
https://connect.intsignal.com/api/v1 - Authentication: send your key in the
Authorizationheader:Authorization: Bearer <your key> - Format: JSON requests and responses
- Rate limit: 120 requests a minute per key
- Specification: select OpenAPI spec ↗ on the Integrations page for the machine-readable
definition, at
https://connect.intsignal.com/api/v1/openapi.json
| Status | Error | Meaning |
|---|---|---|
| 401 | invalid_api_key | The key is missing, wrong or revoked |
| 403 | insufficient_scope | The key doesn't have the scope this endpoint needs |
| 429 | Too many requests. Slow down and retry. |
Endpoints
| Method and path | Scope | What it does |
|---|---|---|
GET /calls | talk:read | Recent calls, newest first. Optional direction and limit (up to 200). |
POST /calls | talk:write | Click-to-dial. Body { "fromExtension": "101", "to": "+19495550123" }. Rings the extension's phone first, then dials. |
GET /messages | text:read | Recent texts, newest first. Optional limit (up to 200). |
POST /messages | text:write | Send a text. Body { "from", "to", "body" }. |
GET /contacts | contacts:read | List contacts. Optional search and limit (up to 1,000). |
POST /contacts | contacts:write | Create a contact, or update a matching one |
GET /contacts/:id | contacts:read | One contact |
PUT /contacts/:id | contacts:write | Update a contact |
DELETE /contacts/:id | contacts:write | Delete a contact |
POST /meetings | video:write | Create a meeting guest link. Body { "name", "expiresInHours" }. Returns joinUrl. |
GET /numbers | numbers:read | Your phone numbers |
GET /recordings | recordings:read | Recorded calls |
GET /recordings/:id | recordings:read | One recording, with a download link that works for 10 minutes |
GET /presence | presence:read | Live status of each extension |
Rules the API follows
- Placing calls: the extension must exist and have a phone, and its emergency address must be confirmed. Otherwise you'll get "Extension … must confirm its 911 address before placing calls."
- Sending texts:
frommust be one of your numbers with texting on,bodycan be up to 1,600 characters, and your workspace's texting limits apply. - Meetings: a join link lasts
expiresInHours, from 1 to 720, 24 by default. It allows guests.
Example: send a text
curl -X POST https://connect.intsignal.com/api/v1/messages \
-H "Authorization: Bearer $INTSIGNAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"from":"+19495550100","to":"+19495550123","body":"Your technician is on the way."}'
Webhooks
Webhooks send an HTTP POST to your system when something happens.
Add a webhook
- Enter your endpoint's URL.
- Tick the events to receive. Leave them all unticked to receive every event.
- Select Add webhook. "Copy your signing secret now — it won't be shown again."
Webhooks can't be edited. To change one, add a new webhook and delete the old one.
| Event | Sent when |
|---|---|
message.received | A text arrives on one of your numbers |
message.sent | A text is sent through the API |
call.completed | A call's record is ready, usually within about 5 minutes of the call ending |
call.inbound | A call starts ringing in, when real-time call events are enabled for your workspace by intSignal |
Receiving webhooks
Each request has a JSON body { "event", "tenantId", "data" } and these headers:
X-UCaaS-Event: the event name.X-UCaaS-Signature:sha256=followed by the hex HMAC-SHA256 of the raw request body, using your signing secret.
Your endpoint should:
- Verify the signature with your signing secret before trusting the request.
- Respond within 5 seconds, with any 2xx status. Do slow work afterwards.
- Not rely on retries. Each event is sent once. For a complete record, read the matching data from the
API, such as
GET /calls, on a schedule.
CRM screen-pop
Open a customer's record in your CRM, or any web page, as soon as their call rings in a browser phone.
- The CRM screen-pop section is on the Integrations page once the API is on.
- Enter a URL starting with
https://orhttp://, using{number}for the caller's number and{name}for their caller ID name. For example:https://crm.example.com/search?phone={number}. - Save it, and ask your team to reload intSignal Connect.
When a call rings a browser phone, the page opens in a separate browser tab, which is reused for each call. Each person may need to allow pop-ups for connect.intsignal.com the first time.
{name} is the name sent with the incoming call, which may be empty. For reliable matching, look customers
up by {number}.
