Skip to content

Ringfully is now Inbound CX What’s new

Type a word or two. Press Escape to close.

Developers

A REST API for your calls, contacts and text messages

Read your call history, keep your contact list up to date and send texts from your own software. Keys come from the Inbound CX portal on the Pro and Business plans, and signed webhooks tell you when a call ends, a voicemail lands, a text arrives or one of eight other things happens.

Version 1 since August 2026 · 14 endpoints · 120 requests a minute per key

$ curl "https://api.inboundcx.com/api/v1/calls?direction=inbound&limit=1" \
  -H "Authorization: Bearer $API_KEY"

{
  "calls": [
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "direction": "inbound",
      "fromNumber": "+15145550142",
      "toNumber": "+14385550199",
      "status": "completed",
      "startedAt": "2026-09-11T15:04:12.000Z",
      "answeredAt": "2026-09-11T15:04:19.000Z",
      "endedAt": "2026-09-11T15:07:31.000Z",
      "durationSec": 192,
      "isInternal": false,
      "agentId": "a3f1c2d4-5b6e-4f70-8a9b-0c1d2e3f4a5b",
      "contactId": "e2b4c6d8-1a3f-4b5d-9e7c-8f0a2b4c6d8e"
    }
  ],
  "nextCursor": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
200 OK · application/json

Three steps to a first request

  1. Create a key

    In the portal, Settings → API Keys. Name it, pick an expiry and copy it: the key is shown once and stored only as a hash.

  2. Call an endpoint

    Send the key as a bearer token. GET /api/v1/me answers with your organization, the scopes the key holds and its rate limit, so it is the call to make first.

  3. Subscribe to events

    Settings → Webhooks: add an https address on a host your organization has approved, tick the events you want, from call.completed to survey.responded, and keep the signing secret it shows once.

Start from a working request

No package to install: the API is plain HTTPS and JSON, so these samples work as they are.

  • OpenAPI 3.1

    openapi.json
    GET /api/v1/openapi.json

    Generated from the schemas the API validates against, and readable without a key.

    Open the spec
  • curl

    shell
    curl https://api.inboundcx.com/api/v1/me \
      -H "Authorization: Bearer $API_KEY"

    Checks the key: the organization, its scopes and the rate limit come back.

  • JavaScript

    fetch
    const res = await fetch("https://api.inboundcx.com/api/v1/contacts?includeAutoCreated=false&limit=50", {
      headers: { Authorization: `Bearer ${process.env.API_KEY}` },
    });
    if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
    const { contacts, nextCursor } = await res.json();

    Lists the contacts a person entered, 50 at a time, with a cursor for the next page.

  • Python

    requests
    import os
    import requests
    
    r = requests.post(
        "https://api.inboundcx.com/api/v1/messages",
        headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
        json={"to": "+15145550142", "body": "Your technician arrives between 9 and 11."},
        timeout=10,
    )
    r.raise_for_status()
    message = r.json()["message"]

    Sends a text as the organization, billed at its carrier rate.

  • Webhook signatures

    HMAC-SHA256
    import crypto from "node:crypto";
    
    // Deprecated names with the same values: x-ringfully-timestamp, x-ringfully-signature.
    const timestamp = req.get("x-inboundcx-timestamp") ?? "";
    const signature = req.get("x-inboundcx-signature") ?? "";
    const expected = crypto
      .createHmac("sha256", process.env.INBOUNDCX_WEBHOOK_SECRET)
      .update(`${timestamp}.${rawBody}`)
      .digest("hex");
    const valid =
      expected.length === signature.length &&
      crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature)) &&
      Math.abs(Date.now() - Number(timestamp)) < 5 * 60 * 1000;

    Reads x-inboundcx-timestamp and x-inboundcx-signature; x-ringfully-timestamp and x-ringfully-signature Deprecated still arrive with the same values.

  • API keys

    Pro and Business
    Authorization: Bearer rk_live_…

    Created in Settings → API Keys. Revoke one there and it stops working on its next request.

    Open API Keys in the portal

What you can build with it today

  • Every call logged in your own system

    Receive call.completed when a call ends, or page back through the history, and file each call against the right customer.

    GET /api/v1/calls
  • One contact list, kept up to date

    Create, rename and remove contacts from the software you already use. A number your team has already called is named, not duplicated.

    POST /api/v1/contacts
  • Texts sent from your own tools

    Send a reminder or a job update from your booking or dispatch software, and read the replies conversation by conversation.

    POST /api/v1/messages

Changelog

What changed in the product, dated, in English and French.

Read the changelog

Questions about the API

Ask about a scope, a limit or an endpoint through the contact form.

Contact us

Service status

Whether our servers, the web app and the phone network are working right now, checked live, with the incidents we have written up.

Check the service status

Ready to answer every call?

See how Inbound CX picks up and routes your calls, in a 15-minute walkthrough.

Book a demo