Vai al contenuto
CADCAMFUN
Documentazione

Documentazione

Riferimento API

Il riferimento completo alle risorse HTTP, l'accesso locale autenticato, i contratti di streaming e i client generati da schemi condivisi.

Tradotto automaticamente dall'inglese. Vedi l'originale in inglese

Panoramica

Il sidecar è un unico effetto HttpApi. Ogni endpoint è tipizzato HttpApiEndpoint con corpi di richiesta e risposta controllati dallo schema, quindi questo riferimento, l'SDK generato e il server in esecuzione provengono dalla stessa dichiarazione in packages/api.

Superficie
325 operazioni

Su 232 percorsi e 35 gruppi di risorse.

Tipi
56 schemi

Forme di richiesta, risposta ed errore, ciascuna collegata dalle operazioni che la utilizzano.

Contrarre
OpenAPI 3.1.0

Emesso dal sidecar a /api/openapi.json; l'istantanea dentro packages/web è controllato da bun run check:api-reference.

Clienti
Una superficie

La visualizzazione web desktop, il compagno mobile, il bridge AI e gli script chiamano tutti questi stessi percorsi.

URL di base

Non esiste un'API CADCAMFUN ospitata. Il sidecar funziona sulla tua macchina, si lega 127.0.0.1 su una porta scelta dal sistema operativo (è in ascolto sulla porta 0), controlla la propria /api/healthe solo allora stampa una riga JSON su stdout. L'URL di base è http://127.0.0.1:<port> da quella linea.

Avvia un sidecar usa e getta e leggi il suo porto
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

La porta cambia ad ogni lancio

Leggilo dal ready linea (la shell del desktop fa esattamente questo) invece di assumere un numero fisso. I log vanno a stderr quindi stdout trasporta solo l'evento ready o error.

Autenticazione

Il contratto dichiara uno schema di sicurezza, bearer (HTTP Bearer). 324 di 325 operazioni lo richiedono; soltanto GET /api/health è pubblico.

CredenzialiInviato comeUtilizzato da
Gettone di avvioAuthorization: Bearer <token>La visualizzazione web desktop e gli script locali; il valore di CADCAMFUN_TOKEN.
Gettone compagnoAuthorization: Bearer <token>Un telefono accoppiato; accesso più ristretto, vedi abbinamento di compagni.
Sessione di contox-session-tokenSeleziona il conto attivo sopra il token al portatore; Vedere identità sotto.
Pubblico e protetto
curl -s "$CADCAMFUN_URL/api/health"
curl -s "$CADCAMFUN_URL/api/projects" -H "Authorization: Bearer $CADCAMFUN_TOKEN"

Convenzioni

  • JSON dentro, JSON fuori. I corpi sono application/json a meno che una scheda non indichi diversamente: due caricamenti in più parti, un webhook con flusso di ottetti, un bootstrap JavaScript, un download zip, un file plugin binario e due flussi di eventi.
  • Gli ID delle operazioni sono punteggiati. projects.get, vcs.commit: il tag del gruppo, un punto, il nome del metodo utilizzato dai client generati.
  • Gli errori vengono digitati. Gli errori vengono dichiarati per endpoint e portano a _tag; accenderlo invece di analizzare i messaggi. Nel contratto, 401 viene dichiarato su 269 operazioni, 500 su 264 e 400 su 206.
  • Gli ancoraggi operativi sono stabili. Ogni carta è collegabile come #op-<method>-<path>, per esempio /docs/api/projects#op-get-api-projects-id.

Streaming

SentieroFormaPorta
GET /api/projects/{id}/eventsSSEModifica gli eventi per un progetto.
POST /api/ai/chat/streamSSEOutput dell'assistente così come viene prodotto, più battiti cardiaci; Vedere Trasmissione tramite intelligenza artificiale.
Segui gli eventi di un progetto
curl -N "$CADCAMFUN_URL/api/projects/$PROJECT_ID/events" \
  -H "Authorization: Bearer $CADCAMFUN_TOKEN"

Clienti

