Kurz gesagt
- Standard: REST mit JSON, beschrieben als OpenAPI 3.1 unter
/api/v1/openapi; Fehler als RFC-9457-Problem-Details. - Sicherheit: OAuth-2.0-Bearer-Tokens Ihrer OpenID-Connect-Server; Rollen aus dem Token; Anfragegrenzen in jeder Antwort.
- Endpunkte: Formulare, Felder, JSON Schema, prüfen, ausfüllen, absenden, E-Rechnungen, vorausgefüllte Links, Webhooks und Nutzung.
- KI-Agenten: ein MCP-Server unter /mcp bietet die Formulare als Werkzeuge an (auflisten, Felder lesen, prüfen, ausfüllen, vorausgefüllter Link, absenden, E-Rechnung), mit derselben Anmeldung und denselben Regeln wie die REST-API.
Auf einen Blick
- Basis-URL:
https://<Ihr Server>/api/v1(auf Servern ohne URLs ohne Dateiendung:/api.ashx/v1). - Beschreibung: OpenAPI 3.1 unter
/api/v1/openapiauf jedem Server und als Download. Importieren Sie sie in Postman, Swagger UI oder einen Codegenerator. - Format: JSON (UTF-8). PDFs kommen als Base64 in der JSON-Antwort oder mit
Accept: application/pdfals Datei. - Fehler: Problem Details nach RFC 9457 (
application/problem+json).
Anmeldung
Jeder Aufruf außer /, /health, /openapi und /field-types braucht ein Access Token eines der OpenID-Connect-Server, die auf dem Formularserver eingerichtet sind (standardmäßig phone.codeb.io, www.aloaha.com und phone.aloaha.com):
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6…
- JWT-Tokens werden lokal geprüft: RS256-Signatur gegen die veröffentlichten Schlüssel des Servers, Aussteller, Ablauf und Zielgruppe (Audience). Die Audience ist die Client-ID des Formularservers; ein Administrator kann weitere Client-IDs zulassen (Einstellungen, REST-API).
- Undurchsichtige Tokens werden per Token-Introspection beim ausstellenden Server geprüft. Sind mehrere Server eingerichtet, nennen Sie ihn im Header
X-OIDC-Issuer: phone.codeb.io. - Rollen kommen aus dem Claim
roledes Tokens, wie bei der Anmeldung im Designer:adminundusersehen die Formulare ihrer Gruppe (Hostname des Anmeldeservers),guestnur freigegebene Formulare. Absenden erfordertuseroderadmin, außer der Administrator lässt Gäste zu. GET /api/v1/mezeigt, für welchen Benutzer, welche Rolle und Gruppe ein Token steht.
Ein Bearer-Token erhalten
Die API nimmt die Access Tokens an, die die OpenID-Connect-Server bei der Anmeldung ausstellen (RS256-JWTs, eine Stunde gültig). Ihre Anwendung erhält eines mit dem Standardverfahren Authorization Code Flow mit PKCE; das kann jede OAuth-2.0- / OpenID-Connect-Bibliothek. Unten steht phone.codeb.io für den Anmeldeserver, den Sie verwenden.
1. Anwendung einmalig registrieren
- Registrieren Sie Ihre Anwendung beim Anmeldeserver als OIDC-Client (das erledigt ein Administrator des CodeB-Servers unter
/oidc-clients.html, oder fragen Sie uns unter info@aloaha.com). Sie wählen eine Client-ID (z. B.my-app) und die Redirect-URI, zu der die Anmeldung zurückkehrt (z. B.http://localhost:8765/callbackfür ein Skript). Die Redirect-URI muss Zeichen für Zeichen übereinstimmen. Mit Client-Secret ist der Client vertraulich, ohne ist er öffentlich und nutzt nur PKCE. - Auf dem Formularserver lässt ein Administrator die Client-ID zu: Settings → REST API → Other applications allowed. Tokens für die eigene Client-ID des Formularservers werden ohnehin angenommen.
2. Anmelden und Code erhalten
Erzeugen Sie ein PKCE-Paar und öffnen Sie die Autorisierungs-URL im Browser. Die Person meldet sich an (Passwort, Passkey oder EU Digital Identity Wallet), und der Browser kehrt mit ?code=… zu Ihrer Redirect-URI zurück.
VERIFIER=$(openssl rand -base64 48 | tr -d '=+/' | cut -c1-64)
CHALLENGE=$(printf '%s' "$VERIFIER" | openssl dgst -sha256 -binary | openssl base64 | tr '+/' '-_' | tr -d '=')
# diese URL im Browser öffnen (eine Zeile)
https://phone.codeb.io/oauth2/v1/authorize?response_type=code&client_id=my-app
&redirect_uri=http%3A%2F%2Flocalhost%3A8765%2Fcallback&scope=openid%20profile%20email
&state=xyz&nonce=abc&code_challenge=$CHALLENGE&code_challenge_method=S256
Auch wenn unter der Redirect-URI nichts antwortet, steht der Code in der Adresszeile des Browsers. Er gilt wenige Minuten und nur einmal.
3. Code gegen Tokens tauschen
curl -X POST https://phone.codeb.io/oauth2/v1/token \
-d grant_type=authorization_code -d client_id=my-app \
-d redirect_uri=http://localhost:8765/callback \
-d code=$CODE -d code_verifier=$VERIFIER
# vertraulicher Client: zusätzlich -d client_secret=$SECRET
{ "access_token": "eyJhbGciOiJSUzI1NiIs…", "token_type": "Bearer", "expires_in": 3600,
"id_token": "eyJ…", "refresh_token": "…" }
4. API aufrufen, bei Bedarf erneuern
curl -H "Authorization: Bearer $ACCESS_TOKEN" https://forms.example.com/api/v1/me
# nach einer Stunde: neue Tokens mit dem Refresh Token (es wechselt bei jeder Nutzung)
curl -X POST https://phone.codeb.io/oauth2/v1/token \
-d grant_type=refresh_token -d client_id=my-app -d refresh_token=$REFRESH_TOKEN
Das Token handelt für die angemeldete Person: Ihre role bestimmt, welche Formulare die API zeigt (siehe oben). Für einen Hintergrundjob melden Sie sich einmal mit einem eigenen Konto an und halten das Token mit dem Refresh Token aktuell.
Der ganze Ablauf als Skript
Python 3, nur Standardbibliothek: öffnet den Browser, empfängt den Code auf localhost und gibt das Access Token aus.
import base64, hashlib, http.server, json, secrets, urllib.parse, urllib.request, webbrowser
ISSUER, CLIENT_ID = "https://phone.codeb.io", "my-app"
REDIRECT = "http://localhost:8765/callback"
verifier = secrets.token_urlsafe(48)
challenge = base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest()).rstrip(b"=").decode()
state = secrets.token_urlsafe(16)
webbrowser.open(ISSUER + "/oauth2/v1/authorize?" + urllib.parse.urlencode({
"response_type": "code", "client_id": CLIENT_ID, "redirect_uri": REDIRECT,
"scope": "openid profile email", "state": state, "nonce": secrets.token_urlsafe(16),
"code_challenge": challenge, "code_challenge_method": "S256"}))
class Callback(http.server.BaseHTTPRequestHandler):
def do_GET(self):
q = urllib.parse.parse_qs(urllib.parse.urlparse(self.path).query)
assert q.get("state") == [state], "state mismatch"
self.server.code = q["code"][0]
self.send_response(200); self.end_headers(); self.wfile.write(b"Angemeldet. Sie koennen diesen Tab schliessen.")
def log_message(self, *a): pass
srv = http.server.HTTPServer(("localhost", 8765), Callback)
srv.handle_request()
body = urllib.parse.urlencode({"grant_type": "authorization_code", "client_id": CLIENT_ID,
"redirect_uri": REDIRECT, "code": srv.code, "code_verifier": verifier}).encode()
tokens = json.load(urllib.request.urlopen(ISSUER + "/oauth2/v1/token", body))
print(tokens["access_token"])Endpunkte
Alle Pfade relativ zu /api/v1.
| Methode | Pfad | Was er tut |
|---|---|---|
| GET | /forms | Formulare, die das Token nutzen darf; Filter ?released=true und ?q=. |
| GET | /forms/{formId} | Einstellungen, Seitenzahl, Links zur PDF- und HTML-Fassung. |
| GET | /forms/{formId}/fields | Alle Felder: Typ, Name zum Absenden, Position, Pflicht, Prüfregel, Auswahlwerte. |
| GET | /forms/{formId}/schema | JSON Schema der Werte, für Codegeneratoren und KI-Agenten. |
| GET | /forms/{formId}/pdf | Das leere freigegebene PDF-Formular. |
| POST | /forms/{formId}/validate | Prüft Werte, ohne abzusenden. |
| POST | /forms/{formId}/fill | Ausgefülltes PDF ohne Einsendung, ohne E-Mails (wie Speichern im Webformular). |
| POST | /forms/{formId}/submissions | Sendet das Formular ab: versiegeltes PDF, E-Mails, E-Rechnung. |
| POST | /einvoices | ZUGFeRD- / Factur-X- / XRechnung-Rechnung aus strukturierten Daten. |
| POST | /forms/{formId}/prefill | Link zum Webformular mit eingetragenen Werten (DELETE /forms/{formId}/prefill/{prefillId} widerruft ihn). |
| GET / POST | /forms/{formId}/webhooks | Webhooks eines Formulars auflisten oder anlegen; PATCH, DELETE, /test und /rotate-secret je Webhook (Details). |
| GET | /usage | Anfragegrenze, API-Einsendungen heute, Webhook-Warteschlange. |
| GET | /field-types, /validation-rules, /me | Feldtypen, Prüfregeln, Identität des Tokens. |
Formulare und Felder lesen
Listen Sie die freigegebenen Formulare auf und lesen Sie dann die Felder eines Formulars. Jedes Eingabefeld hat einen submitName: Das ist der Schlüssel beim Absenden. Optionsfelder teilen sich den Namen ihrer Gruppe; Auswahllisten nennen ihre options.
curl -H "Authorization: Bearer $TOKEN" https://forms.example.com/api/v1/forms?released=true
curl -H "Authorization: Bearer $TOKEN" https://forms.example.com/api/v1/forms/zugferd/fields?inputOnly=true
Feldtypen: textfield, dropdown, checkbox und radio nehmen Werte auf; text, image, line und button dienen nur dem Layout. Positionen sind in Punkt angegeben, gemessen wie im Editor.
Ausfüllen und absenden
Senden Sie die Werte als Objekt aus submitName und Wert. Kontrollkästchen nehmen true oder false, Auswahllisten und Optionsgruppen einen ihrer Werte. Der Server prüft zuerst Pflichtfelder, Auswahlwerte, Länge und Prüfregeln; ist etwas falsch, antwortet er mit 422 und einer Fehlerliste und sendet nichts ab.
curl -X POST https://forms.example.com/api/v1/forms/contactrequest/submissions \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"values": {"Name": "Erika Muster", "Email": "erika@example.com", "Message": "Bitte rufen Sie mich zurück.", "Consent": true}}'
Antwort (201):
{
"submissionId": "0b6c1f2e9d4a4c51a3f0d2b7e8c91a44",
"formId": "contactrequest",
"status": "submitted",
"pdf": { "fileName": "contactrequest.pdf", "size": 84211, "sha256": "…", "eInvoice": false, "data": "JVBERi0xLjc…" }
}
/fillliefert nur das ausgefüllte PDF: nichts wird versiegelt, keine E-Mail verschickt, Pflichtfelder dürfen leer bleiben.- Formulare mit Anmeldepflicht erhalten die geprüfte Identität des Tokens, genau wie nach einer Anmeldung im Browser. Andere Formulare erhalten sie mit
"useIdentity": true. - Unbekannte Feldnamen werden abgelehnt, damit Tippfehler nicht verloren gehen. Mit
"ignoreUnknownFields": truewerden sie stattdessen übersprungen. Weggelassene Felder behalten ihren Vorgabewert, wie im Browser. - Absenden erfordert die Rolle
useroderadmin; außerdem begrenzt der Server die Zahl der API-Einsendungen pro Tag.
E-Rechnungen (ZUGFeRD / XRechnung)
POST /einvoices nimmt eine Rechnung als strukturierte Daten, füllt das Rechnungsformular des Servers aus und sendet es ab. Die Antwort ist ein PDF/A-3 mit eingebettetem XML nach EN 16931 (ZUGFeRD / Factur-X; mit Käuferreferenz (Leitweg-ID) für XRechnung). Zeilensummen, Umsatzsteuer und Gesamtbetrag werden berechnet, wenn Sie sie weglassen. Datumsangaben im ISO-Format (2026-10-11), Beträge mit Punkt.
curl -X POST https://forms.example.com/api/v1/einvoices \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -H "Accept: application/pdf" \
-o rechnung-2026-0042.pdf -d '{
"invoice": { "number": "2026-0042", "date": "2026-10-11", "currency": "EUR", "dueDate": "2026-10-25", "taxPercent": 19 },
"seller": { "name": "Example Supplies GmbH", "street": "Musterstraße 1", "postCode": "10115", "town": "Berlin",
"country": "DE", "email": "billing@example.com", "vatId": "DE123456789" },
"buyer": { "name": "Example Hotel AG", "street": "Seestraße 1", "postCode": "12345", "town": "Musterstadt",
"country": "DE", "email": "accounts@example.com" },
"payment": { "iban": "DE02120300000000202051", "bic": "BYLADEM1001" },
"items": [ { "name": "Beratung (Stunden)", "quantity": 4, "netPrice": 120 },
{ "name": "Reisekostenpauschale", "netPrice": 80 } ]
}'
"action": "preview" liefert die ausgefüllte Rechnung, ohne sie zu versenden. Die Rechnung geht per E-Mail an die Adressen in den Daten, wie beim Rechnungs-Webformular.
Vollständige Referenz der E-Rechnungs-API: jedes Feld mit seinem Geschäftsbegriff nach EN 16931, Rechen- und Steuerregeln, Checkliste XRechnung und Fehler.
Webhooks
Ein Webhook schickt jede Einsendung eines Formulars als JSON an Ihren HTTPS-Endpunkt, auf Wunsch mit dem versiegelten PDF, wenige Sekunden nach dem Absenden. Die Nachrichten sind mit HMAC-SHA256 nach Standard Webhooks signiert (Header webhook-id, webhook-timestamp, webhook-signature) und werden 21 Stunden lang wiederholt. Webhooks verwalten erfordert die Rolle admin.
curl -X POST https://forms.example.com/api/v1/forms/contact/webhooks \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"url": "https://crm.example.com/hooks/eforms", "includePdf": true}'
# Antwort 201 mit "secret": "whsec_…" (nur einmal angezeigt)
Webhooks im Detail: Nachrichtenformat, Signaturprüfung in Node.js, Python, C# und PHP, Wiederholungen und Sicherheit.
Vorausgefüllte Links
Ein vorausgefüllter Link öffnet das Webformular mit bereits eingetragenen Werten, etwa einen Vertrag mit Kundennummer und Anschrift, den der Kunde nur noch prüft und unterschreibt. Die Werte bleiben auf dem Server; der Link trägt ein zufälliges Token, das nur für dieses Formular gilt und abläuft (standardmäßig nach 7 Tagen, höchstens 90).
curl -X POST https://forms.example.com/api/v1/forms/contract/prefill \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"values": {"CustomerNo": "K-1042", "Surname": "Muster", "Email": "erika@example.com"},
"expiresInHours": 72, "lock": true}'
{ "id": "pf_1c9e…", "formId": "contract",
"url": "https://forms.example.com/pdfforms.aspx?fid=contract&web=1&prefill=Qm9x…",
"expiresAt": "2026-10-15T09:30:00Z", "lock": true, "fields": 3 }
- Die Werte werden wie bei einer Einsendung geprüft (Optionen, Länge, Regeln), Felder dürfen aber leer bleiben.
"lock": truemacht die vorausgefüllten Textfelder im Browser schreibgeschützt (eine Hilfe gegen Tippfehler, keine Sicherheitsfunktion). Die Werte dürfen zusammen höchstens 64 KB groß sein. - Vom Browser gemerkte Eingaben überschreiben einen vorausgefüllten Link nicht. Verlangt das Formular eine Anmeldung, bleibt der Link über die Anmeldung erhalten.
- Schicken Sie den Link nur an die Person, für die er gedacht ist: Wer ihn hat, sieht die Werte.
DELETE /forms/{formId}/prefill/{id}widerruft ihn. - Links anlegen erfordert immer die Rolle
useroderadmin.
Nutzung und Anfragegrenzen
Jede angemeldete Antwort nennt die Grenze des Aufrufers: X-RateLimit-Limit (Anfragen pro Minute), X-RateLimit-Remaining und X-RateLimit-Reset (Sekunden bis zum neuen Zeitfenster). GET /usage liefert dasselbe, dazu (für user und admin) die heutigen API-Einsendungen gegenüber der Tagesgrenze und (für Administratoren) die Webhook-Warteschlange.
curl -H "Authorization: Bearer $TOKEN" https://forms.example.com/api/v1/usage
{ "user": "erika@example.com", "role": "admin",
"rateLimit": { "limitPerMinute": 120, "remaining": 117, "resetSeconds": 42 },
"apiSubmissions": { "today": 12, "limitPerDay": 1000, "remaining": 988, "resetsAt": "2026-10-13T00:00:00Z" },
"webhooks": { "enabled": true, "queued": 0, "failedLast7Days": 0 } }Fehler und Grenzen
Jeder Fehler ist ein Problem-Details-Objekt mit type, title, status und detail; Prüffehler enthalten zusätzlich eine Liste der Felder.
| Status | Code | Bedeutung |
|---|---|---|
| 400 | invalid_json | Der Inhalt ist kein JSON-Objekt. |
| 401 | invalid_token, invalid_request | Token fehlt, ist abgelaufen, für eine andere Anwendung ausgestellt oder von einem unbekannten Server. |
| 403 | insufficient_scope, local_account | Erforderlicher Scope fehlt oder der Name gehört zu einem lokalen Konto. |
| 404 | form_not_found | Unbekanntes Formular oder Formular einer anderen Gruppe. |
| 409 | form_not_released | Das Formular ist noch nicht freigegeben. |
| 422 | validation_failed | Werte fehlen oder sind ungültig; siehe errors. |
| 403 | role_required | Absenden und vorausgefüllte Links erfordern die Rolle user oder admin, Webhooks die Rolle admin. |
| 403 | webhooks_disabled, prefill_disabled | Webhooks oder vorausgefüllte Links sind auf diesem Server abgeschaltet. |
| 409 | too_many_webhooks | Das Formular hat bereits die Höchstzahl an Webhooks (standardmäßig 10). |
| 404 | not_found | Unbekannter API-Pfad. |
| 405 | method_not_allowed | Falsche HTTP-Methode für diesen Pfad. Wo PATCH oder DELETE nicht durchkommen, POST mit dem Header X-HTTP-Method-Override senden. |
| 413 / 415 | too_large, unsupported_media_type | Inhalt größer als 10 MB oder kein JSON. |
| 422 | not_an_invoice_form, too_many_items | Das gewählte Formular hat keine Rechnungspositionen oder weniger als die Rechnung. |
| 429 | rate_limited, daily_limit | Zu viele Anfragen (standardmäßig 120 pro Minute und Benutzer) oder Tagesgrenze der API-Einsendungen erreicht; Retry-After abwarten. |
| 502 | form_processing_failed | Das Formular konnte nicht verarbeitet werden (z. B. Mailserver nicht erreichbar). |
| 500 | server_error | Fehler auf dem Server; Details stehen im Serverprotokoll. |
| 503 | storage_busy | Die Webhook-Einstellungen werden gerade von einer anderen Anfrage geschrieben; bitte erneut versuchen. |
| 503 | api_disabled, , loopback_not_configured | API abgeschaltet, Anmeldeserver nicht erreichbar oder interne Adresse des Servers nicht eingestellt. |
Was die API abdeckt
Wir haben die API mit den Schnittstellen verbreiteter Formular-Baukästen und PDF-Dienste verglichen. Diese bieten typischerweise: Formulare und ihre Fragen auflisten, Einsendungen lesen und anlegen, Webhooks bei neuen Einsendungen sowie PDF-Formulardaten füllen oder auslesen. Die API des CodeB eForms Server deckt ab:
- Formulare und Felder, mit Feldtypen, Positionen, Prüfregeln und einem JSON Schema je Formular.
- Einsendungen mit der vollständigen Verarbeitung des Webformulars: versiegeltes und optional signiertes PDF, E-Mails und Regeln für Anhänge.
- PDF ausfüllen ohne Einsendung sowie das leere PDF-Formular.
- E-Rechnungen (ZUGFeRD / Factur-X / XRechnung) aus strukturierten Daten, was Formular-Baukästen meist nicht können.
- Sicherheit nach Standard: OAuth-2.0-Bearer-Tokens Ihrer eigenen OpenID-Connect-Server, keine zusätzlichen API-Schlüssel.
- Webhooks für jede Einsendung, signiert nach Standard Webhooks, mit Wiederholungen und Fehler-E-Mails.
- Vorausgefüllte Links, die ein Formular mit eingetragenen Werten öffnen, und ein Nutzungs-Endpunkt mit Headern zur Anfragegrenze.
Der Server speichert eingesandte Daten bewusst nicht, daher gibt es keinen Endpunkt, der frühere Einsendungen auflistet; mit einem Webhook erhalten Sie jede Einsendung in Ihrem eigenen System.
MCP-Server für KI-Agenten
Neben der REST-API bietet jeder CodeB eForms Server einen MCP-Server (Model Context Protocol) unter https://<Ihr Server>/mcp, damit KI-Apps und -Agenten Ihre Formulare nutzen können: ein Formular finden, seine Felder lesen, Werte prüfen, das PDF ausfüllen, einen vorausgefüllten Link erstellen oder, nachdem die Person bestätigt hat, das Formular absenden oder eine E-Rechnung erstellen.
- Werkzeuge:
whoami,list_forms,get_form(Felder und JSON-Schema),validate_form,fill_form(ausgefülltes PDF, nichts wird gesendet),create_prefilled_link,submit_formundcreate_einvoice. Die letzten beiden senden E-Mails und sind für die KI-App entsprechend gekennzeichnet. - Dieselben Regeln wie die REST-API: Jedes Werkzeug ruft die REST-API desselben Servers mit dem eigenen Token des Aufrufers auf; die Person sieht nur die Formulare ihrer Gruppe, Werte werden nach denselben Regeln geprüft, Ratenbegrenzung, Tageslimit für Einsendungen und Protokoll gelten unverändert.
- Anmeldung heute: das Zugriffstoken eines der eingerichteten Anmeldeserver, wie bei der REST-API (
Authorization: Bearer <Token>). Das passt für KI-Werkzeuge, in denen sich ein Token oder Header eintragen lässt. - Anmeldung geplant: Apps, in die man nur die Adresse einfügt, melden sich über phone.codeb.io an; dort erlaubt die Person die App und wählt ihre Berechtigungen („Formulare ausfüllen“, „Formulare absenden“). Der Server veröffentlicht seine OAuth-Metadaten bereits unter
/.well-known/oauth-protected-resource/mcp. - Signaturen: Über eine KI-App eingesendete Formulare werden vom Server versiegelt, nie mit dem persönlichen Schlüssel der Person signiert.
- Technik: JSON-RPC 2.0 über Streamable HTTP (JSON-Antworten, keine Sitzungen), Protokollversionen 2025-06-18, 2025-03-26 und 2024-11-05. Einstellungen: „MCP server for AI agents“ und „MCP sign-in server for AI apps“ auf der Einstellungsseite.
Der CodeB-Server phone.codeb.io hat einen eigenen MCP-Server für Signaturanfragen, Altersprüfungen und Besprechungen: KI-Agenten bei phone.codeb.io.
Fragen und Antworten
Wie erhalte ich ein Token für die API?
Melden Sie sich mit dem Authorization-Code-Flow (mit PKCE) bei einem der OpenID-Connect-Server an, die auf dem Formularserver eingerichtet sind, zum Beispiel phone.codeb.io, und verwenden Sie das Access Token. Tokens für die Client-ID des Formularservers werden angenommen; ein Administrator kann die Client-IDs weiterer Anwendungen zulassen.
Gibt es eine OpenAPI- oder Swagger-Beschreibung?
Ja. Jeder Server veröffentlicht OpenAPI 3.1 unter /api/v1/openapi, und Sie können sie auf dieser Seite herunterladen. Importieren Sie sie in Postman, Swagger UI oder einen Codegenerator.
Kann ich über die API ZUGFeRD- oder XRechnung-Rechnungen erstellen?
Ja. POST /api/v1/einvoices nimmt Verkäufer, Käufer, Positionen und Umsatzsteuer als JSON und liefert ein PDF/A-3 mit eingebettetem XML nach EN 16931. Mit Käuferreferenz (Leitweg-ID) erfüllt es XRechnung.
Unterscheidet sich eine Einsendung über die API von einer im Browser?
Nein. Die API übergibt die Werte an dieselbe Verarbeitung wie das Webformular; versiegeltes PDF, Signatur, E-Mails und E-Rechnung sind gleich.
Kann ich eingesandte Formulare auflisten?
Nein. Der Server speichert eingesandte Daten nicht; das Ergebnis geht an die eingerichteten Empfänger und an den Aufrufer zurück. Um Einsendungen in Ihrem eigenen System zu sammeln, richten Sie einen Webhook ein: Jede Einsendung geht dann als signiertes JSON an Ihren Endpunkt.
Unterstützt die API Webhooks?
Ja. POST /api/v1/forms/{formId}/webhooks trägt einen HTTPS-Endpunkt ein, der jede Einsendung des Formulars als JSON erhält, signiert mit HMAC-SHA256 nach Standard Webhooks und 21 Stunden lang wiederholt. Nachrichtenformat und Signaturprüfung stehen auf der Webhook-Seite.
Kann ich jemandem ein bereits ausgefülltes Formular schicken?
Ja. POST /api/v1/forms/{formId}/prefill liefert einen Link, der das Webformular mit Ihren Werten öffnet. Der Link gilt nur für dieses Formular und läuft standardmäßig nach 7 Tagen ab.
Können KI-Agenten die Formulare nutzen?
Ja. Jeder CodeB eForms Server hat unter /mcp einen MCP-Server mit Werkzeugen, um Formulare aufzulisten, ihre Felder zu lesen, Werte zu prüfen, das PDF auszufüllen, einen vorausgefüllten Link zu erstellen und, nachdem die Person bestätigt hat, ein Formular abzusenden oder eine E-Rechnung zu erstellen. Er nutzt dasselbe Token und dieselben Regeln wie die REST-API; so eingesendete Formulare versiegelt der Server.
Die API ausprobieren
Fragen Sie nach Testzugangsdaten für unseren Online-Formularserver und testen Sie die API mit Ihren eigenen Formularen.
Stand: