Перейти к содержанию
CADCAMFUN
Документы

Документация

Справочник по API

Полная ссылка на ресурсы HTTP, локальный доступ с проверкой подлинности, контракты потоковой передачи и клиенты, созданные на основе общих схем.

Автоматически переведено с английского. Смотреть оригинал на английском

Обзор

Сайдкар представляет собой одиночный эффект HttpApi. Каждая конечная точка является типизированным HttpApiEndpoint с телами запросов и ответов с проверкой схемы, поэтому эта ссылка, сгенерированный SDK и работающий сервер происходят из одного и того же объявления в packages/api.

Поверхность
325 операций

По путям 232 и группам ресурсов 35.

Типы
56 схемы

Формы запроса, ответа и ошибки, каждая из которых связана с операциями, которые ее используют.

Договор
OpenAPI 3.1.0

Испускаемый сайдкаром в /api/openapi.json; снимок в packages/web проверяется bun run check:api-reference.

Клиенты
Одна поверхность

Веб-просмотр на рабочем столе, мобильный компаньон, мост AI и сценарии — все они вызывают одни и те же маршруты.

Базовый URL

Размещенного API CADCAMFUN не существует. Сайдкар работает на вашей машине, связывает 127.0.0.1 на порту, выбранном операционной системой (она прослушивает порт 0), проверяет свой собственный /api/healthи только затем печатает одну строку JSON на стандартный вывод. Базовый URL-адрес http://127.0.0.1:<port> из этой линии.

Запустите одноразовую сайдкар и прочитайте ее порт.
export CADCAMFUN_TOKEN=dev-token
CADCAMFUN_DATA_DIR=$(mktemp -d) \
CADCAMFUN_MIGRATIONS_DIR=$PWD/packages/db/drizzle \
CADCAMFUN_AI_OFFLINE=true \
  bun --no-env-file apps/sidecar/src/main.ts
# stdout: {"event":"ready","port":46709}
export CADCAMFUN_URL=http://127.0.0.1:46709

Порт меняется при каждом запуске

Прочитайте это из ready (оболочка рабочего стола делает именно это) вместо того, чтобы принимать фиксированное число. Журналы передаются на stderr, поэтому стандартный вывод передает только события готовности или ошибки.

Аутентификация

В контракте заявлена одна схема безопасности, bearer (HTTP Bearer). 324 из 325 операций требуют этого; только GET /api/health является общедоступным.

ПолномочияОтправлено какИспользуется
Запустить токенAuthorization: Bearer <token>Веб-просмотр рабочего стола и локальные сценарии; ценность CADCAMFUN_TOKEN.
Токен-компаньонAuthorization: Bearer <token>Сопряженный телефон; более узкий доступ, см. компаньон в паре.
Сеанс аккаунтаx-session-tokenВыбирает действующую учетную запись поверх токена на предъявителя; видеть личность ниже.
Публичный и защищенный
curl -s "$CADCAMFUN_URL/api/health"
curl -s "$CADCAMFUN_URL/api/projects" -H "Authorization: Bearer $CADCAMFUN_TOKEN"

Конвенции

  • JSON на входе, JSON на выходе. Тела application/json если на карточке не указано иное: две составные загрузки, один веб-перехватчик октетного потока, загрузочный файл JavaScript, загрузка в формате zip, двоичный файл плагина и два потока событий.
  • Идентификаторы операций отмечены точками. projects.get, vcs.commit: тег группы, точка, имя метода, используемое сгенерированными клиентами.
  • Ошибки типизированы. Сбои объявляются для каждой конечной точки и влекут за собой _tag; включите его вместо разбора сообщений. В контракте 401 объявляется в операциях 269, 500 в 264 и 400 в 206.
  • Операционные якоря стабильны. Каждая карта может быть связана как #op-<method>-<path>, например /docs/api/projects#op-get-api-projects-id.

Потоковое вещание

ПутьФорманесет
GET /api/projects/{id}/eventsСШЭИзменение событий для одного проекта.
POST /api/ai/chat/streamСШЭВыходные данные помощника по мере его создания, плюс сердцебиение; видеть ИИ-стриминг.
Следите за событиями проекта
curl -N "$CADCAMFUN_URL/api/projects/$PROJECT_ID/events" \
  -H "Authorization: Bearer $CADCAMFUN_TOKEN"

Клиенты

