Out of the Box the Phaxio site will handle most of what you want. You can both send and receive (download) as soon as you get started.

Porting Numbers

Yep, it's super easy, they have a ready made Porting tool.

Use Cases

The most common use-case we've seen is to receive the "Phax" directly into a CRM. A receive handler is easliy constructed, see the PHP example below.

Example Phaxio Receive Handler

The documentation provided by Phaxio is fantastic, examples are provided using command-line curl. You should be able to translate that in to whatever programming language you like.

$fax = json_decode($_POST['fax']);
switch ($fax['direction']) {
case 'sent':
    // No Data to Look This Up
    // $n = $this->m->find_one('numbers',array('e164',radix_format::phone_e164($fax['from_number'])));
    // $c = $this->m->find_one('contact',array('_id' => new MongoID($n['contact_id'])));
case 'received':
	$customer = find_customer_by_fax_number($fax['to_number']);
    radix::bail('Invalid Request',400);
save_fax_to_crm($customer['id'], $fax['binary_data']);

Test Faxes

Phaxio also has an easy test system for checking out the systems you've built.

curl https://api.phaxio.com/v1/testReceive \
    -F 'api_key=$API_KEY' \
    -F 'api_secret=$API_SECRET' \
	-F 'from_number=1234567890' \
	-F 'to_number=0987654321' \
    -F 'filename=@file.pdf'

Your receive handler will get the notice almost instantly.