Zum Inhalt springen
FrankKi
Sign inStart freeiOS Download

Dedicated tool guide

order_send

Run the full send gates, optionally as a dry run, then create a reviewed or automatic physical-mail order.

Generated contract: apiVersion v1, schemaRevision 1. Examples use placeholders and do not call production.

order_send

actionscope: order:send

Sends a letter physically by post: checks the sender's mandatory details, the recipient address, the AVV and the limits, creates the final PDF, calculates the price and releases the send. Look at the letter as an image first: letter_create_draft and letter_preview return the rendered pages, and typesetting defects such as an over-long subject show up only there. A letter arrives either via letterId (an existing draft) or inline: then the body is either content (plain text) OR blocks (structured: tables, headings, totals lines), exactly one of the two. Compact blocks example: {"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}]}]} Full reference incl. styleDefs and limits: MCP resource frankki://blocks-guide. By default the send first lands in the approval queue and a human decides via approval_decide. After that, poll progress with order_status. Two recovery paths: order_cancel cancels a letter before it goes to print, order_fix_resubmit corrects a letter the provider rejected and resubmits it. With dryRun the send is only rehearsed: free of charge, and the letter stays put. dryRun is the full rehearsal of this specific letter through all six gates and therefore the highest-fidelity price. A dryRun stays a pure rehearsal: the returned letterId is a rehearsal handle and answers NOT_FOUND in letter_get or letter_preview. For a real draft, use letter_create_draft. shipping_quote instead answers what a letter would cost while the content is still only planned; letter_preview shows a blocks draft as an image before it is sent here.

Input contract

FieldTypeRequirementMeaning
letterIdstringoptionalExisting draft. Alternatively provide the letter inline.
subjectstringoptional
contentstringoptionalletter body as plain text. Either content OR blocks, never both.
blocksarray<object | object | object | object | object | object | object | object | object | object | object | object>optionalstructured letter content as typed blocks (alternative to content, never both).
styleDefsobjectoptionalnamed document styles (max 24); blocks reference them via style.
recipientNamestringoptional
recipientCompanystringoptional
recipientStreetstringoptional
recipientHouseNumberstringoptional
recipientZipstringoptional
recipientCitystringoptional
recipientCountrystringoptionalISO 3166-1 alpha-2, defaults to DE.
priceVersionstringoptionalOptional: the priceVersion from an earlier shipping_quote. If the price at send time differs, the call is aborted with PRICE_CHANGED before anything is charged.
quotedUnitPriceCentsintegeroptionalOptional: the unit price in cents from an earlier shipping_quote (unitPriceCents). If set, it decides the PRICE_CHANGED comparison and returns the old price in the error.
deliveryTypestandard | einschreiben_einwurf | einschreiben_uebergabeoptionalDefaults to standard.
expressbooleanoptional
colorbooleanoptionalIf omitted, colour is detected automatically.
includeSignaturebooleanoptional
signatureIdstringoptional
letterheadIdstringoptionalA specific letterhead for this send. If omitted, the default letterhead is used.
letterheadEnabledbooleanoptionalSet to false to suppress the letterhead for this one send.
senderAddressIdstringoptional
senderProfileIdstringoptional
mandantennummerstringoptional
clientOrderIdstringoptionalIdempotency key: any string (1-200 characters, e.g. 'mahnung-kunde42-2026-07-20'; no UUID format required). A repeat call with the same value returns the same order instead of sending a second time. The 'approval:' namespace is reserved.
scheduledAtstringoptional
approvalModeauto | draft | reviewoptionalHow the send is approved. 'draft' and 'review' put it into the approval queue instead of sending immediately. Note: both still reserve the amount in the wallet at submit time, so an approved letter cannot fail on funds later. Without cover the call returns INSUFFICIENT_FUNDS and nothing is created. For a plain draft with no wallet cover, use letter_create_draft.
maxCostEurosnumberoptionalMaximum amount in euros. If the price is above it, the call is aborted.
presetNamestringoptional
auditTagstringoptional
templateIdstringoptional
templateVersionIdstringoptionalExact released template version. Only with templateId; the server rerenders it with templateMergeValues and ignores caller-supplied subject/content.
templateMergeValuesobjectoptionalMerge values for the exact template version.
coverTemplateIdstringoptionalCover letter for a standalone form template.
coverTemplateVersionIdstringoptionalExact released version of the cover letter.
designIdstringoptionalUse a saved letter design for this send. If omitted, in order: the design stored on the draft (when sending by letterId), else the sender profile default design, else none.
designobjectoptionalExact letter-design snapshot from template_apply_with_merge_fields.composition.design. Takes precedence over designId and prevents later design edits from changing the released template composition.
referenceobjectoptionalPer-letter values (Vorgangsnummer, your reference, customer number, QR parameters ...). They fill the info block and the barcode.
dryRunbooleanoptional

Contract-shaped example

order_send({
  "letterId": "REVIEWED_LETTER_ID",
  "recipientName": "Max Mustermann",
  "recipientStreet": "Musterstrasse",
  "recipientHouseNumber": "1",
  "recipientZip": "10115",
  "recipientCity": "Berlin",
  "recipientCountry": "DE",
  "deliveryType": "einschreiben_einwurf",
  "priceVersion": "VERSION_FROM_QUOTE",
  "quotedUnitPriceCents": UNIT_PRICE_CENTS_FROM_QUOTE,
  "maxCostEuros": 10,
  "approvalMode": "review",
  "clientOrderId": "contract-482-send-v1",
  "dryRun": true
})

Replace quotedUnitPriceCents with the exact value returned by shipping_quote. Reuse the same clientOrderId and payload for retries; remove dryRun only for an intentional live submission.

For conditional fields and nested object limits, the generated complete tool reference remains authoritative. See errors and safe agent onboarding before implementing retries or a live send.

Trust and live status

Machine-readable service facts and the current operational status of the partner interface are publicly available at all times, no login needed.