@cadcamfun/api/sdk viene generato da questo stesso contratto: ogni ID operazione seguente è un metodo tipizzato su CadCam.make(...), prendendo un input semplice di parametri del percorso e campi del corpo. Vengono generate 259 delle 325 operazioni; ogni carta mostra la sua chiamata esatta.

@cadcamfun/api/sdk
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" })

Risorse

325 operazioni in 35 gruppi, organizzate in base a ciò che servono.

Nucleo

Progetto

Produzione

Risorse

Estensioni

Conti

Documento OpenAPI

Scaricamento /docs/api/openapi.json (l'istantanea archiviata resa da questo sito) o recupera il documento live da un sidecar in esecuzione su /api/openapi.json. Rigenera lo snapshot con bun run generate:api-reference in packages/web dopo aver modificato un endpoint.

Contratto e server

@cadcamfun/api definisce gli schemi di richiesta e risposta con effetto HttpApi. Esporta la radice Api, record di dominio, errori contrassegnati e client. I gestori delle richieste, le decisioni di autorizzazione, le query del database e le chiamate ai provider vengono eseguiti nel sidecar. L'importazione di uno schema non avvia un server.

Il sidecar pubblica il suo contratto servito su GET /api/openapi.json. Utilizza quel documento in esecuzione per controllare metodi, parametri di percorso, payload e codici di stato per l'applicazione a cui sei connesso. Il server riunisce i suoi gruppi in apps/sidecar/src/layers.ts; viene assemblato il contratto condiviso packages/api/src/index.ts.

Autenticazione e identità

Richiedono percorsi protetti Authorization: Bearer <token>. Il desktop riceve un nuovo token dell'applicazione all'avvio del sidecar. GET /api/health è l'indagine sulla salute pubblica; nativo /health e /version sono protetti. I token al portatore dell'applicazione vengono confrontati con un confronto temporale.

Un facoltativo x-session-token porta una sessione di account JWT. Il token al portatore ammette l'applicazione locale; la sessione seleziona il suo account di recitazione. Una sessione assente, scaduta, non valida o orfana ricade nel profilo locale dell'installazione. I gestori delle risorse controllano quindi la proprietà o l'accesso dell'organizzazione tramite gli assistenti di autorizzazione del repository.

Un token bridge con ambito ammette solo GET /api/ai/actions e POST /api/ai/actions/invoke. Non concede l'accesso al CRUD del progetto, alle impostazioni delle credenziali o ad altri percorsi HTTP. Il suo progetto e l'ambito di lettura/scrittura vengono nuovamente controllati dall'action bridge.

Famiglie di risorse

  • Progetto: progetti, disegni, componenti, versioni di disegni, importazione/esportazione di entità e analisi CAD esatta, esportazione STEP e analisi di assiemi.
  • Produzione: percorsi utensile e versioni, commenti, suggerimenti sul generatore, analisi, verifica della riproduzione, lavori di produzione nativi, materiali, strumenti, configurazioni della macchina, elementi di libreria e costi di produzione.
  • Assistente: provider, credenziali, modelli, sessioni, turni di streaming, controlli di sessione, azioni, memoria di progetto, contesto dell'area di lavoro e consigli stateless.
  • Collaborazione: rami, commit, differenze, richieste pull, revisioni, mirror GitHub, file ed esecuzioni del flusso di lavoro, eventi live e abbinamento di compagni.
  • Servizi applicativi: utenti, autenticazione, organizzazioni, notifiche, file, plug-in, fatturazione, analisi, lista d'attesa, configurazione MCP e archiviazione di valori-chiave locali.

I gruppi di contratto mantengono le forme di risposta specifiche dell'endpoint. Un client dovrebbe decodificare lo schema dell'operazione che chiama invece di presupporre una singola busta JSON a livello di applicazione.

Risposte e fallimenti

Gli errori contrassegnati più comuni vengono mappati su HTTP 400 (BadRequest), 401 (Unauthorized), 403 (Forbidden), 404 (NotFound), 405 (MethodNotAllowed), 409 (Conflict) e 500 (InternalError). I loro schemi dichiarati hanno un carattere leggibile dall'uomo message. Alcuni gruppi utilizzano una busta con success: false, message, e errors; un piccolo numero usa an error campo.

Le risposte con esito positivo possono essere un record, una matrice, un valore nullable o una busta. Envelope include success, message, e data; EnvelopeOpt rende il messaggio facoltativo. Gli endpoint di creazione dichiarano esplicitamente 201 dove appropriato. Non dedurre il successo esclusivamente da un campo JSON senza controllare lo stato HTTP e lo schema dell'endpoint.

La decodifica dello schema convalida l'input del trasporto prima dell'esecuzione del gestore. La convalida aziendale viene ancora eseguita nel servizio: una richiesta strutturalmente valida può fare riferimento a un disegno inaccessibile, contenere un artefatto di produzione obsoleto o richiedere un'operazione di ramo in conflitto.

Utilizzare il client condiviso

ApiClient.layer ci vuole un baseUrl e applicazione token. Fornisce il trasporto di recupero e il middleware di autorizzazione del client. I suoi metodi derivano direttamente da Api, quindi questo client copre anche le operazioni omesse dalla generazione del codice.

Leggi i progetti con il client Effect
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 })))