@cadcamfun/api/sdk генерируется из этого же контракта: каждый идентификатор операции ниже является типизированным методом CadCam.make(...), принимая один простой ввод параметров пути и полей тела. Генерируется 259 из 325 операций; каждая карта показывает свое точное название.

@cadcamfun/api/sdk
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

const projects = await client.projects.list()
const created = await client.projects.create({ name: "Bracket" })

Ресурсы

Операции 325 в группах 35, упорядоченные по тому, что они обслуживают.

Основной

Дизайн

Производство

Ресурсы

Расширения

Счета

Аутентификация15 endpoints

Вход в учетную запись, регистрация, восстановление, проверка, магические ссылки, поиск сеанса и регистрация пароля.

Пользователи18 endpoints

Профили, ресурсы учетной записи, ключи API, записи токенов, пароли и удаление учетной записи.

Организации5 endpoints

Списки организаций и записи управляемых организаций.

Уведомления4 endpoints

Список уведомлений, обновления состояния чтения, удаление и пометка всех прочитанных.

Биллинг15 endpoints

Информация о подписке, интеграция оформления заказа/портала Stripe, пробное обслуживание и прием подписанного веб-перехватчика.

Аналитика10 endpoints

Показатели приложений, недавняя активность, запросы об использовании и запросы на отслеживание.

Службы приложений10 endpoints

Маршруты интеграции с рабочим столом, отслеживаемые операции проекта, уведомления и записи принудительной подписки.

Список ожидания1 endpoints

Отправьте регистрацию в список ожидания через API локального приложения.

документ OpenAPI

Скачать /docs/api/openapi.json (зарегистрированный снимок, отображаемый на этом сайте) или получить действующий документ из работающей сайдкара по адресу /api/openapi.json. Восстановите снимок с помощью bun run generate:api-reference в packages/web после изменения конечной точки.

Контракт и сервер

@cadcamfun/api определяет схемы запросов и ответов с помощью Effect HttpApi. Он экспортирует корень Api, записи домена, ошибки с тегами и клиенты. Обработчики запросов, решения об авторизации, запросы к базе данных и вызовы провайдеров выполняются в боковой панели. Импорт схемы не запускает сервер.

Сайдкар публикует свой обслуживаемый контракт на GET /api/openapi.json. Используйте этот рабочий документ для проверки методов, параметров пути, полезных данных и кодов состояния приложения, к которому вы подключены. Сервер собирает свои группы в apps/sidecar/src/layers.ts; общий контракт собран в packages/api/src/index.ts.

Аутентификация и личность

Защищенные маршруты требуют Authorization: Bearer <token>. Рабочий стол получает новый токен приложения при запуске его вспомогательного приложения. GET /api/health является исследованием общественного здравоохранения; родной /health и /version защищены. Токены носителя приложения сравниваются с использованием безопасного по времени сравнения.

Дополнительный x-session-token осуществляет учетную сессию JWT. Токен-носитель допускает локальное приложение; сеанс выбирает свою действующую учетную запись. Отсутствующий, просроченный, недействительный или потерянный сеанс возвращается к локальному профилю установки. Затем обработчики ресурсов проверяют право собственности или доступ организации с помощью помощников авторизации репозитория.

Токен моста с ограниченной областью действия допускает только GET /api/ai/actions и POST /api/ai/actions/invoke. Он не предоставляет доступ к CRUD проекта, настройкам учетных данных или другим маршрутам HTTP. Его проект и область чтения/записи снова проверяются мостом действий.

Семейства ресурсов

  • Дизайн: проекты, чертежи, компоненты, версии чертежей, импорт/экспорт объектов, точный анализ САПР, экспорт STEP и анализ сборок.
  • Производство: траектории и версии инструмента, комментарии, предложения генератора, синтаксический анализ, проверка воспроизведения, собственные производственные задания, материалы, инструменты, конфигурации станков, элементы библиотеки и производственные затраты.
  • Ассистент: поставщики, учетные данные, модели, сеансы, очереди потоковой передачи, элементы управления сеансами, действия, память проекта, контекст рабочей области и советы без сохранения состояния.
  • Сотрудничество: ветки, коммиты, различия, запросы на включение, обзоры, зеркала GitHub, файлы и запуски рабочих процессов, события в реальном времени и сопряжение сопутствующих ресурсов.
  • Сервисы приложений: пользователи, аутентификация, организации, уведомления, файлы, плагины, выставление счетов, аналитика, список ожидания, конфигурация MCP и локальное хранилище значений ключа.

