Aller au contenu
CADCAMFUN
Docs

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

Playground

Envoyez ces demandes à votre propre sidecar en cours d’exécution. Les valeurs restent dans ce navigateur.

Non connecté
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
Sessions d'IA et opérations d'actions en 3D Faites glisser vers l'orbite · faites défiler pour zoomer · faites glisser vers la droite pour effectuer un panoramique
Un bloc par opération (52), empilé par section de ressources de cette page et coloré par méthode : vert GET, orange POST, bleu PUT, violet PATCH, rouge DELETE. Généré à partir du document OpenAPI au moment de la construction.

/api/ai/actions

obtenir /api/ai/actions # ai.actions

Nécessite Authorization: Bearer <token>.

Réponses
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
OBTENIR /api/ai/actions
{
  "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
ai.actions
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
OBTENIR /api/ai/actions
curl --request GET "${CADCAMFUN_URL}/api/ai/actions" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
poste /api/ai/actions/invoke # ai.invokeAction

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  projectId: string
  drawingId?: string | null
  callId?: string | null
  tool: string
  input: object
}
Réponses
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
ai.invokeAction
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
POST /api/ai/actions/invoke
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

poste /api/ai/bridge/tokens # ai.issueBridgeToken

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  name?: string | null
  projectId: string
  mode: "read" | "write"
  days?: number | "Infinity" | "-Infinity" | "NaN" | null
}
Réponses
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
ai.issueBridgeToken
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
POST /api/ai/bridge/jetons
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
obtenir /api/ai/bridge/tokens # ai.bridgeTokens

Nécessite Authorization: Bearer <token>.

Réponses
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
OBTENIR /api/ai/bridge/tokens
[]
Exemple de SDK
ai.bridgeTokens
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
OBTENIR /api/ai/bridge/tokens
curl --request GET "${CADCAMFUN_URL}/api/ai/bridge/tokens" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
supprimer /api/ai/bridge/tokens/{id} # ai.revokeBridgeToken

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
identifiant chemin chaîne requis
Réponses
200 objet application/json
{
  message: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
ai.revokeBridgeToken
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
SUPPRIMER /api/ai/bridge/tokens/{id}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/bridge/tokens/<id>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/agents

obtenir /api/ai/agents # ai.agents

Nécessite Authorization: Bearer <token>.

Réponses
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
OBTENIR /api/ai/agents
[
  {
    "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
ai.agents
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
OBTENIR /api/ai/agents
curl --request GET "${CADCAMFUN_URL}/api/ai/agents" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/sessions

poste /api/ai/sessions/control # ai.sessionControl

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  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
}
Réponses
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
ai.sessionControl
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
POST /api/ai/sessions/contrôle
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
poste /api/ai/sessions/state # ai.sessionState

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  sessionId: string
  projectId?: string | null
}
Réponses
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
ai.sessionState
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
POST /api/ai/sessions/état
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
poste /api/ai/sessions/remove # ai.removeSession

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  sessionId: string
  projectId?: string | null
}
Réponses
200 objet application/json
{
  removed: boolean
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
ai.removeSession
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
POST /api/ai/sessions/remove
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
poste /api/ai/sessions/prompt # ai.sessionPrompt

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  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
}
Réponses
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
ai.sessionPrompt
// 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
POST /api/ai/sessions/prompt
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
obtenir /api/ai/sessions/{sessionId}/stream # ai.sessionStream

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
sessionId chemin chaîne requis
après requête chaîne | null facultatif
Réponses
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
ai.sessionStream
// 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
OBTENIR /api/ai/sessions/{sessionId}/stream
curl --request GET "${CADCAMFUN_URL}/api/ai/sessions/<sessionId>/stream" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
obtenir /api/ai/sessions # ai.sessionList

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
projectId requête chaîne requis
limite requête chaîne | null facultatif
Réponses
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
ai.sessionList
// 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
OBTENIR /api/ai/sessions
curl --request GET "${CADCAMFUN_URL}/api/ai/sessions?projectId=<projectId>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
obtenir /api/ai/sessions/{sessionId}/messages # ai.sessionMessages

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
sessionId chemin chaîne requis
avant requête chaîne | null facultatif
limite requête chaîne | null facultatif
Réponses
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
ai.sessionMessages
// 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
OBTENIR /api/ai/sessions/{sessionId}/messages
curl --request GET "${CADCAMFUN_URL}/api/ai/sessions/<sessionId>/messages" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/extensions

