Agent Skill · Sinch

sinch-fax-api

Send and receive faxes programmatically with Sinch Fax API. Use when building fax workflows, fax-to-email delivery, sending PDFs by fax, checking fax status, managing fax services, configuring cover pages, receiving fax webhooks, or integrating fax into healthcare, legal, or financial applications.

Provider: Sinch Path in repo: skills/sinch-fax-api/SKILL.md

Skill body

Sinch Fax API

Overview

The Sinch Fax API lets you send and receive faxes programmatically. It supports multiple file formats, webhooks for incoming faxes, fax-to-email delivery, and automatic retries. Used for healthcare, legal, financial, and government applications where fax remains a required communication channel.

Agent Instructions

Before generating code, gather from the user (skip any item already specified in the prompt or context):

  1. Use case — sending, receiving, fax-to-email, or managing services?
  2. Approach — SDK or direct API calls (curl/fetch/requests)?
  3. Language — for SDK: Node.js (preview) or .NET (partial). For direct API: any language, or curl. Java and Python must use direct HTTP — there is no SDK wrapper.

When the user chooses SDK, refer to the sinch-sdks skill for installation and client initialization, then to the Fax API Reference linked in Links.

When the user chooses direct API calls, refer to the Fax API Reference linked in Links for request/response schemas.

Security: See the Security section below for url fetching policy, handling inbound webhook content, and credential handling.

Getting Started

Agent Credentials handling

Store credentials in environment variables — never hardcode tokens or keys in commands or source code:

export SINCH_PROJECT_ID="your-project-id"
export SINCH_KEY_ID="your-key-id"
export SINCH_KEY_SECRET="your-key-secret"
export SINCH_ACCESS_TOKEN="your-oauth-token"

Authentication

Ensure that authentication headers are properly set when making API calls. The Fax API uses Bearer token authentication:

-H "Authorization: Bearer $SINCH_ACCESS_TOKEN"

See sinch-authentication for full setup, most importantly how to obtain {SINCH_ACCESS_TOKEN} (OAuth2 client-credentials — do not mint your own JWT).

First API Call — Send a Fax

curl:

curl -X POST \
  "https://fax.api.sinch.com/v3/projects/$SINCH_PROJECT_ID/faxes" \
  -H "Authorization: Bearer $SINCH_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+12025550134",
    "contentUrl": "https://example.com/document.pdf",
    "callbackUrl": "https://yourserver.com/fax-callback"
  }'

Node.js SDK: See Send a Fax with Node.js.

Test number: Send to +19898989898 to emulate a real fax without charges (always suggest this for integration testing).

Key Concepts

Common Patterns

Three ways to deliver content: contentUrl for URLs (recommended — supports basic auth), multipart/form-data for local files, or contentBase64 for in-memory bytes. contentUrl can be a single URL or an array of URLs to compose multi-document faxes.

For HTTPS URLs, ensure your SSL certificate (including intermediate certs) is valid and up-to-date. You can optionally specify from to set the sender number.

Gotchas and Best Practices

Troubleshooting

Fax not delivered

  1. Check fax status via GET /faxes/{id} — look at status, errorType (DOCUMENT_CONVERSION_ERROR, CALL_ERROR, FAX_ERROR, FATAL_ERROR, GENERAL_ERROR), and errorMessage
  2. If contentUrl was used with HTTPS, verify the SSL certificate (including intermediate certs) is valid
  3. Fax delivery depends on the receiving machine answering — retries are automatic (max 5, default set per service)

Fax content renders incorrectly

Cannot send or receive faxes

Security

Skill frontmatter

metadata: {"author" => "Sinch", "version" => "1.0.5", "category" => "Voice", "tags" => "fax, pdf, fax-to-email, webhooks, healthcare, legal", "uses" => ["sinch-authentication", "sinch-sdks"]}