Pular para o conteúdo
CADCAMFUN
Docs

Documentação

Sessões e ações de IA

Provedores, credenciais, conversas, turnos de streaming, invocação de ação, tokens de ponte, habilidades e recuperação de sessão.

Traduzido automaticamente do inglês. Ver o original em inglês

Área de testes

Envie essas solicitações para seu próprio sidecar em execução. Os valores permanecem neste navegador.

Não conectado
Como isso funciona

O sidecar escuta em uma porta de loopback escolhida na inicialização e a imprime em seu ready linha; use esse URL e o CADCAMFUN_TOKEN foi iniciado. As solicitações vão direto desta página para esse endereço.

O sidecar envia cabeçalhos CORS apenas para as origens Tauri e para http://localhost ou http://127.0.0.1 em qualquer porto. Nos documentos hospedados, o navegador bloqueia a resposta, então execute os documentos localmente (bun run dev em packages/web) para usar o playground ou copie a solicitação como curl. Para experimentar sem tocar em dados reais, inicie o sidecar com CADCAMFUN_DATA_DIR apontado para um diretório descartável - veja o passo a passo da API.

Operações

52 endpoints no ai grupo, gerado a partir do próprio sidecar Documento OpenAPI. As operações protegidas levam Authorization: Bearer $CADCAMFUN_TOKEN; ver autenticação. Comportamento e limites estão em o guia do subsistema.

pegar /api/ai/actions ai.actions
publicar /api/ai/actions/invoke ai.invokeAction
publicar /api/ai/bridge/tokens ai.issueBridgeToken
pegar /api/ai/bridge/tokens ai.bridgeTokens
excluir /api/ai/bridge/tokens/{id} ai.revokeBridgeToken
pegar /api/ai/agents ai.agents
publicar /api/ai/sessions/control ai.sessionControl
publicar /api/ai/sessions/state ai.sessionState
publicar /api/ai/sessions/remove ai.removeSession
pegar /api/ai/extensions/mcp ai.mcpServers
colocar /api/ai/extensions/mcp ai.saveMcpServer
excluir /api/ai/extensions/mcp/{name} ai.deleteMcpServer
excluir /api/ai/extensions/plugins/{id} ai.removeExtensionPlugin
colocar /api/ai/extensions/plugins/{id} ai.toggleExtensionPlugin
pegar /api/ai/extensions/plugins ai.extensionPlugins
publicar /api/ai/extensions/plugins ai.installExtensionPlugin
pegar /api/ai/extensions/mods ai.extensionMods
colocar /api/ai/extensions/mods/{id} ai.toggleExtensionMod
excluir /api/ai/extensions/mods/{id} ai.removeExtensionMod
pegar /api/ai/modes ai.modes
pegar /api/ai/skills ai.skills
colocar /api/ai/skills ai.saveSkill
excluir /api/ai/skills/{name} ai.deleteSkill
colocar /api/ai/credentials ai.setCredentials
excluir /api/ai/credentials/{provider} ai.clearCredentials
pegar /api/ai/status ai.status
pegar /api/ai/models ai.models
pegar /api/ai/providers ai.providers
publicar /api/ai/models/refresh ai.refreshModels
pegar /api/ai/prompts ai.prompts
publicar /api/ai/title ai.title
publicar /api/ai/design-analysis ai.designAnalysis
publicar /api/ai/machining-parameters ai.machiningParameters
publicar /api/ai/gcode-optimization ai.gcodeOptimization
publicar /api/ai/design-suggestions ai.designSuggestions
publicar /api/ai/chat ai.chat
publicar /api/ai/chat/stream ai.chatStream
publicar /api/ai/sessions/prompt ai.sessionPrompt
pegar /api/ai/sessions/{sessionId}/stream ai.sessionStream
pegar /api/ai/sessions ai.sessionList
pegar /api/ai/sessions/{sessionId}/messages ai.sessionMessages
publicar /api/ai/chat/queue ai.chatQueue
publicar /api/ai/chat/abort ai.chatAbort
publicar /api/ai/permission/reply ai.permissionReply
publicar /api/ai/completion ai.completion
publicar /api/ai/analyze-gcode ai.analyzeGcode
publicar /api/ai/gcode ai.gcode
publicar /api/ai/toolpath-analysis ai.toolpathAnalysis
publicar /api/ai/feedback ai.feedback
publicar /api/ai/proxy ai.proxy
publicar /api/ai/oauth/authorize ai.oauthAuthorize
publicar /api/ai/oauth/complete ai.oauthComplete
Sessões de IA e operações de ações em 3D Arraste para orbitar · role para ampliar · arraste com o botão direito para deslocar
Um bloco por operação (52), empilhado por seção de recursos desta página e colorido por método: verde GET, laranja POST, azul PUT, violeta PATCH, vermelho DELETE. Gerado a partir do documento OpenAPI em tempo de construção.