Группы контрактов сохраняют свои формы ответа, специфичные для конечной точки. Клиент должен декодировать схему операции, которую он вызывает, вместо того, чтобы использовать единый конверт JSON для всего приложения.

Ответы и неудачи

Распространенные ошибки с тегами сопоставляются с HTTP 400 (BadRequest), 401 (Unauthorized), 403 (Forbidden), 404 (NotFound), 405 (MethodNotAllowed), 409 (Conflict) и 500 (InternalError). Их заявленные схемы имеют удобочитаемый для человека вид. message. Некоторые группы используют конверт с success: false, message, и errors; небольшое количество использует error поле.

Ответы об успехе могут быть записью, массивом, значением, допускающим значение NULL, или конвертом. Envelope включает в себя success, message, и data; EnvelopeOpt делает сообщение необязательным. Конечные точки создания явно объявляют 201, где это необходимо. Не делайте вывод об успехе исключительно на основе поля JSON, не проверив статус HTTP и схему конечной точки.

Декодирование схемы проверяет входные данные транспорта перед выполнением обработчика. Бизнес-проверка по-прежнему выполняется в службе: структурно допустимый запрос может ссылаться на недоступный чертеж, содержать устаревший производственный артефакт или запрашивать конфликтующую операцию ветвления.

Используйте общий клиент

ApiClient.layer занимает baseUrl и приложение token. Он предоставляет транспорт выборки и промежуточное программное обеспечение для авторизации клиента. Его методы взяты непосредственно из Api, поэтому этот клиент также охватывает операции, пропущенные при генерации кода.

Чтение проектов с помощью клиента Effect
import { ApiClient } from "@cadcamfun/api"
import { Effect } from "effect"

const projects = Effect.gen(function* () {
  const api = yield* ApiClient
  return yield* api.projects.list()
}).pipe(Effect.provide(ApiClient.layer({ baseUrl, token })))

Базовый URL-адрес — это адрес обратной связи и назначенный порт боковой панели. Решите проблему с помощью подключения к рабочему столу, а не сохраняйте порт при каждом запуске. Не допускайте попадания токенов в URL-адреса и журналы.

Запросы на проектирование и изготовление

Использование проектных операций /api/projects; чертежи и траектории имеют свои собственные коллекции и подробные маршруты. POST /api/toolpaths/generate создает G-код, анализируемые данные программы, предупреждения и статистику на основе настроек генератора и геометрии. /suggest, /parse, и /verify предоставляйте рекомендации по параметрам, интерпретацию G-кода и воспроизведение акций. Эти вычисления не создают сохраненную траекторию инструмента.

POST /api/toolpaths/manufacture принимает версионный снимок САПР и возвращает результат ядра с ЧПУ, назначениями инструментов, данными резки, заявлениями, проблемами и уровнем выпуска. Сохраните результирующий документ отдельно с помощью операции создания или обновления траектории. Видеть Настройки для проверки доказательств во время стойкости.

POST /api/cad/exact/analyze, /step, и /assembly принять явные элементы или сохраненный идентификатор чертежа. При чтении сохраненного рисунка применяются обычные проверки доступа к рисунку вызывающего объекта.

Потоковая передача и восстановление

Поток AI переносит типизированные события для текста, рассуждений, вызовов и результатов инструментов, запросов разрешений и вопросов, повторных попыток, состояния хода, контекста и завершения. Клиенты должны получать события постепенно и сохранять идентификатор сеанса. Завершение HTTP-соединения не является достаточным свидетельством завершения поворота модели: состояние сеанса можно прочитать снова после повторного подключения.

Схемы событий ИИ живут в packages/api/src/ai-events.ts и packages/ai/src/events.ts. Общие события в реальном времени используют группу событий. Двоичные загрузки, ответы начальной загрузки плагина JavaScript и подписанные необработанные тела веб-перехватчиков требуют собственной обработки транспорта.

Список маршрутов, которые используют страницы их результатов page и limit параметры запроса. Для конфигураций машины, page по умолчанию — 1, limit по умолчанию используется 20 и ограничивается 1–100, а ответ передает pagination с page, limit, total, и totalPages (apps/sidecar/src/http/machine-configs.ts). Проверьте справочную страницу каждой группы на предмет параметров, которые она фактически объявляет.

