Desarrolladores
Una API de fax que funciona como el resto de su infraestructura.
REST sobre HTTPS con JSON, claves de API bearer, webhooks firmados y un servidor MCP generado a partir de la misma API. Un envío repetido jamás generará un segundo fax.
API HTTP
REST y JSON con claves bearer. Suba el archivo, envíelo con una Idempotency-Key y consulte el estado o espere el webhook.
POST /v1/accounts/{id}/faxesServidor MCP
La misma API adaptada a herramientas de Model Context Protocol, filtrada según los permisos de su clave, para agentes que envían faxes.
send_fax · get_fax · list_faxesWebhooks
Entregas firmadas con HMAC-SHA256 con el mismo objeto de fax, reintentadas según un calendario programado. Ignore repeticiones de una misma entrega (coincidencia por delivery_id).
fax.received · fax.succeededEn esta página
Inicio rápido
Cree una clave de API en la aplicación, en la sección de claves de su cuenta. Tienen el formato bfx_live_… o bfx_test_…. Una clave de prueba crea faxes de sandbox: se procesan y validan como faxes reales y se marcan como succeeded sin emitir llamadas ni cobros. Envíe la clave como Authorization: Bearer.
- 1. SubirPDF, TIFF, JPEG o PNG de hasta 20 MiB. El valor
content_refdura una hora y se utiliza una sola vez. - 2. Enviar
toestá en formato E.164. Reutilice la mismaIdempotency-Keyen los reintentos durante 24 horas. - 3. SeguimientoConsulte periódicamente el fax o espere a
fax.succeededofax.failed.
En cuanto el documento existe, links.document redirige (302) su solicitud autenticada a una URL de descarga válida por cinco minutos. En cuentas con registro de accesos a documentos, la misma solicitud devuelve el propio documento (200), y ?redirect=false devuelve un enlace de un solo uso válido durante 60 segundos. Cada lectura queda registrada en auditoría indicando quién lo leyó y cómo. Si el fax se entrega a través de una red alternativa, caller_id_delivery es "not_guaranteed": las páginas se enviaron correctamente, pero el destinatario podría ver un número de remitente distinto.
Respuestas
Un fax avanza por los estados queued → rendering → admitted → … y finaliza como succeeded, failed, cancelled, expiredo rejected. El webhook incluye este mismo objeto. El significado de cada estado es:
queued,rendering: aceptado y en proceso de conversión a páginas de fax.admitted: comprobado y programado para su entrega.transmitting: las páginas se están transmitiendo en este momento.retrying: el intento no concluyó; ya hemos programado el siguiente, posiblemente a través de otra red de operador. No debe reenviarlo.succeeded: entregado y facturado por las páginas recibidas.failed,cancelled,expiredyrejectedno se facturan.
Un fax puede pasar por otros estados intermedios mientras se establece la conexión. Trate cualquier estado no definitivo como en curso, y consulte el desglose por intento en links.attempts para disponer del detalle completo.
Errores y reintentos
Los errores se devuelven como application/problem+json con un código estable e identificable por máquina code. Reintente los fallos de red y respuestas 429 / 5xx con la misma Idempotency-Key, y respete el encabezado Retry-After. No reintente otras respuestas 4xx sin modificar la solicitud.
HTTP/1.1 409 Conflict
Content-Type: application/problem+json
{
"type": "https://api.faxdev.com/problems/idempotency_conflict",
"title": "Idempotency key reused with a different request",
"status": 409,
"detail": "Idempotency-Key was used with a different request",
"instance": "<the X-Request-ID of this request>",
"code": "idempotency_conflict"
}Webhooks
Registre un endpoint HTTPS por cuenta, o uno por organización para todas las cuentas de clientes. Cada entrega va firmada con el secreto del endpoint que se muestra al crearlo o renovarlo.
Fax-Timestamp: segundos Unix.Fax-Signature:hex(hmac_sha256(secret, "{timestamp}.{raw_body}")).- Rechace marcas de tiempo desfasadas más de cinco minutos con su reloj e ignore reintentos de la misma entrega (verifique por
delivery_id), que no varía entre reintentos. - Reintentamos a intervalos de 1 minuto, 5 minutos, 30 minutos, 2 horas y 8 horas.
- Un webhook nunca incluye los bytes del documento; descárguelo desde
fax.links.documentutilizando su clave de API.
- fax.queued
- fax.succeeded
- fax.failed
- fax.received
- fax.rejected
- fax.cancelled
- fax.expired
POST /your/webhook HTTP/1.1
Content-Type: application/json
Fax-Timestamp: 1793110800
Fax-Signature: 5b0e6c...e91d
{
"event": "fax.received",
"delivery_id": "0b6f3c7e-2a91-4d5b-8e40-1c7a9f2d6e38",
"occurred_at": "2026-10-27T14:20:00Z",
"fax": { "id": "...", "status": "succeeded", "direction": "inbound", "pages": 3,
"links": { "self": "...", "attempts": "...", "document": "https://api.faxdev.com/v1/accounts/.../faxes/.../document" } }
}Utilice la función de prueba del endpoint para recibir un evento firmado webhook.test antes de cursar su primer fax en producción.
MCP para agentes de IA
La FaxDev API es además un servidor Model Context Protocol (Streamable HTTP) accesible en https://api.faxdev.com/mcp. Emplea la misma clave de API bearer que la interfaz REST. El listado de herramientas se deriva de la API y se filtra por el nivel y permisos de su clave, evitando que un agente acceda a funciones no autorizadas.
Proporcione a los agentes una clave limitada a los permisos indispensables. Un agente de solo lectura nunca debe poseer faxes:send.
Herramientas visibles para una clave de cuenta (según permisos asignados):
| Herramienta | Operación REST | Permiso |
|---|---|---|
send_fax | POST / | faxes:send |
get_fax | GET / | faxes:read |
list_faxes | GET / | faxes:read |
cancel_fax | POST / | faxes:cancel |
list_attempts | GET …/ | faxes:read |
get_fax_document_url | GET …/ | faxes:read |
list_numbers | GET / | numbers:read |
list_contacts | GET / | contacts:read |
create_contact | POST / | contacts:write |
get_usage | GET / | usage:read |
get_fax_document_url devuelve una URL temporal en lugar de los bytes del archivo, evitando saturar el historial del agente con datos binarios; cada acceso se audita igual que una descarga desde el panel. send_fax admite un content_ref obtenido de una subida previa (recomendado) o bien el contenido codificado en base64 de hasta 20 MiB.
Referencia completa: Documentación de la API . ¿Dudas? contáctenos.
Entrega y fiabilidad
Garantizamos la entrega de sus faxes. Cada envío saliente se transmite a través de múltiples operadores independientes con transporte optimizado y corrección de errores para fax. Líneas ocupadas, llamadas sin respuesta o protocolos interrumpidos se reintentan y reenrutan de forma automática; si la ruta principal no puede completar la transmisión, entra en funcionamiento una red alternativa (pudiendo mostrarse otro identificador de llamada). Usted no tiene que reenviar nada y solo abona las páginas efectivamente recibidas.
- Registro detallado por intento. Cada intento queda reflejado en
links.attemptscon su resultado, volumen de páginas transmitidas y duración. - API idempotente. Repita una solicitud de creación con la misma
Idempotency-Keyy recibirá el fax original, sin emitir jamás un duplicado. - Webhooks firmados. Firma HMAC-SHA256 sobre la marca temporal y el cuerpo, reintentada según un intervalo definido. Ignore recepciones duplicadas (cotejando
delivery_id). - Cifrado en reposo. Documentos y copias de seguridad están cifrados, y cada lectura queda registrada en auditoría.
- Capacidad adaptable a la demanda. La capacidad de transmisión escala de forma elástica en diversas regiones de EE. UU.; los nodos se purgan ordenadamente antes de desmantelarse para que los envíos activos concluyan con éxito.
Preguntas de desarrolladores
¿Cómo me autentico?
Envíe una clave de API como Authorization: Bearer. Las claves tienen el formato bfx_live_ o bfx_test_, incluyen únicamente los permisos que otorgue y se pueden revocar en cualquier momento.
¿Cómo evito enviar el mismo fax dos veces?
Envíe un encabezado Idempotency-Key en cada creación. Repetir la solicitud con la misma clave en un plazo de 24 horas devuelve la respuesta original en lugar de enviar un segundo fax.
¿Cómo verifico un webhook?
Calcule hex(hmac_sha256(secret, timestamp + '.' + raw_body)) y compárelo con el encabezado Fax-Signature en tiempo constante. Rechace marcas de tiempo con más de cinco minutos de desfase respecto a su reloj e ignore entregas repetidas (coincidencia por delivery_id).
¿Cómo se conecta un agente de IA mediante MCP?
Dirija un cliente MCP a https://api.faxdev.com/mcp mediante Streamable HTTP con la misma clave de API bearer que en REST. La lista de herramientas se genera desde la API y se filtra según los permisos de la clave.
¿Puedo hacer pruebas sin marcar ni pagar?
Sí. Una clave bfx_test_ crea faxes de sandbox que se procesan y validan igual que los reales, marcándose como succeeded sin emitir llamadas ni generar cargos.
¿Qué ocurre cuando falla un intento de entrega?
No necesita hacer nada. Si la línea está comunicando, no responde o falla el protocolo, se reintenta y reenruta de forma automática entre redes de operadores independientes; si las rutas principales no consiguen completarlo, se recurre a una red alternativa. Cuando eso ocurre, caller_id_delivery pasa a not_guaranteed: las páginas se entregaron, pero el destinatario podría ver un identificador de llamada distinto. Cada intento se detalla en links.attempts y las páginas no entregadas nunca se facturan.