REST API
ObjectOS が公開する HTTP インターフェース — メタデータから生成され、権限でスコープされ、OpenAPI で記述されます。
REST API
宣言したすべてのオブジェクトに、完全な REST エンドポイントセットが自動的に付与されます。
すべてのアクションは POST になります。すべてのフローは
/flows/... への POST になります。記述やデプロイが必要な独立した API レイヤーは存在しません。
ベース URL: https://<your-host>/api/v1。
OpenAPI 仕様は /api/v1/openapi.json で公開されています。
Authentication
ObjectOS は Better Auth を使用します。
/api/v1 配下のすべてのルートは、明示的に public とマークされていない限り、
認証済みセッションを必要とします(Public forms を参照)。認証方式は
apps/<app>/auth.config.ts で設定します。通常はセッション Cookie か、
/api/v1/auth/sign-in から取得したベアラートークンです。
権限は ルートごと、レコードごと にチェックされます。以下で権限キー
(例: ai:chat)が付記されているルートは
requirePermission(...) を呼び出します。レコードレベルのアクセスは、データエンジン内部の
RBAC + 行レベルセキュリティ + フィールドレベルセキュリティによって強制されます。
Discovery
| Path | Method | 目的 |
|---|---|---|
/api/v1 | GET | サービスディスカバリ — 登録されたすべてのルート、バージョン、スコープモードを一覧表示 |
/api/v1/discovery | GET | 上記のディスカバリドキュメントに対する明示的なエイリアス |
/api/v1/openapi.json | GET | 実行中のランタイムにあるすべてのエンドポイントの OpenAPI 3.0 仕様 |
/api/v1/search | GET | すべてのオブジェクトの検索可能フィールドにまたがる全文検索 |
API 表面の制限
自動生成されるエンドポイントはオブジェクト単位で制御されるため、ルートコードを一切書かずに、 オブジェクトを API から外したり読み取り専用にしたりできます:
apiEnabled(boolean、デフォルトtrue)—falseに設定すると、オブジェクトを REST 表面から完全に除外します。そのルートへのリクエストは 404 になります。apiMethods(任意のホワイトリスト)— 設定すると、リストされた操作のみが到達可能になり、 それ以外の操作は REST レイヤーで拒否されます。許可される値:get、list、create、update、delete、upsert、bulk、aggregate、history、search、restore、purge、import、export。
// 読み取り専用の参照オブジェクト。API 経由では書き込み不可:
defineObject({
name: 'exchange_rate',
apiMethods: ['get', 'list'],
// ...fields
})
// API が決して公開しない内部オブジェクト:
defineObject({
name: 'sync_cursor',
apiEnabled: false,
// ...fields
})どちらも現在は REST レイヤーで強制適用されます(ADR-0049)— 以前のバージョンではこれらの プロパティをパースするだけで、適用していませんでした。
Data — /api/v1/data/*
宣言したすべてのオブジェクトに対する CRUD + 高度なクエリ。:object は
オブジェクトの name(snake_case)です。
| Path | Method | 目的 |
|---|---|---|
/data/:object | GET | リスト / クエリ — クエリパラメータとして where、orderBy、limit、offset、cursor、expand、select を渡します |
/data/:object/query | POST | 高度なクエリ — groupBy + aggregations を含む完全な ObjectQL ボディ(ObjectQL を参照) |
/data/:object/:id | GET | 1 件のレコードを取得。?select= と ?expand= をサポート |
/data/:object | POST | 作成。新しいレコードとともに 201 を返します |
/data/:object/:id | PATCH | 更新。楽観的並行性制御のために If-Match: <version> ヘッダー(またはボディ内の expectedVersion)を渡します — 競合時は 409 CONCURRENT_UPDATE |
/data/:object/:id | DELETE | 削除。同じ If-Match ルールが適用されます |
/data/:object/import | POST | 一括インポート(CSV または JSON)。ボディ: { format, csv? | rows?, mapping?, dryRun? }。リクエストあたり最大 5,000 行 |
/data/:object/export | POST | レコードを csv / xlsx / pdf / json としてエクスポート |
/data/:object/:id/shares | GET / POST | レコードごとの共有 — 付与の一覧表示、アクセスの付与 |
/data/:object/:id/shares/:shareId | DELETE | 共有を取り消し |
/data/lead/:id/convert | POST | Salesforce 風のリード変換(CRM テンプレート)。ボディ: { accountId?, contactId?, createOpportunity? } |
Quick example
GET /api/v1/data/support_ticket?where={"status":{"$eq":"open"}}&orderBy=-created_at&limit=20
Authorization: Bearer <token>{
"items": [ { "id": "...", "subject": "...", "status": "open" } ],
"total": 137,
"nextCursor": "eyJpZCI6IjAxSDA..."
}AI — /api/v1/ai/*
AI Builder と エージェント が動作するためのエンドポイントです。
| Path | Method | Permission | 目的 |
|---|---|---|---|
/ai/models | GET | ai:chat | 設定されたプロバイダーから利用可能なモデルを一覧表示 |
/ai/chat | POST | ai:chat | 単発のチャット補完(同期) |
/ai/chat/stream | POST | ai:chat | ストリーミングチャット(SSE) |
/ai/complete | POST | ai:chat | 生の補完エンドポイント |
/ai/conversations | GET / POST | ai:chat | 永続的な会話の一覧表示 / 作成 |
/ai/conversations/:id | GET / DELETE | ai:chat | 会話の読み取り / 削除 |
/ai/conversations/:id/messages | POST | ai:chat | ユーザーメッセージを追加してエージェントを実行 |
/ai/pending-actions | GET | ai:read | HITL 承認キュー — AI が提案したミューテーション |
/ai/pending-actions/:id | GET | ai:read | キューに入ったミューテーションを確認 |
/ai/pending-actions/:id/approve | POST | ai:approve | ミューテーションを適用 |
/ai/pending-actions/:id/reject | POST | ai:approve | 破棄 |
ai:read と ai:approve の分離は、AI Builder をエンドユーザーにとって安全なものにする
セキュリティプリミティブです。
Actions — /api/v1/actions/*
宣言したすべての *.action.ts がエンドポイントになります。
| Path | Method | 目的 |
|---|---|---|
/actions/:action | POST | アクションを呼び出します。ボディはアクションの入力スキーマです。権限と入力検証はアクション宣言から得られます |
各アクションは action_<name> ツールとして AI にも公開されます —
Actions を参照してください。
Flows — /api/v1/flows/*
| Path | Method | 目的 |
|---|---|---|
/flows/:flow/start | POST | フローを開始します。ボディはフローの入力です |
/flows/:flow/runs/:runId | GET | 実行中 / 完了したフローのステータス + ステップ出力 |
/flows/:flow/runs/:runId/cancel | POST | 進行中の実行をキャンセル |
Metadata — /api/v1/meta/*
実行中のランタイムのメタデータへの読み取り専用のイントロスペクション。 ツールや Console に役立ちます。
| Path | Method | 目的 |
|---|---|---|
/meta | GET | すべてのメタデータタイプ(object、view、action、flow、agent、…) |
/meta/:type | GET | あるタイプの項目を一覧表示。?package=<id> でフィルタ |
/meta/:type/:name | GET | 1 件の項目を取得。?layers=true で 3 状態の差分ビュー(base / package / overlay)を返します |
/meta/:type/:name/references | GET | この項目を参照しているすべてのメタデータ項目を検索 |
/meta/:type/:name/history | GET | その項目の監査証跡 |
/meta/:type/:section/:name | GET / POST | セクション化されたメタデータ項目の読み取り / アップサート |
/meta/:type/:section/:name | DELETE | セクション化された項目を削除 |
Sharing & approvals
| Path | Method | 目的 |
|---|---|---|
/sharing/rules | GET / POST / DELETE | 共有ルールを管理 |
/sharing/rules/:idOrName/evaluate | POST | コンテキストに対してルールをドライラン |
/approvals/processes | GET / POST | 承認プロセスの定義 |
/approvals/requests | GET / POST | 承認リクエストの送信 / 一覧表示 |
/approvals/requests/:id/approve | POST | 決定: 承認 |
/approvals/requests/:id/reject | POST | 決定: 却下 |
Reports & search
| Path | Method | 目的 |
|---|---|---|
/reports | GET / POST / PATCH | レポートの CRUD |
/reports/:id/run | POST | レポートを実行 — 集計された行を返します |
/reports/:id/schedule | POST | 定期配信をスケジュール |
Public forms
FormView.sharing.allowAnonymous でオプトインする、唯一の 認証なし のルートです。
| Path | Method | Auth |
|---|---|---|
/forms/:slug | GET | public — フォームスキーマを返します |
/forms/:slug/submit | POST | public — 応答を送信します |
Utilities
| Path | Method | Permission | 目的 |
|---|---|---|---|
/email/send | POST | email:send | 設定されたプロバイダー経由でメールを送信 |
Error envelope
すべての非 2xx 応答は同じ形式に従います:
{
"error": {
"code": "PERMISSION_DENIED",
"message": "Missing ai:approve on conversation 01H…",
"details": { "permission": "ai:approve", "subject": "01H…" }
}
}一般的なコード: UNAUTHENTICATED、PERMISSION_DENIED、
VALIDATION_ERROR、NOT_FOUND、CONCURRENT_UPDATE、
RATE_LIMITED、INTERNAL。
Versioning
/api/v1 は 安定版 API です。破壊的変更は /api/v2 に入り、
両方が 1 つのマイナーリリースの間並行して提供されます。現在のバージョンと
非推奨化の予定は GET /api/v1 にあります。
See also
- ObjectQL —
/data/*で使用されるクエリ言語 - Field types — データが取り得る形状
- Build → Actions — カスタムエンドポイントを宣言
- Security — すべてのルートが実行前にチェックする内容