L'URL di base è l'indirizzo di loopback del sidecar e la porta assegnata. Risolvilo dalla connessione desktop, anziché mantenere una porta tra i lanci. Tieni i token fuori da URL e log.

Richieste di progettazione e produzione

Utilizzo delle operazioni di progetto /api/projects; i disegni e i percorsi utensile hanno le proprie raccolte e percorsi dettagliati. POST /api/toolpaths/generate produce codice G, dati di programma analizzati, avvisi e statistiche dalle impostazioni e dalla geometria del generatore. /suggest, /parse, e /verify esporre consigli sui parametri, interpretazione del codice G e riproduzione delle scorte. Questi calcoli non creano un percorso utensile salvato.

POST /api/toolpaths/manufacture accetta un'istantanea CAD con versione e restituisce un risultato del kernel con NC, assegnazioni di strumenti, dati di taglio, reclami, problemi e un livello di rilascio. Salvare un documento risultante separatamente tramite un'operazione di creazione o aggiornamento del percorso utensile. Vedere Configurazioni per la convalida delle prove durante la persistenza.

POST /api/cad/exact/analyze, /step, e /assembly accettare elementi espliciti o un identificatore di disegno memorizzato. La lettura di un disegno memorizzato applica i normali controlli di accesso al disegno del chiamante.

Streaming e recupero

Il flusso AI trasporta eventi digitati per testo, ragionamento, chiamate e risultati di strumenti, richieste di autorizzazione e domande, tentativi, stato di turno, contesto e completamento. I client devono consumare gli eventi in modo incrementale e conservare l'identificatore di sessione. La fine di una connessione HTTP non è una prova sufficiente che un turno del modello sia terminato: lo stato della sessione può essere letto nuovamente dopo la riconnessione.

Gli schemi di eventi dell'intelligenza artificiale risiedono packages/api/src/ai-events.ts e packages/ai/src/events.ts. Gli eventi live generali utilizzano il gruppo eventi. I download binari, le risposte bootstrap del plug-in JavaScript e i corpi webhook non elaborati firmati richiedono la propria gestione del trasporto.

Elenca i percorsi utilizzati dalle pagine dei risultati page e limit parametri di interrogazione. Per le configurazioni della macchina, page il valore predefinito è 1, limit il valore predefinito è 20 ed è limitato a 1–100 e la risposta trasporta pagination con page, limit, total, e totalPages (apps/sidecar/src/http/machine-configs.ts). Controlla la pagina di riferimento di ciascun gruppo per i parametri che dichiara effettivamente.

SDK generati

@cadcamfun/httpapi-codegen riflette i gruppi HttpApi nei metadati dell'operazione e nei client generati. Il generatore API scrive un SDK Promise packages/api/src/sdk/generated ed effettuare clienti a packages/api/src/client/generated. L'SDK Promise pubblico viene esportato come @cadcamfun/api/sdk.

Rigenera o controlla la deriva del client
bun run --filter @cadcamfun/api generate
bun run --filter @cadcamfun/api generate:check