Созданные SDK

@cadcamfun/httpapi-codegen отражает группы HttpApi в метаданных операции и созданных клиентах. Генератор API записывает Promise SDK в packages/api/src/sdk/generated и воздействовать на клиентов, чтобы packages/api/src/client/generated. Публичный Promise SDK экспортируется как @cadcamfun/api/sdk.

Перегенерировать или проверить отклонение клиента
bun run --filter @cadcamfun/api generate
bun run --filter @cadcamfun/api generate:check

В обеих сгенерированных целях отсутствуют многочастная загрузка профиля, многокомпонентная установка плагина, создание MCP с несколькими схемами успеха, обновление MCP с конфликтующими идентификаторами, создание траектории проекта с повторяющимися входными именами и обслуживание файла плагина с заголовками потока. Цель Promise также не включает в себя необработанные веб-перехватчики Stripe, загрузку плагина JavaScript, загрузку двоичных файлов и запросы генерации/предложения генератора. Эти упущения очевидны в packages/api/scripts/generate-clients.ts; использовать контрактного клиента или соответствующий необработанный транспорт для этих операций.

Исходная организация

groups/ содержит контракты ресурсов. Общая геометрия и схемы CAM взяты из @cadcamfun/core; cad-exact.ts, cam-kernel.ts, и cam-program.ts описывать богатые результаты CAD/CAM и переносимые документы. client.ts создает контрактный клиент, а сценарий генерации владеет сгенерированными целями и списками пропусков.

Правила интеграции

Повторно используйте схемы контрактов на границах транспорта и сохраняйте зависимости базы данных во вспомогательном компоненте. Представьте конечную точку через ее контракт, обработчик, службу или репозиторий, а также сфокусированное покрытие HTTP вместе. Сгенерированные файлы являются выходными данными: отредактируйте их контракт или генератор и заново сгенерируйте их. Версия схемы API, версия переносимого файла и версия API плагина описывают отдельные контракты.

Ссылка на ресурс

325 операций через 232 пути и 35 группы ресурсов, с 56 именованными схемами. На каждой странице ресурса перечислены его операции и показаны объявленные параметры пути/запроса/заголовка, обязательные и необязательные поля, значения, допускающие значение NULL, типы контента, статусы успеха и ошибки, а также полные схемы.

Данные исходят из packages/api/src/index.ts, тот же составленный контракт HttpApi, используемый клиентами и вспомогательным устройством. На страницах описывается выданный контракт; проверить работающий сервер /api/openapi.json если вы подключитесь к другой версии.

HTTP-ресурс

Здоровье

Проверка работоспособности общедоступного процесса со статусом и меткой времени.

HTTP-ресурс

Система

Аутентифицированная готовность и версия приложения, используемая собственными клиентами.

HTTP-ресурс

Проекты

Создавайте, просматривайте, читайте, обновляйте и удаляйте проекты с проверкой доступа владельца и организации.

HTTP-ресурс

Рабочая область

Чертежи проектов, компоненты, траектории движения инструментов, библиотечные ресурсы, доступные только для чтения, а также ограниченные предварительные просмотры для сопутствующих клиентов.

HTTP-ресурс

Рисунки

Чертежи проекта и их сохраненная геометрия, метаданные и операции обновления.

HTTP-ресурс

Компоненты

Многоразовые компоненты проекта и их сохраняемые проектные данные.

HTTP-ресурс

Точный САПР

Анализируйте точную геометрию, экспортируйте STEP и проверяйте взаимосвязи сборок на основе снимков сцены или сохраненных чертежей.

HTTP-ресурс

Траектории инструмента

Сохраненные программы обработки, ассоциации чертежей и проверенная переносная производственная документация.

HTTP-ресурс

Траектории проекта

Список и создание траекторий инструмента в рамках проекта с конвертами ответов для конкретных конечных точек.

HTTP-ресурс

Обработка

Собственное производство, генерация G-кода на основе настроек, предложения, анализ и проверка воспроизведения.

HTTP-ресурс

История траектории

Версии траекторий, восстановление, обнаружение библиотек и комментарии к программам.

HTTP-ресурс

Материалы

Записи о материалах, свойства обработки приложений и доступ к ресурсам.

HTTP-ресурс

Хранение материалов

Вложения для хранения материалов и импорт/экспорт JSON для обмена библиотеками.

