Skip to main content

Support & Resources

CrazyFax webhooks

Premium Features

Loading...

CrazyFax webhooks

CrazyFax webhooks

CrazyFax webhooks let your own systems know the moment a fax is sent, fails, or arrives. For example, you can mark an invoice as "faxed" in your accounting system, or pull new inbound faxes straight into a document management tool.

Where to set it up

  1. Go to Products > CrazyFax > Fax Settings.
  2. On the General tab, choose the fax service you want and click Configure This Service.
  3. Open the Webhooks tab.
  4. Click Add Webhook.
  5. Fill in the form (see below) and click Add Webhook Endpoint.

You can add more than one webhook endpoint per fax service, for example one for your CRM and one for a team chat channel.

For a full technical reference, click How webhooks work on the Webhooks tab, or go to Products > CrazyFax > Webhooks.

Settings explained

SettingWhat it does
Fax ServiceWhich fax service sends events to this endpoint.
Endpoint NameA friendly name so you can recognise the endpoint later, for example "Accounts CRM". Up to 128 characters.
Target URLWhere events are sent. Use an https:// address that is reachable from the public internet.
Webhook Signing SecretA secret your server uses to confirm messages really came from CrazyFax. Click Generate to create a strong secret, then Copy to save it somewhere safe.
Route FilterOnly send events for one inbound route. Leave as All routes to receive events for every route on the service.
Content TypeAlways application/json.
Enabled EventsWhich events you want to receive (see below).
Timeout SecondsHow long CrazyFax waits for your server to reply. Leave blank to use the default of 10 seconds.
Max Delivery RetriesHow many times CrazyFax tries to deliver an event before giving up. Leave blank to use the default of 10 attempts.
Endpoint StatusTurns delivery on or off. New endpoints start switched off, so remember to turn this on. Turning a webhook off does not change your billing or plan.

After saving, the signing secret is not shown again. If you lose it, use the rotate secret button (key icon) next to the endpoint to create a new one, then update your server.

Events you can choose

EventLabel in portalWhen it is sent
fax.v1.outbound.succeededOutbound succeededA fax you sent was delivered successfully.
fax.v1.outbound.failedOutbound failedA fax you sent failed, was cancelled, or expired.
fax.v1.inbound.documents_readyInbound documents readyA fax was received and the document is ready for you.
fax.v1.inbound.failedInbound failedAn incoming fax could not be received or processed.
fax.v1.outbound.billing_holdOutbound billing holdA fax you sent is waiting because your account does not have enough credit yet.
fax.v1.outbound.billing_hold_releasedOutbound billing hold releasedCredit is back and the waiting fax is being sent.
fax.v1.outbound.billing_hold_expiredOutbound billing hold expiredThe fax waited too long for credit and was not sent.
fax.v1.inbound.billing_hold_releasedInbound billing hold releasedCredit is back and a received fax that was on hold has been released to you.
fax.v1.inbound.billing_hold_expiredInbound billing hold expiredA received fax waited too long for credit and could not be released.

A good starting set for most businesses is Outbound succeeded, Outbound failed and Inbound documents ready. The billing hold events are useful if you want to be warned when faxes are held up by low credit.

Sending to a chat app

If your Target URL is a Slack, Discord, Microsoft Teams or Google Chat incoming webhook address, CrazyFax sends a short, easy-to-read message instead of the full JSON.

Example message

{
  "event": "fax.v1.outbound.succeeded",
  "delivery_id": 1842,
  "payload_version": "2026-04-30",
  "account_code": "295327",
  "fax": {
    "id": "fax_01JZABCFAX123",
    "direction": "outbound",
    "status": "completed",
    "from_number": "61290561899",
    "to_number": "61255501001",
    "customer_reference": "INV-10001",
    "pages_total": 3,
    "pages_transferred": 3,
    "terminal_result_category": "success",
    "terminal_result_text": "sent",
    "completed_at": "2026-05-10T00:15:30Z",
    "created_at": "2026-05-10T00:10:00Z",
    "updated_at": "2026-05-10T00:15:30Z"
  }
}
FieldWhat it means
eventWhich event this is.
delivery_idA unique ID for this delivery. Use it to ignore duplicates.
payload_versionThe message format version.
fax.idA unique ID for the fax. Use it to find or download the fax.
fax.directionoutbound (you sent it) or inbound (you received it).
fax.statusThe fax's current status, for example completed.
fax.from_number / fax.to_numberThe sending and receiving fax numbers.
fax.customer_referenceYour own reference, if you added one when sending, for example an invoice number.
fax.pages_total / fax.pages_transferredHow many pages the fax has, and how many were successfully sent or received.
fax.terminal_result_category / fax.terminal_result_textThe final result, for example success / sent or received.
fax.completed_at / created_at / updated_atWhen the fax finished, was created and was last updated (UTC).

Inbound faxes use the same layout, with direction set to inbound.

Webhooks never include the fax image or PDF. To get the document, use the fax.id to find it under Fax Jobs in the portal, or through the CrazyFax API.

Security

Each request includes these headers:

Content-Type: application/json
X-Fax-Event: <event name>
X-Fax-Delivery-ID: <unique delivery ID>
X-Fax-Timestamp: <time the message was signed, for example 2026-05-10T00:15:30Z>
X-Fax-Signature: sha256=<signature>

The CrazyFax signature is calculated over the timestamp (converted to Unix seconds) and the message body together. Reject messages where the timestamp is more than 5 minutes old. See Verifying webhook signatures.

Testing

Click the test button (paper plane icon) next to an endpoint. CrazyFax sends a signed fax.v1.webhook.test message to your URL and shows whether it was delivered, including the HTTP result from your server.

{
  "event": "fax.v1.webhook.test",
  "delivery_id": 99,
  "payload_version": "2026-04-30",
  "account_code": "295327",
  "test": {
    "endpoint_id": 12,
    "message": "This is a signed webhook test event from Crazy Fax.",
    "created_at": "2026-05-10T00:16:00Z"
  }
}

Delivery and retries

  • Your server should reply with a 2xx status (for example 200 or 204) within the endpoint timeout (10 seconds by default). Redirects, errors and timeouts count as failures.
  • If delivery fails, CrazyFax tries again after 5 minutes, 15 minutes, 1 hour, 4 hours, then every 12 hours, up to the endpoint's retry limit (10 attempts by default).
  • Retries only repeat the notification. They never send the fax again.
  • A failed webhook does not change the result of the fax.

Delivery history

Go to Products > CrazyFax > Delivery & Worker Logs and open the Webhook Deliveries tab. It shows each delivery with its event type, the related fax job, the number of attempts and whether it succeeded, is pending or failed. You can search and filter by status.

Email alerts and webhooks

CrazyFax email alerts (on the Alerts tab) and webhooks are independent. Turning one off does not turn the other off. Use email alerts if you want the fax emailed to a person, and webhooks if you want a system to be notified automatically.

Need Help?