Quickstart
Send your first fax from your terminal. You need a XipFax account and a PDF at a public link.
1. Make an API key
Sign in to the developer console, open API keys and make a key. You see it whole just once, so copy it then. Every key is live: what it sends is real.
Keep it in your shell for the steps below:
export XIPFAX_API_KEY=xipfax_key_live_…This browser didn’t let us copy it. Select the code to copy it.
2. Ask what a fax costs
This costs nothing, and it shows your key works.
curl "https://api.xipfax.com/quote?pages=3" \
-H "Authorization: Bearer $XIPFAX_API_KEY"This browser didn’t let us copy it. Select the code to copy it.
{
"pages": 3,
"price": {
"amount_minor": 499,
"currency": "USD"
},
"price_shown": "$4.99",
"terms": "$4.99 for up to 10 pages, then 20¢ a page. Nothing if it fails.",
"price_list": "2026-10-22"
}This browser didn’t let us copy it. Select the code to copy it.
3. Add a document
Your account has one draft, the fax you’re preparing. Add a PDF to it by a link XipFax can fetch: https, public, and answering with the PDF itself. Each POST names a key of your own in Idempotency-Key, so that a retry can’t add it twice. No uuidgen? Any unique string of up to 255 printable ASCII characters works.
curl -X POST "https://api.xipfax.com/draft/documents" \
-H "Authorization: Bearer $XIPFAX_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"name": "lease.pdf",
"url": "https://example.com/lease.pdf"
}'This browser didn’t let us copy it. Select the code to copy it.
{
"document": {
"id": "01JC0000000000000000000002",
"name": "lease.pdf",
"size_bytes": 48210,
"page_count": 3,
"status": "ready",
"url": "https://…"
},
"upload": null
}This browser didn’t let us copy it. Select the code to copy it.
4. Check the draft
The draft lists its documents in the order the fax sends them. Keep their ids for the next step.
curl "https://api.xipfax.com/draft" \
-H "Authorization: Bearer $XIPFAX_API_KEY"This browser didn’t let us copy it. Select the code to copy it.
{
"id": "01JC0000000000000000000001",
"documents": [
{
"id": "01JC0000000000000000000002",
"name": "lease.pdf",
"size_bytes": 48210,
"page_count": 3,
"status": "ready",
"url": "https://…"
}
]
}This browser didn’t let us copy it. Select the code to copy it.
5. Send the fax
This step sends a real fax, and it’s charged. It goes to the number you name, so name one of your own. Its pages count on your plan, or where you have no plan its price is held on the card you saved, and taken once it’s delivered. A fax that fails costs nothing.
Name your fax number and the draft’s documents, in their order. A draft whose documents aren’t these is refused, so that nothing you didn’t name is sent.
curl -X POST "https://api.xipfax.com/draft/send" \
-H "Authorization: Bearer $XIPFAX_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"fax_number": "+1 202 555 0143",
"document_ids": [
"01JC0000000000000000000002"
]
}'This browser didn’t let us copy it. Select the code to copy it.
{
"fax": {
"id": "01JC0000000000000000000001",
"direction": "sent",
"status": "sending",
"step": "queued",
"office_id": null,
"to_number": "+12025550143",
"from_number": "+12025550100",
"pages": 3,
"price": {
"amount_minor": 499,
"currency": "USD"
},
"sent_at": "2026-11-05T15:04:05.000Z",
"finished_at": null,
"retry_at": null,
"failure": null,
"time_zone": "America/New_York",
"sender_name": "Alex Example",
"cover_confidential": false
},
"paid_by": "card",
"confirm_url": null
}This browser didn’t let us copy it. Select the code to copy it.
paid_by says how it’s paid: plan or card. Where XipFax can’t send it without you, as when you have neither or your bank asks you to confirm, nothing is sent or held: paid_by is null, and confirm_url is the link where the fax waits for you on xipfax.com.
6. Follow the fax
Keep the id the send gave in your shell, and read the fax by it until its status is delivered or failed.
export FAX_ID=01JC0000000000000000000001This browser didn’t let us copy it. Select the code to copy it.
curl "https://api.xipfax.com/faxes/$FAX_ID" \
-H "Authorization: Bearer $XIPFAX_API_KEY"This browser didn’t let us copy it. Select the code to copy it.
Once it’s delivered, its confirmation says who received how many pages, from whom and when:
curl "https://api.xipfax.com/faxes/$FAX_ID/confirmation" \
-H "Authorization: Bearer $XIPFAX_API_KEY"This browser didn’t let us copy it. Select the code to copy it.
Next
- Webhooks: how XipFax will tell your server a fax has ended, once you can register an endpoint.
- The API reference: every operation, event and object.