HTTP-ресурс

Инструменты

Записи о фрезах и размеры, используемые в рабочих процессах обработки.

HTTP-ресурс

Хранение инструментов

Данные о хранении и сборе инструментов или импорт/экспорт каждого инструмента.

HTTP-ресурс

Машины

Записи конфигурации машины, обновления, удаление и клонирование.

HTTP-ресурс

Хранение машин

Приложения для хранения машин и импорт/экспорт конфигурации.

HTTP-ресурс

Библиотека

Записи общей библиотеки и коллекции поиска компонентов, материалов и инструментов.

HTTP-ресурс

Затраты на производство

Оценки, запросы на расчеты, материальные затраты, эксплуатационные расходы и записи об износе инструментов.

HTTP-ресурс

Сеансы и действия ИИ

Провайдеры, учетные данные, разговоры, очереди потоковой передачи, вызов действий, токены моста, навыки и восстановление сеанса.

HTTP-ресурс

История и рабочие процессы

Совместимые с Git проекта коммиты, ветки, восстановления, проверки, зеркалирование GitHub и диспетчеризация рабочих процессов.

HTTP-ресурс

События проекта

События, отправляемые сервером в рамках проекта, для работающих клиентов.

HTTP-ресурс

Сопряжение с компаньоном

Состояние шлюза рабочего стола, включение/отключение, сопряжение устройств и отзыв устройств.

HTTP-ресурс

Плагины

Реестр плагинов, установка пакетов, настройка, включение/отключение и обслуживание ресурсов плагина.

HTTP-ресурс

Конфигурация MCP

Конфигурация соединения MCP CRUD и запросы информации о сервере.

HTTP-ресурс

Файлы

Операции загрузки и выгрузки с полезной нагрузкой, зависящей от конечной точки, и кодировкой ответа.

HTTP-ресурс

Хранилище ключей и значений

Совместимые с JSON записи предпочтений и контекста со списком префиксов и операциями для каждой клавиши.

HTTP-ресурс

Организации

Списки организаций и записи управляемых организаций.

HTTP-ресурс

Уведомления

Список уведомлений, обновления состояния чтения, удаление и пометка всех прочитанных.

HTTP-ресурс

Аутентификация

Вход в учетную запись, регистрация, восстановление, проверка, магические ссылки, поиск сеанса и регистрация пароля.

HTTP-ресурс

Пользователи

Профили, ресурсы учетной записи, ключи API, записи токенов, пароли и удаление учетной записи.

HTTP-ресурс

Биллинг

Информация о подписке, интеграция оформления заказа/портала Stripe, пробное обслуживание и прием подписанного веб-перехватчика.

HTTP-ресурс

Аналитика

Показатели приложений, недавняя активность, запросы об использовании и запросы на отслеживание.

HTTP-ресурс

Службы приложений

Маршруты интеграции с рабочим столом, отслеживаемые операции проекта, уведомления и записи принудительной подписки.

HTTP-ресурс

Список ожидания

Отправьте регистрацию в список ожидания через API локального приложения.

Скачать OpenAPI JSON · Отслеживайте запросы с записанными ответами

Соглашения о подключении и запросе

API предоставляется локальным дополнительным модулем, а не фиксированной размещенной конечной точкой. Tauri получает динамически выбранный URL-адрес обратной связи и токен запуска. Запускаемая вручную сайдкар объявляет о своем порте в событии готовности JSON. Вместо этого сопряженный мобильный клиент подключается через настроенный шлюз HTTPS.

Чтение с текущим подключением сайдкара
curl --silent --show-error "$CADCAMFUN_URL/api/projects" \
  --header "Authorization: Bearer $CADCAMFUN_TOKEN"

Установите обе переменные из фактического соединения. В шаблонах запросов на страницах ресурсов намеренно используются заполнители и файлы полезной нагрузки. Необязательные транспортные поля не являются обещаниями, что каждая бизнес-операция может их пропустить: например, создание проекта отклоняет отсутствующее имя в его обработчике.

