Get started
Quickstart
Copy these curl calls against the sandbox. Expand a sample label below each call to see typical JSON. Replace placeholders after your account is approved — or log in to fill them automatically.
1 Authenticate
Security_Authenticate — Username (your email) + Password only (no api-key). Session id is throwaway; later calls re-auth each time.
curl -s -X POST "https://integrate.westfax.com/rest/Security_Authenticate/json" \ -d "Username=YOUR_EMAIL" \ -d "Password=YOUR_SIM_PASSWORD"
2 List products
Profile_GetF2EProductList — use a returned Id as ProductId. Example uses x-api-key header.
curl -s -X POST "https://integrate.westfax.com/rest/Profile_GetF2EProductList/json" \ -H "x-api-key: YOUR_X_API_KEY"
Sample responses
{
"Success": true,
"Result": [
{
"Id": "YOUR_PRODUCT_ID",
"Name": "555-200-0000",
"ProductType": "FaxForward",
"PlanId": "1fedf262-5042-4f3a-b368-8d975e60d6f7",
"InboundNumber": "5552000000",
"TimeZone": "Pacific",
"ProductState": "OK",
"CurrentBillingPeriodStart": "2026-07-01T00:00:00Z",
"CurrentBillingPeriodEnd": "2026-08-01T00:00:00Z",
"FreeTrialEnd": "2026-10-17T23:59:59Z",
"PeriodicQuantity": 0,
"QuantityInbound": 0,
"QuantityOutbound": 0,
"ShowDeletedItemsFolder": true,
"DefaultCoverPageId": "00000000-0000-0000-0000-000000000000"
},
{
"Id": "YOUR_PRODUCT_ID_2",
"Name": "555-200-0001",
"ProductType": "FaxForward",
"PlanId": "1fedf262-5042-4f3a-b368-8d975e60d6f7",
"InboundNumber": "5552000001",
"TimeZone": "Pacific",
"ProductState": "OK",
"CurrentBillingPeriodStart": "2026-07-01T00:00:00Z",
"CurrentBillingPeriodEnd": "2026-08-01T00:00:00Z",
"FreeTrialEnd": "2026-10-17T23:59:59Z",
"PeriodicQuantity": 0,
"QuantityInbound": 0,
"QuantityOutbound": 0,
"ShowDeletedItemsFolder": true,
"DefaultCoverPageId": "00000000-0000-0000-0000-000000000000"
}
]
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadUsernamePassword",
"InfoString": "Authorization Failed (Bad Username or Password)"
}
3 Fax usage by product
Profile_GetFaxUsageByProductId — inbound/outbound counts for a date span (max 32 days). CurrentBillingPeriodStart/End echo the requested range; quantities count sandbox faxes in that window.
curl -s -X POST "https://integrate.westfax.com/rest/Profile_GetFaxUsageByProductId/json" \ -H "x-api-key: YOUR_X_API_KEY" \ -d "ProductId=YOUR_PRODUCT_ID" \ -d "StartDate=6/1/2026 12:00:00AM" \ -d "EndDate=7/1/2026 12:00:00AM"
Sample responses
{
"Success": true,
"Result": {
"Id": "YOUR_PRODUCT_ID",
"Name": "555-200-0000",
"ProductType": "FaxForward",
"PlanId": "1fedf262-5042-4f3a-b368-8d975e60d6f7",
"InboundNumber": "5552000000",
"TimeZone": "Pacific",
"ProductState": "OK",
"CurrentBillingPeriodStart": "2026-06-01T00:00:00Z",
"CurrentBillingPeriodEnd": "2026-07-01T00:00:00Z",
"FreeTrialEnd": "2026-10-17T23:59:59Z",
"PeriodicQuantity": 0,
"QuantityInbound": 51,
"QuantityOutbound": 79,
"ShowDeletedItemsFolder": true,
"DefaultCoverPageId": "00000000-0000-0000-0000-000000000000"
}
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadUsernamePassword",
"InfoString": "Authorization Failed (Bad Username or Password)"
}
{
"Success": false,
"ErrorString": "Handler_Failed_",
"InfoString": "Handler_Failed_MissingParameters: ProductId"
}
{
"Success": false,
"ErrorString": "Api_Failed_",
"InfoString": "Api_Failed_"
}
{
"Success": false,
"ErrorString": "Api_Failed_Action_Not_Allowed",
"InfoString": "Timespan is more than 32 days"
}
4 Send a fax
Fax_SendFax — multipart with Files0. Destination last 4 digits pick the final Call Result. Job stays Submitted for 2 minutes, then finalizes.
Numbers1=5552001111 → Call Result Sent after the 2-minute window.
curl -s -X POST "https://integrate.westfax.com/rest/Fax_SendFax/json" \
-H "x-api-key: YOUR_X_API_KEY" \
-F "ProductId=YOUR_PRODUCT_ID" \
-F "JobName=Sandbox Sent" \
-F "Header=From sandbox" \
-F "Numbers1=5552001111" \
-F 'FaxQuality=Fine' \
-F 'CSID=(970) 289-5979' \
-F 'CallBackUrl=[GET]http://yourweburl.com/{@jobid}?prod={@prodid}&dir={@dir}' \
-F "Files0=@./your-document.pdf"
Numbers1=5552002222 → Call Result Busy after the 2-minute window.
curl -s -X POST "https://integrate.westfax.com/rest/Fax_SendFax/json" \
-H "x-api-key: YOUR_X_API_KEY" \
-F "ProductId=YOUR_PRODUCT_ID" \
-F "JobName=Sandbox Busy" \
-F "Header=From sandbox" \
-F "Numbers1=5552002222" \
-F 'FaxQuality=Fine' \
-F 'CSID=(970) 289-5979' \
-F 'CallBackUrl=[GET]http://yourweburl.com/{@jobid}?prod={@prodid}&dir={@dir}' \
-F "Files0=@./your-document.pdf"
Numbers1=5552003333 → Call Result OperatorIntercept after the 2-minute window.
curl -s -X POST "https://integrate.westfax.com/rest/Fax_SendFax/json" \
-H "x-api-key: YOUR_X_API_KEY" \
-F "ProductId=YOUR_PRODUCT_ID" \
-F "JobName=Sandbox Disconnected" \
-F "Header=From sandbox" \
-F "Numbers1=5552003333" \
-F 'FaxQuality=Fine' \
-F 'CSID=(970) 289-5979' \
-F 'CallBackUrl=[GET]http://yourweburl.com/{@jobid}?prod={@prodid}&dir={@dir}' \
-F "Files0=@./your-document.pdf"
Numbers1=5552004444 → Call Result Failed after the 2-minute window.
curl -s -X POST "https://integrate.westfax.com/rest/Fax_SendFax/json" \
-H "x-api-key: YOUR_X_API_KEY" \
-F "ProductId=YOUR_PRODUCT_ID" \
-F "JobName=Sandbox Failed" \
-F "Header=From sandbox" \
-F "Numbers1=5552004444" \
-F 'FaxQuality=Fine' \
-F 'CSID=(970) 289-5979' \
-F 'CallBackUrl=[GET]http://yourweburl.com/{@jobid}?prod={@prodid}&dir={@dir}' \
-F "Files0=@./your-document.pdf"
Numbers1=5552005555 → Call Result NoAnswer after the 2-minute window.
curl -s -X POST "https://integrate.westfax.com/rest/Fax_SendFax/json" \
-H "x-api-key: YOUR_X_API_KEY" \
-F "ProductId=YOUR_PRODUCT_ID" \
-F "JobName=Sandbox NoAnswer" \
-F "Header=From sandbox" \
-F "Numbers1=5552005555" \
-F 'FaxQuality=Fine' \
-F 'CSID=(970) 289-5979' \
-F 'CallBackUrl=[GET]http://yourweburl.com/{@jobid}?prod={@prodid}&dir={@dir}' \
-F "Files0=@./your-document.pdf"
Self-send tip: set Numbers1 to your own product number 555-200-0000 with a Success last-4 (1111 or any unlisted ending) to also create an inbound fax.
Sample responses
{
"Success": true,
"Result": "f9e8d7c6-b5a4-3210-9876-543210fedcba"
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadUsernamePassword",
"InfoString": "Authorization Failed (Bad Username or Password)"
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadProductId",
"InfoString": "Authorization Failed (Bad Product Id)"
}
{
"Success": false,
"ErrorString": "Handler_Failed_",
"InfoString": "Handler_Failed_MissingParameters: Numbers"
}
{
"Success": false,
"ErrorString": "Handler_Failed_",
"InfoString": "Handler_Failed_MissingParameters: Files"
}
5 List fax identifiers
Fax_GetFaxIdentifiers — filter by direction + StartDate.
curl -s -X POST "https://integrate.westfax.com/rest/Fax_GetFaxIdentifiers/json" \ -H "x-api-key: YOUR_X_API_KEY" \ -d "ProductId=YOUR_PRODUCT_ID" \ -d "FaxDirection=Outbound" \ -d "StartDate=1/1/2020"
Sample responses
{
"Success": true,
"Result": [
{
"Id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Direction": "Outbound",
"Date": "2026-06-15T18:00:00Z",
"Tag": "None"
},
{
"Id": "f9e8d7c6-b5a4-3210-9876-543210fedcba",
"Direction": "Outbound",
"Date": "2026-06-14T12:00:00Z",
"Tag": "Retrieved"
}
]
}
{
"Success": true,
"Result": []
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadUsernamePassword",
"InfoString": "Authorization Failed (Bad Username or Password)"
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadProductId",
"InfoString": "Authorization Failed (Bad Product Id)"
}
6 Get fax descriptions
Fax_GetFaxDescriptions — full status objects (2-minute rule applied at read time).
curl -s -X POST "https://integrate.westfax.com/rest/Fax_GetFaxDescriptions/json" \ -H "x-api-key: YOUR_X_API_KEY" \ -d "ProductId=YOUR_PRODUCT_ID" \ -d "FaxDirection=Outbound" \ -d "StartDate=1/1/2020"
Sample responses
{
"Success": true,
"Result": [
{
"FaxCallInfoList": [
{
"CallId": "11111111-2222-3333-4444-555555555555",
"CompletedUTC": "2026-06-15T18:02:00Z",
"TermNumber": "5552001111",
"OrigNumber": "5552000000",
"TermCSID": "(970) 289-5979",
"OrigCSID": "(970) 289-5979",
"Result": "Sent",
"CallPageCount": 1,
"FilterFlag": 0
}
],
"Id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Date": "2026-06-15T18:00:00Z",
"Direction": "Outbound",
"Tag": "None",
"PageCount": 1,
"FaxQuality": "Fine",
"Status": "Complete",
"Reference": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"JobName": "Sandbox Sent",
"CreatedBy": "YOUR_EMAIL",
"LoginId": "00000000-0000-0000-0000-000000000000",
"CreatedVia": "ApiRest",
"DocPageCount": 0,
"FilterValue": "None",
"FolderId": "00000000-0000-0000-0000-000000000000",
"FilesAvailable": false,
"ProcessingState": "Final"
}
]
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadUsernamePassword",
"InfoString": "Authorization Failed (Bad Username or Password)"
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadProductId",
"InfoString": "Authorization Failed (Bad Product Id)"
}
7 Paged search
Fax_GetF2EFaxDescriptions_PagedSearch — page/count via MethodParams; optional dates and filters.
curl -s -X POST "https://integrate.westfax.com/rest/Fax_GetF2EFaxDescriptions_PagedSearch/json" \
-H "x-api-key: YOUR_X_API_KEY" \
-d "ProductId=YOUR_PRODUCT_ID" \
-d "FaxDirection=Inbound" \
--data-urlencode 'MethodParams1={"Name":"page","Value":"1"}' \
--data-urlencode 'MethodParams2={"Name":"count","Value":"25"}'
Sample responses
{
"Success": true,
"Result": {
"TotalItems": 1,
"PageNumber": 1,
"ItemsPerPage": 25,
"Items": [
{
"FaxCallInfoList": [
{
"CallId": "11111111-2222-3333-4444-555555555555",
"CompletedUTC": "2026-06-15T18:02:00Z",
"TermNumber": "5552001111",
"OrigNumber": "5552000000",
"TermCSID": "(970) 289-5979",
"OrigCSID": "(970) 289-5979",
"Result": "Success",
"CallPageCount": 1,
"FilterFlag": 0
}
],
"Id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Date": "2026-06-15T18:00:00Z",
"Direction": "Inbound",
"Tag": "None",
"PageCount": 1,
"FaxQuality": "Fine",
"Status": "Complete",
"Reference": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"JobName": "Sandbox Sent",
"CreatedBy": "System",
"LoginId": "00000000-0000-0000-0000-000000000000",
"CreatedVia": "InboundCall",
"DocPageCount": 0,
"FilterValue": "None",
"FolderId": "00000000-0000-0000-0000-000000000000",
"FilesAvailable": true,
"ProcessingState": "Final",
"FaxId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
]
}
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadUsernamePassword",
"InfoString": "Authorization Failed (Bad Username or Password)"
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadProductId",
"InfoString": "Authorization Failed (Bad Product Id)"
}
{
"Success": false,
"ErrorString": "Handler_Failed_",
"InfoString": "Handler_Failed_MissingParameters: page,count"
}
8 Retrieve documents
Fax_GetFaxDocuments — always returns the canonical test PDF (base64 in FileContents). Replace FAX_ID with an Id from step 5.
curl -s -X POST "https://integrate.westfax.com/rest/Fax_GetFaxDocuments/json" \
-H "x-api-key: YOUR_X_API_KEY" \
-d "ProductId=YOUR_PRODUCT_ID" \
-d "Format=pdf" \
-d 'FaxIds1={"Id":"FAX_ID"}'
Sample responses
{
"Success": true,
"Result": [
{
"FaxFiles": [
{
"ContentType": "application/pdf",
"ContentLength": 12345,
"FileContents": "<base64 truncated\u2026>"
}
],
"Id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Direction": "Inbound",
"Date": "2026-06-15T18:00:00Z",
"Status": "Ok",
"Format": "pdf",
"PageCount": 1
}
]
}
{
"Success": true,
"Result": []
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadUsernamePassword",
"InfoString": "Authorization Failed (Bad Username or Password)"
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadProductId",
"InfoString": "Authorization Failed (Bad Product Id)"
}
{
"Success": false,
"ErrorString": "Handler_Failed_",
"InfoString": "Handler_Failed_MissingParameters: FaxIds"
}
9 Change filter / tag
Fax_ChangeFaxFilterValue — None, Retrieved, or Removed.
curl -s -X POST "https://integrate.westfax.com/rest/Fax_ChangeFaxFilterValue/json" \
-H "x-api-key: YOUR_X_API_KEY" \
-d "ProductId=YOUR_PRODUCT_ID" \
-d "Filter=Retrieved" \
-d 'FaxIds1={"Id":"FAX_ID"}'
Sample responses
{
"Success": true,
"Result": true
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadUsernamePassword",
"InfoString": "Authorization Failed (Bad Username or Password)"
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadProductId",
"InfoString": "Authorization Failed (Bad Product Id)"
}
{
"Success": false,
"ErrorString": "Handler_Failed_",
"InfoString": "Handler_Failed_MissingParameters: FaxIds"
}
{
"Success": false,
"ErrorString": "Api_Failed_",
"InfoString": "Api_Failed_"
}
10 Descriptions by Id
Fax_GetFaxDescriptionsUsingIds — unknown Ids are silently omitted (empty Result).
curl -s -X POST "https://integrate.westfax.com/rest/Fax_GetFaxDescriptionsUsingIds/json" \
-H "x-api-key: YOUR_X_API_KEY" \
-d "ProductId=YOUR_PRODUCT_ID" \
-d 'FaxIds1={"Id":"FAX_ID"}'
Sample responses
{
"Success": true,
"Result": [
{
"FaxCallInfoList": [
{
"CallId": "11111111-2222-3333-4444-555555555555",
"CompletedUTC": "2026-06-15T18:02:00Z",
"TermNumber": "5552001111",
"OrigNumber": "5552000000",
"TermCSID": "(970) 289-5979",
"OrigCSID": "(970) 289-5979",
"Result": "Sent",
"CallPageCount": 1,
"FilterFlag": 0
}
],
"Id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Date": "2026-06-15T18:00:00Z",
"Direction": "Outbound",
"Tag": "None",
"PageCount": 1,
"FaxQuality": "Fine",
"Status": "Complete",
"Reference": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"JobName": "Sandbox Sent",
"CreatedBy": "YOUR_EMAIL",
"LoginId": "00000000-0000-0000-0000-000000000000",
"CreatedVia": "ApiRest",
"DocPageCount": 0,
"FilterValue": "None",
"FolderId": "00000000-0000-0000-0000-000000000000",
"FilesAvailable": false,
"ProcessingState": "Final"
}
]
}
{
"Success": true,
"Result": []
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadUsernamePassword",
"InfoString": "Authorization Failed (Bad Username or Password)"
}
{
"Success": false,
"ErrorString": "Authorization_Failed_BadProductId",
"InfoString": "Authorization Failed (Bad Product Id)"
}
11 Webhooks
Easiest path: open Webhooks → Use as templates (points at the built-in inspector under /webhook/) → open the inspector → on Faxes click Fire webhook. Your handler should return HTTP 200 immediately.
[GET]https://integrate.westfax.com/webhook/in.php?id=YOUR_BIN&prodid={@prodid}&jobId={@jobid}&dir={@dir}
Sample responses
GET /webhook/in.php?id=YOUR_BIN&prodid=YOUR_PRODUCT_ID&jobId=a1b2c3d4-e5f6-7890-abcd-ef1234567890&dir=Inbound → your endpoint; respond HTTP 200
GET /webhook/in.php?id=YOUR_BIN&prodid=YOUR_PRODUCT_ID&jobId=f9e8d7c6-b5a4-3210-9876-543210fedcba&dir=Outbound → your endpoint; respond HTTP 200