Entrambi i target generati omettono il caricamento in più parti del profilo, l'installazione in più parti del plug-in, la creazione di MCP con più schemi di successo, l'aggiornamento di MCP con identificatori in collisione, la creazione del percorso utensile del progetto con nomi di input duplicati e la fornitura di file di plug-in con intestazioni di flusso. Il target Promise omette inoltre i webhook grezzi di Stripe, il bootstrap JavaScript del plug-in, il download di file binari e le richieste di generazione/suggerimento del generatore. Queste omissioni sono esplicite in packages/api/scripts/generate-clients.ts; utilizzare il cliente contrattuale o il trasporto grezzo appropriato per tali operazioni.

Organizzazione delle fonti

groups/ contiene contratti di risorse. Da qui provengono la geometria condivisa e gli schemi CAM @cadcamfun/core; cad-exact.ts, cam-kernel.ts, e cam-program.ts descrivere ricchi risultati CAD/CAM e documenti portatili. client.ts costruisce il client del contratto, mentre lo script di generazione possiede gli obiettivi generati e gli elenchi di omissione.

Regole di integrazione

Riutilizza gli schemi di contratto ai confini del trasporto e mantieni le dipendenze del database nel sidecar. Introduci un endpoint attraverso il suo contratto, gestore, servizio o repository e una copertura HTTP mirata insieme. I file generati sono output: modifica il loro contratto o generatore e rigenerali. Una versione dello schema API, una versione del file portatile e una versione dell'API del plug-in descrivono contratti separati.

Riferimento alle risorse

325 operazioni attraverso 232 percorsi e 35 gruppi di risorse, con 56 schemi denominati. Ogni pagina di risorsa elenca le relative operazioni e mostra i parametri di percorso/query/intestazione dichiarati, campi obbligatori e facoltativi, valori nullable, tipi di contenuto, stati di successo ed errore e schemi completi.

I dati vengono emessi da packages/api/src/index.ts, lo stesso contratto HttpApi composto utilizzato dai clienti e dal sidecar. Le pagine descrivono il contratto check-out; ispezionare i server in esecuzione /api/openapi.json se ti connetti a un'altra versione.

Risorsa HTTP

Salute

Sonda sull'integrità del processo pubblico con stato e timestamp.

Risorsa HTTP

Sistema

Disponibilità autenticata e versione dell'applicazione utilizzata dai client nativi.

Risorsa HTTP

Progetti

Crea, elenca, leggi, aggiorna e rimuovi progetti con controlli di accesso del proprietario e dell'organizzazione.

Risorsa HTTP

Spazio di lavoro

Disegni di progetto, componenti, percorsi utensile, risorse di libreria e anteprime limitate di sola lettura per i client associati.

Risorsa HTTP

Disegni

Disegni di progetto e geometria salvata, metadati e operazioni di aggiornamento.

Risorsa HTTP

Componenti

Componenti di progetto riutilizzabili e relativi dati di progettazione persistenti.

Risorsa HTTP

CAD esatto

Analizza la geometria esatta, esporta STEP e controlla le relazioni degli assiemi da istantanee di scene o disegni salvati.

Risorsa HTTP

Percorsi utensile

Programmi di lavorazione salvati, associazioni di disegni e documenti di produzione portatili convalidati.

Risorsa HTTP

Percorsi utensile del progetto

Elenco e creazione di percorsi utensile nell'ambito del progetto con inviluppi di risposta specifici dell'endpoint.

Risorsa HTTP

Lavorazione

Produzione nativa, generazione di codici G basata sulle impostazioni, suggerimenti, analisi e verifica della riproduzione.

Risorsa HTTP

Cronologia del percorso utensile

Versioni del percorso utensile, ripristino, rilevamento delle librerie e commenti sui programmi in thread.

Risorsa HTTP

Materiali

Record dei materiali, proprietà di lavorazione dell'applicazione e accesso alle risorse.

Risorsa HTTP

Stoccaggio materiale

Allegati per l'archiviazione dei materiali e importazione/esportazione JSON per lo scambio di librerie.

Risorsa HTTP

Utensili