СоглашениеПоведение клиента
Параметры путиЗамените именованный сегмент и закодируйте его значение в URL-адресе. Рассматривайте идентификатор как один сегмент.
Параметры запросаКодируйте объявленные значения. Пагинация и фильтрация выполняются для каждой конечной точки; универсального контракта на размер страницы не существует.
Полезная нагрузка JSONОтправьте объявленный объект с помощью Content-Type: application/json. Требуемое присутствие и принятие значения null независимы.
Составная полезная нагрузкаСоздавайте части формы с помощью клиента загрузки или FormData; позвольте транспорту выбрать свою границу.
Двоичный, JavaScript или потоковый ответИспользовать заявленный тип носителя. Не звони response.json() безоговорочно.
ОшибкиПроверьте статус HTTP и декодируйте заявленную форму отказа конечной точки. Конверты ошибок различаются в зависимости от семейства ресурсов.
Повторная попытка записиСчитайте состояние после прерванной операции перед повторной отправкой мутации. Контракт не предоставляет универсальный механизм идемпотентного ключа.

Создано эталонное обслуживание

packages/web/script/generate-api-reference.mjs считывает составленный контракт, используя установленную реализацию Effect пакета API, и записывает эталонный JSON. Worker документации потребляет сгенерированный контент; он не инициализирует сервер приложений для ответа на запросы документации.

Из пакетов/сети
bun run generate:api-reference
bun run check:api-reference
bun run check:docs-index

Покрытие ресурсов проверяется по каждой объявленной операции. Вновь добавленная группа должна получить метаданные и навигацию, предназначенные для читателя, а измененный запрос или ответ должен быть создан заново. Рукописные руководства по-прежнему объясняют правила авторизации, побочные эффекты, конфигурацию службы и ограничения, которые не может выразить одна только схема HTTP.

Рецепты интеграции

Начните с перехваченные HTTP-запросы чтобы увидеть, как на самом деле реагируют создание проекта, бизнес-проверка, отклонение носителя, связанные записи и сохранение значений ключей. Использовать типизированная клиентская интеграция для воспроизведения этих операций с помощью Promise SDK или клиента Effect и обработки их отдельных каналов сбоев.

ИнтеграцияПроцедураКлючевое состояние для сохранения
Редактор проектаСоздание, сохранение и повторное открытие работыИдентификация проекта/ресурса, сохраненные данные, фактическая семантика обновления.
Производственный трубопроводСоздание и сохранение собственного заданияСобранный запрос, точное ЧПУ/программа, заявления о выпуске, соответствующий переносимый документ.
Пользовательский интерфейс помощникаПотребление событий и восстановление сеансовИдентификатор проекта/сеанса, ожидающие разрешения/вопросы, состояние поворота терминала.
Внешние возможностиСоздайте поддерживаемый плагинМанифест, экспорт модулей, предоставление возможностей, проверка аргументов и результат инструмента.
Обзор автоматизацииВерсия и обзор работы проектаКоммит/ссылка, структурные различия, обзоры, зафиксированный рабочий процесс, результаты отдельных проверок.
Парный клиентВключение и управление доступом к устройствамАдрес шлюза, отпечаток сертификата, индивидуально отзываемый токен устройства.

Эти рецепты связывают контракты HTTP с реальным поведением службы. Схема может описывать требуемое присутствие, кодировку и возвращаемую форму; связанное с ним руководство объясняет правила доступа, эффекты сохранения, поддерживаемое восстановление и ограничения, которые нельзя вывести только на основе этих типов.

Операции на группу ресурсов

В настоящее время в контракте объявлены операции 270 в группах 34, все в одном bearer Схема безопасности HTTP. Единственная операция без защиты носителя — это проверка общественного здравоохранения. Таблица вычисляется на основе сгенерированного документа OpenAPI: операций на группу, используемых методов HTTP, количества различных путей и одного репрезентативного пути.

