コンテンツへスキップ
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.

クライアント
1つの面

デスクトップ Web ビュー、モバイル コンパニオン、AI ブリッジ、およびスクリプトはすべて、これらの同じルートを呼び出します。

ベースURL

ホストされた CADCAMFUN API はありません。サイドカーはマシン上で実行され、バインドされます 127.0.0.1 オペレーティング システムが選択したポート上で (ポート 0 でリッスンします)、独自のチェックを行います /api/health、そしてその後のみ標準出力に 1 行の 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 に保存されるため、stdout には準備完了イベントまたはエラー イベントのみが送信されます。

認証

契約では 1 つのセキュリティ スキームが宣言されています。 bearer (HTTP Bearer)。 324 回中 325 回の操作でこれが必要です。のみ GET /api/health 公開されています。

資格情報として送信使用者
起動トークンAuthorization: Bearer <token>デスクトップ Web ビューとローカル スクリプト。の値 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 カードに別途記載がない限り、2 つのマルチパート アップロード、1 つのオクテット ストリーム Webhook、1 つの JavaScript ブートストラップ、zip ダウンロード、1 つのバイナリ プラグイン ファイル、および 2 つのイベント ストリーム。
  • オペレーション ID は点線で表示されます。 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}/eventsSSE1 つのプロジェクトのイベントを変更します。
POST /api/ai/chat/streamSSE生成されたアシスタント出力とハートビート。見る AIストリーミング.
プロジェクトのイベントをフォローする
curl -N "$CADCAMFUN_URL/api/projects/$PROJECT_ID/events" \
  -H "Authorization: Bearer $CADCAMFUN_TOKEN"

クライアント

@cadcamfun/api/sdk これと同じコントラクトから生成されます。以下のすべての操作 ID は、 CadCam.make(...)、パスパラメータと本文フィールドの 1 つのフラットな入力を受け取ります。 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 オペレーションを、提供するものごとに並べたもの。

コア

デザイン

製造業

リソース

拡張機能

アカウント

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 ルートへのアクセスは許可されません。そのプロジェクトと読み取り/書き込みスコープは、アクション ブリッジによって再度チェックされます。

リソースファミリー

  • デザイン: プロジェクト、図面、コンポーネント、図面バージョン、エンティティのインポート/エクスポート、正確な CAD 解析、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 を明示的に宣言します。 HTTP ステータスとエンドポイント スキーマを確認せずに、JSON フィールドだけから成功を推測しないでください。

スキーマ デコードでは、ハンドラーが実行される前にトランスポート入力が検証されます。ビジネス検証は引き続きサービス内で実行されます。構造的に有効なリクエストは、アクセスできない図面を参照しているか、古い製造成果物が含まれているか、競合するブランチ操作をリクエストしている可能性があります。

共有クライアントを使用する

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 バージョン管理された CAD スナップショットを受け取り、NC、ツールの割り当て、切断データ、クレーム、問題、リリース レベルを含むカーネル結果を返します。ツールパスの作成または更新操作を通じて、結果のドキュメントを個別に保存します。見る セットアップ 永続化中の証拠検証用。

POST /api/cad/exact/analyze, /step、 そして /assembly 明示的な要素または保存された図面識別子を受け入れます。保存された図面を読み取ると、呼び出し元の通常の図面アクセス チェックが適用されます。

ストリーミングとリカバリ

AI ストリームは、テキスト、推論、ツールの呼び出しと結果、許可と質問のリクエスト、再試行、ターン ステート、コンテキスト、および完了の型指定されたイベントを伝送します。クライアントはイベントを段階的に消費し、セッション ID を保持する必要があります。 HTTP 接続の終了は、モデルのターンが終了したことを示す十分な証拠ではありません。セッション状態は、再接続後に再度読み取ることができます。

AI イベント スキーマが存在する packages/api/src/ai-events.ts そして packages/ai/src/events.ts。一般的なライブ イベントはイベント グループを使用します。バイナリのダウンロード、JavaScript プラグインのブートストラップ応答、および署名された生の Webhook 本体には、独自のトランスポート処理が必要です。

ページ結果が使用するルートをリストする 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 グループを操作メタデータと生成されたクライアントに反映します。 The API generator writes a Promise SDK to 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 の生の Webhook、プラグインの JavaScript ブートストラップ、バイナリ ファイルのダウンロード、ジェネレーターの生成/提案リクエストも省略されます。これらの省略は明確に示されています packages/api/scripts/generate-clients.ts;これらの操作には、コントラクト クライアントまたは適切な raw トランスポートを使用します。

ソース組織

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リソース

正確なCAD

正確なジオメトリを分析し、STEP をエクスポートし、シーンのスナップショットまたは保存された図面からアセンブリの関係を検査します。

HTTPリソース

ツールパス

保存された加工プログラム、図面の関連付け、および検証されたポータブル製造ドキュメント。

HTTPリソース

プロジェクトのツールパス

エンドポイント固有の応答エンベロープを使用したプロジェクト スコープのツールパスのリストと作成。

HTTPリソース

機械加工

ネイティブ製造、設定主導の G コード生成、提案、解析、リプレイ検証。

HTTPリソース

ツールパス履歴

ツールパスのバージョン、復元、ライブラリの検出、およびスレッド化されたプログラムのコメント。

HTTPリソース

材料

材料レコード、アプリケーションの加工プロパティ、およびリソースへのアクセス。

HTTPリソース

資材保管庫

マテリアル ストレージの添付ファイルとライブラリ交換のための JSON インポート/エクスポート。

HTTPリソース

ツール

アプリケーションの加工ワークフローで使用されるカッターのレコードと寸法。

HTTPリソース

工具の保管

ツールストレージデータと収集、またはツールごとのインポート/エクスポート。

HTTPリソース

機械

マシン構成の記録、更新、削除、およびクローン作成。

HTTPリソース

機械保管庫

マシンストレージのアタッチメントと構成のインポート/エクスポート。

HTTPリソース

図書館

共有ライブラリ レコードとコンポーネント、材料、工具のルックアップ コレクション。

HTTPリソース

製造コスト

見積り、計算依頼、材料費、作業費、工具の摩耗記録。

HTTPリソース

AI のセッションとアクション

プロバイダー、資格情報、会話、ストリーミング ターン、アクションの呼び出し、ブリッジ トークン、スキル、およびセッションの回復。

HTTPリソース

歴史とワークフロー

プロジェクトの Git 互換のコミット、ブランチ、リストア、レビュー、GitHub ミラーリング、およびワークフロー ディスパッチ。

HTTPリソース

プロジェクトイベント

ライブクライアント向けのプロジェクトスコープのサーバー送信イベント。

HTTPリソース

コンパニオンペアリング

デスクトップ ゲートウェイの状態、有効化/無効化、デバイスのペアリング、デバイスの取り消し。

HTTPリソース

プラグイン

プラグイン レジストリ、パッケージのインストール、構成、有効化/無効化、提供されるプラグイン アセット。

HTTPリソース

MCP 構成

MCP 接続構成 CRUD およびサーバー情報リクエスト。

HTTPリソース

ファイル

エンドポイント固有のペイロードと応答エンコーディングを使用したアップロードおよびダウンロード操作。

HTTPリソース

キーと値のストレージ

プレフィックス リストとキーごとの操作を備えた、JSON 互換の設定とコンテキスト エントリ。

HTTPリソース

組織

組織リストと管理された組織レコード。

HTTPリソース

通知

通知リスト、既読状態の更新、削除、および全既読マーク。

HTTPリソース

認証

アカウントのサインイン、サインアップ、リカバリ、検証、マジック リンク、セッション ルックアップ、およびパスキーの登録。

HTTPリソース

ユーザー

プロファイル、アカウント リソース、API キー、トークン レコード、パスワード、アカウントの削除。

HTTPリソース

請求する

サブスクリプション情報、Stripe チェックアウト/ポータル統合、トライアル メンテナンス、署名付き Webhook 取り込み。

HTTPリソース

分析

アプリケーションのメトリクス、最近のアクティビティ、使用状況のクエリ、および追跡リクエスト。

HTTPリソース

アプリケーションサービス

デスクトップ統合ルート、追跡されたプロジェクト操作、通知、およびプッシュ サブスクリプション レコード。

HTTPリソース

順番待ちリスト

ローカル アプリケーション API を通じて待機リストの登録を送信します。

OpenAPI JSON をダウンロード · キャプチャされた応答でリクエストを追跡する

接続とリクエストの規則

API は、固定ホスト型エンドポイントではなく、ローカル サイドカーによって提供されます。 Tauri は、動的に選択されたループバック URL と起動トークンを取得します。手動で開始されたサイドカーは、JSON Ready イベントでそのポートをアナウンスします。ペアリングされたモバイル クライアントは、代わりに構成された HTTPS ゲートウェイを介して接続します。

現在のサイドカー接続で読み取ります
curl --silent --show-error "$CADCAMFUN_URL/api/projects" \
  --header "Authorization: Bearer $CADCAMFUN_TOKEN"

実際の接続から両方の変数を設定します。リソース ページのリクエスト テンプレートでは、プレースホルダーとペイロード ファイルを意図的に使用します。オプションのトランスポート フィールドは、すべてのビジネス オペレーションで省略できるという保証はありません。たとえば、プロジェクトの作成では、ハンドラーで名前が欠落していると拒否されます。

大会クライアントの動作
パスパラメータReplace the named segment and URL-encode its value.識別子を単一のセグメントとして扱います。
クエリパラメータ宣言された値をエンコードします。ページネーションとフィルタリングはエンドポイントごとに行われます。ユニバーサルなページサイズ契約はありません。
JSONペイロード宣言されたオブジェクトを送信します Content-Type: application/json。必須の存在と null の受け入れは独立しています。
マルチパートペイロードアップロード クライアントまたは FormData を使用してフォーム パーツを構築します。トランスポートにその境界を選択させます。
バイナリ、JavaScript、またはストリーム応答宣言されたメディア タイプを消費します。電話しないでください response.json() 無条件に。
エラーHTTP ステータスを確認し、エンドポイントで宣言された障害の形状をデコードします。エラー エンベロープはリソース ファミリによって異なります。
書き込みを再試行しました操作が中断された後、ミューテーションを再送信する前に状態を読み取ります。この契約では、普遍的な冪等性キーのメカニズムが提供されていません。

生成された参照メンテナンス

packages/web/script/generate-api-reference.mjs aPI パッケージのインストールされたエフェクト実装を使用して、構成されたコントラクトを読み取り、参照 JSON を書き込みます。ドキュメント ワーカーは生成されたコンテンツを消費します。ドキュメント要求に応答するためにアプリケーション サーバーを初期化するわけではありません。

パッケージ/ウェブから
bun run generate:api-reference
bun run check:api-reference
bun run check:docs-index

リソース カバレッジは、宣言されたすべての操作に対してチェックされます。新しく追加されたグループは、読者向けのメタデータとナビゲーションを受信する必要があり、変更されたリクエストまたはレスポンスを再生成する必要があります。手書きのガイドでは、HTTP スキーマだけでは表現できない認可ルール、副作用、サービス構成、および制限について説明しています。

統合レシピ

から始める キャプチャされたHTTPリクエスト プロジェクトの作成、ビジネス検証、ベアラーの拒否、関連レコード、キーと値の永続化が実際にどのように反応するかを確認します。使用 型付きクライアントの統合 promise SDK または Effect クライアントを使用してこれらの操作を再現し、それらの個別の失敗チャネルを処理します。

統合手順保持するキーの状態
プロジェクトエディター作業を作成、保存、再度開くプロジェクト/リソースの ID、保存されたデータ、実際の更新セマンティクス。
製造パイプラインネイティブ ジョブを生成して永続化するキャプチャされたリクエスト、正確な NC/プログラム、リリースクレーム、一致するポータブルドキュメント。
アシスタントUIイベントを消費してセッションを回復するプロジェクト/セッション ID、保留中の権限/質問、ターミナルのターン状態。
外部機能サポートされているプラグインを作成するマニフェスト、モジュールのエクスポート、機能の付与、引数の検証、およびツールの結果。
レビューの自動化プロジェクト作業のバージョンを確認して確認するコミット/参照、構造的な差分、レビュー、コミットされたワークフロー、個別のチェック出力。
ペアリングされたクライアントデバイスアクセスの有効化と管理ゲートウェイ アドレス、証明書のフィンガープリント、個別に取り消し可能なデバイス トークン。

これらのレシピは、HTTP コントラクトを実際のサービスの動作に結び付けます。スキーマは、必要なプレゼンス、エンコーディング、および返される形状を記述することができます。リンクされたガイドでは、アクセス ルール、永続化効果、サポートされているリカバリ、およびこれらのタイプだけからは推測できない制限について説明しています。

リソースグループごとの操作

現在、コントラクトでは、270 グループの 34 オペレーションがすべて単一の下で宣言されています。 bearer HTTP セキュリティ方式。ベアラーセキュリティのない唯一の業務は公衆衛生調査です。このテーブルは、生成された OpenAPI ドキュメント、つまりグループごとの操作、使用される HTTP メソッド、個別のパスの数、および 1 つの代表的なパスから計算されます。

グループタグ作戦メソッドパスパスの例
健康health11を入手1/api/health
システムsystem22を入手2/health
プロジェクトprojects5DELETE 1、GET 2、POST 1、PUT 12/api/projects
図面drawings5DELETE 1、GET 2、POST 1、PUT 12/api/drawings/{id}
コンポーネントcomponents5DELETE 1、GET 2、POST 1、PUT 12/api/components/{id}
正確なCADcadExact3投稿33/api/cad/exact/analyze
ツールパスtoolpaths7DELETE 1、GET 3、POST 2、PUT 13/api/drawings/{id}/toolpaths
プロジェクトのツールパスprojectToolpaths21 を取得、1 を投稿1/api/projects/{id}/toolpaths
機械加工toolpathGenerator5投稿55/api/toolpaths/generate
ツールパス履歴toolpathExtras8DELETE 1、GET 3、POST 3、PUT 15/api/toolpaths/library
材料materials5DELETE 1、GET 2、POST 1、PUT 12/api/materials
資材保管庫materialsStorage51 を削除、2 を取得、2 を投稿2/api/materials/export-import
ツールtools5DELETE 1、GET 2、POST 1、PUT 12/api/tools
工具の保管toolsStorage71 を削除、3 を取得、3 を投稿3/api/tools/export-import
機械machineConfigs6DELETE 1、GET 2、POST 2、PUT 13/api/machine-configs
機械保管庫machineConfigsStorage51 を削除、2 を取得、2 を投稿2/api/machine-configs/export-import
図書館library8DELETE 1、GET 5、POST 1、PUT 15/api/library
製造コストproduction-costs21DELETE 4、GET 8、POST 5、PUT 49/api/production-costs/estimates
AI のセッションとアクションai34DELETE 3、GET 8、POST 21、PUT 232/api/ai/actions
歴史とワークフローvcs22GET 10、POST 11、PUT 119/api/projects/{id}/actions/dispatch
プロジェクトイベントevents11を入手1/api/projects/{id}/events
コンパニオンペアリングcompanion51 を削除、1 を取得、3 を投稿5/api/companion
プラグインplugins16DELETE 1、GET 8、PATCH 1、POST 4、PUT 212/api/plugins
MCP 構成mcp8DELETE 2、GET 2、POST 2、PUT 23/api/mcp/config
ファイルfiles21 を取得、1 を投稿2/api/download
キーと値のストレージkv4DELETE 1、GET 2、PUT 12/api/kv
組織organizations5DELETE 1、GET 2、POST 1、PUT 12/api/organizations
通知notifications4DELETE 1、GET 1、POST 1、PUT 13/api/notifications
認証auth121 を取得、11 を投稿12/api/auth/forgot-password
ユーザーuser16DELETE 2、GET 10、POST 2、PUT 212/api/user/api-keys
請求するbilling15DELETE 1、GET 5、POST 8、PUT 110/api/better-auth-stripe/billing-portal
分析analytics101 を削除、7 を取得、2 を投稿9/api/analytics
アプリケーションサービスmisc10DELETE 2、GET 3、POST 4、PUT 16/api/app-control/notify
順番待ちリストwaitlist1投稿11/api/waitlist

契約全体のステータス コード

宣言された各応答を操作ごとに 1 回カウントすると、クライアントが何をデコードする準備ができていなければならないかが次のようにわかります。

状態宣言日典型的な体
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, 503各 1 回の操作エンドポイント固有

すべてのエラーは Effect タグ付きエラーであるため、その JSON 本文には常に _tag そのフィールドの隣にある識別子。既存のクライアントが引き続き動作できるように、従来のハンドラーから継承された 3 つの本体ファミリーがあります。

単純なエラー (メッセージのみ)
{ "_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: line は 1 つの型付きアシスタント イベントです。
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")、および 16 MiB を超える単一の SSE イベント 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 推測する代わりに。

3Dで

サイズ別の 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.