obtenir /api/ai/extensions/mcp # ai.mcpServers

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
projectId requête chaîne requis
Réponses
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
ai.mcpServers
// 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
OBTENIR /api/ai/extensions/mcp
curl --request GET "${CADCAMFUN_URL}/api/ai/extensions/mcp?projectId=<projectId>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
mettre /api/ai/extensions/mcp # ai.saveMcpServer

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  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
}
Réponses
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
ai.saveMcpServer
// 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
METTRE /api/ai/extensions/mcp
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
supprimer /api/ai/extensions/mcp/{name} # ai.deleteMcpServer

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
nom chemin chaîne requis
projectId requête chaîne requis
Réponses
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
ai.deleteMcpServer
// 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
SUPPRIMER /api/ai/extensions/mcp/{name}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/extensions/mcp/<name>?projectId=<projectId>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
supprimer /api/ai/extensions/plugins/{id} # ai.removeExtensionPlugin

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
identifiant chemin chaîne requis
Réponses
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
ai.removeExtensionPlugin
// 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
SUPPRIMER /api/ai/extensions/plugins/{id}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/extensions/plugins/<id>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
mettre /api/ai/extensions/plugins/{id} # ai.toggleExtensionPlugin

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
identifiant chemin chaîne requis
Corps de la requête · requis · application/json
{
  enabled: boolean
}
Réponses
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
ai.toggleExtensionPlugin
// 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
METTRE /api/ai/extensions/plugins/{id}
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
obtenir /api/ai/extensions/plugins # ai.extensionPlugins

Nécessite Authorization: Bearer <token>.

Réponses
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
ai.extensionPlugins
// 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
OBTENIR /api/ai/extensions/plugins
curl --request GET "${CADCAMFUN_URL}/api/ai/extensions/plugins" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
poste /api/ai/extensions/plugins # ai.installExtensionPlugin

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  manifest: string
  source: string
  files?: {
    [key: string]: string
  } | null
}
Réponses
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
ai.installExtensionPlugin
// 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
POST /api/ai/extensions/plugins
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
obtenir /api/ai/extensions/mods # ai.extensionMods

Nécessite Authorization: Bearer <token>.

Réponses
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
ai.extensionMods
// 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
OBTENIR /api/ai/extensions/mods
curl --request GET "${CADCAMFUN_URL}/api/ai/extensions/mods" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
mettre /api/ai/extensions/mods/{id} # ai.toggleExtensionMod

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
identifiant chemin chaîne requis
Corps de la requête · requis · application/json
{
  enabled: boolean
}
Réponses
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
ai.toggleExtensionMod
// 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
METTRE /api/ai/extensions/mods/{id}
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
supprimer /api/ai/extensions/mods/{id} # ai.removeExtensionMod

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
identifiant chemin chaîne requis
Réponses
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
ai.removeExtensionMod
// 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
SUPPRIMER /api/ai/extensions/mods/{id}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/extensions/mods/<id>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/modes

obtenir /api/ai/modes # ai.modes

Nécessite Authorization: Bearer <token>.

Réponses
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
ai.modes
// 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
OBTENIR /api/ai/modes
curl --request GET "${CADCAMFUN_URL}/api/ai/modes" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/skills

obtenir /api/ai/skills # ai.skills

Nécessite Authorization: Bearer <token>.

