Every frame on the wire carries a 4-byte little-endian method_id. The constants below are emitted into every SDK at build time by the IDL compiler — these are the source of truth.

Method table

Methodmethod_id (decimal)method_id (hex)Request DTOResponse DTO
Originate14306778910x554d_8a83OriginateRequestOriginateResponse
OriginateBulk7210691000x2af9_a52cBulkRequestBulkResponse
AbortBulk38619150640xe629_4af8AbortBulkRequestBulkResponse
Terminate38342534050xe486_24ddTerminateRequestTerminateResponse
StreamEvents9598357450x3935_e0e1EventStreamRequestCallEvent (server-streamed)
SetInboundRouting19339868970x7345_15d1SetInboundRoutingRequestEmpty
GetIncomingCalls11619467460x4540_dffaGetIncomingCallsRequestGetIncomingCallsResponse
AnswerIncomingCall29901572560xb234_0e08AnswerIncomingCallRequestAnswerIncomingCallResponse
GetActiveBuckets26245042070x9c70_734fEmptyListBucketsResponse
GetBucketCalls12173511350x489c_d49fBucketRequestBucketCallList
ExecuteBucketAction40308632930xf04f_36fdBucketActionRequestBucketActionResponse
ExecuteDialplan35140361000xd166_7944ExecuteDialplanRequestExecuteDialplanResponse
Barge38543017140xe5b0_6412BargeRequestEmpty
AudioFrame29910543200xb241_b9b0AudioFrame (uni-stream)AudioFrame (uni-stream)
ReloadCertificates33579221380xc827_06daEmpty (admin)Empty
method_id is a CRC32-based hash of service_name, method name, and the fully-qualified DTO names. It is stable across versions as long as none of those three change. Don’t fork the table — regenerate it from the IDL if you change anything.

How to use

Pick the method, encode its request DTO as a serde envelope, prepend the envelope header, and write it onto a fresh QUIC bidirectional stream. The gateway responds on the same stream (for single-shot RPCs) or on a server-initiated unidirectional stream (for streaming methods like StreamEvents and AudioFrame).

Method semantics

Place a single outbound call. The gateway assigns a call_sid if the request omits one. Subsequent state changes arrive as CallEvents on the event stream subscribed via StreamEvents.
Bulk dialer. Reads phone numbers from csv_url, paces at calls_per_second, caps at max_concurrent_calls. AbortBulk cancels a campaign by campaign_id.
Hang up an active call by call_sid.
Subscribe to call lifecycle events. The client_id should be a stable UUID per process — the gateway uses it to demux uni-streams across many parallel SDK instances.
Tell the gateway what to do with PSTN-originated calls hitting trunk_id: reject, play and hangup, fire a webhook, or hand off to the AI bridge.
Poll incoming calls (per trunk) and answer one explicitly. Use this when the SDK is acting as a click-to-answer agent rather than letting SetInboundRouting auto-handle.
Operational cleanup tooling. A “bucket” is a server-side set of calls that share an attribute the gateway tracks for triage — typically parked-too-long, abandoned, or orphaned (no SDK heartbeat). Use these RPCs to enumerate stuck calls and bulk-act on them. The intended action is 0=hangup to clear them during ops incidents. These are not a transfer or conferencing primitive — neither capability is supported on this platform.
Override the in-flight dialplan for a call_sid: hang up, park, music-on-hold, playback, unpark+bridge, answer, or open the AI bidirectional stream.
The platform’s AI-network unblocker. While the AI is talking, the gateway watches the inbound leg for the human caller’s voice (energy / VAD / semantic detection, per-trunk via auto_bargein_mode). When the human starts speaking, the AI’s outbound audio is gated within barge_in_patience_ms so the human is heard immediately. This RPC is the explicit handle to trigger or arm barge-in for a call_sid; the per-call knobs auto_barge_in and barge_in_patience_ms on OriginateRequest arm it automatically. Not the supervisor-injection feature found in legacy PBXs.
Bidirectional audio. Outbound frames are written on a client → server uni-stream; inbound frames arrive on a server → client uni-stream. See Audio Frames.