Tool-Referenz
Diese Liste wird beim Build direkt aus der Tool-Registry des Servers generiert, kein Feld ist von Hand gepflegt. Ein registriertes, aktives Tool erscheint mit echten Feldern, ein registriertes aber inaktives Tool zeigt „Bald verfügbar", ein nicht registriertes Tool taucht gar nicht auf. Die Wire-Konventionen (ISO-8601, Cent-Beträge, clientOrderId, dryRun) stehen einmal im Konventionen-Panel, hier nur als kurzer Hinweis pro Tool.
apiVersion v1 · schemaRevision 2 · 64 tools
Jeder Tool-Aufruf kann außerdem einen dieser Transport-Codes zurückgeben, hier nur einmal aufgeführt: UNAUTHORIZED, FORBIDDEN_SCOPE, VALIDATION_ERROR, RATE_LIMITED, INTERNAL_ERROR
Lesen
mcp_healthHealth-/Echo-Probe - prüft das Partner-Token und die Verarbeitungskette von Anfang bis Ende und sagt dir unter setup, welche Voraussetzungen für einen echten Versand schon erfüllt sind (Absender-Profil, AVV, Guthaben, Sandbox, Freigabe) und was der nächste Schritt ist. Mit checkRender: true wird zusätzlich geprüft, ob gerade überhaupt gerendert werden kann (Vorschau, Thumbnail). Rufe das auf, bevor du eine Vorlage baust, die du danach ansehen musst.
Feld Typ checkRender boolean Optional Prüft zusätzlich den Render-Pfad (Composer + Rasterizer). Default false. profile_getScope: profile:readLiefert das Partnerprofil im Überblick: Standard-Absenderadresse, hinterlegte Signatur und Briefkopf, gespeicherte Presets, eine kurze Wallet-Zusammenfassung und das aktuelle Preismodell des Partners (Standardpreis oder Mengenstaffel, inklusive nächster Staffelstufe).
Keine Eingabefelder außer reasoning.
wallet_balanceScope: wallet:readLiefert den aktuellen Wallet-Stand: Guthaben, Tageslimit für Briefe und Kosten, den nächsten Reset-Zeitpunkt sowie das aktuelle Preismodell (Standardpreis oder Mengenstaffel). Bleibt das Guthaben unter den geplanten Versandkosten, rufe wallet_topup_link auf und gib dem Menschen den Link zum Aufladen.
Keine Eingabefelder außer reasoning.
sender_profile_listScope: sender_profile:readListet alle Absenderprofile des Partners mit ihrer Rechtsform und ob die Pflichtangaben vollständig sind.
Keine Eingabefelder außer reasoning.
sender_profile_getScope: sender_profile:readLiefert ein einzelnes Absenderprofil mit allen Pflichtangaben, Bankverbindung und Disclaimer.
Feld Typ profileId string (uuid) Pflicht Fehlercodes: NOT_FOUND
mandant_getScope: mandant:readLiefert einen Mandanten mit Adressen, Kategorie, Sachbearbeiter, Monatslimit, verbrauchtem Monatsbudget, Aufbewahrungsdauer und der Briefanzahl der letzten 12 Monate.
Feld Typ mandantId string Optional mandantennummer string Optional Fehlercodes: NOT_FOUND
mandant_listScope: mandant:readListet die Mandanten des Partners, optional gefiltert nach Suchbegriff, Kategorie oder Tag.
Feld Typ searchQuery string Optional kategorieFilter string Optional tagFilter string Optional since string (date-time) Optional Nur Mandanten, die seit diesem Zeitpunkt angelegt wurden (ISO 8601). limit integer Optional Standard 20, maximal 100. offset integer Optional Versatz für die Seitennavigation. Standard 0. mandant_searchScope: mandant:readSucht Mandanten über Mandantennummer, Name, Tags oder Sachbearbeiter und nennt für jeden Treffer die passende Spalte. Nächster Schritt mit der gefundenen mandantennummer: document_create erzeugt daraus eine Rechnung, Mahnung, Zahlungserinnerung oder Gutschrift, mandant_get liefert die vollständigen Stammdaten, letter_create_draft schreibt einen normalen Brief.
Feld Typ query string Pflicht since string (date-time) Optional Nur Mandanten, die seit diesem Zeitpunkt angelegt wurden (ISO 8601). limit integer Optional Standard 20, maximal 100. offset integer Optional Versatz für die Seitennavigation. Standard 0. template_listScope: template:readVorlagen auflisten, Template-Liste, template list: Listet die verfügbaren Brief-Vorlagen für Anlässe wie Kündigung, Rechnung, Mahnung, Angebot, Vertrag und Behördenpost, mit Kategorie, Version und ihren Platzhaltern (Merge-Feldern). Der exakte technische Tool-Name ist template_list; falls dein Client Tools verzögert lädt, suche nach template_list. Standardmäßig nur freigegebene Vorlagen; mit statusFilter und dem Scope template:write auch offene Entwürfe. Jeder Eintrag sagt mit curated: true, ob es eine kuratierte FrankKi-Standardvorlage ist (die Bibliothek zum Kopieren), und mit hasBlocks: true, ob sie ein strukturiertes Layout mit Tabellen und Summen traegt statt Fliesstext. Naechster Schritt: template_get liefert eine Vorlage vollstaendig (bei einer Blockvorlage inklusive blocksTemplate und styleDefs zum Kopieren und Anpassen), template_apply_with_merge_fields fuellt sie mit deinen Werten.
Feld Typ kategorieFilter string Optional statusFilter released | draft | all Optional released (Standard) zeigt alle freigegebenen Vorlagen. Eigenständige Formularvorlagen tragen sendable:false und brauchen beim Anwenden ein Anschreiben. draft zeigt nur offene Entwürfe, all beide. draft und all brauchen zusätzlich den Scope template:write. limit integer Optional Standard 20, maximal 100. offset integer Optional Versatz für die Seitennavigation. Standard 0. template_getScope: template:readLiefert eine einzelne Vorlage mit Betreff- und Inhaltsvorlage, den Merge-Feldern und der empfohlenen Freigabe-Voreinstellung. Eine Blockvorlage liefert zusaetzlich blocksTemplate und styleDefs, sodass du sie kopieren, anpassen und mit template_save als eigenen Entwurf speichern kannst. Genau so faengt die Gestaltungsschleife an: template_get auf einer kuratierten Standardvorlage (template_list zeigt sie mit curated: true), blocksTemplate anpassen, mit letter_preview ansehen, nachbessern, dann template_save, mit template_preview die gespeicherte Version pruefen und zuletzt template_release. Mit versionId und dem Scope template:write lässt sich auch eine bestimmte Entwurfsversion lesen. Nächster Schritt: template_apply_with_merge_fields füllt die Platzhalter mit deinen Werten.
Feld Typ templateId string (uuid) Pflicht versionId string (uuid) Optional Optional: eine bestimmte Version lesen, auch einen Entwurf. Braucht zusaetzlich den Scope template:write. Ohne Angabe wird die freigegebene Version gelesen. Fehlercodes: NOT_FOUND
letter_getScope: letter:readLiefert einen Brief des Partners samt zugehörigem Auftrag und einer 24 Stunden gültigen Download-URL für die PDF.
Feld Typ letterId string (uuid) Optional orderId string (uuid) Optional letter_listScope: letter:readListet die Briefe des Partners mit optionalen Filtern nach Empfängername, Betreff, Status und Zeitpunkt.
Feld Typ recipientNameContains string Optional subjectContains string Optional statusFilter string Optional since string (date-time) Optional limit integer Optional offset integer Optional sender_profile_validateScope: sender_profile:readPrüft, ob ein Absenderprofil (per profileId) oder ein vorgeschlagener Feldsatz alle Pflichtangaben für seine Rechtsform enthält. Gib genau eine Form an: profileId ODER rechtsform + proposedFields. proposedFields ist ein Objekt; ein JSON-kodierter Objekt-String wird ebenfalls akzeptiert. Liefert valid, missingFields und weiche Hinweise. Meldet eine Lücke als Ergebnis und läuft dabei durch.
Keine Eingabefelder außer reasoning.
analytics_summaryScope: analytics:readLiefert die aggregierten Kennzahlen des Partnerkontos: Briefe pro Monat, Kosten pro Mandant zur Weiterberechnung, Laufzeiten bis zur Zustellung, Fehlerquoten und Ausgaben gegen die gesetzten Limits. Betraege sind Netto-Kosten in Cent.
Feld Typ metric overview | letters_per_month | cost_per_mandant | delivery_times | failure_rates | spend_vs_caps Optional Welche Auswertung. overview (Standard) fasst die letzten drei Monate zusammen. months integer Optional Trendlaenge fuer letters_per_month und failure_rates, 1 bis 24, Standard 12. since string Optional Zeitraumbeginn fuer cost_per_mandant und delivery_times, zum Beispiel 2026-01-01. Standard: letzte 90 Tage. until string Optional Zeitraumende, Standard jetzt. topN integer Optional Anzahl Mandanten in cost_per_mandant, 1 bis 50, Standard 10. address_listScope: address:readListet die Adressen im Partner-Adressbuch. Optional nach Name, Stadt oder Mandant gefiltert.
Feld Typ searchQuery string Optional limit integer Optional address_validateScope: address:readPrüft eine Adresse anhand landesspezifischer Regeln und meldet harte Fehler als ADDRESS_INVALID. Nur eine Prüfung, das Adressbuch bleibt unverändert; zum Anlegen oder Ändern einer Adresse nimm address_upsert.
Feld Typ name string Pflicht company string Optional street string Pflicht houseNumber string Optional pobox string Optional zip string Optional city string Pflicht country string Optional ISO-3166-alpha-2, default DE. mandantennummer string Optional addressType recipient | sender | billing Optional isDefault boolean Optional Fehlercodes: ADDRESS_INVALID
template_apply_with_merge_fieldsScope: template:readFüllt die Platzhalter einer gespeicherten Vorlage mit deinen Werten und gibt Betreff und Inhalt oder ein vollständiges Anschreiben-Formular-Paket zurück. Bei einer Blockvorlage kommen statt content die fertigen blocks zurück. Briefkopf und Marke werden getrennt bei Vorschau oder Versand gewählt. Eine eigenständige Formularvorlage mit sendable:false und releaseBlocker:null braucht coverTemplateId aus einer direkt adressierbaren Briefvorlage; eine gespeicherte Verknüpfung bleibt nur der optionale Standard. Übergib danach templateId, templateVersionId, coverTemplateId, coverTemplateVersionId und die ursprünglichen templateMergeValues unverändert an order_send. Gib Paketabschnitte so weiter, wie sie zurückkommen. Fehlt eine Pflichtangabe, antwortet das Tool mit MERGE_FIELDS_MISSING und nennt die fehlenden oder ungültigen Felder.
Feld Typ templateId string (uuid) Pflicht Id der Vorlage aus template_list / template_get. templateVersionId string (uuid) Optional Exakte freigegebene oder ersetzte Vorlagenversion. Ohne Angabe wird die aktuell freigegebene Version verwendet. coverTemplateId string (uuid) Optional Optionales Anschreiben für eine eigenständige Formularvorlage. Ohne gespeicherte Verknüpfung ist es zum Anwenden erforderlich. coverTemplateVersionId string (uuid) Optional Optional: exakte freigegebene Version des gewählten Anschreibens. mergeValues Objekt Optional Zuordnung von Platzhalter-Namen zu Werten, z. B. { "provider": "Telekom" }. Der Typ des Merge-Feldes gilt: date erwartet ISO JJJJ-MM-TT, currency ganzzahlige Cent, number eine Zahl, rows eine Liste von Zeilenobjekten mit den Spaltenschluesseln der gebundenen Tabelle. language de | en Optional Sprache fuer die Formatierung von Betrag und Datum. Standard de. mandantennummer string Optional Optionaler Mandantenbezug (nur Kontext). Fehlercodes: NOT_FOUND
shipping_quoteScope: letter:readRegistered-mail availability depends on the destination and its current catalog, not a Germany-only rule. The codes einschreiben_einwurf and einschreiben_uebergabe are German products; Switzerland uses ch_einschreiben. For other destinations, use only methods returned in availableDeliveryTypes by a standard shipping_quote for that country, then quote the chosen code. A rejected country/method pair does not establish availability in other countries. A catalog snapshot with no registered method does not prove that the postal service never offers one. Tracked mail is not registered mail. Never substitute standard or tracked delivery when registered mail was requested without the user's agreement. A carrier-issued proof-of-posting PDF is not promised. Reply in the user's conversation language, regardless of recipient country, letter language, German tool titles or bilingual tool results. Translate shipping methods, letter formats, delivery estimates and explanations for the user. In English: Standardbrief = standard letter; Kompaktbrief = compact letter; Großbrief = large letter; Maxibrief = maxi letter; Einschreiben = registered mail; Einwurf-Einschreiben = registered mail with recorded mailbox delivery; Übergabe-Einschreiben = registered mail with signature on delivery; Einlieferungsbeleg = proof of posting. Use localized money and number formatting. Keep tool names, parameter names, deliveryType values and error codes unchanged in tool calls; show codes to users only when needed for troubleshooting. This presentation rule does not translate the letter's contents. Ermittelt den Preis, das Briefformat, die Versandart und die voraussichtliche Laufzeit für einen geplanten Brief, bevor er versendet wird. Das ist die Schätzung für den Fall, dass der Brief erst geplant ist: du gibst nur Seitenzahl, Land und Versandart an. Steht der Brief schon fest, versendest du ihn mit order_send (order_send mit dryRun:true liefert dann den genaueren Preis für genau diesen Brief). Der Preis gilt pro Brief und enthält bereits die Mengenstaffel des Partners, falls eine greift (Feld tierId). Für die Staffelpreise selbst nutze pricing_tiers.
Feld Typ pageCount integer Pflicht Seitenzahl fuer eine allgemeine Schaetzung. Mit letterId verwendet FrankKi die gespeicherte Seitenzahl und ignoriert diesen Wert. color boolean Pflicht Farbannahme fuer eine allgemeine Schaetzung. Mit letterId erkennt FrankKi die Farbe aus der gespeicherten Vorschau und ignoriert diesen Wert. deliveryType standard | einschreiben_einwurf | einschreiben_uebergabe | ch_b_post | ch_a_post | ch_einschreiben | at_eco | at_prio | intl_standard | intl_priority | intl_express | intl_tracked | intl_registered Pflicht Registered-mail availability depends on the destination and its current catalog, not a Germany-only rule. The codes einschreiben_einwurf and einschreiben_uebergabe are German products; Switzerland uses ch_einschreiben. For other destinations, use only methods returned in availableDeliveryTypes by a standard shipping_quote for that country, then quote the chosen code. A rejected country/method pair does not establish availability in other countries. A catalog snapshot with no registered method does not prove that the postal service never offers one. Tracked mail is not registered mail. Never substitute standard or tracked delivery when registered mail was requested without the user's agreement. A carrier-issued proof-of-posting PDF is not promised. express boolean Optional country string, max. 2 Zeichen Optional ISO 3166-1 alpha-2, Standard DE. letterId string (uuid) Optional Optional: die letterId eines bestehenden Entwurfs. Dann kommen Seitenzahl und Farbe aus der gespeicherten Vorschau; fuer den endgueltigen Preis inklusive Anhaengen nutze order_send mit dryRun:true. pricing_tiersScope: letter:readLiefert die Staffelpreise (Mengenrabatte) von FrankKi: ab welcher Monatsmenge welcher Beispielpreis pro Brief gilt. Nutze das, wenn jemand nach Mengenrabatt, Volumenpreis, Staffelpreis oder Großkundenpreis fragt. Die Beispielpreise gelten für einen einseitigen Standardbrief in Schwarzweiß innerhalb Deutschlands, der echte Preis pro Brief hängt zusätzlich von Seitenzahl, Farbe, Versandart und Zielland ab (dafür shipping_quote).
Keine Eingabefelder außer reasoning.
order_statusScope: order:readLiefert den aktuellen Status eines Auftrags samt chronologischer deutscher Sendungsverfolgung, der Sendungsnummer (nur bei Einschreiben), der voraussichtlichen Zustellung und ob sich der Brief noch stornieren lässt. Beim Status awaiting_partner_fix wartet der Brief auf eine Korrektur: rufe dann order_fix_resubmit auf. Solange cancellable true ist, kann order_cancel den Versand noch stoppen.
Feld Typ orderId string (uuid) Pflicht Fehlercodes: NOT_FOUND
order_einlieferungsbelegScope: order:readLiefert den Einlieferungsbeleg (Einlieferungsnachweis) zu einem versendeten Auftrag: eine 90 Tage gültige Download-URL für die Beleg-PDF, den Poststempel, den Versanddienstleister sowie den geprüften Nachweis aus dem GoBD-Archiv.
Feld Typ orderId string (uuid) Pflicht Fehlercodes: NOT_FOUND
approval_listScope: approval:readListet die Freigaben deines Kontos, neueste zuerst, mit einer zeitlich begrenzten PDF-Vorschau, den Kosten, dem Grund und den Fristen. Standardmäßig nur die offenen Freigaben. Über eine der zurückgegebenen approvalIds entscheidest du anschließend mit approval_decide.
Feld Typ status pending | approved | rejected | expired Optional Standard pending. since string (date-time) Optional Nur Freigaben, die seit diesem Zeitpunkt eingereicht wurden (ISO 8601). limit integer Optional Standard 20, maximal 100. offset integer Optional Versatz für die Seitennavigation. Standard 0. setup_fix_linkScope: profile:readGibt einen Punkt an den Menschen im Browser weiter: Guthaben aufladen, Einwilligung (AVV) unterschreiben oder das Absender-Profil vervollstaendigen. Liefert die passende Seite und eine Karte, die den Briefentwurf sichtbar stehen laesst und selbst merkt, wenn der Mensch zurueck ist. Bezahlt wird immer im Browser.
Feld Typ gap wallet | avv | senderProfile Pflicht Welcher Punkt uebergeben wird: wallet (Guthaben), avv (Einwilligung) oder senderProfile (Absender-Profil). wallet_topup_linkScope: wallet:readErstellt einen Stripe-Checkout-Link zum Aufladen deines Wallet-Guthabens. Die Kartendaten bleiben bei Stripe; das Guthaben wird nach Abschluss der Zahlung gutgeschrieben.
Feld Typ amountEuros number Pflicht Aufladebetrag in Euro, zwischen 10 und 500. requestNonce string, max. 200 Zeichen Optional Optionaler stabiler Wiederholungs-Schluessel. Bei einer Wiederholung denselben Wert senden, um denselben Checkout-Link zu erhalten statt eines zweiten. Fehlercodes: INSUFFICIENT_FUNDS
template_diff_checkScope: template:readVergleicht deinen finalen Brief mit der Vorlage und zeigt dir, wo du abgewichen bist. Bei einer Blockvorlage uebergibst du finalBlocks statt finalContent; verglichen werden die Texte in Lesereihenfolge. Kostenlos und rein lesend.
Feld Typ templateId string (uuid) Pflicht Id der Vorlage aus template_list / template_get. versionId string (uuid) Optional Optional: bestimmte Version, sonst die freigegebene. finalSubject string Pflicht Dein finaler Betreff. finalContent string Optional Dein finaler Brieftext. Bei einem Blockbrief stattdessen finalBlocks. finalBlocks Array<Objekt> Optional Deine finalen Bloecke, wenn der Brief strukturiert ist. Verglichen werden die Texte in Lesereihenfolge. mergeFields Objekt Optional Zuordnung der Platzhalter-Namen zu Werten, z. B. { "provider": "Telekom" }. Fehlercodes: NOT_FOUND
letter_design_listScope: letter_design:writeListet die gespeicherten Briefpapiere (Briefdesigns) des Partners samt vollstaendigem Design-JSON. Ein Design wird per Name oder ID beim Versand referenziert und traegt jede Post: Kuendigung, Rechnung, Mahnung, Angebot, Vertrag und Behoerdenpost.
Feld Typ includeArchived boolean Optional Auch archivierte (geloeschte) Designs einschliessen. Standard false. letter_design_previewScope: letter_design:writeRendert ein gespeichertes oder inline uebergebenes Briefdesign mit schemaVersion 1 oder 2 durch dieselbe Aufloesung und denselben Composer wie ein echter Versand. Nutzt echte Partner-Absenderdaten und einen erfundenen Empfaenger sowie Beispieltext. Liefert standardmaessig eine Inline-PNG-Seite; Seite 2 nur fuer continuationHeader. Mit sampleVariant empty siehst du das Briefpapier allein: Kopf und Fuss stehen echt, die Textflaeche bleibt frei, und genau dieses Bild zeigt auch das Dashboard. So siehst du vorab, wie Kuendigung, Rechnung, Mahnung, Angebot, Vertrag und Behoerdenpost auf diesem Briefpapier aussehen. Der Lauf bleibt kostenfrei und der Brief bleibt ein Entwurf.
Feld Typ designId string (uuid) Optional design unbekannt Optional reference Objekt Optional sampleSubject string, max. 200 Zeichen Optional sampleContent string, max. 4000 Zeichen Optional sampleVariant typical | empty Optional typical zeigt eine vollstaendige Beispielseite, an der du Lesbarkeit und Rhythmus beurteilst. empty zeigt das Briefpapier allein: Kopf und Fuss stehen echt, die Textflaeche bleibt frei. Ein eigener sampleContent hat Vorrang vor beidem. pages integer Optional Standard ist nur Seite 1. Seite 2 wird ausschliesslich bei continuationHeader geliefert. resolution thumb | full Optional Fehlercodes: DESIGN_NOT_FOUND, DESIGN_RENDER_FAILED, DESIGN_ZONE_VIOLATION
letter_design_list_presetsScope: letter_design:writeLiefert die vom Inhaber freigegebenen native-v2 Briefpapiere als sichere Ausgangspunkte fuer Kuendigung, Rechnung, Mahnung, Angebot, Vertrag und Behoerdenpost. Sie waechst mit jeder abgenommenen Vorlage. Die normale Liste bleibt reiner Text und damit guenstig; mit presetId wird genau eine echte Composer-Vorschau samt Inline-PNG erzeugt.
Feld Typ presetId string Optional Optional: genau eine Vorlage samt gerenderter Vorschau laden. Ohne presetId bleibt die Liste bildfrei und guenstig. pages integer Optional resolution thumb | full Optional brand_kit_getScope: profile:readLiest die gespeicherten Markenwerte fuer das nutzerseitige Ergebnis Briefkopf & Marke. Liefert Logo-Referenzen, Farben und Schrift fuer die weitere Gestaltung mit letter_design_preview und letter_design_save. Suche technisch nach brand_kit_get.
Keine Eingabefelder außer reasoning.
signature_listScope: profile:readListet die im Partnerprofil gespeicherten Unterschriften mit einer kurzlebigen Vorschau-URL (24 Stunden gültig).
Keine Eingabefelder außer reasoning.
letterhead_listScope: profile:readListet die im Partnerprofil gespeicherten Briefköpfe mit einer kurzlebigen Vorschau-URL (24 Stunden gültig).
Keine Eingabefelder außer reasoning.
address_search_companyScope: address:readSucht Firmen und Behörden im Verzeichnis und liefert die passende Versandadresse inklusive Behörden-Postfach.
Feld Typ query string Pflicht country string Optional letter_searchScope: letter:readDurchsucht die Briefe des Partners per Freitext über Betreff, Empfängername und Briefinhalt.
Feld Typ query string Pflicht since string (date-time) Optional Nur Briefe, die seit diesem Zeitpunkt geändert wurden (ISO 8601). limit integer Optional Standard 20, maximal 100. offset integer Optional Versatz für die Seitennavigation. Standard 0. archive_exportScope: archive:readPlant einen Archiv-Export (GoBD-CSV, DATEV, PDF-Bundle oder Mandanten-Allokation) für einen Zeitraum ein und liefert eine Job-ID zur Statusabfrage.
Feld Typ since string (date-time) Pflicht until string (date-time) Pflicht format gobd_csv | datev_export | pdf_bundle | mandant_allocation_pdf | mandant_allocation_csv Pflicht target string Optional mandantennummerFilter string Optional senderProfileFilter string (uuid) Optional notifyEmail string (email) Optional Fehlercodes: NOT_FOUND
archive_export_statusScope: archive:readLiefert den Status eines Archiv-Export-Jobs und bei Fertigstellung eine 90 Tage gültige Download-URL.
Feld Typ jobId string (uuid) Pflicht Fehlercodes: NOT_FOUND
letter_previewScope: order:sendBrief und Entwurf als Bild pruefen, Formularvorschau rendern: komponiert wie einen echten Versand und liefert Inline-PNGs, PDF-Link, Seitenzahl, Preis und designRender mit dem tatsaechlichen documentMode, den gezeichneten Brief-Elementen und bodyStartMm. Die Vorschau bleibt kostenfrei und der Brief bleibt liegen. Der Brief kommt ueber letterId oder inline mit content ODER blocks. Bei letterId ist die eingebettete Karte die Vorschau für den Menschen. Nach ihrer Anzeige reicht im Chat eine kurze Bestätigung; PDF-Link und Brieftext gehören in reine Textansichten. Ein ungespeichertes design kann direkt mitgegeben werden und gilt nur für diese eine Vorschau. WICHTIG FUER FORMULARE: Selbstauskunft, Fragebogen, Zertifikat und andere eigenstaendige Formulare immer zuerst mit design: { "schemaVersion": 1, "documentMode": "form" } pruefen; genau dann entfallen Empfaengerblock, Datum und Betreff und der Inhalt beginnt bei 27 mm. Kompaktes blocks-Beispiel: {"blocks":[{"type":"heading","text":"Rechnung"},{"type":"table","columns":[{"key":"text","label":"Artikel","width":"grow"},{"key":"sum","label":"Summe","align":"right","format":"eur"}],"rows":[{"text":"Beratung","sum":32000}]},{"type":"totals","lines":[{"label":"Gesamt","amountCents":32000,"emphasis":true}]}]} Volle Referenz: frankki://blocks-guide. Beim Nachbau ist letter_preview PFLICHT: PNG Seite fuer Seite mit dem Original vergleichen. Weichen Seitenzahl oder wesentliche Geometrie ab, korrigiere blocks oder design und rufe letter_preview erneut auf; gespeichert wird erst, wenn beides passt. Wenn das Layout sitzt mit template_save als Entwurf sichern und danach template_release nutzen.
Feld Typ letterId string (uuid) Optional Einen gespeicherten Entwurf in der Vorschau anzeigen. Alternativ den Brief inline angeben. subject string, max. 200 Zeichen Optional Betreff. Ohne letterId erforderlich. content string, max. 30000 Zeichen Optional Brieftext als Fliesstext. Entweder content ODER blocks, nie beides. blocks Array<unbekannt> (min 1, max 200) Optional Strukturierter Briefinhalt als typisierte Bloecke (Alternative zu content, nie beides). Limits: 200 Bloecke, 100 Zeilen/Tabelle, 20 Spalten, 2000 Zeichen/Zelle, 10 Bilder, 262144 Bytes. styleDefs Objekt Optional Benannte Stile fuer das ganze Dokument (max. 24). Bloecke referenzieren sie ueber style. language de | en Optional designId string (uuid) Optional Ein gespeichertes Briefdesign fuer diese Vorschau verwenden. design Objekt Optional Ungespeichertes Briefdesign nur fuer diese Vorschau. Hat Vorrang vor designId und erzeugt keinen Eintrag im Konto. Fuer eigenstaendige Formulare documentMode: "form" setzen. reference Objekt Optional Werte fuer diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie fuellen Infoblock und Barcode in der Vorschau. senderProfileId string (uuid) Optional pages integer Optional Wie viele Seiten als Bild zurueckkommen. Standard 3, Maximum 8. Der PDF-Link enthaelt immer alle Seiten. resolution thumb | full Optional thumb (96 dpi, Standard, schnell und klein) oder full (150 dpi, zum Pruefen von Details). template_previewScope: template:readRendert eine GESPEICHERTE Vorlage mit Beispielwerten und liefert Inline-PNGs, PDF-Link und designRender. designId oder ein ungespeichertes design bestimmen das Briefpapier; fuer eigenstaendige Formulare documentMode: "form" setzen. Die Vorschau bleibt kostenfrei und rein zum Ansehen. Fuer ein blocks-Layout, das erst im Entstehen ist, nimm letter_preview. Zum Persistieren einer fertigen Version template_save aufrufen. Falls das Tool clientseitig entfernt wurde, in der Tool-Suche exakt nach dem technischen Namen template_save suchen.
Feld Typ templateId string (uuid) Pflicht Id der Vorlage aus template_list / template_get. versionId string (uuid) Optional Exakte Vorlagenversion, die geprueft werden soll. Ohne Angabe gilt die freigegebene Version, danach der neueste Entwurf. designId string (uuid) Optional Gespeichertes Briefdesign fuer diese Vorlagenvorschau. designVersionId string (uuid) Optional Exakte unveränderliche Briefkopf-Version für diese Vorschau. design Objekt Optional Ungespeichertes Briefdesign nur fuer diese Vorschau. Fuer Formulare documentMode: "form" setzen. pages integer Optional Wie viele Seiten als Bild zurueckkommen. Standard 1, Maximum 3. Fehlercodes: NOT_FOUND
document_listScope: letter:readListet deine erzeugten Dokumente (Rechnung, Zahlungserinnerung, Mahnung, Gutschrift), neueste zuerst, gefiltert nach Art, Mandant, Empfänger oder Bezugsbeleg. Nächster Schritt: document_get liefert die vollständigen Belegdaten, document_create legt mit references einen Folgebeleg dazu an.
Feld Typ documentType rechnung | zahlungserinnerung | mahnung | gutschrift Optional mandantennummer string Optional recipientQuery string Optional Freitext über Name, Firma oder Ort des Empfängers. referencesDocumentId string (uuid) Optional Nur Dokumente, die sich auf dieses FrankKi-Dokument beziehen (z. B. alle Mahnungen zu einer Rechnung). referencesNumber string Optional since string (date-time) Optional limit integer Optional Standard 20, maximal 100. offset integer Optional Versatz für die Seitennavigation. Standard 0. document_getScope: letter:readLiefert ein Dokument mit allen Belegdaten (Positionen, Summen, USt-Sätze, Bezug) sowie letterId und orderId des Briefs, in dem es steckt. Das Feld referencePrefill enthält den fertigen references-Block für einen Folgebeleg: übernimm ihn unverändert als document.references in ein document_create für Mahnung, Zahlungserinnerung oder Gutschrift. Unter exports liefert FrankKi für versendete Rechnungen und Gutschriften signierte Download-Links: zugferdPdfUrl ist ein PDF/A-3 mit eingebetteter EN-16931-XML (ZUGFeRD), xrechnungXmlUrl die reine XRechnung-XML. Beide sind zum Herunterladen und Archivieren gedacht; die Übermittlung an ein Portal bleibt bei dir. Fehlt ein Export, nennt das Feld den Grund: DOCUMENT_EXPORT_NOT_READY heisst später erneut versuchen (Versand oder Freischaltung stehen noch aus), DOCUMENT_EXPORT_NOT_SUPPORTED heisst dauerhaft (der Export gilt für Rechnungen und Gutschriften; bei Mahnung und Zahlungserinnerung nutze die Rechnung, auf die sie sich beziehen). Nächster Schritt: order_status verfolgt den Versand, document_create legt mit references eine Mahnung oder Gutschrift dazu an.
Feld Typ documentId string (uuid) Pflicht
Aktion
sender_profile_upsertScope: sender_profile:writekein dryRunLegt ein Absenderprofil an oder bearbeitet es: Rechtsform, Pflichtangaben, optional Bankverbindung, Haftungsausschluss und Standard-Briefpapier. Ein unvollstaendiges Profil wird gespeichert und meldet die fehlenden Felder zurueck, sodass du es schrittweise ergaenzen kannst. Versenden ist mit vollstaendigen Pflichtangaben moeglich.
Feld Typ id string Optional ID eines bestehenden Profils zum Bearbeiten. Weglassen legt ein neues an. rechtsform string Pflicht Rechtsform des Absenders, zum Beispiel gmbh, ug, gbr, verein, freiberufler. Sie bestimmt die verlangten Pflichtangaben. pflichtangaben Objekt Pflicht Pflichtangaben als Objekt, zum Beispiel firmenname, strasse, plz, ort, land, registergericht, ustIdNr. sender_profile_validate nennt die je Rechtsform verlangten Felder. bankverbindung Objekt Optional Optionale Bankverbindung, unabhaengig von der Vollstaendigkeit. disclaimer string Optional Optionaler Haftungsausschluss oder Fusszeilentext, unabhaengig von der Vollstaendigkeit. displayName string Optional Optionaler Anzeigename in Listen. isDefault boolean Optional true macht dieses Profil zum Standardabsender; jedes andere verliert die Markierung. Das erste angelegte Profil wird automatisch Standard. defaultDesignId stringnull Optional Briefpapier fuer Briefe, die selbst keines nennen. Weglassen behaelt den Wert, null loescht ihn. address_upsertScope: address:writekein dryRunLegt eine Adresse im Partner-Adressbuch an oder aktualisiert sie. Validiert die Adresse anhand landesspezifischer Regeln.
Feld Typ addressId string (uuid) Optional name string Pflicht company string Optional street string Pflicht houseNumber string Optional pobox string Optional zip string Optional city string Pflicht country string Optional ISO-3166-alpha-2, default DE. mandantennummer string Optional addressType recipient | sender | billing Optional isDefault boolean Optional Fehlercodes: ADDRESS_INVALID
letter_create_draftScope: order:sendkein dryRunLegt einen Briefentwurf an: erstellt eine Vorschau-PDF im hinterlegten Briefdesign (nur der Brieftext), speichert den Entwurf und liefert eine Seitenzahl, einen Vorschau-Link (24 Stunden gültig) und eine unverbindliche Kostenvorschau. Der Entwurf bleibt kostenfrei liegen, bis du ihn versendest. Der Brieftext ist entweder content (Fliesstext) ODER blocks (strukturiert: Tabellen, Ueberschriften, Summenzeilen), genau eines von beiden. Kompaktes blocks-Beispiel: {"blocks":[{"type":"heading","text":"Rechnung"},{"type":"table","columns":[{"key":"text","label":"Artikel","width":"grow"},{"key":"sum","label":"Summe","align":"right","format":"eur"}],"rows":[{"text":"Beratung","sum":32000}]},{"type":"totals","lines":[{"label":"Gesamt","amountCents":32000,"emphasis":true}]}]} Volle Referenz inkl. styleDefs und Limits: MCP-Ressource frankki://blocks-guide. Die ersten Seiten kommen als Bild zurück: sieh sie dir an, bevor du versendest, und prüfe Betreff, Anschrift im Adressfenster, Absender, Datum und Umbrüche. Die eingebettete Karte ist die Vorschau für den Menschen. Nach ihrer Anzeige reicht im Chat eine kurze Bestätigung; PDF-Link und Brieftext gehören in reine Textansichten. Gemeldete Auffälligkeiten stehen in warnings. Findest du einen Fehler, korrigiere ihn und lege den Entwurf neu an, solange er noch Entwurf ist: gedruckt geht der Brief endgültig raus. Nächster Schritt mit der zurückgegebenen letterId: letter_preview zeigt den Entwurf als Bild zum Nachbessern, order_send versendet ihn, letter_schedule versendet ihn zu einem späteren Zeitpunkt.
Feld Typ subject string, max. 200 Zeichen Pflicht content string, max. 30000 Zeichen Optional Brieftext als Fliesstext. Entweder content ODER blocks, nie beides. blocks Array<unbekannt> (min 1, max 200) Optional Strukturierter Briefinhalt als typisierte Bloecke (Alternative zu content, nie beides). Limits: 200 Bloecke, 100 Zeilen/Tabelle, 20 Spalten, 2000 Zeichen/Zelle, 10 Bilder, 262144 Bytes. styleDefs Objekt Optional Benannte Stile fuer das ganze Dokument (max. 24). Bloecke referenzieren sie ueber style. language de | en Optional Standard de. senderAddressId string (uuid) Optional senderProfileId string (uuid) Optional Absenderprofil, mit dem spaeter versendet wird. Fuer die Vorschau zaehlt daraus nur das Standard-Briefdesign. recipientAddressInline Objekt Optional presetName string Optional includeSignature boolean Optional Hinterlegte Unterschrift unter den Brieftext setzen. Standard aus, wie beim Versand. signatureId string (uuid) Optional Eine bestimmte gespeicherte Unterschrift verwenden statt der zuerst hinterlegten. clientLetterId string Optional Idempotenzschluessel. Ein erneuter Aufruf mit demselben Wert UND derselben Nutzlast liefert denselben Entwurf, statt einen zweiten anzulegen. Fuer einen anderen Brief brauchst du einen neuen Schluessel: derselbe Schluessel mit anderem Inhalt wird mit IDEMPOTENCY_CONFLICT abgelehnt, damit du keinen Brief fuer angelegt haeltst, den es nicht gibt. designId string (uuid) Optional Ein gespeichertes Briefdesign fuer diesen Brief verwenden. Es wird bereits in der Vorschau-PDF gerendert und am Entwurf gespeichert, sodass ein spaeterer Versand ueber die letterId es uebernimmt (ausser der Versand nennt selbst ein Design). Ohne Angabe gilt das Standard-Design des Absenderprofils, in der Vorschau wie beim Versand. reference Objekt Optional Werte fuer diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie fuellen den Infoblock und den Barcode. attachment_upload_pdfScope: order:sendkein dryRunLädt ein PDF als Anhang zu einem Partner-Brief hoch. Prüft vor dem Speichern die Dateigröße (max. 50 MB) und die zusammengeführte Seitenzahl (max. 30 Seiten inkl. Brief und übriger Anhänge).
Feld Typ letterId string (uuid) Pflicht pdfUrl string Optional Öffentliche URL des PDF (Alternative zu pdfBase64). pdfBase64 string Optional PDF als Base64 (Alternative zu pdfUrl). title string Optional position integer Optional attachment_upload_imageScope: order:sendkein dryRunLädt ein Bild (PNG/JPEG) als Anhang zu einem Partner-Brief hoch. Das Bild wird serverseitig auf eine A4-PDF-Seite skaliert (optional gedreht) und wie ein PDF gespeichert. Prüft vor dem Speichern die zusammengeführte Seitenzahl (max. 30 Seiten). Die EXIF-Orientierung wird automatisch in die Pixel eingerechnet, ein Handyfoto steht also von selbst aufrecht. rotation wirkt zusätzlich dazu: lass es auf 0, außer du willst das Bild bewusst weiterdrehen.
Feld Typ letterId string (uuid) Pflicht imageUrl string Optional Öffentliche URL des Bildes (Alternative zu imageBase64). imageBase64 string Optional Bild als Base64 (Alternative zu imageUrl). rotation 0 | 90 | 180 | 270 Optional Zusätzliche Drehung in Grad, im Uhrzeigersinn. Die EXIF-Orientierung des Bildes wird bereits automatisch in die Pixel eingerechnet, das Bild steht also von sich aus richtig. Dieser Wert dreht es danach ein zweites Mal. Für ein Handyfoto ist deshalb 0 richtig. title string Optional position integer Optional order_sendScope: order:senddryRun verfügbarVersendet einen Brief physisch per Post: prüft die Pflichtangaben des Absenders, die Empfängeradresse, den AVV und die Limits, erstellt die finale PDF und berechnet den Preis. Sieh dir den Brief vorher als Bild an: letter_create_draft und letter_preview liefern die gerenderten Seiten, und Satzprobleme wie ein zu langer Betreff zeigen sich erst dort. Ein Brief kommt entweder ueber letterId (ein bereits erstellter Entwurf) oder inline: dann ist der Text entweder content (Fliesstext) ODER blocks (strukturiert: Tabellen, Ueberschriften, Summenzeilen), genau eines von beiden. Kompaktes blocks-Beispiel: {"blocks":[{"type":"heading","text":"Rechnung"},{"type":"table","columns":[{"key":"text","label":"Artikel","width":"grow"},{"key":"sum","label":"Summe","align":"right","format":"eur"}],"rows":[{"text":"Beratung","sum":32000}]},{"type":"totals","lines":[{"label":"Gesamt","amountCents":32000,"emphasis":true}]}]} Volle Referenz inkl. styleDefs und Limits: MCP-Ressource frankki://blocks-guide. Eine echte OAuth-Verbindung landet immer in der Freigabewarteschlange. Die eingebettete Karte ist Vorschau und Freigabe. Nach ihrer Anzeige reicht im Chat eine kurze Bestätigung; PDF-Link und Brieftext gehören in reine Textansichten. Eine OAuth-Verbindung mit der ausdrücklich erteilten Berechtigung approval:self_approve darf über die Karte entscheiden. Danach fragst du den Fortschritt mit order_status ab. order_cancel storniert einen Brief vor dem Druck. order_fix_resubmit korrigiert einen vom Dienstleister abgelehnten Brief; auch dafür ist die ausdrückliche Selbstfreigabe nötig. Mit dryRun wird der Versand nur geprobt: kostenfrei, und der Brief bleibt liegen. dryRun ist die vollständige Probe genau dieses Briefes durch alle sechs Gates und liefert damit den genauesten Preis. Ein dryRun bleibt eine reine Probe: die zurückgegebene letterId ist eine Probe-Kennung und liefert in letter_get oder letter_preview NOT_FOUND. Für einen echten Entwurf nutze letter_create_draft. shipping_quote beantwortet dagegen die Frage, was ein Brief kosten würde, solange der Inhalt erst geplant ist; letter_preview zeigt einen blocks-Entwurf vorab als Bild, bevor er hier versendet wird.
Feld Typ letterId string (uuid) Optional Bestehender Entwurf. Alternativ den Brief inline angeben. subject string, max. 200 Zeichen Optional content string, max. 30000 Zeichen Optional Brieftext als Fliesstext. Entweder content ODER blocks, nie beides. blocks Array<unbekannt> (min 1, max 200) Optional Strukturierter Briefinhalt als typisierte Bloecke (Alternative zu content, nie beides). Limits: 200 Bloecke, 100 Zeilen/Tabelle, 20 Spalten, 2000 Zeichen/Zelle, 10 Bilder, 262144 Bytes. styleDefs Objekt Optional Benannte Stile fuer das ganze Dokument (max. 24). Bloecke referenzieren sie ueber style. recipientName string Optional recipientCompany string Optional recipientStreet string Optional recipientHouseNumber string Optional recipientZip string Optional recipientCity string Optional recipientCountry string Optional ISO-3166-alpha-2, Standard DE. priceVersion string Optional Optional: die priceVersion aus einem vorherigen shipping_quote. Weicht der Preis beim Versand davon ab, wird mit PRICE_CHANGED abgebrochen, bevor etwas berechnet wird. quotedUnitPriceCents integer Optional Optional: der Stueckpreis in Cent aus einem vorherigen shipping_quote (unitPriceCents). Ist er gesetzt, entscheidet er den PRICE_CHANGED-Abgleich und liefert den alten Preis im Fehler mit. deliveryType standard | einschreiben_einwurf | einschreiben_uebergabe | ch_b_post | ch_a_post | ch_einschreiben | at_eco | at_prio | intl_standard | intl_priority | intl_express | intl_tracked | intl_registered Optional Standard standard. express boolean Optional color boolean Optional Ohne Angabe wird die Farbe automatisch erkannt. includeSignature boolean Optional signatureId string (uuid) Optional letterheadId string (uuid) Optional Bestimmter Briefkopf fuer diesen Versand. Ohne Angabe wird der Standard-Briefkopf verwendet. letterheadEnabled boolean Optional Auf false setzen, um den Briefkopf fuer diesen einen Versand zu unterdruecken. senderAddressId string (uuid) Optional senderProfileId string (uuid) Optional mandantennummer string Optional clientOrderId string, max. 200 Zeichen Optional Idempotenzschluessel: eine beliebige Zeichenkette (1-200 Zeichen, z. B. 'mahnung-kunde42-2026-07-20'; kein UUID-Format noetig). Ein erneuter Aufruf mit demselben Wert liefert dieselbe Bestellung, statt ein zweites Mal zu versenden. Der Namensraum 'approval:' ist reserviert. scheduledAt string (date-time) Optional approvalMode auto | draft | review Optional Wie der Versand freigegeben wird. 'draft' und 'review' stellen ihn in die Freigabe-Warteschlange, statt sofort zu versenden. Wichtig: auch diese beiden reservieren den Betrag beim Einreichen im Wallet, damit ein freigegebener Brief spaeter nicht am Guthaben scheitert. Ohne Deckung kommt INSUFFICIENT_FUNDS zurueck und es wird nichts angelegt. Willst du nur einen Entwurf ohne Wallet-Deckung, nutze letter_create_draft. maxCostEuros number Optional Maximalbetrag in Euro. Liegt der Preis darueber, wird abgebrochen. presetName string Optional auditTag string Optional templateId string (uuid) Optional templateVersionId string (uuid) Optional Exakte freigegebene Vorlagenversion. Nur gemeinsam mit templateId; der Server rendert sie mit templateMergeValues neu und ignoriert mitgesendeten Betreff/Inhalt. templateMergeValues Objekt Optional Merge-Werte fuer die exakte Vorlagenversion. coverTemplateId string (uuid) Optional Anschreiben für eine eigenständige Formularvorlage. coverTemplateVersionId string (uuid) Optional Exakte freigegebene Version des Anschreibens. designId string (uuid) Optional Ein gespeichertes Briefdesign fuer diesen Versand verwenden. Ohne Angabe gilt in dieser Reihenfolge: das am Entwurf gespeicherte Design (beim Versand ueber letterId), sonst das Standard-Design des Absenderprofils, sonst keins. design Objekt Optional Exakter Briefdesign-Snapshot aus template_apply_with_merge_fields.composition.design. Hat Vorrang vor designId und verhindert, dass eine spaetere Designaenderung die freigegebene Vorlagenkomposition veraendert. reference Objekt Optional Werte fuer diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie fuellen den Infoblock und den Barcode. dryRun boolean Optional Idempotenzschlüssel: clientOrderId (siehe Konventionen).
Fehlercodes: SENDER_PFLICHTANGABEN_INCOMPLETE, ADDRESS_INVALID, AVV_REQUIRED, DAILY_CAP_EXCEEDED, MANDANT_CAP_EXCEEDED, COST_OVER_LIMIT, CONTENT_REJECTED, COUNTRY_NOT_SUPPORTED, LEGAL_PROOF_UNAVAILABLE_FOR_COUNTRY, PRICE_UNAVAILABLE, PDF_LETTER_UNSUPPORTED, SANDBOX_DISABLED, IDEMPOTENCY_CONFLICT, DESIGN_NOT_FOUND, DESIGN_RENDER_FAILED, DESIGN_ZONE_VIOLATION
approval_submitScope: order:senddryRun verfügbarReicht einen Brief zur menschlichen Freigabe ein: prüft Pflichtangaben, Empfänger, AVV und Limits, erstellt die finale PDF, berechnet den Preis, reserviert die Kosten und legt eine Freigabe in der Warteschlange an. Die eingebettete Karte ist Vorschau und Freigabe. Nach ihrer Anzeige reicht im Chat eine kurze Bestätigung; PDF-Link und Brieftext gehören in reine Textansichten. Mit approval:self_approve zeigt die Karte Freigeben und Ablehnen. In allen anderen Fällen führt sie ins angemeldete Portal. Mit dryRun bleiben Guthaben und Warteschlange unberührt.
Feld Typ letterId string (uuid) Optional Bestehender Entwurf. Alternativ den Brief inline angeben. subject string, max. 200 Zeichen Optional content string, max. 30000 Zeichen Optional recipientName string Optional recipientCompany string Optional recipientStreet string Optional recipientHouseNumber string Optional recipientZip string Optional recipientCity string Optional recipientCountry string Optional ISO-3166-alpha-2, Standard DE. deliveryType standard | einschreiben_einwurf | einschreiben_uebergabe | ch_b_post | ch_a_post | ch_einschreiben | at_eco | at_prio | intl_standard | intl_priority | intl_express | intl_tracked | intl_registered Optional Standard standard. express boolean Optional color boolean Optional Ohne Angabe wird die Farbe automatisch erkannt. includeSignature boolean Optional signatureId string (uuid) Optional senderAddressId string (uuid) Optional senderProfileId string (uuid) Optional mandantennummer string Optional clientOrderId string Optional Idempotenzschluessel. Ein erneuter Aufruf mit demselben Wert liefert dieselbe Freigabe, statt ein zweites Mal einzureichen. Der Praefix 'approval:' ist reserviert. scheduledAt string (date-time) Optional approvalMode auto | draft | review Optional maxCostEuros number Optional Maximalbetrag in Euro. Liegt der Preis darueber, wird abgebrochen. presetName string Optional auditTag string Optional templateId string (uuid) Optional reason string, max. 500 Zeichen Optional Kurzer Grund fuer die Freigabe, den die pruefende Person auf der Karte liest. requesterContext string, max. 500 Zeichen Optional Zusatzkontext zur einreichenden Person oder zum Anlass. dryRun boolean Optional Idempotenzschlüssel: clientOrderId (siehe Konventionen).
Fehlercodes: SENDER_PFLICHTANGABEN_INCOMPLETE, ADDRESS_INVALID, AVV_REQUIRED, DAILY_CAP_EXCEEDED, MANDANT_CAP_EXCEEDED, COST_OVER_LIMIT, CONTENT_REJECTED, IDEMPOTENCY_CONFLICT
approval_decideScope: approval:decidekein dryRunGibt eine wartende Freigabe frei oder lehnt sie ab. 'approve' ist nur erlaubt, wenn dieser OAuth-Verbindung die zusätzliche Berechtigung approval:self_approve ausdrücklich erteilt wurde. Fehlt diese Berechtigung, öffnet der Mensch den zurückgegebenen approvalUrl und entscheidet im angemeldeten Portal. approval:decide bleibt ebenfalls erforderlich. Bei Freigabe durch den Agenten geht der Brief nach 10 Minuten raus und kann bis dahin mit order_cancel gestoppt werden.
Feld Typ approvalId string (uuid) Pflicht decision approve | reject Pflicht comment string, max. 1000 Zeichen Optional clientOrderId string Optional Idempotenzschlüssel: clientOrderId (siehe Konventionen).
Fehlercodes: APPROVAL_ALREADY_DECIDED, NOT_FOUND
order_cancelScope: order:sendkein dryRunStorniert einen Brief und schreibt den Betrag deinem Wallet gut (geschlossener Kreislauf, Gutschrift ins Wallet statt auf die Karte). Mit orderId wird eine bereits erstellte Bestellung im Stornofenster storniert; ist der Brief bereits im Druck, wird sauber abgelehnt. Mit approvalId wird eine per Chat freigegebene Sendung im 10-Minuten-Stornofenster gestoppt, bevor sie ueberhaupt versendet wird (der Mensch sagt 'stopp').
Feld Typ orderId string (uuid) Optional Die zu stornierende Bestellung. approvalId string (uuid) Optional Statt orderId: eine per Chat freigegebene Sendung im 10-Minuten-Stornofenster stoppen, bevor sie versendet wird (der Mensch sagt 'stopp'). reason string, max. 500 Zeichen Optional Optionaler Stornogrund. Fehlercodes: NOT_FOUND
template_saveScope: template:writekein dryRunVorlage speichern, Vorlagenversion speichern, Vorlagenentwurf anlegen, Template sichern: Verfasst eine Vorlage als ENTWURF. Setze documentKind auf letter oder form. Briefkopf und Marke bleiben eine externe Schicht und werden erst bei Vorschau oder Versand aufgeloest und bleiben ausserhalb der Vorlage. designId bleibt nur als veralteter Hinweis zur Ableitung der Dokumentart kompatibel; explizites documentKind gewinnt. Ein Formular darf eigenstaendig gespeichert werden. coverTemplateId kann eine Anschreibenversion fuer ein Paket pinnen. Laesst du templateId weg, entsteht eine neue Vorlage; mit templateId eine neue Entwurfsversion. Der Entwurf ist erst nach der Freigabe nutzbar; die Antwort enthaelt den Prueflink. Falls das Tool fehlt, suche exakt nach dem technischen Namen template_save. Der Vorlageninhalt ist entweder contentTemplate (Fliesstext) ODER blocksTemplate (strukturiert: Tabellen, Ueberschriften, Summenzeilen), genau eines von beiden. Merge-Felder sind typisiert (text, date, number, currency, rows); ein Tabellenblock bindet eine rows-Liste ueber rowsFrom. Kopiere am schnellsten eine Standardvorlage mit template_get und passe sie an. Vor dem Speichern: mit letter_preview rendern und Seite fuer Seite vergleichen. Speichere erst, wenn Seitenzahl und wesentliche Geometrie beim Nachbau zum Original passen. Eigenstaendige Formulare zuerst mit einem design im documentMode "form" pruefen.
Feld Typ templateId string (uuid) Optional Bestehende Vorlage: es entsteht eine NEUE Entwurfsversion. Ohne Angabe wird eine neue Vorlage angelegt. name string Pflicht Name der Vorlage. kategorie stringnull Optional Fachliche Kategorie, z.B. kuendigung. subjectTemplate string Pflicht Betreffvorlage, darf {{platzhalter}} enthalten. contentTemplate string Optional Inhaltsvorlage als Fliesstext, darf {{platzhalter}} enthalten. Entweder contentTemplate ODER blocksTemplate. blocksTemplate Array<unbekannt> (min 1, max 200) Optional Strukturierte Inhaltsvorlage (Tabellen, Ueberschriften, Summenzeilen). Textfelder duerfen {{platzhalter}} enthalten; ein Tabellenblock kann mit rowsFrom: "<schluessel>" ein Merge-Feld vom Typ rows binden und bekommt dessen Zeilen beim Anwenden. Entweder contentTemplate ODER blocksTemplate. Volle Referenz: MCP-Ressource frankki://blocks-guide. styleDefs Objekt Optional Benannte Stile der Blockvorlage. Nur zusammen mit blocksTemplate. mergeFields Array<Objekt> (max 100) Optional Die Platzhalter der Vorlage. approvalModeRecommended auto | review | draft | Optional Empfohlener Freigabemodus fuer Briefe aus dieser Vorlage. documentKind letter | form Optional Unveränderliche Dokumentart der Vorlagenversion. letter ist direkt adressierbar, form benötigt ein Anschreiben. designId string (uuid) Optional Veralteter Autor-Hinweis zur Ableitung von documentKind. Das Design wird nicht in der Vorlage gespeichert. Explizites documentKind gewinnt. clearDesign boolean Optional Veralteter kompatibler Autor-Hinweis. Es gibt keine Design-Bindung an neuen Vorlagenversionen. coverTemplateId string (uuid) Optional Deckvorlage fuer ein Formular ohne Empfaengerblock. Beim Speichern wird exakt ihre aktuelle freigegebene Version gepinnt. clearCoverTemplate boolean Optional Entfernt die geerbte Deckvorlagen-Bindung. Ohne coverTemplateId und ohne clearCoverTemplate erbt eine neue Version die bisherige Bindung. Fehlercodes: NOT_FOUND, TEMPLATE_SLUG_CONFLICT
template_releaseScope: template:writekein dryRunGibt eine Entwurfsversion frei, sodass sie versendet werden kann. Das ist der letzte Schritt der Gestaltungskette (template_get, anpassen, letter_preview, template_save, template_preview, template_release). WICHTIG: template_preview zeigt dem Menschen eine Freigabekarte mit einem Freigeben-Knopf. Ist diese Karte offen, gehoert die Freigabe dem Menschen. Rufe template_release dann nur auf, wenn die Person dich ausdruecklich darum bittet, und sage in jedem Fall klar dazu, dass du selbst freigegeben hast. Das geht ueber MCP NUR, wenn dein Konto genau einen aktiven Nutzer hat. Bei mehreren Nutzern gibt ein Mensch im Dashboard frei (Vier-Augen-Prinzip) und die Antwort enthaelt den Link dorthin. Danach: template_apply_with_merge_fields fuellt die Vorlage mit Werten, letter_create_draft oder order_send verschickt das Ergebnis.
Feld Typ templateId string (uuid) Pflicht versionId string (uuid) Pflicht Die freizugebende Entwurfsversion. Fehlercodes: NOT_FOUND, TEMPLATE_VERSION_NOT_DRAFT, TEMPLATE_FOUR_EYES_REQUIRED
template_archiveScope: template:writekein dryRunArchiviert eine Vorlage. Sie verschwindet aus den Listen und aus dem Versand, bleibt aber erhalten. Der Inhalt bleibt vollstaendig erhalten, und ein erneuter Aufruf ist unschaedlich.
Feld Typ templateId string (uuid) Pflicht Fehlercodes: NOT_FOUND
template_draft_discardScope: template:writekein dryRunVerwirft eine Entwurfsversion, solange sie noch auf ihre Freigabe wartet. Freigegebene und ersetzte Versionen bleiben unantastbar und vollstaendig erhalten. Ein erneuter Aufruf ist unschaedlich.
Feld Typ templateId string (uuid) Optional Optional. Bindet die Version zusaetzlich an diese Vorlage. versionId string (uuid) Pflicht Die zu verwerfende Entwurfsversion. Fehlercodes: NOT_FOUND, TEMPLATE_VERSION_IMMUTABLE
preset_saveScope: preset:writekein dryRunSpeichert eine benannte Voreinstellung (Konfigurations-Bundle) im Partnerprofil. Der Name ist pro Partner eindeutig. Limits in der Voreinstellung werden unverändert gespeichert und dienen als Notiz. Durchgesetzt werden ausschließlich die im Web gesetzten Konto- und Sub-Wallet-Limits.
Feld Typ name string Pflicht Eindeutiger Name der Voreinstellung (pro Partner). preset Objekt Pflicht Das Konfigurations-Bundle (Absender/Unterschrift/Briefkopf, Versand, Kennzeichnung, Freigabe, Planung, Limits, auditTagPrefix). signature_uploadScope: signature:writekein dryRunLädt eine Unterschrift als PNG hoch und speichert sie im Partnerprofil. Die Unterschrift wird beim Versand unterhalb deines Brieftexts eingefügt. Nur PNG wird unterstützt.
Feld Typ pngBase64 string Pflicht Die Unterschrift als PNG (Base64). widthMm number Optional Gewünschte Breite in mm (optional). displayName string Optional Anzeigename der Unterschrift (optional). letterhead_uploadScope: letterhead:writekein dryRunLädt einen Briefkopf als PNG oder PDF hoch und speichert ihn im Partnerprofil. Quelle ist entweder fileUrl (bevorzugt) oder fileBase64, genau eine von beiden. PNG wird auf die Seite gedruckt; ein PDF-Briefkopf wird vorerst nur abgelegt, gedruckt wird bisher nur PNG (rendered=false). Beim Nachbau eines vorhandenen Briefs: Logo und Titelblock aus dem Kopf der Seite gehören hierher (dann letter_design_save); der Brieftext bleibt den blocks vorbehalten.
Feld Typ fileBase64 string Optional Der Briefkopf als PNG oder PDF (Base64), Alternative zu fileUrl. fileUrl string Optional Öffentliche http(s)-URL des Briefkopfs (PNG oder PDF), Alternative zu fileBase64. Bevorzuge diese Variante: Base64 kostet unnötig Kontext und verleitet zu starker Farbreduktion, die den gedruckten Briefkopf verschlechtert. Maximal 20 MB. widthMm number Optional Breite in mm (optional). heightMm number Optional Höhe in mm (optional). placement header | footer | full Optional Platzierung auf der Seite. displayName string Optional Anzeigename des Briefkopfs (optional). letter_design_saveScope: letter_design:writekein dryRunSpeichert ein wiederverwendbares Briefpapier (Briefdesign) mit schemaVersion 1 oder 2 im Partnerprofil und gibt designId sowie den Hash der gespeicherten Quelldaten zurueck. Dasselbe Briefpapier traegt danach jede Post: Kuendigung, Rechnung, Mahnung, Angebot, Vertrag und Behoerdenpost. Falls das Tool clientseitig entfernt wurde, suche exakt nach letter_design_save. Das Design wird vor dem Speichern vollstaendig validiert und gegen die Zustellzonen geprueft.
Feld Typ name string, max. 120 Zeichen Pflicht Eindeutiger Name des Briefdesigns. design unbekannt Pflicht designId string (uuid) Optional brandingOwnershipConfirmed boolean Optional Bei einer Neuanlage oder geaenderten Branding-Asset-Referenz zwingend true. Unveraenderte Folgespeicherungen brauchen keine erneute Bestaetigung. Fehlercodes: DESIGN_ZONE_VIOLATION
letter_design_deleteScope: letter_design:writekein dryRunArchiviert (loescht) ein gespeichertes Briefpapier (Briefdesign). Neue Sendungen laufen danach ueber die verbleibenden Briefpapiere, egal ob Kuendigung, Rechnung, Mahnung, Angebot, Vertrag oder Behoerdenpost; bereits versendete Briefe behalten ihr Original zur Nachvollziehbarkeit.
Feld Typ designId string (uuid) Pflicht Das zu loeschende Briefdesign. Fehlercodes: NOT_FOUND
brand_kit_saveScope: letter_design:writekein dryRunSpeichert Logo-Referenzen, Farben und Schrift fuer das nutzerseitige Ergebnis Briefkopf & Marke. brandingOwnershipConfirmed muss true sein und bestaetigt die Nutzungsrechte an den angegebenen Marken-Assets. Die Antwort enthaelt den gespeicherten Stand und den Prueflink. Suche technisch nach brand_kit_save.
Feld Typ brandKit Objekt Pflicht brandingOwnershipConfirmed boolean Pflicht Bestaetigt die Nutzungsrechte an Logo und eigener Schrift. Muss true sein. brand_import_from_websiteScope: letter_design:writekein dryRunLiest eine oeffentliche Firmenwebsite aus und schlaegt daraus ein Briefkopf-Design vor: Markenfarben, Hausschriftzuordnung, Logo-Kandidaten und Firmendaten aus dem Impressum. Die gefundenen Logos werden als Design-Assets im Konto gespeichert, damit du sie sofort verwenden kannst. Das Ergebnis ist ein Vorschlag zur Abstimmung mit der Kundin oder dem Kunden; uebernommen wird die Marke erst durch einen anschliessenden Aufruf von brand_kit_save mit brandingOwnershipConfirmed. Suche technisch nach brand_import_from_website.
Feld Typ websiteUrl string, max. 2048 Zeichen Pflicht Oeffentliche Adresse der Firmenwebsite, zum Beispiel https://beispiel.de. maxLogoCandidates integer Optional Wie viele Logo-Kandidaten heruntergeladen und gespeichert werden. Standard 3. letter_scheduleScope: letter:scheduledryRun verfügbarPlant den Versand eines bestehenden Entwurfs für einen späteren Zeitpunkt (fester Termin, relative Verzögerung oder wiederkehrend per cron). Alle Prüfungen und der Preis werden sofort ermittelt und die Kosten reserviert. Eine echte OAuth-Verbindung legt zuerst eine Freigabe an. Die eingebettete Karte ist Vorschau und Freigabe. Nach ihrer Anzeige reicht im Chat eine kurze Bestätigung; PDF-Link und Brieftext gehören in reine Textansichten. Eine OAuth-Verbindung mit approval:self_approve darf über die Karte entscheiden. Nach der Freigabe entsteht die Planung, der eigentliche Versand läuft zum geplanten Zeitpunkt durch dieselbe Versandpipeline.
Feld Typ letterId string (uuid) Pflicht Bestehender Entwurf, der geplant versendet wird. mode at | in | cron Pflicht at = fester Zeitpunkt, in = relative Verzögerung, cron = wiederkehrend. sendAt string (date-time) Optional Zeitpunkt bei mode='at' (ISO 8601, Berlin-Zeit wenn ohne Offset). delay string Optional Verzögerung bei mode='in': '2d', '1w', '3h', 'next-business-day', 'next-monday', 'end-of-month'. cronExpression string Optional 5-Felder cron bei mode='cron': 'min std tag monat wochentag'. endDate string (date-time) Optional Enddatum für eine cron-Serie. businessDaysOnly boolean Optional Nur an Werktagen versenden, sonst auf den nächsten Werktag verschieben. Standard true. sendBeforeHour number Optional Versand-Cutoff in Berliner Ortszeit. Nach dieser Stunde wird auf den nächsten Werktag verschoben. deliveryType standard | einschreiben_einwurf | einschreiben_uebergabe | ch_b_post | ch_a_post | ch_einschreiben | at_eco | at_prio | intl_standard | intl_priority | intl_express | intl_tracked | intl_registered Optional express boolean Optional color boolean Optional includeSignature boolean Optional signatureId string (uuid) Optional senderAddressId string (uuid) Optional senderProfileId string (uuid) Optional mandantennummer string Optional presetName string Optional auditTag string Optional templateId string (uuid) Optional maxCostEuros number Optional Maximalbetrag in Euro. Liegt der Preis darüber, wird abgebrochen. dryRun boolean Optional Prüft und bepreist die Planung, legt aber nichts an und reserviert nichts. Liefert dryRunWouldHaveCost. Fehlercodes: SENDER_PFLICHTANGABEN_INCOMPLETE, ADDRESS_INVALID, AVV_REQUIRED, COST_OVER_LIMIT
schedule_list_or_cancelScope: letter:scheduledryRun verfügbarListet die geplanten Sendungen des Partners auf oder bricht eine geplante Sendung ab. Beim Abbrechen wird die reservierte Summe wieder freigegeben.
Feld Typ action list | cancel Optional list = Planungen auflisten, cancel = eine Planung abbrechen. scheduleId string (uuid) Optional Erforderlich bei action='cancel'. statusFilter scheduled | sent | cancelled | failed Optional Optionaler Statusfilter für action='list'. dryRun boolean Optional Bei action='cancel' nur eine Vorschau: zeigt die freizugebende Summe, ohne die Planung abzubrechen. Fehlercodes: NOT_FOUND
order_send_batchScope: order:senddryRun verfügbarReicht mehrere Briefe als einen Stapel ein. Jeder Eintrag wird einzeln geprüft und bepreist. Der Stapel landet als eine Freigabe für alle Empfänger in der Warteschlange. Gib dem Menschen immer den zurückgegebenen approvalUrl, damit er Empfängerliste, Anzahl und Gesamtkosten im angemeldeten Portal prüfen und dort entscheiden kann. Nur eine OAuth-Verbindung mit der ausdrücklich erteilten Berechtigung approval:self_approve darf selbst freigeben. Bei Ablehnung wird die gesamte Reservierung zurückgebucht. Mit dryRun bleibt es bei einer kostenfreien Probe.
Feld Typ items Array<Objekt> (min 1, max 100) Pflicht Liste der Briefe im Stapel. Jeder Eintrag traegt seinen eigenen clientOrderId und genau eine Quelle: eine letterId ODER einen inline Brief. presetName string Optional Optionales Preset fuer den ganzen Stapel; pro Eintrag ueberschreibbar ist nicht vorgesehen. stopOnError boolean Optional Bricht den Stapel beim ersten Fehler ab. Standard false. dryRun boolean Optional Simuliert den ganzen Stapel: prueft jeden Eintrag, berechnet aber nichts und versendet nichts. Fehlercodes: SENDER_PFLICHTANGABEN_INCOMPLETE, ADDRESS_INVALID, AVV_REQUIRED, DAILY_CAP_EXCEEDED, MANDANT_CAP_EXCEEDED, COST_OVER_LIMIT, CONTENT_REJECTED, COUNTRY_NOT_SUPPORTED, LEGAL_PROOF_UNAVAILABLE_FOR_COUNTRY, PRICE_UNAVAILABLE, SANDBOX_DISABLED, IDEMPOTENCY_CONFLICT, DESIGN_NOT_FOUND, DESIGN_RENDER_FAILED, DESIGN_ZONE_VIOLATION
order_fix_resubmitScope: order:sendkein dryRunKorrigiert die Empfängeradresse eines Briefs im Status awaiting_partner_fix und reicht ihn erneut ein. Das ist nur erlaubt, wenn die OAuth-Verbindung approval:self_approve ausdrücklich trägt. Andernfalls muss der Mensch den zurückgegebenen Link öffnen und im angemeldeten Portal entscheiden. Der Preis bleibt unverändert.
Feld Typ orderId string (uuid) Pflicht recipient unbekannt Pflicht Die korrigierte Empfaengeradresse als Einzelfelder oder als { addressId } aus dem Partner-Adressbuch. clientOrderId string Optional Idempotenzschlüssel: clientOrderId (siehe Konventionen).
document_createScope: order:sendkein dryRunErzeugt aus strukturierten Belegdaten ein fertiges Dokument und legt es als Briefentwurf an: FrankKi rechnet Positionen, Netto, USt-Sätze und Brutto nach, prüft die Pflichtangaben nach § 14 UStG, vergibt auf Wunsch die Belegnummer aus deinem Nummernkreis und setzt alles im DIN-5008-Layout mit deinem Briefdesign. Der Entwurf bleibt kostenfrei liegen, bis du ihn versendest. Alle Beträge in ganzen Cent. Kompaktes Beispiel: {"document":{"documentType":"rechnung","documentNumber":"RE-2026-014","documentDate":"2026-07-30","leistungszeitraum":{"von":"2026-06-01","bis":"2026-06-30"},"zahlungszielTage":14,"lineItems":[{"description":"Beratung Juni","quantity":4,"unit":"Std","unitPriceCents":12000,"ustRate":19,"lineNetCents":48000}],"totals":{"nettoCents":48000,"ustLines":[{"rate":19,"netCents":48000,"ustCents":9120}],"bruttoCents":57120}},"recipientAddressId":"…"} Nächster Schritt mit der zurückgegebenen letterId: order_send versendet den Brief, approval_submit legt ihn stattdessen einem Menschen zur Freigabe vor, letter_schedule versendet ihn später.
Feld Typ document Objekt Pflicht Die Belegdaten. Alle Betraege in ganzen Cent. Du lieferst die Summen, FrankKi rechnet sie nach und lehnt Abweichungen ab. sequenceScope Objekt Optional subject string, max. 200 Zeichen Optional Betreff des Briefs. Ohne Angabe setzt FrankKi ihn aus Dokumentart und Belegnummer, z. B. 'Rechnung RE-2026-014'. language de | en Optional Standard de. recipientAddressId string (uuid) Optional Empfaenger aus deinem Adressbuch (address_list / mandant_search liefern die id). Entweder das oder recipientAddressInline. recipientAddressInline Objekt Optional mandantennummer string Optional Mandant, dem das Dokument zugeordnet wird. Nur Zuordnung fuer Liste und Auswertung. senderAddressId string (uuid) Optional senderProfileId string (uuid) Optional Absenderprofil, aus dem die Pflichtangaben (USt-IdNr oder Steuernummer) gelesen werden. Ohne Angabe gilt dein Standardprofil. designId string (uuid) Optional reference Objekt Optional includeSignature boolean Optional signatureId string (uuid) Optional clientLetterId string Optional Idempotenzschluessel fuer den Briefentwurf.
Vertrauen und Live-Status
Maschinenlesbare Servicefakten und der aktuelle Betriebsstatus der Partner-Schnittstelle stehen jederzeit offen zur Verfügung, ohne Login.