/api/ai/actions

pegar /api/ai/actions # ai.actions

Requer Authorization: Bearer <token>.

Respostas
200 objeto 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
Resposta de exemplo capturado · 200
GET /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
…
Exemplo 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
GET /api/ai/actions
curl --request GET "${CADCAMFUN_URL}/api/ai/actions" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
publicar /api/ai/actions/invoke # ai.invokeAction

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  projectId: string
  drawingId?: string | null
  callId?: string | null
  tool: string
  input: object
}
Respostas
200 objeto application/json
{
  tool: string
  action: string
  result: unknown
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemplo 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
Experimente

/api/ai/bridge

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

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  name?: string | null
  projectId: string
  mode: "read" | "write"
  days?: number | "Infinity" | "-Infinity" | "NaN" | null
}
Respostas
200 objeto 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
Exemplo 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/tokens
curl --request POST "${CADCAMFUN_URL}/api/ai/bridge/tokens" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente
pegar /api/ai/bridge/tokens # ai.bridgeTokens

Requer Authorization: Bearer <token>.

Respostas
200 Matriz<objeto> 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
Resposta de exemplo capturado · 200
OBTER /api/ai/bridge/tokens
[]
Exemplo 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
OBTER /api/ai/bridge/tokens
curl --request GET "${CADCAMFUN_URL}/api/ai/bridge/tokens" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
excluir /api/ai/bridge/tokens/{id} # ai.revokeBridgeToken

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
eu ia caminho corda obrigatório
Respostas
200 objeto application/json
{
  message: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemplo 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
DELETE /api/ai/bridge/tokens/{id}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/bridge/tokens/<id>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente

/api/ai/agents

pegar /api/ai/agents # ai.agents

Requer Authorization: Bearer <token>.

Respostas
200 Matriz<objeto> 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
Resposta de exemplo capturado · 200
GET /api/ai/agentes
[
  {
    "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
  }
]
Exemplo 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
GET /api/ai/agentes
curl --request GET "${CADCAMFUN_URL}/api/ai/agents" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente

/api/ai/sessions

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

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/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
}
Respostas
200 objeto 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
Exemplo 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/control
curl --request POST "${CADCAMFUN_URL}/api/ai/sessions/control" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente
publicar /api/ai/sessions/state # ai.sessionState

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  sessionId: string
  projectId?: string | null
}
Respostas
200 objeto 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
Exemplo 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/sessões/estado
curl --request POST "${CADCAMFUN_URL}/api/ai/sessions/state" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente
publicar /api/ai/sessions/remove # ai.removeSession

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  sessionId: string
  projectId?: string | null
}
Respostas
200 objeto application/json
{
  removed: boolean
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemplo 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
Experimente
publicar /api/ai/sessions/prompt # ai.sessionPrompt

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/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
}
Respostas
200 objeto 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
buscar exemplo
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
Experimente
pegar /api/ai/sessions/{sessionId}/stream # ai.sessionStream

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
sessionId caminho corda obrigatório
depois consulta corda | null opcional
Respostas
200 objeto 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
buscar exemplo
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
GET /api/ai/sessions/{sessionId}/stream
curl --request GET "${CADCAMFUN_URL}/api/ai/sessions/<sessionId>/stream" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
pegar /api/ai/sessions # ai.sessionList

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
projectId consulta corda obrigatório
limite consulta corda | null opcional
Respostas
200 Matriz<objeto> 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
buscar exemplo
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
GET /api/ai/sessões
curl --request GET "${CADCAMFUN_URL}/api/ai/sessions?projectId=<projectId>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
pegar /api/ai/sessions/{sessionId}/messages # ai.sessionMessages

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
sessionId caminho corda obrigatório
antes consulta corda | null opcional
limite consulta corda | null opcional
Respostas
200 objeto 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
buscar exemplo
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
GET /api/ai/sessions/{sessionId}/messages
curl --request GET "${CADCAMFUN_URL}/api/ai/sessions/<sessionId>/messages" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente

/api/ai/extensions

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

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
projectId consulta corda obrigatório
Respostas
200 objeto 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
buscar exemplo
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
OBTER /api/ai/extensions/mcp
curl --request GET "${CADCAMFUN_URL}/api/ai/extensions/mcp?projectId=<projectId>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
colocar /api/ai/extensions/mcp # ai.saveMcpServer

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/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
}
Respostas
200 objeto 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
buscar exemplo
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
COLOQUE /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
Experimente
excluir /api/ai/extensions/mcp/{name} # ai.deleteMcpServer

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
nome caminho corda obrigatório
projectId consulta corda obrigatório
Respostas
200 objeto 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
buscar exemplo
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
DELETE /api/ai/extensions/mcp/{name}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/extensions/mcp/<name>?projectId=<projectId>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
excluir /api/ai/extensions/plugins/{id} # ai.removeExtensionPlugin

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
eu ia caminho corda obrigatório
Respostas
200 objeto 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
buscar exemplo
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
DELETE /api/ai/extensions/plugins/{id}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/extensions/plugins/<id>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
colocar /api/ai/extensions/plugins/{id} # ai.toggleExtensionPlugin

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
eu ia caminho corda obrigatório
Corpo da solicitação · obrigatório · aplicação/json
{
  enabled: boolean
}
Respostas
200 objeto 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
buscar exemplo
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
PUT /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
Experimente
pegar /api/ai/extensions/plugins # ai.extensionPlugins

Requer Authorization: Bearer <token>.

Respostas
200 objeto 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
buscar exemplo
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
OBTER /api/ai/extensions/plugins
curl --request GET "${CADCAMFUN_URL}/api/ai/extensions/plugins" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
publicar /api/ai/extensions/plugins # ai.installExtensionPlugin

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  manifest: string
  source: string
  files?: {
    [key: string]: string
  } | null
}
Respostas
200 objeto 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
buscar exemplo
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
Experimente
pegar /api/ai/extensions/mods # ai.extensionMods

Requer Authorization: Bearer <token>.

Respostas
200 objeto 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
buscar exemplo
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
OBTER /api/ai/extensions/mods
curl --request GET "${CADCAMFUN_URL}/api/ai/extensions/mods" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
colocar /api/ai/extensions/mods/{id} # ai.toggleExtensionMod

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
eu ia caminho corda obrigatório
Corpo da solicitação · obrigatório · aplicação/json
{
  enabled: boolean
}
Respostas
200 objeto 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
buscar exemplo
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
PUT /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
Experimente
excluir /api/ai/extensions/mods/{id} # ai.removeExtensionMod

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
eu ia caminho corda obrigatório
Respostas
200 objeto 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
buscar exemplo
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
DELETE /api/ai/extensions/mods/{id}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/extensions/mods/<id>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente

/api/ai/modes

pegar /api/ai/modes # ai.modes

Requer Authorization: Bearer <token>.

Respostas
200 objeto 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
buscar exemplo
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
OBTER /api/ai/modes
curl --request GET "${CADCAMFUN_URL}/api/ai/modes" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente

/api/ai/skills

pegar /api/ai/skills # ai.skills

Requer Authorization: Bearer <token>.

Respostas
200 objeto 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
Resposta de exemplo capturado · 200
OBTER /api/ai/skills
{
  "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
…
Exemplo 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
OBTER /api/ai/skills
curl --request GET "${CADCAMFUN_URL}/api/ai/skills" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
colocar /api/ai/skills # ai.saveSkill

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  markdown?: string | null
  name?: string | null
  description?: string | null
  body?: string | null
}
Respostas
200 objeto 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
Exemplo 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
PUT /api/ai/skills
curl --request PUT "${CADCAMFUN_URL}/api/ai/skills" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente
excluir /api/ai/skills/{name} # ai.deleteSkill

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
nome caminho corda obrigatório
Respostas
200 objeto 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
Exemplo 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
DELETE /api/ai/skills/{name}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/skills/<name>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente

/api/ai/credentials