ГруппаЯрлыкОперацииМетодыПутиПример пути
Здоровьеhealth1ПОЛУЧИТЬ 11/api/health
Системаsystem2ПОЛУЧИТЬ 22/health
Проектыprojects5УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 12/api/projects
Рисункиdrawings5УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 12/api/drawings/{id}
Компонентыcomponents5УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 12/api/components/{id}
Точный САПРcadExact3СООБЩЕНИЕ 33/api/cad/exact/analyze
Траектории инструментаtoolpaths7УДАЛИТЬ 1, ПОЛУЧИТЬ 3, ОТПРАВИТЬ 2, ПОСТАВИТЬ 13/api/drawings/{id}/toolpaths
Траектории проектаprojectToolpaths2ПОЛУЧИТЬ 1, ОТПРАВИТЬ 11/api/projects/{id}/toolpaths
ОбработкаtoolpathGenerator5СООБЩЕНИЕ 55/api/toolpaths/generate
История траекторииtoolpathExtras8УДАЛИТЬ 1, ПОЛУЧИТЬ 3, ОТПРАВИТЬ 3, ПОСТАВИТЬ 15/api/toolpaths/library
Материалыmaterials5УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 12/api/materials
Хранение материаловmaterialsStorage5УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 22/api/materials/export-import
Инструментыtools5УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 12/api/tools
Хранение инструментовtoolsStorage7УДАЛИТЬ 1, ПОЛУЧИТЬ 3, ОТПРАВИТЬ 33/api/tools/export-import
МашиныmachineConfigs6УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 2, ПОСТАВИТЬ 13/api/machine-configs
Хранение машинmachineConfigsStorage5УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 22/api/machine-configs/export-import
Библиотекаlibrary8УДАЛИТЬ 1, ПОЛУЧИТЬ 5, ОТПРАВИТЬ 1, ПОСТАВИТЬ 15/api/library
Затраты на производствоproduction-costs21УДАЛИТЬ 4, ПОЛУЧИТЬ 8, ОТПРАВИТЬ 5, ПОСТАВИТЬ 49/api/production-costs/estimates
Сеансы и действия ИИai34УДАЛИТЬ 3, ПОЛУЧИТЬ 8, ОТПРАВИТЬ 21, ПОСТАВИТЬ 232/api/ai/actions
История и рабочие процессыvcs22GET 10, POST 11, PUT 119/api/projects/{id}/actions/dispatch
События проектаevents1ПОЛУЧИТЬ 11/api/projects/{id}/events
Сопряжение с компаньономcompanion5УДАЛИТЬ 1, ПОЛУЧИТЬ 1, ОТПРАВИТЬ 35/api/companion
Плагиныplugins16УДАЛИТЬ 1, ПОЛУЧИТЬ 8, ИСПРАВИТЬ 1, ОТПРАВИТЬ 4, ПОСТАВИТЬ 212/api/plugins
Конфигурация MCPmcp8УДАЛИТЬ 2, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 2, ПОСТАВИТЬ 23/api/mcp/config
Файлыfiles2ПОЛУЧИТЬ 1, ОТПРАВИТЬ 12/api/download
Хранилище ключей и значенийkv4УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ПОСТАВИТЬ 12/api/kv
Организацииorganizations5УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 12/api/organizations
Уведомленияnotifications4УДАЛИТЬ 1, ПОЛУЧИТЬ 1, ОТПРАВИТЬ 1, ПОСТАВИТЬ 13/api/notifications
Аутентификацияauth12ПОЛУЧИТЬ 1, ОТПРАВИТЬ 1112/api/auth/forgot-password
Пользователиuser16УДАЛИТЬ 2, ПОЛУЧИТЬ 10, ОТПРАВИТЬ 2, ПОСТАВИТЬ 212/api/user/api-keys
Биллингbilling15УДАЛИТЬ 1, ПОЛУЧИТЬ 5, ОТПРАВИТЬ 8, ПОСТАВИТЬ 110/api/better-auth-stripe/billing-portal
Аналитикаanalytics10УДАЛИТЬ 1, ПОЛУЧИТЬ 7, ОТПРАВИТЬ 29/api/analytics
Службы приложенийmisc10УДАЛИТЬ 2, ПОЛУЧИТЬ 3, ОТПРАВИТЬ 4, ПОСТАВИТЬ 16/api/app-control/notify
Список ожиданияwaitlist1СООБЩЕНИЕ 11/api/waitlist

Коды статуса по контракту

Подсчет каждого объявленного ответа один раз за операцию дает следующую картину того, что клиент должен быть готов декодировать:

СтатусОбъявленоТипичный кузов
200242 операцийРесурс, массив, значение, допускающее значение NULL, или Envelope
20128 операцийСозданная запись (например POST /api/projects)
2041 операцияНикто
400206 операцийBadRequest, EnvBadRequest и варианты для конкретного семейства
401269 операцийUnauthorized (промежуточное программное обеспечение носителя)
403101 операцийForbidden / EnvForbidden
404149 операцийNotFound / EnvNotFound
40530 операцийEnvMethodNotAllowed / KeyedMethodNotAllowed
40929 операцийConflict / EnvConflict
500264 операцийInternalError, EnvInternal, KeyedInternal и семейные варианты
501, 5031 операция каждаяКонкретно для конечной точки