Registrazioni e dimensioni della taglierina utilizzate dai flussi di lavoro di lavorazione dell'applicazione.

Risorsa HTTP

Deposito attrezzi

Dati di archiviazione e raccolta degli utensili o importazione/esportazione per utensile.

Risorsa HTTP

Macchine

Record di configurazione della macchina, aggiornamenti, rimozione e clonazione.

Risorsa HTTP

Deposito macchina

Allegati archiviazione macchina e import/export configurazioni.

Risorsa HTTP

Biblioteca

Record di librerie condivise e raccolte di ricerca di componenti, materiali e strumenti.

Risorsa HTTP

Costi di produzione

Stime, richieste di calcolo, costi dei materiali, costi operativi e registrazioni dell'usura degli utensili.

Risorsa HTTP

Sessioni e azioni AI

Provider, credenziali, conversazioni, turni di streaming, invocazione di azioni, token bridge, competenze e ripristino della sessione.

Risorsa HTTP

Storia e flussi di lavoro

Commit, ramificazioni, ripristini, revisioni, mirroring GitHub e invio del flusso di lavoro compatibili con Project Git.

Risorsa HTTP

Eventi del progetto

Eventi inviati dal server nell'ambito del progetto per client live.

Risorsa HTTP

Abbinamento dei compagni

Stato del gateway desktop, attivazione/disattivazione, associazione e revoca del dispositivo.

Risorsa HTTP

Plugin

Registro dei plugin, installazione dei pacchetti, configurazione, abilitazione/disabilitazione e risorse dei plugin serviti.

Risorsa HTTP

Configurazione dell'MCP

CRUD di configurazione della connessione MCP e richieste di informazioni sul server.

Risorsa HTTP

File

Operazioni di caricamento e download con payload specifico dell'endpoint e codifica della risposta.

Risorsa HTTP

Archiviazione di valori-chiave

Preferenze compatibili con JSON e voci di contesto con elenco di prefissi e operazioni per chiave.

Risorsa HTTP

Organizzazioni

Elenchi di organizzazioni e record di organizzazioni gestite.

Risorsa HTTP

Notifiche

Elenco delle notifiche, aggiornamenti dello stato di lettura, eliminazione e contrassegna tutti i letti.

Risorsa HTTP

Autenticazione

Accesso all'account, registrazione, ripristino, verifica, collegamenti magici, ricerca di sessioni e registrazione della passkey.

Risorsa HTTP

Utenti

Profili, risorse dell'account, chiavi API, record di token, password e rimozione dell'account.

Risorsa HTTP

Fatturazione

Informazioni sull'abbonamento, integrazione del portale/checkout Stripe, manutenzione di prova e acquisizione di webhook firmati.

Risorsa HTTP

Analitica

Metriche dell'applicazione, attività recente, query sull'utilizzo e richieste di monitoraggio.

Risorsa HTTP

Servizi applicativi

Percorsi di integrazione desktop, operazioni di progetto monitorate, notifiche e record di sottoscrizione push.

Risorsa HTTP

Lista d'attesa

Invia la registrazione alla lista d'attesa tramite l'API dell'applicazione locale.

Scarica OpenAPI JSON · Segui le richieste con le risposte acquisite

Convenzioni di connessione e richiesta

L'API viene fornita dal sidecar locale anziché da un endpoint ospitato fisso. Tauri ottiene l'URL di loopback selezionato dinamicamente e il token di avvio. Un sidecar avviato manualmente annuncia il suo port in un evento pronto per JSON. Un client mobile accoppiato si connette invece tramite il gateway HTTPS configurato.

Leggi con la tua attuale connessione sidecar
curl --silent --show-error "$CADCAMFUN_URL/api/projects" \
  --header "Authorization: Bearer $CADCAMFUN_TOKEN"

Imposta entrambe le variabili dalla connessione effettiva. I modelli di richiesta nelle pagine delle risorse utilizzano deliberatamente segnaposto e file di payload. I campi di trasporto facoltativi non sono promesse che ogni operazione aziendale può omettere: la creazione del progetto, ad esempio, rifiuta un nome mancante nel suo gestore.

