Documentation
Sessions et actions d'IA
Fournisseurs, informations d'identification, conversations, tours de streaming, invocation d'action, jetons de pont, compétences et récupération de session.
Traduit automatiquement de l'anglais. Voir l'original en anglais
Envoyez ces demandes à votre propre sidecar en cours d’exécution. Les valeurs restent dans ce navigateur.
Comment ça marche
Le sidecar écoute sur un port de bouclage choisi au démarrage et l'imprime dans son ready doubler; utilisez cette URL et le CADCAMFUN_TOKEN ça a commencé avec. Les demandes vont directement de cette page à cette adresse.
Le sidecar envoie les en-têtes CORS uniquement aux origines Tauri et à http://localhost ou http://127.0.0.1 sur n'importe quel port. À partir des documents hébergés, le navigateur bloque la réponse, exécutez donc les documents localement (bun run dev dans packages/web) pour utiliser le terrain de jeu, ou copiez la requête sous forme curl. Pour expérimenter sans toucher aux données réelles, démarrez le sidecar avec CADCAMFUN_DATA_DIR pointé vers un répertoire jetable — voir la procédure pas à pas de l'API.
Opérations
52 endpoints dans le ai groupe, généré à partir du propre sidecar Document OpenAPI. Les opérations protégées prennent Authorization: Bearer $CADCAMFUN_TOKEN; voir authentification. Le comportement et les limites sont en place le guide du sous-système.
| obtenir | /api/ai/actions | ai.actions |
| poste | /api/ai/actions/invoke | ai.invokeAction |
| poste | /api/ai/bridge/tokens | ai.issueBridgeToken |
| obtenir | /api/ai/bridge/tokens | ai.bridgeTokens |
| supprimer | /api/ai/bridge/tokens/{id} | ai.revokeBridgeToken |
| obtenir | /api/ai/agents | ai.agents |
| poste | /api/ai/sessions/control | ai.sessionControl |
| poste | /api/ai/sessions/state | ai.sessionState |
| poste | /api/ai/sessions/remove | ai.removeSession |
| obtenir | /api/ai/extensions/mcp | ai.mcpServers |
| mettre | /api/ai/extensions/mcp | ai.saveMcpServer |
| supprimer | /api/ai/extensions/mcp/{name} | ai.deleteMcpServer |
| supprimer | /api/ai/extensions/plugins/{id} | ai.removeExtensionPlugin |
| mettre | /api/ai/extensions/plugins/{id} | ai.toggleExtensionPlugin |
| obtenir | /api/ai/extensions/plugins | ai.extensionPlugins |
| poste | /api/ai/extensions/plugins | ai.installExtensionPlugin |
| obtenir | /api/ai/extensions/mods | ai.extensionMods |
| mettre | /api/ai/extensions/mods/{id} | ai.toggleExtensionMod |
| supprimer | /api/ai/extensions/mods/{id} | ai.removeExtensionMod |
| obtenir | /api/ai/modes | ai.modes |
| obtenir | /api/ai/skills | ai.skills |
| mettre | /api/ai/skills | ai.saveSkill |
| supprimer | /api/ai/skills/{name} | ai.deleteSkill |
| mettre | /api/ai/credentials | ai.setCredentials |
| supprimer | /api/ai/credentials/{provider} | ai.clearCredentials |
| obtenir | /api/ai/status | ai.status |
| obtenir | /api/ai/models | ai.models |
| obtenir | /api/ai/providers | ai.providers |
| poste | /api/ai/models/refresh | ai.refreshModels |
| obtenir | /api/ai/prompts | ai.prompts |
| poste | /api/ai/title | ai.title |
| poste | /api/ai/design-analysis | ai.designAnalysis |
| poste | /api/ai/machining-parameters | ai.machiningParameters |
| poste | /api/ai/gcode-optimization | ai.gcodeOptimization |
| poste | /api/ai/design-suggestions | ai.designSuggestions |
| poste | /api/ai/chat | ai.chat |
| poste | /api/ai/chat/stream | ai.chatStream |
| poste | /api/ai/sessions/prompt | ai.sessionPrompt |
| obtenir | /api/ai/sessions/{sessionId}/stream | ai.sessionStream |
| obtenir | /api/ai/sessions | ai.sessionList |
| obtenir | /api/ai/sessions/{sessionId}/messages | ai.sessionMessages |
| poste | /api/ai/chat/queue | ai.chatQueue |
| poste | /api/ai/chat/abort | ai.chatAbort |
| poste | /api/ai/permission/reply | ai.permissionReply |
| poste | /api/ai/completion | ai.completion |
| poste | /api/ai/analyze-gcode | ai.analyzeGcode |
| poste | /api/ai/gcode | ai.gcode |
| poste | /api/ai/toolpath-analysis | ai.toolpathAnalysis |
| poste | /api/ai/feedback | ai.feedback |
| poste | /api/ai/proxy | ai.proxy |
| poste | /api/ai/oauth/authorize | ai.oauthAuthorize |
| poste | /api/ai/oauth/complete | ai.oauthComplete |
/api/ai/actions
ai.actions Nécessite Authorization: Bearer <token>.
200 objet 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
Exemple de réponse capturé · 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
… Exemple de SDK
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}" Essayez-le
ai.invokeAction Nécessite Authorization: Bearer <token>.
{ projectId: string drawingId?: string | null callId?: string | null tool: string input: object }
200 objet application/json
{ tool: string action: string result: unknown }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
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 Essayez-le
/api/ai/bridge
ai.issueBridgeToken Nécessite Authorization: Bearer <token>.
{ name?: string | null projectId: string mode: "read" | "write" days?: number | "Infinity" | "-Infinity" | "NaN" | null }
200 objet 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
Exemple de SDK
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 Essayez-le
ai.bridgeTokens Nécessite Authorization: Bearer <token>.
200 Tableau<objet> 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
Exemple de réponse capturé · 200
[] Exemple de SDK
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}" Essayez-le
ai.revokeBridgeToken Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| identifiant | chemin | chaîne | requis |
200 objet application/json
{ message: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
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}" Essayez-le
/api/ai/agents
ai.agents Nécessite Authorization: Bearer <token>.
200 Tableau<objet> 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
Exemple de réponse capturé · 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
}
] Exemple de SDK
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}" Essayez-le
/api/ai/sessions
ai.sessionControl Nécessite 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 objet 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
Exemple de SDK
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 Essayez-le
ai.sessionState Nécessite Authorization: Bearer <token>.
{ sessionId: string projectId?: string | null }
200 objet 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
Exemple de SDK
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 Essayez-le
ai.removeSession Nécessite Authorization: Bearer <token>.
{ sessionId: string projectId?: string | null }
200 objet application/json
{ removed: boolean }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
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 Essayez-le
ai.sessionPrompt Nécessite 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 objet 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
récupérer un exemple
// 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 Essayez-le
ai.sessionStream Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| sessionId | chemin | chaîne | requis |
| après | requête | chaîne | null | facultatif |
200 objet 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
récupérer un exemple
// 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}" Essayez-le
ai.sessionList Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| projectId | requête | chaîne | requis |
| limite | requête | chaîne | null | facultatif |
200 Tableau<objet> 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
récupérer un exemple
// 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}" Essayez-le
ai.sessionMessages Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| sessionId | chemin | chaîne | requis |
| avant | requête | chaîne | null | facultatif |
| limite | requête | chaîne | null | facultatif |
200 objet 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
récupérer un exemple
// 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}" Essayez-le
/api/ai/extensions
ai.mcpServers Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| projectId | requête | chaîne | requis |
200 objet 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
récupérer un exemple
// 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}" Essayez-le
ai.saveMcpServer Nécessite 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 objet 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
récupérer un exemple
// 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 Essayez-le
ai.deleteMcpServer Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| nom | chemin | chaîne | requis |
| projectId | requête | chaîne | requis |
200 objet 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
récupérer un exemple
// 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}" Essayez-le
ai.removeExtensionPlugin Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| identifiant | chemin | chaîne | requis |
200 objet 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
récupérer un exemple
// 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}" Essayez-le
ai.toggleExtensionPlugin Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| identifiant | chemin | chaîne | requis |
{ enabled: boolean }
200 objet 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
récupérer un exemple
// 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 Essayez-le
ai.extensionPlugins Nécessite Authorization: Bearer <token>.
200 objet 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
récupérer un exemple
// 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}" Essayez-le
ai.installExtensionPlugin Nécessite Authorization: Bearer <token>.
{ manifest: string source: string files?: { [key: string]: string } | null }
200 objet 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
récupérer un exemple
// 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 Essayez-le
ai.extensionMods Nécessite Authorization: Bearer <token>.
200 objet 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
récupérer un exemple
// 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}" Essayez-le
ai.toggleExtensionMod Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| identifiant | chemin | chaîne | requis |
{ enabled: boolean }
200 objet 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
récupérer un exemple
// 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 Essayez-le
ai.removeExtensionMod Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| identifiant | chemin | chaîne | requis |
200 objet 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
récupérer un exemple
// 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}" Essayez-le
/api/ai/modes
ai.modes Nécessite Authorization: Bearer <token>.
200 objet 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
récupérer un exemple
// 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}" Essayez-le
/api/ai/skills
ai.skills Nécessite Authorization: Bearer <token>.
200 objet 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
Exemple de réponse capturé · 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
… Exemple de SDK
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}" Essayez-le
ai.saveSkill Nécessite Authorization: Bearer <token>.
{ markdown?: string | null name?: string | null description?: string | null body?: string | null }
200 objet 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
Exemple de SDK
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 Essayez-le
ai.deleteSkill Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| nom | chemin | chaîne | requis |
200 objet 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
Exemple de SDK
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}" Essayez-le
/api/ai/credentials
ai.setCredentials Nécessite Authorization: Bearer <token>.
{ provider?: string | null key?: string | null baseUrl?: string | null }
200 objet 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
Exemple de SDK
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 Essayez-le
ai.clearCredentials Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| fournisseur | chemin | chaîne | requis |
200 objet 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
Exemple de SDK
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}" Essayez-le
/api/ai/status
ai.status Nécessite Authorization: Bearer <token>.
200 objet 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
Exemple de réponse capturé · 200
{
"providers": {
"anthropic": "missing",
"openai": "missing",
"minimax": "missing",
"gateway": "missing"
},
"configured": false,
"host": "direct"
} Exemple de SDK
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}" Essayez-le
/api/ai/models
ai.models Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| configuredOnly | requête | "vrai" | "fAUX" | null | facultatif |
200 Tableau<objet> 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
Exemple de réponse capturé · 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
}
] Exemple de SDK
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}" Essayez-le
ai.refreshModels Nécessite Authorization: Bearer <token>.
200 Tableau<objet> 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
récupérer un exemple
// 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}" Essayez-le
/api/ai/providers
ai.providers Nécessite Authorization: Bearer <token>.
200 Tableau<objet> 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
Exemple de réponse capturé · 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"
… Exemple de SDK
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}" Essayez-le
/api/ai/prompts
ai.prompts Nécessite Authorization: Bearer <token>.
| Nom | Dans | Taper | Requis |
|---|---|---|---|
| mode | requête | chaîne | null | facultatif |
200 objet application/json
{ prompts: string[] }
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de réponse capturé · 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?"
]
} Exemple de SDK
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}" Essayez-le
/api/ai/title
ai.title Nécessite Authorization: Bearer <token>.
{ excerpt?: string | null model?: { provider?: string | null model?: string | null tier?: "fast" | "balanced" | "best" | null variant?: string | null } | null }
200 objet application/json
{ title: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
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 Essayez-le
/api/ai/design-analysis
ai.designAnalysis Nécessite 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 objet 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
Exemple de SDK
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 Essayez-le
/api/ai/machining-parameters
ai.machiningParameters Nécessite 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 objet 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
Exemple de SDK
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 Essayez-le
/api/ai/gcode-optimization
ai.gcodeOptimization Nécessite 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 objet 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
Exemple de SDK
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 Essayez-le
/api/ai/design-suggestions
ai.designSuggestions Nécessite 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 Tableau<objet> application/json
Array<{ title: string rationale: string nextStep: string }>
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
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 Essayez-le
/api/ai/chat
ai.chat Nécessite Authorization: Bearer <token>.
{ messages?: unknown | null mcpServerId?: string | null mcpReference?: string | null }
200 objet 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
Exemple de SDK
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 Essayez-le
ai.chatStream Nécessite 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 objet 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
Exemple de SDK
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 Essayez-le
ai.chatQueue Nécessite Authorization: Bearer <token>.
{ sessionId: string message: string projectId?: string | null delivery?: "queue" | "steer" | null }
200 objet application/json
{ message: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
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 Essayez-le
ai.chatAbort Nécessite Authorization: Bearer <token>.
{ sessionId?: string | null projectId?: string | null }
200 objet application/json
{ message: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
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 Essayez-le
/api/ai/permission
ai.permissionReply Nécessite Authorization: Bearer <token>.
{ sessionId: string projectId?: string | null requestId: string decision: "once" | "always" | "reject" }
200 objet application/json
{ message: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
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 Essayez-le
/api/ai/completion
ai.completion Nécessite Authorization: Bearer <token>.
{ prompt?: string | null systemPrompt?: string | null model?: string | null temperature?: number | "Infinity" | "-Infinity" | "NaN" | null }
200 objet application/json
{ text: string model: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
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 Essayez-le
/api/ai/analyze-gcode
ai.analyzeGcode Nécessite Authorization: Bearer <token>.
{ gcode?: string | null model?: string | null }
200 objet 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
Exemple de SDK
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 Essayez-le
/api/ai/gcode
ai.gcode Nécessite 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 objet 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
Exemple de SDK
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 Essayez-le
/api/ai/toolpath-analysis
ai.toolpathAnalysis Nécessite Authorization: Bearer <token>.
{ gcode?: string | null model?: string | null max_tokens?: number | "Infinity" | "-Infinity" | "NaN" | null }
200 objet application/json
{ insights: string }
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
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 Essayez-le
/api/ai/feedback
ai.feedback Nécessite Authorization: Bearer <token>.
{ messageId?: string | null rating?: string | null comment?: string | null }
200 objet application/json
{ success: true message: string }
400 AiBadRequestEncoded application/json
AiBadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 AiFailureEncoded application/json
AiFailureEncoded
Exemple de SDK
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 Essayez-le
/api/ai/proxy
ai.proxy Nécessite 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 objet 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
Exemple de SDK
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 Essayez-le
/api/ai/oauth
ai.oauthAuthorize Nécessite Authorization: Bearer <token>.
{ provider: "openai" | "xai" }
200 objet 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
récupérer un exemple
// 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 Essayez-le
ai.oauthComplete Nécessite Authorization: Bearer <token>.
{ provider: "openai" | "xai" attemptId: string code?: string | null }
200 objet 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
récupérer un exemple
// 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 Essayez-le
Schémas
Schémas nommés accessibles à partir des paramètres, des corps et des réponses de ce groupe. UN ? marque un champ facultatif ; | null marque un champ qui peut être présent avec une valeur nulle.
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 }
Appel à ce groupe
Les identifiants d'opération ont la forme ai.<name>. Le SDK Promise généré (@cadcamfun/api/sdk) expose la plupart d'entre eux comme client.<namespace>.<method>(input), où input est un objet plat composé de paramètres de chemin et de champs de corps ; L'exemple de SDK de chaque carte montre l'accesseur exact et le type d'entrée. Les téléchargements en plusieurs parties, les réponses binaires ou JavaScript et les webhooks bruts ne sont pas générés ; ces cartes montrent fetch à la place.
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
}
} Dépannage
| Symptôme | Cause probable | Réparer |
|---|---|---|
| 401 à chaque appel | Jeton d'un lancement précédent, ou manquant Bearer préfixe | Envoyer Authorization: Bearer <token> avec le jeton avec lequel le sidecar a été démarré. |
| 400 avant que quoi que ce soit se produise | Le corps ou le paramètre ne correspond pas au schéma | Comparez la charge utile avec le schéma de demande sur la carte. |
| 403 ou 404 sur un enregistrement visible ailleurs | Le compte intérimaire diffère | Envoyez le droit x-session-token, ou utilisez le profil local propriétaire de l'enregistrement. |
| 409 | État conflictuel, tel qu'un nom en double ou un chef de succursale obsolète | Relisez la ressource et réessayez avec les données actuelles. |
| Essayez, il est écrit "bloqué par CORS" | Les documents sont servis à partir d'une origine sans bouclage | Exécutez la documentation localement ou copiez la demande en tant que curl. |
| Connexion rejetée | Le sidecar a redémarré sur un nouveau port | Lire le port du nouveau ready ligne. |