Dokumentation
KI-Sitzungen und -Aktionen
Anbieter, Anmeldeinformationen, Konversationen, Streaming-Runden, Aktionsaufrufe, Bridge-Tokens, Fähigkeiten und Sitzungswiederherstellung.
Automatisch aus dem Englischen übersetzt. Englisches Original ansehen
Senden Sie diese Anfragen an Ihren eigenen laufenden Sidecar. Werte bleiben in diesem Browser.
Wie das funktioniert
Der Sidecar lauscht an einem beim Start ausgewählten Loopback-Port und gibt ihn dort aus ready linie; Verwenden Sie diese URL und die CADCAMFUN_TOKEN es wurde damit begonnen. Anfragen gehen direkt von dieser Seite an diese Adresse.
Der Sidecar sendet CORS-Header nur an die Tauri-Ursprünge und an http://localhost oder http://127.0.0.1 auf jedem Port. Von den gehosteten Dokumenten aus blockiert der Browser die Antwort, also führen Sie die Dokumente lokal aus (bun run dev in packages/web), um den Spielplatz zu nutzen, oder kopieren Sie die Anfrage als Curl. Um zu experimentieren, ohne echte Daten zu berühren, starten Sie den Sidecar mit CADCAMFUN_DATA_DIR zeigte auf ein Wegwerfverzeichnis – siehe die API-Komplettlösung.
Operationen
52 Endpunkte in der ai gruppe, generiert aus der eigenen Gruppe des Sidecars OpenAPI-Dokument. Geschützte Operationen dauern Authorization: Bearer $CADCAMFUN_TOKEN; sehen authentifizierung. Verhalten und Grenzen sind in das Subsystemhandbuch.
| erhalten | /api/ai/actions | ai.actions |
| post | /api/ai/actions/invoke | ai.invokeAction |
| post | /api/ai/bridge/tokens | ai.issueBridgeToken |
| erhalten | /api/ai/bridge/tokens | ai.bridgeTokens |
| löschen | /api/ai/bridge/tokens/{id} | ai.revokeBridgeToken |
| erhalten | /api/ai/agents | ai.agents |
| post | /api/ai/sessions/control | ai.sessionControl |
| post | /api/ai/sessions/state | ai.sessionState |
| post | /api/ai/sessions/remove | ai.removeSession |
| erhalten | /api/ai/extensions/mcp | ai.mcpServers |
| setzen | /api/ai/extensions/mcp | ai.saveMcpServer |
| löschen | /api/ai/extensions/mcp/{name} | ai.deleteMcpServer |
| löschen | /api/ai/extensions/plugins/{id} | ai.removeExtensionPlugin |
| setzen | /api/ai/extensions/plugins/{id} | ai.toggleExtensionPlugin |
| erhalten | /api/ai/extensions/plugins | ai.extensionPlugins |
| post | /api/ai/extensions/plugins | ai.installExtensionPlugin |
| erhalten | /api/ai/extensions/mods | ai.extensionMods |
| setzen | /api/ai/extensions/mods/{id} | ai.toggleExtensionMod |
| löschen | /api/ai/extensions/mods/{id} | ai.removeExtensionMod |
| erhalten | /api/ai/modes | ai.modes |
| erhalten | /api/ai/skills | ai.skills |
| setzen | /api/ai/skills | ai.saveSkill |
| löschen | /api/ai/skills/{name} | ai.deleteSkill |
| setzen | /api/ai/credentials | ai.setCredentials |
| löschen | /api/ai/credentials/{provider} | ai.clearCredentials |
| erhalten | /api/ai/status | ai.status |
| erhalten | /api/ai/models | ai.models |
| erhalten | /api/ai/providers | ai.providers |
| post | /api/ai/models/refresh | ai.refreshModels |
| erhalten | /api/ai/prompts | ai.prompts |
| post | /api/ai/title | ai.title |
| post | /api/ai/design-analysis | ai.designAnalysis |
| post | /api/ai/machining-parameters | ai.machiningParameters |
| post | /api/ai/gcode-optimization | ai.gcodeOptimization |
| post | /api/ai/design-suggestions | ai.designSuggestions |
| post | /api/ai/chat | ai.chat |
| post | /api/ai/chat/stream | ai.chatStream |
| post | /api/ai/sessions/prompt | ai.sessionPrompt |
| erhalten | /api/ai/sessions/{sessionId}/stream | ai.sessionStream |
| erhalten | /api/ai/sessions | ai.sessionList |
| erhalten | /api/ai/sessions/{sessionId}/messages | ai.sessionMessages |
| post | /api/ai/chat/queue | ai.chatQueue |
| post | /api/ai/chat/abort | ai.chatAbort |
| post | /api/ai/permission/reply | ai.permissionReply |
| post | /api/ai/completion | ai.completion |
| post | /api/ai/analyze-gcode | ai.analyzeGcode |
| post | /api/ai/gcode | ai.gcode |
| post | /api/ai/toolpath-analysis | ai.toolpathAnalysis |
| post | /api/ai/feedback | ai.feedback |
| post | /api/ai/proxy | ai.proxy |
| post | /api/ai/oauth/authorize | ai.oauthAuthorize |
| post | /api/ai/oauth/complete | ai.oauthComplete |
/api/ai/actions
ai.actions Erfordert Authorization: Bearer <token>.
200 objekt application/json
{ tools: Array<{ id: string description: string kind: "read" | "write" | "destructive" actions: Array<{ id: string name: string kind: "read" | "write" | "destructive" }> parameters: object }> }
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Beispielantwort erfasst · 200
{
"tools": [
{
"id": "cad",
"description": "Read the open drawing. All actions are read-only.\n\nActions\n- describe: the drawing: counts, bounds and layers. Start here.\n- check: model checks (sizes, rotations, Boolean operands, duplicates, floating parts); fix findings after modelling.\n- relations: bounds, placement, distances and parameter dependencies; equal names do not bind parameters.\n- grep: search ids, names, layers and properties; includes each parametric hit's revision.\n- vision: the CAD viewport plus scene evidence as an image.\n- inspect_elements: full properties and bounds of elements, paged.\n- inspect_layers: the workspace layers and the active one.\n- inspect_search: elements whose text matches a query, paged.\n- inspect_property: one property of one element by path, paged by characters.\n- parametric_validate: rebuild a parametric history and report what it cannot build.\n- parametric_inspect: history, parameters and report of one parametric part.\n- drawing: technical sheet from one elementId or history; options (sheet, projection, views, section, detail: see schema). SVG, dimensions, callouts, warnings; exact B-rep edges where available; nothing stored.\n- parametric_test: run parameter variants; report bodies, volumes and dimensional checks.\n- parametric_dfm: manufacturability findings for a history or an existing part.\n- parametric_exact: exact B-rep per body (volume, area, centroid, throughHoles, faces, surfaces) or why mesh-only; STEP on request.\n- exact: every solid on the exact kernel: validity, volume, bounds, holes, and whether CAM machines it by features or as a 3D surface, with why.\n- assembly: exact interference (clash volumes), bill of materials with mass, hole joints, fasteners still missing.\n- parametric_fastener: thread, tap drill, clearance and counterbore of a metric size.\n- parametric_recipe: standard part history from `recipe` (mounting_plate, flange, l_bracket, stepped_shaft, pipe_bend, duct_transition, enclosure) and `params`; cad_edit.parametric_recipe_create stores it.\n- parametric_from_element: history with named parameters from an existing solid, flat shape or component; cad_edit.parametric_convert stores it.\n\nParameters (mm, radians; ids are read, never invented)\n- describe, check, inspect_layers: none.\n- relations: firstId, secondId - two different existing ids.\n- grep: query (1-200 chars), layerId, parametricOnly, includeParameters, offset, limit (1-50).\n- vision: focus - wha
… SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// no input
const result = await client.ai.actions() curl
curl --request GET "${CADCAMFUN_URL}/api/ai/actions" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.invokeAction Erfordert Authorization: Bearer <token>.
{ projectId: string drawingId?: string | null callId?: string | null tool: string input: object }
200 objekt application/json
{ tool: string action: string result: unknown }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiInvokeActionInput
const result = await client.ai.invokeAction({
projectId: "",
drawingId: "",
callId: "",
tool: "",
input: {}
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/actions/invoke" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/bridge
ai.issueBridgeToken Erfordert Authorization: Bearer <token>.
{ name?: string | null projectId: string mode: "read" | "write" days?: number | "Infinity" | "-Infinity" | "NaN" | null }
200 objekt application/json
{ info: { id: string name: string projectId: string mode: "read" | "write" userId: string createdAt: string expiresAt: string } token: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiIssueBridgeTokenInput
const result = await client.ai.issueBridgeToken({
name: "",
projectId: "",
mode: "read",
days: 0
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/bridge/tokens" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.bridgeTokens Erfordert Authorization: Bearer <token>.
200 Array<Objekt> application/json
Array<{ id: string name: string projectId: string mode: "read" | "write" userId: string createdAt: string expiresAt: string }>
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Beispielantwort erfasst · 200
[] SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// no input
const result = await client.ai.bridgeTokens() curl
curl --request GET "${CADCAMFUN_URL}/api/ai/bridge/tokens" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.revokeBridgeToken Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| ausweis | weg | zeichenfolge | erforderlich |
200 objekt application/json
{ message: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiRevokeBridgeTokenInput
const result = await client.ai.revokeBridgeToken({
id: "<id>"
}) curl
curl --request DELETE "${CADCAMFUN_URL}/api/ai/bridge/tokens/<id>" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/agents
ai.agents Erfordert Authorization: Bearer <token>.
200 Array<Objekt> application/json
Array<{ id: string title: string description: string tools: string[] edits: boolean kind?: string | null canEdit?: boolean | null delegates?: boolean | null }>
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Beispielantwort erfasst · 200
[
{
"id": "general",
"title": "General",
"description": "Does drawing and machining itself, and delegates separable work to subagents (background tasks included).",
"tools": [],
"edits": true
},
{
"id": "cad",
"title": "CAD",
"description": "Drawing and 3D modelling. Reads the machining side but does not change operations, G-code or the machining libraries.",
"tools": [],
"edits": true
},
{
"id": "cam",
"title": "CAM",
"description": "Machining: operations, G-code, verification and the machining libraries. Reads the drawing but does not change it.",
"tools": [],
"edits": true
}
] SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// no input
const result = await client.ai.agents() curl
curl --request GET "${CADCAMFUN_URL}/api/ai/agents" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/sessions
ai.sessionControl Erfordert Authorization: Bearer <token>.
{ sessionId: string projectId?: string | null action: "status" | "compact" | "cancel_task" | "answer_question" | "reject_question" | "reply_permission" | "consolidate_memory" | "context" | "acceptance" | "set_acceptance" criteria?: unknown | null taskId?: string | null requestId?: string | null answers?: string[][] | null decision?: "once" | "always" | "reject" | null model?: { provider?: string | null model?: string | null tier?: "fast" | "balanced" | "best" | null variant?: string | null } | null }
200 objekt application/json
{ goal?: { objective: string status: "active" | "paused" | "blocked" | "usage_limited" | "budget_limited" | "complete" iteration: number | "Infinity" | "-Infinity" | "NaN" tokensUsed: number | "NaN" tokenBudget?: number | "NaN" | null } | null permissions?: Array<{ requestId: string sessionId: string permission: string patterns: string[] }> | null busy: boolean text: string tasks: Array<{ id: string agent: string description: string status: "queued" | "running" | "completed" | "error" | "cancelled" background: boolean text?: string | null error?: string | null createdAt?: number | "Infinity" | "-Infinity" | "NaN" | null startedAt?: number | "Infinity" | "-Infinity" | "NaN" | null finishedAt?: number | "Infinity" | "-Infinity" | "NaN" | null }> questions: Array<{ requestId: string questions: Array<{ header: string question: string options: Array<{ label: string description: string }> multiple?: boolean | null custom?: boolean | null }> }> engineeringAcceptance?: { status: "accepted" | "failed" | "unmeasured" | "stale" | "not_configured" projectId: string drawingId: string revision: string criteriaDigest?: string | null checks: Array<{ id: string status: "pass" | "fail" | "stale" reason?: string | null report?: unknown | null }> note: string } | null context: { memory?: { enabled: boolean memoryEnabled: boolean minHours: number | "Infinity" | "-Infinity" | "NaN" minSessions: number | "NaN" lastBrainAt: number | "NaN" hoursSinceLastBrain: number | "NaN" sessionsSinceLastBrain: number | "NaN" shouldTrigger: boolean } | null source: "host-config" auto: boolean prune: boolean reserved?: number | "Infinity" | "-Infinity" | "NaN" | null provider?: string | null model?: string | null contextWindow?: number | "Infinity" | "-Infinity" | "NaN" | null maxOutput?: number | "Infinity" | "-Infinity" | "NaN" | null inputWindow?: number | "Infinity" | "-Infinity" | "NaN" | null requestOutput?: number | "Infinity" | "-Infinity" | "NaN" | null compactAt?: number | "Infinity" | "-Infinity" | "NaN" | null tokens?: number | "Infinity" | "-Infinity" | "NaN" | null compacted: boolean breakdown?: { estimatedTotal: number | "Infinity" | "-Infinity" | "NaN" categories: Array<{ category: string tokens: number | "NaN" }> } | null } }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiSessionControlInput
const result = await client.ai.sessionControl({
sessionId: "",
projectId: "",
action: "status",
criteria: null,
taskId: "",
requestId: "",
answers: [
[
""
]
],
decision: "once",
model: {}
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/sessions/control" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.sessionState Erfordert Authorization: Bearer <token>.
{ sessionId: string projectId?: string | null }
200 objekt application/json
{ busy: boolean text: string error?: string | null tasks?: Array<{ id: string agent: string description: string status: "queued" | "running" | "completed" | "error" | "cancelled" background: boolean text?: string | null error?: string | null createdAt?: number | "Infinity" | "-Infinity" | "NaN" | null startedAt?: number | null finishedAt?: number | null }> | null events?: Array<{ type: "tool_call" sessionId: string agent?: string callId: string tool: string input: unknown } | { type: "tool_result" sessionId: string agent?: string callId: string tool: string ok: boolean output: string images?: string[] } | { type: "todo" sessionId: string todos: Array<{ id?: string content: string status: "pending" | "in_progress" | "completed" | "cancelled" priority?: string }> } | { type: "tool_diagnostic" sessionId: string agent?: string callId: string tool: string kind: "argument" | "execution" | "partial" | "verification" severity: "error" | "warning" | "info" message: string recovery?: string mutationApplied?: boolean }> | null usage?: { inputTokens: number outputTokens: number } | null }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiSessionStateInput
const result = await client.ai.sessionState({
sessionId: "",
projectId: ""
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/sessions/state" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.removeSession Erfordert Authorization: Bearer <token>.
{ sessionId: string projectId?: string | null }
200 objekt application/json
{ removed: boolean }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiRemoveSessionInput
const result = await client.ai.removeSession({
sessionId: "",
projectId: ""
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/sessions/remove" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.sessionPrompt Erfordert Authorization: Bearer <token>.
{ permissionMode?: "auto" | "ask" | "approve" | null agent?: string | null mode?: string | null attachments?: Array<{ name: string mime?: string | null data: string encoding?: "base64" | "text" | null }> | null message?: string | null sessionId?: string | null projectId?: string | null drawingId?: string | null context?: string | null includeContext?: boolean | null model?: { provider?: string | null model?: string | null tier?: "fast" | "balanced" | "best" | null variant?: string | null } | null }
200 objekt application/json
{ sessionId: string seq: number | "Infinity" | "-Infinity" | "NaN" }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
409 ConflictEncoded application/json
ConflictEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/sessions/prompt`, {
method: "POST",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/sessions/prompt" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.sessionStream Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| sessionId | weg | zeichenfolge | erforderlich |
| nach | abfrage | zeichenfolge | null | optional |
200 objekt text/event-stream
{ id: string | null event: string data: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/sessions/${sessionId}/stream`, {
method: "GET",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request GET "${CADCAMFUN_URL}/api/ai/sessions/<sessionId>/stream" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.sessionList Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| projectId | abfrage | zeichenfolge | erforderlich |
| limit | abfrage | zeichenfolge | null | optional |
200 Array<Objekt> application/json
Array<{ id: string projectId: string title: string createdAt: string | null updatedAt: string | null busy: boolean }>
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/sessions`, {
method: "GET",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request GET "${CADCAMFUN_URL}/api/ai/sessions?projectId=<projectId>" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.sessionMessages Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| sessionId | weg | zeichenfolge | erforderlich |
| vor | abfrage | zeichenfolge | null | optional |
| limit | abfrage | zeichenfolge | null | optional |
200 objekt application/json
{ sessionId: string messages: Array<{ id: string role: "user" | "assistant" text: string createdAt: string | null agent: string | null model: string | null error: string | null truncated: boolean tools: Array<{ callId: string tool: string status: "pending" | "running" | "completed" | "error" input?: unknown | null output: string truncated: boolean }> }> before: string | null }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/sessions/${sessionId}/messages`, {
method: "GET",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request GET "${CADCAMFUN_URL}/api/ai/sessions/<sessionId>/messages" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/extensions
ai.mcpServers Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| projectId | abfrage | zeichenfolge | erforderlich |
200 objekt application/json
{ servers: Array<{ name: string config: { type: "local" command: string[] environment?: { [key: string]: string } | null enabled: boolean timeout?: number | "Infinity" | "-Infinity" | "NaN" | null } | { type: "remote" url: string headers?: { [key: string]: string } | null oauth?: false status: string }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/extensions/mcp`, {
method: "GET",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request GET "${CADCAMFUN_URL}/api/ai/extensions/mcp?projectId=<projectId>" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.saveMcpServer Erfordert Authorization: Bearer <token>.
{ projectId: string name: string config: { type: "local" command: string[] environment?: { [key: string]: string } | null enabled: boolean timeout?: number | "Infinity" | "-Infinity" | "NaN" | null } | { type: "remote" url: string headers?: { [key: string]: string } | null oauth?: false }
200 objekt application/json
{ servers: Array<{ name: string config: { type: "local" command: string[] environment?: { [key: string]: string } | null enabled: boolean timeout?: number | "Infinity" | "-Infinity" | "NaN" | null } | { type: "remote" url: string headers?: { [key: string]: string } | null oauth?: false status: string }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/extensions/mcp`, {
method: "PUT",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request PUT "${CADCAMFUN_URL}/api/ai/extensions/mcp" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.deleteMcpServer Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| name | weg | zeichenfolge | erforderlich |
| projectId | abfrage | zeichenfolge | erforderlich |
200 objekt application/json
{ servers: Array<{ name: string config: { type: "local" command: string[] environment?: { [key: string]: string } | null enabled: boolean timeout?: number | "Infinity" | "-Infinity" | "NaN" | null } | { type: "remote" url: string headers?: { [key: string]: string } | null oauth?: false status: string }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/extensions/mcp/${name}`, {
method: "DELETE",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request DELETE "${CADCAMFUN_URL}/api/ai/extensions/mcp/<name>?projectId=<projectId>" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.removeExtensionPlugin Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| ausweis | weg | zeichenfolge | erforderlich |
200 objekt application/json
{ plugins: Array<{ id: string name: string version: string enabled: boolean tools: number | "Infinity" | "-Infinity" | "NaN" mods: number | "Infinity" | "-Infinity" | "NaN" modes: number | "Infinity" | "-Infinity" | "NaN" }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/extensions/plugins/${id}`, {
method: "DELETE",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request DELETE "${CADCAMFUN_URL}/api/ai/extensions/plugins/<id>" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.toggleExtensionPlugin Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| ausweis | weg | zeichenfolge | erforderlich |
{ enabled: boolean }
200 objekt application/json
{ plugins: Array<{ id: string name: string version: string enabled: boolean tools: number | "Infinity" | "-Infinity" | "NaN" mods: number | "Infinity" | "-Infinity" | "NaN" modes: number | "Infinity" | "-Infinity" | "NaN" }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/extensions/plugins/${id}`, {
method: "PUT",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request PUT "${CADCAMFUN_URL}/api/ai/extensions/plugins/<id>" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.extensionPlugins Erfordert Authorization: Bearer <token>.
200 objekt application/json
{ plugins: Array<{ id: string name: string version: string enabled: boolean tools: number | "Infinity" | "-Infinity" | "NaN" mods: number | "Infinity" | "-Infinity" | "NaN" modes: number | "Infinity" | "-Infinity" | "NaN" }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/extensions/plugins`, {
method: "GET",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request GET "${CADCAMFUN_URL}/api/ai/extensions/plugins" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.installExtensionPlugin Erfordert Authorization: Bearer <token>.
{ manifest: string source: string files?: { [key: string]: string } | null }
200 objekt application/json
{ plugins: Array<{ id: string name: string version: string enabled: boolean tools: number | "Infinity" | "-Infinity" | "NaN" mods: number | "Infinity" | "-Infinity" | "NaN" modes: number | "Infinity" | "-Infinity" | "NaN" }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/extensions/plugins`, {
method: "POST",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/extensions/plugins" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.extensionMods Erfordert Authorization: Bearer <token>.
200 objekt application/json
{ mods: Array<{ id: string name: string description: string enabled: boolean origin: "assistant" | "user" | "plugin" pluginId?: string | null }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/extensions/mods`, {
method: "GET",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request GET "${CADCAMFUN_URL}/api/ai/extensions/mods" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.toggleExtensionMod Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| ausweis | weg | zeichenfolge | erforderlich |
{ enabled: boolean }
200 objekt application/json
{ mods: Array<{ id: string name: string description: string enabled: boolean origin: "assistant" | "user" | "plugin" pluginId?: string | null }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/extensions/mods/${id}`, {
method: "PUT",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request PUT "${CADCAMFUN_URL}/api/ai/extensions/mods/<id>" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.removeExtensionMod Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| ausweis | weg | zeichenfolge | erforderlich |
200 objekt application/json
{ mods: Array<{ id: string name: string description: string enabled: boolean origin: "assistant" | "user" | "plugin" pluginId?: string | null }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/extensions/mods/${id}`, {
method: "DELETE",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request DELETE "${CADCAMFUN_URL}/api/ai/extensions/mods/<id>" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/modes
ai.modes Erfordert Authorization: Bearer <token>.
200 objekt application/json
{ modes: Array<{ id: string title: string description: string pluginId: string pluginName: string }> builtin?: Array<{ id: string title: string description: string pluginId: string pluginName: string }> | null }
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/modes`, {
method: "GET",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request GET "${CADCAMFUN_URL}/api/ai/modes" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/skills
ai.skills Erfordert Authorization: Bearer <token>.
200 objekt application/json
{ skills: Array<{ name: string description: string builtIn: boolean category: string }> max: number | "Infinity" | "-Infinity" | "NaN" }
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Beispielantwort erfasst · 200
{
"skills": [
{
"name": "cad-3d-modeling",
"description": "Model 3D and 2D geometry in the open editor (45 element types): conventions, recipes for common parts, how to build complex objects.",
"builtIn": true,
"category": "cad"
},
{
"name": "cam-operation-workflow",
"description": "The loop from a drawing to verified G-code: describe, parameters, operation, generate, analyse, verify, fix.",
"builtIn": true,
"category": "cam"
},
{
"name": "toolpath-verification",
"description": "How to read and report a cam_edit action verify result: every finding code, its cause and its fix, and what was not modelled.",
"builtIn": true,
"category": "cam"
},
{
"name": "cutting-parameters",
"description": "Speeds, feeds, stepdown and stepover starting points by material, and the formulas behind them.",
"builtIn": true,
"category": "cam"
},
{
"name": "drilling-and-holes",
"description": "Drilling operations: cycles, peck rules, through-hole depth, large holes.",
"builtIn": true,
"category": "cam"
},
{
"name": "precision-and-tolerances",
"description": "Working to microns: nominal sizes, tolerance on round shapes, ISO 286 grades, finishing strategy and what the verification can and cannot show.",
"builtIn": true,
"category": "cam"
},
{
"name": "industrial-standards",
"description": "Mechanical and industrial rules for professional parts: ISO 2768 general tolerances, ISO 286 fits, surface finish, ISO 273 / ISO 4762 fastener holes, tap drills, DIN 6885 keys, ISO 54 gears, preferred numbers, design rules per process (milling, turning, sheet metal, casting, printing) and material densities.",
"builtIn": true,
"category": "cad"
},
{
"name": "machines-and-axes",
"description": "Mill, lathe and 3D printer: what turns, the sense of every axis, zeros and work offsets, touch probes and tool setters, and how to check a program against its machine.",
"builtIn": true,
"category": "cam"
},
{
"name": "drawings-and-images",
"description": "From a DXF/SVG file, an image of a dimensioned drawing, a photo or a sketch to a 3D model: which tool, what to ask, how to check the result.",
"builtIn": true,
"category": "cad"
},
{
"name": "plugin-authoring",
"description": "Write an extension for the ap
… SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// no input
const result = await client.ai.skills() curl
curl --request GET "${CADCAMFUN_URL}/api/ai/skills" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.saveSkill Erfordert Authorization: Bearer <token>.
{ markdown?: string | null name?: string | null description?: string | null body?: string | null }
200 objekt application/json
{ skill: { name: string description: string builtIn: boolean category: string } skills: Array<{ name: string description: string builtIn: boolean category: string }> live: boolean }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiSaveSkillInput
const result = await client.ai.saveSkill({
markdown: "",
name: "",
description: "",
body: ""
}) curl
curl --request PUT "${CADCAMFUN_URL}/api/ai/skills" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.deleteSkill Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| name | weg | zeichenfolge | erforderlich |
200 objekt application/json
{ skills: Array<{ name: string description: string builtIn: boolean category: string }> max: number | "Infinity" | "-Infinity" | "NaN" }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiDeleteSkillInput
const result = await client.ai.deleteSkill({
name: "<name>"
}) curl
curl --request DELETE "${CADCAMFUN_URL}/api/ai/skills/<name>" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/credentials
ai.setCredentials Erfordert Authorization: Bearer <token>.
{ provider?: string | null key?: string | null baseUrl?: string | null }
200 objekt application/json
{ providers: { [key: string]: "configured" | "missing" } configured: boolean tools?: Array<{ id: string description: string }> | null host: "nikcli" | "direct" }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiSetCredentialsInput
const result = await client.ai.setCredentials({
provider: "",
key: "",
baseUrl: ""
}) curl
curl --request PUT "${CADCAMFUN_URL}/api/ai/credentials" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.clearCredentials Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| anbieter | weg | zeichenfolge | erforderlich |
200 objekt application/json
{ providers: { [key: string]: "configured" | "missing" } configured: boolean tools?: Array<{ id: string description: string }> | null host: "nikcli" | "direct" }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiClearCredentialsInput
const result = await client.ai.clearCredentials({
provider: "<provider>"
}) curl
curl --request DELETE "${CADCAMFUN_URL}/api/ai/credentials/<provider>" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/status
ai.status Erfordert Authorization: Bearer <token>.
200 objekt application/json
{ providers: { [key: string]: "configured" | "missing" } configured: boolean tools?: Array<{ id: string description: string }> | null host: "nikcli" | "direct" }
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Beispielantwort erfasst · 200
{
"providers": {
"anthropic": "missing",
"openai": "missing",
"minimax": "missing",
"gateway": "missing"
},
"configured": false,
"host": "direct"
} SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// no input
const result = await client.ai.status() curl
curl --request GET "${CADCAMFUN_URL}/api/ai/status" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/models
ai.models Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| configuredOnly | abfrage | "wAHR" | "fALSCH" | null | optional |
200 Array<Objekt> application/json
Array<{ id: string provider: string tier?: "fast" | "balanced" | "best" | null contextWindow: number | "Infinity" | "-Infinity" | "NaN" tools: boolean vision: boolean configured: boolean }>
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Beispielantwort erfasst · 200
[
{
"id": "claude-haiku-4-5",
"provider": "anthropic",
"tier": "fast",
"contextWindow": 200000,
"tools": true,
"vision": true,
"configured": false
},
{
"id": "claude-sonnet-5-5",
"provider": "anthropic",
"tier": "balanced",
"contextWindow": 1000000,
"tools": true,
"vision": true,
"configured": false
},
{
"id": "claude-opus-5-5",
"provider": "anthropic",
"tier": "best",
"contextWindow": 1000000,
"tools": true,
"vision": true,
"configured": false
},
{
"id": "gpt-5-mini",
"provider": "openai",
"tier": "fast",
"contextWindow": 400000,
"tools": true,
"vision": true,
"configured": false
},
{
"id": "gpt-5",
"provider": "openai",
"tier": "balanced",
"contextWindow": 400000,
"tools": true,
"vision": true,
"configured": false
},
{
"id": "MiniMax-M2",
"provider": "minimax",
"tier": "fast",
"contextWindow": 200000,
"tools": true,
"vision": false,
"configured": false
},
{
"id": "anthropic/claude-haiku-4-5",
"provider": "gateway",
"tier": "fast",
"contextWindow": 200000,
"tools": true,
"vision": true,
"configured": false
},
{
"id": "anthropic/claude-sonnet-5-5",
"provider": "gateway",
"tier": "balanced",
"contextWindow": 1000000,
"tools": true,
"vision": true,
"configured": false
},
{
"id": "anthropic/claude-opus-5-5",
"provider": "gateway",
"tier": "best",
"contextWindow": 1000000,
"tools": true,
"vision": true,
"configured": false
}
] SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiModelsInput
const result = await client.ai.models({}) curl
curl --request GET "${CADCAMFUN_URL}/api/ai/models" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
ai.refreshModels Erfordert Authorization: Bearer <token>.
200 Array<Objekt> application/json
Array<{ id: string name: string source: string auth: string[] configured: boolean baseUrl?: string | null defaultModel?: string | null models: Array<{ id: string name: string provider: string contextWindow: number | "Infinity" | "-Infinity" | "NaN" maxOutput: number | "Infinity" | "-Infinity" | "NaN" inputWindow?: number | "Infinity" | "-Infinity" | "NaN" | null reasoning?: boolean | null variants?: string[] | null tools: boolean vision: boolean cost: { input: number | "Infinity" | "-Infinity" | "NaN" output: number | "Infinity" | "-Infinity" | "NaN" } }> }>
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/models/refresh`, {
method: "POST",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/models/refresh" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/providers
ai.providers Erfordert Authorization: Bearer <token>.
200 Array<Objekt> application/json
Array<{ id: string name: string source: string auth: string[] configured: boolean baseUrl?: string | null defaultModel?: string | null models: Array<{ id: string name: string provider: string contextWindow: number | "Infinity" | "-Infinity" | "NaN" maxOutput: number | "Infinity" | "-Infinity" | "NaN" inputWindow?: number | "Infinity" | "-Infinity" | "NaN" | null reasoning?: boolean | null variants?: string[] | null tools: boolean vision: boolean cost: { input: number | "Infinity" | "-Infinity" | "NaN" output: number | "Infinity" | "-Infinity" | "NaN" } }> }>
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Beispielantwort erfasst · 200
[
{
"id": "anthropic",
"name": "anthropic",
"source": "config",
"auth": [
"api"
],
"configured": false,
"models": [
{
"id": "claude-haiku-4-5",
"name": "claude-haiku-4-5",
"provider": "anthropic",
"contextWindow": 200000,
"maxOutput": 16000,
"reasoning": false,
"variants": [],
"tools": true,
"vision": true,
"cost": {
"input": 0,
"output": 0
}
},
{
"id": "claude-sonnet-5-5",
"name": "claude-sonnet-5-5",
"provider": "anthropic",
"contextWindow": 1000000,
"maxOutput": 16000,
"reasoning": false,
"variants": [],
"tools": true,
"vision": true,
"cost": {
"input": 0,
"output": 0
}
},
{
"id": "claude-opus-5-5",
"name": "claude-opus-5-5",
"provider": "anthropic",
"contextWindow": 1000000,
"maxOutput": 16000,
"reasoning": false,
"variants": [],
"tools": true,
"vision": true,
"cost": {
"input": 0,
"output": 0
}
}
]
},
{
"id": "openai",
"name": "openai",
"source": "config",
"auth": [
"api"
],
"configured": false,
"models": [
{
"id": "gpt-5-mini",
"name": "gpt-5-mini",
"provider": "openai",
"contextWindow": 400000,
"maxOutput": 16000,
"reasoning": false,
"variants": [],
"tools": true,
"vision": true,
"cost": {
"input": 0,
"output": 0
}
},
{
"id": "gpt-5",
"name": "gpt-5",
"provider": "openai",
"contextWindow": 400000,
"maxOutput": 16000,
"reasoning": false,
"variants": [],
"tools": true,
"vision": true,
"cost": {
"input": 0,
"output": 0
}
}
]
},
{
"id": "minimax",
"name": "minimax",
"source": "config",
"auth": [
"api"
],
"configured": false,
"models": [
{
"id": "MiniMax-M2",
"name": "MiniMax-M2",
"provider": "minimax",
"contextWindow": 200000,
"maxOutput": 16000,
"reasoning": false,
"variants": [],
"tools": true,
"vision": false,
"cost": {
"input": 0,
"output"
… SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// no input
const result = await client.ai.providers() curl
curl --request GET "${CADCAMFUN_URL}/api/ai/providers" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/prompts
ai.prompts Erfordert Authorization: Bearer <token>.
| Name | In | Typ | Erforderlich |
|---|---|---|---|
| modus | abfrage | zeichenfolge | null | optional |
200 objekt application/json
{ prompts: string[] }
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Beispielantwort erfasst · 200
{
"prompts": [
"How do I get started with CAD/CAM?",
"What's the difference between CAD and CAM?",
"Can you recommend resources for learning more?"
]
} SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiPromptsInput
const result = await client.ai.prompts({}) curl
curl --request GET "${CADCAMFUN_URL}/api/ai/prompts" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" Probieren Sie es aus
/api/ai/title
ai.title Erfordert Authorization: Bearer <token>.
{ excerpt?: string | null model?: { provider?: string | null model?: string | null tier?: "fast" | "balanced" | "best" | null variant?: string | null } | null }
200 objekt application/json
{ title: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiTitleInput
const result = await client.ai.title({
excerpt: "",
model: {}
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/title" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/design-analysis
ai.designAnalysis Erfordert Authorization: Bearer <token>.
{ description?: string | null layer?: string | null machine?: string | null model?: { provider?: string | null model?: string | null tier?: "fast" | "balanced" | "best" | null variant?: string | null } | null }
200 objekt application/json
{ suggestions: Array<{ title: string description: string confidence: number | "Infinity" | "-Infinity" | "NaN" priority: "low" | "medium" | "high" kind: "optimization" | "warning" | "critical" }> }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiDesignAnalysisInput
const result = await client.ai.designAnalysis({
description: "",
layer: "",
machine: "",
model: {}
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/design-analysis" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/machining-parameters
ai.machiningParameters Erfordert Authorization: Bearer <token>.
{ material?: string | null tool?: string | null operation?: string | null machine?: string | null model?: { provider?: string | null model?: string | null tier?: "fast" | "balanced" | "best" | null variant?: string | null } | null }
200 objekt application/json
{ cuttingSpeedMPerMin: number | "Infinity" | "-Infinity" | "NaN" feedRateMmPerMin: number | "Infinity" | "-Infinity" | "NaN" depthOfCutMm: number | "Infinity" | "-Infinity" | "NaN" stepoverPct: number | "Infinity" | "-Infinity" | "NaN" coolant: "flood" | "mist" | "none" engagement: "conventional" | "climb" warnings: string[] }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiMachiningParametersInput
const result = await client.ai.machiningParameters({
material: "",
tool: "",
operation: "",
machine: "",
model: {}
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/machining-parameters" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/gcode-optimization
ai.gcodeOptimization Erfordert Authorization: Bearer <token>.
{ gcode?: string | null material?: string | null machineType?: string | null constraints?: string | null model?: { provider?: string | null model?: string | null tier?: "fast" | "balanced" | "best" | null variant?: string | null } | null }
200 objekt application/json
{ gcode: string changes: Array<{ line: number | "Infinity" | "-Infinity" | "NaN" before: string after: string reason: string }> estimatedSavings: { timePct: number | "Infinity" | "-Infinity" | "NaN" toolLifePct: number | "Infinity" | "-Infinity" | "NaN" qualityNote: string } notes: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiGcodeOptimizationInput
const result = await client.ai.gcodeOptimization({
gcode: "",
material: "",
machineType: "",
constraints: "",
model: {}
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/gcode-optimization" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/design-suggestions
ai.designSuggestions Erfordert Authorization: Bearer <token>.
{ elements?: string | null currentOperation?: string | null currentTool?: string | null model?: { provider?: string | null model?: string | null tier?: "fast" | "balanced" | "best" | null variant?: string | null } | null }
200 Array<Objekt> application/json
Array<{ title: string rationale: string nextStep: string }>
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiDesignSuggestionsInput
const result = await client.ai.designSuggestions({
elements: "",
currentOperation: "",
currentTool: "",
model: {}
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/design-suggestions" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/chat
ai.chat Erfordert Authorization: Bearer <token>.
{ messages?: unknown | null mcpServerId?: string | null mcpReference?: string | null }
200 objekt application/json
{ reply: string hasMcpData: boolean }
400 AiBadRequestEncoded application/json
AiBadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
404 AiNotFoundEncoded application/json
AiNotFoundEncoded
500 AiFailureEncoded application/json
AiFailureEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiChatInput
const result = await client.ai.chat({
messages: null,
mcpServerId: "",
mcpReference: ""
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/chat" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.chatStream Erfordert Authorization: Bearer <token>.
{ permissionMode?: "auto" | "ask" | "approve" | null agent?: string | null mode?: string | null attachments?: Array<{ name: string mime?: string | null data: string encoding?: "base64" | "text" | null }> | null message?: string | null sessionId?: string | null projectId?: string | null drawingId?: string | null context?: string | null includeContext?: boolean | null model?: { provider?: string | null model?: string | null tier?: "fast" | "balanced" | "best" | null variant?: string | null } | null }
200 objekt text/event-stream
{ id: string | null event: string data: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiChatStreamInput
const result = await client.ai.chatStream({
permissionMode: "auto",
agent: "",
mode: "",
attachments: [
{
name: "",
data: ""
}
],
message: "",
sessionId: "",
projectId: "",
drawingId: "",
context: "",
includeContext: false,
model: {}
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/chat/stream" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.chatQueue Erfordert Authorization: Bearer <token>.
{ sessionId: string message: string projectId?: string | null delivery?: "queue" | "steer" | null }
200 objekt application/json
{ message: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiChatQueueInput
const result = await client.ai.chatQueue({
sessionId: "",
message: "",
projectId: "",
delivery: "queue"
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/chat/queue" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.chatAbort Erfordert Authorization: Bearer <token>.
{ sessionId?: string | null projectId?: string | null }
200 objekt application/json
{ message: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiChatAbortInput
const result = await client.ai.chatAbort({
sessionId: "",
projectId: ""
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/chat/abort" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/permission
ai.permissionReply Erfordert Authorization: Bearer <token>.
{ sessionId: string projectId?: string | null requestId: string decision: "once" | "always" | "reject" }
200 objekt application/json
{ message: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiPermissionReplyInput
const result = await client.ai.permissionReply({
sessionId: "",
projectId: "",
requestId: "",
decision: "once"
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/permission/reply" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/completion
ai.completion Erfordert Authorization: Bearer <token>.
{ prompt?: string | null systemPrompt?: string | null model?: string | null temperature?: number | "Infinity" | "-Infinity" | "NaN" | null }
200 objekt application/json
{ text: string model: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiCompletionInput
const result = await client.ai.completion({
prompt: "",
systemPrompt: "",
model: "",
temperature: 0
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/completion" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/analyze-gcode
ai.analyzeGcode Erfordert Authorization: Bearer <token>.
{ gcode?: string | null model?: string | null }
200 objekt application/json
{ issues: Array<{ severity: "error" | "warning" | "info" code: string line: number | "Infinity" | "-Infinity" | "NaN" message: string }> stats: { lines: number | "Infinity" | "-Infinity" | "NaN" rapidMoves: number | "Infinity" | "-Infinity" | "NaN" cutMoves: number | "Infinity" | "-Infinity" | "NaN" toolChanges: number | "Infinity" | "-Infinity" | "NaN" bounds: { min: { x: number | "Infinity" | "-Infinity" | "NaN" y: number | "NaN" z: number | "NaN" } max: { x: number | "NaN" } } | null } }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiAnalyzeGcodeInput
const result = await client.ai.analyzeGcode({
gcode: "",
model: ""
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/analyze-gcode" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/gcode
ai.gcode Erfordert Authorization: Bearer <token>.
{ action?: string | null gcode?: string | null partialCode?: string | null machineType?: string | null material?: string | null model?: string | null options?: unknown | null description?: string | null toolpathType?: string | null }
200 objekt application/json
{ success: true action: string data: unknown processedAt: string }
400 GcodeActionErrorEncoded application/json
GcodeActionErrorEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 GcodeActionFailureEncoded application/json
GcodeActionFailureEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiGcodeInput
const result = await client.ai.gcode({
action: "",
gcode: "",
partialCode: "",
machineType: "",
material: "",
model: "",
options: null,
description: "",
toolpathType: ""
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/gcode" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/toolpath-analysis
ai.toolpathAnalysis Erfordert Authorization: Bearer <token>.
{ gcode?: string | null model?: string | null max_tokens?: number | "Infinity" | "-Infinity" | "NaN" | null }
200 objekt application/json
{ insights: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiToolpathAnalysisInput
const result = await client.ai.toolpathAnalysis({
gcode: "",
model: "",
max_tokens: 0
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/toolpath-analysis" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/feedback
ai.feedback Erfordert Authorization: Bearer <token>.
{ messageId?: string | null rating?: string | null comment?: string | null }
200 objekt application/json
{ success: true message: string }
400 AiBadRequestEncoded application/json
AiBadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 AiFailureEncoded application/json
AiFailureEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiFeedbackInput
const result = await client.ai.feedback({
messageId: "",
rating: "",
comment: ""
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/feedback" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/proxy
ai.proxy Erfordert Authorization: Bearer <token>.
{ model?: string | null messages?: unknown | null max_tokens?: number | "Infinity" | "-Infinity" | "NaN" | null temperature?: number | "Infinity" | "-Infinity" | "NaN" | null system?: unknown | null reasoning?: unknown | null }
200 objekt application/json
{ id: string type: "message" role: "assistant" model: string content: Array<{ type: "text" text: string }> stop_reason: string | null usage: { input_tokens: number | "Infinity" | "-Infinity" | "NaN" output_tokens: number | "Infinity" | "-Infinity" | "NaN" } }
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
SDK-Beispiel
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
// AiProxyInput
const result = await client.ai.proxy({
model: "",
messages: null,
max_tokens: 0,
temperature: 0,
system: null,
reasoning: null
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/proxy" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
/api/ai/oauth
ai.oauthAuthorize Erfordert Authorization: Bearer <token>.
{ provider: "openai" | "xai" }
200 objekt application/json
{ attemptId: string url: string instructions: string method: "auto" | "code" | "auto-code" }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/oauth/authorize`, {
method: "POST",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/oauth/authorize" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
ai.oauthComplete Erfordert Authorization: Bearer <token>.
{ provider: "openai" | "xai" attemptId: string code?: string | null }
200 objekt application/json
{ providers: { [key: string]: "configured" | "missing" } configured: boolean tools?: Array<{ id: string description: string }> | null host: "nikcli" | "direct" }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
beispiel abrufen
// Not generated in the Promise SDK (multipart, binary or raw body): call it with fetch.
const response = await fetch(`${process.env.CADCAMFUN_URL}/api/ai/oauth/complete`, {
method: "POST",
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
}) curl
curl --request POST "${CADCAMFUN_URL}/api/ai/oauth/complete" \
--header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @request.json Probieren Sie es aus
Schemata
Benannte Schemata, die über die Parameter, Körper und Antworten dieser Gruppe erreichbar sind. A ? markiert ein optionales Feld; | null markiert ein Feld, das möglicherweise mit einem Nullwert vorhanden ist.
AiBadRequestEncoded{ _tag: "AiBadRequest" error: string }
AiFailureEncoded{ _tag: "AiFailure" error: string }
AiNotFoundEncoded{ _tag: "AiNotFound" error: string }
BadRequestEncoded{ _tag: "BadRequest" message: string }
ConflictEncoded{ _tag: "Conflict" message: string }
GcodeActionErrorEncoded{ _tag: "GcodeActionError" success: false error: string action?: string | null processedAt?: string | null }
GcodeActionFailureEncoded{ _tag: "GcodeActionFailure" success: false error: string action: string processedAt: string }
InternalErrorEncoded{ _tag: "InternalError" message: string }
Ich rufe diese Gruppe an
Vorgangs-IDs haben die Form ai.<name>. Das generierte Promise SDK (@cadcamfun/api/sdk) entlarvt die meisten von ihnen als client.<namespace>.<method>(input), wo input ist ein flaches Objekt aus Pfadparametern und Körperfeldern; Das SDK-Beispiel jeder Karte zeigt den genauen Zugriffs- und Eingabetyp. Mehrteilige Uploads, Binär- oder JavaScript-Antworten und unformatierte Webhooks werden nicht generiert; Diese Karten zeigen fetch stattdessen.
import { CadCam, ClientError } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
try {
await client.projects.list()
} catch (error) {
if (error instanceof ClientError) {
// Transport | UnexpectedStatus | UnsupportedContentType | MalformedResponse | SseEventTooLarge
} else {
// a declared error body: switch on error._tag
}
} Fehlerbehebung
| Symptom | Wahrscheinliche Ursache | Fix |
|---|---|---|
| 401 bei jedem Aufruf | Token von einem früheren Start oder fehlt Bearer präfix | Schicken Authorization: Bearer <token> mit dem Token wurde der Sidecar gestartet. |
| 400 bevor etwas passiert | Text oder Parameter stimmen nicht mit dem Schema überein | Vergleichen Sie die Nutzlast mit dem Anforderungsschema auf der Karte. |
| 403 oder 404 bei einem Datensatz, den du woanders siehst | Das amtierende Konto ist unterschiedlich | Schicken Sie das Richtige x-session-token, oder verwenden Sie das lokale Profil, das Eigentümer des Datensatzes ist. |
| 409 | Widersprüchlicher Status, z. B. ein doppelter Name oder ein veralteter Zweigkopf | Lesen Sie die Ressource erneut und versuchen Sie es erneut mit den aktuellen Daten. |
| Versuchen Sie es mit der Meldung „Von CORS blockiert“. | Die Dokumente werden von einem Nicht-Loopback-Ursprung bereitgestellt | Führen Sie die Dokumente lokal aus oder kopieren Sie die Anfrage als Curl. |
| Verbindung abgelehnt | Der Sidecar wurde an einem neuen Port neu gestartet | Lesen Sie den Port neu ready Zeile. |