1. API-Schlüssel erstellen
Als Administrator unter Dashboard → Einstellungen → API-Schlüssel. Der vollständige Schlüssel wird nur einmal angezeigt.
Service API · Version 1.2.0
Maschinen, Kunden, Vertrieb, Dokumente, Kommunikation, Rechnungen und Statistiken sicher über eine versionierte Schnittstelle steuern.
Als Administrator unter Dashboard → Einstellungen → API-Schlüssel. Der vollständige Schlüssel wird nur einmal angezeigt.
Bevorzugt per Authorization: Bearer …. Alternativ wird X-API-Key unterstützt.
Jede Mutation benötigt einen eindeutigen Idempotency-Key. Wiederholungen liefern dieselbe Antwort.
Schnellstart
curl --request GET \
--url 'https://maschinencircle.net/api/v1/machines?status=active&limit=25' \
--header 'Authorization: Bearer msp_live_IHR_API_SCHLUESSEL' \
--header 'Accept: application/json'Referenz
/analytics/customersKunden- und Produktinteressen auflistenBenötigter Scope: `analytics:pii:read`. Dieser Sensitive-Scope wird weder von analytics:* noch analytics:read impliziert. Aufrufe werden ohne IP, Referrer, User-Agent oder Fingerprint in 30-Minuten-Buckets erfasst.
Operation-ID:listCustomerAnalyticsFromDatesiehe SchemaToDatesiehe SchemaPagesiehe SchemaLimitsiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/analytics/customers/{id}Kundeninteressen und betrachtete Produkte abrufenBenötigter Scope: `analytics:pii:read`. Zeigt je Maschine aggregierte Aufrufe und den letzten Aufruf im Zeitraum.
Operation-ID:getCustomerAnalyticsidpathPflichtFromDatesiehe SchemaToDatesiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/analytics/machinesProdukt-Funnel auflistenBenötigter Scope: `analytics:read`.
Operation-ID:listMachineAnalyticsFromDatesiehe SchemaToDatesiehe SchemaPagesiehe SchemaLimitsiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/analytics/machines/{id}Produktstatistik abrufenBenötigter Scope: `analytics:read`.
Operation-ID:getMachineAnalyticsidpathPflichtFromDatesiehe SchemaToDatesiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/analytics/overviewGesamtkennzahlen und Zeitreihe abrufenBenötigter Scope: `analytics:read`. Standardzeitraum 30 Tage, maximal 366 Tage. Umsätze schließen stornierte Rechnungen aus.
Operation-ID:getAnalyticsOverviewFromDatesiehe SchemaToDatesiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/analytics/sellersVerkäuferstatistiken auflistenBenötigter Scope: `analytics:read`.
Operation-ID:listSellerAnalyticsFromDatesiehe SchemaToDatesiehe SchemaPagesiehe SchemaLimitsiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/analytics/sellers/{id}Verkäuferstatistik abrufenBenötigter Scope: `analytics:read`.
Operation-ID:getSellerAnalyticsidpathPflichtFromDatesiehe SchemaToDatesiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/contractsVerträge auflistenBenötigter Scope: `contracts:read`.
Operation-ID:listContractsPagesiehe SchemaLimitsiehe SchemaSearchsiehe SchemastatusquerycustomerIdquerymachineIdquery200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/contracts/{id}Signierten Vertrag abrufenBenötigter Scope: `contracts:read`. Enthält unveränderliche Verkäufer-/Käufer-/Maschinensnapshots ohne Bankdaten.
Operation-ID:getContractidpathPflicht200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/contracts/{id}/documentSigniertes Vertrags-PDF herunterladenBenötigter Scope: `contracts:read`. Der Server lädt das private Objekt, begrenzt die Größe und verifiziert SHA-256 vor jeder Ausgabe.
Operation-ID:downloadContractDocumentidpathPflicht200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/customersKunden auflistenBenötigter Scope: `customers:read`.
Operation-ID:listCustomersPagesiehe SchemaLimitsiehe SchemaSearchsiehe Schemastatusquerykindquery200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/customers/{id}Kundenakte abrufenBenötigter Scope: `customers:read`. Enthält Profil, Anschriften, zugehörige Vorgänge und aggregierte Angebots-/Rechnungswerte.
Operation-ID:getCustomeridpathPflicht200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/customers/{id}Kundenstammdaten, Status und Anschriften ändernBenötigter Scope: `customers:write`. Nur ein aktiver verantwortlicher Administrator darf Kunden ändern. Sperren widerruft alle Sitzungen; Aktivieren setzt eine bestätigte E-Mail voraus. Die E-Mail-Verifikation kann nicht umgangen werden.
Operation-ID:updateCustomeridpathPflichtIdempotency-KeyheaderPflichtCustomerPatch200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/healthApp- und DatenbankstatusApp- und Datenbankstatus
Operation-ID:getHealth200 · 503
/inquiriesVertriebsvorgänge auflistenBenötigter Scope: `inquiries:read`.
Operation-ID:listInquiriesPagesiehe SchemaLimitsiehe SchemaSearchsiehe SchemastatusquerycustomerIdquerymachineIdqueryassignedToUserIdquery200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/inquiries/{id}Vorgangsakte abrufenBenötigter Scope: `inquiries:read`. Enthält Kunden-/Maschinenkontext, Notizen, Aufgaben, Angebote und den updatedAt-Concurrency-Token.
Operation-ID:getInquiryidpathPflicht200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/inquiries/{id}/assignVorgang einem Verkäufer zuweisen oder Zuweisung lösenBenötigter Scope: `inquiries:write`. Nur ein aktiver verantwortlicher Administrator darf zuweisen. Zulässig sind ausschließlich aktive Verkäufer. Die Verkäuferbenachrichtigung und optional die serverseitig adressierte Kundenbenachrichtigung werden atomar eingereiht.
Operation-ID:assignInquiryidpathPflichtIdempotency-KeyheaderPflichtInquiryAssign200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/inquiries/{id}/messagesNachrichten eines Vorgangs auflistenBenötigter Scope: `messages:read`.
Operation-ID:listInquiryMessagesidpathPflichtPagesiehe SchemaLimitsiehe SchemaMessageDirectionsiehe SchemaMessageStatussiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/inquiries/{id}/messagesSichere E-Mail an den Vorgangskunden einreihenBenötigter Scope: `messages:write`. Der Empfänger wird ausschließlich serverseitig aus dem Vorgang ermittelt. Freie to/from/replyTo/cc/html-Felder sind nicht zulässig; gewählt wird nur eine mailboxId. Ein verantwortlicher Verkäufer darf ausschließlich zugewiesene Postfächer verwenden. E-Mail-Datensatz, Outbox-Job und Audit werden atomar gespeichert.
Operation-ID:queueInquiryEmailidpathPflichtIdempotency-KeyheaderPflichtInquiryMessageCreate201 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/inquiries/{id}/notesInterne Vorgangsnotiz anlegenBenötigter Scope: `inquiries:write`. Die verantwortliche Person wird serverseitig aus dem API-Schlüssel bestimmt. Verkäufer können ausschließlich ihnen zugewiesene Vorgänge bearbeiten.
Operation-ID:createInquiryNoteidpathPflichtIdempotency-KeyheaderPflichtInquiryNoteCreate201 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/inquiries/{id}/offersAngebot erstellen, versionieren oder sendenBenötigter Scope: `offers:write`. Erhält sämtliche Status-, Eigentümer-, Steuer-, Preis- und Concurrency-Prüfungen des Admin-Workflows. Bei send=true wird nur die im Vorgang gespeicherte Kundenadresse verwendet und ein Outbox-Job atomar angelegt.
Operation-ID:createOrSendOfferidpathPflichtIdempotency-KeyheaderPflichtOfferCreate200 · 201 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/inquiries/{id}/statusCRM-Status eines Vorgangs ändernBenötigter Scope: `inquiries:write`. Erlaubt nur fachlich zulässige Übergänge nach assigned, contacted, qualified oder lost. Für lost ist ein Grund erforderlich. Verkäufer können ausschließlich ihnen zugewiesene Vorgänge ändern.
Operation-ID:changeInquiryStatusidpathPflichtIdempotency-KeyheaderPflichtInquiryStatusChange200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/inquiries/{id}/tasksVorgangsaufgabe anlegenBenötigter Scope: `inquiries:write`. Zuweisbar nur an aktive Mitarbeiter. Verkäufer können Aufgaben ausschließlich sich selbst und nur in ihren eigenen Vorgängen zuweisen.
Operation-ID:createInquiryTaskidpathPflichtIdempotency-KeyheaderPflichtInquiryTaskCreate201 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/inquiries/{id}/tasks/{taskId}Aufgabe abschließen oder wieder öffnenBenötigter Scope: `inquiries:write`. Verwendet den Concurrency-Token der Aufgabe. Bei Neuzuweisung stornierte Aufgaben können nicht wieder geöffnet werden.
Operation-ID:updateInquiryTaskidpathPflichttaskIdpathPflichtIdempotency-KeyheaderPflichtInquiryTaskPatch200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/invoicesRechnungen auflistenBenötigter Scope: `invoices:read`.
Operation-ID:listInvoicesPagesiehe SchemaLimitsiehe SchemaSearchsiehe Schemastatusquery200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/invoicesRechnung aus signiertem Vertrag ausstellen und sendenBenötigter Scope: `invoices:write`. Prüft den erwarteten Vertrags-Hash, vergibt die Eigentümer-/Jahres-Sequenz atomar, erzeugt PDF und EN-16931/XRechnung-XML und reiht die Zustellung an die im Vertrag festgeschriebene Kundenadresse ein.
Operation-ID:issueInvoiceIdempotency-KeyheaderPflichtInvoiceIssue200 · 201 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/invoices/{id}Rechnung abrufenBenötigter Scope: `invoices:read`. Interne Storage-, Idempotency-, Mutation- und Storno-Hashes werden nicht ausgegeben.
Operation-ID:getInvoiceidpathPflicht200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/invoices/{id}/cancelRechnung stornierenBenötigter Scope: `invoices:write`. Nur für API-Schlüssel mit aktivem, verantwortlichem Administrator. Rechnungen werden niemals gelöscht; Grund und Audit bleiben erhalten.
Operation-ID:cancelInvoiceidpathPflichtIdempotency-KeyheaderPflichtVoidMutation200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/invoices/{id}/documents/{format}Rechnungs-PDF oder strukturierte XML herunterladenBenötigter Scope: `invoices:read`. Der Server lädt das private Objekt, begrenzt die Größe und verifiziert SHA-256 vor jeder Ausgabe.
Operation-ID:downloadInvoiceDocumentidpathPflichtformatpathPflicht200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/invoices/{id}/paymentsZahlungen einer Rechnung auflistenBenötigter Scope: `payments:read`.
Operation-ID:listInvoicePaymentsidpathPflichtPagesiehe SchemaLimitsiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/invoices/{id}/paymentsZahlung verbuchenBenötigter Scope: `payments:write`. Optimistic Concurrency über expectedRowVersion; Überzahlung und Buchung auf stornierte Rechnungen werden abgelehnt.
Operation-ID:recordInvoicePaymentidpathPflichtIdempotency-KeyheaderPflichtPaymentCreate200 · 201 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/invoices/{id}/payments/{paymentId}/voidZahlungsbuchung stornierenBenötigter Scope: `payments:write`. Nur für API-Schlüssel mit aktivem, verantwortlichem Administrator. Die ursprüngliche Buchung bleibt unveränderlich erhalten.
Operation-ID:voidInvoicePaymentidpathPflichtpaymentIdpathPflichtIdempotency-KeyheaderPflichtVoidMutation200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machinesMaschinen auflistenBenötigter Scope: `machines:read`.
Operation-ID:listMachinesPagesiehe SchemaLimitsiehe SchemastatusqueryownerIdquerycategoryquerymanufacturerquerySearchsiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machinesMaschine als Entwurf anlegenBenötigter Scope: `machines:write`. Die Fachänderung, der Audit-Eintrag und das Idempotency-Ergebnis werden atomar gespeichert.
Operation-ID:createMachineIdempotency-KeyheaderPflichtMachineCreate201 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machines/{id}Maschine mit Medien abrufenBenötigter Scope: `machines:read`.
Operation-ID:getMachineidpathPflicht200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machines/{id}Nicht verkaufte Maschine ändernBenötigter Scope: `machines:write`. Die Fachänderung, der Audit-Eintrag und das Idempotency-Ergebnis werden atomar gespeichert.
Operation-ID:updateMachineidpathPflichtIdempotency-KeyheaderPflichtMachinePatch200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machines/{id}/archiveMaschine archivierenBenötigter Scope: `machines:write`. Die Fachänderung, der Audit-Eintrag und das Idempotency-Ergebnis werden atomar gespeichert.
Operation-ID:archiveMachineidpathPflichtIdempotency-KeyheaderPflichtMachineArchive200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machines/{id}/mediaMedien sortieren, beschreiben und Titelbild festlegenBenötigter Scope: `media:write`. Ersetzt die vollständige Medienreihenfolge mit Optimistic Concurrency. Jedes Medium muss genau einmal vorkommen und das Titelbild Teil der Liste sein.
Operation-ID:organizeMachineMediaidpathPflichtIdempotency-KeyheaderPflichtMachineMediaOrganize200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machines/{id}/media-uploadZeitlich begrenzten Direkt-Upload anlegenBenötigter Scope: `media:write`. Die signierte PUT-URL zeigt nur auf einen privaten, temporären create-only Schlüssel und ist kryptografisch an die angekündigte Größe sowie SHA-256-Prüfsumme gebunden. JSON bleibt auf 1 MiB begrenzt; die Datei selbst wird direkt zum Objektspeicher geladen. Weil die Signatur 15 Minuten gilt, ist diese Operation abweichend nur 10 Minuten idempotent replaybar.
Operation-ID:createMachineMediaUploadidpathPflichtIdempotency-KeyheaderPflichtMediaUpload201 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machines/{id}/media/{mediaId}Medienreferenz kontrolliert entfernenBenötigter Scope: `media:write`. Entfernt im Request nur die Datenbankreferenz. Eine getrennte überwachte Löschqueue bereinigt das private Objekt nach 24 Stunden Schonfrist. Das letzte geprüfte, für Kunden sichtbare Bild aktiver Maschinen kann nicht entfernt werden; ein neues Titelbild wird automatisch bestimmt.
Operation-ID:deleteMachineMediaidpathPflichtmediaIdpathPflichtIdempotency-KeyheaderPflichtMachineMediaDelete200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machines/{id}/media/{mediaId}/completeDirekt-Upload prüfen und abschließenBenötigter Scope: `media:write`. Prüft tatsächliche Größe und Dateisignatur, decodiert Bilder, entfernt Metadaten, berechnet SHA-256 und schreibt create-only unter einen content-addressierten finalen Schlüssel. Der zurückgegebene concurrencyToken ist für die nächste Medienänderung zu verwenden.
Operation-ID:completeMachineMediaUploadidpathPflichtmediaIdpathPflichtIdempotency-KeyheaderPflichtMediaUploadComplete200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machines/{id}/publishGeprüften Entwurf veröffentlichenBenötigter Scope: `machines:write`. Prüfdatum, Gutachter, bestandene Prüfung und mindestens ein serverseitig verifiziertes, für Kunden sichtbares Bild sind Pflicht.
Operation-ID:publishMachineidpathPflichtIdempotency-KeyheaderPflicht200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/machines/{id}/statusEntwurfs- oder Aktivstatus ändernBenötigter Scope: `machines:write`. Der Status sold ist absichtlich ausgeschlossen und wird ausschließlich durch den atomaren Vertragsabschluss gesetzt.
Operation-ID:changeMachineStatusidpathPflichtIdempotency-KeyheaderPflichtMachineStatusChange200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/mailboxesPostfächer und Teamzuordnungen auflistenBenötigter Scope: `mailboxes:read`.
Operation-ID:listMailboxes200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/mailboxesPostfach anlegenBenötigter Scope: `mailboxes:write`. Nur API-Schlüssel eines aktiven verantwortlichen Administrators. Absenderdomains müssen zusätzlich beim Provider verifiziert sein.
Operation-ID:createMailboxIdempotency-KeyheaderPflichtMailboxCreate201 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/mailboxes/{id}Postfach, Status und Teamzugriffe ändernBenötigter Scope: `mailboxes:write`. Deaktivierte Postfächer können nicht mehr als Absender verwendet werden. Es wird niemals hart gelöscht.
Operation-ID:updateMailboxidpathPflichtIdempotency-KeyheaderPflichtMailboxPatch200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/messagesGlobale Kommunikationshistorie auflistenBenötigter Scope: `messages:read`.
Operation-ID:listMessagesPagesiehe SchemaLimitsiehe SchemaSearchsiehe SchemamailboxIdqueryinquiryIdquerycustomerIdqueryMessageDirectionsiehe SchemaMessageStatussiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/offersAngebote auflistenBenötigter Scope: `offers:read`.
Operation-ID:listOffersPagesiehe SchemaLimitsiehe SchemaSearchsiehe Schemastatusquery200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/offers/{id}Angebot mit Versionen abrufenBenötigter Scope: `offers:read`. Private Storage-Keys und Eigentümer-Bankdaten werden nicht ausgegeben.
Operation-ID:getOfferidpathPflicht200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/offers/{id}/documentAngebots-PDF herunterladenBenötigter Scope: `offers:read`. Der Server lädt das private Objekt, begrenzt die Größe und verifiziert SHA-256 vor jeder Ausgabe.
Operation-ID:downloadOfferDocumentidpathPflichtversionquery200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/openapiOpenAPI-3.1-Vertrag abrufenÖffentliches, cachebares JSON-Dokument. Es enthält keine Secrets oder Laufzeitkonfiguration.
Operation-ID:getOpenApiDocument200
/ownersEigentümer auflistenBenötigter Scope: `owners:read`. Ohne owners:sensitive:read bleiben PII, Anschrift, Steuer- und Bankdaten ausgeblendet. Eine E-Mail-Suche ist nur mit diesem zusätzlichen Scope erlaubt.
Operation-ID:listOwnersPagesiehe SchemaLimitsiehe SchemakindquerystatusquerySearchsiehe Schema200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/ownersEigentümer anlegenBenötigter Scope: `owners:write`. Die Mutationsantwort ist bewusst PII-arm. Sensitivdaten können anschließend nur mit owners:read und owners:sensitive:read gelesen werden.
Operation-ID:createOwnerIdempotency-KeyheaderPflichtOwnerCreate201 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/owners/{id}Eigentümer abrufenBenötigter Scope: `owners:read`. Sensitive Felder werden nur ausgegeben, wenn derselbe Schlüssel zusätzlich owners:sensitive:read besitzt.
Operation-ID:getOwneridpathPflicht200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503
/owners/{id}Eigentümer ändernBenötigter Scope: `owners:write`. Die Fachänderung, der Audit-Eintrag und das Idempotency-Ergebnis werden atomar gespeichert.
Operation-ID:updateOwneridpathPflichtIdempotency-KeyheaderPflichtOwnerPatch200 · 400 · 401 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503