ConvenzioneComportamento del cliente
Parametri del percorsoSostituisci il segmento denominato e codifica nell'URL il suo valore. Tratta un identificatore come un singolo segmento.
Parametri di queryCodificare i valori dichiarati. L'impaginazione e il filtraggio sono per endpoint; non esiste un contratto universale sulle dimensioni della pagina.
Carico utile JSONInvia l'oggetto dichiarato con Content-Type: application/json. La presenza richiesta e l'accettazione del null sono indipendenti.
Carico utile multiparteCrea parti del modulo con il client di caricamento o FormData; lascia che sia il trasporto a scegliere il suo confine.
Risposta binaria, JavaScript o flussoUtilizzare il tipo di supporto dichiarato. Non chiamare response.json() incondizionatamente.
ErroriControlla lo stato HTTP e decodifica la forma di errore dichiarata dell'endpoint. Gli inviluppi di errore differiscono tra le famiglie di risorse.
Riprovata scriveLeggi lo stato dopo un'operazione interrotta prima di inviare nuovamente una mutazione. Il contratto non prevede un meccanismo universale di chiave di idepotenza.

Manutenzione dei riferimenti generati

packages/web/script/generate-api-reference.mjs legge il contratto composto utilizzando l'implementazione Effect installata nel pacchetto API e scrive il JSON di riferimento. Il Documentation Worker consuma il contenuto generato; non inizializza il server delle applicazioni per rispondere alle richieste di documentazione.

Da pacchetti/web
bun run generate:api-reference
bun run check:api-reference
bun run check:docs-index

La copertura delle risorse viene verificata rispetto a ogni operazione dichiarata. Un gruppo appena aggiunto deve ricevere metadati e navigazione rivolti al lettore e una richiesta o risposta modificata deve essere rigenerata. Le guide scritte a mano spiegano ancora le regole di autorizzazione, gli effetti collaterali, la configurazione del servizio e i limiti che uno schema HTTP da solo non può esprimere.

Ricette di integrazione

Inizia con richieste HTTP catturate per vedere come rispondono effettivamente la creazione del progetto, la convalida aziendale, il rifiuto della portante, i record correlati e la persistenza del valore-chiave. Utilizzo integrazione client digitato per riprodurre tali operazioni con il client Promise SDK o Effect e gestire i relativi canali di errore distinti.

IntegrazioneProceduraStato chiave da mantenere
Redattore del progettoCrea, salva e riapri il lavoroIdentità del progetto/risorsa, dati salvati, semantica di aggiornamento effettiva.
Pipeline di produzioneGenerare e mantenere un lavoro nativoRichiesta catturata, NC/programma esatto, richieste di rilascio, documento portatile corrispondente.
Interfaccia utente dell'assistenteConsumare eventi e recuperare sessioniIdentità progetto/sessione, autorizzazioni/domande in sospeso, stato di turno del terminale.
Capacità esternaCrea un plugin supportatoManifesto, esportazioni di moduli, concessione di capacità, convalida degli argomenti e risultato dello strumento.
Esaminare l'automazioneVersione e revisione del lavoro del progettoCommit/ref, differenze strutturali, revisioni, flusso di lavoro impegnato, output di controlli individuali.
Cliente accoppiatoAbilita e gestisci l'accesso al dispositivoIndirizzo gateway, impronta digitale del certificato, token del dispositivo revocabile individualmente.

Queste ricette collegano i contratti HTTP al comportamento del servizio reale. Uno schema può descrivere la presenza richiesta, la codifica e una forma restituita; la sua guida collegata spiega le regole di accesso, gli effetti di persistenza, il ripristino supportato e i limiti che non possono essere dedotti solo da questi tipi.

Operazioni per gruppo di risorse

Il contratto attualmente dichiara 270 operazioni in 34 gruppi, tutti sotto un unico bearer Schema di sicurezza HTTP. L’unica operazione senza sicurezza del portatore è l’indagine sulla salute pubblica. La tabella viene calcolata dal documento OpenAPI generato: operazioni per gruppo, metodi HTTP utilizzati, quanti percorsi distinti e un percorso rappresentativo.

