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/statusYour server returns OneML
<Response>
<Say>Your delivery arrives today.</Say>
<Gather numDigits="1" action="/delivery-response" />
</Response>Core model
REST creates the call. OneML controls the call.
Call control
Outbound: your application creates a call on the Calls resource.
Inbound: a call arrives on a Signals number and Signals requests its configured voice URL.
Signals requests your webhook URL for call control.
Your server returns a OneML document.
Signals executes the verbs on the live call.
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-01Placeholder 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.
- 01Subscribe to PressOne Business.
- 02Complete KYC.
- 03Enable Developer Mode.
- 04Get credentials.
- 05Follow the quickstart.
- 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