sautikit
PricingDevelopersBlogAbout
Sign inStart building

Get everyone on one line: conference calling with multi-party voice bridges

Connect multiple participants to a named conference room using the Conference voice action and Sautikit's call API.

use-caseconferencemulti-partyvoice-actions

Next Steps

  • ConferenceConferenceAction places the caller into a named conference room. Field set tracks the live PBX webhooks docs (Conference verb) at https://webrtc.helloduty.com/admin#docs:webhooks and the canonical
  • DialDialAction connects the caller to one or more numbers/SIP endpoints. Number/SIP URIs are subject to the same destination authorisation as POST /v1/calls. URL must be on the allow-list when dialling
  • CallsEvery phone call in Sautikit is a call record with a direction (inbound or outbound), a sequence of lifecycle states, and an optional recording. Cost is debited at hangup based on answered duration.
  • WebhooksSautikit webhooks deliver signed JSON payloads to your HTTPS endpoint. Delivery is at-least-once with an 8-attempt exponential backoff schedule. Verify the HMAC-SHA256 signature on every request.
sautikit

Programmable voice infrastructure for Africa. Buy numbers, place calls, and bill per second, all in KES, via API.

Product

NumbersCalls & routingRecordingsWallet & billingPricing

Developers

DocumentationAPI referenceQuickstartAI promptChangelog

Company

AboutBlogCareersConsole

© 2026 Sautikit. All rights reserved.

Sautikit provides voice API services for application developers. Numbers provisioned on this platform are not configured for emergency calling (e.g. 999 / 112). Do not use Sautikit numbers as a replacement for a primary phone line.

Summary

A Sautikit conference room is a named virtual space. Any call, inbound or outbound, can be placed into a room using the Conference voice action. Participants join independently, and the room starts as soon as the first participant with startOnEnter: true connects. You control entry/exit beeps, mute state per participant, participant capacity, hold music, and conference recording entirely through the Conference action parameters and status webhook events.

Who this is for

  • Developers building team meeting dial-in lines where multiple people call a single number.
  • Applications that need ad-hoc group calls initiated from a web interface (click-to-conference).
  • Companies running scheduled conference bridges for recurring meetings or webinars.
  • Call center applications that need a supervisor to silently monitor or barge into an active call.
  • Product teams building collaboration tools with a voice channel component.

How it works

Conference room: hub and spoke
Conference room: hub and spokeA central named conference room with four participants: A (waiting), B (host, starts room), C (dialled out), Supervisor (muted).Conference Roomname: "room-42"Participant AstartOnEnter: falseParticipant BstartOnEnter: trueParticipant Cdialled outSupervisormuted: true
All participants join the same named room. startOnEnter controls when audio begins. Supervisors can join muted for silent monitoring.

Room naming

Room names are arbitrary strings scoped to your workspace. Choose names that are unique to a session: for example, use a database-generated meeting ID (meeting-${id}) rather than a static string, so separate meetings don't accidentally share a room.

startOnEnter and moderation

startOnEnter: false keeps a participant in hold-music limbo until someone else joins with startOnEnter: true. This lets you model a "waiting room" where participants hear hold music until a host arrives. Set startOnEnter: true on the host's join action.

Participant capacity

maxParticipants caps the room size. Callers who arrive after the cap is reached receive no further actions (the call stalls). Handle this in your webhook by checking participant count before returning a Conference action; you can instead return a Say + Hangup if the room is full.

Silent monitoring and barge-in

To let a supervisor listen without speaking, return muted: true on the supervisor's Conference action. The supervisor hears all participants but cannot be heard. To barge in, your server would need to end the supervisor's muted call and re-dial them without muted.

API surface

Endpoints you call:

  • POST /v1/calls: dial a participant into the conference (outbound leg).
  • GET /v1/calls/{call_sid}: confirm a participant's call status.
  • GET /v1/calls: list all calls for a meeting session (filter by your room name if you embed it in a custom parameter).

Voice actions used:

  • Conference: the core verb; places the call into a named room.
  • Say: greet the participant before joining, or announce room-full errors.
  • Play: play a custom hold audio track via waitUrl.
  • Redirect: move a participant to a different room or back to an IVR.
  • Hangup: eject a participant from the room.

Example

Inbound webhook: join a named room

import express from "express";
const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
 
// Attach this URL to a Sautikit number as the routing_url
app.post("/conference/join", (req, res) => {
  const roomName = req.query.room ?? "default-room";
  const isHost   = req.query.host === "1";
 
  res.json({
    actions: [
      {
        say: {
          text: isHost
            ? `You are joining ${roomName} as the host.`
            : `You are joining ${roomName}. Please wait for the host.`,
        },
      },
      {
        conference: {
          name: roomName,
          startOnEnter: isHost,
          endOnExit: isHost,            // end room when host leaves
          beep: true,                   // audible join/leave tone
          maxParticipants: 10,
          waitUrl: "https://yourapp.example.com/hold-music.mp3",
          statusEventsCallbackUrl: "https://yourapp.example.com/conference/events",
          statusEvents: "start end join leave mute unmute",
        },
      },
    ],
  });
});
 
// Conference status events from Sautikit
app.post("/conference/events", (req, res) => {
  const { ConferenceName, StatusCallbackEvent, CallId } = req.body;
  console.log(`[${ConferenceName}] event=${StatusCallbackEvent} call=${CallId}`);
  // Update your participant list in the DB here
  res.sendStatus(204);
});
 
app.listen(3000);

Dial a participant into the room outbound

curl -X POST "https://api.sautikit.com/v1/calls" \
  -H "Authorization: Bearer $SAUTIKIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to":         "+254733000001",
    "from":       "+254700000001",
    "action_url": "https://yourapp.example.com/conference/join?room=meeting-99"
  }'

When this outbound call is answered, Sautikit POSTs to action_url, your server returns the Conference action for meeting-99, and the dialled participant joins the room.

Conference action with recording enabled

{
  "actions": [
    {
      "conference": {
        "name": "meeting-99",
        "startOnEnter": true,
        "record": true,
        "beep": true,
        "statusEventsCallbackUrl": "https://yourapp.example.com/conference/events",
        "statusEvents": "start end join leave"
      }
    }
  ]
}

When record: true is set on a Conference action, the entire room session is recorded. The recording URL is delivered via the status event callback when the conference ends.

Pricing notes

Conference billing works at the individual call-leg level. Each participant in the room is a separate call leg, billed independently:

  • Inbound legs (participants who called your number): billed per minute at the inbound rate for the calling country.
  • Outbound legs (participants you dialled): billed per minute at the outbound rate for the destination country.

A three-person meeting with a total duration of 30 minutes, where all three participants were dialled out, costs 3 × 30 minutes × (outbound per-minute rate).

If conference recording is enabled (record: true), recording storage fees apply separately. See call recording use case for storage and retrieval details.

Hold time (before startOnEnter: true is set) is billed as call time for the participant sitting in the waiting state. Keep waiting periods short or notify participants via a different channel when the host has joined.

Next steps

  • Conference voice action reference: full parameter table including flags, collectDigits, and rotation support.
  • Call Recording use case: recording conference audio and storing it.
  • Call Center use case: using conference rooms as a hold queue.
  • Calls concept: call SID lifecycle and status_url events.
  • Webhooks concept: POST body schema for status events.