Developer guide

Build on the Signals Programmable Voice API.

Use the Twilio-compatible Calls resource to create and inspect calls, then control live call behaviour with OneML returned by your server.

Public documentation. Self-service onboarding. Live in Nigeria.

Create a call

POST /2010-04-01/Accounts/ACCOUNT_SID/Calls.json
Host: api.helios.pressone.co
Content-Type: application/x-www-form-urlencoded

To=+2341800000001
From=+2341700000000
Url=https://example.com/voice
StatusCallback=https://example.com/status

Your server returns OneML

<Response>
  <Say>Your delivery arrives today.</Say>
  <Gather numDigits="1" action="/delivery-response" />
</Response>
2010-04-01 Calls resourceOneML call controlForm-encoded webhooksStatus callbacks on REST-created callsNigerian phone numbers

Core model

REST creates the call. OneML controls the call.

Call control

  1. Outbound: your application creates a call on the Calls resource.

  2. Inbound: a call arrives on a Signals number and Signals requests its configured voice URL.

  3. Signals requests your webhook URL for call control.

  4. Your server returns a OneML document.

  5. Signals executes the verbs on the live call.

  6. Action URLs and, for REST-created outbound calls, status callbacks return data to your server.

An outbound call begins with a request to the Calls resource. An inbound call begins when someone dials a Signals number configured with a voice URL. From that point, both directions follow the same webhook control loop.

Your server never holds the call open. It answers each request with a OneML document describing the next step, and Signals executes it.

Calls API

Create a call, then follow its lifecycle.

Create an outbound call

curl -X POST "https://api.helios.pressone.co/2010-04-01/Accounts/ACCOUNT_SID/Calls.json" \
  -u ACCOUNT_SID:AUTH_TOKEN \
  -d "To=+2341800000001" \
  -d "From=+2341700000000" \
  -d "Url=https://example.com/voice"

Placeholder credentials and numbers. Replace with your own account values.

queued → ringing → in-progress → completed

A call created through the API begins queued. Terminal outcomes may also be busy, no-answer, canceled or failed, according to the documented call status values.

The CallSid returned by the create request identifies the call for later inspection through the Calls resource.

Webhooks and actions

Signed, form-encoded requests to your server.

Webhook request

POST https://example.com/voice
Content-Type: application/x-www-form-urlencoded
X-Twilio-Signature: SIGNATURE

CallSid=CALL_SID
AccountSid=ACCOUNT_SID
From=+2341700000000
To=+2341800000001
CallStatus=ringing
Direction=inbound
ApiVersion=2010-04-01

Placeholder identifiers. Field values are illustrative.

Webhooks are POSTed as form-encoded requests by default and carry standard fields including CallSid, AccountSid, From, To, CallStatus, Direction and ApiVersion.

Gather, Record and Dial each accept an action URL. When the verb finishes, Signals posts its result there and your server returns the next OneML document.

Requests are signed with the X-Twilio-Signature header. Verify the signature using the public verification guide before acting on a request.

Capabilities

The documented surface you can build on.

Create and receive calls

Create outbound calls on the Calls resource and receive inbound calls on a Nigerian number configured with a voice URL.

Gather keypad or speech input

Gather collects DTMF, speech or both, and posts the result to the action URL you supply.

Record and retrieve

Record calls and retrieve the resulting recordings through the documented recording endpoints.

Dial and bridge

Dial supported phone numbers to bridge a caller to another party.

Media streaming

Stream call media to your own service using the documented one-way and bidirectional stream patterns.

Status callbacks

Calls created through the REST API can post progress events to a StatusCallback URL.

Inspect, update and end calls

Read call resources and modify or end a call in progress where the documentation supports it.

Forwarding

Forward inbound calls to another destination using the documented forwarding patterns.

Known boundaries

Build against the documented surface.

Status callbacks are outbound only

Only calls created through the REST API emit status callbacks. Inbound calls are controlled by the configured voice URL and emit none.

SIP targets inside Dial are narrower

The <Dial><Sip> target is limited to registered extensions within the caller’s own tenant domain.

Live call update differs

Updating a call in progress requires JSON with snake_case fields, which differs from the encoding Twilio helper libraries produce.

Unsupported elements are listed publicly

Verbs, attributes and behaviours that are not supported are enumerated in the public compatibility matrix. Check it before you build.

Access

Get credentials and place a real call.

  1. 01Subscribe to PressOne Business.
  2. 02Complete KYC.
  3. 03Enable Developer Mode.
  4. 04Get credentials.
  5. 05Follow the quickstart.
  6. 06Move a controlled workload to production.

Platform access is ₦500,000 per year and includes one Nigerian phone number and ₦200 of test credit. Self-service onboarding is the default and costs nothing extra.

Discovery remains available when a production architecture needs review before traffic moves.

Next step

Ship a controlled voice workload on Signals.