Skip to main content
Ringee exposes four ways to build on top of it. They are complementary — most real integrations use two.

Public API

Server to server. Sync CRM records, receive call activity, open a secure dialer.

Dialer SDK

Browser. Embed a real dialer inside your own web app.

MCP

AI agents. Let Claude or ChatGPT read and act on Ringee data.

CLI

Terminal and scripts. The same capabilities as MCP, in a shell.

Pick by what you are building

Side by side

No integration surface can dial a number server-side. Calls run over WebRTC in a browser or mobile app. The Public API and MCP get someone dialing by handing them a secure link; the Dialer SDK does it in your own page.

A typical CRM integration

Most teams combine two surfaces:
1

Sync your records

Send contact.upserted so Ringee knows who is callable, and keep externalId stable — it is the join key for everything that follows. See Inbound events.
2

Let agents call

Embed the Dialer SDK for an in-product experience, or use click-to-call if you want the fastest possible path.
3

Receive the activity

Subscribe to call.completed, call.outcome.updated and recording.ready and write them into your CRM. Signed, retried, idempotent. See Outbound webhooks.

Credentials at a glance

All of them come from the same place: a Custom Integration in Integrations → Custom Integrations, except the MCP URL, which comes from GET /api/mcp/connection-info.
cik_live_ and pk_live_ look similar and are minted by the same integration, but only pk_live_ is browser-safe. Rotating the cik_live_ key revokes every pk_live_ key on that integration.

Self-hosting

Every surface works against a self-hosted deployment. Replace https://api.ringee.io with your own backend URL: See the Configuration reference.