Dokumentation
API-Referenz
Die vollständige HTTP-Ressourcenreferenz, authentifizierter lokaler Zugriff, Streaming-Verträge und Clients, die aus gemeinsam genutzten Schemata generiert wurden.
Automatisch aus dem Englischen übersetzt. Englisches Original ansehen
Überblick
Der Sidecar ist ein einzelner Effekt HttpApi. Jeder Endpunkt ist ein typisierter HttpApiEndpoint mit schemageprüften Anforderungs- und Antworttexten, daher stammen diese Referenz, das generierte SDK und der laufende Server aus derselben Deklaration in packages/api.
Über 232 Pfade und 35 Ressourcengruppen hinweg.
Anforderungs-, Antwort- und Fehlerformen, jeweils verknüpft mit den Vorgängen, die sie verwenden.
Ausgestrahlt vom Sidecar um /api/openapi.json; der Schnappschuss in packages/web wird geprüft von bun run check:api-reference.
Die Desktop-Webansicht, der mobile Begleiter, die AI-Bridge und Skripte rufen alle dieselben Routen auf.
Basis-URL
Es gibt keine gehostete CADCAMFUN-API. Der Sidecar läuft auf Ihrer Maschine, bindet 127.0.0.1 auf einem Port, den das Betriebssystem auswählt (es lauscht auf Port 0), überprüft seinen eigenen /api/healthund gibt erst dann eine JSON-Zeile auf stdout aus. Die Basis-URL lautet http://127.0.0.1:<port> aus dieser Zeile.
export CADCAMFUN_TOKEN=dev-token
CADCAMFUN_DATA_DIR=$(mktemp -d) \
CADCAMFUN_MIGRATIONS_DIR=$PWD/packages/db/drizzle \
CADCAMFUN_AI_OFFLINE=true \
bun --no-env-file apps/sidecar/src/main.ts
# stdout: {"event":"ready","port":46709}
export CADCAMFUN_URL=http://127.0.0.1:46709 Der Port ändert sich bei jedem Start
ready zeile (die Desktop-Shell macht genau das), anstatt eine feste Zahl anzunehmen. Protokolle werden an stderr gesendet, sodass stdout nur das Bereitschafts- oder Fehlerereignis überträgt. Authentifizierung
Der Vertrag legt ein Sicherheitssystem fest, bearer (HTTP Bearer). 324 von 325 Vorgängen erfordern dies; nur GET /api/health ist öffentlich.
| Ausweis | Gesendet als | Verwendet von |
|---|---|---|
| Token starten | Authorization: Bearer <token> | Die Desktop-Webansicht und lokale Skripte; der Wert von CADCAMFUN_TOKEN. |
| Begleiter-Token | Authorization: Bearer <token> | Ein gekoppeltes Telefon; engerer Zugang, siehe begleiterpaarung. |
| Kontositzung | x-session-token | Wählt das amtierende Konto über dem Inhabertoken aus; sehen identität unten. |
curl -s "$CADCAMFUN_URL/api/health"
curl -s "$CADCAMFUN_URL/api/projects" -H "Authorization: Bearer $CADCAMFUN_TOKEN" Konventionen
- JSON rein, JSON raus. Körper sind
application/jsonsofern auf der Karte nichts anderes angegeben ist: zwei mehrteilige Uploads, ein Oktett-Stream-Webhook, ein JavaScript-Bootstrap, ein Zip-Download, eine binäre Plugin-Datei und zwei Ereignis-Streams. - Vorgangs-IDs sind gepunktet.
projects.get,vcs.commit: das Gruppen-Tag, ein Punkt, der von den generierten Clients verwendete Methodenname. - Fehler werden getippt. Fehler werden pro Endpunkt deklariert und tragen ein
_tag; schalten Sie es ein, anstatt Nachrichten zu analysieren. Im gesamten Vertrag wird 401 für 269-Vorgänge, 500 für 264 und 400 für 206 deklariert. - Betriebsanker sind stabil. Jede Karte ist verlinkbar als
#op-<method>-<path>, zum Beispiel/docs/api/projects#op-get-api-projects-id.
Streaming
| Weg | Form | Trägt |
|---|---|---|
GET /api/projects/{id}/events | SSE | Ereignisse für ein Projekt ändern. |
POST /api/ai/chat/stream | SSE | Assistentenausgabe bei der Erstellung, plus Heartbeats; sehen KI-Streaming. |
curl -N "$CADCAMFUN_URL/api/projects/$PROJECT_ID/events" \
-H "Authorization: Bearer $CADCAMFUN_TOKEN" Kunden
@cadcamfun/api/sdk wird aus demselben Vertrag generiert: Jede unten aufgeführte Operations-ID ist eine typisierte Methode CadCam.make(...), wobei eine flache Eingabe von Pfadparametern und Körperfeldern erfolgt. 259 der 325 Vorgänge werden generiert; Jede Karte zeigt ihren genauen Aufruf.
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
const projects = await client.projects.list()
const created = await client.projects.create({ name: "Bracket" }) Ressourcen
325 Vorgänge in 35 Gruppen, sortiert nach dem, was sie bedienen.
Kern
1 endpointsIntegritätsprüfung für öffentliche Prozesse mit Status und Zeitstempel.
2 endpointsAuthentifizierte Bereitschaft und Anwendungsversion, die von nativen Clients verwendet werden.
2 endpointsProjektbezogene, vom Server gesendete Ereignisse für Live-Clients.
4 endpointsJSON-kompatible Präferenz- und Kontexteinträge mit Präfixauflistung und Operationen pro Schlüssel.
2 endpointsUpload- und Download-Vorgänge mit endpunktspezifischer Nutzlast und Antwortkodierung.
Design
5 endpointsErstellen, listen, lesen, aktualisieren und entfernen Sie Projekte mit Eigentümer- und Organisationszugriffsprüfungen.
8 endpointsSchreibgeschützte Projektzeichnungen, Komponenten, Werkzeugwege, Bibliotheksressourcen und begrenzte Vorschauen für Begleitkunden.
7 endpointsProjektzeichnungen und ihre gespeicherten Geometrie-, Metadaten- und Aktualisierungsvorgänge.
5 endpointsWiederverwendbare Projektkomponenten und ihre persistenten Entwurfsdaten.
5 endpointsAnalysieren Sie die genaue Geometrie, exportieren Sie STEP und überprüfen Sie Baugruppenbeziehungen anhand von Szenenschnappschüssen oder gespeicherten Zeichnungen.
8 endpointsGemeinsam genutzte Bibliotheksdatensätze und Komponenten-, Material- und Werkzeugsuchsammlungen.
Herstellung
9 endpointsGespeicherte Bearbeitungsprogramme, Zeichnungszuordnungen und validierte tragbare Fertigungsdokumente.
2 endpointsProjektbezogene Auflistung und Erstellung von Werkzeugwegen mit endpunktspezifischen Antwortumschlägen.
5 endpointsNative Herstellung, einstellungsgesteuerte G-Code-Generierung, Vorschläge, Parsing und Wiedergabeüberprüfung.
8 endpointsWerkzeugwegversionen, Wiederherstellung, Bibliothekserkennung und Thread-Programmkommentare.
21 endpointsKostenvoranschläge, Berechnungsanfragen, Materialkosten, Betriebskosten und Werkzeugverschleißaufzeichnungen.
Ressourcen
5 endpointsMaterialdatensätze, Anwendungsbearbeitungseigenschaften und Ressourcenzugriff.
5 endpointsMaterialspeicheranhänge und JSON-Import/Export für den Bibliotheksaustausch.
5 endpointsFräserdatensätze und -abmessungen, die von Anwendungsbearbeitungs-Workflows verwendet werden.
7 endpointsWerkzeugspeicherdaten und -erfassung oder Werkzeugimport/-export.
7 endpointsMaschinenkonfigurationsdatensätze, Aktualisierungen, Entfernung und Klonen.
5 endpointsMaschinenspeicheranhänge und Konfigurationsimport/-export.
Erweiterungen
52 endpointsAnbieter, Anmeldeinformationen, Konversationen, Streaming-Runden, Aktionsaufrufe, Bridge-Tokens, Fähigkeiten und Sitzungswiederherstellung.
22 endpointsProjekt Git-kompatible Commits, Branches, Wiederherstellungen, Überprüfungen, GitHub-Spiegelung und Workflow-Versand.
16 endpointsPlugin-Registrierung, Paketinstallation, Konfiguration, Aktivieren/Deaktivieren und bereitgestellte Plugin-Assets.
8 endpointsMCP-Verbindungskonfigurations-CRUD und Server-Info-Anfragen.
5 endpointsDesktop-Gateway-Status, Aktivierung/Deaktivierung, Gerätekopplung und Gerätesperre.
Konten
15 endpointsKontoanmeldung, Registrierung, Wiederherstellung, Verifizierung, Magic Links, Sitzungssuche und Passkey-Registrierung.
18 endpointsProfile, Kontoressourcen, API-Schlüssel, Token-Datensätze, Passwörter und Kontoentfernung.
5 endpointsOrganisationslisten und verwaltete Organisationsdatensätze.
4 endpointsBenachrichtigungsliste, Lesestatusaktualisierungen, Löschung und Alle als gelesen markieren.
15 endpointsAbonnementinformationen, Stripe-Checkout/Portal-Integration, Testwartung und signierte Webhook-Aufnahme.
10 endpointsAnwendungsmetriken, aktuelle Aktivitäten, Nutzungsabfragen und Tracking-Anfragen.
10 endpointsDesktop-Integrationsrouten, verfolgte Projektabläufe, Benachrichtigungen und Push-Abonnement-Datensätze.
1 endpointsSenden Sie die Wartelistenregistrierung über die lokale Anwendungs-API.
OpenAPI-Dokument
Herunterladen /docs/api/openapi.json (der eingecheckte Snapshot wird von dieser Site gerendert) oder das Live-Dokument von einem laufenden Sidecar unter abrufen /api/openapi.json. Erstellen Sie den Snapshot neu mit bun run generate:api-reference in packages/web nach dem Ändern eines Endpunkts.
Vertrag und Server
@cadcamfun/api definiert Anforderungs- und Antwortschemata mit Effect HttpApi. Es exportiert die Wurzel Api, domänendatensätze, markierte Fehler und Clients. Anforderungshandler, Autorisierungsentscheidungen, Datenbankabfragen und Anbieteraufrufe werden im Sidecar ausgeführt. Durch das Importieren eines Schemas wird kein Server gestartet.
Der Sidecar veröffentlicht seinen bedienten Vertrag unter GET /api/openapi.json. Verwenden Sie dieses laufende Dokument, um Methoden, Pfadparameter, Nutzlasten und Statuscodes für die Anwendung zu überprüfen, mit der Sie verbunden sind. Der Server stellt seine Gruppen zusammen apps/sidecar/src/layers.ts; der gemeinsame Vertrag wird in zusammengestellt packages/api/src/index.ts.
Ressourcenfamilien
- Design: projekte, Zeichnungen, Komponenten, Zeichnungsversionen, Objektimport/-export sowie exakte CAD-Analyse, STEP-Export und Baugruppenanalyse.
- Herstellung: werkzeugwege und -versionen, Kommentare, Generatorvorschläge, Analyse, Wiedergabeüberprüfung, native Fertigungsaufträge, Materialien, Werkzeuge, Maschinenkonfigurationen, Bibliothekselemente und Produktionskosten.
- Assistent: anbieter, Anmeldeinformationen, Modelle, Sitzungen, Streaming-Runden, Sitzungssteuerungen, Aktionen, Projektspeicher, Arbeitsbereichskontext und zustandslose Ratschläge.
- Zusammenarbeit: branches, Commits, Diffs, Pull Requests, Reviews, GitHub Mirrors, Workflow-Dateien und -Läufe, Live-Events und Companion Pairing.
- Anwendungsdienstleistungen: benutzer, Authentifizierung, Organisationen, Benachrichtigungen, Dateien, Plugins, Abrechnung, Analysen, Warteliste, MCP-Konfiguration und lokaler Schlüsselwertspeicher.
Die Vertragsgruppen behalten ihre endpunktspezifischen Antwortformen. Ein Client sollte das Schema der von ihm aufgerufenen Operation dekodieren, anstatt von einem einzigen anwendungsweiten JSON-Umschlag auszugehen.
Reaktionen und Misserfolge
Häufige getaggte Fehler werden HTTP 400 zugeordnet (BadRequest), 401 (Unauthorized), 403 (Forbidden), 404 (NotFound), 405 (MethodNotAllowed), 409 (Conflict) und 500 (InternalError). Ihre deklarierten Schemata sind für Menschen lesbar message. Einige Gruppen verwenden einen Umschlag mit success: false, message, und errors; eine kleine Anzahl verwendet ein error feld.
Erfolgsantworten können ein Datensatz, ein Array, ein Nullwert zulassender Wert oder ein Umschlag sein. Envelope beinhaltet success, message, und data; EnvelopeOpt macht die Nachricht optional. Erstellungsendpunkte deklarieren gegebenenfalls explizit 201. Schließen Sie den Erfolg nicht allein aus einem JSON-Feld ab, ohne den HTTP-Status und das Endpunktschema zu überprüfen.
Durch die Schemadekodierung werden Transporteingaben validiert, bevor der Handler ausgeführt wird. Die Geschäftsvalidierung wird weiterhin im Dienst ausgeführt: Eine strukturell gültige Anfrage kann sich auf eine nicht zugängliche Zeichnung beziehen, ein veraltetes Fertigungsartefakt enthalten oder einen widersprüchlichen Zweigvorgang anfordern.
Verwenden Sie den gemeinsam genutzten Client
ApiClient.layer dauert ein baseUrl und Anwendung token. Es stellt den Abruftransport und die Client-Autorisierungs-Middleware bereit. Seine Methoden leiten sich direkt von ab Apidaher deckt dieser Client auch Vorgänge ab, die bei der Codegenerierung ausgelassen wurden.
import { ApiClient } from "@cadcamfun/api"
import { Effect } from "effect"
const projects = Effect.gen(function* () {
const api = yield* ApiClient
return yield* api.projects.list()
}).pipe(Effect.provide(ApiClient.layer({ baseUrl, token }))) Die Basis-URL ist die Loopback-Adresse und der zugewiesene Port des Sidecars. Lösen Sie das Problem über die Desktop-Verbindung, anstatt einen Port über mehrere Starts hinweg beizubehalten. Halten Sie Token aus URLs und Protokollen fern.
Design- und Fertigungsanfragen
Einsatz im Projektbetrieb /api/projects; zeichnungen und Werkzeugwege verfügen über eigene Sammlungen und Detailrouten. POST /api/toolpaths/generate erstellt G-Code, analysierte Programmdaten, Warnungen und Statistiken aus Generatoreinstellungen und Geometrie. /suggest, /parse, und /verify stellen Sie Parameterhinweise, G-Code-Interpretation und Bestandswiedergabe bereit. Diese Berechnungen erstellen keinen gespeicherten Werkzeugweg.
POST /api/toolpaths/manufacture akzeptiert einen versionierten CAD-Schnappschuss und gibt ein Kernel-Ergebnis mit NC, Werkzeugzuweisungen, Schnittdaten, Ansprüchen, Problemen und einem Release-Level zurück. Speichern Sie ein resultierendes Dokument separat über einen Werkzeugweg-Erstellungs- oder Aktualisierungsvorgang. Sehen Setups zur Beweisvalidierung während der Persistenz.
POST /api/cad/exact/analyze, /step, und /assembly akzeptieren Sie explizite Elemente oder eine gespeicherte Zeichnungskennung. Beim Lesen einer gespeicherten Zeichnung werden die normalen Zeichnungszugriffsprüfungen des Aufrufers angewendet.
Streaming und Wiederherstellung
Der KI-Stream überträgt typisierte Ereignisse für Text, Begründung, Toolaufrufe und -ergebnisse, Erlaubnis- und Frageanfragen, Wiederholungsversuche, Turn-Status, Kontext und Abschluss. Clients müssen Ereignisse inkrementell konsumieren und die Sitzungskennung beibehalten. Das Beenden einer HTTP-Verbindung ist kein ausreichender Beweis dafür, dass ein Modellwechsel abgeschlossen ist: Der Sitzungsstatus kann nach dem erneuten Herstellen der Verbindung erneut gelesen werden.
KI-Ereignisschemata leben in packages/api/src/ai-events.ts und packages/ai/src/events.ts. Allgemeine Live-Ereignisse verwenden die Ereignisgruppe. Binäre Downloads, JavaScript-Plugin-Bootstrap-Antworten und signierte Roh-Webhook-Körper erfordern eine eigene Transportabwicklung.
Listen Sie die Routen auf, die die Seite ihrer Ergebnisse verwendet page und limit abfrageparameter. Für Maschinenkonfigurationen page der Standardwert ist 1, limit der Standardwert ist 20 und wird auf 1–100 begrenzt, und die Antwort wird übertragen pagination mit page, limit, total, und totalPages (apps/sidecar/src/http/machine-configs.ts). Überprüfen Sie die Referenzseite jeder Gruppe auf die tatsächlich deklarierten Parameter.
Generierte SDKs
@cadcamfun/httpapi-codegen spiegelt HttpApi-Gruppen in Vorgangsmetadaten und generierte Clients wider. Der API-Generator schreibt ein Promise SDK darauf packages/api/src/sdk/generated und Effektkunden an packages/api/src/client/generated. Das öffentliche Promise SDK wird exportiert als @cadcamfun/api/sdk.
bun run --filter @cadcamfun/api generate
bun run --filter @cadcamfun/api generate:check Both generated targets omit profile multipart upload, plugin multipart installation, MCP creation with multiple success schemas, MCP update with colliding identifiers, project toolpath creation with duplicate input names, and plugin file serving with stream headers. The Promise target also omits Stripe raw webhooks, plugin JavaScript bootstrap, binary file download, and the generator's generate/suggest requests. Diese Auslassungen sind explizit in packages/api/scripts/generate-clients.ts; verwenden Sie für diese Vorgänge den Vertragskunden oder den entsprechenden Rohtransport.
Quellorganisation
groups/ enthält Ressourcenverträge. Gemeinsam genutzte Geometrie und CAM-Schemata stammen von @cadcamfun/core; cad-exact.ts, cam-kernel.ts, und cam-program.ts beschreiben umfangreiche CAD/CAM-Ergebnisse und tragbare Dokumente. client.ts erstellt den Vertragsmandanten, während das Generierungsskript generierte Ziele und Auslassungslisten besitzt.
Integrationsregeln
Verwenden Sie Vertragsschemata an Transportgrenzen wieder und behalten Sie Datenbankabhängigkeiten im Sidecar bei. Führen Sie einen Endpunkt über seinen Vertrag, seinen Handler, seinen Dienst oder sein Repository ein und konzentrieren Sie sich gemeinsam auf die HTTP-Abdeckung. Generierte Dateien sind Ausgaben: Bearbeiten Sie ihren Vertrag oder Generator und generieren Sie sie neu. Eine API-Schemaversion, eine Portable-File-Version und eine Plugin-API-Version beschreiben separate Verträge.
Ressourcenreferenz
325 Vorgänge über 232 Pfade und 35 Ressourcengruppen, mit 56 benannten Schemas. Jede Ressourcenseite listet ihre Vorgänge auf und zeigt deklarierte Pfad-/Abfrage-/Header-Parameter, erforderliche und optionale Felder, Nullable-Werte, Inhaltstypen, Erfolgs- und Fehlerstatus sowie vollständige Schemata an.
Die Daten werden von ausgegeben packages/api/src/index.ts, derselbe zusammengesetzte HttpApi-Vertrag, der von den Clients und dem Sidecar verwendet wird. Die Seiten beschreiben den ausgecheckten Vertrag; Überprüfen Sie die laufenden Server /api/openapi.json wenn Sie eine Verbindung zu einer anderen Version herstellen.
HTTP-Ressource
Gesundheit
Integritätsprüfung für öffentliche Prozesse mit Status und Zeitstempel.
HTTP-Ressource
System
Authentifizierte Bereitschaft und Anwendungsversion, die von nativen Clients verwendet werden.
HTTP-Ressource
Projekte
Erstellen, listen, lesen, aktualisieren und entfernen Sie Projekte mit Eigentümer- und Organisationszugriffsprüfungen.
HTTP-Ressource
Arbeitsplatz
Schreibgeschützte Projektzeichnungen, Komponenten, Werkzeugwege, Bibliotheksressourcen und begrenzte Vorschauen für Begleitkunden.
HTTP-Ressource
Zeichnungen
Projektzeichnungen und ihre gespeicherten Geometrie-, Metadaten- und Aktualisierungsvorgänge.
HTTP-Ressource
Komponenten
Wiederverwendbare Projektkomponenten und ihre persistenten Entwurfsdaten.
HTTP-Ressource
Exaktes CAD
Analysieren Sie die genaue Geometrie, exportieren Sie STEP und überprüfen Sie Baugruppenbeziehungen anhand von Szenenschnappschüssen oder gespeicherten Zeichnungen.
HTTP-Ressource
Werkzeugwege
Gespeicherte Bearbeitungsprogramme, Zeichnungszuordnungen und validierte tragbare Fertigungsdokumente.
HTTP-Ressource
Werkzeugwege projizieren
Projektbezogene Auflistung und Erstellung von Werkzeugwegen mit endpunktspezifischen Antwortumschlägen.
HTTP-Ressource
Bearbeitung
Native Herstellung, einstellungsgesteuerte G-Code-Generierung, Vorschläge, Parsing und Wiedergabeüberprüfung.
HTTP-Ressource
Werkzeugwegverlauf
Werkzeugwegversionen, Wiederherstellung, Bibliothekserkennung und Thread-Programmkommentare.
HTTP-Ressource
Materialien
Materialdatensätze, Anwendungsbearbeitungseigenschaften und Ressourcenzugriff.
HTTP-Ressource
Materiallagerung
Materialspeicheranhänge und JSON-Import/Export für den Bibliotheksaustausch.
HTTP-Ressource
Werkzeuge
Fräserdatensätze und -abmessungen, die von Anwendungsbearbeitungs-Workflows verwendet werden.
HTTP-Ressource
Werkzeugaufbewahrung
Werkzeugspeicherdaten und -erfassung oder Werkzeugimport/-export.
HTTP-Ressource
Maschinen
Maschinenkonfigurationsdatensätze, Aktualisierungen, Entfernung und Klonen.
HTTP-Ressource
Maschinenlagerung
Maschinenspeicheranhänge und Konfigurationsimport/-export.
HTTP-Ressource
Bibliothek
Gemeinsam genutzte Bibliotheksdatensätze und Komponenten-, Material- und Werkzeugsuchsammlungen.
HTTP-Ressource
Produktionskosten
Kostenvoranschläge, Berechnungsanfragen, Materialkosten, Betriebskosten und Werkzeugverschleißaufzeichnungen.
HTTP-Ressource
KI-Sitzungen und -Aktionen
Anbieter, Anmeldeinformationen, Konversationen, Streaming-Runden, Aktionsaufrufe, Bridge-Tokens, Fähigkeiten und Sitzungswiederherstellung.
HTTP-Ressource
Historie und Arbeitsabläufe
Projekt Git-kompatible Commits, Branches, Wiederherstellungen, Überprüfungen, GitHub-Spiegelung und Workflow-Versand.
HTTP-Ressource
Projektveranstaltungen
Projektbezogene, vom Server gesendete Ereignisse für Live-Clients.
HTTP-Ressource
Begleiterpaarung
Desktop-Gateway-Status, Aktivierung/Deaktivierung, Gerätekopplung und Gerätesperre.
HTTP-Ressource
Plugins
Plugin-Registrierung, Paketinstallation, Konfiguration, Aktivieren/Deaktivieren und bereitgestellte Plugin-Assets.
HTTP-Ressource
MCP-Konfiguration
MCP-Verbindungskonfigurations-CRUD und Server-Info-Anfragen.
HTTP-Ressource
Dateien
Upload- und Download-Vorgänge mit endpunktspezifischer Nutzlast und Antwortkodierung.
HTTP-Ressource
Schlüsselwertspeicher
JSON-kompatible Präferenz- und Kontexteinträge mit Präfixauflistung und Operationen pro Schlüssel.
HTTP-Ressource
Organisationen
Organisationslisten und verwaltete Organisationsdatensätze.
HTTP-Ressource
Benachrichtigungen
Benachrichtigungsliste, Lesestatusaktualisierungen, Löschung und Alle als gelesen markieren.
HTTP-Ressource
Authentifizierung
Kontoanmeldung, Registrierung, Wiederherstellung, Verifizierung, Magic Links, Sitzungssuche und Passkey-Registrierung.
HTTP-Ressource
Benutzer
Profile, Kontoressourcen, API-Schlüssel, Token-Datensätze, Passwörter und Kontoentfernung.
HTTP-Ressource
Abrechnung
Abonnementinformationen, Stripe-Checkout/Portal-Integration, Testwartung und signierte Webhook-Aufnahme.
HTTP-Ressource
Analytik
Anwendungsmetriken, aktuelle Aktivitäten, Nutzungsabfragen und Tracking-Anfragen.
HTTP-Ressource
Anwendungsdienste
Desktop-Integrationsrouten, verfolgte Projektabläufe, Benachrichtigungen und Push-Abonnement-Datensätze.
HTTP-Ressource
Warteliste
Senden Sie die Wartelistenregistrierung über die lokale Anwendungs-API.
Laden Sie OpenAPI JSON herunter · Verfolgen Sie Anfragen mit erfassten Antworten
Verbindungs- und Anforderungskonventionen
Die API wird vom lokalen Sidecar und nicht von einem fest gehosteten Endpunkt bereitgestellt. Tauri erhält seine dynamisch ausgewählte Loopback-URL und sein Starttoken. Ein manuell gestarteter Sidecar gibt seinen Port in einem JSON-Ready-Ereignis bekannt. Ein gekoppelter mobiler Client stellt stattdessen eine Verbindung über sein konfiguriertes HTTPS-Gateway her.
curl --silent --show-error "$CADCAMFUN_URL/api/projects" \
--header "Authorization: Bearer $CADCAMFUN_TOKEN" Legen Sie beide Variablen aus der tatsächlichen Verbindung fest. Anforderungsvorlagen auf Ressourcenseiten verwenden bewusst Platzhalter und Payload-Dateien. Optionale Transportfelder sind kein Versprechen, dass jeder Geschäftsvorgang sie weglassen kann: Die Projekterstellung lehnt beispielsweise einen fehlenden Namen in ihrem Handler ab.
| Konvention | Kundenverhalten |
|---|---|
| Pfadparameter | Ersetzen Sie das benannte Segment und kodieren Sie seinen Wert per URL. Behandeln Sie einen Bezeichner als ein einzelnes Segment. |
| Abfrageparameter | Kodieren Sie deklarierte Werte. Paginierung und Filterung erfolgen pro Endpunkt; Es gibt keinen universellen Seitengrößenvertrag. |
| JSON-Nutzlast | Senden Sie das deklarierte Objekt mit Content-Type: application/json. Erforderliche Anwesenheit und das Akzeptieren von Null sind unabhängig voneinander. |
| Mehrteilige Nutzlast | Erstellen Sie Formularteile mit dem Upload-Client oder FormData. Lassen Sie den Transport seine Grenze wählen. |
| Binär-, JavaScript- oder Stream-Antwort | Verbrauchen Sie den deklarierten Medientyp. Rufen Sie nicht an response.json() bedingungslos. |
| Fehler | Überprüfen Sie den HTTP-Status und dekodieren Sie die deklarierte Fehlerform des Endpunkts. Fehlerumschläge unterscheiden sich je nach Ressourcenfamilie. |
| Wiederholter Schreibversuch | Lesen Sie den Status nach einem unterbrochenen Vorgang, bevor Sie eine Mutation erneut übermitteln. Der Vertrag sieht keinen universellen Idempotenzschlüsselmechanismus vor. |
Generierte Referenzpflege
packages/web/script/generate-api-reference.mjs liest den verfassten Vertrag mithilfe der installierten Effect-Implementierung des API-Pakets und schreibt den Referenz-JSON. Der Dokumentationsarbeiter konsumiert den generierten Inhalt; Der Anwendungsserver wird nicht für die Beantwortung von Dokumentationsanfragen initialisiert.
bun run generate:api-reference
bun run check:api-reference
bun run check:docs-index Die Ressourcenabdeckung wird anhand jedes deklarierten Vorgangs überprüft. Eine neu hinzugefügte Gruppe muss leserorientierte Metadaten und Navigation erhalten und eine geänderte Anfrage oder Antwort muss neu generiert werden. Handschriftliche Leitfäden erläutern immer noch Autorisierungsregeln, Nebenwirkungen, Dienstkonfiguration und Einschränkungen, die ein HTTP-Schema allein nicht ausdrücken kann.
Integrationsrezepte
Beginnen Sie mit erfasste HTTP-Anfragen um zu sehen, wie Projekterstellung, Geschäftsvalidierung, Trägerablehnung, zugehörige Datensätze und Schlüsselwertpersistenz tatsächlich reagieren. Verwenden typisierte Client-Integration um diese Vorgänge mit dem Promise SDK oder dem Effect-Client zu reproduzieren und ihre unterschiedlichen Fehlerkanäle zu verwalten.
| Integration | Verfahren | Schlüsselzustand, der beibehalten werden soll |
|---|---|---|
| Projektredakteur | Arbeiten erstellen, speichern und erneut öffnen | Projekt-/Ressourcenidentität, gespeicherte Daten, tatsächliche Aktualisierungssemantik. |
| Fertigungspipeline | Einen nativen Job generieren und beibehalten | Erfasste Anfrage, genaue NC/Programm, Freigabeansprüche, passendes tragbares Dokument. |
| Assistenten-Benutzeroberfläche | Ereignisse konsumieren und Sitzungen wiederherstellen | Projekt-/Sitzungsidentität, ausstehende Berechtigungen/Fragen, Terminal-Turn-Status. |
| Externe Fähigkeit | Erstellen Sie ein unterstütztes Plugin | Manifest, Modulexporte, Funktionsgewährung, Argumentvalidierung und Toolergebnis. |
| Überprüfen Sie die Automatisierung | Versionierung und Überprüfung der Projektarbeit | Commit/Ref, struktureller Unterschied, Überprüfungen, festgeschriebener Workflow, einzelne Prüfausgaben. |
| Gepaarter Client | Aktivieren und verwalten Sie den Gerätezugriff | Gateway-Adresse, Zertifikat-Fingerabdruck, individuell widerrufbarer Geräte-Token. |
Diese Rezepte verbinden HTTP-Verträge mit dem tatsächlichen Dienstverhalten. Ein Schema kann die erforderliche Präsenz, Kodierung und eine zurückgegebene Form beschreiben; Der verlinkte Leitfaden erklärt Zugriffsregeln, Persistenzeffekte, unterstützte Wiederherstellung und Einschränkungen, die sich nicht allein aus diesen Typen ableiten lassen.
Vorgänge pro Ressourcengruppe
Der Vertrag deklariert derzeit 270 Vorgänge in 34 Gruppen, alle unter einer einzigen bearer HTTP-Sicherheitsschema. Die einzige Operation ohne Trägersicherheit ist die Untersuchung der öffentlichen Gesundheit. Die Tabelle wird aus dem generierten OpenAPI-Dokument berechnet: Operationen pro Gruppe, die verwendeten HTTP-Methoden, wie viele verschiedene Pfade und ein repräsentativer Pfad.
| Gruppe | Etikett | Ops | Methoden | Wege | Beispielpfad |
|---|---|---|---|---|---|
| Gesundheit | health | 1 | GET 1 | 1 | /api/health |
| System | system | 2 | GET 2 | 2 | /health |
| Projekte | projects | 5 | DELETE 1, GET 2, POST 1, PUT 1 | 2 | /api/projects |
| Zeichnungen | drawings | 5 | DELETE 1, GET 2, POST 1, PUT 1 | 2 | /api/drawings/{id} |
| Komponenten | components | 5 | DELETE 1, GET 2, POST 1, PUT 1 | 2 | /api/components/{id} |
| Exaktes CAD | cadExact | 3 | POST 3 | 3 | /api/cad/exact/analyze |
| Werkzeugwege | toolpaths | 7 | DELETE 1, GET 3, POST 2, PUT 1 | 3 | /api/drawings/{id}/toolpaths |
| Werkzeugwege projizieren | projectToolpaths | 2 | GET 1, POST 1 | 1 | /api/projects/{id}/toolpaths |
| Bearbeitung | toolpathGenerator | 5 | POST 5 | 5 | /api/toolpaths/generate |
| Werkzeugwegverlauf | toolpathExtras | 8 | DELETE 1, GET 3, POST 3, PUT 1 | 5 | /api/toolpaths/library |
| Materialien | materials | 5 | DELETE 1, GET 2, POST 1, PUT 1 | 2 | /api/materials |
| Materiallagerung | materialsStorage | 5 | DELETE 1, GET 2, POST 2 | 2 | /api/materials/export-import |
| Werkzeuge | tools | 5 | DELETE 1, GET 2, POST 1, PUT 1 | 2 | /api/tools |
| Werkzeugaufbewahrung | toolsStorage | 7 | DELETE 1, GET 3, POST 3 | 3 | /api/tools/export-import |
| Maschinen | machineConfigs | 6 | DELETE 1, GET 2, POST 2, PUT 1 | 3 | /api/machine-configs |
| Maschinenlagerung | machineConfigsStorage | 5 | DELETE 1, GET 2, POST 2 | 2 | /api/machine-configs/export-import |
| Bibliothek | library | 8 | DELETE 1, GET 5, POST 1, PUT 1 | 5 | /api/library |
| Produktionskosten | production-costs | 21 | DELETE 4, GET 8, POST 5, PUT 4 | 9 | /api/production-costs/estimates |
| KI-Sitzungen und -Aktionen | ai | 34 | DELETE 3, GET 8, POST 21, PUT 2 | 32 | /api/ai/actions |
| Historie und Arbeitsabläufe | vcs | 22 | GET 10, POST 11, PUT 1 | 19 | /api/projects/{id}/actions/dispatch |
| Projektveranstaltungen | events | 1 | GET 1 | 1 | /api/projects/{id}/events |
| Begleiterpaarung | companion | 5 | DELETE 1, GET 1, POST 3 | 5 | /api/companion |
| Plugins | plugins | 16 | DELETE 1, GET 8, PATCH 1, POST 4, PUT 2 | 12 | /api/plugins |
| MCP-Konfiguration | mcp | 8 | DELETE 2, GET 2, POST 2, PUT 2 | 3 | /api/mcp/config |
| Dateien | files | 2 | GET 1, POST 1 | 2 | /api/download |
| Schlüsselwertspeicher | kv | 4 | DELETE 1, GET 2, PUT 1 | 2 | /api/kv |
| Organisationen | organizations | 5 | DELETE 1, GET 2, POST 1, PUT 1 | 2 | /api/organizations |
| Benachrichtigungen | notifications | 4 | DELETE 1, GET 1, POST 1, PUT 1 | 3 | /api/notifications |
| Authentifizierung | auth | 12 | GET 1, POST 11 | 12 | /api/auth/forgot-password |
| Benutzer | user | 16 | DELETE 2, GET 10, POST 2, PUT 2 | 12 | /api/user/api-keys |
| Abrechnung | billing | 15 | DELETE 1, GET 5, POST 8, PUT 1 | 10 | /api/better-auth-stripe/billing-portal |
| Analytik | analytics | 10 | DELETE 1, GET 7, POST 2 | 9 | /api/analytics |
| Anwendungsdienste | misc | 10 | DELETE 2, GET 3, POST 4, PUT 1 | 6 | /api/app-control/notify |
| Warteliste | waitlist | 1 | POST 1 | 1 | /api/waitlist |
Statuscodes im gesamten Vertrag
Zählt man jede deklarierte Antwort einmal pro Vorgang, erhält man folgendes Bild davon, was ein Client zum Dekodieren bereit sein muss:
| Status | Deklariert am | Typischer Körper |
|---|---|---|
| 200 | 242 Vorgänge | Ressource, Array, nullbarer Wert oder Envelope |
| 201 | 28 Vorgänge | Der erstellte Datensatz (z.B POST /api/projects) |
| 204 | 1-Vorgang | Kein Körper |
| 400 | 206 Vorgänge | BadRequest, EnvBadRequest und familienspezifische Varianten |
| 401 | 269 Vorgänge | Unauthorized (träger-Middleware) |
| 403 | 101 Vorgänge | Forbidden / EnvForbidden |
| 404 | 149 Vorgänge | NotFound / EnvNotFound |
| 405 | 30 Vorgänge | EnvMethodNotAllowed / KeyedMethodNotAllowed |
| 409 | 29 Vorgänge | Conflict / EnvConflict |
| 500 | 264 Vorgänge | InternalError, EnvInternal, KeyedInternal und Familienvarianten |
| 501, 503 | Jeweils 1 Vorgang | Endpunktspezifisch |
Jeder Fehler ist ein mit Effect markierter Fehler, daher enthält sein JSON-Körper immer a _tag diskriminator neben seinen Feldern. Es gibt drei Körperfamilien, die von den alten Handlern übernommen wurden, sodass bestehende Clients weiterhin funktionieren:
{ "_tag": "NotFound", "message": "Project not found" } { "_tag": "EnvNotFound", "success": false, "message": "Material not found", "errors": null } { "_tag": "KeyedInternal", "error": "Failed to load components" } Erfolgsumschläge spiegeln den Fehlerumschlag wider: { success: true, message, data }, wo data vielleicht null. Der EnvelopeOpt variante weggelassen message wenn der Hundeführer keines zur Verfügung gestellt hat. Einschalten _tag und nicht auf der Anwesenheit von message oder error.
Wie eine Anfrage bearbeitet wird
- Der Router gleicht Methode und Pfad ab. Unbekannte Routen erreichen nie einen Handler.
- Die Träger-Middleware vergleicht den Token in konstanter Zeit. Ein fehlendes oder falsches Token stoppt die Anfrage mit 401 vor der Dekodierung.
- Pfad, Abfrage, Header und Text werden anhand der Schemata des Vorgangs dekodiert. Strukturelle Probleme werden zu 400, ohne dass Geschäftscode ausgeführt wird.
- Der Handler löst das handelnde Konto auf, prüft den Besitz oder die Organisationsmitgliedschaft (403/404) und führt den Dienst aus.
- Das Ergebnis wird mit dem deklarierten Erfolgsschema oder der Fehler mit seinem getaggten Fehlerschema und Status codiert.
Antworten, die nicht JSON sind
| Betrieb | Medientyp | Wie man konsumiert |
|---|---|---|
POST /api/ai/chat/stream | text/event-stream | Inkrementell lesen; jede data: zeile ist ein typisiertes Assistentenereignis. |
GET /api/projects/{id}/events | text/event-stream | Live-Projektveranstaltungen; Stellen Sie die Verbindung wieder her und lesen Sie den Status nach einem Ausfall erneut. |
GET /api/plugins/bootstrap.js | application/javascript | Wird vom Plugin-Host geladen und nicht als JSON analysiert. |
GET /api/plugins/serve | application/octet-stream | Plugin-Dateibytes. |
GET /api/download | application/zip | Als Datei speichern; verwenden response.blob() oder auf Festplatte streamen. |
Das generierte Promise SDK lehnt eine Streaming-Antwort ab, deren Inhaltstyp es nicht ist text/event-stream mit ClientError("UnsupportedContentType")und ein einzelnes SSE-Ereignis größer als 16 MiB mit SseEventTooLarge.
Aufruf der API ohne Client
type TaggedError = { _tag: string; message?: string; error?: string }
async function call<T>(base: string, token: string, method: string, path: string, body?: unknown): Promise<T> {
const response = await fetch(new URL(path, base), {
method,
headers: {
authorization: `Bearer ${token}`,
...(body === undefined ? {} : { "content-type": "application/json" }),
},
body: body === undefined ? undefined : JSON.stringify(body),
})
if (response.status === 204) return undefined as T
const payload = await response.json()
if (!response.ok) {
const failure = payload as TaggedError
throw new Error(`${response.status} ${failure._tag}: ${failure.message ?? failure.error}`)
}
return payload as T
}
const project = await call<{ id: string; name: string }>(
process.env.CADCAMFUN_URL!, process.env.CADCAMFUN_TOKEN!,
"POST", "/api/projects", { name: "Bracket" },
) Bevorzugen Sie die generierten Clients in TypeScript: Sie kennen den Erfolgsstatus und die deklarierten Fehlerstatus jeder Operation und behandeln alles andere als UnexpectedStatus statt zu raten.