Skip to main content

Sending and Receiving Fax

It's easy to start sending and receiving Fax using SignalWire's APIs! You will need at least one number to send and receive faxes, so if you don't have one already, please follow the instructions below.

Obtaining and configuring a number

Log in to your SignalWire Space. From the Phone Numbers section, you can buy a new phone number.

Receiving your first fax

There are two parts to receiving a fax:

  1. A SignalWire Phone Number;
  2. The instructions to actually receive the Fax.

After you have acquired a number, or in case you have one already, open its settings by clicking on "Edit Settings". Scroll down until you reach "Voice and Fax Settings", as shown in the next figure, and configure it to:

  • "ACCEPT INCOMING CALLS AS" -> Fax
  • "HANDLE FAXES USING" -> LaML Webhooks
A screenshot of the settings for a fax number. Under the Voice and Fax Settings section, a number of values are defined. 'Accept Incoming Calls As' is set to 'Fax'. 'Handle Faxes Using' is set to 'LaML Webhooks'.
Phone Number Settings

Setting up the instructions to receive faxes

Using cXML Applications

cXML Applications (also called LaML Bins) allow you to tell SignalWire how to handle calls, messages, or faxes by using instructions called Verbs. You can learn more about cXML Applications on this article, but essentially we need to create a new Bin in the LaML section of the Dashboard with the following instructions:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Receive action="/fax/received"/>
</Response>

Lastly, we need to connect the phone number with the instructions to receive the fax, so we copy the Bin's URL from the cXML Applications section of the Dashboard and paste it in the phone number's "WHEN A FAX COMES IN" field, like this:

A screenshot of Voice and Fax Settings. The 'When a Fax Comes In' field is circled in red, and annotated with the instructions 'Paste the Bin URL Here'.
Updating the Phone Number instructions.

That's it! You can now start receiving faxes on your phone number, and they will appear under LaML -> Faxes in your Dashboard:

A screenshot of the SignalWire Project page. The Faxes tab within the LāML section is selected, showing a log of faxes.
Faxes Tab

Using Compatibility SDKs

If you wish to avoid using SignalWire's cXML Applications, you can use our SDKs and host the instructions yourself. Please see our <Receive\> Verb instructions for specific code examples.

You'll then need to make your code accessible to SignalWire through a Webhook. We have a great guide on how to do this using ngrok!

Sending your first fax

There are three parts to sending a fax:

  1. A SignalWire Phone Number;
  2. The destination number;
  3. The publicly available media to be sent, such as a PDF file.

Using our REST API

Using our Send a Fax endpoint you can make a POST request to

https://<YOUR_SPACE_URL>.signalwire.com/api/laml/2010-04-01/Accounts/<YOUR_PROJECT_ID>/Faxes

with the following body parameters:

  • From
  • To
  • MediaUrl

Using Compatibility SDKs

You can send faxes using our SDK's Send a Fax function, in multiple languages:

const { RestClient } = require('@signalwire/compatibility-api')
const client = RestClient('YourProjectID', 'YourAuthToken', { signalwireSpaceUrl: 'example.signalwire.com' })

client.fax.faxes.create({
from: '+13103383454',
to: '+13104456789',
mediaUrl: 'https://example.com/fax.pdf'
})
.then(fax => console.log(fax.sid))
.done();

Next steps

Congratulations! You can now send and receive faxes using SignalWire. You are now ready to explore the advanced guides in the Fax section from the left menu.