Angebot annehmen, ablehnen oder zurücksetzen
Benötigte Berechtigung:invoices:draft(Rechnungsentwürfe verwalten)
Echte Wirkung
/api/draft/{id}/proposal-outcomeKein Testversand aus der Dokumentation: Dieser Aufruf ist nicht als rein lesend gekennzeichnet. Nutze das Codebeispiel.
Hält fest, ob der Kunde ein ausgestelltes Angebot angenommen (accepted) oder abgelehnt (rejected) hat, wie in der App. open nimmt das Ergebnis zurück. Ein abgelaufenes Angebot lässt sich noch annehmen. bimetrics protokolliert jedes Ergebnis mit Schlüssel und Zeit; Angebot, PDF und Nummer bleiben unverändert. Das gleiche Ergebnis mit dem gleichen Grund ergibt 409 ProposalOutcomeUnchanged, ein Entwurf 409 ProposalNotIssued. Gibt es zum Angebot eine Auftragsbestätigung oder Rechnung, auch als Entwurf, sind Ablehnen und Zurücksetzen gesperrt (409 ProposalConverted, context.draftId und context.kind nennen den Beleg). deriveSalesDocument setzt ein Angebot von selbst auf angenommen. Idempotency-Key bei Wiederholung unverändert senden.
Benötigt einen Schlüssel mit der Berechtigung invoices:draft.
AuthentifizierungBearer <bm_…>Empfohlen: Authorization: Bearer bm_…. Der Schlüssel wird nur einmal angezeigt; nie in URLs, Logs oder Frontend-Code ablegen.
id*stringID des Angebotsentwurfs in dieser Firma (UUID).
uuidIdempotency-Key*stringStabiler Schlüssel für genau diese Änderung: 1–128 druckbare ASCII-Zeichen ohne Leerzeichen. Bei Wiederholungen denselben Schlüssel und unveränderten Inhalt senden; das Ergebnis wird nicht nochmals erzeugt.
^[!-~]+$1 <= length <= 128application/json- body
Ergebnis eines ausgestellten Angebots.
outcome?stringaccepted (angenommen), rejected (abgelehnt) oder open (Ergebnis zurücknehmen).
"accepted""rejected""open"reason?stringGrund einer Ablehnung, eine Zeile mit höchstens 200 Zeichen; nur bei rejected, sonst 400.
Erfolg.
application/json- response
Offener oder abgeschlossener Rechnungsentwurf mit Version und Referenz zum ausgestellten Beleg.
billing?Nur getDraft eines ausgestellten Angebots oder einer ausgestellten Auftragsbestätigung: Abrechnung des Auftrags mit Abschlägen, abschließender Rechnung und Summen.
billingSummary?Nur filterDrafts, an ausgestelltem Angebot und ausgestellter Auftragsbestätigung: Kurzform von billing.
companyId?stringID der Firma.
uuidcreatedAt?stringAnlage in bimetrics.
date-timecreatorUserCompanyId?stringID der erstellenden Mitgliedschaft.
uuiddeductedBy?Nur ausgestellter Abschlag: die ausgestellte, nicht stornierte Schlussrechnung, die ihn abzieht.
deletedAt?|Gilt als gelöscht seit diesem Zeitpunkt; null, solange nicht gelöscht. Gesetzt ist es nur in der Antwort von deleteDraft und deleteOrderConfirmationDraft; gelöschte Entwürfe liefert keine andere Route, auch filterDrafts mit includeDeleted nicht.
date-timedocumentId?|ID des ausgestellten Rechnungsbelegs; null bei offenem Entwurf.
uuiddocumentMatched?booleanDer ausgestellte Beleg ist bereits einer Zuordnung zugeordnet.
downPaymentOrdinal?integerNur Abschlag: seine Ordnungszahl im Auftrag, wie ordinal in billing.
draftBody?Gespeicherter Rechnungsinhalt.
externalRef?stringExterne Bestellreferenz.
finalTotal?integerBruttosumme des ausgestellten Belegs in Cent.
id?stringID des Entwurfs.
uuidinvoiceCorrection?Quellgebundener Grund und Bruttokorrekturbeträge je Position.
invoiceNumber?stringArbeitsnummer; nach Abschluss endgültige Rechnungsnummer.
invoiceRole?stringRolle der Rechnung im Auftrag: down_payment (Abschlag) oder final (Schlussrechnung), fest ab dem Ableiten; fehlt bei allen anderen Entwürfen. Filterbar in filterDrafts.
"down_payment""final"kind?stringDokumentart invoice, proposal, order_confirmation, cancellation, invoice_correction oder correction_reversal.
legacyProposalTotal?booleanAngebot vor dem 21.09.2026 ausgestellt: Summe je Zeile gerundet wie sein PDF.
orderConfirmationId?|Ausgestellte Auftragsbestätigung; null bei offenem Entwurf.
uuidoriginalInvoiceId?|Originalentwurf für eine Stornorechnung; sonst null.
uuidoriginalTotal?integerBruttosumme des Storno-Originals in Cent.
payment?Zahlstand einer ausgestellten Rechnung (Typ 380); fehlt bei allen anderen Entwürfen.
proposal?Ergebnis eines ausgestellten Angebots; fehlt bei allen anderen Entwürfen.
reversesCorrectionDocumentId?stringAusgestellte Korrektur, die dieser Gegenbeleg aufhebt.
uuidsalesProposalId?|ID eines erstellten Angebots, falls vorhanden.
uuidsettledByFinalDraftId?stringNur Storno oder Korrektur eines Abschlags: die Schlussrechnung, deren Ausstellen diesen Beleg erzeugt hat.
uuidsource?stringZugang bei Anlage: web, api, mcp oder series für erzeugte Serienrechnungen.
sourceInvoiceDocumentId?stringUnverändertes Original einer Rechnungskorrektur.
uuidsourceOrderConfirmationId?|Ausdrücklich gewählte finale AB als Rechnungsquelle; sonst null.
uuidsourceSalesProposalId?|Ursprüngliches Angebot, falls vorhanden.
uuidtaxCase?Beim Abschluss eingefrorener Steuerfall.
typeCode?stringEN-16931-Dokumenttyp: Rechnung 380, Rechnungskorrektur 381, Vollstorno oder Korrektur-Gegenbeleg 384.
updatedAt?stringLetzte Änderung.
date-timecurl --fail-with-body "https://app.bimetrics.de/api/draft/497f6eca-6276-4993-bfeb-53cbbbba6f08/proposal-outcome" \ -H "Authorization: Bearer $BIMETRICS_API_KEY" \ -H "Idempotency-Key: rechnung-2026-001" \ -H "Content-Type: application/json" \ -d '{}'{ "companyId": "9c388e1f-04a6-4770-80bd-66cd98dd00d5", "createdAt": "2026-09-01T08:00:00Z", "creatorUserCompanyId": "53cd10a9-c864-4dc3-a777-9860d59efe6c", "deletedAt": null, "documentId": null, "draftBody": { "buyer": { "address": { "city": "Hamburg", "countryId": "DE", "line1": "Am Hafen 12", "postcode": "20457" }, "contactId": "b17e8812-eae4-49b6-b5dc-30510635cb07", "customerNumber": 1004, "email": "", "name": "Brauhaus Elbwiese GmbH", "vatId": "" }, "dueDate": { "day": 15, "month": 9, "year": 2026 }, "issueDate": { "day": 1, "month": 9, "year": 2026 }, "items": [ { "description": "Gestaltung einer Geschäftsausstattung", "discount": "0", "name": "Gestaltung", "position": "1", "quantity": "1", "taxRate": "19", "unit": "C62", "unitPrice": "100" } ], "notes": "", "performancePeriodFrom": { "day": 1, "month": 9, "year": 2026 }, "priceType": "net", "remark": "", "showQRCode": false, "strict": false, "taxRateReason": "none", "validUntil": null }, "externalRef": "order-2026-1042", "id": "821c3664-640a-4e10-b120-a4ff713532f8", "invoiceNumber": "AN-2026-0042", "kind": "proposal", "orderConfirmationId": null, "originalInvoiceId": null, "proposal": { "outcome": "rejected", "outcomeAt": "2026-09-10T09:30:00Z", "outcomeBy": "API-Schlüssel Shop", "outcomeReason": "Zu teuer", "outcomeVia": "api", "sentAt": "2026-09-01T08:05:00Z" }, "salesProposalId": "7c3e9a21-4b6d-4f8e-a1c2-3d4e5f6a7b8c", "source": "api", "sourceOrderConfirmationId": null, "sourceSalesProposalId": null, "typeCode": "", "updatedAt": "2026-09-01T08:01:02.123456Z"}Rechnung, Korrektur, Angebot oder Auftragsbestätigung ausstellen PUT
Eine Auftragsbestätigung erhält eine eigene Nummer und ein PDF ohne XML oder Buchungen; das Ergebnis steht in orderConfirmation. Ein Angebot ebenso, mit Nummer aus dem Nummernkreis der Angebote; das Ergebnis steht in salesProposal. Rechnungen stehen weiterhin in document. Schließt genau den gespeicherten und mit expectedUpdatedAt bezeichneten Entwurf ab. Korrekturen und deren Gegenbelege erzeugen eigene unveränderliche Belege und entsprechende Buchungen; daraus entsteht keine Auszahlung. Bei Rechnungen wird die E-Rechnung geprüft und Rechnungsnummer, PDF, XML und Buchungsdaten erzeugt. Im Anfrageinhalt expectedUpdatedAt senden; für Korrekturen und deren Gegenbelege kann expectedCapacityRevision aus getCorrectionCapacity zusätzlich den geprüften Kapazitätsstand binden. Geänderte Kapazität erfordert dann eine erneute Prüfung. Eine Schlussrechnung storniert beim Ausstellen unbezahlte Abschläge des Auftrags und korrigiert teilbezahlte auf den bezahlten Betrag, in einem Schritt mit fortlaufenden Nummern; sind unbezahlte dabei, nur mit `acceptCancelOpenDownPayments`. `expectedSettlementRevision` bindet sie an die geprüften Abzüge (`409 FinalInvoicePaymentsChanged`). Gesperrt mit `409 DownPaymentDraftsOpen`, `409 DownPaymentPaymentUnknown`, `409 DownPaymentOverpaid`, `422 FinalInvoiceNegative`, `422 FinalInvoiceCashDiscount`. Keine bearbeitbaren Rechnungsfelder und kein Versand. Benötigt einen Schlüssel mit der Berechtigung `invoices:finalize`.
Gespeicherten Rechnungsentwurf prüfen POST
Prüft den gespeicherten Entwurf und liefert Steuerfall, Problemcodes und vorgesehene Konten. Meldet auch einen fehlenden Firmennamen (`company_name_required`), unvollständige Anschriften von Firma oder Kunde (`InvoiceAddressRequired`) sowie eine unbestätigte Versteuerung (`SellerTaxStatusUnconfirmed`) oder fehlende Steuernummer der Firma (`SellerTaxIdRequired`) als blockierend, weil das Abschließen sie ablehnt. Liegt das Rechnungsdatum vor deiner letzten Rechnung, weist `IssueDateBeforeLastInvoice` darauf hin, ohne zu blockieren. Je Position nennt `lines[].allowedRates` die Steuersätze, die ihr Steuerfall erlaubt. Bei einer Schlussrechnung nennt `settlement` Abzüge, Stornos, Korrekturen und den Revisionswert, bei Abschlag und Schlussrechnung `billing` den Stand des Auftrags. Legt keine Kontakte, Rechnungen oder Buchungen an. Kein Anfrageinhalt erforderlich. Benötigt einen Schlüssel mit der Berechtigung `invoices:draft`.