Каждая ошибка является ошибкой с тегом Effect, поэтому ее тело JSON всегда содержит _tag дискриминатор рядом со своими полями. Существует три семейства кузовов, унаследованных от устаревших обработчиков, поэтому существующие клиенты продолжают работать:

Обычная ошибка (только сообщение)
{ "_tag": "NotFound", "message": "Project not found" }
Ошибка конверта
{ "_tag": "EnvNotFound", "success": false, "message": "Material not found", "errors": null }
Ошибка ключа (несколько маршрутов библиотеки)
{ "_tag": "KeyedInternal", "error": "Failed to load components" }

Конверты успеха отражают конверт ошибки: { success: true, message, data }, где data может быть null. EnvelopeOpt вариант опускается message когда обработчик его не предоставил. Включить _tag а не о присутствии message или error.

Как обрабатывается запрос

клиентвыборка/SDK совпадение маршрутаметод + путь чек на предъявителя401 Неавторизованный декодирование схемы400 при неверном вводе обработчикдоступ + логика кодироватьуспех / _tag x-session-token выбирает действующую учетную запись; отсутствует или недействителен, возвращается к локальному профилю
  1. Маршрутизатор соответствует методу и пути. Неизвестные маршруты никогда не достигают обработчика.
  2. Промежуточное программное обеспечение носителя сравнивает токен за постоянное время. Отсутствующий или неправильный токен останавливает запрос с помощью 401 перед декодированием.
  3. Путь, запрос, заголовки и тело декодируются по схемам операции. Структурные проблемы становятся 400 без запуска бизнес-кода.
  4. Обработчик разрешает действующую учетную запись, проверяет право собственности или членство в организации (403/404) и запускает службу.
  5. Результат кодируется с помощью объявленной схемы успеха или сбоя с его помеченной схемой ошибки и статусом.

Ответы, которые не являются JSON

ОперацияТип носителяКак потреблять
POST /api/ai/chat/streamtext/event-streamЧитайте постепенно; каждый data: строка — это одно типизированное событие-помощник.
GET /api/projects/{id}/eventstext/event-streamЖивые мероприятия проекта; переподключитесь и перечитайте состояние после падения.
GET /api/plugins/bootstrap.jsapplication/javascriptЗагружается хостом плагина, не анализируется как JSON.
GET /api/plugins/serveapplication/octet-streamБайты файла плагина.
GET /api/downloadapplication/zipСохранить как файл; использовать response.blob() или транслировать на диск.

Сгенерированный Promise SDK отклоняет потоковый ответ, тип контента которого не соответствует text/event-stream с ClientError("UnsupportedContentType")и одно событие SSE размером более 16 МиБ с SseEventTooLarge.

Вызов API без клиента

Минимальная типизированная оболочка выборки
type TaggedError = { _tag: string; message?: string; error?: string }

async function call<T>(base: string, token: string, method: string, path: string, body?: unknown): Promise<T> {
  const response = await fetch(new URL(path, base), {
    method,
    headers: {
      authorization: `Bearer ${token}`,
      ...(body === undefined ? {} : { "content-type": "application/json" }),
    },
    body: body === undefined ? undefined : JSON.stringify(body),
  })
  if (response.status === 204) return undefined as T
  const payload = await response.json()
  if (!response.ok) {
    const failure = payload as TaggedError
    throw new Error(`${response.status} ${failure._tag}: ${failure.message ?? failure.error}`)
  }
  return payload as T
}

const project = await call<{ id: string; name: string }>(
  process.env.CADCAMFUN_URL!, process.env.CADCAMFUN_TOKEN!,
  "POST", "/api/projects", { name: "Bracket" },
)

Предпочитайте сгенерированные клиенты в TypeScript: они знают статус успеха каждой операции и объявленные статусы ошибок, а все остальное рассматривают как UnexpectedStatus вместо того, чтобы гадать.

Через 3Д

Группы API по размеру Перетащите на орбиту · прокрутите, чтобы увеличить · перетащите вправо, чтобы панорамировать
Every API group as a column, height = operations counted from the generated OpenAPI document (270 in total). Rows are the six sidebar categories; ai (34), history (22) and costs (21) are the largest groups.