colocar /api/ai/credentials # ai.setCredentials

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  provider?: string | null
  key?: string | null
  baseUrl?: string | null
}
Respostas
200 objeto 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
Exemplo 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/credenciais
curl --request PUT "${CADCAMFUN_URL}/api/ai/credentials" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente
excluir /api/ai/credentials/{provider} # ai.clearCredentials

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
provedor caminho corda obrigatório
Respostas
200 objeto 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
Exemplo 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
DELETE /api/ai/credentials/{provider}
curl --request DELETE "${CADCAMFUN_URL}/api/ai/credentials/<provider>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente

/api/ai/status

pegar /api/ai/status # ai.status

Requer Authorization: Bearer <token>.

Respostas
200 objeto 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
Resposta de exemplo capturado · 200
GET /api/ai/status
{
  "providers": {
    "anthropic": "missing",
    "openai": "missing",
    "minimax": "missing",
    "gateway": "missing"
  },
  "configured": false,
  "host": "direct"
}
Exemplo 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
GET /api/ai/status
curl --request GET "${CADCAMFUN_URL}/api/ai/status" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente

/api/ai/models

pegar /api/ai/models # ai.models

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
configuredOnly consulta "verdadeiro" | "falso" | null opcional
Respostas
200 Matriz<objeto> 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
Resposta de exemplo capturado · 200
OBTER /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
  }
]
Exemplo 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
OBTER /api/ai/models
curl --request GET "${CADCAMFUN_URL}/api/ai/models" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente
publicar /api/ai/models/refresh # ai.refreshModels

Requer Authorization: Bearer <token>.

Respostas
200 Matriz<objeto> 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
buscar exemplo
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}"
Experimente

/api/ai/providers

pegar /api/ai/providers # ai.providers

Requer Authorization: Bearer <token>.

Respostas
200 Matriz<objeto> 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
Resposta de exemplo capturado · 200
OBTER /api/ai/provedores
[
  {
    "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"
…
Exemplo 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
OBTER /api/ai/provedores
curl --request GET "${CADCAMFUN_URL}/api/ai/providers" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente

/api/ai/prompts

pegar /api/ai/prompts # ai.prompts

Requer Authorization: Bearer <token>.

Parâmetros
NomeEmTipoObrigatório
modo consulta corda | null opcional
Respostas
200 objeto application/json
{
  prompts: string[]
}
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Resposta de exemplo capturado · 200
GET /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?"
  ]
}
Exemplo 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
GET /api/ai/prompts
curl --request GET "${CADCAMFUN_URL}/api/ai/prompts" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Experimente

/api/ai/title

publicar /api/ai/title # ai.title

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  excerpt?: string | null
  model?: {
    provider?: string | null
    model?: string | null
    tier?: "fast" | "balanced" | "best" | null
    variant?: string | null
  } | null
}
Respostas
200 objeto application/json
{
  title: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemplo 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/título
curl --request POST "${CADCAMFUN_URL}/api/ai/title" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/design-analysis

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

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/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
}
Respostas
200 objeto 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
Exemplo 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/análise de design
curl --request POST "${CADCAMFUN_URL}/api/ai/design-analysis" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/machining-parameters

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

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/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
}
Respostas
200 objeto 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
Exemplo 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/parâmetros de usinagem
curl --request POST "${CADCAMFUN_URL}/api/ai/machining-parameters" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/gcode-optimization

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

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/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
}
Respostas
200 objeto 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
Exemplo 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-optimization
curl --request POST "${CADCAMFUN_URL}/api/ai/gcode-optimization" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/design-suggestions

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

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/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
}
Respostas
200 Matriz<objeto> application/json
Array<{
  title: string
  rationale: string
  nextStep: string
}>
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemplo 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/sugestões de design
curl --request POST "${CADCAMFUN_URL}/api/ai/design-suggestions" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/chat

