Fax-API
Erstelle ein Gast-Fax über HTTP. Ohne API-Schlüssel und ohne Abo. Wer den Status-Link öffnet, bezahlt auf dieser Seite zu denselben price wie auf der Website.
Rufe die API von deinem Server auf. Erfolgreiche Antworten stehen unter data. Fehler enthalten code und message ohne data-Hülle. Die API sendet keine CORS-Header. Daher kann eine fremde Website sie nicht im Browser aufrufen.
Diese Website, https://eu.faxette.com, sendet Faxe in die EU, das Vereinigte Königreich, die Schweiz, Norwegen, Island, Liechtenstein, Monaco, Montenegro, die Ukraine und die Isle of Man. Verwende für die USA und Kanada die Website https://www.faxette.com/api.
Auf dieser Seite
Dokument hochladen
POST /api/v1/documents
Fordere einen Upload-Slot an und sende die Dateidaten per PUT an upload_url. Sie gehen direkt an den Speicher. Diese Anfrage prüft nur deine Angaben zur Datei. Danach erstellst du mit id des Slots ein Fax. Es gibt keine Anfrage zum Herunterladen oder Auflisten von Dokumenten.
checksum ist der Base64-kodierte MD5-Wert der Datei, wie im Content-MD5-Header. byte_size ist die genaue Größe in Bytes. content_type ist application/pdf, image/jpeg, image/png, image/webp, image/heic oder image/heif. Die Slot-ID gilt 1 Stunde, die Upload-URL 5 Minuten. Der Speicher lehnt Dateien ab, deren Größe oder MD5 nicht zum Slot passt.
openssl dgst -md5 -binary referral.pdf | openssl base64
wc -c referral.pdf | awk '{print $1}'
curl -s https://eu.faxette.com/api/v1/documents \
-H "Content-Type: application/json" \
-d '{"filename":"referral.pdf","byte_size":248113,"checksum":"gbgEgwqIGW9JMTqqgYW+xw==","content_type":"application/pdf"}'
201 mit dem Slot.
{
"data": {
"type": "Document",
"id": "SIGNED_ID",
"upload_url": "https://example.r2.cloudflarestorage.com/faxette/...",
"upload_headers": {
"Content-Type": "application/pdf",
"Content-MD5": "gbgEgwqIGW9JMTqqgYW+xw==",
"Content-Disposition": "inline; filename=\"referral.pdf\"; filename*=UTF-8''referral.pdf"
}
}
}
Sende die unveränderten Dateidaten per PUT an upload_url und verwende alle Header aus upload_headers. Übernimm die Werte aus der Antwort. $UPLOAD_URL steht unten für upload_url.
curl -X PUT --data-binary @referral.pdf \
-H "Content-Type: application/pdf" \
-H "Content-MD5: gbgEgwqIGW9JMTqqgYW+xw==" \
-H "Content-Disposition: inline; filename=\"referral.pdf\"; filename*=UTF-8''referral.pdf" \
"$UPLOAD_URL"
Fax erstellen
POST /api/v1/faxes
Beim Erstellen eines Faxes wird keine Karte belastet. Die Antwort enthält token einmalig. Speichere den Wert. Er wird später nicht erneut ausgegeben. Frage GET /api/v1/faxes/:id ab, bis status gleich documents_ready und checkout_available gleich true ist. Leite die Person dann zu status_url. Dort prüft sie Faxnummer, Dokumente und Preis und bezahlt. Die Zahlung beginnt über die Schaltfläche auf dieser Seite. Ein Link, der Checkout startet, würde von Linkvorschauen in Chat-Apps geöffnet. Deshalb gibt es keinen Checkout-Endpunkt.
Zwei gleiche Anfragen erstellen zwei Faxe. Es gibt keinen Idempotenzschlüssel.
Mit Dokument-IDs
documents enthält die Slot-IDs in der gewünschten Faxreihenfolge. Eine bereits einem Fax zugeordnete ID kann nicht für ein anderes Fax verwendet werden. Lade die Datei erneut hoch.
curl -s https://eu.faxette.com/api/v1/faxes \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","fax_number":"+442079460958","documents":["SIGNED_ID"]}'
Mit Dateien in einer Anfrage
Sende documents[] als Multipart-Dateien in Faxreihenfolge. Die Daten laufen über diesen Server. Große Dateien solltest du über einen Upload-Slot senden. Der Inhaltstyp muss einem der oben genannten entsprechen. type= setzt ihn, falls er sich nicht aus dem Dateinamen ergibt.
curl -s https://eu.faxette.com/api/v1/faxes \
-F "[email protected]" \
-F "fax_number=+442079460958" \
-F "documents[][email protected];type=application/pdf" \
-F "documents[][email protected];type=image/jpeg"
Leerer Entwurf
Lasse documents weg. In der Antwort ist status gleich draft. Die Person fügt ihre Dateien auf der Statusseite hinzu.
curl -s https://eu.faxette.com/api/v1/faxes \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","fax_number":"+442079460958"}'
Felder
| Feld | Zu sendender Wert |
|---|---|
| Erforderlich. An diese Adresse senden wir Belege und Updates. Sie muss E-Mails empfangen können. Wegwerfadressen werden abgelehnt. | |
| fax_number |
Erforderlich.
Gib die Ländervorwahl an, etwa +442079460958.
Kostenpflichtige Sonderrufnummern und Nummern außerhalb der auf dieser Website unterstützten Länder werden abgelehnt.
|
| documents | Optional. Slot-IDs oder Multipart-Dateien. Bis zu 10 Dateien mit jeweils bis zu 20 MB (20.971.520 Bytes). |
201 mit Fax und Token. Andere Felder bleiben null, bis das Fax weiterverarbeitet wird.
{
"data": {
"type": "Fax",
"id": "k3n8q0w1x4y7",
"status": "processing_documents",
"fax_number": "+442079460958",
"page_count": null,
"retries_remaining": 2,
"next_attempt_at": null,
"resend_by": null,
"updated_at": "2026-10-27T16:04:00.000Z",
"status_url": "https://eu.faxette.com/f/k3n8q0w1x4y7?token=exampletoken",
"checkout_available": false,
"price": null,
"payment": null,
"attempt": 1,
"max_attempts": 3,
"document_errors": [],
"failure_reason": null,
"token": "exampletoken"
}
}
Nach dem Zählen der Seiten sehen die Felder so aus. currency ist auf dieser Website eur.
{
"status": "documents_ready",
"page_count": 3,
"checkout_available": true,
"price": { "amount_cents": 500, "currency": "eur" }
}
Fax abrufen
GET /api/v1/faxes/:id?token=
Liefert dasselbe Objekt wie beim Erstellen, ohne token. Die Antwort enthält niemals Dokumente oder Dateinamen. Frage den Status ab, solange status gleich processing_documents ist. document_errors nennt die zu korrigierende Datei anhand ihrer Position im Fax, beginnend bei 1.
curl -s "https://eu.faxette.com/api/v1/faxes/k3n8q0w1x4y7?token=exampletoken"
{
"document_errors": [
{
"reason": "password_protected",
"position": 2,
"message": "Document 2 is locked with a password. Open it, save or print it as a new PDF without the password, then upload that copy."
}
]
}
Dokumente ersetzen
PATCH /api/v1/faxes/:id/documents?token=
documents enthält die vollständige Liste in Faxreihenfolge. Um eine Datei zu behalten, sende ihre Slot-ID erneut. Um sie zu entfernen, lasse sie weg. Entfernte Dateien werden gelöscht und die Seiten erneut gezählt. Das ist möglich, solange status gleich draft, processing_documents oder documents_ready ist. Nach Beginn der Zahlung sind die Dateien gesperrt. Erstelle ein neues Fax, um sie zu ändern. Slot-IDs gelten 1 Stunde und erscheinen nie in der Fax-Antwort. Bewahre sie daher nach dem Upload auf.
curl -s -X PATCH "https://eu.faxette.com/api/v1/faxes/k3n8q0w1x4y7/documents?token=exampletoken" \
-H "Content-Type: application/json" \
-d '{"documents":["SIGNED_ID","ANOTHER_ID"]}'
200 mit dem Fax. status wird wieder processing_documents.
Erneut senden
POST /api/v1/faxes/:id/resend?token=
Ein fehlgeschlagenes Fax kann kostenlos erneut gesendet werden, solange der Betrag auf der Karte reserviert ist. resend_by nennt das Ende dieser Frist. retries_remaining muss größer als 0 sein und beginnt bei 2. Faxe mit failure_reason gleich our_side können nicht erneut gesendet werden. Die Reservierung wird sofort aufgehoben.
fax_number ist optional. Ohne Wert oder mit leerem Wert wird dieselbe Nummer verwendet. Eine Nummer ohne Ländervorwahl wird dem Land der aktuellen Faxnummer zugeordnet.
curl -s -X POST "https://eu.faxette.com/api/v1/faxes/k3n8q0w1x4y7/resend?token=exampletoken" \
-H "Content-Type: application/json" \
-d '{"fax_number":"+442079460018"}'
200 mit dem Fax. status ist scheduled.
{
"status": "failed",
"failure_reason": "temporary",
"retries_remaining": 2,
"resend_by": "2026-10-29T16:04:00.000Z",
"payment": { "status": "authorized", "amount_cents": 605, "tax_cents": 105, "currency": "eur" }
}
Das Fax-Objekt
| Feld | Typ | Bedeutung |
|---|---|---|
| type | string | Immer „Fax“. |
| id | string | 12 Kleinbuchstaben oder Ziffern. |
| status | string | Aktueller Zustand des Faxes. Siehe Statustabelle. |
| fax_number | string | E.164, etwa +442079460958. |
| page_count | integer oder null | Null, bis die Seiten gezählt sind. |
| retries_remaining | integer | Verbleibende Neuversendungen durch den Kunden. Beginnt bei 2. Automatische Wiederholungen bei besetzter Leitung verbrauchen diese nicht. |
| next_attempt_at | Zeitpunkt oder null | Zeitpunkt der erneuten Anwahl bei besetzter Leitung. |
| resend_by | Zeitpunkt oder null | Zeitpunkt, ab dem ein fehlgeschlagenes Fax nicht mehr erneut gesendet werden kann und der reservierte Betrag freigegeben wird. |
| updated_at | Zeitpunkt | Zeitpunkt der letzten Änderung am Fax. |
| status_url | string | Seite zur Zahlung durch den Absender. Der Link enthält das Token. |
| checkout_available | boolean | True, wenn diese Seite eine Zahlung annehmen kann. |
| price | Objekt oder null | Vor Steuern: amount_cents und currency. Null, bis die Seiten gezählt sind. Weitere Seiten sind bereits eingerechnet. |
| payment | Objekt oder null | Null, bis der Kartenbetrag reserviert oder Guthaben abgezogen wird. Danach status, method (card oder credit), amount_cents, tax_cents und currency. |
| attempt | integer | Anwahl dieses Sendevorgangs, von 1 bis max_attempts. |
| max_attempts | integer | Immer 3. |
| document_errors | array | Was vor dem Versand korrigiert werden muss. Leer, wenn keine Korrektur nötig ist. |
| failure_reason | string oder null | Gesetzt, wenn status gleich failed ist. |
| token | string | Nur beim Erstellen. Eine undurchsichtige Zeichenfolge. Speichere sie. |
status
| status | Bedeutung |
|---|---|
| draft | Dateien fehlen oder müssen korrigiert werden. Siehe document_errors. |
| processing_documents | Seiten werden gezählt. |
| documents_ready | Preis berechnet. Die Statusseite kann Zahlungen annehmen. |
| awaiting_payment | Zahlung wurde gestartet. |
| scheduled | Bezahlt und wartet auf Versand. Bei besetzter Leitung wird next_attempt_at gesetzt. |
| sending | Übertragung läuft. |
| delivered | Das empfangende Gerät hat die Zustellung bestätigt. Die Karte wird belastet. |
| failed | Siehe failure_reason. Der Betrag bleibt reserviert, wenn das Fax erneut gesendet werden kann. |
| canceled | Nicht rechtzeitig bezahlt. Die Dateien werden gelöscht. |
Bei besetzter Leitung wird später erneut gewählt. Diese Anrufe sind attempt von max_attempts. Sie sind unabhängig von einer Neuversendung durch den Kunden.
payment
payment.status ist authorized während der Kartenbetrag reserviert ist,
paid nach Zustellung des Faxes und Abbuchung des reservierten Betrags,
canceled wenn der reservierte Betrag freigegeben wurde, oder refunded wenn die Zahlung erstattet wurde.
amount_cents ist der reservierte oder abgebuchte Betrag einschließlich Steuern.
Auf dieser Website wird bei der Zahlung MwSt. hinzugefügt. tax_cents ist diese MwSt. Die Beträge im Beispiel zeigen einen einzelnen Fall. Die MwSt. hängt vom Land des Absenders ab.
price bleibt der Betrag vor Steuern.
failure_reason
Null, außer status ist failed.
| temporary | Die Leitung war nach 3 Versuchen besetzt, blieb unbeantwortet oder brach ab. Das Fax kann erneut gesendet werden. |
| wrong_number | Unter der Nummer war kein Faxgerät erreichbar. Sende das Fax mit korrigierter Nummer erneut. |
| our_side | Ein Fehler auf unserer Seite. Der reservierte Betrag wird freigegeben. Das Fax kann nicht erneut gesendet werden. |
document_errors
Jeder Eintrag enthält reason, position und message. position ist die Dokumentnummer im Fax oder null bei einem Problem mit dem gesamten Fax. message ist die anzuzeigende Meldung. Dieselben Probleme können schon beim Erstellen als validation_failed zurückgegeben werden, bevor ein Fax existiert.
| password_protected | Das PDF ist passwortgeschützt. |
| unreadable_pdf | Das PDF konnte nicht geöffnet werden. |
| unreadable_image | Das Bild konnte nicht geöffnet werden. |
| unsupported_type | Weder ein PDF noch ein unterstütztes Foto. |
| image_too_large | Mehr als 50 Megapixel. |
| multi_page_image | Bilddatei mit mehreren Seiten. Als PDF speichern. |
| too_many_pages | Mehr als 200 Seiten. |
| too_many_documents | Mehr als 10 Dateien. |
| document_too_large | Eine Datei ist größer als 20 MB. |
| no_documents | Das Fax enthält keine Dateien. |
| build_failed | Das Fax konnte nicht zusammengestellt werden. Lade die Dateien erneut hoch. |
Fehler
message ist ein Satz. Verwende code für Programmlogik. Dieser Wert bleibt stabil.
{
"code": "validation_failed",
"message": "Fax number is in a country we can't fax to yet."
}
| code | Status | Wann |
|---|---|---|
| validation_failed | 422 | Ein Feld fehlt oder wird abgelehnt. message enthält einen Satz. |
| unauthorized | 401 | Eine Anfrage mit erforderlichem Token wurde ohne Token gesendet. |
| not_found | 404 | Unbekanntes Fax oder unpassendes Token. Beide Fälle liefern dieselbe Antwort. |
| rate_limited | 429 | Zu viele Anfragen. Warte vor weiteren Anfragen. |
Grenzen
- 10 Dokumente, jeweils 20 MB, 200 Seiten, 50 Megapixel pro Bild.
Für Claude, ChatGPT und andere Assistenten: Zum MCP-Server →