Signals Docs
Getting started

Introduction

Signals by PressOne is programmable telephony infrastructure for Africa. It is one platform that sits between your software and the phone networks. Your code, PBX or AI agent talks to Signals, and Signals talks to the mobile and fixed networks in Nigeria.

Signals handles the telephony work that sits under every call:

  • Numbering: phone numbers you search for, hold, buy and route.
  • Routing: choosing the carrier path for each outbound call.
  • Call control: placing, answering, forwarding and ending calls.
  • Media: carrying the audio, with optional encryption.
  • Recording: capturing and storing call audio.
  • Call events: a record of what happened on each call, including the SIP signalling.
  • Fraud controls: limits on where calls may go, how many run at once and how much they may spend.
  • Metering: measuring usage and charging your balance in naira.

You pick how much of that you want to drive yourself by choosing one of the ways in.

Three ways in

Every way in runs on the same numbers, routes, recordings and billing. A call placed one way rings the same phone as a call placed another way.

Programmable Voice

Programmable Voice lets your code place and answer calls. You describe what happens on each call in OneML, an XML format with verbs such as <Say>, <Gather> and <Dial>. When a call needs instructions, Signals reads your OneML and follows it.

The Calls API is compatible with Twilio's voice API. It uses the same paths, parameters and authentication, so a Twilio voice application can move to Signals by changing the host and the credentials:

Code
https://api.signals.pressone.africa/2010-04-01/Accounts/{AccountSid}/Calls.json

Read Programmable Voice overview or start with the Programmable Voice quickstart.

Intelligent SIP Trunks

A SIP trunk is a connection between your phone system and Signals over SIP, the signalling protocol that PBXs, contact centre platforms and AI voice agents already speak. Your system sends calls to Signals, and Signals picks the route and applies your outbound policy. An outbound policy is the set of rules that decides where a trunk may call and how much it may spend.

Intelligent SIP Trunks are generally available. Read SIP Trunks overview or start with the SIP trunk quickstart.

Automations

Automations turns a business event into a call and an answer, without a call flow to code. A webhook or a schedule starts a workflow; Signals places the call, plays the message, takes the keypad answer and posts the outcome back to your system. Automations is generally available.

You can run your own AI voice agent on Signals today. In Programmable Voice, <Connect><Stream> sends the caller's audio to your WebSocket endpoint and plays back the audio your agent returns. A managed Conversational IVR, where Signals hosts the agent for you, is planned.

How these docs are organized

SectionWhat it covers
Getting startedThis introduction, your first call, authentication and requests and errors. Read these first.
Programmable VoicePlacing and receiving calls from code, webhooks, recordings, the OneML reference and moving from Twilio.
SIP TrunksCreating trunks, authentication and security, outbound policies, numbers and routing and connecting your PBX.
API referenceEvery endpoint, with its parameters, request bodies, responses and errors.

The API reference

Signals has two APIs. Each uses its own credentials.

  • The Signals API manages your account: trunks, numbers, policies, voice applications, call history, webhooks, billing and more. Its base URL is https://api.signals.pressone.africa/v1, and you authenticate with an API key sent as a Bearer token.
  • The Calls API places and controls Programmable Voice calls. It lives under https://api.signals.pressone.africa/2010-04-01 and uses HTTP Basic authentication with your voice account's AccountSid and auth token.

The API reference groups the endpoints as follows:

GroupWhat it coversCredentials
SIP TrunkingTrunks, credentials, termination URIs, outbound policies and tests.API key
NumbersSearch, hold and buy number blocks, then route them.API key
Programmable VoiceVoice applications, their numbers and the voice account.API key
Programmable Voice callsPlace and control calls, fetch recordings. Twilio-compatible.AccountSid and auth token
Calls and recordingsCall history, live calls, SIP ladders and recordings.API key
WebhooksEndpoints, deliveries, test events and replays.API key
Billing and usageBalance, documents, usage and rates.API key
PlatformProjects, subaccounts, alerts, audit and SIP endpoints.API key

Authentication explains both kinds of credential. Requests and errors explains the conventions every Signals API endpoint shares.

Account concepts

A few words appear on almost every page. This section defines them.

Organization

Your organization is your company's account on Signals. Everything you create belongs to one organization, and no request can reach another organization's data.

The people who sign in to the Signals console are members of your organization. Each member has one role:

RoleRole nameWhat it can do
Adminorg:adminEverything, including members, subaccounts and organization settings.
Engineerorg:engineerBuild and operate: trunks, numbers, policies, voice applications, API keys, webhooks, diagnostics.
Billingorg:billingBalance, funding, invoices and financial alerts.
Viewerorg:viewerRead-only access to calls, configuration and billing summaries.

API keys carry a role too, so a key can never do more than a member with that role.

Project

A project is the unit that owns your telephony resources and pays for them. Number blocks, calls, recordings, webhook endpoints, API keys and usage each belong to exactly one project. Every project has:

  • one billing account, the balance its calls are charged to, in naira (NGN);
  • one voice account, which holds the AccountSid and auth token for the Calls API.

Today an organization has one active project, so you rarely need to name it. When an organization has more than one project, requests name the project with the X-Project-ID header. List your projects with GET /v1/projects.

Subaccount

A subaccount is a named group inside one project with its own limits. Use one per customer, branch or department when you want to cap each group separately. A subaccount can limit:

  • concurrent calls, inbound and outbound together;
  • outbound calls per second (inbound calls are not refused for CPS);
  • maximum call duration;
  • daily spend;
  • the highest destination rate a call may be charged.

A subaccount has no balance of its own. Its calls are charged to the project's billing account and reported per subaccount. A trunk belongs either to its project directly or to one subaccount in that project. Subaccounts do not nest. An API key can be restricted to one subaccount, so that it reaches only that subaccount's resources.

Next steps

Last modified on