publicar /api/ai/chat # ai.chat

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  messages?: unknown | null
  mcpServerId?: string | null
  mcpReference?: string | null
}
Respostas
200 objeto 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
Exemplo 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
Experimente
publicar /api/ai/chat/stream # ai.chatStream

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/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
}
Respostas
200 objeto 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
Exemplo 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
Experimente
publicar /api/ai/chat/queue # ai.chatQueue

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  sessionId: string
  message: string
  projectId?: string | null
  delivery?: "queue" | "steer" | null
}
Respostas
200 objeto application/json
{
  message: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemplo 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
Experimente
publicar /api/ai/chat/abort # ai.chatAbort

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  sessionId?: string | null
  projectId?: string | null
}
Respostas
200 objeto application/json
{
  message: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemplo 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/abortar
curl --request POST "${CADCAMFUN_URL}/api/ai/chat/abort" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/permission

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

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  sessionId: string
  projectId?: string | null
  requestId: string
  decision: "once" | "always" | "reject"
}
Respostas
200 objeto application/json
{
  message: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemplo 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/permissão/resposta
curl --request POST "${CADCAMFUN_URL}/api/ai/permission/reply" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/completion

publicar /api/ai/completion # ai.completion

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  prompt?: string | null
  systemPrompt?: string | null
  model?: string | null
  temperature?: number | "Infinity" | "-Infinity" | "NaN" | null
}
Respostas
200 objeto application/json
{
  text: string
  model: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemplo 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/completion
curl --request POST "${CADCAMFUN_URL}/api/ai/completion" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/analyze-gcode

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

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  gcode?: string | null
  model?: string | null
}
Respostas
200 objeto 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
Exemplo 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/analyze-gcode
curl --request POST "${CADCAMFUN_URL}/api/ai/analyze-gcode" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/gcode

publicar /api/ai/gcode # ai.gcode

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/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
}
Respostas
200 objeto 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
Exemplo 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
Experimente

/api/ai/toolpath-analysis

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

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  gcode?: string | null
  model?: string | null
  max_tokens?: number | "Infinity" | "-Infinity" | "NaN" | null
}
Respostas
200 objeto application/json
{
  insights: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemplo 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-análise
curl --request POST "${CADCAMFUN_URL}/api/ai/toolpath-analysis" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/feedback

publicar /api/ai/feedback # ai.feedback

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  messageId?: string | null
  rating?: string | null
  comment?: string | null
}
Respostas
200 objeto application/json
{
  success: true
  message: string
}
400 AiBadRequestEncoded application/json
AiBadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 AiFailureEncoded application/json
AiFailureEncoded
Exemplo 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/feedback
curl --request POST "${CADCAMFUN_URL}/api/ai/feedback" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente

/api/ai/proxy

publicar /api/ai/proxy # ai.proxy

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/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
}
Respostas
200 objeto 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
Exemplo 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
Experimente

/api/ai/oauth

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

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  provider: "openai" | "xai"
}
Respostas
200 objeto 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
buscar exemplo
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/autorizar
curl --request POST "${CADCAMFUN_URL}/api/ai/oauth/authorize" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Experimente
publicar /api/ai/oauth/complete # ai.oauthComplete

Requer Authorization: Bearer <token>.

Corpo da solicitação · obrigatório · aplicação/json
{
  provider: "openai" | "xai"
  attemptId: string
  code?: string | null
}
Respostas
200 objeto 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
buscar exemplo
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
Experimente

Esquemas

Esquemas nomeados acessíveis a partir dos parâmetros, corpos e respostas deste grupo. UM ? marca um campo opcional; | null marca um campo que pode estar presente com um valor nulo.

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
}

Chamando este grupo

Os IDs de operação têm o formato ai.<name>. O Promise SDK gerado (@cadcamfun/api/sdk) expõe a maioria deles como client.<namespace>.<method>(input), onde input é um objeto plano de parâmetros de caminho e campos de corpo; o exemplo do SDK de cada cartão mostra o acessador e o tipo de entrada exatos. Multipart uploads, respostas binárias ou JavaScript e webhooks brutos não são gerados; essas cartas mostram fetch em vez disso.

Erros do Promise SDK
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
  }
}

Solução de problemas

SintomaCausa provávelConsertar
401 em cada chamadaToken de um lançamento anterior ou ausente Bearer prefixoEnviar Authorization: Bearer <token> com o token com o qual o sidecar foi iniciado.
400 antes que algo aconteçaO corpo ou parâmetro não corresponde ao esquemaCompare a carga útil com o esquema de solicitação no cartão.
403 ou 404 em um registro que você vê em outro lugarA conta atuante difereEnvie o certo x-session-tokenou use o perfil local que possui o registro.
409Estado conflitante, como um nome duplicado ou um cabeçalho de ramificação obsoletoLeia novamente o recurso e tente novamente com os dados atuais.
Tente dizer "bloqueado pelo CORS"Os documentos são veiculados a partir de uma origem sem loopbackExecute os documentos localmente ou copie a solicitação como curl.
Ligação recusadaO sidecar foi reiniciado em uma nova portaLeia a porta do novo ready linha.