Réponses
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
OBTENIR /api/ai/compétences
{
  "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
ai.skills
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
OBTENIR /api/ai/compétences
curl --request GET "${CADCAMFUN_URL}/api/ai/skills" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
mettre /api/ai/skills # ai.saveSkill

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  markdown?: string | null
  name?: string | null
  description?: string | null
  body?: string | null
}
Réponses
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
ai.saveSkill
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
METTRE /api/ai/compétences
curl --request PUT "${CADCAMFUN_URL}/api/ai/skills" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le
supprimer /api/ai/skills/{name} # ai.deleteSkill

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
nom chemin chaîne requis
Réponses
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
ai.deleteSkill
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
SUPPRIMER /api/ai/skills/{name}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/skills/<name>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/credentials

mettre /api/ai/credentials # ai.setCredentials

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  provider?: string | null
  key?: string | null
  baseUrl?: string | null
}
Réponses
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
ai.setCredentials
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
PUT /api/ai/credentials
curl --request PUT "${CADCAMFUN_URL}/api/ai/credentials" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le
supprimer /api/ai/credentials/{provider} # ai.clearCredentials

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
fournisseur chemin chaîne requis
Réponses
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
ai.clearCredentials
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
SUPPRIMER /api/ai/credentials/{provider}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/credentials/<provider>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/status

obtenir /api/ai/status # ai.status

Nécessite Authorization: Bearer <token>.

Réponses
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
OBTENIR /api/ai/statut
{
  "providers": {
    "anthropic": "missing",
    "openai": "missing",
    "minimax": "missing",
    "gateway": "missing"
  },
  "configured": false,
  "host": "direct"
}
Exemple de SDK
ai.status
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
OBTENIR /api/ai/statut
curl --request GET "${CADCAMFUN_URL}/api/ai/status" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/models

obtenir /api/ai/models # ai.models

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
configuredOnly requête "vrai" | "fAUX" | null facultatif
Réponses
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
OBTENIR /api/ai/models
[
  {
    "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
ai.models
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
OBTENIR /api/ai/models
curl --request GET "${CADCAMFUN_URL}/api/ai/models" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
poste /api/ai/models/refresh # ai.refreshModels

Nécessite Authorization: Bearer <token>.

Réponses
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
ai.refreshModels
// 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
POST /api/ai/models/refresh
curl --request POST "${CADCAMFUN_URL}/api/ai/models/refresh" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/providers

obtenir /api/ai/providers # ai.providers

Nécessite Authorization: Bearer <token>.

Réponses
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
OBTENIR /api/ai/providers
[
  {
    "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
ai.providers
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
OBTENIR /api/ai/providers
curl --request GET "${CADCAMFUN_URL}/api/ai/providers" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/prompts

obtenir /api/ai/prompts # ai.prompts

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
mode requête chaîne | null facultatif
Réponses
200 objet application/json
{
  prompts: string[]
}
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de réponse capturé · 200
OBTENIR /api/ai/prompts
{
  "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
ai.prompts
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
OBTENIR /api/ai/prompts
curl --request GET "${CADCAMFUN_URL}/api/ai/prompts" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/ai/title

poste /api/ai/title # ai.title

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  excerpt?: string | null
  model?: {
    provider?: string | null
    model?: string | null
    tier?: "fast" | "balanced" | "best" | null
    variant?: string | null
  } | null
}
Réponses
200 objet application/json
{
  title: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
ai.title
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
POST /api/ai/titre
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

poste /api/ai/design-analysis # ai.designAnalysis

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  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
}
Réponses
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
ai.designAnalysis
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
POST /api/ai/design-analyse
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

poste /api/ai/machining-parameters # ai.machiningParameters

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  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
}
Réponses
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
ai.machiningParameters
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
POST /api/ai/paramètres d'usinage
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

poste /api/ai/gcode-optimization # ai.gcodeOptimization

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  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
}
Réponses
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
ai.gcodeOptimization
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
POST /api/ai/gcode-optimisation
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

poste /api/ai/design-suggestions # ai.designSuggestions

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  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
}
Réponses
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
ai.designSuggestions
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
POST /api/ai/design-suggestions
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

poste /api/ai/chat # ai.chat

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  messages?: unknown | null
  mcpServerId?: string | null
  mcpReference?: string | null
}
Réponses
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
ai.chat
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
POST /api/ai/chat
curl --request POST "${CADCAMFUN_URL}/api/ai/chat" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le
poste /api/ai/chat/stream # ai.chatStream

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  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
}
Réponses
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
ai.chatStream
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
POST /api/ai/chat/stream
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
poste /api/ai/chat/queue # ai.chatQueue

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  sessionId: string
  message: string
  projectId?: string | null
  delivery?: "queue" | "steer" | null
}
Réponses
200 objet application/json
{
  message: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
ai.chatQueue
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
POST /api/ai/chat/queue
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
poste /api/ai/chat/abort # ai.chatAbort

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  sessionId?: string | null
  projectId?: string | null
}
Réponses
200 objet application/json
{
  message: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
ai.chatAbort
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
POST /api/ai/chat/abort
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

poste /api/ai/permission/reply # ai.permissionReply

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  sessionId: string
  projectId?: string | null
  requestId: string
  decision: "once" | "always" | "reject"
}
Réponses
200 objet application/json
{
  message: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
ai.permissionReply
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
POST /api/ai/permission/réponse
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

poste /api/ai/completion # ai.completion

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  prompt?: string | null
  systemPrompt?: string | null
  model?: string | null
  temperature?: number | "Infinity" | "-Infinity" | "NaN" | null
}
Réponses
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
ai.completion
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
POST /api/ai/complétion
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

