Faxette MCP
An MCP server that enables AI assistants to send faxes to supported countries including the EU, UK, and US. It automates finding fax numbers, uploading documents, and generating payment links for per-fax billing without requiring a subscription.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.eu.faxette.com/mcpWhat you can do with it
- Send a referral letter to a doctor's office via fax
- Find and verify official fax numbers for recipients
- Upload documents and generate a secure payment link
- Download delivery reports for sent faxes
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- faxette-eu 0.5.0
- MCP protocol
- 2025-06-18
- Tools
- 15 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- 2 advertised
{
"tools": {
"listChanged": true
},
"prompts": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
15 advertised
open_fax_review — Review the exact fax document
Open the private upload and PDF review interface for an account fax before approving payment. Requires sign-in. The browser review link works when the client cannot show MCP Apps.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_fax_review — Refresh the private fax review
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"review_token"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"review_token": {
"type": "string",
"minLength": 1
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}prepare_fax_upload — Prepare a private file upload
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"review_token",
"filename",
"byte_size",
"checksum",
"content_type"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"checksum": {
"type": "string",
"minLength": 1
},
"filename": {
"type": "string",
"minLength": 1
},
"byte_size": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"content_type": {
"type": "string",
"minLength": 1
},
"review_token": {
"type": "string",
"minLength": 1
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}update_fax_review — Replace the fax files
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"review_token",
"document_ids"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"document_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1
},
"review_token": {
"type": "string",
"minLength": 1
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}get_capabilities — Check fax formats, destinations and pricing
Use this before preparing a fax to check this region's supported countries, languages, file limits and current retail and credit pricing rules. Prices are before tax; the exact total is confirmed after document processing and at checkout. It changes nothing.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"region",
"connector_url",
"countries",
"languages",
"formats",
"limits",
"pricing",
"tax"
],
"properties": {
"tax": {
"type": "object",
"required": [
"included",
"applies",
"finalized_at"
],
"properties": {
"applies": {
"type": "boolean"
},
"included": {
"type": "boolean"
},
"finalized_at": {
"type": "string"
}
},
"additionalProperties": false
},
"limits": {
"type": "object",
"required": [
"documents",
"bytes_per_document",
"pages",
"cover_page"
],
"properties": {
"pages": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"documents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"cover_page": {
"type": "object",
"required": [
"sender",
"recipient",
"subject",
"message"
],
"properties": {
"sender": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"message": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"subject": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"recipient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"text_characters": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"bytes_per_document": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"region": {
"enum": [
"us",
"eu"
],
"type": "string"
},
"formats": {
"type": "array",
"items": {
"type": "string"
}
},
"pricing": {
"type": "object",
"required": [
"currency",
"zones"
],
"properties": {
"zones": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"required": [
"countries",
"retail",
"credits"
],
"properties": {
"retail": {
"type": "object",
"required": [
"base_cents",
"included_pages",
"overage_cents_per_page"
],
"properties": {
"base_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"included_pages": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"overage_cents_per_page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"credits": {
"type": "object",
"required": [
"base_cents",
"included_pages",
"overage_cents_per_page"
],
"properties": {
"base_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"included_pages": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"overage_cents_per_page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"countries": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
},
"countries": {
"type": "array",
"items": {
"type": "string"
}
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
},
"text_formats": {
"type": "array",
"items": {
"type": "string"
}
},
"connector_url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}lookup_fax_number — Find a checked fax number
Search Faxette's catalog by agency, form number or purpose. Returns only numbers supported by this connector, with the official source and verification date. An empty result means we have no current match, not that the office has no fax number. Show the source and have the person confirm the right office before creating a fax. It changes nothing.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 100,
"minLength": 2
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"destinations"
],
"properties": {
"destinations": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"purpose",
"signature",
"numbers"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"numbers": {
"type": "array",
"items": {
"type": "object",
"required": [
"fax_number",
"label",
"regions",
"source_url",
"verified_at"
],
"properties": {
"label": {
"type": [
"string",
"null"
]
},
"regions": {
"type": "array",
"items": {
"type": "string"
}
},
"fax_number": {
"type": "string"
},
"source_url": {
"type": "string",
"format": "uri"
},
"verified_at": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
},
"additionalProperties": false
}
},
"purpose": {
"type": [
"string",
"null"
]
},
"signature": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_fax_report — Get a delivery report
Use this when the person asks for a delivery report or the transmitted document. Returns the destination, page count, delivery result, timestamps and attempts. A report URL is available after delivery, failure or cancellation. Document links are only returned for the signed-in owner of an account fax while its files are retained. Report and document links expire after five minutes. A delivered fax does not establish that the recipient read it. It changes nothing.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "An account fax ID; requires sign-in. Pass this or status_url, not both."
},
"status_url": {
"type": "string",
"format": "uri",
"description": "The original status link, including its token for a guest fax."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"status",
"fax_number",
"page_count",
"created_at",
"delivered_at",
"failed_at",
"canceled_at",
"document_sha256",
"report_available",
"document_available",
"report_url",
"document_url",
"attempts"
],
"properties": {
"id": {
"type": "string"
},
"status": {
"enum": [
"draft",
"processing_documents",
"documents_ready",
"awaiting_payment",
"scheduled",
"sending",
"delivered",
"failed",
"canceled"
],
"type": "string"
},
"attempts": {
"type": "array",
"items": {
"type": "object",
"required": [
"number",
"fax_number",
"status",
"pages_sent",
"started_at",
"updated_at",
"failure_reason"
],
"properties": {
"number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"status": {
"type": "string"
},
"fax_number": {
"type": "string"
},
"pages_sent": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"started_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"updated_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"failure_reason": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
},
"failed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"fax_number": {
"type": "string"
},
"page_count": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"report_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"canceled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"delivered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"document_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"document_sha256": {
"type": [
"string",
"null"
]
},
"report_available": {
"type": "boolean"
},
"document_available": {
"type": "boolean"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}resend_fax — Resend an eligible failed fax
Use this only after the person asks to resend a failed fax and confirms its destination, including any corrected number. Check get_fax or get_fax_status first. Reuses the existing fax, payment hold and resend rules; it does not create a new paid fax. Faxette refuses expired resend windows and exhausted retries. If a call is interrupted, check the existing fax before calling again.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "An account fax ID; requires sign-in. Pass this or status_url, not both."
},
"fax_number": {
"type": "string",
"description": "A corrected number explicitly confirmed by the person. Omit to use the existing destination."
},
"status_url": {
"type": "string",
"format": "uri",
"description": "The original fax status link, including its token for a guest fax."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"status",
"fax_number",
"page_count",
"price",
"payment",
"checkout_available",
"attempt",
"max_attempts",
"next_attempt_at",
"resend_by",
"document_errors",
"failure_reason",
"status_url"
],
"properties": {
"id": {
"type": "string",
"description": "The fax's id. Pass it to get_fax when the person is signed in."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"amount_cents",
"currency"
],
"properties": {
"currency": {
"type": "string",
"description": "usd or eur."
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Before tax. Null until the pages are counted."
},
"status": {
"enum": [
"draft",
"processing_documents",
"documents_ready",
"awaiting_payment",
"scheduled",
"sending",
"delivered",
"failed",
"canceled"
],
"type": "string",
"description": "draft: waiting for files, or for a file to be fixed. processing_documents: counting pages. documents_ready: ready to pay. awaiting_payment: the person is paying. scheduled: paid, about to dial. sending, delivered, failed. canceled: not paid in time."
},
"attempt": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "The current attempt to dial the fax number."
},
"payment": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"method",
"tax_cents",
"amount_cents",
"currency"
],
"properties": {
"method": {
"enum": [
"card",
"credit"
],
"type": "string"
},
"status": {
"type": "string"
},
"currency": {
"type": "string",
"description": "usd or eur."
},
"tax_cents": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The person's payment once they start paying, by card or from their credit. amount_cents includes tax."
},
"language": {
"type": [
"string",
"null"
]
},
"resend_by": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "For a failed fax: until when the person can correct the fax number on the status page and send it again."
},
"fax_number": {
"type": "string"
},
"page_count": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "Null until the pages are counted."
},
"review_url": {
"type": "string",
"format": "uri",
"description": "A private review link, valid for 30 minutes. Give it to the person so they can inspect the prepared PDF before paying."
},
"status_url": {
"type": "string",
"format": "uri",
"description": "The page where the person checks the fax and pays. Give it to them."
},
"max_attempts": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"checkout_quote": {
"type": [
"string",
"null"
]
},
"failure_reason": {
"anyOf": [
{
"enum": [
"temporary",
"wrong_number",
"our_side"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "For a failed fax: temporary (busy or no answer on every attempt), wrong_number (no fax machine answered), or our_side."
},
"document_errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"reason",
"position",
"message"
],
"properties": {
"reason": {
"type": "string"
},
"message": {
"type": "string"
},
"position": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"description": "Files Faxette couldn't use. position is the file's number in the fax. The person fixes them on the status page."
},
"next_attempt_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "When the next attempt dials, if the line was busy or didn't answer."
},
"checkout_available": {
"type": "boolean",
"description": "True when the person can pay on the status page."
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}create_document — Upload a file
Use this to add a file the person gave you to a fax: a PDF, or a photo saved as JPG, PNG, WEBP or HEIC, up to 20 MB. Call it once per file, before create_fax, in the order the files should be faxed. It returns document_id, upload_url and upload_headers: PUT the file's exact bytes to upload_url with those headers within 5 minutes, then pass document_id to create_fax within an hour. Nothing is faxed or charged. If you can't read the file's bytes, don't use this: call create_fax without document_ids, and the person adds the file on the status page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"fax_number",
"filename",
"byte_size",
"checksum",
"content_type"
],
"properties": {
"checksum": {
"type": "string",
"minLength": 1,
"description": "The file's MD5 digest, base64-encoded, as printed by: openssl md5 -binary <file> | base64"
},
"filename": {
"type": "string",
"minLength": 1,
"description": "The file's name with its extension, like referral.pdf."
},
"byte_size": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The file's exact size in bytes.",
"exclusiveMinimum": 0
},
"fax_number": {
"type": "string",
"description": "The fax number the file will be faxed to, in international format, like +31201234567. Numbers in the EU, the UK, Switzerland, Norway, Iceland, Liechtenstein, Monaco, Montenegro, Ukraine, the Isle of Man, the US and Canada only. Use the same number in create_fax."
},
"content_type": {
"enum": [
"application/pdf",
"image/jpeg",
"image/png",
"image/webp",
"image/heic",
"image/heif"
],
"type": "string",
"description": "The file's media type. It must match the file's contents."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"document_id",
"upload_url",
"upload_headers"
],
"properties": {
"upload_url": {
"type": "string",
"format": "uri",
"description": "PUT the file's exact bytes here within 5 minutes."
},
"document_id": {
"type": "string",
"description": "Pass this to create_fax in document_ids."
},
"upload_headers": {
"type": "object",
"description": "Send these headers, unchanged, with the PUT.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}create_fax — Start a fax
Use this once the person has confirmed the fax number, and given you their email if they aren't signed in. It creates the fax and returns status_url, the page where the person checks the fax number, documents and price, and pays to send it. Nothing is sent or charged until they pay there. Pass the document_ids from create_document. Without them, the fax waits on the status page for the person to add their files. Choose a private random idempotency_key for each intentional new fax. Reuse the exact same key and request after a timeout or request_in_progress; never change the key just to retry. The key is retained for 24 hours. To check a fax, use get_fax_status or get_fax.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"idempotency_key",
"fax_number"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "The person's email address, where Faxette sends the receipt and updates. Ask the person for it. Leave it out when they're signed in: their account's email is used."
},
"content": {
"type": "object",
"required": [
"text",
"format"
],
"properties": {
"text": {
"type": "string",
"maxLength": 50000,
"minLength": 1
},
"format": {
"enum": [
"text",
"markdown"
],
"type": "string"
}
},
"description": "Text approved by the person, rendered as a PDF before the uploaded documents. Markdown supports headings, lists, tables and links as printed text. Images, raw HTML and remote assets are refused. Always show the generated proof before sending."
},
"language": {
"type": "string",
"minLength": 1,
"description": "The language the person chooses for the fax page, checkout and emails. Check get_capabilities for this region. Omit to use the account preference or regional default."
},
"cover_page": {
"type": "object",
"properties": {
"sender": {
"type": "string",
"maxLength": 120
},
"message": {
"type": "string",
"maxLength": 2000
},
"subject": {
"type": "string",
"maxLength": 200
},
"recipient": {
"type": "string",
"maxLength": 120
}
},
"description": "An optional cover page. Confirm its wording with the person first. It counts toward the total pages; omit if not requested."
},
"fax_number": {
"type": "string",
"description": "The fax number the fax goes to, in international format, like +31201234567. Numbers in the EU, the UK, Switzerland, Norway, Iceland, Liechtenstein, Monaco, Montenegro, Ukraine, the Isle of Man, the US and Canada only."
},
"document_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"description": "The document_id of each file from create_document, in the order they're faxed. Up to 10. Leave it out to let the person add files on the status page."
},
"idempotency_key": {
"type": "string",
"pattern": "^[A-Za-z0-9_.-]{32,128}$",
"description": "A private random UUID for this intentional new fax. Keep it unchanged for retries of the same request within 24 hours."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"status",
"fax_number",
"page_count",
"price",
"payment",
"checkout_available",
"attempt",
"max_attempts",
"next_attempt_at",
"resend_by",
"document_errors",
"failure_reason",
"status_url"
],
"properties": {
"id": {
"type": "string",
"description": "The fax's id. Pass it to get_fax when the person is signed in."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"amount_cents",
"currency"
],
"properties": {
"currency": {
"type": "string",
"description": "usd or eur."
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Before tax. Null until the pages are counted."
},
"status": {
"enum": [
"draft",
"processing_documents",
"documents_ready",
"awaiting_payment",
"scheduled",
"sending",
"delivered",
"failed",
"canceled"
],
"type": "string",
"description": "draft: waiting for files, or for a file to be fixed. processing_documents: counting pages. documents_ready: ready to pay. awaiting_payment: the person is paying. scheduled: paid, about to dial. sending, delivered, failed. canceled: not paid in time."
},
"attempt": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "The current attempt to dial the fax number."
},
"payment": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"method",
"tax_cents",
"amount_cents",
"currency"
],
"properties": {
"method": {
"enum": [
"card",
"credit"
],
"type": "string"
},
"status": {
"type": "string"
},
"currency": {
"type": "string",
"description": "usd or eur."
},
"tax_cents": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The person's payment once they start paying, by card or from their credit. amount_cents includes tax."
},
"language": {
"type": [
"string",
"null"
]
},
"resend_by": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "For a failed fax: until when the person can correct the fax number on the status page and send it again."
},
"fax_number": {
"type": "string"
},
"page_count": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "Null until the pages are counted."
},
"review_url": {
"type": "string",
"format": "uri",
"description": "A private review link, valid for 30 minutes. Give it to the person so they can inspect the prepared PDF before paying."
},
"status_url": {
"type": "string",
"format": "uri",
"description": "The page where the person checks the fax and pays. Give it to them."
},
"max_attempts": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"checkout_quote": {
"type": [
"string",
"null"
]
},
"failure_reason": {
"anyOf": [
{
"enum": [
"temporary",
"wrong_number",
"our_side"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "For a failed fax: temporary (busy or no answer on every attempt), wrong_number (no fax machine answered), or our_side."
},
"document_errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"reason",
"position",
"message"
],
"properties": {
"reason": {
"type": "string"
},
"message": {
"type": "string"
},
"position": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"description": "Files Faxette couldn't use. position is the file's number in the fax. The person fixes them on the status page."
},
"next_attempt_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "When the next attempt dials, if the line was busy or didn't answer."
},
"checkout_available": {
"type": "boolean",
"description": "True when the person can pay on the status page."
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}get_fax_status — Check a fax
Use this when the person asks how their fax is doing, or to see whether it's ready to pay. It reads the fax from its status_url and returns its status, page count, price, payment and attempts. checkout_available is true once the person can pay on the status page. It changes nothing. While a fax is sending, call it at most once a minute.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"status_url"
],
"properties": {
"status_url": {
"type": "string",
"format": "uri",
"description": "The status_url create_fax returned, like https://eu.faxette.com/f/abc123?token=xyz."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"status",
"fax_number",
"page_count",
"price",
"payment",
"checkout_available",
"attempt",
"max_attempts",
"next_attempt_at",
"resend_by",
"document_errors",
"failure_reason",
"status_url"
],
"properties": {
"id": {
"type": "string",
"description": "The fax's id. Pass it to get_fax when the person is signed in."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"amount_cents",
"currency"
],
"properties": {
"currency": {
"type": "string",
"description": "usd or eur."
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Before tax. Null until the pages are counted."
},
"status": {
"enum": [
"draft",
"processing_documents",
"documents_ready",
"awaiting_payment",
"scheduled",
"sending",
"delivered",
"failed",
"canceled"
],
"type": "string",
"description": "draft: waiting for files, or for a file to be fixed. processing_documents: counting pages. documents_ready: ready to pay. awaiting_payment: the person is paying. scheduled: paid, about to dial. sending, delivered, failed. canceled: not paid in time."
},
"attempt": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "The current attempt to dial the fax number."
},
"payment": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"method",
"tax_cents",
"amount_cents",
"currency"
],
"properties": {
"method": {
"enum": [
"card",
"credit"
],
"type": "string"
},
"status": {
"type": "string"
},
"currency": {
"type": "string",
"description": "usd or eur."
},
"tax_cents": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The person's payment once they start paying, by card or from their credit. amount_cents includes tax."
},
"language": {
"type": [
"string",
"null"
]
},
"resend_by": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "For a failed fax: until when the person can correct the fax number on the status page and send it again."
},
"fax_number": {
"type": "string"
},
"page_count": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "Null until the pages are counted."
},
"review_url": {
"type": "string",
"format": "uri",
"description": "A private review link, valid for 30 minutes. Give it to the person so they can inspect the prepared PDF before paying."
},
"status_url": {
"type": "string",
"format": "uri",
"description": "The page where the person checks the fax and pays. Give it to them."
},
"max_attempts": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"checkout_quote": {
"type": [
"string",
"null"
]
},
"failure_reason": {
"anyOf": [
{
"enum": [
"temporary",
"wrong_number",
"our_side"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "For a failed fax: temporary (busy or no answer on every attempt), wrong_number (no fax machine answered), or our_side."
},
"document_errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"reason",
"position",
"message"
],
"properties": {
"reason": {
"type": "string"
},
"message": {
"type": "string"
},
"position": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"description": "Files Faxette couldn't use. position is the file's number in the fax. The person fixes them on the status page."
},
"next_attempt_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "When the next attempt dials, if the line was busy or didn't answer."
},
"checkout_available": {
"type": "boolean",
"description": "True when the person can pay on the status page."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_account — See who is signed in
Use this to see which Faxette account the person signed in with: their name, email, credit, and whether it's the US or EU copy. Needs the person to sign in to Faxette; calling it while they aren't asks the app to sign them in. It changes nothing.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"name",
"email",
"region",
"credit"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"email": {
"type": "string",
"description": "Where Faxette sends receipts and updates for faxes started while signed in."
},
"credit": {
"type": "object",
"required": [
"amount_cents",
"currency"
],
"properties": {
"currency": {
"type": "string",
"description": "usd or eur."
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"description": "The account's credit, which send_fax spends.",
"additionalProperties": false
},
"region": {
"enum": [
"us",
"eu"
],
"type": "string",
"description": "Which copy of Faxette the account is on."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_faxes — List faxes
Use this when the person asks about faxes they've sent from their Faxette account, like what they sent last week or which faxes failed. Returns 25 at a time, newest first. Pass next_page back as page for the next 25. Filter with status, for example ["failed"] or ["delivered"]. Use get_fax for one fax's details. Needs the person to sign in to Faxette; calling it while they aren't asks the app to sign them in. It changes nothing.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "string",
"description": "The next_page from the previous call."
},
"status": {
"type": "array",
"items": {
"enum": [
"draft",
"processing_documents",
"documents_ready",
"awaiting_payment",
"scheduled",
"sending",
"delivered",
"failed",
"canceled"
],
"type": "string"
},
"description": "Only faxes in these states."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"faxes",
"next_page"
],
"properties": {
"faxes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"status",
"fax_number",
"page_count",
"created_at",
"url"
],
"properties": {
"id": {
"type": "string",
"description": "Pass it to get_fax for the details."
},
"url": {
"type": "string",
"format": "uri",
"description": "The fax's page, where the person checks it and pays. Give it to them."
},
"status": {
"enum": [
"draft",
"processing_documents",
"documents_ready",
"awaiting_payment",
"scheduled",
"sending",
"delivered",
"failed",
"canceled"
],
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"fax_number": {
"type": "string"
},
"page_count": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"next_page": {
"type": [
"string",
"null"
],
"description": "Pass it as page for the next 25. Null on the last page."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_fax — Check a fax in the account
Use this for one fax from the person's Faxette account: its status, price, payment, documents' file names and history. Pass the id from get_faxes or create_fax. While a fax is sending, call it at most once a minute. Needs the person to sign in to Faxette; calling it while they aren't asks the app to sign them in. It changes nothing.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The fax's id, from get_faxes or create_fax."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"status",
"fax_number",
"page_count",
"price",
"payment",
"checkout_available",
"attempt",
"max_attempts",
"next_attempt_at",
"resend_by",
"document_errors",
"failure_reason",
"status_url",
"created_at",
"delivered_at",
"failed_at",
"documents",
"credit_price",
"status_message",
"history"
],
"properties": {
"id": {
"type": "string",
"description": "The fax's id. Pass it to get_fax when the person is signed in."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"amount_cents",
"currency"
],
"properties": {
"currency": {
"type": "string",
"description": "usd or eur."
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Before tax. Null until the pages are counted."
},
"status": {
"enum": [
"draft",
"processing_documents",
"documents_ready",
"awaiting_payment",
"scheduled",
"sending",
"delivered",
"failed",
"canceled"
],
"type": "string",
"description": "draft: waiting for files, or for a file to be fixed. processing_documents: counting pages. documents_ready: ready to pay. awaiting_payment: the person is paying. scheduled: paid, about to dial. sending, delivered, failed. canceled: not paid in time."
},
"attempt": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "The current attempt to dial the fax number."
},
"history": {
"type": "array",
"items": {
"type": "object",
"required": [
"at",
"event"
],
"properties": {
"at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"event": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "What has happened to the fax, oldest first."
},
"payment": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"method",
"tax_cents",
"amount_cents",
"currency"
],
"properties": {
"method": {
"enum": [
"card",
"credit"
],
"type": "string"
},
"status": {
"type": "string"
},
"currency": {
"type": "string",
"description": "usd or eur."
},
"tax_cents": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The person's payment once they start paying, by card or from their credit. amount_cents includes tax."
},
"language": {
"type": [
"string",
"null"
]
},
"documents": {
"type": "array",
"items": {
"type": "string"
},
"description": "The documents' file names, in the order they're faxed. Empty once deleted."
},
"failed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"resend_by": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "For a failed fax: until when the person can correct the fax number on the status page and send it again."
},
"created_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"fax_number": {
"type": "string"
},
"page_count": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "Null until the pages are counted."
},
"review_url": {
"type": "string",
"format": "uri",
"description": "A private review link, valid for 30 minutes. Give it to the person so they can inspect the prepared PDF before paying."
},
"status_url": {
"type": "string",
"format": "uri",
"description": "The page where the person checks the fax and pays. Give it to them."
},
"credit_price": {
"anyOf": [
{
"type": "object",
"required": [
"amount_cents",
"currency"
],
"properties": {
"currency": {
"type": "string",
"description": "usd or eur."
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "What send_fax takes from the credit for this fax. Null once it can no longer be paid for."
},
"credit_quote": {
"type": [
"string",
"null"
]
},
"delivered_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"max_attempts": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"checkout_quote": {
"type": [
"string",
"null"
]
},
"failure_reason": {
"anyOf": [
{
"enum": [
"temporary",
"wrong_number",
"our_side"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "For a failed fax: temporary (busy or no answer on every attempt), wrong_number (no fax machine answered), or our_side."
},
"status_message": {
"type": "string",
"description": "Where the fax is, in the words the fax page uses."
},
"document_errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"reason",
"position",
"message"
],
"properties": {
"reason": {
"type": "string"
},
"message": {
"type": "string"
},
"position": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"description": "Files Faxette couldn't use. position is the file's number in the fax. The person fixes them on the status page."
},
"next_attempt_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "When the next attempt dials, if the line was busy or didn't answer."
},
"checkout_available": {
"type": "boolean",
"description": "True when the person can pay on the status page."
},
"immediate_sending_consent_required": {
"type": "boolean",
"description": "When true, obtain agreement to immediate sending and acknowledgement that the withdrawal right ends on delivery before calling send_fax."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}send_fax — Send a fax from credit
Use this to send a fax from the person's Faxette credit. Only for a fax in their account that's ready to pay for: call get_fax first. Show the prepared PDF with open_fax_review or its review_url. Have the person confirm the destination, documents and credit_price, explain that it comes from their credit, and call this only once they clearly agree. If get_account shows their credit doesn't cover it, give them the status page instead, where they can pay for this fax by card. For the EU connector, also explain that sending starts immediately and the person's right to cancel ends once the fax is delivered. Obtain their explicit agreement before setting immediate_sending_consent to true. Needs the person to sign in to Faxette; calling it while they aren't asks the app to sign them in.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"quote",
"id",
"amount_cents"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The fax's id, from create_fax, get_faxes or get_fax."
},
"quote": {
"type": "string",
"minLength": 1,
"description": "The credit_quote returned by get_fax for the exact destination, PDF and price the person reviewed and approved. After quote_changed or quote_required, show the new proof and obtain fresh approval."
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The credit_price amount_cents from get_fax that the person agreed to. If the fax's documents changed since, Faxette refuses with price_changed: call get_fax and confirm the new price.",
"exclusiveMinimum": 0
},
"immediate_sending_consent": {
"type": "boolean",
"description": "Required as true for EU credit sends, only after the person explicitly agrees to immediate sending and acknowledges that their right to cancel ends on delivery. Never infer this from agreement to the price alone."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"status",
"fax_number",
"page_count",
"price",
"payment",
"checkout_available",
"attempt",
"max_attempts",
"next_attempt_at",
"resend_by",
"document_errors",
"failure_reason",
"status_url"
],
"properties": {
"id": {
"type": "string",
"description": "The fax's id. Pass it to get_fax when the person is signed in."
},
"price": {
"anyOf": [
{
"type": "object",
"required": [
"amount_cents",
"currency"
],
"properties": {
"currency": {
"type": "string",
"description": "usd or eur."
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Before tax. Null until the pages are counted."
},
"status": {
"enum": [
"draft",
"processing_documents",
"documents_ready",
"awaiting_payment",
"scheduled",
"sending",
"delivered",
"failed",
"canceled"
],
"type": "string",
"description": "draft: waiting for files, or for a file to be fixed. processing_documents: counting pages. documents_ready: ready to pay. awaiting_payment: the person is paying. scheduled: paid, about to dial. sending, delivered, failed. canceled: not paid in time."
},
"attempt": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "The current attempt to dial the fax number."
},
"payment": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"method",
"tax_cents",
"amount_cents",
"currency"
],
"properties": {
"method": {
"enum": [
"card",
"credit"
],
"type": "string"
},
"status": {
"type": "string"
},
"currency": {
"type": "string",
"description": "usd or eur."
},
"tax_cents": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"amount_cents": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The person's payment once they start paying, by card or from their credit. amount_cents includes tax."
},
"language": {
"type": [
"string",
"null"
]
},
"resend_by": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "For a failed fax: until when the person can correct the fax number on the status page and send it again."
},
"fax_number": {
"type": "string"
},
"page_count": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "Null until the pages are counted."
},
"review_url": {
"type": "string",
"format": "uri",
"description": "A private review link, valid for 30 minutes. Give it to the person so they can inspect the prepared PDF before paying."
},
"status_url": {
"type": "string",
"format": "uri",
"description": "The page where the person checks the fax and pays. Give it to them."
},
"max_attempts": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"checkout_quote": {
"type": [
"string",
"null"
]
},
"failure_reason": {
"anyOf": [
{
"enum": [
"temporary",
"wrong_number",
"our_side"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "For a failed fax: temporary (busy or no answer on every attempt), wrong_number (no fax machine answered), or our_side."
},
"document_errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"reason",
"position",
"message"
],
"properties": {
"reason": {
"type": "string"
},
"message": {
"type": "string"
},
"position": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"description": "Files Faxette couldn't use. position is the file's number in the fax. The person fixes them on the status page."
},
"next_attempt_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "When the next attempt dials, if the line was busy or didn't answer."
},
"checkout_available": {
"type": "boolean",
"description": "True when the person can pay on the status page."
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}Prompts
2 advertised
send_fax — Send a fax
Fax a document with Faxette: find the official fax number, upload the files and get the link to check and pay.
- recipient
- Who the fax goes to, like my doctor's office or the IRS.
check_fax — Check a fax
See how a Faxette fax is doing from its status page link.
- status_url
- The fax's status page link. (required)
Resources
1 advertised
ui://faxette/review.html
ui://faxette/review.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1673 ms
- 95th percentile latency
- 1673 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1673 ms · metadata changed · 15 tool(s), 1 resource(s), 0 resource template(s), 2 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http faxette-mcp https://mcp.eu.faxette.com/mcpCodex
codex mcp add faxette-mcp --url https://mcp.eu.faxette.com/mcpCursor
{
"mcpServers": {
"faxette-mcp": {
"url": "https://mcp.eu.faxette.com/mcp"
}
}
}Cline
{
"mcpServers": {
"faxette-mcp": {
"type": "streamableHttp",
"url": "https://mcp.eu.faxette.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"faxette-mcp": {
"type": "http",
"url": "https://mcp.eu.faxette.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http faxette-mcp https://mcp.eu.faxette.com/mcpClaude Desktop
{
"mcpServers": {
"faxette-mcp": {
"url": "https://mcp.eu.faxette.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"faxette-mcp": {
"serverUrl": "https://mcp.eu.faxette.com/mcp"
}
}
}Let your agent find its tools
Find servers like Faxette MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run Faxette MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.