GruppoEtichettaOpMetodiPercorsiPercorso di esempio
Salutehealth1OTTIENI 11/api/health
Sistemasystem2OTTIENI 22/health
Progettiprojects5ELIMINA 1, OTTIENI 2, POST 1, PUT 12/api/projects
Disegnidrawings5ELIMINA 1, OTTIENI 2, POST 1, PUT 12/api/drawings/{id}
Componenticomponents5ELIMINA 1, OTTIENI 2, POST 1, PUT 12/api/components/{id}
CAD esattocadExact3PUBBLICARE 33/api/cad/exact/analyze
Percorsi utensiletoolpaths7ELIMINA 1, OTTIENI 3, POST 2, PUT 13/api/drawings/{id}/toolpaths
Percorsi utensile del progettoprojectToolpaths2OTTIENI 1, PUBBLICA 11/api/projects/{id}/toolpaths
LavorazionetoolpathGenerator5PUBBLICARE 55/api/toolpaths/generate
Cronologia del percorso utensiletoolpathExtras8ELIMINA 1, OTTIENI 3, POST 3, PUT 15/api/toolpaths/library
Materialimaterials5ELIMINA 1, OTTIENI 2, POST 1, PUT 12/api/materials
Stoccaggio materialematerialsStorage5ELIMINA 1, OTTIENI 2, PUBBLICA 22/api/materials/export-import
Utensilitools5ELIMINA 1, OTTIENI 2, POST 1, PUT 12/api/tools
Deposito attrezzitoolsStorage7ELIMINA 1, OTTIENI 3, PUBBLICA 33/api/tools/export-import
MacchinemachineConfigs6ELIMINA 1, OTTIENI 2, POST 2, PUT 13/api/machine-configs
Deposito macchinamachineConfigsStorage5ELIMINA 1, OTTIENI 2, PUBBLICA 22/api/machine-configs/export-import
Bibliotecalibrary8ELIMINA 1, OTTIENI 5, POST 1, PUT 15/api/library
Costi di produzioneproduction-costs21ELIMINA 4, OTTIENI 8, POST 5, PUT 49/api/production-costs/estimates
Sessioni e azioni AIai34ELIMINA 3, OTTIENI 8, POST 21, PUT 232/api/ai/actions
Storia e flussi di lavorovcs22OTTIENI 10, POST 11, PUT 119/api/projects/{id}/actions/dispatch
Eventi del progettoevents1OTTIENI 11/api/projects/{id}/events
Abbinamento dei compagnicompanion5ELIMINA 1, OTTIENI 1, PUBBLICA 35/api/companion
Pluginplugins16ELIMINA 1, OTTIENI 8, PATCH 1, POST 4, PUT 212/api/plugins
Configurazione dell'MCPmcp8ELIMINA 2, OTTIENI 2, POST 2, PUT 23/api/mcp/config
Filefiles2OTTIENI 1, PUBBLICA 12/api/download
Archiviazione di valori-chiavekv4ELIMINA 1, OTTIENI 2, metti 12/api/kv
Organizzazioniorganizations5ELIMINA 1, OTTIENI 2, POST 1, PUT 12/api/organizations
Notifichenotifications4ELIMINA 1, OTTIENI 1, POST 1, PUT 13/api/notifications
Autenticazioneauth12OTTIENI 1, PUBBLICA 1112/api/auth/forgot-password
Utentiuser16ELIMINA 2, OTTIENI 10, POST 2, PUT 212/api/user/api-keys
Fatturazionebilling15ELIMINA 1, OTTIENI 5, POST 8, PUT 110/api/better-auth-stripe/billing-portal
Analiticaanalytics10ELIMINA 1, OTTIENI 7, PUBBLICA 29/api/analytics
Servizi applicativimisc10ELIMINA 2, OTTIENI 3, POST 4, PUT 16/api/app-control/notify
Lista d'attesawaitlist1PUBBLICARE 11/api/waitlist

Codici di stato nel contratto

Contare ciascuna risposta dichiarata una volta per operazione fornisce questa immagine di ciò che un client deve essere pronto a decodificare:

StatoDichiarato ilCorpo tipico
200242 operazioniRisorsa, array, valore nullable o Envelope
20128 operazioniIl record creato (ad es POST /api/projects)
2041 operazioneNessuno
400206 operazioniBadRequest, EnvBadRequest e varianti specifiche della famiglia
401269 operazioniUnauthorized (middleware portante)
403101 operazioniForbidden / EnvForbidden
404149 operazioniNotFound / EnvNotFound
40530 operazioniEnvMethodNotAllowed / KeyedMethodNotAllowed
40929 operazioniConflict / EnvConflict
500264 operazioniInternalError, EnvInternal, KeyedInternal e varianti familiari
501, 5031 operazione ciascunoSpecifico per l'endpoint

Ogni errore è un errore con tag Effect, quindi il suo corpo JSON contiene sempre un file _tag discriminatore accanto ai suoi campi. Esistono tre famiglie di corpi, ereditate dai gestori legacy in modo che i client esistenti continuino a funzionare:

Errore normale (solo messaggio)
{ "_tag": "NotFound", "message": "Project not found" }
Errore della busta
{ "_tag": "EnvNotFound", "success": false, "message": "Material not found", "errors": null }
Errore con chiave (alcuni percorsi della libreria)
{ "_tag": "KeyedInternal", "error": "Failed to load components" }

Le buste di successo rispecchiano la busta di errore: { success: true, message, data }, dove data forse null. IL EnvelopeOpt la variante omette message quando il conduttore non ne ha fornito uno. Accendi _tag piuttosto che sulla presenza di message o error.

Come viene elaborata una richiesta

clienterecuperare/SDK corrispondenza del percorsometodo + percorso assegno al portatore401 Non autorizzato decodifica dello schema400 su input errato gestoreaccesso + logica codificaresuccesso / _tag x-session-token sceglie l'account attivo; assente o non valido ritorna al profilo locale
  1. Il router corrisponde al metodo e al percorso. I percorsi sconosciuti non raggiungono mai un handler.
  2. Il middleware al portatore confronta il token in tempo costante. Un token mancante o errato interrompe la richiesta con 401 prima di qualsiasi decodifica.
  3. Percorso, query, intestazioni e corpo vengono decodificati rispetto agli schemi dell'operazione. I problemi strutturali diventano 400 senza eseguire il codice aziendale.
  4. Il gestore risolve l'account attivo, controlla la proprietà o l'appartenenza all'organizzazione (403/404) ed esegue il servizio.
  5. Il risultato è codificato con lo schema di successo dichiarato o l'errore con lo schema e lo stato di errore contrassegnati.

Risposte che non sono JSON

OperazioneTipo di supportoCome consumare
POST /api/ai/chat/streamtext/event-streamLeggi in modo incrementale; ogni data: la linea è un evento dell'assistente digitato.
GET /api/projects/{id}/eventstext/event-streamEventi di progetto dal vivo; riconnettersi e rileggere lo stato dopo una caduta.
GET /api/plugins/bootstrap.jsapplication/javascriptCaricato dall'host del plugin, non analizzato come JSON.
GET /api/plugins/serveapplication/octet-streamByte del file plugin.
GET /api/downloadapplication/zipSalva come file; utilizzo response.blob() o eseguire lo streaming su disco.

L'SDK Promise generato rifiuta una risposta di streaming il cui tipo di contenuto non lo è text/event-stream con ClientError("UnsupportedContentType")e un singolo evento SSE più grande di 16 MiB con SseEventTooLarge.

Chiamata all'API senza client

Wrapper di recupero con digitazione minima
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" },
)

Preferiscono i client generati in TypeScript: conoscono lo stato di successo di ogni operazione e gli stati di errore dichiarati e trattano qualsiasi altra cosa come UnexpectedStatus invece di indovinare.

Nel 3D

Gruppi API per dimensione Trascina per orbitare · scorri per ingrandire · trascina con il tasto destro per eseguire la panoramica
Every API group as a column, height = operations counted from the generated OpenAPI document (270 in total). Rows are the six sidebar categories; ai (34), history (22) and costs (21) are the largest groups.