poste /api/ai/analyze-gcode # ai.analyzeGcode

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  gcode?: string | null
  model?: string | null
}
Réponses
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
ai.analyzeGcode
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
POST /api/ai/analyse-gcode
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

poste /api/ai/gcode # ai.gcode

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  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
}
Réponses
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
ai.gcode
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
POST /api/ai/gcode
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

poste /api/ai/toolpath-analysis # ai.toolpathAnalysis

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  gcode?: string | null
  model?: string | null
  max_tokens?: number | "Infinity" | "-Infinity" | "NaN" | null
}
Réponses
200 objet application/json
{
  insights: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
ai.toolpathAnalysis
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
POST /api/ai/toolpath-analyse
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

poste /api/ai/feedback # ai.feedback

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  messageId?: string | null
  rating?: string | null
  comment?: string | null
}
Réponses
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
ai.feedback
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
POST /api/ai/rétroaction
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

poste /api/ai/proxy # ai.proxy

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  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
}
Réponses
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
ai.proxy
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
POST /api/ai/proxy
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

poste /api/ai/oauth/authorize # ai.oauthAuthorize

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  provider: "openai" | "xai"
}
Réponses
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
ai.oauthAuthorize
// 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
POST /api/ai/oauth/autoriser
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
poste /api/ai/oauth/complete # ai.oauthComplete

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  provider: "openai" | "xai"
  attemptId: string
  code?: string | null
}
Réponses
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
ai.oauthComplete
// 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
POST /api/ai/oauth/complete
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
}
UnauthorizedEncoded
{
  _tag: "Unauthorized"
  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.

Erreurs du SDK Promise
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ômeCause probableRéparer
401 à chaque appelJeton d'un lancement précédent, ou manquant Bearer préfixeEnvoyer Authorization: Bearer <token> avec le jeton avec lequel le sidecar a été démarré.
400 avant que quoi que ce soit se produiseLe corps ou le paramètre ne correspond pas au schémaComparez la charge utile avec le schéma de demande sur la carte.
403 ou 404 sur un enregistrement visible ailleursLe compte intérimaire diffèreEnvoyez 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èteRelisez 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 bouclageExécutez la documentation localement ou copiez la demande en tant que curl.
Connexion rejetéeLe sidecar a redémarré sur un nouveau portLire le port du nouveau ready ligne.