One Server

ドキュメント · リファレンス

管理 REST API

コンソールでできることを HTTP で行います。315 個のエンドポイントはルーター(rest.ts)と操作(operations.ts)からそのまま読み取られ、このページと OpenAPI ドキュメントになります。 この一覧はサーバーのコードから生成されます。新しい機能ができると、すぐにここにも表示されます。

はじめに

ベース URL

https://end.blackall.ai/api/v1

認証

すべてのリクエストに Authorization: Bearer <トークン> ヘッダーが必要です。トークンは、コンソールのアカウント、API と MCP トークンで作成した bwk_… の個人トークンか、MCP クライアントが OAuth で受け取ったアクセストークンです。

curl https://end.blackall.ai/api/v1/me \
  -H "Authorization: Bearer $ONEEND_TOKEN"

スコープとロール

トークンには read と write のスコープがあります。読み取るだけのエンドポイントには read、何かを変更するエンドポイントには write が必要です。トークンは持ち主のロールをそのまま持つため、組織でのロールが足りなければ write トークンでも 403 になります。

権限持っているロール
audit.readオーナーまたは管理者
billing.manageオーナーまたは管理者または請求担当
data.writeオーナーまたは管理者または開発者
project.adminオーナーまたは管理者
secrets.readオーナーまたは管理者または開発者
team.manageオーナーまたは管理者

言語

エラーメッセージと note は ?lang=en、?lang=ja、または Accept-Language ヘッダーに従います。指定がなければ韓国語です。それ以外のレスポンスはデータなので、言語によって変わりません。

上限

リクエスト本文は既定で 256 KiB まで受け付けます。マイグレーションや関数のデプロイなど、より大きな本文を受け付けるルートは各項目に記載しています。この API にはトークンごとのリクエスト回数制限はありません。CORS はすべてのオリジンに開いています。

OpenAPI 3.1

同じ内容を OpenAPI 3.1 ドキュメントとして取得できます。コード生成ツールや Postman にそのまま読み込めます。

openapi.json をダウンロード · https://end.blackall.ai/docs/api/openapi.json

ステータスコード

失敗すると、下のステータスコードと {"error": {"message": "…"}} を返します。メッセージは人が読んで次にすべきことがわかるように書かれています。

{ "error": { "message": "…" } }
ステータスコード説明
200成功です。本文は結果の JSON です。
400リクエストが正しくないか、操作が拒否されました。理由は error.message にあります。
401トークンがないか、正しくないか、期限切れです。
402
403トークンのスコープ(read/write)や組織内のロールが足りないか、組織が二段階認証を求めています。
404プロジェクトや対象が存在しないか、このトークンからは見えません。
409今はできません。たとえばプロジェクトのデータベースをまだ作成中です。
413本文がこのルートの上限を超えています。
422
429
500サーバーが結果を読み戻せませんでした。しばらくしてからもう一度お試しください。
502

note がある場合は、次にすべきことを伝える文です。

アカウントとリージョン

メソッドパス説明
GET/API バージョン
GET/me自分のアカウント
GET/regionsリージョン
POST/regions/requestsリージョンのリクエスト
GET/server-sizesサーバーサイズと料金
GET/imports/sources取り込み元
POST/imports取り込みを開始
GET/imports/{id}取り込みの進行状況

GET /api/v1/

API バージョン この API の名前とバージョンを返します。トークンが受け付けられるか確かめるときに使います。

名前説明
トークンのスコープなし
ロール組織のすべてのメンバー
レスポンスオブジェクト: name, version
ステータスコード200 · 400 · 401
curl "https://end.blackall.ai/api/v1/" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/me

自分のアカウント このトークンが誰のもので、何ができるかを返します。operator は運営者ツールを使えるか(active)と、使えないときのこのアカウントの理由(refused: not_listed、token_bound、no_second_factor)です。どこから始めればよいかわからないときは、最初に呼び出してください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールwhoami
レスポンスオブジェクト: email, organisation, projects, scopes, zone, read_only, next
ステータスコード200 · 400 · 401 · 403
curl "https://end.blackall.ai/api/v1/me" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/me', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/regions

リージョン リージョンの一覧を返します。今プロジェクトを作成できるのは、can_createがtrueのリージョンだけです。falseのリージョンは準備中のため一覧には表示されますが、まだ選べません。リージョンはプロジェクト作成時に一度だけ選び、後から変更できないため、create_projectの前に確認してください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_regions
レスポンスオブジェクトの配列: code, name, country, status, is_default, can_create
ステータスコード200 · 400 · 401 · 403
curl "https://end.blackall.ai/api/v1/regions" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/regions', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/regions/requests

リージョンのリクエスト まだ開いていないリージョン(can_createがfalseのリージョン)が必要であることを登録します。担当者からご連絡します。時期はお約束できません。すでに開いているリージョンはリクエストするものではありません。create_projectでそのままプロジェクトを作成してください。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールrequest_region
本文の上限256 KiB
レスポンスオブジェクト: region, name, recorded
ステータスコード200 · 400 · 401 · 403 · 413
名前場所型必須説明
region本文stringはいlist_regionsがcan_create=falseで返したコードです。
note本文stringいいえそこで何を動かす予定か、なぜそのリージョンでなければならないかを書いてください。任意ですが、ご連絡する担当者が最初に読む内容です。
curl -X POST "https://end.blackall.ai/api/v1/regions/requests" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"region":"kr"}'
const response = await fetch('https://end.blackall.ai/api/v1/regions/requests', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "region": "kr"
  }),
})
const result = await response.json()

GET /api/v1/server-sizes

サーバーサイズと料金 サーバーサイズ(メモリ)ごとのGoogle マシン、CPU、リージョン別の月額(monthly_minor)です。通貨を空にすると組織の決済通貨です。KRWはウォン(付加価値税込み)、USDはセント(決済時に税金を追加)です。included_inがproのサイズはProプランに含まれます。region_statusがplannedのリージョンは準備中のため選べません。listedがfalseならまだ販売しておらず、sizesは空です。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_server_sizes
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403
名前場所型必須説明
regionクエリstringいいえ1つのリージョンだけを見るときのコード(list_regionsのcode)です。空ならすべてのリージョンです。
currencyクエリstring, KRW | USDいいえKRWまたはUSDです。空なら組織の決済通貨です。
curl "https://end.blackall.ai/api/v1/server-sizes?region=kr&currency=KRW" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/server-sizes?region=kr&currency=KRW', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/imports/sources

取り込み元 コンソールの「他のサーバーから取り込む」と同じです。この組織に接続した取り込み元のアカウント(Supabase、Vercel、PostgreSQL)ごとに、そのプロジェクト一覧とこれまでの取り込みを返します。アカウントの接続はコンソール(connect_url)で行います。トークンをチャットに貼らないためです。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールimport_sources
レスポンスオブジェクト: organisation, connect_url, sources, imports
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
orgクエリstringいいえ組織の id か名前。空ならこのトークンが届く最初の組織。
curl "https://end.blackall.ai/api/v1/imports/sources?org=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/imports/sources?org=value', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/imports

取り込みを開始 コンソールの [取り込みを開始] と同じです。コンソールで分割した取り込み(import)か、import_sources の connection と project から新しい取り込みを(まとまりごとに新しいプロジェクトに分けて)開始します。新しいプロジェクトを作り、元は変えません。Supabase の元は address にセッションプーラーの接続文字列が必要で、今回の実行だけに使って削除します。止まった取り込みをもう一度開始すると、終わった移す先は飛ばし、変わったものだけ移します。オーナー・管理者・開発者のみ実行できます。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールstart_import
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
orgクエリstringいいえ組織の id か名前。空ならこのトークンが届く最初の組織。
curl -X POST "https://end.blackall.ai/api/v1/imports?org=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{}'
const response = await fetch('https://end.blackall.ai/api/v1/imports?org=value', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({}),
})
const result = await response.json()

GET /api/v1/imports/{id}

取り込みの進行状況 コンソールの取り込みの進行画面と同じです。移す先ごとに段階(スキーマ、ログインユーザー、データ、ファイル、スケジュールジョブ…)の状態と数、移さないものとその理由、確認することを返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_import
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
idパスstringはい取り込みの id。
orgクエリstringいいえ組織の id か名前。空ならこのトークンが届く最初の組織。
curl "https://end.blackall.ai/api/v1/imports/ID?org=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/imports/ID?org=value', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

プロジェクト

メソッドパス説明
GET/projectsプロジェクト
POST/projectsプロジェクトの作成
GET/projects/{ref}単一のプロジェクト
PATCH/projects/{ref}名前の変更
POST/projects/{ref}/pauseプロジェクトの一時停止
POST/projects/{ref}/resumeプロジェクトの再開
GET/projects/{ref}/archiveデータベースのアーカイブ状態
POST/projects/{ref}/archive/restoreアーカイブしたデータベースを復元
POST/projects/{ref}/archive/downloadアーカイブのダウンロード用アドレス
DELETE/projects/{ref}プロジェクトの削除
POST/projects/{ref}/retry-provisioning準備に失敗したプロジェクトの再試行

GET /api/v1/projects

プロジェクト このアカウントのプロジェクトと、それぞれのAPIアドレスを返します。status は ready(使える)、provisioning(データベースを作成中、数秒)、failed(retry_provisioning)、paused のいずれかです。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_projects
レスポンスオブジェクトの配列: ref, name, organisation, organisation_id, region, api_url, paused, archive_at, archive_purge_at, created_at
ステータスコード200 · 400 · 401 · 403
curl "https://end.blackall.ai/api/v1/projects" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects

プロジェクトの作成 データベース、ログイン、ファイルストレージを備えた新しいプロジェクトを作成します。リージョンを空にすると既定のリージョンになります。リージョンはプロジェクト作成後に変更できません。料金はどのリージョンでも同じです。組織が複数あるときは、org でどの組織に作るかを選びます(その組織のオーナー、管理者、開発者だけが、プランのプロジェクト数の範囲で作れます)。データベースは数秒後に使えるようになります。status が provisioning なら wait(秒)を渡すか、list_projects の status が ready になってからテーブルやキーを使ってください。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールcreate_project
本文の上限256 KiB
レスポンスオブジェクト: ref, name, organisation, region, api_url, status, created_at
ステータスコード200 · 400 · 401 · 403 · 404 · 413 · 502
名前場所型必須説明
waitクエリinteger, min 0, max 120いいえデータベースの準備ができる(status: ready)まで待つ秒数です。既定の0はすぐに応答します。通常は数秒です。
name本文stringいいえ人が読むための名前です。
region本文stringいいえ作成する場所です。使える値はlist_regionsで確認できます。空の場合は既定のリージョンです。
org本文stringいいえ作成する組織の id か名前です(list_projects の organisation_id か organisation)。空なら、プロジェクトを作れる最初の組織です。
wait本文integer, min 0, max 120いいえデータベースの準備ができる(status: ready)まで待つ秒数です。既定の0はすぐに応答します。通常は数秒です。
tier本文stringいいえこのプロジェクト専用サーバーのサイズです。list_server_sizesが返した値(例: 4gb)か、プランの標準サイズを表すdefaultを渡します。プロジェクトができた直後にサーバーを申請します。空なら共用サーバーで始まります。
curl -X POST "https://end.blackall.ai/api/v1/projects?wait=0" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","region":"kr","org":"value","wait":0,"tier":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects?wait=0', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "region": "kr",
    "org": "value",
    "wait": 0,
    "tier": "value"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}

単一のプロジェクト プロジェクト一覧のうち、この ref の項目を返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_projects
レスポンスオブジェクトの配列: ref, name, organisation, organisation_id, region, api_url, paused, archive_at, archive_purge_at, created_at
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はい
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PATCH /api/v1/projects/{ref}

名前の変更 プロジェクト名、組織名、またはその両方を変更します。識別子(ref)とアドレスは変わりません。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrename_project
本文の上限256 KiB
レスポンスオブジェクト: ref, name, organisation
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文stringいいえ新しいプロジェクト名です。
organisation本文stringいいえ新しい組織名です。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","organisation":"My team"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "organisation": "My team"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/pause

プロジェクトの一時停止 プロジェクトのすべての動作を止めます。サイト、API、関数は503を返し、リアルタイム接続は拒否され、予約ジョブと新しいデプロイも止まります。データとファイルはそのまま残り、resume_projectですぐに元に戻せます。90 日を超えて一時停止すると、データベースをアーカイブストレージへ移します(get_project_archive)。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールpause_project
レスポンスオブジェクト: ref, paused, note
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/pause" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/pause', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/resume

プロジェクトの再開 一時停止したプロジェクトを再び動かします。無料プランで 3 日間使われずに停止したプロジェクトもこれで(または新しいデプロイで)再開します。予約ジョブは逃した実行を取り戻さず、次の予定時刻から実行します。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールresume_project
レスポンスオブジェクト: ref, paused
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/resume" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/resume', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/archive

データベースのアーカイブ状態 データベースを使えない状態(支払いの失敗、無料プラン、一時停止)が 90 日続くと、アーカイブストレージへ移します。このプロジェクトの状況を返します: state(none、scheduled、archiving、archived、restoring、purged)、reason、archive_at(移す日時)、purge_at(アーカイブとファイルを削除する日時、移してから 1 年後)、restore_blocked_by。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_project_archive
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/archive" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/archive', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/archive/restore

アーカイブしたデータベースを復元 アーカイブストレージのデータベースを、アーカイブしたときのまま作り直します。通常は数分で、一時停止中のプロジェクトは復元と同時に再開します。お支払いが完了していないときや無料プランでは拒否します(restore_blocked_by)。アーカイブがすでに削除されていれば、空のデータベースを新しく作成します。オーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrestore_project_archive
レスポンスオブジェクト: ref, restore, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/archive/restore" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/archive/restore', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/archive/download

アーカイブのダウンロード用アドレス アーカイブしたデータベース(pg_dump 形式。pg_restore で復元)を 1 時間ダウンロードできる署名付きアドレスを作成します。理由が必要で、アクセス記録に残ります。オーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールcreate_archive_download_url
本文の上限256 KiB
レスポンスオブジェクト: ref, url, expires_at, bytes, format
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
reason本文string, min length 4, max length 300はいダウンロードする理由。アクセス記録に残ります。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/archive/download" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"reason":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/archive/download', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "reason": "value"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}

プロジェクトの削除 プロジェクトのテーブル、ユーザー、ファイル、関数、予約ジョブ、環境変数、ドメインを完全に削除します。元に戻せません。ユーザーがはっきり求めたときだけ使い、confirmにプロジェクト名を正確に入れてください。最後に残ったプロジェクトは削除できません。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールdelete_project
本文の上限256 KiB
レスポンスオブジェクト: ref, deleted
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
confirm本文stringはいプロジェクト名です。list_projectsの名前と完全に一致する必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/retry-provisioning

準備に失敗したプロジェクトの再試行 データベースを作成できなかったプロジェクトの準備をやり直します。ほかのツールが「作成できませんでした」と拒否したときに使ってください。新しいプロジェクトは作成しないでください。これは同じプロジェクトの準備を続けるもので、新しく作ると請求が二重になるだけです。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールretry_provisioning
レスポンスオブジェクト: ref, retried, note
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/retry-provisioning" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/retry-provisioning', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

キーと署名

メソッドパス説明
GET/projects/{ref}/keysAPIキーの取得
GET/projects/{ref}/api-keys名前付きAPIキー
POST/projects/{ref}/api-keysAPIキーの作成
DELETE/projects/{ref}/api-keys/{id}APIキーの失効
GET/projects/{ref}/signingトークンの署名
PUT/projects/{ref}/signingトークンの署名の変更
POST/projects/{ref}/signing/rotateキーのローテーション
DELETE/projects/{ref}/signing/keys/{kid}古いキーの終了

GET /api/v1/projects/{ref}/keys

APIキーの取得 プロジェクトのアドレスと2つのキーを返します。パブリッシャブルキーはブラウザ用です。シークレットキーはすべてのアクセスルールを迂回するため、サーバーでのみ使ってください。書き込み権限のあるトークンだけが呼び出せます。フロントエンドのコードに入れる値が必要なときは only: "publishable" で呼び出してください。アドレスとパブリッシャブルキーだけが返り、シークレットキーが会話やコードに混ざりません(読み取り権限のトークンでも呼び出せます)。

名前説明
トークンのスコープwrite
ロールsecrets.read オーナーまたは管理者または開発者
MCP ツールget_project_keys
レスポンスオブジェクト: ref, api_url, publishable_key, secret_key, key_version
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
onlyクエリstring, publishableいいえpublishableならアドレスとパブリッシャブルキーだけを返します。空なら両方のキーを返します。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/keys?only=publishable" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/keys?only=publishable', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/api-keys

名前付きAPIキー 用途ごとに作成したbw_publishable_キーとbw_secret_キーそれぞれの名前、種類、プレフィックス、最終使用日時、失効状態です。シークレットキーの値は返しません。パブリッシャブルキーの値は返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_api_keys
レスポンスオブジェクトの配列: id, name, kind, prefix, publishable_key, created_at, created_by, last_used_at, revoked_at
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/api-keys" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/api-keys', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/api-keys

APIキーの作成 名前付きのキーを1つ作成します。publishableはブラウザ用(アクセスルールに従う)、secretはサーバー用(アクセスルールを迂回する)です。シークレットキーの値はこの応答にだけ含まれ、二度と表示できません。キーを作成できるのはオーナーと管理者のみで、プロジェクトごとに20個までです。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールcreate_api_key
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
kind本文string, publishable | secretはいブラウザ用はpublishable、サーバー用はsecretです。
name本文string, min length 1, max length 60はいキーの用途です。例: 決済サーバー
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/api-keys" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"kind":"publishable","name":"my-name"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/api-keys', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "kind": "publishable",
    "name": "my-name"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/api-keys/{id}

APIキーの失効 名前付きのキーを1つ失効させます。そのキーを使ったリクエストは30秒以内に拒否されるようになります。ほかのキーには影響しません。元に戻せません。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrevoke_api_key
レスポンスオブジェクト: revoked, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_api_keysのidです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/api-keys/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/api-keys/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/signing

トークンの署名 ログイントークンをHS256とES256のどちらで署名しているか、また当面まだ受け付ける古いキー(猶予期間中のキー)を表示します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_jwt_signing
レスポンスオブジェクト: ref, alg, keys, grace_hours
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/signing" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/signing', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/signing

トークンの署名の変更 ES256にすると、新しいログインは非対称鍵で署名され、ほかのサーバーが公開鍵(JWKS)でトークンを確認できます。すでに発行されたトークンは期限が切れるまで使えます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_jwt_signing
本文の上限256 KiB
レスポンスオブジェクト: ref, alg, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
alg本文string, HS256 | ES256はいHS256またはES256です。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/signing" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"alg":"HS256"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/signing', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "alg": "HS256"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/signing/rotate

キーのローテーション パブリッシャブルキーとシークレットキーに署名する新しいキーを作成します。古いキーはgrace_hours(0、1、24、168)の間まだ受け付けます。0(または空)にするとすぐに無効になります(漏えいした場合)。0のときは使っているアプリがすべて30秒以内に止まるため、confirm にプロジェクト名(list_projectsのname)をそのまま入れてください。アプリに入れたキーをすべて置き換える必要があるため、ユーザーがはっきり求めたときだけ使ってください。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrotate_signing_key
本文の上限256 KiB
レスポンスオブジェクト: ref, key_version, grace_hours, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
grace_hours本文integer, 0 | 1 | 24 | 168いいえ古いキーをあと何時間受け付けるかです: 0、1、24、168のいずれか。
confirm本文stringいいえgrace_hoursが0または空のときだけ: プロジェクト名です。list_projectsのnameと完全に同じである必要があります。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/signing/rotate" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"grace_hours":0,"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/signing/rotate', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "grace_hours": 0,
    "confirm": "my-project"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/signing/keys/{kid}

古いキーの終了 猶予期間中の古いキーを今すぐ終了します。kidはget_jwt_signingのkeysのうち、stateがrotatingのものです。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールretire_signing_key
レスポンスオブジェクト: ref, kid, retired, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
kidパスstringはいget_jwt_signingのkidです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/signing/keys/KEY_ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/signing/keys/KEY_ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

データベース

メソッドパス説明
GET/projects/{ref}/advisorsセキュリティとパフォーマンスの点検
GET/projects/{ref}/tables/{table}/csvテーブルをCSVでエクスポート
POST/projects/{ref}/tables/{table}/csvCSVをテーブルにインポート
GET/projects/{ref}/tablesテーブル
GET/projects/{ref}/policiesアクセスルール
GET/projects/{ref}/rows/{table}テーブルの読み取り
GET/projects/{ref}/migrationsマイグレーションの記録
POST/projects/{ref}/migrationsマイグレーションの適用
DELETE/projects/{ref}/migrations/{version}マイグレーションの記録の削除
GET/projects/{ref}/schemaスキーマをSQLで
GET/projects/{ref}/types/typescriptTypeScriptの型を作る
POST/projects/{ref}/sql/querySQLの照会(読み取り専用)
POST/projects/{ref}/sqlSQLの実行(変更)
GET/projects/{ref}/databaseデータベース接続情報
POST/projects/{ref}/database/passwordデータベースの新しいパスワード
GET/projects/{ref}/mysqlMySQL データベースの一覧
POST/projects/{ref}/mysqlMySQL データベースの作成
PATCH/projects/{ref}/mysql/{name}MySQL データベースをアプリにつなぐ
DELETE/projects/{ref}/mysql/{name}MySQL データベースの削除
GET/projects/{ref}/mysql/{name}/connectionMySQL の接続情報
GET/projects/{ref}/mysql/{name}/backupsMySQL バックアップの一覧
POST/projects/{ref}/mysql/{name}/backupsMySQL を今すぐバックアップ
POST/projects/{ref}/mysql/{name}/restoreMySQL をバックアップから復元
GET/projects/{ref}/extensionsデータベースの拡張機能の一覧
PUT/projects/{ref}/extensions/{name}データベースの拡張機能を有効にする
DELETE/projects/{ref}/extensions/{name}データベースの拡張機能を無効にする
GET/projects/{ref}/database/move専用データベースへの移行の状態
POST/projects/{ref}/database/move専用データベースへの移行
GET/projects/{ref}/database/dedicated-disk専用ディスク
POST/projects/{ref}/database/dedicated-disk専用ディスクに移す
POST/projects/{ref}/database/dedicated-disk/shrinkディスクを縮小
GET/projects/{ref}/realtimeリアルタイムがオンのテーブル
PUT/projects/{ref}/realtime/{table}テーブルのリアルタイムのオン・オフ

GET /api/v1/projects/{ref}/advisors

セキュリティとパフォーマンスの点検 プロジェクトのデータベース構造からセキュリティとパフォーマンスの問題を探します。RLSがオフのテーブル、誰でも書き込めるルール、アクセスルールを迂回するビュー、search_pathが固定されていないsecurity definer関数、ユーザーテーブルを公開するビュー、インデックスのない外部キー、主キーのないテーブル、重複したインデックス、行ごとにuid()を呼び出すルールが対象です。修正するSQLがある項目にはそれ(remedy)を添えます。データは読みません。テーブルを作成したりルールを変更したりした後に呼び出してください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_advisors
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/advisors" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/advisors', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/tables/{table}/csv

テーブルをCSVでエクスポート テーブルの行を CSV で返します(1行目は列名)。コンソールのテーブルエディターのエクスポートと同じです。1MB まで返り、超えると行の区切りで切って truncated が true になります。そのときは filters で範囲を分けて何回かに分けて受け取ってください。空欄は NULL、"" は空文字列です。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールexport_table_csv
レスポンスオブジェクト: ref, table, rows, bytes, truncated, csv
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
tableパスstringはいテーブル名です(list_tables)。
sortクエリstringいいえこの列の順に並べます。空ならテーブルの既定の順です。
descクエリbooleanいいえtrue なら大きいものから並べます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/tables/notes/csv?sort=value&desc=true" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/tables/notes/csv?sort=value&desc=true', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/tables/{table}/csv

CSVをテーブルにインポート CSV の行をテーブルに入れます。コンソールのテーブルエディターのインポートと同じです。1行目は列名で、同じ名前の列に入ります(columns で変えられます)。1行でも入れられなければ何も入れず、行番号と理由を返します。2MB、10,000行までです。引用符のない空欄は NULL か列の既定値です。それより大きいときは分けて呼び出してください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールimport_table_csv
本文の上限4096 KiB
レスポンスオブジェクト: ref, table, inserted, columns
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
tableパスstringはいテーブル名です(list_tables)。
csv本文stringはいCSV の内容です。1行目は列名です。
columns本文array<string>いいえCSV の列ごとに入れるテーブルの列名で、飛ばす列は "" です。1行目と同じ数が必要です。省略すると同じ名前どうしです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/tables/notes/csv" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"csv":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/tables/notes/csv', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "csv": "value"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/tables

テーブル プロジェクトのテーブルを、列、おおよその行数、アクセスルールの状態とともに返します。ルールがオンなのにルールが1つもない場合、パブリッシャブルキーからは何も見えません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_tables
レスポンスオブジェクトの配列: name, approximate_rows, row_level_security, policies, columns
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/tables" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/tables', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/policies

アクセスルール どのテーブルのどの操作が誰に開かれているかを返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_policies
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/policies" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/policies', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/rows/{table}

テーブルの読み取り テーブルの先頭の行をそのまま読みます。確認用です。条件が必要な場合はrun_sqlを使ってください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールread_rows
レスポンスオブジェクト: columns, rows
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
tableパスstringはいテーブル名です。
limitクエリinteger, min 1, max 200いいえ既定は50行です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/rows/notes?limit=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/rows/notes?limit=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/migrations

マイグレーションの記録 apply_migrationsで適用したマイグレーションのバージョン、名前、適用時刻を古い順に返します。記録はプロジェクトのoneend_migrationsテーブルにあります。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_migrations
レスポンスオブジェクト: ref, ledger, migrations
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/migrations" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/migrations', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/migrations

マイグレーションの適用 まだ適用していないマイグレーションをバージョン順に、1つずつそれぞれのトランザクションで実行し、記録します。すでに適用されたバージョンは飛ばします。1つが失敗すると、それだけを元に戻して止まり、前のものは適用されたまま残ります。スキーマを変更するときにrun_sqlの代わりにこれを使うと、同じ変更をほかのプロジェクトにもそのまま適用し直せます。supabase/migrationsのファイルをそのまま送れます: public.、auth.uid()、storage.、to authenticatedなどのSupabaseの名前はこのプロジェクトの名前に変換して実行し、translatedで返します(Supabase名の変換)。適用記録にはファイルのとおりに残ります。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールapply_migrations
本文の上限8192 KiB
レスポンスオブジェクト: ref, applied, recorded_only, already_applied, drifted
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
migrations本文array<object>, max items 500はいマイグレーションの一覧です。それぞれversion、name、sqlを持ちます。
include_all本文booleanいいえすでに適用された最後のバージョンより前のバージョンも適用します。既定はfalseです。
record_only本文booleanいいえ実行せず、適用したものとして記録だけします。既定はfalseです。
dry_run本文booleanいいえ何が適用されるかだけを知らせます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/migrations" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"migrations":[{"version":"20260101000000","name":"my-name","sql":"select 1"}]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/migrations', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "migrations": [
      {
        "version": "20260101000000",
        "name": "my-name",
        "sql": "select 1"
      }
    ]
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/migrations/{version}

マイグレーションの記録の削除 マイグレーションを1つ、適用していない状態に戻します。記録だけを削除し、そのマイグレーションが作ったものはそのまま残します。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_migration_record
レスポンスオブジェクト: ref, version, removed, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
versionパスstring, pattern ^[0-9]{1,32}$はいlist_migrationsのバージョンです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/migrations/20260101000000" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/migrations/20260101000000', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/schema

スキーマをSQLで プロジェクトのスキーマ(型、シーケンス、テーブルと制約、外部キー、インデックス、関数、ビュー、トリガー、RLSとルール)を作り直せるSQLとして返します。行のデータと権限は含まれません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールdump_schema
レスポンスオブジェクト: ref, sql, objects
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/schema" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/schema', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/types/typescript

TypeScriptの型を作る プロジェクトのテーブル、ビュー、関数、列挙型から、supabase-jsのcreateClient<Database>()に渡すDatabase型を作ります。スキーマを変更したあとに、もう一度呼び出してください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールgenerate_typescript_types
レスポンスオブジェクト: ref, schema, types
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
schemaクエリstringいいえ既定はpublicです。プロジェクトが作ったスキーマ(list_schemasのname)も使えます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/types/typescript?schema=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/types/typescript?schema=value', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/sql/query

SQLの照会(読み取り専用) プロジェクトのPostgreSQLデータベースで照会文1つ(SELECTなど)を読み取り専用トランザクションで実行し、結果の行を返します。データや構造を変更する文は拒否されるため、その場合はrun_sqlを使ってください。読み取り権限のトークンでも呼び出せます。Vaultのシークレットの値は開きません(vault.decrypted_secretsのdecrypted_secretは空です)。SQLの文法はPostgreSQL 16のドキュメント(https://www.postgresql.org/docs/16/sql-commands.html)に従います。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールquery_sql
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
sql本文stringはい実行する照会文1つです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/sql/query" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"sql":"select 1"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/sql/query', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "sql": "select 1"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/sql

SQLの実行(変更) プロジェクトのPostgreSQLデータベースでデータや構造を変更するSQL(CREATE、INSERT、UPDATE、DELETEなど)を実行し、結果の行を返します。照会だけの場合はquery_sqlを使ってください。SQLの文法はPostgreSQL 16のドキュメント(https://www.postgresql.org/docs/16/sql-commands.html)に従います。新しいテーブルはアクセスルールが自動でオンになるため、続けてルールを作成しない限り、パブリッシャブルキーからは何も見えません。ルールで使うロール名は<ref>_anon、<ref>_authenticated、<ref>_service_roleです。Supabase向けに書いたSQL(public.、auth.uid()、storage.、to authenticated)はこのプロジェクトの名前に変換して実行し、何を変換したかをtranslatedで返します(Supabase名の変換)。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールrun_sql
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
sql本文stringはい実行するSQL文1つです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/sql" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"sql":"select 1"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/sql', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "sql": "select 1"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/database

データベース接続情報 このプロジェクトのPostgreSQLに直接接続するためのアドレスを表示します。direct(5432、session: マイグレーションツールやデータベースクライアント用)とpooler(6543、transaction: サーバーレス用)です。パスワードは保存していないため、[YOUR-PASSWORD]と表示されます。

名前説明
トークンのスコープread
ロールsecrets.read オーナーまたは管理者または開発者
MCP ツールget_database_connection
レスポンスオブジェクト: ref, available, host, database, user, password_set, direct, pooler, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/database/password

データベースの新しいパスワード 直接接続用の新しいパスワードを作成し、一度だけ返します。古いパスワードで接続しているものは、次の接続から拒否されます。いまそのパスワードで接続しているサーバー、ジョブ、ツールは再接続のときに切れるので、confirm にプロジェクト名(list_projectsのname)をそのまま入れてください。このユーザーは行レベルセキュリティを迂回するため、サーバーにだけ置いてください。keep_for_deploys: true のときはパスワードを封印して保管し、本番のサーバー・ミドルウェア・関数が実行時に DATABASE_URL・POSTGRES_URL・DIRECT_URL を受け取ります(ビルドには渡しません)。デプロイしたコードがシークレットキーと同じくすべての行を読めるようになるので、ユーザーが望むときだけオンにしてください。これなしで作り直すと受け渡しも止まります。ユーザーが求めたときだけ使ってください。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールreset_database_password
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
keep_for_deploys本文booleanいいえtrue: 本番デプロイに DATABASE_URL として渡します(封印して保管)。なし・false: 保管せず、受け渡しも止めます。
confirm本文stringはいプロジェクト名です。list_projectsのnameと完全に同じである必要があります。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/password" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/password', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/mysql

MySQL データベースの一覧 このプロジェクトの MySQL データベース(MariaDB 11.4)と、それぞれがどのアプリに入るか(app、null はプロジェクト全体)、状態、サイズ、プランで作れる数(max)を返します。available が false なら、このサーバーにはまだ MySQL がありません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_mysql_databases
レスポンスオブジェクト: ref, available, max, apps, databases
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/mysql

MySQL データベースの作成 WordPress のように MySQL を使うアプリのために、データベースと専用ログインを作ります。通常 1 分以内に準備できます。app を指定するとそのアプリのデプロイだけが、指定しなければプロジェクトのすべてのアプリが受け取ります(プロジェクト全体用が 1 つだけのとき)。受け取るアプリのサーバーは起動時に MYSQL_URL・MYSQL_HOST・MYSQL_PORT・MYSQL_USER・MYSQL_PASSWORD・MYSQL_DATABASE と WORDPRESS_DB_HOST・WORDPRESS_DB_USER・WORDPRESS_DB_PASSWORD・WORDPRESS_DB_NAME を受け取ります(ビルドには入りません)。毎晩バックアップされます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_mysql_database
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文string, pattern ^[a-z][a-z0-9_]{0,31}$はい英小文字で始め、英小文字・数字・アンダースコア(_)で 32 文字まで。例: wordpress
app本文stringいいえこのデータベースを受け取るアプリ名。空ならプロジェクト全体用
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/mysql/{name}

MySQL データベースをアプリにつなぐ MySQL データベースを受け取るアプリを変えます。app が null ならプロジェクト全体用になります。1 つのアプリにつなげるデータベースは 1 つだけです。動いているサーバーは再起動するか再デプロイすると変更を受け取ります。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールbind_mysql_database
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいMySQL データベース名
app本文stringはいアプリ名。プロジェクト全体用なら null
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"app":"owner/repo"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "app": "owner/repo"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/mysql/{name}

MySQL データベースの削除 MySQL データベースとそのログイン、バックアップをすべて削除します。元に戻せないので、ユーザーがはっきり求めたときだけ使い、confirm にデータベース名をそのまま入れてください。受け取っていたアプリは次の起動から MYSQL_* の変数を受け取りません。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールdelete_mysql_database
本文の上限256 KiB
レスポンスオブジェクト: ref, name, deleted, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいMySQL データベース名
confirm本文stringはいMySQL データベース名。name とまったく同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/mysql/{name}/connection

MySQL の接続情報 MySQL データベースのアドレス、ポート、データベース名、ログイン、パスワードと、アプリが受け取る変数(variables)を返します。アドレスにはこのサーバー上のアプリからだけ届きます。パスワードは書き込み権限のトークンにだけ表示されます。

名前説明
トークンのスコープread
ロールsecrets.read オーナーまたは管理者または開発者
MCP ツールget_mysql_connection
レスポンスオブジェクト: ref, name, host, port, database, user, password, url, variables
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいMySQL データベース名
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name/connection" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name/connection', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/mysql/{name}/backups

MySQL バックアップの一覧 MySQL データベースのバックアップ(毎晩の自動、手動で作ったもの、復元の直前のもの)と復元の記録を返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_mysql_backups
レスポンスオブジェクト: ref, name, backups, restores
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいMySQL データベース名
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name/backups" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name/backups', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/mysql/{name}/backups

MySQL を今すぐバックアップ MySQL データベースを今すぐバックアップします。プラグインの更新や大きな変更の前に作ってください。7 日間保管されます。毎晩のバックアップは別に自動で行われます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_mysql_backup
レスポンスオブジェクト: ref, name, id, status, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいMySQL データベース名
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name/backups" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name/backups', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/mysql/{name}/restore

MySQL をバックアップから復元 MySQL データベースをバックアップした時点に戻します。その後の変更はすべてなくなるので、ユーザーがはっきり求めたときだけ使い、confirm にデータベース名をそのまま入れてください。戻す直前の状態を先にバックアップするので、undo_backup_id でもう一度復元できます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrestore_mysql_backup
本文の上限256 KiB
レスポンスオブジェクト: ref, name, restore_id, status, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいMySQL データベース名
backup_id本文stringはいlist_mysql_backups のバックアップ id
confirm本文stringはいMySQL データベース名。name とまったく同じである必要があります。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name/restore" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"backup_id":"BACKUP_ID","confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/mysql/my-name/restore', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "backup_id": "BACKUP_ID",
    "confirm": "my-project"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/extensions

データベースの拡張機能の一覧 有効にできるPostgreSQLの拡張機能(pgvectorのvector、postgis、citext、pgcryptoなど)と、それぞれがこのサーバーにあるか(available)、有効か(enabled)、バージョンを返します。拡張機能はextensionsスキーマにインストールされ、SQLではそのままvector(1536)やgeometryのように使います。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_extensions
レスポンスオブジェクト: ref, extensions
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/extensions" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/extensions', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/extensions/{name}

データベースの拡張機能を有効にする 拡張機能を1つ有効にします(create extension ... with schema extensions)。埋め込み検索にはvector、地図や距離の計算にはpostgisを使います。一覧にない拡張機能は拒否されます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールenable_extension
レスポンスオブジェクト: ref, extension
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはい拡張機能の名前です: vector, postgis, citext, hstore, uuid-ossp, pgcrypto, ltree, fuzzystrmatch, btree_gin, btree_gist, intarray, tablefunc
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/extensions/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/extensions/my-name', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/extensions/{name}

データベースの拡張機能を無効にする 拡張機能を1つ無効にします。その拡張機能を使う列、インデックス、関数が残っていると拒否されます。同じデータベースのほかのプロジェクトが使っている場合、インストールは残り、このプロジェクトの記録だけが削除されます(note)。pg_trgmとunaccentは標準で有効なため無効にできません。confirm に拡張機能の名前をそのまま入れてください。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールdisable_extension
本文の上限256 KiB
レスポンスオブジェクト: ref, extension
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいlist_extensionsにある拡張機能の名前です。
confirm本文stringはい拡張機能の名前です。nameと完全に同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/extensions/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/extensions/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/database/move

専用データベースへの移行の状態 このプロジェクトが専用データベースにあるか(dedicated)、プランに含まれるか(plan_allows)、移行を依頼したか・移行中か・失敗して止まったか(stopped、last_error)を示します。size_bytesがauto_move_max_bytesより大きいと自動では移行しないため、move_to_dedicated_databaseで依頼してください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_database_move
レスポンスオブジェクト: ref
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/move" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/move', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/database/move

専用データベースへの移行 共用データベースにあるプロジェクトを、専用のデータベースへ移行するよう依頼します。コンソールの「今すぐ移行」と同じです。順番が来ると移行し、移行中は書き込みが止まり、読み取りは続きます。移行直前の状態がバックアップとして残り、失敗した場合は元の場所にそのまま残ります(止まった移行は、もう一度依頼すると再試行します)。Vaultや大きなデータベースに必要です。Proプランから含まれます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールmove_to_dedicated_database
レスポンスオブジェクト: ref, note
ステータスコード200 · 400 · 401 · 402 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/move" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/move', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/database/dedicated-disk

専用ディスク データベースが大きくなったプロジェクトが使う、このプロジェクトだけのディスクと Postgres を示します。サイズ(size_gb)、使用量、月額、30日間の履歴、進行中の依頼と縮小の提案(shrink)です。まだ共有ディスクにある場合は、移す基準(threshold_gb)と現在のデータベースのサイズを示します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_dedicated_disk
レスポンスオブジェクト: ref
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/dedicated-disk" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/dedicated-disk', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/database/dedicated-disk

専用ディスクに移す このプロジェクトのデータベースを専用ディスク(max(1.2 × データベース, 20GB))に移すよう依頼します。コンソールの「専用ディスクに移す」と同じです。ディスクは作成したサイズに対して1GBあたり月 ₩1,200(75セント)で請求し、移している間は書き込みが失敗し、読み取りはできます(get_dedicated_disk の expected_downtime_seconds)。Enterprise はいつでも、ほかの有料プランは基準を超えると依頼できます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrequest_dedicated_disk
レスポンスオブジェクト: ref, note
ステータスコード200 · 400 · 401 · 402 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/dedicated-disk" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/dedicated-disk', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/database/dedicated-disk/shrink

ディスクを縮小 専用ディスクを縮小します。より小さいディスク(1.2 × データベース、最小20GB)を新しく作って移し、元のディスクを削除します。7日間 25% 未満の使用が続いたディスクだけ縮小できます(get_dedicated_disk の shrink.suggested)。移している間は書き込みが失敗し、読み取りはできます。自動で縮小することはありません。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールshrink_dedicated_disk
レスポンスオブジェクト: ref, note
ステータスコード200 · 400 · 401 · 402 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/dedicated-disk/shrink" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/database/dedicated-disk/shrink', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/realtime

リアルタイムがオンのテーブル 変更がリアルタイムで送られるテーブルです。ここにないテーブルを購読しても何も届きません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_realtime_tables
レスポンスオブジェクト: ref, tables
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/realtime" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/realtime', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/realtime/{table}

テーブルのリアルタイムのオン・オフ テーブル1つの変更通知をオンまたはオフにします。通知もアクセスルールを通過する行についてだけ送られます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_realtime
本文の上限256 KiB
レスポンスオブジェクト: ref, tables
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
tableパスstringはいテーブル名です。
enabled本文booleanはいtrueでオン、falseでオフにします。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/realtime/notes" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/realtime/notes', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

認証とユーザー

メソッドパス説明
GET/projects/{ref}/usersサービスのユーザー
POST/projects/{ref}/users/{id}/linksログインリンクの作成
PATCH/projects/{ref}/users/{id}ユーザーの変更
POST/projects/{ref}/users/importユーザーの一括インポート
POST/projects/{ref}/usersユーザーの追加
GET/projects/{ref}/auth/providersソーシャルログインの設定
PUT/projects/{ref}/auth/providers/{provider}ソーシャルログインをオンにする
PATCH/projects/{ref}/auth/providers/{provider}ソーシャルログインのオン・オフ
DELETE/projects/{ref}/auth/providers/{provider}ソーシャルログインの削除
GET/projects/{ref}/auth/redirect-urlsログイン後に戻るアドレス
POST/projects/{ref}/auth/redirect-urls戻るアドレスの追加
DELETE/projects/{ref}/auth/redirect-urls戻るアドレスの削除
GET/projects/{ref}/auth/smsSMSログイン設定の確認
PUT/projects/{ref}/auth/smsSMSログインの設定
DELETE/projects/{ref}/auth/smsSMSログインの削除
GET/projects/{ref}/auth/smtpSMTP設定の表示
PUT/projects/{ref}/auth/smtpSMTP設定
DELETE/projects/{ref}/auth/smtpSMTP設定の削除
POST/projects/{ref}/auth/smtp/testSMTPテストメールの送信
GET/projects/{ref}/auth/templatesメールテンプレートの表示
GET/projects/{ref}/auth/templates/{type}メールテンプレートの表示
PUT/projects/{ref}/auth/templates/{type}メールテンプレートの保存
DELETE/projects/{ref}/auth/templates/{type}メールテンプレートを戻す
POST/projects/{ref}/auth/templates/{type}/previewメールテンプレートのプレビュー
GET/projects/{ref}/auth/ssoSAML SSOの確認
DELETE/projects/{ref}/auth/sso/{id}SAML SSOの削除
PUT/projects/{ref}/auth/anonymous匿名ログインのオン・オフ
DELETE/projects/{ref}/users/{id}ユーザーの削除

GET /api/v1/projects/{ref}/users

サービスのユーザー このプロジェクトを使うサービスに新規登録したユーザーです。プラットフォームのアカウントとは別です。一度に最大200人まで返り、totalが全体の人数です。has_moreがtrueならまだ続きがあるので、offsetを増やして再度呼び出してください。usersの長さを人数として扱うのは誤りです。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_users
レスポンスオブジェクト: users, total, limit, offset, has_more
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
limitクエリinteger, min 1, max 200いいえ一度に取得するユーザー数です。既定は50、最大200です。
offsetクエリinteger, min 0いいえ読み飛ばすユーザー数です。既定は0です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/users?limit=1&offset=0" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/users?limit=1&offset=0', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/users/{id}

ユーザーの変更 このプロジェクトのユーザー1人を変更します。メールアドレス、パスワード、メールの確認、利用停止とその解除、メタデータです。渡したものだけが変わります。パスワードを変えるか停止すると、その人のログインはすべて切れます。パスワードは10文字以上で、漏えいしたことのあるものは拒否されます。メタデータは既存の値にマージされます。ユーザーがはっきり求めたときだけ使ってください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールupdate_user
本文の上限256 KiB
レスポンスオブジェクト: ref, user
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_users の id(UUID)です。
email本文stringいいえ新しいメールアドレスです。
password本文stringいいえ新しいパスワードです(10文字以上)。
email_confirm本文booleanいいえtrue ならメールアドレスを確認済みにします。
ban_duration本文stringいいえ停止期間です。例: 24h、30m、876000h(事実上の永久)。none なら停止を解除します。
user_metadata本文objectいいえユーザーが変更できるメタデータにマージする値です。
app_metadata本文objectいいえサーバーだけが変更するメタデータにマージする値です(ロール、プランなど)。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/users/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"email":"[email protected]","password":"a-long-passphrase","email_confirm":true,"ban_duration":"value","user_metadata":{},"app_metadata":{}}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/users/ID', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "email": "[email protected]",
    "password": "a-long-passphrase",
    "email_confirm": true,
    "ban_duration": "value",
    "user_metadata": {},
    "app_metadata": {}
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/users/import

ユーザーの一括インポート 別のサービス(例: Supabase の auth.users エクスポート)のユーザーを一度に500人まで取り込みます。id と bcrypt のパスワードハッシュはそのまま保たれるため、パスワードを決め直す必要はありません。先にリスト全体を検査し、誤りのある行は番号で示して何も取り込みません。すでにあるアカウントはスキップするので、再実行しても安全です。dry_run=true なら検査のみです。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールimport_users
本文の上限256 KiB
レスポンスオブジェクト: ref, dry_run, found, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
users本文array<object>はいアカウントのリストです: { email, id?, encrypted_password?, email_confirmed?, user_metadata?, app_metadata? }。
dry_run本文booleanいいえリストを検査するだけで、何も取り込みません。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/users/import" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"users":[{"email":"[email protected]","id":"ID","encrypted_password":"value","email_confirmed":"value","user_metadata":"value","app_metadata":"value"}]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/users/import', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "users": [
      {
        "email": "[email protected]",
        "id": "ID",
        "encrypted_password": "value",
        "email_confirmed": "value",
        "user_metadata": "value",
        "app_metadata": "value"
      }
    ]
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/users

ユーザーの追加 このプロジェクトのサービスにユーザーを1人作成します。パスワードは10文字以上が必要です。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールadd_user
本文の上限256 KiB
レスポンスオブジェクト: added
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
email本文stringはいユーザーのメールアドレスです。
password本文stringはい10文字以上です。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/users" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"email":"[email protected]","password":"a-long-passphrase"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/users', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "email": "[email protected]",
    "password": "a-long-passphrase"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/auth/providers

ソーシャルログインの設定 このプロジェクトのサービスに、どのアカウントでログインできるかを表示します。プラットフォームが対応するプロバイダーをすべて返すため、まだ設定していないものはconfigured: falseと表示されます。独自に登録したプロバイダー(custom:<名前>)はその後にcustom項目(アドレス、scopes、応答フィールドの対応)と一緒に出ます。callback_urlは、プロバイダーのコンソールにそのまま貼り付けるアドレスです。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_auth_providers
レスポンスオブジェクト: ref, anonymous_sign_in, providers
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/providers" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/providers', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/auth/providers/{provider}

ソーシャルログインをオンにする プロバイダー1つのクライアントIDとシークレットを保存してオンにします。シークレットは封印され読み戻せず、確認できるのは末尾4文字だけです。先にプロバイダーのコンソールでアプリを作成し、list_auth_providersのcallback_urlをリダイレクト先アドレスとして登録してください。保存済みのプロバイダーのIDだけを変える場合は、client_secretを空文字列にしてください。Supabaseと同じように、providerをcustom:<名前>にすると、プラットフォームの一覧にないOAuth 2.0・OpenID Connectプロバイダーを独自に登録します(例: custom:kakao-xts)。そのときはissuer(OpenID Connectならこれだけでアドレスを埋めます)またはauthorize_url・token_url(・userinfo_url)が必要で、scopesとclaims(応答のどのフィールドがid・email・email_verified・name・avatar・phoneか、ドットでつないだパス)を指定できます。アプリからはsignInWithOAuth({ provider: "custom:<名前>" })で呼び出し、ログイン直後のセッションにprovider_tokenが一度だけ入ります。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_auth_provider
本文の上限256 KiB
レスポンスオブジェクト: provider, enabled, callback_url
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
providerパスstring, pattern ^(google|kakao|naver|apple|github|gitlab|microsoft|facebook|line|discord|x|bitbucket|figma|linkedin_oidc|notion|twitch|slack_oidc|spotify|zoom|azure|keycloak|workos|twitter|slack|custom:[a-z0-9][a-z0-9_-]{0,39})$はいログインプロバイダー: google, kakao, naver, apple, github, gitlab, microsoft, facebook, line, discord, x, bitbucket, figma, linkedin_oidc, notion, twitch, slack_oidc, spotify, zoom, azure, keycloak, workos, twitter, slack、または独自に登録する custom:<名前>(英小文字・数字・-・_、40文字まで)。
client_id本文stringいいえプロバイダーのコンソールで発行されたクライアントIDです。
client_secret本文stringいいえ空文字列なら保存済みのシークレットを保ちます。新しいプロバイダーでは必須です。
enabled本文booleanいいえ既定はオンです。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/providers/google" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"client_id":"CLIENT_ID","client_secret":"CLIENT_SECRET","enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/providers/google', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "client_id": "CLIENT_ID",
    "client_secret": "CLIENT_SECRET",
    "enabled": true
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/auth/providers/{provider}

ソーシャルログインのオン・オフ プロバイダーをオフまたはオンにし、保存済みの認証情報は残します。プロバイダーの不具合の原因を調べている間に使ってください。オンに戻すときに新しいシークレットは不要です。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_auth_provider_enabled
本文の上限256 KiB
レスポンスオブジェクト: provider, enabled
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
providerパスstring, pattern ^(google|kakao|naver|apple|github|gitlab|microsoft|facebook|line|discord|x|bitbucket|figma|linkedin_oidc|notion|twitch|slack_oidc|spotify|zoom|azure|keycloak|workos|twitter|slack|custom:[a-z0-9][a-z0-9_-]{0,39})$はいログインプロバイダー: google, kakao, naver, apple, github, gitlab, microsoft, facebook, line, discord, x, bitbucket, figma, linkedin_oidc, notion, twitch, slack_oidc, spotify, zoom, azure, keycloak, workos, twitter, slack、または独自に登録する custom:<名前>(英小文字・数字・-・_、40文字まで)。
enabled本文booleanはいtrueでオン、falseでオフにします。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/providers/google" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/providers/google', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/auth/providers/{provider}

ソーシャルログインの削除 プロバイダーの設定を認証情報ごと削除します。一時的にオフにするだけならset_auth_provider_enabledを使ってください。この方法で削除した後は、シークレットを再取得する必要があります。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_auth_provider
レスポンスオブジェクト: provider, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
providerパスstring, pattern ^(google|kakao|naver|apple|github|gitlab|microsoft|facebook|line|discord|x|bitbucket|figma|linkedin_oidc|notion|twitch|slack_oidc|spotify|zoom|azure|keycloak|workos|twitter|slack|custom:[a-z0-9][a-z0-9_-]{0,39})$はいログインプロバイダー: google, kakao, naver, apple, github, gitlab, microsoft, facebook, line, discord, x, bitbucket, figma, linkedin_oidc, notion, twitch, slack_oidc, spotify, zoom, azure, keycloak, workos, twitter, slack、または独自に登録する custom:<名前>(英小文字・数字・-・_、40文字まで)。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/providers/google" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/providers/google', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/auth/redirect-urls

ログイン後に戻るアドレス ログイン後に戻すことができるアドレスです。ここにないアドレスには誰も送られません。ログインはできるのにどこにも戻らない場合は、まずここを見てください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_redirect_urls
レスポンスオブジェクト: ref, urls
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/redirect-urls" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/redirect-urls', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/auth/redirect-urls

戻るアドレスの追加 許可リストにアドレスを1つ追加します。スキーム、ホスト、ポートがすべて一致する必要があり、パスは確認しません。そのためhttps://app.example.com/callbackを追加するとhttps://app.example.comとして保存されます。モバイルアプリ独自のスキーム(co.example.app://callback)も追加できます(ドットを含むスキームのみ)。応答には実際に保存されたリストが含まれます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールadd_redirect_url
本文の上限256 KiB
レスポンスオブジェクト: ref, urls
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
url本文stringはいアドレスです。例: https://app.example.com
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/redirect-urls" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"url":"https://example.com/hook"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/redirect-urls', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "url": "https://example.com/hook"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/auth/redirect-urls

戻るアドレスの削除 許可リストからアドレスを1つ外します。list_redirect_urlsが返したとおりに指定してください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_redirect_url
本文の上限256 KiB
レスポンスオブジェクト: ref, urls
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
url本文stringはいlist_redirect_urlsが返したとおりのアドレスです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/redirect-urls" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"url":"https://example.com/hook"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/redirect-urls', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "url": "https://example.com/hook"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/auth/sms

SMSログイン設定の確認 電話番号の認証コードログイン(signInWithOtp({ phone }))に使うSMSアカウントを確認します。プロバイダー(platform、solapi、nhn、aligo、twilio)、送信元番号、送信できる国番号、認証コードの桁数と有効時間、1時間あたりの上限です。認証情報は末尾4文字だけ表示されます。platform_availableがtrueのときだけ、プラットフォームのアカウント(1通 ₩100、韓国のみ)を選べます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_sms_settings
レスポンスオブジェクト: ref, configured, provider, enabled, sender, allowed_countries, otp_length, otp_ttl_seconds, hourly_limit, template, key_hint, secret_hint, account_hint, credentials_readable, platform_available, providers, updated_at
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/sms" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/sms', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/auth/sms

SMSログインの設定 SMSアカウントを保存してオンにします。自分で契約したプロバイダーには、key・secret・account(プロバイダーによって異なります。SolapiはAPI KeyとAPI Secret、NHN CloudはApp KeyとSecret Key、AligoはAPI KeyとUser ID(account)、TwilioとTwilio VerifyはAccount SID(account)とAuth Token(secret)、MessageBirdはAccess Key(key)、TextlocalはAPI Key(key)、VonageはAPI Key(key)とAPI Secret(secret))と、事前登録した送信元(MessageBird・Textlocal・Vonageは11文字以内の送信者IDも可、Twilio VerifyはVAで始まるVerify Service SID)が必要です。電話番号の確認やテスト番号などは update_auth_config の SMS_* キーで変更します。空欄の認証情報は保存済みの値を使います。allowed_countriesは既定で82(韓国)のみです。対象外の国を入れると、海外の有料番号にSMSを送らせる詐欺の対象になります。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_sms_settings
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
provider本文string, platform | solapi | nhn | aligo | twilio | messagebird | textlocal | vonage | twilio_verifyはいplatform(プラットフォームのアカウント、有料プランのみ)、solapi、nhn、aligo、twilio、messagebird、textlocal、vonage、twilio_verifyのいずれか。
key本文stringいいえSolapiのAPI Key、NHN CloudのApp Key、AligoのAPI Key。空欄なら保存済みの値。
secret本文stringいいえSolapiのAPI Secret、NHN CloudのSecret Key、TwilioのAuth Token。空欄なら保存済みの値。
account本文stringいいえAligoのUser ID、TwilioのAccount SID。空欄なら保存済みの値。
sender本文stringいいえ送信元番号。例: 01012345678。Twilioは+1の番号か、MGで始まるMessaging Service SID。
allowed_countries本文array<string>いいえ送信できる国番号の一覧。例: ["82"]。
otp_length本文integer, min 6, max 10いいえ認証コードの桁数、6から10。既定は6。
otp_ttl_seconds本文integer, min 60, max 3600いいえ認証コードの有効時間、60から3600秒。既定は300。
hourly_limit本文integer, min 1, max 100000いいえプロジェクト全体で1時間に送れる上限。既定は200。
template本文stringいいえ{{code}}を含む文面。nullなら既定の文面。
enabled本文booleanいいえ既定はオンです。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/sms" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"provider":"platform"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/sms', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "provider": "platform"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/auth/sms

SMSログインの削除 SMSアカウントの設定を認証情報ごと削除します。以降の電話番号ログインはphone_provider_disabledで拒否されます。一時的にオフにするだけなら、set_sms_settingsにenabled: falseを渡してください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_sms_settings
レスポンスオブジェクト: ref, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/sms" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/sms', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/auth/smtp

SMTP設定の表示 このプロジェクトの認証メール(登録確認・パスワード再設定・ログインリンク・メールアドレス変更・招待)を送るSMTPサーバーと送信者を表示します。SupabaseのSMTP Settingsと同じ項目です。パスワードは表示されず、password_hintに末尾4文字だけが出ます(8文字以上の場合)。last_errorがあれば、そのサーバーが拒否したためプラットフォームの送信アドレスから代わりに送ったということです。configuredがfalseならプラットフォームの送信アドレスを使います。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_smtp_settings
レスポンスオブジェクト: ref, configured, enabled, sender_email, sender_name, host, port, username, password_hint, password_readable, minimum_interval_seconds, rate_limit_per_hour, last_sent_at, last_error, last_error_at, updated_at
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/smtp" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/smtp', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/auth/smtp

SMTP設定 認証メールをこのプロジェクトのSMTPサーバーから、指定した送信者名とアドレスで送ります。初回はsender_email、host、username、passwordが必要で、その後は変える値だけで構いません(passwordを空にすると保存済みの値を使います)。サーバーはパブリックなアドレスで、TLS(465は最初から、それ以外はSTARTTLS)を使う必要があります。拒否された場合はプラットフォームの送信アドレスから送り、理由をlast_errorに残します。保存後にtest_smtp_settingsで確認してください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_smtp_settings
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
sender_email本文stringいいえ送信者メールアドレス(Sender email)です。例: [email protected]。
sender_name本文stringいいえ送信者名(Sender name)です。例: 私のお店。
host本文stringいいえSMTPサーバーのアドレス(Host)です。例: smtp.sendgrid.net。
port本文integer, 25 | 465 | 587 | 2465 | 2525いいえポート(Port): 25、465、587、2465、2525のいずれかです。既定は587です。
username本文stringいいえSMTPのユーザー名(Username)です。
password本文stringいいえSMTPのパスワード(Password)です。空なら保存済みの値を使います。
minimum_interval_seconds本文integer, min 0, max 3600いいえ同じアドレスに再び送るまでの最小間隔(秒)です。既定は60です。
rate_limit_per_hour本文integer, min 1, max 10000いいえプロジェクト全体が1時間に送れるメールの数です。既定は100です。超えるとover_email_send_rate_limit(429)で拒否されます。
enabled本文booleanいいえfalseにすると設定は残したまま、プラットフォームの送信アドレスから送ります。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/smtp" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"sender_email":"value","sender_name":"value","host":"value","port":25,"username":"value","password":"a-long-passphrase","minimum_interval_seconds":0,"rate_limit_per_hour":1,"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/smtp', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "sender_email": "value",
    "sender_name": "value",
    "host": "value",
    "port": 25,
    "username": "value",
    "password": "a-long-passphrase",
    "minimum_interval_seconds": 0,
    "rate_limit_per_hour": 1,
    "enabled": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/auth/smtp

SMTP設定の削除 SMTP設定をパスワードごと削除します。以降、認証メールはプラットフォームの送信アドレスから送られます。一時的に止めるにはset_smtp_settingsにenabled: falseを渡してください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_smtp_settings
レスポンスオブジェクト: ref, removed, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/smtp" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/smtp', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/auth/smtp/test

SMTPテストメールの送信 保存したSMTPサーバーからテストメールを1通送ります。プラットフォームからの代替送信はしないので、失敗した場合はサーバーが返した理由がそのまま表示されます。toを省くと呼び出した人のアドレスに送ります。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールtest_smtp_settings
本文の上限256 KiB
レスポンスオブジェクト: ref, sent, to, sender_email
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
to本文stringいいえ送信先のアドレスです。省くと自分のアドレスです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/smtp/test" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"to":"https://example.com"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/smtp/test', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "to": "https://example.com"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/auth/templates

メールテンプレートの表示 認証メール6種類(confirmation、invite、magic_link、recovery、email_change、reauthentication)の件名と本文(HTML)です。customがfalseの種類は既定の文面(リクエストの言語に合わせた韓国語・英語・日本語)を使います。typeを渡すとその1つだけを表示します。使える変数はSupabaseと同じです: {{ .ConfirmationURL }}、{{ .Token }}、{{ .TokenHash }}、{{ .SiteURL }}、{{ .Email }}、{{ .NewEmail }}、{{ .RedirectTo }}、{{ .Data.<key> }}。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_email_templates
レスポンスオブジェクト: ref, variables, templates
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/templates" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/templates', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/auth/templates/{type}

メールテンプレートの表示 認証メール6種類(confirmation、invite、magic_link、recovery、email_change、reauthentication)の件名と本文(HTML)です。customがfalseの種類は既定の文面(リクエストの言語に合わせた韓国語・英語・日本語)を使います。typeを渡すとその1つだけを表示します。使える変数はSupabaseと同じです: {{ .ConfirmationURL }}、{{ .Token }}、{{ .TokenHash }}、{{ .SiteURL }}、{{ .Email }}、{{ .NewEmail }}、{{ .RedirectTo }}、{{ .Data.<key> }}。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_email_templates
レスポンスオブジェクト: ref, variables, templates
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
typeパスstring, confirmation | invite | magic_link | recovery | email_change | reauthentication | password_changed | email_changed | mfa_enrolled | mfa_removed | identity_linked | identity_unlinkedはいconfirmation、invite、magic_link、recovery、email_change、reauthenticationのいずれかです。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/templates/confirmation" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/templates/confirmation', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/auth/templates/{type}

メールテンプレートの保存 1つの種類の件名と本文(HTML)を設定します。Supabaseからコピーしたテンプレートをそのまま使えます。差し込む値はHTMLエスケープされ、件名は1行である必要があります。{{ if }}などの他の構文は拒否されます。reauthenticationは保存されますが、まだ送信されません(reauthenticateは未対応)。保存前にpreview_email_templateで確認してください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_email_template
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
typeパスstring, confirmation | invite | magic_link | recovery | email_change | reauthentication | password_changed | email_changed | mfa_enrolled | mfa_removed | identity_linked | identity_unlinkedはいconfirmation、invite、magic_link、recovery、email_change、reauthenticationのいずれかです。
subject本文string, max length 200はい件名です。200文字までです。
body本文string, max length 50000はい本文のHTMLです。例: <a href="{{ .ConfirmationURL }}">登録を確認</a>
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/templates/confirmation" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"subject":"value","body":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/templates/confirmation', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "subject": "value",
    "body": "value"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/auth/templates/{type}

メールテンプレートを戻す 1つの種類のテンプレートを削除し、既定の文面(韓国語・英語・日本語)に戻します。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_email_template
レスポンスオブジェクト: ref, type, removed, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
typeパスstring, confirmation | invite | magic_link | recovery | email_change | reauthentication | password_changed | email_changed | mfa_enrolled | mfa_removed | identity_linked | identity_unlinkedはいconfirmation、invite、magic_link、recovery、email_change、reauthenticationのいずれかです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/templates/confirmation" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/templates/confirmation', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/auth/templates/{type}/preview

メールテンプレートのプレビュー 例の値を入れたときのメールの見た目(件名、HTML、テキスト)を返します。subjectとbodyを渡すと保存せずにその内容を、省くと保存済みのテンプレートか既定の文面を表示します。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールpreview_email_template
本文の上限256 KiB
レスポンスオブジェクト: ref, type, custom, subject, html, text
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
typeパスstring, confirmation | invite | magic_link | recovery | email_change | reauthentication | password_changed | email_changed | mfa_enrolled | mfa_removed | identity_linked | identity_unlinkedはいconfirmation、invite、magic_link、recovery、email_change、reauthenticationのいずれかです。
subject本文stringいいえ保存せずに試す件名です。
body本文stringいいえ保存せずに試す本文です。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/templates/confirmation/preview" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"subject":"value","body":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/templates/confirmation/preview', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "subject": "value",
    "body": "value"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/auth/sso

SAML SSOの確認 このプロジェクトに登録したSAML IdPとメールドメイン、IdPに入力する2つのアドレス(acs_url、entity_id)を確認します。アプリではsupabase.auth.signInWithSSO({ domain })でログインします。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_sso_providers
レスポンスオブジェクト: ref, acs_url, entity_id, metadata_url, new_providers_allowed, providers
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/sso" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/sso', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/auth/sso/{id}

SAML SSOの削除 IdPを1つ削除します。そのIdPで作られたアカウントは残りますが、SSOではログインできなくなります。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_sso_provider
レスポンスオブジェクト: ref, id, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_sso_providersのid。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/sso/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/sso/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/auth/anonymous

匿名ログインのオン・オフ メールアドレスなしですぐにセッションを発行する匿名ログインをオンまたはオフにします。今の状態はlist_auth_providersのanonymous_sign_inです。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_anonymous_sign_in
本文の上限256 KiB
レスポンスオブジェクト: ref, anonymous_sign_in
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
enabled本文booleanはいtrueでオン、falseでオフにします。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/anonymous" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/auth/anonymous', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/users/{id}

ユーザーの削除 プロジェクトのユーザーを1人削除します。元に戻せません。idはlist_usersが返した値です。ユーザーがはっきり求めたときだけ使い、confirm にそのユーザーのメールアドレス(またはid)をそのまま入れてください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_user
本文の上限256 KiB
レスポンスオブジェクト: ref, id, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_usersのid(UUID)です。
confirm本文stringはい削除するユーザーのメールアドレスまたはidです。list_usersのemailかidと同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/users/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/users/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

ストレージ

メソッドパス説明
POST/projects/{ref}/buckets/{bucket}/emptyバケットを空にする
GET/projects/{ref}/buckets/{bucket}/objectsファイル一覧
POST/projects/{ref}/buckets/{bucket}/objectsファイルのアップロード
GET/projects/{ref}/buckets/{bucket}/objectファイルのダウンロード
DELETE/projects/{ref}/buckets/{bucket}/objectファイルの削除
POST/projects/{ref}/buckets/{bucket}/upload-urlsアップロードURLの作成
POST/projects/{ref}/buckets/{bucket}/signed-urls署名付きURLの作成
PATCH/projects/{ref}/buckets/{bucket}バケット設定の変更
DELETE/projects/{ref}/buckets/{bucket}バケットの削除
GET/projects/{ref}/bucketsバケット
POST/projects/{ref}/bucketsバケットの作成

POST /api/v1/projects/{ref}/buckets/{bucket}/empty

バケットを空にする バケット内のファイルをすべて削除します。バケットは残ります。元に戻せないので、ユーザーがはっきり求めたときだけ使い、confirm にバケット名をそのまま入れてください。removed が削除したファイル数です。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールempty_bucket
本文の上限256 KiB
レスポンスオブジェクト: ref, bucket, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
bucketパスstringはいlist_bucketsのバケット名です。
confirm本文stringはいバケット名です。bucketと完全に同じである必要があります。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/empty" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/empty', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/buckets/{bucket}/objects

ファイル一覧 バケット内の1つのフォルダーを表示します。サブフォルダーとファイルの名前、サイズ、形式です。prefixでフォルダーを選び(例: avatars/2024/)、searchで名前を探します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_objects
レスポンスオブジェクト: ref, bucket, prefix, total, objects
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
bucketパスstringはいlist_bucketsのバケット名です。
prefixクエリstringいいえ表示するフォルダーです。空なら一番上です。
searchクエリstringいいえ名前にこの語を含むものだけです。
limitクエリinteger, min 1, max 1000いいえ既定は100です。
offsetクエリinteger, min 0いいえ飛ばす件数です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/objects?prefix=value&search=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/objects?prefix=value&search=value', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/buckets/{bucket}/objects

ファイルのアップロード ファイルを1つバケットにアップロードします(2MBまで)。テキストはそのまま、バイナリはencodingをbase64にしてcontentにbase64を入れます。同じ名前があれば拒否し、upsertがtrueなら置き換えます。バケットのサイズと形式の制限に従います。もっと大きいファイルはストレージAPI(/storage/v1)でアップロードしてください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールupload_object
本文の上限4096 KiB
レスポンスオブジェクト: ref, bucket, name, size, mime, replaced
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
bucketパスstringはいlist_bucketsのバケット名です。
content本文stringはいファイルの内容です(encodingがbase64ならbase64)。
name本文stringはいバケット内のパスです。例: docs/readme.txt
encoding本文string, utf-8 | base64いいえ既定はutf-8です。
content_type本文stringいいえ例: image/png。空ならテキストまたはapplication/octet-streamです。
upsert本文booleanいいえtrueなら同じ名前のファイルを置き換えます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/objects" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"content":"value","name":"my-name"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/objects', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "content": "value",
    "name": "my-name"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/buckets/{bucket}/object

ファイルのダウンロード ファイル1つの内容を返します(2MBまで)。テキストはutf-8、バイナリはbase64で返します。もっと大きいファイルはcreate_signed_urlでアドレスを作って受け取ってください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールdownload_object
レスポンスオブジェクト: ref, bucket, name, size, mime, encoding, content
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
bucketパスstringはいlist_bucketsのバケット名です。
nameクエリstringいいえバケット内のパスです。
encodingクエリstring, utf-8 | base64いいえ空なら内容に合わせて選びます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/object?name=my-name&encoding=utf-8" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/object?name=my-name&encoding=utf-8', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/buckets/{bucket}/object

ファイルの削除 バケットからファイルを1つ削除します。元に戻せません。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールdelete_object
レスポンスオブジェクト: ref, bucket, name, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
bucketパスstringはいlist_bucketsのバケット名です。
nameクエリstringいいえバケット内のパスです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/object?name=my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/object?name=my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/buckets/{bucket}/upload-urls

アップロードURLの作成 2MBより大きい画像や動画などのファイル1つをアップロードするURLを作ります。ファイルの中身はこのツールでは送りません。返された url にファイルのバイトを本文としてそのまま PUT し、content-type に形式(image/png、video/mp4 など)を入れてください(例: example の curl)。URLは2時間、その名前1つにだけ使えます。max_bytes より大きいファイルや allowed_mime_types にない形式は拒否されます。max_bytes より大きいファイルは blackwall://storage の再開可能アップロード(TUS)を使ってください。公開バケットなら public_url がアップロード後の公開アドレスです。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_upload_url
本文の上限256 KiB
レスポンスオブジェクト: ref, bucket, name, method, url, expires_at, max_bytes, allowed_mime_types, public_url, example
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
bucketパスstringはいlist_buckets のバケット名です。
name本文stringはいバケット内のパスです。例: videos/intro.mp4
upsert本文booleanいいえtrue なら同じ名前のファイルを置き換えます。既定では拒否します。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/upload-urls" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/upload-urls', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/buckets/{bucket}/signed-urls

署名付きURLの作成 非公開バケットのファイル1つを、決まった時間だけ誰でもダウンロードできるアドレスを作ります(既定1時間、最大7日)。アドレスを持つ人はログインなしで受け取れるので、必要な分だけ作ってください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_signed_url
本文の上限256 KiB
レスポンスオブジェクト: ref, bucket, name, url, expires_at
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
bucketパスstringはいlist_bucketsのバケット名です。
name本文stringはいバケット内のパスです。
expires_in本文integer, min 1, max 604800いいえ有効な秒数です。既定は3600です。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/signed-urls" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value/signed-urls', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/buckets/{bucket}

バケット設定の変更 バケットの公開・非公開、ファイル1つの最大サイズ、受け付ける形式を変更します。渡したものだけが変わり、残りはそのままです。公開にすると中のファイルを誰でもダウンロードできるようになるので、ユーザーがはっきり求めたときだけ使ってください。すでにあるファイルはそのままです。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールupdate_bucket
本文の上限256 KiB
レスポンスオブジェクト: ref, bucket, public, file_size_limit, allowed_mime_types, files, bytes
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
bucketパスstringはいlist_bucketsのバケット名です。
public本文booleanいいえtrue なら公開、false なら非公開です。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"public":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "public": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/buckets/{bucket}

バケットの削除 空のバケットを削除します。ファイルが残っていると拒否するので、先に empty_bucket で空にしてください。元に戻せません。ユーザーがはっきり求めたときだけ使い、confirm にバケット名をそのまま入れる必要があります。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールdelete_bucket
本文の上限256 KiB
レスポンスオブジェクト: ref, bucket, deleted
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
bucketパスstringはいlist_bucketsのバケット名です。
confirm本文stringはいバケット名です。bucket と完全に同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets/value', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/buckets

バケット ストレージのバケットを、それぞれのファイル数とサイズとともに返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_buckets
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/buckets

バケットの作成 公開バケットは誰でも読めます。非公開バケットはアップロードした本人だけが読めます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_bucket
本文の上限256 KiB
レスポンスオブジェクト: bucket, public, file_size_limit, allowed_mime_types
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
id本文string, pattern ^[a-z0-9][a-z0-9._-]{1,62}$はいバケット名です。英小文字、数字、「. _ -」で2〜63文字です。
public本文booleanいいえ既定は非公開です。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"id":"ID"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/buckets', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "id": "ID"
  }),
})
const result = await response.json()

デプロイとリポジトリ

メソッドパス説明
POST/projects/{ref}/deployments/sources/upload-urlsデプロイ用アーカイブのアップロードURLの作成
POST/projects/{ref}/deployments/sourcesデプロイするファイルのアップロード
POST/projects/{ref}/deploymentsデプロイの作成
POST/projects/{ref}/deployments/{id}/redeploy再デプロイ
POST/projects/{ref}/deployments/{id}/promoteプレビューをプロダクションに昇格
POST/projects/{ref}/deployments/{id}/rollbackプロダクションのロールバック
GET/projects/{ref}/deploy-hooksデプロイフック
POST/projects/{ref}/deploy-hooksデプロイフックの作成
DELETE/projects/{ref}/deploy-hooks/{id}デプロイフックの削除
GET/projects/{ref}/deployments/deleted最近削除したデプロイ
DELETE/projects/{ref}/deployments/{id}デプロイを削除
POST/projects/{ref}/deployments/{id}/restoreデプロイを復元
GET/projects/{ref}/deploymentsデプロイ
GET/projects/{ref}/deployments/{id}デプロイ1件とビルドログ
GET/projects/{ref}/branch-previewsブランチプレビュー
PUT/projects/{ref}/branch-previewsブランチプレビューの変更
GET/projects/{ref}/preview-protectionプレビューの保護
PUT/projects/{ref}/preview-protectionプレビューの保護の変更
GET/projects/{ref}/apps接続済みリポジトリとビルド設定
DELETE/projects/{ref}/apps/{name}アプリの削除
PATCH/projects/{ref}/apps/{name}ビルド設定の変更
GET/projects/{ref}/env環境変数
POST/projects/{ref}/env環境変数の保存
DELETE/projects/{ref}/env/{target}/{key}環境変数の削除
GET/projects/{ref}/gitGit 接続
PUT/projects/{ref}/git/tokens/{provider}リポジトリトークンの保存
DELETE/projects/{ref}/git/tokens/{provider}リポジトリトークンの削除
POST/projects/{ref}/git/reposリポジトリの追加
DELETE/projects/{ref}/git/github-appGitHub アカウントの接続解除
DELETE/projects/{ref}/git/github-app/{installation}GitHub アカウントの接続解除
GET/projects/{ref}/git/importableインポートするリポジトリを探す
POST/projects/{ref}/git/importリポジトリのインポート
PUT/projects/{ref}/git/checks/{repo}/{repo}チェックを One Server で実行
DELETE/projects/{ref}/git/repos/{name}リポジトリの接続解除
GET/projects/{ref}/volumesボリューム一覧
POST/projects/{ref}/volumesボリュームを作成
PATCH/projects/{ref}/volumes/{id}ボリュームを拡張
DELETE/projects/{ref}/volumes/{id}ボリュームを削除
POST/projects/{ref}/volumes/{id}/backupsボリュームをバックアップ
POST/projects/{ref}/volumes/{id}/restoreボリュームを復元
GET/projects/{ref}/server-memoryサーバーメモリ
PUT/projects/{ref}/server-memoryサーバーメモリの変更
GET/projects/{ref}/gpuGPU ジョブとサーバー
POST/projects/{ref}/gpu/jobsGPU ジョブを作る
GET/projects/{ref}/gpu/jobs/{id}GPU ジョブを見る
POST/projects/{ref}/gpu/jobs/{id}/cancelGPU ジョブを止める
POST/projects/{ref}/gpu/serversGPU サーバーを作る
POST/projects/{ref}/gpu/servers/{name}/stopGPU サーバーを止める
DELETE/projects/{ref}/gpu/servers/{name}GPU サーバーを削除する
POST/projects/{ref}/gpu/volumesGPU ストレージを作る
DELETE/projects/{ref}/gpu/volumes/{name}GPU ストレージを削除する
GET/projects/{ref}/concurrent-builds同時ビルド
PUT/projects/{ref}/concurrent-builds同時ビルドの変更

POST /api/v1/projects/{ref}/deployments/sources/upload-urls

デプロイ用アーカイブのアップロードURLの作成 deploy_files に収まらない大きなサイト(3MB 超)をリポジトリなしでデプロイするときに使います。アーカイブ(.zip、.tar、.tar.gz)1つをアップロードするURLを作ります。アーカイブの中身はこのツールでは送りません。返された url にアーカイブを本文としてそのまま PUT すると(例: example の curl、トークンなし)答えに source が返り、その source で deploy_source を呼ぶとデプロイされます。URLは1時間、このプロジェクトにだけ使え、max_bytes まで受け付けます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_source_upload_url
レスポンスオブジェクト: ref, method, url, expires_at, max_bytes, formats, example, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/sources/upload-urls" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/sources/upload-urls', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/deployments/sources

デプロイするファイルのアップロード リポジトリなしでデプロイするファイルを、1 つのアーカイブ(.zip、.tar、.tar.gz)として本文にそのまま送ります。内容のダイジェストで保存され、デプロイは次に POST /deployments へ {"source": "<digest>"} を送って作成します。同じバイトをプレビューと本番にデプロイできます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
本文の上限51200 KiB
レスポンスオブジェクト: ref, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はい
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/sources" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/octet-stream" \
  --data-binary @file
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/sources', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/octet-stream' },
  body: bytes,
})
const result = await response.json()

POST /api/v1/projects/{ref}/deployments

デプロイの作成 本文の内容によって 3 種類あります。source は POST /deployments/sources で送ったアーカイブのダイジェスト、files(または files_base64)はパスごとのファイル内容です。どちらもなければ app、branch、commit でリポジトリのコミットをビルドします。target が production なら本番、それ以外はプレビューです。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールdeploy_source
本文の上限4096 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
source本文string, pattern ^[0-9a-f]{64}$いいえアップロード時に受け取ったsourceです(64文字のSHA-256)。
files本文stringいいえ
files_base64本文stringいいえ
app本文stringいいえデプロイするアプリです(list_appsのname)。アプリが1つなら省略します。
branch本文stringいいえプレビューの名前で、プレビューのアドレスになります。既定はpreviewです。
commit本文stringいいえ
wait本文integer, min 0, max 120いいえビルドが終わる(ready・error)まで待つ秒数です。既定の0はすぐに応答します。時間内に終わらなければ still_running: true と retry_after_seconds が返ります。MCP クライアントはたいてい60秒ほどで呼び出しをあきらめるので、45程度が安全です。
block_on_advisors本文booleanいいえtrueなら、get_advisors の重大なセキュリティ問題(advisors.critical)が1つでもある間、プロダクションへのデプロイを拒否します。既定のfalseはデプロイし、件数と上位3件を advisors で知らせます。プレビューは止めません。
prebuilt本文booleanいいえtrueならビルドせずにそのまま配信します。
target本文string, preview | productionいいえ既定はpreviewです。
message本文stringいいえデプロイ一覧に残すメモです(任意)。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"source":"export default async () => new Response(\"ok\")","files":"value","files_base64":"value","app":"owner/repo","branch":"main","commit":"0123456789abcdef0123456789abcdef01234567","wait":0,"block_on_advisors":true,"prebuilt":true,"target":"preview","message":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "source": "export default async () => new Response(\"ok\")",
    "files": "value",
    "files_base64": "value",
    "app": "owner/repo",
    "branch": "main",
    "commit": "0123456789abcdef0123456789abcdef01234567",
    "wait": 0,
    "block_on_advisors": true,
    "prebuilt": true,
    "target": "preview",
    "message": "value"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/deployments/{id}/redeploy

再デプロイ あるデプロイと同じコミットを、同じ環境にもう一度ビルドします。コミットとは関係のない理由(後から追加した環境変数、一時的に落ちていたパッケージレジストリ)で失敗したビルドをやり直すときに使います。プロダクションへのデプロイはオーナーと管理者のみ行えます。応答に新しいデプロイのアドレス(url、preview_url・production_url)とセキュリティチェックの結果(advisors)が含まれます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールredeploy
レスポンスオブジェクト: ref, id, status, environment, preview_protection, advisors
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいdpl-で始まるデプロイ名です。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID/redeploy" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID/redeploy', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/deployments/{id}/promote

プレビューをプロダクションに昇格 完了したプレビューデプロイをプロダクションに移します。同じコミットをプロダクションの環境変数でもう一度ビルドし、完了するとプロダクションのアドレスがその結果を指します。プレビューのキーがプロダクションに届かないよう、プレビューのビルドは再利用しません。完了したプロダクションデプロイを渡すと、再ビルドせずにプロダクションのアドレスがすぐそれを指し、ロールバックによるプロダクションの保留(production_held)が解除されます。いま配信中のデプロイを渡すと保留だけ解除されます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者, project.admin オーナーまたは管理者
MCP ツールpromote_deployment
レスポンスオブジェクト: ref, id, status, environment, preview_protection, advisors
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはい昇格するデプロイのdpl-名です。通常はプレビュー、保留を解除するときはプロダクションのデプロイです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID/promote" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID/promote', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/deployments/{id}/rollback

プロダクションのロールバック 以前に配信していたプロダクションデプロイへ、プロダクションのアドレスを直接戻します。再ビルドはせず、数秒で切り替わります。カスタムドメインも追従します。応答にそのデプロイの url と production_url が含まれます。その後プロダクションは保留されます(production_held): 新しいプロダクションビルドは作られますが、promote_deployment で昇格するまで配信されません。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrollback_deployment
レスポンスオブジェクト: ref, id, status, production_held
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはい戻す先のプロダクションデプロイのdpl-名です。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID/rollback" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID/rollback', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/deploy-hooks

デプロイフック デプロイフックとそのアドレスを表示します。アドレスにPOSTするとそのブランチの最新コミットをビルドするため、アドレス自体がシークレットです。読み取り権限のトークンには各アドレスの末尾4文字だけを表示します(secret_hidden)。書き込み権限のトークンならすべて表示します。

名前説明
トークンのスコープread
ロールsecrets.read オーナーまたは管理者または開発者
MCP ツールlist_deploy_hooks
レスポンスオブジェクト: ref, hooks
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deploy-hooks" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deploy-hooks', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/deploy-hooks

デプロイフックの作成 pushなしでビルドを起動するアドレスを作成します。CMSで記事を公開したときや、予約ジョブから呼び出してください。プロダクションブランチのフックはオーナーと管理者のみ作成できます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_deploy_hook
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
app本文stringはいlist_appsの名前です。
branch本文stringはい最新コミットをビルドするブランチです。
name本文stringいいえフックを見分けるための名前です。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deploy-hooks" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"app":"owner/repo","branch":"main"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deploy-hooks', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "app": "owner/repo",
    "branch": "main"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/deploy-hooks/{id}

デプロイフックの削除 デプロイフックを削除します。そのアドレスを呼び出していたものは、もうデプロイを起こしません。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_deploy_hook
レスポンスオブジェクト: ref, id, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_deploy_hooksのidです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deploy-hooks/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deploy-hooks/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/deployments/deleted

最近削除したデプロイ 3日以内に削除されたデプロイ(手動で削除したものと保存期間が過ぎたもの)と、復元できる期限(restorable_until)を返します。その間、そのデプロイのアドレスは 410 を返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_deleted_deployments
レスポンスオブジェクト: ref, deployments
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/deleted" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/deleted', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/deployments/{id}

デプロイを削除 デプロイを 1 つ削除します。配信中とビルド中のデプロイは削除できません。3日間は restore_deployment で復元でき、その後ファイルとビルドログを消去します。本番のデプロイはプロジェクト管理者、それ以外は開発者以上が実行できます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールdelete_deployment
レスポンスオブジェクト: ref, id, deleted, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstring, pattern ^dpl-[0-9a-f]{16}$はいデプロイの id(dpl-…)。list_deployments か list_deleted_deployments で確認します。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/deployments/{id}/restore

デプロイを復元 3日以内に削除されたデプロイを復元します。このデプロイのアドレスが再び応答し、ロールバックや昇格ができるようになります。本番のデプロイはプロジェクト管理者、それ以外は開発者以上が実行できます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールrestore_deployment
レスポンスオブジェクト: ref, id, restored, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstring, pattern ^dpl-[0-9a-f]{16}$はいデプロイの id(dpl-…)。list_deployments か list_deleted_deployments で確認します。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID/restore" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID/restore', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/deployments

デプロイ このプロジェクトの最近のデプロイを新しい順に表示します。状態(queued、building、ready、error)、環境、アドレス、ブランチ、コミット、失敗した理由が含まれます。削除したデプロイは含まれません(list_deleted_deployments で表示)。next_before があれば before に渡すと次のページを表示します。url はそのデプロイ固有の dpl- アドレス、production_url はプロダクションのアドレス、preview_url はそのブランチのプレビューのアドレスです。 preview_protection はプレビューのアドレスを誰が開けるかです(members: 組織のメンバーのみ、既定 / password / off: 誰でも)。プロダクションのアドレスは常に公開なので null ですが、保護がオンなら dpl- アドレスはプロダクションのビルドでも保護されます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_deployments
レスポンスオブジェクト: ref, preview_protection, deployments
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
limitクエリinteger, min 1, max 100いいえ既定は20件です。
beforeクエリstring, pattern ^dpl-[0-9a-f]{16}$いいえこのデプロイの次から(古い方)。前のページの next_before。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments?limit=1&before=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments?limit=1&before=value', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/deployments/{id}

デプロイ1件とビルドログ デプロイ1件の状態、アドレス、ビルドログの末尾を表示します。ビルドが失敗した場合、理由はたいていログの最後の数行にあります。お客様が設定した環境変数の値は••••••で伏せられます。url はそのデプロイ固有の dpl- アドレス、production_url・preview_url はプロダクションやそのブランチのアドレスです。 preview_protection はプレビューのアドレスを誰が開けるかです(members: 組織のメンバーのみ、既定 / password / off: 誰でも)。プロダクションのアドレスは常に公開なので null です。wait(秒)を渡すとビルドが終わるまで待ちます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_deployment
レスポンスオブジェクト: preview_protection, build_log, build_log_lines
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいdpl-で始まるデプロイ名です。
tailクエリinteger, min 1, max 5000いいえビルドログの末尾から何行表示するかです。既定は200行です。
waitクエリinteger, min 0, max 120いいえビルドが終わる(ready・error)まで待つ秒数です。既定の0はすぐに応答します。時間内に終わらなければ still_running: true と retry_after_seconds が返ります。MCP クライアントはたいてい60秒ほどで呼び出しをあきらめるので、45程度が安全です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID?tail=1&wait=0" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployments/ID?tail=1&wait=0', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/branch-previews

ブランチプレビュー このプロジェクトの組織で、本番ブランチ以外へのプッシュでプレビューをビルドするかを表示します(branch_previews)。false なら本番ブランチ (通常は main) に入ったものだけをビルドします。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_branch_previews
レスポンスオブジェクト: ref, organization, branch_previews
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branch-previews" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branch-previews', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/branch-previews

ブランチプレビューの変更 組織全体で、ブランチへのプッシュごとにプレビューをビルドするかを決めます。false なら本番ブランチ (通常は main) に入ったものだけをビルドし、スキップしたプッシュはデプロイ履歴にスキップとして残ります。再デプロイ、直接アップロードしたデプロイ、デプロイフックは通常どおりビルドします。この組織のすべてのプロジェクトに適用されます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールteam.manage オーナーまたは管理者
MCP ツールset_branch_previews
本文の上限256 KiB
レスポンスオブジェクト: ref, organization, branch_previews, note
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
enabled本文booleanはいtrue ならブランチへのプッシュごとにプレビューをビルドします。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branch-previews" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branch-previews', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/preview-protection

プレビューの保護 プロダクション以外のデプロイ(ブランチのプレビュー、デプロイごとのアドレス)を誰が開けるかを表示します: off、members(組織のメンバーのみ)、password。保護するアドレス(scope)、サインインなしで通す IP(trusted_ips)、確認せずに通すパス(options_paths)、バイパスキー(bypass_secrets、値は末尾4文字のみ)、共有リンク(share_links)も返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_preview_protection
レスポンスオブジェクト: ref, mode, has_password
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/preview-protection" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/preview-protection', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/preview-protection

プレビューの保護の変更 プレビューを開ける人を変更します。membersはコンソールにログインした組織のメンバー、passwordは共有のパスワード1つ(初回は8文字以上のパスワードが必要)、offは誰でもです。プロダクションのアドレスと接続済みのドメインは常に公開です。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_preview_protection
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
mode本文string, off | members | passwordはいoff、members、passwordのいずれかです。
password本文stringいいえmodeがpasswordのときです。空なら設定済みのパスワードを保ちます。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/preview-protection" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"mode":"off"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/preview-protection', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "mode": "off"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/apps

接続済みリポジトリとビルド設定 このプロジェクトにデプロイするリポジトリごとに、プロダクションブランチ、ビルドするフォルダー(root_directory)、フレームワークプリセット(framework。nullなら自動検出)と、ビルドコマンド・出力ディレクトリ・インストールコマンドの上書き(build_command、output_directory、install_command。nullならプリセットの既定値)を表示します。detected_frameworkは最新のビルドが使ったフレームワーク、frameworksは選べるプリセットの一覧です。リポジトリは最初のpushで表示されます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_apps
レスポンスオブジェクト: ref, apps, frameworks
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/apps" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/apps', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/apps/{name}

アプリの削除 プロジェクトのアプリ1つを削除します(モノレポでフォルダーをなくしたアプリ)。アドレスはすぐに応答しなくなり、進行中のビルドは取り消され、デプロイは復元できない形で削除され、ファイルは数分以内に消えます。リポジトリにフォルダーが残っていても、プッシュで再びビルドしません。元に戻せません。プロジェクトの既定のサイト、ドメインがつながったアプリ、ディスクのあるアプリは断り、先にすることを伝えます。ユーザーがはっきり求めたときだけ使い、confirmにアプリ名をそのまま入れてください。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールdelete_app
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいlist_appsのname。
confirm本文stringはいアプリ名。nameとまったく同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/apps/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/apps/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/apps/{name}

ビルド設定の変更 リポジトリ1つのプロダクションブランチ、ビルドするフォルダー、フレームワークプリセット、ビルドコマンド・出力ディレクトリ・インストールコマンドを変更します。モノレポの場合は、アプリのフォルダー(例: apps/web)をroot_directoryに指定してください。指定しなかった値はそのまま残り、nullを指定すると自動検出(プリセットの既定値)に戻ります。コマンドに空文字列を指定すると、その手順を飛ばします。リポジトリのblackwall.jsonに同じ項目があれば、そちらが優先されます。次のデプロイから反映されます。ただしport(サーバーが待ち受けるポート)は1分以内にサーバーを再起動して反映します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールupdate_app
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいlist_appsの名前です。
production_branch本文stringいいえプロダクションにデプロイするブランチです。
root_directory本文stringいいえリポジトリからの相対パスです。リポジトリ全体なら"."です。
run_as本文string, platform | imageいいえサーバーを誰として実行するかです。platform(既定)は一般ユーザー(10001)、image はイメージが指定するユーザー(root を含む)で gVisor の分離環境の中で実行します。公式 WordPress イメージのように root で起動する必要がある Dockerfile アプリにだけ image を使ってください。再ビルドなしで1分以内にサーバーが再起動します。
port本文string, min 1, max 65535いいえサーバーがコンテナ内で待ち受けるポートです。nullならイメージのEXPOSE、なければ3000です。変更すると1分以内にサーバーが再起動します(再デプロイは不要です)。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/apps/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"production_branch":"main","root_directory":".","run_as":"platform","port":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/apps/my-name', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "production_branch": "main",
    "root_directory": ".",
    "run_as": "platform",
    "port": "value"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/env

環境変数 デプロイしたアプリがビルドと実行時に受け取る環境変数です。同じ名前をプロダクションとプレビューで別々に持てます。機密の値は返さず、末尾4文字だけがvalue_hintとして返ります。readableがfalseの場合は値を開けずビルドからも除かれるため、もう一度保存してください。automaticは保存しなくても入る自動で入る変数です: SUPABASE_URL、NEXT_PUBLIC_SUPABASE_URL、SUPABASE_ANON_KEY、NEXT_PUBLIC_SUPABASE_ANON_KEY、NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY、SUPABASE_SERVICE_ROLE_KEY。Supabaseから移したアプリがすでに読んでいる名前です。available_inは入る場所です: 公開の値はビルドと実行時(build, runtime)、SUPABASE_SERVICE_ROLE_KEYは実行時のみ(runtime: サーバー・ミドルウェア・関数)で、ビルドには入りません。同じ名前で保存した変数が優先され、保存した値はビルドにも入ります(overridden_in)。

名前説明
トークンのスコープread
ロールsecrets.read オーナーまたは管理者または開発者
MCP ツールlist_env_vars
レスポンスオブジェクト: ref, automatic, variables, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/env" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/env', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/env

環境変数の保存 環境変数を1つ以上保存します。variablesで1つずつ指定するか、dotenvに.envファイルの内容を丸ごと渡せます。同じ名前があれば上書きします。1つでも不正なものがあれば、何も保存しません。ただし dotenv のうちプラットフォームが設定する名前の行は飛ばし、skipped で知らせます。PORT、HOST、HOSTNAME、HOME とBLACKWALL_で始まる名前はプラットフォームが使うため設定できません。ビルドにはCI=1が入りますが、CIを自分で設定すると(CI=falseなど)その値を使います。変更した値は次のデプロイからビルドに使われます。sensitiveを指定しないと、シークレットらしい名前(API_KEY、STRIPE_SECRET、DATABASE_URLなど)は機密の値として保存し、再び読めなくなります(sensitive_keys)。プロダクションの値はオーナーと管理者のみ変更できます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_env_vars
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
variables本文array<object>いいえ{ key, value } のリストです。
dotenv本文stringいいえ.envファイルの内容です。コメントと空行は読み飛ばします。
targets本文array<string>, production | preview | development, min items 1はいpreviewは、プロダクションブランチ以外のすべてのブランチのデプロイを意味します。
sensitive本文booleanいいえtrueなら保存後に値を再び読めなくなります。指定しないと、名前にSECRET、TOKEN、PASSWORD、PRIVATE、DSN、DATABASE_URL、KEY_を含むか_KEYで終わる変数だけを機密の値として保存します。falseならすべて読める状態のままです。
app本文stringいいえそのアプリだけに保存するときのアプリ名(list_appsのname)です。同じ名前のプロジェクト変数より優先します。空の場合はプロジェクトのすべてのアプリです。
branch本文string, max length 200いいえそのgitブランチのプレビューだけに保存するときのブランチ名です。targetsはpreviewのみにしてください。appと一緒に使うと、そのアプリのそのブランチだけに入ります。空の場合はすべてのプレビューです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/env" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"targets":["production"]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/env', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "targets": [
      "production"
    ]
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/env/{target}/{key}

環境変数の削除 プロダクションかプレビューのどちらか一方から環境変数を1つ削除します。機密の値だった場合は復元できません。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_env_var
レスポンスオブジェクト: key, target, app, branch, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
targetパスstring, production | preview | developmentはいproductionまたはpreviewです。
keyパスstringはい変数名です。
appクエリstringいいえ1つのアプリだけに保存した変数を削除するときのアプリ名です。空の場合はプロジェクトの変数です。
branchクエリstring, max length 200いいえ1つのブランチのプレビューだけに保存した変数を削除するときのブランチ名です(list_env_varsのbranch)。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/env/production/API_URL?app=owner%2Frepo&branch=main" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/env/production/API_URL?app=owner%2Frepo&branch=main', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/git

Git 接続 コンソールの「Git 接続」と同じです。このプロジェクトがデプロイするリポジトリ(connected: プッシュでデプロイするか)、接続した GitHub アカウント(github_accounts)、非公開リポジトリの取得方法(GitHubまたはGitLabトークンの末尾4文字、GitHub Appのインストール)を表示します。非公開リポジトリのビルドが取得の段階で失敗する場合は、まずここを見てください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_git_access
レスポンスオブジェクト: ref, access, repositories
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/git/tokens/{provider}

リポジトリトークンの保存 非公開リポジトリの取得に使うアクセストークンを保存します(読み取り権限で十分です)。封印され、二度と表示されません。セルフホストのGitLabなら、gitlab_baseにhttps://gitlab.example.comを指定してください。次のビルドから使われます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_repo_token
本文の上限256 KiB
レスポンスオブジェクト: ref, provider, saved, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
providerパスstring, github | gitlab | bitbucketはいgithubまたはgitlabです。
token本文stringはいアクセストークンです。読み取り権限で十分です。
gitlab_base本文stringいいえセルフホストのGitLabのアドレスです。gitlab.comなら空にします。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/tokens/github" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"token":"ghp_xxxxxxxxxxxxxxxxxxxx"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/tokens/github', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "token": "ghp_xxxxxxxxxxxxxxxxxxxx"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/git/tokens/{provider}

リポジトリトークンの削除 保存したトークンを削除します。接続済みのGitHub Appのインストールは残ります。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールremove_repo_token
レスポンスオブジェクト: ref, provider, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
providerパスstring, github | gitlab | bitbucketはいgithubまたはgitlabです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/tokens/github" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/tokens/github', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/git/repos

リポジトリの追加 最初のpushの前に、リポジトリをこのプロジェクトに紐付けます。以後GitHub Appを通じたpushはこのプロジェクトに届き、create_deploy_hookでpushなしにビルドできます。repoはGitHubならowner/name、GitLabならgroup/nameです。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールadd_repository
本文の上限256 KiB
レスポンスオブジェクト: ref, access, repositories
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
provider本文string, github | gitlab | bitbucketはいgithubまたはgitlabです。
repo本文stringはいGitHubならowner/name、GitLabならgroup/nameです。
branch本文stringいいえプロダクションブランチです。空ならmainです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/repos" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"provider":"github","repo":"owner/repo"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/repos', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "provider": "github",
    "repo": "owner/repo"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/git/github-app

GitHub アカウントの接続解除 このプロジェクトと GitHub アカウント(GitHub App のインストール)の接続を解除します。installation を指定するとそのアカウントだけ、空ならすべてです。保存したトークンと GitHub の App のインストールは残ります。接続には GitHub 上で人が承認する必要があるため、接続はコンソールでのみ行えます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールunlink_github_app
レスポンスオブジェクト: ref, unlinked
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/github-app" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/github-app', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/git/github-app/{installation}

GitHub アカウントの接続解除 このプロジェクトと GitHub アカウント(GitHub App のインストール)の接続を解除します。installation を指定するとそのアカウントだけ、空ならすべてです。保存したトークンと GitHub の App のインストールは残ります。接続には GitHub 上で人が承認する必要があるため、接続はコンソールでのみ行えます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールunlink_github_app
レスポンスオブジェクト: ref, unlinked
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
installationパスintegerはいlist_git_access の github_accounts[].installation_id です。空ならすべてです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/github-app/value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/github-app/value', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/git/importable

インポートするリポジトリを探す コンソールの Git 接続 → リポジトリのインポート一覧と同じです。接続した GitHub アカウントの GitHub App が見られるリポジトリを、最近プッシュした順に50個まで表示します。query を指定すると、300個を超えるインストールでもすべてから探します。GitHub でリポジトリを追加したばかりなら refresh: true。アカウントが複数あれば installation で選びます(list_git_access の github_accounts)。オーナーと管理者のみ見られます。

名前説明
トークンのスコープread
ロールproject.admin オーナーまたは管理者
MCP ツールlist_importable_repositories
レスポンスオブジェクト: ref, github_account, installation_id, other_accounts, repositories, shown, matched, total, searched, add_repositories_url, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
queryクエリstringいいえリポジトリ名の一部です。空なら最近プッシュした順です。
installationクエリintegerいいえどの GitHub アカウントのインストールかです。空なら既定のアカウントです。
refreshクエリbooleanいいえGitHub にもう一度問い合わせます(1分のキャッシュを飛ばします)。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/importable?query=value&installation=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/importable?query=value&installation=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/git/import

リポジトリのインポート コンソールの [接続してデプロイ] と同じです。GitHub App が見られるリポジトリをこのプロジェクトに接続し、プロダクションブランチの最新コミットで最初のデプロイをすぐ始めます。branch が空ならリポジトリの既定ブランチです。ビルド設定(framework など)と環境変数(dotenv に .env の内容)を最初のビルドの前に保存します。接続を解除したリポジトリをもう一度インポートすると、設定のまま接続し直します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールimport_repository
本文の上限256 KiB
レスポンスオブジェクト: ref, app, repo, branch, github_account, deployment, status, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
repo本文stringいいえowner/name です。list_importable_repositories の repo です。
branch本文stringいいえプロダクションブランチです。空ならリポジトリの既定ブランチです。
root_directory本文stringいいえモノレポのアプリフォルダ(例: apps/web)です。空ならリポジトリの最上位です。接続済みのリポジトリで別のフォルダを指定すると新しいアプリとして追加します。
installation本文integerいいえどの GitHub アカウントのインストールで取得するかです。空ならリポジトリの持ち主のアカウントです。
dotenv本文stringいいえ.env ファイルの内容です。プロダクションとプレビューの両方に保存します。
sensitive本文booleanいいえdotenv の値を保存したあと二度と表示しません。
app本文stringいいえアプリ名(コンソールの「アプリ名」)です。空ならフォルダ名、なければリポジトリ名です。同じ名前のアプリがあればその設定を変えます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/import" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"repo":"owner/repo","branch":"main","root_directory":".","installation":1,"dotenv":"API_URL=https://example.com","sensitive":true,"app":"owner/repo"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/import', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "repo": "owner/repo",
    "branch": "main",
    "root_directory": ".",
    "installation": 1,
    "dotenv": "API_URL=https://example.com",
    "sensitive": true,
    "app": "owner/repo"
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/git/checks/{repo}/{repo}

チェックを One Server で実行 接続した GitHub リポジトリの GitHub Actions のチェックを One Server のマシンで実行するかを切り替えます。コンソールの Git 接続 → [チェックを One Server で実行] と同じです。オンにするとリポジトリ変数 POOL_RUNNER を保存し、ジョブが runs-on: ${{ vars.POOL_RUNNER || 'ubuntu-latest' }} を使うと One Server で動きます。オフにすると変数を削除し、GitHub のマシンに戻ります。state が needs_permission なら、permission_url で GitHub App の新しい権限を承認すると自動でオンになります。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_checks_on_server
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
repoパスstringはいlist_git_access の repositories[].repo(owner/name)です。
repoパスstringはいlist_git_access の repositories[].repo(owner/name)です。
enabled本文booleanはいtrue でオン、false でオフです。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/checks/owner%2Frepo/owner%2Frepo" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/checks/owner%2Frepo/owner%2Frepo', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/git/repos/{name}

リポジトリの接続解除 コンソールの Git 接続 → リポジトリの [接続を解除] と同じです。このリポジトリにプッシュしてもデプロイしなくなります。公開中のデプロイ、履歴、ビルド設定、環境変数はそのままで、import_repository で同じリポジトリをインポートすると接続し直します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールdisconnect_repository
レスポンスオブジェクト: ref, name, repo, connected, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいlist_git_access の repositories[].name です。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/repos/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/git/repos/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/volumes

ボリューム一覧 アプリのボリューム(サーバーを再起動しても、新しくデプロイしても残るディスク)とバックアップ、プランが許す合計(max_gb)と今の使用量(used_gb)、アプリごとにサーバーが待ち受けるポート(apps[].listens_on)を返します。ボリュームは本番サーバーにだけ付きます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_volumes
レスポンスオブジェクト: ref, max_gb, used_gb, volumes
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/volumes

ボリュームを作成 アプリの本番サーバーにボリュームを付けます。コンテナの mount_path に読み書きできる形で付き、容量が上限です。WordPress なら /var/www/html です。/etc・/usr・/proc・/tmp などのシステムパスには付けられません。1分以内に準備でき、サーバーが再起動します。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールcreate_volume
本文の上限256 KiB
レスポンスオブジェクト: ref, volume, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
app本文stringはいlist_apps の name。
mount_path本文stringはいコンテナ内の絶対パス。例: /var/www/html
size_gb本文integer, min 1, max 500いいえ容量(GB)。1 から 500 まで、既定は 1。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"app":"owner/repo","mount_path":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "app": "owner/repo",
    "mount_path": "value"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/volumes/{id}

ボリュームを拡張 サーバーを止めずにボリュームを大きくします。小さくすることはできません。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールresize_volume
本文の上限256 KiB
レスポンスオブジェクト: ref, volume, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_volumes のボリューム id。
size_gb本文integer, min 1, max 500はい容量(GB)。1 から 500 まで。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"size_gb":1}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes/ID', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "size_gb": 1
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/volumes/{id}

ボリュームを削除 ボリュームとその中のファイル、ボリュームのバックアップをすべて削除します。本番サーバーはボリュームなしで再起動します。元に戻せないので、ユーザーがはっきり求めたときだけ使い、confirm にボリュームのパス(mount_path)をそのまま入れてください。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールdelete_volume
本文の上限256 KiB
レスポンスオブジェクト: ref, volume, deleted, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_volumes のボリューム id。
confirm本文stringはいボリュームのパス。list_volumes の mount_path と完全に同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/volumes/{id}/backups

ボリュームをバックアップ ボリュームのファイルを今まとめて 30 日間保管します。数分以内に終わり、list_volumes の backups に表示されます。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールcreate_volume_backup
レスポンスオブジェクト: ref, volume_id, backup, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_volumes のボリューム id。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes/ID/backups" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes/ID/backups', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/volumes/{id}/restore

ボリュームを復元 ボリュームの今のファイルをバックアップのファイルに置き換えます。バックアップの後に変わったファイルはなくなりますが、置き換える前に今のファイルを 7 日間バックアップしておくので、そのバックアップで元に戻せます。ユーザーが求めたときだけ使ってください。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrestore_volume_backup
本文の上限256 KiB
レスポンスオブジェクト: ref, volume, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_volumes のボリューム id。
backup_id本文stringはいlist_volumes の backups[].id のうち、status が ready のもの。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes/ID/restore" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"backup_id":"BACKUP_ID"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/volumes/ID/restore', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "backup_id": "BACKUP_ID"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/server-memory

サーバーメモリ このプロジェクトのサーバーデプロイが使うメモリ(MB)と CPU 数、プランの上限、1GB・時間あたりの料金と、1か月動かし続けたときの金額です。本番とブランチのアドレスのサーバーはリクエストがなくても常に動いている(最小インスタンス 1)ため、その金額がサーバー 1 つの 1 か月の料金です。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_server_memory
レスポンスオブジェクト: ref, server_memory_mb, cpus, max_server_memory_mb, sizes
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server-memory" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server-memory', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/server-memory

サーバーメモリの変更 このプロジェクトのサーバーデプロイ(Node サーバー、ワーカー)が使うメモリを 512・1024・2048・4096MB から選びます。1024MB を超えると CPU は2つです。使った分は runtime_gb_hour で計量されます。1分以内に新しいサイズで再起動します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_server_memory
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
memory_mb本文integer, 512 | 1024 | 2048 | 4096はいメモリ(MB): 512、1024、2048、4096 のいずれか。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server-memory" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"memory_mb":512}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server-memory', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "memory_mb": 512
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/gpu

GPU ジョブとサーバー このプロジェクトの GPU ジョブ(最新50件)、GPU サーバー、GPU ストレージ、マシンごとの1時間料金とストレージ1GB・月の料金、選べる地域とデータセンター、組織が同時に使える GPU の数と今使っている数を返します。無料プランでは GPU を使えません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_gpu
レスポンスオブジェクト: ref, prices, max_gpus, in_use, jobs, servers, volumes, volume_price, max_volume_gb, volume_gb, regions, datacenters
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/gpu/jobs

GPU ジョブを作る GPU を借りて、公開コンテナイメージでコマンドを最後まで実行します(学習、一括処理)。コマンドが終わるか max_minutes を過ぎると GPU を返し、使った秒数をマシンごとの時間料金で請求します。結果はプロジェクトのストレージなど外部に保存しないと残りません。イメージには開始と終了を知らせるため curl、wget、python3 のいずれかが必要です。イメージの取得も GPU の使用時間なので請求され、max_minutes にも含まれます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_gpu_job
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
gpu本文string, rtx4090 | l40s | a100 | h100はいrtx4090、l40s、a100、h100 のいずれか
image本文stringはい公開イメージ。例: pytorch/pytorch:2.4.0-cuda12.1-cudnn9-runtime
command本文stringはいsh で実行するコマンド
name本文stringいいえ名前
env本文objectいいえ環境変数。封印して保管します
max_minutes本文integer, min 1, max 10080いいえ既定は60分
region本文string, auto | asia | us | euいいえ借りる地域。既定は auto(空きマシンがあるところならどこでも)。asia は日本・インドです。ストレージを選ぶと、そのストレージのデータセンターで借ります。
volume本文stringいいえ/workspace に付ける GPU ストレージの名前(create_gpu_volume で作ったもの)
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/jobs" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"gpu":"rtx4090","image":"value","command":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/jobs', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "gpu": "rtx4090",
    "image": "value",
    "command": "value"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/gpu/jobs/{id}

GPU ジョブを見る GPU ジョブ1件の状態、使った時間と金額、終了コード、出力の最後の部分(最大64KB)を返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_gpu_job
レスポンスオブジェクト: id, name, gpu, image, command, max_minutes, status, created_at, started_at, ended_at, seconds, cost_minor, exit_code, error, region, volume
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいジョブ ID
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/jobs/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/jobs/ID', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/gpu/jobs/{id}/cancel

GPU ジョブを止める GPU ジョブを止めます。開始前なら開始せず、実行中なら GPU を返します。返すまでの時間は請求されます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcancel_gpu_job
レスポンスオブジェクト: id, name, gpu, image, command, max_minutes, status, created_at, started_at, ended_at, seconds, cost_minor, exit_code, error, region, volume
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいジョブ ID
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/jobs/ID/cancel" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/jobs/ID/cancel', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/gpu/servers

GPU サーバーを作る 公開イメージでモデルを動かしておく GPU サーバーを作ります。https://<ref>.<zone>/gpu/v1/servers/<name>/ を secret キーで呼ぶと、止まっていれば起動し(その間は503)、リクエストを渡します。idle_minutes の間リクエストがなければ止めます(0は動かし続けます)。起動を始めた時点から止まるまで、イメージの取得時間も含めて秒単位で請求します。サーバーには x-oneend-gpu-token ヘッダーと同じ値が ONEEND_GPU_TOKEN で渡ります。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_gpu_server
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文stringはい英小文字、数字、ハイフン
gpu本文string, rtx4090 | l40s | a100 | h100はいrtx4090、l40s、a100、h100 のいずれか
image本文stringはい公開イメージ。例: vllm/vllm-openai:latest
command本文stringいいえ空ならイメージ既定のコマンド
env本文objectいいえ環境変数。封印して保管します
port本文integer, min 1, max 65535いいえ既定は8000
idle_minutes本文integer, min 0, max 1440いいえ既定は15分、0は動かし続けます
region本文string, auto | asia | us | euいいえ借りる地域。既定は auto(空きマシンがあるところならどこでも)。asia は日本・インドです。ストレージを選ぶと、そのストレージのデータセンターで借ります。
volume本文stringいいえ/workspace に付ける GPU ストレージの名前(create_gpu_volume で作ったもの)
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/servers" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","gpu":"rtx4090","image":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/servers', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "gpu": "rtx4090",
    "image": "value"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/gpu/servers/{name}/stop

GPU サーバーを止める GPU サーバーを今止めます。止まるまでの時間は請求します。次のリクエストでまた起動します。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールstop_gpu_server
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいサーバー名
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/servers/my-name/stop" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/servers/my-name/stop', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/gpu/servers/{name}

GPU サーバーを削除する GPU サーバーを削除します。動いていれば先に止めてから削除します。元に戻せないので、confirm に GPU サーバー名をそのまま入れてください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールdelete_gpu_server
本文の上限256 KiB
レスポンスオブジェクト: ref, name, deleted
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいサーバー名
confirm本文stringはいGPU サーバー名です。nameと完全に同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/servers/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/servers/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/gpu/volumes

GPU ストレージを作る モデルとデータを残しておく GPU ストレージを1つのデータセンターに作ります。ジョブやサーバーに volume として名前を渡すと /workspace に付き、毎回ダウンロードし直さずに済みます。ストレージがある間は、使っても使わなくても1GB・月の料金で請求します。そのストレージを使うジョブとサーバーは、そのデータセンターでしか GPU を借りられません。無料プランでは使えません。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_gpu_volume
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文stringはい英小文字、数字、ハイフン
size_gb本文integer, min 10, max 4000いいえ既定は50GB
datacenter本文stringはいデータセンター。例: AP-JP-1(日本)。一覧は list_gpu にあります
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/volumes" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","datacenter":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/volumes', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "datacenter": "value"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/gpu/volumes/{name}

GPU ストレージを削除する GPU ストレージとその中のファイルをすべて削除します。使っているジョブやサーバーがあれば削除しません。元に戻せません。削除するまでの保存料金は請求します。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールdelete_gpu_volume
レスポンスオブジェクト: ref, name, deleted, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいストレージ名
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/volumes/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/gpu/volumes/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/concurrent-builds

同時ビルド このプロジェクトのビルドを同時にいくつまで動かすかです。null ならビルダーが許すだけ動きます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_concurrent_builds
レスポンスオブジェクト: ref, concurrent_builds, max
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/concurrent-builds" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/concurrent-builds', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/concurrent-builds

同時ビルドの変更 このプロジェクトのビルドを同時にいくつまで動かすかを 1〜20 で決めるか、null で上限をなくします。超えたビルドはキューで待ち、前のビルドが終わると始まります。待っているあいだはビルド時間が請求されません。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_concurrent_builds
本文の上限256 KiB
レスポンスオブジェクト: ref, concurrent_builds, max, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
concurrent_builds本文string, min 1, max 20はい1〜20 の整数、または上限なしの null。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/concurrent-builds" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"concurrent_builds":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/concurrent-builds', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "concurrent_builds": "value"
  }),
})
const result = await response.json()

関数

メソッドパス説明
GET/projects/{ref}/functions関数
GET/projects/{ref}/functions/{name}関数のコードを読む
PUT/projects/{ref}/functions/{name}関数のデプロイ
PATCH/projects/{ref}/functions/{name}関数の時間制限
DELETE/projects/{ref}/functions/{name}関数の削除
PUT/projects/{ref}/function-egress関数の外部リクエスト
GET/projects/{ref}/function-secrets関数シークレットの一覧
POST/projects/{ref}/function-secrets関数シークレットの保存
POST/projects/{ref}/function-secrets/copy関数シークレットのコピー
DELETE/projects/{ref}/function-secrets/{name}関数シークレットの削除

GET /api/v1/projects/{ref}/functions

関数 デプロイされた関数を、それぞれの呼び出しアドレスと公開かどうかとともに表示します。egressは外部リクエストがオンかどうか、outbound_requests_per_minuteは関数・pg_net・HTTPジョブが共有する1分あたりの外部リクエストの上限です(自分のAPIへの呼び出しは数えません)。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_functions
レスポンスオブジェクト: ref, functions
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/functions" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/functions', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/functions/{name}

関数のコードを読む デプロイされた関数のコードとバージョンを表示します。変更する前に、今のコードを読んでください。deploy_function が status "building" で応答したときは、build.status(building・deployed・failed)と build.error で結果を確認します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_function
レスポンスオブジェクト: ref, name, status, public, version, url, updated_at, bundled, bytes
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはい関数名です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/functions/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/functions/my-name', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/functions/{name}

関数のデプロイ 関数を1つデプロイします。同じ名前の関数があれば丸ごと置き換え、次の呼び出しから新しいコードが動きます。 コードはTypeScriptファイル1つで、export defaultで (request, { sql }) => 応答 をエクスポートします。 requestにはmethod、headers、claims(呼び出したキーのクレーム。roleはanon・authenticated・service_role。キーなしで呼んだ公開関数ではnull)、text()、json()があります。 sql(text, values)はこのプロジェクトのservice_role権限でSQL文を1つ実行し、行の配列を返します。 応答はオブジェクト(JSONとして送信)、文字列、または { status, headers, body } です。 npmパッケージを使うには、dependencies({"zod":"^3.23.8"})またはpackage_json(文字列)を一緒に送ってください。 デプロイ時にインストールし、コードと一緒に1つのESMファイルにまとめます(最大5MB、インストールスクリプトは実行しません、ネイティブモジュールは使えません)。一度インストールしたパッケージの組み合わせは再利用するので、2回目からのデプロイは数秒で終わります。 40秒以内に終わらないときは、すぐに status "building" で応答し、サーバーでデプロイを続けます。そのときは get_function をもう一度呼び、build.status が deployed か failed になるまで確認してください。 複数のファイルはfiles({"lib/util.ts": "..."})で一緒に送り、相対パスでimportします。フォルダーを丸ごと送るには、sourceを空にしてindex.tsを含むすべてをfilesに入れます。 Supabaseと同じように、deno.json(またはimport_map.json)のimportsとnpm:・jsr:・URLのimport(例: npm:zod@3、jsr:@supabase/supabase-js@2、https://esm.sh/…、https://deno.land/[email protected]/http/server.ts)を使えます。npm:・jsr:・esm.shはデプロイ時にnpmパッケージとしてインストールし、それ以外のURLはデプロイ時に一度だけ取得してコードと一緒にまとめます(取得したアドレスとSHA-256はget_functionのremote_importsにあり、deno.lockがあればそのハッシュと一致する必要があります)。実行中には何も取得しません。 Supabaseのsupabase/functions/<名前>/フォルダーのように../_shared/cors.tsをimportするときは、filesに"../_shared/cors.ts"として一緒に入れてください。関数フォルダーの隣のフォルダーまでです。 1回の呼び出しは150秒まで実行できます(Supabaseと同じ)。変えるにはset_function_limitsを使ってください。 呼び出した人のAuthorizationヘッダー(このプロジェクトのキーの場合)がそのまま関数に届くので、createClient(url, anonKey, { global: { headers: { Authorization: req.headers.get('Authorization') } } })がその人として動作します。 バンドルされた関数を変更するときは、get_functionが返したpackage_jsonとfilesをそのまま送り直してください。省くとファイル1つだけの関数になります。 ネットワークは既定で無効で、set_function_egressで有効にできます。 プロダクションの環境変数がprocess.envに入ります。関数のデプロイはオーナーと管理者のみ行えます。 呼び出せる人: 非公開(既定)の関数には、このプロジェクトのキーが必要です: 公開キー(claims.role anon)、ログインしたユーザーのトークン(authenticated)、シークレットキー(service_role)。Supabaseのverify_jwtと同じなので、supabase.functions.invokeと公開キーを付けたfetchはそのまま動きます。ログインしたユーザーだけを受け付けるには、関数の中でrequest.claims.roleを確認してください。 publicをtrueにすると、キーなしでも誰でも呼び出せます。決済事業者のWebhookのように、キーなしで届くリクエストにだけ使ってください。 呼び出し: POST https://<ref>.<zone>/functions/v1/<name>、ヘッダーAuthorization: Bearer <公開キー、ユーザートークンまたはシークレットキー>。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールdeploy_function
本文の上限4096 KiB
レスポンスオブジェクト: ref, name, status, version, public, url, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413 · 429
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはい英小文字で始まり、英小文字、数字、ハイフンで構成します。呼び出しアドレスの末尾になります。
source本文stringいいえ関数のコード全体です(8MBまで)。filesがあるとentryのファイルとして保存されます。filesにentryがあれば省略します。
public本文booleanいいえ省略すると今の値を保ちます。新しい関数は非公開です。
package_json本文stringいいえpackage.json全体です(任意)。あるとインストール後に1つのファイルにバンドルします。
package_lock本文stringいいえpackage-lock.jsonです(任意)。あるとnpm ciでそのバージョンを正確にインストールします。
dependencies本文objectいいえ使うnpmパッケージとバージョンです。例: {"zod": "^3.23.8"}。package_jsonのdependenciesに統合されます。
files本文objectいいえsourceの隣に置くほかのファイルです。相対パスから内容への対応です(最大200個、合計8MB)。関数フォルダーの隣のフォルダーは"../_shared/cors.ts"のように書きます。
entry本文stringいいえsourceを保存するファイル名です。既定はindex.tsです。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/functions/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"source":"export default async () => new Response(\"ok\")","public":true,"package_json":"value","package_lock":"value","dependencies":{},"files":{},"entry":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/functions/my-name', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "source": "export default async () => new Response(\"ok\")",
    "public": true,
    "package_json": "value",
    "package_lock": "value",
    "dependencies": {},
    "files": {},
    "entry": "value"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/functions/{name}

関数の時間制限 再デプロイせずに、関数の 1 回の呼び出しにかけられる時間(timeout_seconds)と SQL 1 文にかけられる時間(sql_timeout_seconds)を秒で設定します。既定は 150 秒(Supabase のエッジ関数と同じ)と 8 秒で、このサーバーの最大は get_function の timeout_cap_seconds です。null で既定値に戻り、省略すると今の値のままです。次の呼び出しから適用されます。制限を超えた呼び出しは 504 で打ち切られます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_function_limits
本文の上限256 KiB
レスポンスオブジェクト: ref, name
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413 · 429
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはい関数名。
public本文booleanいいえ
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/functions/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"public":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/functions/my-name', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "public": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/functions/{name}

関数の削除 関数を削除します。そのアドレスは404を返し、その関数を呼び出す予約ジョブは失敗します。元に戻せないので、ユーザーがはっきり求めたときだけ使い、confirm に関数名をそのまま入れてください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_function
本文の上限256 KiB
レスポンスオブジェクト: ref, name, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413 · 429
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはい関数名です。
confirm本文stringはい関数名です。nameと完全に同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/functions/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/functions/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/function-egress

関数の外部リクエスト 関数がfetch()で公開されたHTTPSアドレスを呼び出すことを許可またはブロックします。今の状態はlist_functionsのegressです。30秒以内に反映されます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_function_egress
本文の上限256 KiB
レスポンスオブジェクト: ref, egress, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
enabled本文booleanはいtrueで外部リクエストを許可、falseでブロックします。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/function-egress" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/function-egress', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/function-secrets

関数シークレットの一覧 関数だけが見るシークレットの名前と変更日時です。値はどのツールでも読み返せません。readable が false の値は開けないため関数に入りません。もう一度保存してください。表示できるのはオーナーと管理者のみです。

名前説明
トークンのスコープread
ロールproject.admin オーナーまたは管理者
MCP ツールlist_function_secrets
レスポンスオブジェクト: ref, secrets
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/function-secrets" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/function-secrets', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/function-secrets

関数シークレットの保存 関数だけが見るシークレットを1つ以上保存します(Webhook の署名キー、メールサービスの API キーなど)。サイトのビルドには入らず、同じ名前の環境変数より優先されます。関数は次の呼び出しから process.env で読みます。同じ名前があれば上書きし、1つでも誤りがあれば何も保存しません。保存した値は読み返せず、応答には名前だけが返ります。SUPABASE_ と BLACKWALL で始まる名前、NODE_ENV・HOME・PATH・NODE_OPTIONS・TZ は使えません。1プロジェクト100個、値1つ32KBまでです。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_function_secrets
本文の上限256 KiB
レスポンスオブジェクト: ref, saved, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
secrets本文objectいいえ名前と値です。例: {"STRIPE_WEBHOOK_SECRET": "whsec_…"}。値は二度と表示しません。
dotenv本文stringいいえ.env ファイルの内容をまるごと。コメントと空行は読み飛ばします。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/function-secrets" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"secrets":{},"dotenv":"API_URL=https://example.com"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/function-secrets', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "secrets": {},
    "dotenv": "API_URL=https://example.com"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/function-secrets/copy

関数シークレットのコピー 自分の別のプロジェクト(from)にある関数シークレットを、名前を指定してこのプロジェクト(ref)にコピーします。値はサーバーの中だけで移り、応答には名前だけが返るので、同じキーを貼り直す必要はありません。このプロジェクトにすでにある名前はスキップし(skipped)、overwrite が true なら置き換えます。from にない名前は missing で知らせ、残りはコピーします。一度に50個までです。両方のプロジェクトでオーナーか管理者である必要があります(組織が違っても構いません)。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールcopy_function_secrets
本文の上限256 KiB
レスポンスオブジェクト: ref, from, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
from本文stringはいコピー元プロジェクトの ref です。list_projects で確認できます。
names本文array<string>, min items 1, max items 50はいコピーするシークレット名です。from プロジェクトの list_function_secrets の name。例: ["ANTHROPIC_API_KEY"]
overwrite本文booleanいいえこのプロジェクトに同じ名前があるとき置き換えるかどうか。既定は false(スキップ)。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/function-secrets/copy" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"from":"value","names":["my-name"]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/function-secrets/copy', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "from": "value",
    "names": [
      "my-name"
    ]
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/function-secrets/{name}

関数シークレットの削除 関数シークレットを1つ削除します。値は元に戻せず、関数は次の呼び出しからこの値なしで動きます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールdelete_function_secret
レスポンスオブジェクト: ref, name, deleted
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいlist_function_secrets の name です。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/function-secrets/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/function-secrets/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

ドメインとエッジ

メソッドパス説明
GET/projects/{ref}/domainsドメイン
POST/projects/{ref}/domainsドメインの接続
DELETE/projects/{ref}/domains/{hostname}ドメインの接続解除
PUT/projects/{ref}/domains/{hostname}/redirectドメインのリダイレクト
GET/projects/{ref}/edgeファイアウォールとキャッシュ
PUT/projects/{ref}/edgeファイアウォールの変更
POST/projects/{ref}/edge/purgeキャッシュの消去
PUT/projects/{ref}/domains/{hostname}/certificate証明書のアップロード
DELETE/projects/{ref}/domains/{hostname}/certificateアップロードした証明書の削除

GET /api/v1/projects/{ref}/domains

ドメイン このプロジェクトに接続したドメインを表示します。それぞれの用途(site/api)、追従するブランチ、リダイレクト先、検証状態(未検証なら追加すべきTXTレコード)、証明書の状態が含まれます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_domains
レスポンスオブジェクト: ref, domains
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/domains

ドメインの接続 ドメインを接続します。返されたverification_record(TXT)をDNSに追加すると、数分以内に検証されます。target=apiにすると、そのアドレスはプロジェクトAPI(データ、ログイン、ストレージ)として応答します。branchを指定すると、そのブランチのプレビューに追従します。*.example.comのようなワイルドカードも使えます。pair_www=trueにするとwwwのアドレスも接続し、一方をもう一方へリダイレクトします。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールadd_domain
本文の上限256 KiB
レスポンスオブジェクト: ref, domains
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
hostname本文stringはい例: example.com、api.example.com、*.example.com
target本文string, site | apiいいえデプロイしたサイトならsite、プロジェクトAPIならapiです。
branch本文stringいいえサイトのみです。空の場合はプロダクションです。
pair_www本文booleanいいえwwwのアドレスも接続し、一方をもう一方へリダイレクトします。
app本文stringいいえアプリ名(list_appsのname)です。空の場合はプロジェクトのサイト(project_siteがtrueのアプリ)です。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"hostname":"app.example.com"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "hostname": "app.example.com"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/domains/{hostname}

ドメインの接続解除 ドメインの接続を解除します。そのアドレスは数秒以内に応答しなくなります。ユーザーがはっきり求めたときだけ使い、confirm にドメインをそのまま入れてください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_domain
本文の上限256 KiB
レスポンスオブジェクト: ref, domains
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
hostnameパスstringはい接続済みのドメインです。
confirm本文stringはいドメインです。hostnameと同じである必要があります(大文字と小文字は区別しません)。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains/app.example.com" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains/app.example.com', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/domains/{hostname}/redirect

ドメインのリダイレクト このドメインを同じプロジェクトの別のドメインへリダイレクトさせます。toを空にすると、再びサイトを配信します。toにパスを付けると(example.com/vision)、アクセスしたパスがその後ろに付き、クエリ文字列もそのまま引き継がれます: vision.example.com/x?y=1 → example.com/vision/x?y=1、トップページは example.com/vision。toのドメインは、このプロジェクトに接続した、リダイレクトではないドメインである必要があります。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_domain_redirect
本文の上限256 KiB
レスポンスオブジェクト: ref, domains
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
hostnameパスstringはいリダイレクトするドメインです。
to本文stringいいえドメイン、またはドメインとパスです(例: example.com/vision)。空にするとリダイレクトをオフにします。
status本文integer, 308 | 307 | 301 | 302いいえステータスコードです。既定は 308(恒久、メソッドを維持)。省くと今の値のままです。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains/app.example.com/redirect" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"to":"https://example.com","status":308}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains/app.example.com/redirect', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "to": "https://example.com",
    "status": 308
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/edge

ファイアウォールとキャッシュ このプロジェクトのIP拒否リストと許可リスト、1つのアドレスからの1分あたりのリクエスト上限、その適用対象、最後にキャッシュを消去した時刻を表示します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_edge
レスポンスオブジェクト: ref, deny, allow, rate_per_minute, scope, cache_purged_at
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/edge

ファイアウォールの変更 IP拒否リスト、許可リスト(空なら全員を許可)、1分あたりのリクエスト上限(10〜100000、nullならプラットフォームの既定値)、適用対象(all/site/api)を変更します。指定した項目だけが変わります。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_edge
本文の上限256 KiB
レスポンスオブジェクト: ref, deny, allow, rate_per_minute, scope, cache_purged_at
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
deny本文array<string>いいえ拒否するIPアドレスまたはCIDR範囲です。
allow本文array<string>いいえ許可するIPアドレスまたはCIDR範囲です。空なら全員を許可します。
rate_per_minute本文numberいいえ1つのアドレスからの1分あたりのリクエスト数です。10〜100000。nullならプラットフォームの既定値です。
scope本文string, all | site | apiいいえルールの適用対象です: all、site、api。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"deny":["value"],"allow":["value"],"rate_per_minute":1,"scope":"all"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "deny": [
      "value"
    ],
    "allow": [
      "value"
    ],
    "rate_per_minute": 1,
    "scope": "all"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/edge/purge

キャッシュの消去 サーバーデプロイがs-maxageで共有を許可したためにエッジに保存されている応答をすべて破棄します。次のリクエストから、デプロイが再び応答します。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールpurge_edge_cache
レスポンスオブジェクト: ref, deny, allow, rate_per_minute, scope, cache_purged_at
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge/purge" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge/purge', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/domains/{hostname}/certificate

証明書のアップロード 接続済みのドメインに独自のTLS証明書を使います。certificateはPEMのチェーン(サーバー証明書が先頭)、keyはPEMの秘密鍵です。ドメイン名が証明書に含まれている必要があります。1分以内に反映されます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールupload_certificate
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
hostnameパスstringはい接続済みのドメインです。
certificate本文stringはいPEMの証明書チェーンです。サーバー証明書が先頭です。
key本文stringはいPEMの秘密鍵です。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains/app.example.com/certificate" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"certificate":"-----BEGIN CERTIFICATE-----\n…","key":"API_URL"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains/app.example.com/certificate', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "certificate": "-----BEGIN CERTIFICATE-----\n…",
    "key": "API_URL"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/domains/{hostname}/certificate

アップロードした証明書の削除 アップロードした証明書を削除し、自動発行の証明書に戻します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールremove_certificate
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
hostnameパスstringはい接続済みのドメインです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains/app.example.com/certificate" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/domains/app.example.com/certificate', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

ネットワーク

メソッドパス説明
GET/projects/{ref}/networkネットワークアドレス
GET/projects/{ref}/network/ipsネットワークアドレス
POST/projects/{ref}/network/static-outbound-ip固定アウトバウンドIP
DELETE/projects/{ref}/network/static-outbound-ip固定アウトバウンドIP

GET /api/v1/projects/{ref}/network

ネットワークアドレス プロジェクトがリクエストを受けるアドレス(inbound、カスタムドメインのAレコード)と、固定アウトバウンドIPをオンにしたプロジェクトなら外部へ送信する固定アドレス(outbound.addresses)を返します。オンにしていないプロジェクトの送信アドレスは固定されていない共有アドレスのため返しません。許可リストには追加しないでください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_network
レスポンスオブジェクト: ref, region, inbound, outbound, static_outbound_ip, note
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/network/ips

ネットワークアドレス プロジェクトがリクエストを受けるアドレス(inbound、カスタムドメインのAレコード)と、固定アウトバウンドIPをオンにしたプロジェクトなら外部へ送信する固定アドレス(outbound.addresses)を返します。オンにしていないプロジェクトの送信アドレスは固定されていない共有アドレスのため返しません。許可リストには追加しないでください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_network
レスポンスオブジェクト: ref, region, inbound, outbound, static_outbound_ip, note
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network/ips" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network/ips', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/network/static-outbound-ip

固定アウトバウンドIP 有料オプションの固定アウトバウンドIPをオンまたはオフにします。オンにすると、サーバーデプロイ、関数のfetch()、データベースWebhookが固定アドレスから送信され、月額料金が利用期間に応じて請求されます。Pro以上のプランで、オーナー・管理者・請求担当者だけが実行できます。料金がかかるため、ユーザーがはっきり求めたときだけ使ってください。料金と今の状態はget_networkにあります。アドレスがまだないリージョンでは outcome が provisioning になります。アドレスを作成中(通常1時間以内)で、準備ができるまで料金は発生せず、アドレスも返されません。

名前説明
トークンのスコープwrite
ロールbilling.manage オーナーまたは管理者または請求担当
MCP ツールset_static_outbound_ip
レスポンスオブジェクト: ref, active, status, outcome, addresses, note
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network/static-outbound-ip" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network/static-outbound-ip', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/network/static-outbound-ip

固定アウトバウンドIP 有料オプションの固定アウトバウンドIPをオンまたはオフにします。オンにすると、サーバーデプロイ、関数のfetch()、データベースWebhookが固定アドレスから送信され、月額料金が利用期間に応じて請求されます。Pro以上のプランで、オーナー・管理者・請求担当者だけが実行できます。料金がかかるため、ユーザーがはっきり求めたときだけ使ってください。料金と今の状態はget_networkにあります。アドレスがまだないリージョンでは outcome が provisioning になります。アドレスを作成中(通常1時間以内)で、準備ができるまで料金は発生せず、アドレスも返されません。

名前説明
トークンのスコープwrite
ロールbilling.manage オーナーまたは管理者または請求担当
MCP ツールset_static_outbound_ip
レスポンスオブジェクト: ref, active, status, outcome, addresses, note
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network/static-outbound-ip" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network/static-outbound-ip', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

スケジュールジョブ

メソッドパス説明
GET/projects/{ref}/jobs予約ジョブ
PUT/projects/{ref}/jobs/{job}予約ジョブの作成・変更
PATCH/projects/{ref}/jobs/{job}予約ジョブのオン・オフ
POST/projects/{ref}/jobs/{job}/run予約ジョブを今すぐ実行
GET/projects/{ref}/jobs/{job}/runs予約ジョブの実行履歴
DELETE/projects/{ref}/jobs/{job}予約ジョブの削除

GET /api/v1/projects/{ref}/jobs

予約ジョブ 予約ジョブ(cron)を、スケジュール、次回の実行、前回の結果とともに表示します。プロジェクトのSQLでcron.scheduleにより作ったジョブはsourceがsqlです。limitはプランのジョブ数の上限です。時刻はすべてUTCです。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_jobs
レスポンスオブジェクト: ref, timezone, limit, used, jobs
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/jobs/{job}

予約ジョブの作成・変更 スケジュールに従って関数を呼び出すか、SQL文を1つ実行します。同じ名前のジョブがあれば変更します。 scheduleはUTCの5フィールドcron(分 時 日 月 曜日)です。韓国と日本はUTC+9なので、現地時間の0時は "0 15 * * *" です。 kindがfunctionならtargetはデプロイ済みの関数名(本文が{}のPOSTで呼び出します)、sqlならtargetはservice roleで実行するSQLです。 外部URLは呼び出せません。関数を作成するか、SQLでnet.http_postを使ってください。SQLはtimeout_seconds(既定120秒)以内に終わる必要があり、SQLが自分でstatement_timeoutを延ばすとその分待ちます。どちらでもプランの最大(Free 300秒、Pro・Enterprise 3600秒)までです。 SQLのcron.scheduleで作ったジョブもsource=sqlとして一覧に出ます。SQL(cron.alter_job、cron.unschedule)またはset_job_enabled・remove_jobで変更します。 プランごとにプロジェクトあたりのジョブ数の上限があります(list_jobsのlimit)。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールsave_job
本文の上限256 KiB
レスポンスオブジェクト: ref, timezone, job
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
jobパスstringはいジョブ名です。既存の名前で保存すると、そのジョブを変更します。
schedule本文stringはい例: "*/5 * * * *"(5分ごと)、"0 15 * * *"(韓国・日本時間の0時)。
kind本文string, function | sqlはいデプロイ済みの関数を呼び出すならfunction、SQLを実行するならsqlです。
target本文stringはい関数名、または実行するSQLです。
enabled本文booleanいいえジョブを実行するかどうかです。既定はオンです。
timeout_seconds本文numberいいえSQLジョブが実行できる最大時間(秒)です。既定120、最大はプランごと(Free 300、Pro・Enterprise 3600)です。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs/nightly" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"schedule":"0 3 * * *","kind":"function","target":"hello"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs/nightly', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "schedule": "0 3 * * *",
    "kind": "function",
    "target": "hello"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/jobs/{job}

予約ジョブのオン・オフ 予約ジョブをオフにする、またはオンに戻します。オンに戻しても、逃した実行を取り戻すことはなく、次の予定時刻から実行します。jobはidまたは名前です。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_job_enabled
本文の上限256 KiB
レスポンスオブジェクト: ref, id, enabled
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
jobパスstringはいジョブのidまたは名前です。
enabled本文booleanはいtrueでオン、falseでオフにします。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs/nightly" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs/nightly', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/jobs/{job}/run

予約ジョブを今すぐ実行 スケジュールを待たずに、1分以内にジョブを1回実行します。結果はlist_job_runsで確認してください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールrun_job
レスポンスオブジェクト: ref, id, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
jobパスstringはいジョブのidまたは名前です。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs/nightly/run" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs/nightly/run', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/jobs/{job}/runs

予約ジョブの実行履歴 ジョブの最近の実行と結果を新しい順に表示します。失敗した場合はエラーも含みます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_job_runs
レスポンスオブジェクト: ref, id, runs
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
jobパスstringはいジョブのidまたは名前です。
limitクエリnumberいいえ表示する実行の数です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs/nightly/runs?limit=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs/nightly/runs?limit=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/jobs/{job}

予約ジョブの削除 予約ジョブとその実行履歴を削除します。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_job
レスポンスオブジェクト: ref, id, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
jobパスstringはいジョブのidまたは名前です。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs/nightly" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/jobs/nightly', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

データベース Webhook

メソッドパス説明
GET/projects/{ref}/webhooksデータベースWebhook
POST/projects/{ref}/webhooksデータベースWebhookの作成
PATCH/projects/{ref}/webhooks/{webhook}データベースWebhookのオン・オフ
DELETE/projects/{ref}/webhooks/{webhook}データベースWebhookの削除
GET/projects/{ref}/webhooks/{webhook}/deliveriesデータベースWebhookの送信履歴

GET /api/v1/projects/{ref}/webhooks

データベースWebhook テーブルの変更を知らせるWebhookと、最近の送信を表示します。attachedがfalseの場合は、テーブルが削除されてWebhookが止まったことを意味します。署名キー(signing_secret)は作成時(create_db_webhook)に一度だけ表示します。一覧にはsigning_secret_setと末尾4文字(signing_secret_last4)だけを載せます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_db_webhooks
レスポンスオブジェクト: ref, webhooks
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/webhooks" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/webhooks', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/webhooks

データベースWebhookの作成 テーブルに行が追加、変更、削除されたときにPOSTを送ります。コミットされた変更だけを、数秒以内に送ります。 kindがurlならtargetは公開されたhttpsアドレス(プライベートアドレスや内部アドレスは不可、リダイレクトは追いません)、functionならこのプロジェクトの関数名です。 本文: { type: "INSERT"|"UPDATE"|"DELETE", table, schema: "public", record, old_record, hook, delivery, occurred_at }。 ヘッダーx-blackwall-signature: t=<秒>,v1=<HMAC-SHA256(signing_secret, "<t>.<body>")の16進数> で検証してください。 signing_secretはこの応答にだけ含まれ、あとから読み直せないので、受信側にすぐ保存してください。 失敗した場合(2xx以外の応答、または10秒超過)は、10秒、1分、5分、30分後に再送し、5回目で諦めます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_db_webhook
本文の上限256 KiB
レスポンスオブジェクト: ref, webhook, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413 · 500
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文stringはいWebhookを見分けるための名前です。
table本文stringはいlist_tablesのテーブル名です。
events本文array<string>, insert | update | deleteはい送る変更の種類です: insert、update、delete。
kind本文string, url | functionはいアドレスにPOSTするならurl、このプロジェクトの関数を呼び出すならfunctionです。
target本文stringはいhttpsアドレス、または関数名です。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/webhooks" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","table":"notes","events":["insert"],"kind":"url","target":"hello"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/webhooks', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "table": "notes",
    "events": [
      "insert"
    ],
    "kind": "url",
    "target": "hello"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/webhooks/{webhook}

データベースWebhookのオン・オフ Webhookをオフまたはオンにします。オフの間に起きた変更は送られません。webhookはidまたは名前です。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_db_webhook_enabled
本文の上限256 KiB
レスポンスオブジェクト: ref, id, enabled
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
webhookパスstringはいWebhookのidまたは名前です。
enabled本文booleanはいtrueでオン、falseでオフにします。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/webhooks/orders" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/webhooks/orders', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/webhooks/{webhook}

データベースWebhookの削除 Webhookと、その送信履歴、まだ送っていない変更を削除します。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_db_webhook
レスポンスオブジェクト: ref, id, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
webhookパスstringはいWebhookのidまたは名前です。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/webhooks/orders" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/webhooks/orders', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/webhooks/{webhook}/deliveries

データベースWebhookの送信履歴 Webhookの最近の送信を、応答ステータスと失敗の理由とともに新しい順に表示します。7日間保存されます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_db_webhook_deliveries
レスポンスオブジェクト: ref, id, deliveries
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
webhookパスstringはいWebhookのidまたは名前です。
limitクエリnumberいいえ表示する送信の数です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/webhooks/orders/deliveries?limit=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/webhooks/orders/deliveries?limit=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

バックアップと復元

メソッドパス説明
GET/projects/{ref}/backupsバックアップ
POST/projects/{ref}/backups今すぐバックアップ
POST/projects/{ref}/backups/{backup_id}/restoreバックアップの復元
POST/projects/{ref}/backups/restore-to-timeバックアップの復元

GET /api/v1/projects/{ref}/backups

バックアップ プロジェクトのバックアップ(毎晩プロジェクトのリージョンの現地時刻03:00〜05:00の自動、手動、復元の直前に作成されたもの)と復元の履歴を表示します。retention_daysは保存期間です。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_backups
レスポンスオブジェクト: ref, retention_days, point_in_time, backups, restores
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/backups" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/backups', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/backups

今すぐバックアップ テーブル、ユーザー、ファイルを今バックアップします。大きな変更(マイグレーション、大量の削除)の前に作成してください。7日間保存されます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_backup
レスポンスオブジェクト: ref, id, status, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/backups" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/backups', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/backups/{backup_id}/restore

バックアップの復元 プロジェクトのテーブル、ユーザー、ファイルをバックアップを作成した時点に戻します。backup_idの代わりにat(ISO形式の時刻)を指定すると、その時点に秒単位で戻します(Pro以上、list_backupsのpoint_in_timeの範囲内)。この場合ファイルは、ファイルバケットを使うサーバーでだけその時点の行が指すもの(過去14日以内に削除したものも含みます)に戻し、それ以外では今のままにします。その時点以降の変更はすべて失われるため、ユーザーがはっきり求めたときだけ使ってください。復元の直前の状態を先にバックアップするので、undo_backup_idで再び戻せます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrestore_backup
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
backup_idパスstringはいlist_backupsのidです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/backups/BACKUP_ID/restore" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/backups/BACKUP_ID/restore', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/backups/restore-to-time

バックアップの復元 プロジェクトのテーブル、ユーザー、ファイルをバックアップを作成した時点に戻します。backup_idの代わりにat(ISO形式の時刻)を指定すると、その時点に秒単位で戻します(Pro以上、list_backupsのpoint_in_timeの範囲内)。この場合ファイルは、ファイルバケットを使うサーバーでだけその時点の行が指すもの(過去14日以内に削除したものも含みます)に戻し、それ以外では今のままにします。その時点以降の変更はすべて失われるため、ユーザーがはっきり求めたときだけ使ってください。復元の直前の状態を先にバックアップするので、undo_backup_idで再び戻せます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrestore_backup
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
at本文stringいいえ例: 2026-10-01T14:59:00+09:00
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/backups/restore-to-time" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"at":"2026-10-01T14:59:00+09:00"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/backups/restore-to-time', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "at": "2026-10-01T14:59:00+09:00"
  }),
})
const result = await response.json()

ログと監視

メソッドパス説明
GET/projects/{ref}/logsログ
GET/projects/{ref}/log-drainsログドレイン
POST/projects/{ref}/log-drainsログドレインの追加
PATCH/projects/{ref}/log-drains/{id}ログドレインのオン・オフ
DELETE/projects/{ref}/log-drains/{id}ログドレインの削除
GET/projects/{ref}/metricsメトリクス
GET/projects/{ref}/audit監査ログ

GET /api/v1/projects/{ref}/logs

ログ プロジェクトで起きたことを新しい順に表示します。サイト、API、ログイン、関数へのリクエスト(メソッド、パス、ステータス、所要時間)と、デプロイしたサーバーや関数が出力した行です。アプリが500を返す場合は、まずlevelをerrorにしてここを見てください。次のページは、応答のnext_beforeをbeforeに渡します。クエリ文字列は保存しません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_logs
レスポンスオブジェクト: ref, lines, next_before, retention_days
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
sourceクエリstring, site | server | api | auth | functions | buildいいえ行の出どころです: site、server、api、auth、functions、build。
levelクエリstring, warn | errorいいえ警告とエラーならwarn、エラーだけならerrorです。
qクエリstringいいえ
beforeクエリstringいいえこの時刻より古い行だけです。前回の応答のnext_beforeです。
deploymentクエリstringいいえ
limitクエリinteger, min 1, max 500いいえ既定は100行です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/logs?source=site&level=warn" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/logs?source=site&level=warn', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/log-drains

ログドレイン ログの送信先(httpsまたはdatadog)、送るソース、最後の送信とエラーです。署名キー(signing_secret)は作成時(create_log_drain)に一度だけ表示します。一覧にはsigning_secret_setと、オーナーと管理者には末尾4文字(signing_secret_last4)だけを載せます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_log_drains
レスポンスオブジェクト: ref, sources, drains
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/log-drains" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/log-drains', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/log-drains

ログドレインの追加 このプロジェクトのログを外部へ送ります。作成した後に書き込まれたログから送ります。kind=httpsは署名付きのJSONをPOSTし、kind=datadogはsecretにAPIキーが必要です。httpsドレインのsigning_secretはこの応答にだけ含まれるので、受信側にすぐ保存してください。プロジェクトごとに5個までです。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールcreate_log_drain
本文の上限256 KiB
レスポンスオブジェクト: id, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文stringはいドレインを見分けるための名前です。
kind本文string, https | datadogはいhttpsまたはdatadogです。
url本文stringはい公開されたhttpsアドレスです。
secret本文stringいいえDatadogのAPIキー、またはhttpsで送るときにAuthorizationヘッダーに入れる値です。
sources本文array<string>, site | server | api | auth | functions | buildいいえ空ならすべてです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/log-drains" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","kind":"https","url":"https://example.com/hook"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/log-drains', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "kind": "https",
    "url": "https://example.com/hook"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/log-drains/{id}

ログドレインのオン・オフ 設定を残したまま、送信を止めるか再開します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_log_drain_enabled
本文の上限256 KiB
レスポンスオブジェクト: ref, id, enabled
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_log_drainsのidです。
enabled本文booleanはいtrueで送信、falseで停止します。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/log-drains/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/log-drains/ID', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/log-drains/{id}

ログドレインの削除 ログドレインを削除します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールremove_log_drain
レスポンスオブジェクト: ref, id, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_log_drainsのidです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/log-drains/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/log-drains/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/metrics

メトリクス リクエスト数、失敗数、レイテンシ(p50/p95/p99)を対象別と時間別に、データベースのサイズ、接続数、キャッシュヒット率とともに返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_metrics
レスポンスオブジェクト: ref, range, requests, failures, latency_ms, by_surface, points, database
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
rangeクエリstring, 1h | 24h | 7dいいえ空なら24hです。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/metrics?range=1h" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/metrics?range=1h', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/audit

監査ログ tab=activityは組織で誰が何を変更したか、tab=accessは誰が個人情報にアクセスしたかです。新しい順に一度に最大200件まで返り、has_moreがtrueならoffsetを増やして再度呼び出してください。fromとtoはYYYY-MM-DD(韓国時間の日付)です。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープread
ロールaudit.read オーナーまたは管理者
MCP ツールget_audit_log
レスポンスオブジェクト: ref, tab, total, has_more, records
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
tabクエリstring, activity | accessいいえ変更ならactivity、個人情報へのアクセスならaccessです。
fromクエリstringいいえ最初の日付です。YYYY-MM-DD。
toクエリstringいいえ最後の日付です。YYYY-MM-DD。
actorクエリstringいいえメールアドレスの一部です。
actionクエリstringいいえこの語で始まる操作です。例: member
limitクエリinteger, min 1, max 200いいえ取得する件数です。最大200件です。
offsetクエリinteger, min 0いいえ読み飛ばす件数です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/audit?tab=activity&from=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/audit?tab=activity&from=value', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

チームと通知

メソッドパス説明
GET/projects/{ref}/teamチームメンバー
POST/projects/{ref}/team/invitationsメンバーの招待
DELETE/projects/{ref}/team/invitations/{id}招待の取り消し
PATCH/projects/{ref}/team/members/{email}メンバーの役割の変更
DELETE/projects/{ref}/team/members/{email}メンバーの削除
PUT/projects/{ref}/team/mfa2段階認証の必須化
GET/projects/{ref}/channels通知チャンネル
POST/projects/{ref}/channels通知チャンネルの追加
POST/projects/{ref}/channels/{id}/test通知チャンネルのテスト
PATCH/projects/{ref}/channels/{id}通知チャンネルのオン・オフ
DELETE/projects/{ref}/channels/{id}通知チャンネルの削除

GET /api/v1/projects/{ref}/team

チームメンバー このプロジェクトを所有する組織のメンバーを、役割、2段階認証を使っているかどうか、まだ承諾されていない招待とともに返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_team
レスポンスオブジェクト: ref, mfa_required, members, invitations
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/team/invitations

メンバーの招待 招待リンクをメールで送ります。リンクを開くと参加するため、すぐに追加される人はいません。すでにメンバーのアドレスなら、役割だけを変更します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールteam.manage オーナーまたは管理者
MCP ツールinvite_member
本文の上限256 KiB
レスポンスオブジェクト: ref, id, email, role, outcome, note
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
email本文stringはい招待するメールアドレスです。
role本文string, admin | developer | billing | viewerいいえ空ならdeveloperです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team/invitations" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"email":"[email protected]"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team/invitations', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "email": "[email protected]"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/team/invitations/{id}

招待の取り消し 送った招待を取り消します。そのリンクはすぐに開けなくなります。idはlist_teamのinvitationsにあります。

名前説明
トークンのスコープwrite
ロールteam.manage オーナーまたは管理者
MCP ツールcancel_invitation
レスポンスオブジェクト: ref, id, cancelled
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_teamの招待idです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team/invitations/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team/invitations/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/team/members/{email}

メンバーの役割の変更 すでにメンバーである人の役割を変更します。オーナーの役割は変更できません。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールteam.manage オーナーまたは管理者
MCP ツールset_member_role
本文の上限256 KiB
レスポンスオブジェクト: ref, email, role
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
emailパスstringはいメンバーのメールアドレスです。
role本文string, admin | developer | billing | viewerはい新しい役割です。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team/members/person%40example.com" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"role":"admin"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team/members/person%40example.com', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "role": "admin"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/team/members/{email}

メンバーの削除 組織から人を外します。オーナーは外せません。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールteam.manage オーナーまたは管理者
MCP ツールremove_member
レスポンスオブジェクト: ref, email, removed
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
emailパスstringはいメンバーのメールアドレスです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team/members/person%40example.com" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team/members/person%40example.com', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/team/mfa

2段階認証の必須化 組織のすべてのメンバーに2段階認証を必須にする、または必須をやめます。オンにするには、このトークンの所有者が先に2段階認証をオンにしている必要があります。2段階認証がないメンバーは、オンにするまでこの組織を開けず、応答のwithout_mfaに表示されます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールteam.manage オーナーまたは管理者
MCP ツールset_mfa_required
本文の上限256 KiB
レスポンスオブジェクト: ref, mfa_required
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
required本文booleanはいtrueで必須にし、falseで必須をやめます。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team/mfa" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"required":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/team/mfa', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "required": true
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/channels

通知チャンネル デプロイ、ドメイン、使用量、請求のお知らせを受け取るSlack、KakaoWork、Webhookのチャンネルを、最後の送信結果とともに返します。組織全体の設定です。Webhookチャンネルの署名キー(signing_secret)は作成時(create_channel)に一度だけ表示します。一覧にはsigning_secret_setと末尾4文字(signing_secret_last4)だけを載せます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_channels
レスポンスオブジェクト: ref, notices, channels
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/channels" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/channels', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/channels

通知チャンネルの追加 Slack(Incoming Webhookのアドレス)、KakaoWork(ボットのWebhookアドレス)、署名付きWebhook、またはメール(emailsに1〜10件のアドレス)に通知を送ります。メールチャンネルはアドレスごとに確認リンクを送り、リンクを開いたアドレスにだけ通知を送ります。noticesを空にするとすべての種類を受け取ります(usageには使用量の上限警告とトラフィック急増の通知が含まれます)。Webhookチャンネルのsigning_secretはこの応答にだけ含まれるので、受信側にすぐ保存してください。作成後にtest_channelで確認してください。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールteam.manage オーナーまたは管理者
MCP ツールcreate_channel
本文の上限256 KiB
レスポンスオブジェクト: ref, id, note
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
kind本文string, slack | kakaowork | webhook | emailはいslack、kakaowork、webhook、emailのいずれかです。
name本文stringはいチャンネルを見分けるための名前です。
url本文stringいいえ送信先のWebhookアドレスです。メールチャンネルでは使いません。
emails本文array<string>, max items 10いいえメールチャンネルの送信先アドレスです。例: ["[email protected]"]。
notices本文array<string>, deployments | domains | usage | billingいいえ受け取る種類です: deployments、domains、usage、billing。空ならすべてです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/channels" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"kind":"slack","name":"my-name"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/channels', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "kind": "slack",
    "name": "my-name"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/channels/{id}/test

通知チャンネルのテスト そのチャンネル1つにだけテストメッセージを送ります。メールチャンネルでは確認済みのアドレスにだけ送り、確認待ちのアドレスには確認メールを再送します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールteam.manage オーナーまたは管理者
MCP ツールtest_channel
レスポンスオブジェクト: ref, id, sent, note
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_channelsのidです。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/channels/ID/test" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/channels/ID/test', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/channels/{id}

通知チャンネルのオン・オフ 設定を残したまま、通知を止めるか再開します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールteam.manage オーナーまたは管理者
MCP ツールset_channel_enabled
本文の上限256 KiB
レスポンスオブジェクト: ref, id, enabled
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_channelsのidです。
enabled本文booleanはいtrueで送信、falseで停止します。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/channels/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/channels/ID', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/channels/{id}

通知チャンネルの削除 通知チャンネルを削除します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールteam.manage オーナーまたは管理者
MCP ツールremove_channel
レスポンスオブジェクト: ref, id, removed
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_channelsのidです。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/channels/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/channels/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

料金と使用量

メソッドパス説明
GET/projects/{ref}/usage使用量
GET/projects/{ref}/billing/plan料金プラン
GET/projects/{ref}/billing/spend支出の上限
PUT/projects/{ref}/billing/spend-cap支出キャップのオンとオフ
PUT/projects/{ref}/billing/spend-limit月の支出上限
GET/projects/{ref}/billing請求と使用量

GET /api/v1/projects/{ref}/usage

使用量 テーブル、行、ユーザー、ファイルの数、使用しているストレージ容量、今月の計量値、1分あたりの上限(limits.outbound_requests_per_minute: 関数・pg_net・HTTPジョブが共有する外部リクエスト。自分のAPIへの呼び出しは数えません)を返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールusage
レスポンスオブジェクト: tables, approximate_rows, users, files, storage_bytes, database_bytes
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/usage" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/usage', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/billing/plan

料金プラン 組織の今の料金プラン、予約された変更、選べるプランと月額料金、組織で有効な有料オプション(addons)です。無料プランなら free にその制限(1 人、独自ドメインなし、1 日のデプロイ回数、3 日間未使用で一時停止、ビルド時間と転送量)と Pro だけの機能があります。オプションはそれぞれのツール(set_static_outbound_ip)でオン・オフします。プランの変更は支払いが必要なので、コンソールの請求画面でのみ行えます。オーナー、管理者、請求担当のメンバーだけが見られます。

名前説明
トークンのスコープread
ロールbilling.manage オーナーまたは管理者または請求担当
MCP ツールget_plan
レスポンスオブジェクト: ref, currency, plan, scheduled, options, billed_by, addons, note
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/billing/plan" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/billing/plan', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/billing/spend

支出の上限 支出キャップ(オンにすると無料枠を超える使用を止め、超過料金を請求しません)、月の超過料金の上限と通知Webhook、今月の使用量を表示します。オーナー、管理者、請求担当のメンバーだけが見られます。

名前説明
トークンのスコープread
ロールbilling.manage オーナーまたは管理者または請求担当
MCP ツールget_spend_controls
レスポンスオブジェクト: ref, spend_cap, spend_cap_applies, spend_limit_minor, spend_limit_floor_minor, webhook_url, progress
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/billing/spend" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/billing/spend', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/billing/spend-cap

支出キャップのオンとオフ 有料プランの支出キャップをオンまたはオフにします。オンなら無料枠で止まり、超過料金はありません(コンソールの支出上限の「含まれる量まで」)。オフなら超えた分が請求されるため、オフにするときは confirm にプロジェクト名(list_projectsのname)をそのまま入れてください。オーナー、管理者、請求担当のメンバーだけが行えます。

名前説明
トークンのスコープwrite
ロールbilling.manage オーナーまたは管理者または請求担当
MCP ツールset_spend_cap
本文の上限256 KiB
レスポンスオブジェクト: ref, spend_cap
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
enabled本文booleanはいtrueでオンにします。
confirm本文stringいいえオフにするとき(enabled: false)だけ: プロジェクト名です。list_projectsのnameと完全に同じである必要があります。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/billing/spend-cap" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/billing/spend-cap', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/billing/spend-limit

月の支出上限 1か月の超過料金の上限(通貨の最小単位、ウォン)と、上限に近づいたときに通知するWebhookアドレスを決めます。支出キャップがオフのとき、コンソールの支出上限の「決めた金額まで許可」(nullなら「無制限」)と同じです。spend_limit_minorをnullにすると上限をなくします。webhook_urlを省くと今のアドレスのままです。新しい通知先は通知チャネル(create_channel)で受け取ることをおすすめします。オーナー、管理者、請求担当のメンバーだけが行えます。

名前説明
トークンのスコープwrite
ロールbilling.manage オーナーまたは管理者または請求担当
MCP ツールset_spend_limit
本文の上限256 KiB
レスポンスオブジェクト: ref, spend_cap, spend_cap_applies, spend_limit_minor, spend_limit_floor_minor, webhook_url, progress
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
spend_limit_minor本文string, min 0はい上限です。nullならなしです。
webhook_url本文stringいいえ通知を受けるhttpsアドレスです。空文字列なら削除します。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/billing/spend-limit" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"spend_limit_minor":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/billing/spend-limit', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "spend_limit_minor": "value"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/billing

請求と使用量 1か月分の請求(項目ごとの使用量、無料枠、料金)と日別の使用量です。periodが空なら今月(UTC)です。金額は currency の最小単位です(KRW はウォン、USD はセント)。included は今月実際に使ったプランの無料枠(変更日までの日数で按分)、list_included は Pro の無料枠です。amount_minor・total_minor は請求される金額、list_amount_minor・list_total_minor は定価です。billing_exempt が true の組織(運営会社自身のアカウント)は請求額が0で、支払いを理由に止まりません。定価は Pro プランの料金表によるものです。カードとお支払い履歴はコンソールでのみ確認できます。オーナー、管理者、請求担当のメンバーだけが見られます。

名前説明
トークンのスコープread
ロールbilling.manage オーナーまたは管理者または請求担当
MCP ツールget_billing
レスポンスオブジェクト: ref, period, plan, period_start, period_end, currency, list_total_minor, billing_exempt, lines, usage, months
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
periodクエリstringいいえYYYY-MM
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/billing?period=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/billing?period=value', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

その他

メソッドパス説明
GET/projects/{ref}/transfer移管できる組織
POST/projects/{ref}/transferプロジェクトの移管
GET/projects/{ref}/server専用サーバー
POST/projects/{ref}/server専用サーバーを借りる
PATCH/projects/{ref}/serverサーバーサイズを変更
DELETE/projects/{ref}/server専用サーバーを返却
PUT/projects/{ref}/server/standby待機サーバー
POST/projects/{ref}/server/moveサーバーの場所を移動
PUT/projects/{ref}/server/restore-days復元できる期間
GET/projects/{ref}/s3-keysS3 アクセスキー一覧
POST/projects/{ref}/s3-keysS3 アクセスキーを作成
DELETE/projects/{ref}/s3-keys/{id}S3 アクセスキーを失効
POST/projects/{ref}/storage/policiesファイルのアクセスルールの作成
POST/projects/{ref}/storage/copy-from-import取り込み元からファイルをコピー
GET/projects/{ref}/deployment-retentionデプロイの保存期間
PUT/projects/{ref}/deployment-retentionデプロイの保存期間を変更
GET/projects/{ref}/schemasプロジェクトのスキーマ
PUT/projects/{ref}/schemas/exposed公開スキーマの設定
GET/projects/{ref}/data-apiデータAPIの設定を見る
PATCH/projects/{ref}/data-apiデータAPIの設定を変える
POST/projects/{ref}/{param0}/{param1}SAML SSOの追加
PUT/projects/{ref}/{param0}/{param1}/{param2}SAML SSOの追加
GET/projects/{ref}/config/authログイン設定をすべて見る
PATCH/projects/{ref}/config/authログイン設定を変える
GET/projects/{ref}/config/auth/custom-providersカスタムログインプロバイダーを見る
POST/projects/{ref}/config/auth/custom-providersカスタムログインプロバイダーを作る
PUT/projects/{ref}/config/auth/custom-providers/{identifier}カスタムログインプロバイダーを変える
PATCH/projects/{ref}/config/auth/custom-providers/{identifier}カスタムログインプロバイダーのオンとオフ
DELETE/projects/{ref}/config/auth/custom-providers/{identifier}カスタムログインプロバイダーを削除
POST/projects/{ref}/config/auth/copy-from-import取り込み元からログイン設定をコピー
GET/projects/{ref}/config/auth/third-party-authサードパーティ認証を見る
POST/projects/{ref}/config/auth/third-party-authサードパーティ認証を追加
DELETE/projects/{ref}/config/auth/third-party-auth/{id}サードパーティ認証を削除
GET/projects/{ref}/analyticsウェブ分析
GET/projects/{ref}/analytics/breakdownWeb Analytics の内訳
PUT/projects/{ref}/analytics/previewsプレビューの訪問を数える
GET/projects/{ref}/analytics/exportWeb Analytics をエクスポート
GET/projects/{ref}/analytics/reportsカスタムレポート一覧
GET/projects/{ref}/analytics/reports/{id}カスタムレポートを表示
POST/projects/{ref}/analytics/reportsカスタムレポートを保存
PATCH/projects/{ref}/analytics/reportsカスタムレポートを保存
DELETE/projects/{ref}/analytics/reports/{id}カスタムレポートを削除
GET/projects/{ref}/speed-insights速度インサイト
PUT/projects/{ref}/insights分析のオン・オフ
GET/projects/{ref}/remote-cacheリモートキャッシュ
DELETE/projects/{ref}/remote-cache/artifactsリモートキャッシュを空にする
GET/projects/{ref}/flags機能フラグ一覧
GET/projects/{ref}/flags/evaluate機能フラグを評価
PUT/projects/{ref}/flags/{key}/environments/{environment}機能フラグのオン・オフ
GET/projects/{ref}/edge-configエッジ設定を読む
GET/projects/{ref}/edge-config/tokensエッジ設定の読み取りトークン
POST/projects/{ref}/edge-config/tokensエッジ設定の読み取りトークンを作成
DELETE/projects/{ref}/edge-config/tokens/{id}読み取りトークンを失効
PUT/projects/{ref}/edge-config/tokens/{id}/connections/{ref}読み取りトークンをプロジェクトに連携
DELETE/projects/{ref}/edge-config/tokens/{id}/connections/{ref}読み取りトークンの連携を解除
GET/projects/{ref}/edge-config/historyエッジ設定の変更履歴
PATCH/projects/{ref}/edge-configエッジ設定を変える
GET/projects/{ref}/rolling-releases段階的リリースの状態
PUT/projects/{ref}/rolling-releases段階的リリースの設定
POST/projects/{ref}/rolling-releases/{action}段階的リリースを次の段階へ
GET/projects/{ref}/kvKV キーの一覧
GET/projects/{ref}/kv/{id}KV の値を読む
PUT/projects/{ref}/kv/{id}KV の値を保存
DELETE/projects/{ref}/kv/{id}KV キーを削除
GET/projects/{ref}/ai-gatewayAI ゲートウェイ
PUT/projects/{ref}/ai-gatewayAI ゲートウェイの設定
GET/projects/{ref}/ai-gateway/logsAI ゲートウェイの呼び出し履歴
POST/projects/{ref}/ai-gateway/providersAI プロバイダーを追加
PATCH/projects/{ref}/ai-gateway/providers/{id}AI プロバイダーのオン・オフ
DELETE/projects/{ref}/ai-gateway/providers/{id}AI プロバイダーを削除
PUT/projects/{ref}/ai-gateway/budgetsAI ゲートウェイの予算
GET/projects/{ref}/ai-gateway/keysAI ゲートウェイキー一覧
POST/projects/{ref}/ai-gateway/keysAI ゲートウェイキーを作成
PUT/projects/{ref}/ai-gateway/keys/{id}/limitsAI ゲートウェイキーの上限
PUT/projects/{ref}/ai-gateway/aliasesAI モデルの別名
PUT/projects/{ref}/ai-gateway/hooksAI ゲートウェイのフック
PATCH/projects/{ref}/ai-gateway/keys/{id}AI ゲートウェイキーの予算
DELETE/projects/{ref}/ai-gateway/keys/{id}AI ゲートウェイキーを無効化
GET/projects/{ref}/ai-gateway/spendAI ゲートウェイの支出
GET/projects/{ref}/middlewareミドルウェアの設定
PUT/projects/{ref}/middlewareミドルウェアの設定を変える
GET/projects/{ref}/branchesデータベースブランチの一覧
POST/projects/{ref}/branchesデータベースブランチを作成する
PUT/projects/{ref}/branching自動データベースブランチの設定
POST/projects/{ref}/branches/{name}/mergeデータベースブランチをマージする
POST/projects/{ref}/branches/{name}/resetデータベースブランチを初期化する
DELETE/projects/{ref}/branches/{name}データベースブランチを削除する
GET/projects/{ref}/queuesキューの一覧
GET/projects/{ref}/queues/metricsキューの指標
POST/projects/{ref}/queuesキューを作成する
PUT/projects/{ref}/queues/apiキューをデータAPIに公開する
DELETE/projects/{ref}/queues/{name}キューを削除する
POST/projects/{ref}/queues/{name}/purgeキューを空にする
POST/projects/{ref}/queues/{name}/messagesキューにメッセージを入れる
GET/projects/{ref}/queues/{name}/messagesキューのメッセージを見る
GET/projects/{ref}/vaultVaultのシークレットの一覧
POST/projects/{ref}/vaultVaultにシークレットを保存する
PATCH/projects/{ref}/vault/{name}Vaultのシークレットを変更する
DELETE/projects/{ref}/vault/{name}Vaultのシークレットを削除する
GET/projects/{ref}/network-restrictionsデータベースの接続制限
PUT/projects/{ref}/network-restrictionsデータベースの接続制限を変更する

GET /api/v1/projects/{ref}/transfer

移管できる組織 このプロジェクトを移管できる別の組織(自分がオーナーか管理者の組織)の id、名前、プランです。can_transfer は、現在の組織のオーナーとして移管できるかどうかです。transfer_project の organisation に id を入れてください。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_transfer_targets
レスポンスオブジェクト: ref, name, organisation, organisation_id, targets
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/transfer" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/transfer', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/transfer

プロジェクトの移管 プロジェクトを別の組織へ移します。現在の組織のオーナーであり、受け取る組織のオーナーか管理者である必要があり、受け取る組織のプランにプロジェクトの空きが必要です。移管後の使用量は受け取る組織に請求され、今月の請求は移管した時点で分かれます。元の組織のメンバーに個別に与えたアクセスはなくなり、戻すには受け取る組織のオーナーがもう一度移管する必要があります。アドレス、キー、データ、デプロイはそのままです。ユーザーがはっきり求めたときだけ使い、confirm にプロジェクト名をそのまま入れてください。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールtransfer_project
本文の上限256 KiB
レスポンスオブジェクト: ref, name, organisation, organisation_id, transferred, note
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
organisation本文stringはい受け取る組織の id です。list_transfer_targets が返します。同じ名前の組織が1つだけなら名前でも構いません。
confirm本文stringはいプロジェクト名です。list_projects の name と完全に同じである必要があります。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/transfer" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"organisation":"My team","confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/transfer', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "organisation": "My team",
    "confirm": "my-project"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/server

専用サーバー プロジェクトの専用サーバーを表示します: サイズ(tier)、場所、状態、アドレス、月額、待機サーバー、自動切り替え、復元できる期間、次に移動できる日、進行中の作業(jobs)。server が null なら共用サーバーを使っています。offered が false ならまだ提供していません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_server
レスポンスオブジェクト: ref, offered, server, standby, options, next_move_at, jobs
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/server

専用サーバーを借りる このプロジェクトだけが使うサーバーを借ります。サイズと場所ごとの月額は先に list_server_sizes で見せ、ユーザーが選んだものだけを渡してください。通常 10 分以内に準備でき、データベースとアプリを移してからアドレスを切り替えます。Pro プランから。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrequest_server
本文の上限256 KiB
レスポンスオブジェクト: job, note
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
tier本文string, pattern ^[0-9]+gb$はいサーバーサイズ。list_server_sizes の tier(例: 4gb)。
region本文string, pattern ^[a-z]{2}-[a-z]+-[0-9]$いいえ場所。省略するとプロジェクトの場所。list_server_sizes の region。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"tier":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "tier": "value"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/server

サーバーサイズを変更 専用サーバーのサイズを変更します。when=now は今すぐ、tonight はサーバーの場所の時刻で 3〜5 時。待機サーバーがなければ 3〜5 分応答せず、あれば切り替えの数秒だけ止まります。サイズ変更は無料で、月額は新しいサイズの価格です(list_server_sizes)。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールresize_server
本文の上限256 KiB
レスポンスオブジェクト: job, note
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
tier本文string, pattern ^[0-9]+gb$はいサーバーサイズ。list_server_sizes の tier(例: 4gb)。
when本文string, now | tonightいいえnow(既定)または tonight(3〜5 時)。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"tier":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "tier": "value"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/server

専用サーバーを返却 専用サーバーを返却します: 最後のバックアップを取り、データベースとアプリを共用サーバーに移してから、サーバー(と待機サーバー)を削除します。移動中は書き込みが止まります。ユーザーが求めたときだけ使い、confirm に ref をそのまま入れてください。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrelease_server
本文の上限256 KiB
レスポンスオブジェクト: job, note
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
confirm本文stringはいプロジェクト ID(ref)。ref と同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/server/standby

待機サーバー 同じ場所・同じサイズの待機サーバーをオンまたはオフにします。データベースを継続的に複製し、月額はそのサイズと同じです(list_server_sizes)。auto_failover=true なら、主サーバーが 60 秒応答しないとき自動で待機サーバーに切り替えます(待機サーバーが必要)。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_standby
本文の上限256 KiB
レスポンスオブジェクト: job, note
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
standby本文booleanはい待機サーバーを置くかどうか。
auto_failover本文booleanいいえ自動切り替え。既定は false。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server/standby" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"standby":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server/standby', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "standby": true
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/server/move

サーバーの場所を移動 専用サーバーを別の場所に移します。無料で月に 1 回です(next_move_at)。新しい場所にサーバーを作って複製し、アドレスを切り替える瞬間に書き込みが数秒止まります。古いサーバーは 7 日間残します。月額は新しい場所の価格です(list_server_sizes)。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールmove_server
本文の上限256 KiB
レスポンスオブジェクト: job, note
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
region本文string, pattern ^[a-z]{2}-[a-z]+-[0-9]$はい場所。list_server_sizes の region(例: kr-seoul-1)。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server/move" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"region":"kr"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server/move', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "region": "kr"
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/server/restore-days

復元できる期間 特定の時刻に戻せる期間を 7 日または 28 日にします。28 日は専用サーバーでのみ使え、月額の追加料金があります(get_server の options、get_billing)。オーナーと管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_restore_days
本文の上限256 KiB
レスポンスオブジェクト: job, note
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
days本文integer, 7 | 28はい7 または 28。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server/restore-days" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"days":7}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/server/restore-days', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "days": 7
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/s3-keys

S3 アクセスキー一覧 S3 エンドポイント(endpoint、region、force_path_style)と TUS による再開可能なアップロードのアドレス、そして各 S3 アクセスキーの名前、アクセスキー ID、最終使用日時、失効状態です。シークレットアクセスキーは返しません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_s3_keys
レスポンスオブジェクト: keys
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/s3-keys" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/s3-keys', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/s3-keys

S3 アクセスキーを作成 AWS SDK、aws CLI、rclone が /storage/v1/s3 へのリクエストに署名するアクセスキー ID とシークレットアクセスキーを作成します。サービスロールとして動き、アクセスルールを無視するので、サーバーにだけ置いてください。シークレットアクセスキーはこの応答にしかなく、二度と見られません。作成できるのはオーナーと管理者だけで、プロジェクトごとに 20 個までです。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールcreate_s3_key
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文string, min length 1, max length 60はいキーの用途です。例: バックアップサーバー
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/s3-keys" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/s3-keys', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/s3-keys/{id}

S3 アクセスキーを失効 S3 アクセスキーを 1 つ失効させます。30 秒以内に、そのキーで署名したリクエストは拒否されます。他のキーには影響しません。元に戻せません。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrevoke_s3_key
レスポンスオブジェクト: revoked, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_s3_keys の keys[].id です。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/s3-keys/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/s3-keys/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/storage/policies

ファイルのアクセスルールの作成 ファイルテーブル(objects)にアクセスルールを 1 つ追加します。name、command(select・insert・update・delete・all)、roles、using、check を受け取ります。プロジェクトのログインはファイルテーブルの所有者ではないため SQL ではルールを作れません。このルートを使います。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はい
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/storage/policies" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/storage/policies', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({}),
})
const result = await response.json()

POST /api/v1/projects/{ref}/storage/copy-from-import

取り込み元からファイルをコピー import_sources で接続した Supabase アカウントで、そのプロジェクトのバケットとファイルをこのサーバーのプロジェクト(ref)にコピーします。ここにないバケットは Supabase と同じ公開設定・サイズ上限・形式で作り、ファイルは upload_object と同じストレージに同じ上限で入れます。ここに同じサイズのファイルがあれば飛ばすので、呼び直しても大丈夫です。1 回でファイル 200 個(max_files)、45 秒までコピーし、残りがあれば答えの next を渡して done が true になるまで呼び直します。答えはバケットごとの created、copied、skipped、failed、bytes と、失敗したファイルの一部です。Supabase のキーは会話に出ません。バケットのアクセスルールはコピーしません。dry_run なら何も変えずに数だけ表示します。オーナー・管理者・開発者のみ実行できます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcopy_storage_from_import
本文の上限256 KiB
レスポンスオブジェクト: ref, source_project, dry_run, done, next, buckets, failures
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
buckets本文array<string>いいえコピーする Supabase のバケット名。空ならすべて。
rename本文objectいいえバケット名の変更 {"Supabase のバケット": "ここのバケット"}。なければ小文字にし、空白を - にします(My Files → my-files)。
dry_run本文booleanいいえtrue なら変更せず、作るバケットとコピーするファイルの数だけ表示します。
max_files本文integer, min 1, max 1000いいえ今回コピーするファイル数の上限(既定 200、最大 1000)。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/storage/copy-from-import" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"buckets":["value"],"rename":{},"dry_run":true,"max_files":1}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/storage/copy-from-import', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "buckets": [
      "value"
    ],
    "rename": {},
    "dry_run": true,
    "max_files": 1
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/deployment-retention

デプロイの保存期間 キャンセル・失敗・プレビュー・本番のデプロイを何日残すかを返します。いま適用される日数(days)、プロジェクトが決めた値(project_days、null ならプランに従う)、プランの既定値(plan_days)。期間にかかわらず残すデプロイ(always_kept)と、削除したデプロイを復元できる日数(restore_days)もあります。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_deployment_retention
レスポンスオブジェクト: ref, canceled, error, preview, production, always_kept, restore_days
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployment-retention" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployment-retention', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/deployment-retention

デプロイの保存期間を変更 デプロイの種類ごとの保存期間を変えます。期間を過ぎたデプロイは削除され、3日間は restore_deployment で復元できます。直近のデプロイと配信中のデプロイは期間にかかわらず残ります。プロジェクト管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_deployment_retention
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
canceled_days本文string, min 1, max 3650いいえキャンセル・スキップしたデプロイを残す日数(1〜3650)。null でプランの既定値。指定しなければそのまま。
error_days本文string, min 1, max 3650いいえ失敗したデプロイを残す日数(1〜3650)。null でプランの既定値。指定しなければそのまま。
preview_days本文string, min 1, max 3650いいえプレビューのデプロイを残す日数(1〜3650)。null でプランの既定値。指定しなければそのまま。
production_days本文string, min 1, max 3650いいえ本番のデプロイを残す日数(1〜3650)。null でプランの既定値。指定しなければそのまま。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployment-retention" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"canceled_days":"value","error_days":"value","preview_days":"value","production_days":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/deployment-retention', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "canceled_days": "value",
    "error_days": "value",
    "preview_days": "value",
    "production_days": "value"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/schemas

プロジェクトのスキーマ public以外にプロジェクトがSQLで作ったスキーマ(create schema blackquant)と、それぞれをデータAPIが公開しているか(exposed)を表示します。データベース内の名前はapp_<ref>_名前ですが、SQLとクライアントでは作った名前をそのまま使います。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_schemas
レスポンスオブジェクト: ref, always_exposed, schemas, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/schemas" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/schemas', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/schemas/exposed

公開スキーマの設定 データAPI(/rest/v1)がpublic以外に応答するスキーマの一覧を丸ごと設定します(SupabaseのExposed schemas)。公開したスキーマはAccept-Profile・Content-Profileヘッダー、supabase-jsのdb: { schema }または.schema()で使います。アクセスルール(RLS)とanon・authenticated・service_roleの権限はpublicと同じく適用されます。空の一覧ならpublicのみ公開します。30秒以内に反映されます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_exposed_schemas
本文の上限256 KiB
レスポンスオブジェクト: ref, exposed, schemas, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
exposed本文array<string>はい公開するスキーマ名(list_schemasのname)。publicは常に公開されます。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/schemas/exposed" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"exposed":["value"]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/schemas/exposed', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "exposed": [
      "value"
    ]
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/data-api

データAPIの設定を見る データAPI(/rest/v1)がオンか、1回に返す最大行数(max_rows、nullなら上限なし)、公開スキーマ、検索パス(search_path)を見ます。search_path_choicesは検索パスに入れられるスキーマです:public、プロジェクトがcreate schemaで作ったスキーマ、extensions。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_data_api_settings
レスポンスオブジェクト: ref, enabled, max_rows, exposed_schemas, search_path, search_path_choices
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/data-api" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/data-api', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/data-api

データAPIの設定を変える データAPI(/rest/v1)をオンまたはオフにし、最大行数と検索パスを設定します。指定したものだけを変えます。検索パスに入れたスキーマは要求したスキーマの後ろに付き、関数やビューがスキーマ名なしでその中のテーブルと関数を見つけます。30秒以内に反映されます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_data_api_settings
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
enabled本文booleanいいえfalseにすると/rest/v1はすべて404で応答します。
max_rows本文number, min 1, max 1000000いいえ1回に返す最大行数です。nullなら上限なしです。
search_path本文array<string>, max items 20いいえ検索パスに入れるスキーマです(get_data_api_settingsのsearch_path_choicesのname)。空の一覧なら何も入れません。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/data-api" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true,"max_rows":1,"search_path":["value"]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/data-api', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true,
    "max_rows": 1,
    "search_path": [
      "value"
    ]
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/{param0}/{param1}

SAML SSOの追加 IdPのメタデータ(httpsのURLかXML)からSAML IdPを登録します。メタデータにはHTTP-Redirectのログインアドレスと署名証明書が必要です。domainsのメールドメインでsignInWithSSOを呼ぶと、このIdPに進みます。1つのドメインは1つのIdPにだけ設定できます。新しいIdPはエンタープライズプランでのみ追加できます(list_sso_providersのnew_providers_allowed)。登録済みのIdPはプランに関係なくそのまま動作します。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールadd_sso_provider
本文の上限256 KiB
レスポンスオブジェクト: id, entity_id, metadata_url, domains, attribute_mapping, created_at, updated_at
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
param0パスstringはい
param1パスstringはい
metadata_url本文stringいいえhttpsのURL。metadata_xmlとどちらか一方。
metadata_xml本文stringいいえIdPのメタデータXML。metadata_urlとどちらか一方。
domains本文array<string>いいえメールドメイン。例: ["example.com"]。
attribute_mapping本文objectいいえGoTrueの形式: {"keys": {"email": {"name": "mail"}}}。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/value/value" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"metadata_url":"value","metadata_xml":"value","domains":["value"],"attribute_mapping":{}}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/value/value', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "metadata_url": "value",
    "metadata_xml": "value",
    "domains": [
      "value"
    ],
    "attribute_mapping": {}
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/{param0}/{param1}/{param2}

SAML SSOの追加 IdPのメタデータ(httpsのURLかXML)からSAML IdPを登録します。メタデータにはHTTP-Redirectのログインアドレスと署名証明書が必要です。domainsのメールドメインでsignInWithSSOを呼ぶと、このIdPに進みます。1つのドメインは1つのIdPにだけ設定できます。新しいIdPはエンタープライズプランでのみ追加できます(list_sso_providersのnew_providers_allowed)。登録済みのIdPはプランに関係なくそのまま動作します。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールadd_sso_provider
本文の上限256 KiB
レスポンスオブジェクト: id, entity_id, metadata_url, domains, attribute_mapping, created_at, updated_at
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
param0パスstringはい
param1パスstringはい
param2パスstringはい
metadata_url本文stringいいえhttpsのURL。metadata_xmlとどちらか一方。
metadata_xml本文stringいいえIdPのメタデータXML。metadata_urlとどちらか一方。
domains本文array<string>いいえメールドメイン。例: ["example.com"]。
attribute_mapping本文objectいいえGoTrueの形式: {"keys": {"email": {"name": "mail"}}}。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/value/value/value" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"metadata_url":"value","metadata_xml":"value","domains":["value"],"attribute_mapping":{}}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/value/value/value', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "metadata_url": "value",
    "metadata_xml": "value",
    "domains": [
      "value"
    ],
    "attribute_mapping": {}
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/config/auth

ログイン設定をすべて見る このプロジェクトのログイン設定すべてを、Supabase の auth config と同じキー(小文字)で返します。登録(disable_signup、mailer_autoconfirm、security_manual_linking_enabled、external_anonymous_users_enabled)、メールプロバイダーとパスワードのルール、電話番号と SMS プロバイダー(sms_*)、SAML(saml_*)、Web3、ソーシャルプロバイダーごとの external_<プロバイダー>_enabled・client_id・secret・url・email_optional、カスタムプロバイダーのスイッチ。シークレットは ••••abcd のように末尾4文字だけを返し、この値を update_auth_config にそのまま返すと保存済みの値は変わりません。callback_url はプロバイダーのコンソールに貼り付けるアドレスです。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_auth_config
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/config/auth

ログイン設定を変える 指定したキーだけを変えます(GoTrue の大文字の名前も使えます)。コンソールのサインイン / プロバイダー画面と同じルールで確認します: 有効にしたプロバイダーには必要な値がすべて要り(external_google_client_id、Keycloak のレルム url など)、Apple のシークレットは残り7日を超える ES256 の JWT、SMS の本文には {{ .Code }} が必要です。1つでも誤りがあれば何も保存せず、キーごとに理由を返します。カカオの同意項目は external_kakao_scopes(profile_nickname、account_email、gender などをカンマ区切り)、NAVER で保存する情報は external_naver_scopes、Google と GitHub の追加スコープは external_<プロバイダー>_additional_scopes です。シークレットに空文字列を渡すと削除します。オーナー・管理者・開発者だけが実行できます。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールupdate_auth_config
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({}),
})
const result = await response.json()

GET /api/v1/projects/{ref}/config/auth/custom-providers

カスタムログインプロバイダーを見る プロジェクトが自分で定義した OAuth・OIDC プロバイダー(custom:<識別子>)と、プランの上限(max_providers)、スイッチ(enabled)を返します。アプリでは signInWithOAuth({ provider: "custom:<識別子>" }) で使います。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_custom_providers
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/custom-providers" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/custom-providers', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/config/auth/custom-providers

カスタムログインプロバイダーを作る OAuth・OIDC プロバイダー(custom:<識別子>)を1つ作って有効にします。set_auth_provider と同じ場所に保存します。provider_type が oidc なら issuer だけで、{issuer}/.well-known/openid-configuration からエンドポイントと jwks_uri を読み込み、id_token の署名・発行者・対象・有効期限・nonce をその鍵で確認します。oauth2 なら issuer か authorization_url・token_url が必要で、空欄のエンドポイントは {issuer}/oauth/authorize、/oauth/token、/oauth/userinfo になります。claim_map は応答のどのフィールドが id・email・email_verified・name・avatar・phone か(ドットでつないだパス)です。PKCE は既定でオンです。プランの上限を超えると拒否されます。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールcreate_custom_provider
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
pkce本文booleanいいえ既定はオン。プロバイダーが PKCE を拒否する場合だけオフにします。
pkce_enabled本文stringいいえ
identifier本文stringはい英小文字・数字・ハイフン。custom: は付けても付けなくてもかまいません。
name本文stringはい表示名。100文字未満。
label本文stringいいえ
provider_type本文string, oidc | oauth2はいoidc(エンドポイントを検出し id_token を検証)または oauth2(エンドポイントを指定し claim_map で読む)。
issuer本文stringいいえプロバイダーのベース URL。
discovery_url本文stringいいえoidc で検出ドキュメントが標準のパスにない場合。
authorization_url本文stringいいえissuer のない oauth2 では必須。oidc では空欄なら検出します。
authorize_url本文stringいいえ
token_url本文stringいいえissuer のない oauth2 では必須。oidc では空欄なら検出します。
userinfo_url本文stringいいえユーザー情報を読むアドレス。oidc では空欄なら検出します。
jwks_uri本文stringいいえoidc で ID トークンの検証に使います。空欄なら検出します。
client_id本文stringはいクライアント ID。
client_secret本文stringはいクライアントシークレット。
scopes本文array<string>いいえ例: ["openid", "email", "profile"]。
email_optional本文booleanいいえメールアドレスのないユーザーを許可。
claim_map本文objectいいえ応答のどのフィールドが id・email・email_verified・name・avatar・phone か、ドットでつないだパスで。省くと OpenID の標準名。
claims本文stringいいえ
token_auth本文string, body | basicいいえclient_secret を本文(body、既定)で送るか HTTP Basic(basic)で送るか。
enabled本文booleanいいえ既定はオン。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/custom-providers" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"identifier":"value","name":"my-name","provider_type":"oidc","client_id":"CLIENT_ID","client_secret":"CLIENT_SECRET"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/custom-providers', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "identifier": "value",
    "name": "my-name",
    "provider_type": "oidc",
    "client_id": "CLIENT_ID",
    "client_secret": "CLIENT_SECRET"
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/config/auth/custom-providers/{identifier}

カスタムログインプロバイダーを変える カスタムプロバイダーを1つ変更します。識別子は変えられません。client_secret を空文字列にすると保存済みのシークレットを使い続けます。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールupdate_custom_provider
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
identifierパスstringはいlist_custom_providers の identifier。
pkce本文booleanいいえ既定はオン。プロバイダーが PKCE を拒否する場合だけオフにします。
pkce_enabled本文stringいいえ
identifier本文stringはいlist_custom_providers の identifier。
name本文stringはい表示名。100文字未満。
label本文stringいいえ
provider_type本文string, oidc | oauth2はいoidc(エンドポイントを検出し id_token を検証)または oauth2(エンドポイントを指定し claim_map で読む)。
issuer本文stringいいえプロバイダーのベース URL。
discovery_url本文stringいいえoidc で検出ドキュメントが標準のパスにない場合。
authorization_url本文stringいいえissuer のない oauth2 では必須。oidc では空欄なら検出します。
authorize_url本文stringいいえ
token_url本文stringいいえissuer のない oauth2 では必須。oidc では空欄なら検出します。
userinfo_url本文stringいいえユーザー情報を読むアドレス。oidc では空欄なら検出します。
jwks_uri本文stringいいえoidc で ID トークンの検証に使います。空欄なら検出します。
client_id本文stringはいクライアント ID。
client_secret本文stringいいえ空なら保存済みのシークレットを使い続けます。
scopes本文array<string>いいえ例: ["openid", "email", "profile"]。
email_optional本文booleanいいえメールアドレスのないユーザーを許可。
claim_map本文objectいいえ応答のどのフィールドが id・email・email_verified・name・avatar・phone か、ドットでつないだパスで。省くと OpenID の標準名。
claims本文stringいいえ
token_auth本文string, body | basicいいえclient_secret を本文(body、既定)で送るか HTTP Basic(basic)で送るか。
enabled本文booleanいいえ保存と同時にオンまたはオフにします。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/custom-providers/value" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"identifier":"value","name":"my-name","provider_type":"oidc","client_id":"CLIENT_ID"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/custom-providers/value', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "identifier": "value",
    "name": "my-name",
    "provider_type": "oidc",
    "client_id": "CLIENT_ID"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/config/auth/custom-providers/{identifier}

カスタムログインプロバイダーのオンとオフ カスタムプロバイダーを1つオフまたはオンにします。オフにしても既存のセッションはそのままですが、新しいログインは再度オンにするまで失敗します。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールset_custom_provider_enabled
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
identifierパスstringはいlist_custom_providers の identifier。
enabled本文booleanはいtrue でオン、false でオフ。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/custom-providers/value" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/custom-providers/value', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/config/auth/custom-providers/{identifier}

カスタムログインプロバイダーを削除 カスタムプロバイダーを1つ削除します。元に戻せず、このプロバイダーでログインしていたユーザーは入れなくなります。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールremove_custom_provider
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
identifierパスstringはいlist_custom_providers の identifier。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/custom-providers/value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/custom-providers/value', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/config/auth/copy-from-import

取り込み元からログイン設定をコピー import_sources で接続した Supabase アカウントで、そのプロジェクトのログイン設定をこのサーバーのプロジェクト(ref)にコピーします。オンにしたソーシャルプロバイダー(Client ID、シークレットなど。update_auth_config と同じ確認)、戻り先アドレスの一覧(uri_allow_list。add_redirect_url と同じ)、空のときだけ site_url。シークレットは会話に出ません。答えはプロバイダーごとの copied と理由です。答えの callback_url を各プロバイダーのコンソールに登録するまで、ログインは失敗します。dry_run なら何も変えずに表示だけします。オーナー・管理者・開発者のみ実行できます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcopy_auth_from_import
本文の上限256 KiB
レスポンスオブジェクト: ref, source_project, dry_run, callback_url, providers, site_url, redirect_urls, console_url
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
providers本文array<string>いいえコピーするプロバイダー(google、kakao、apple、x など)。空なら Supabase でオンのものすべて。
dry_run本文booleanいいえtrue なら変更せず、何をコピーするかだけ表示します。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/copy-from-import" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"providers":["google"],"dry_run":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/copy-from-import', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "providers": [
      "google"
    ],
    "dry_run": true
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/config/auth/third-party-auth

サードパーティ認証を見る Data API が受け付ける他の認証サービス(Firebase、Clerk、WorkOS、Auth0、Amazon Cognito、OpenID 発行者)のトークンの一覧です。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_third_party_auth
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/third-party-auth" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/third-party-auth', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/config/auth/third-party-auth

サードパーティ認証を追加 他の認証サービスの JWT をこのプロジェクトのログインとして受け付けます。value は type によって異なります: firebase はプロジェクト ID、clerk は https://clerk.<ドメイン> か https://<名前>.clerk.accounts.dev、workos は発行者 URL、auth0 はテナント名(<名前>.auth0.com の前半)、cognito はユーザープール ID(region も)、oidc は発行者 URL。Auth0 と Cognito では audiences の指定をおすすめします。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールadd_third_party_auth
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
type本文string, firebase | clerk | workos | auth0 | cognito | oidcはいfirebase、clerk、workos、auth0、cognito、oidc のいずれか。
value本文stringはいtype ごとに上のとおり。
region本文stringいいえCognito の AWS リージョン。例: ap-northeast-2
audiences本文array<string>いいえトークンの aud に含まれるべき値。
jwks_url本文stringいいえoidc で、検出の代わりに使う JWKS のアドレス。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/third-party-auth" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"type":"firebase","value":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/third-party-auth', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "type": "firebase",
    "value": "value"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/config/auth/third-party-auth/{id}

サードパーティ認証を削除 サードパーティ認証を1つ削除します。そのサービスでログインしたユーザーのリクエストは30秒以内に 401 で拒否されます。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールremove_third_party_auth
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_third_party_auth の id。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/third-party-auth/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/config/auth/third-party-auth/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/analytics

ウェブ分析 日ごとのページビューと訪問者を、よく見られたページ、参照元、国、デバイス、ブラウザ、OSとあわせて返します。個人を識別できる値は保存しないため、合計だけです。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_analytics
レスポンスオブジェクト: ref, settings
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
daysクエリinteger, 1 | 7 | 30 | 90いいえ期間 (日)。既定は7です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics?days=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics?days=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/analytics/breakdown

Web Analytics の内訳 キャンペーン(utm_source・utm_medium・utm_campaign)、ルート、カスタムイベント、除外したボットの数を返します。event を指定すると、そのイベントのプロパティごとの値も返します。合計のみです。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_analytics_breakdown
レスポンスオブジェクト: ref, days, utm_source, utm_medium, utm_campaign, routes, events, bots_filtered, crawlers
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
daysクエリinteger, 1 | 7 | 30 | 90いいえ期間。既定は 7。
eventクエリstring, max length 100いいえプロパティを見るイベントの名前。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/breakdown?days=1&event=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/breakdown?days=1&event=value', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/analytics/previews

プレビューの訪問を数える プレビューデプロイと dpl- アドレスの訪問を Web Analytics で数えるかを設定します。オフ(既定)ではプレビューにスクリプトを入れず、送られたものも捨てます。オーナーと管理者のみ実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_analytics_previews
本文の上限256 KiB
レスポンスオブジェクト: ref, include_previews, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
include_previews本文booleanはいプレビューも数える。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/previews" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"include_previews":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/previews', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "include_previews": true
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/analytics/export

Web Analytics をエクスポート 期間の合計を日付・項目・値ごとの CSV 文字列で返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールexport_analytics
レスポンスオブジェクト: ref, days, format, csv
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
daysクエリinteger, 1 | 7 | 30 | 90いいえ期間。既定は 7。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/export?days=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/export?days=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/analytics/reports

カスタムレポート一覧 保存した Web Analytics のレポートと、レポートに入れられるグラフの名前を返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_analytics_reports
レスポンスオブジェクト: ref, widgets, reports
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/reports" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/reports', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/analytics/reports/{id}

カスタムレポートを表示 保存したレポート 1 つを、その期間の合計、内訳、速度とあわせて返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_analytics_report
レスポンスオブジェクト: ref, report, totals, breakdown, speed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_analytics_reports が返した id。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/reports/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/reports/ID', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/analytics/reports

カスタムレポートを保存 レポートを作成するか、id で指定したレポートを変更します。開発者以上が実行できます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールsave_analytics_report
本文の上限256 KiB
レスポンスオブジェクト: ref, report
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文string, min length 1, max length 80はい名前。
days本文integer, 1 | 7 | 30 | 90いいえ期間。既定は 7。
widgets本文array<string>, views | visitors | path | referrer | country | device | browser | os | utm_source | utm_medium | utm_campaign | route | event | bot | vitals, min items 1, max items 16はい表示するグラフと表。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/reports" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","widgets":["views"]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/reports', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "widgets": [
      "views"
    ]
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/analytics/reports

カスタムレポートを保存 レポートを作成するか、id で指定したレポートを変更します。開発者以上が実行できます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールsave_analytics_report
本文の上限256 KiB
レスポンスオブジェクト: ref, report
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文string, min length 1, max length 80はい名前。
days本文integer, 1 | 7 | 30 | 90いいえ期間。既定は 7。
widgets本文array<string>, views | visitors | path | referrer | country | device | browser | os | utm_source | utm_medium | utm_campaign | route | event | bot | vitals, min items 1, max items 16はい表示するグラフと表。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/reports" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","widgets":["views"]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/reports', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "widgets": [
      "views"
    ]
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/analytics/reports/{id}

カスタムレポートを削除 レポートだけを削除します。分析の記録はそのままです。開発者以上が実行できます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールremove_analytics_report
レスポンスオブジェクト: ref, id, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_analytics_reports が返した id。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/reports/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/analytics/reports/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/speed-insights

速度インサイト 実際の訪問者のブラウザが測った Core Web Vitals (LCP、INP、CLS、FCP、TTFB) の75パーセンタイルと評価、遅いページを返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_speed_insights
レスポンスオブジェクト: ref, settings
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
daysクエリinteger, 1 | 7 | 30 | 90いいえ期間 (日)。既定は7です。
deviceクエリstring, all | desktop | mobileいいえデバイス。既定は all です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/speed-insights?days=1&device=all" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/speed-insights?days=1&device=all', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/insights

分析のオン・オフ ウェブ分析と速度インサイトをオン・オフします。オンにするとサイトの HTML に /_oneend/insights/script.js が入ります。Vercel の @vercel/analytics・@vercel/speed-insights を使うアプリは、コードを変えずに同じ場所で集計されます。Cookie を使わず、IP アドレスも保存しません。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_insights
本文の上限256 KiB
レスポンスオブジェクト: ref, settings, script, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
analytics本文booleanいいえウェブ分析。
speed_insights本文booleanいいえ速度インサイト。
vitals_sample_percent本文integer, min 1, max 100いいえ速度を測る訪問の割合。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/insights" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"analytics":true,"speed_insights":true,"vitals_sample_percent":1}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/insights', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "analytics": true,
    "speed_insights": true,
    "vitals_sample_percent": 1
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/remote-cache

リモートキャッシュ Turborepo リモートキャッシュのアドレス、保存された結果の数と容量、直近 30 日のヒットとアップロード、今月計量された保存容量(remote_cache_gb_hour)と単価を返します。ダウンロードしたデータは egress_gb として数えます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_remote_cache
レスポンスオブジェクト: ref, api, artifacts, bytes, last_30_days, metered
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/remote-cache" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/remote-cache', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/remote-cache/artifacts

リモートキャッシュを空にする 保存された結果をすべて削除します。次のビルドから再び溜まり、削除した分だけ保存容量の計量が減ります。開発者以上が実行できます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールclear_remote_cache
レスポンスオブジェクト: ref, cleared
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/remote-cache/artifacts" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/remote-cache/artifacts', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/flags

機能フラグ一覧 プロジェクトの機能フラグと、エッジ設定に置いたフラグの形の値をあわせて返します。source はどこにあるか、shadows は同じキーのエッジ設定の値を隠しているかを示します。同じキーならフラグが決めます。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_flags
レスポンスオブジェクト: ref, flags, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/flags" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/flags', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/flags/evaluate

機能フラグを評価 アプリが受け取る値を返します。コンテキスト(例: {"user": {"id": "u1"}})と環境を指定するとフラグのルールで、そのキーのフラグがなければエッジ設定の値で決まります。source がどちらで決まったかを示します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールevaluate_flag
レスポンスオブジェクト: ref, key, environment, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
keyクエリstring, max length 256いいえフラグのキー。
environmentクエリstringいいえ環境。既定は production。
contextクエリobjectいいえ評価するコンテキスト(JSON オブジェクト)。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/flags/evaluate?key=API_URL&environment=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/flags/evaluate?key=API_URL&environment=value', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/flags/{key}/environments/{environment}

機能フラグのオン・オフ 1 つの環境でフラグをオン・オフします。本番はオーナーと管理者、その他の環境は開発者以上が実行できます。

名前説明
トークンのスコープwrite
ロール組織のすべてのメンバー
MCP ツールset_flag_enabled
本文の上限256 KiB
レスポンスオブジェクト: ref, key, environment, enabled, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
keyパスstring, max length 64はいフラグのキー。
environmentパスstringはい環境。
enabled本文booleanはいオン。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/flags/API_URL/environments/value" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/flags/API_URL/environments/value', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/edge-config

エッジ設定を読む プロジェクトのエッジ設定 (デプロイせずに変える値と機能フラグ) 全体を、バージョン、サイズ、上限とあわせて返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_edge_config
レスポンスオブジェクト: ref, version, bytes, limits, items, read_url
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/edge-config/tokens

エッジ設定の読み取りトークン このプロジェクトのエッジ設定を別のプロジェクトが読む読み取りトークンと、連携したプロジェクト(変数名、環境)、このプロジェクトに連携した別のプロジェクトのエッジ設定を返します。トークン自体は返しません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_edge_config_tokens
レスポンスオブジェクト: ref, tokens, connected_here
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/tokens" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/tokens', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/edge-config/tokens

エッジ設定の読み取りトークンを作成 読み取りトークンを作成し、connect を渡すと同じ組織のプロジェクトに連携します。連携したプロジェクトのデプロイには、次のデプロイから接続文字列(https://<ref>.<zone>/config/v1?token=…)が変数として入ります。トークンは今回だけ表示されます。プロジェクト管理者だけが実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールcreate_edge_config_token
本文の上限256 KiB
レスポンスオブジェクト: ref, id, name, token, connection_string, connected, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
connect本文objectいいえすぐに連携する同じ組織のプロジェクト: ref、変数名 variable(既定は GLOBAL_CONFIG)、環境 targets(既定は 3 つすべて。本番はそのプロジェクトのオーナー・管理者だけ)。
name本文string, min length 1, max length 60はいトークンの名前。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/tokens" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/tokens', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/edge-config/tokens/{id}

読み取りトークンを失効 読み取りトークンを失効させます。すぐに読めなくなり、連携したプロジェクトでは次のデプロイから変数がなくなります。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrevoke_edge_config_token
レスポンスオブジェクト: ref, id, revoked
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはい読み取りトークンの id。list_edge_config_tokens で確認します。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/tokens/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/tokens/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/edge-config/tokens/{id}/connections/{ref}

読み取りトークンをプロジェクトに連携 読み取りトークンを、同じ組織の別のプロジェクトのデプロイに変数として連携します。すでに連携していれば変数名と環境を変えます。そのプロジェクトの開発者以上(本番はオーナー・管理者)が必要です。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールconnect_edge_config_token
本文の上限256 KiB
レスポンスオブジェクト: ref, id, connected
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはい読み取りトークンの id。list_edge_config_tokens で確認します。
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
variable本文string, pattern ^[A-Za-z_][A-Za-z0-9_]{0,63}$いいえデプロイで読む変数名。既定は GLOBAL_CONFIG。
targets本文array<string>, production | preview | development, min items 1いいえ変数が入る環境。既定は 3 つすべて。本番はそのプロジェクトのオーナー・管理者だけ。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/tokens/ID/connections/abcdefghijklmnopqrst" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"variable":"value","targets":["production"]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/tokens/ID/connections/abcdefghijklmnopqrst', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "variable": "value",
    "targets": [
      "production"
    ]
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/edge-config/tokens/{id}/connections/{ref}

読み取りトークンの連携を解除 読み取りトークンを 1 つのプロジェクトから外します。そのプロジェクトの次のデプロイから変数がなくなります。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールdisconnect_edge_config_token
レスポンスオブジェクト: ref, id, disconnected
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはい読み取りトークンの id。list_edge_config_tokens で確認します。
refパスstring, pattern ^[a-z]{20}$はい連携する同じ組織のプロジェクト。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/tokens/ID/connections/abcdefghijklmnopqrst" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/tokens/ID/connections/abcdefghijklmnopqrst', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/edge-config/history

エッジ設定の変更履歴 誰がいつどのキーを何から何に変えたかを、新しい順に返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_edge_config_history
レスポンスオブジェクト: ref, changes
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
limitクエリinteger, min 1, max 500いいえ件数。既定は50です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/history?limit=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config/history?limit=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/edge-config

エッジ設定を変える キーを保存または削除します。数秒以内にすべてのサーバーに反映され、変更履歴が残ります。フラグは true/false、または {"enabled": true, "percent": 20}、{"enabled": true, "allow": ["user-1"]} の形です。開発者以上が行えます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_edge_config
本文の上限256 KiB
レスポンスオブジェクト: version, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
set本文objectいいえ保存するキーと値 (値は JSON)。
delete本文array<string>いいえ削除するキー。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"set":{},"delete":["value"]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/edge-config', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "set": {},
    "delete": [
      "value"
    ]
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/rolling-releases

段階的リリースの状態 段階的リリースの設定と、進行中のリリース (新しいデプロイが受け取る訪問者の割合)、最近の履歴を返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_rolling_releases
レスポンスオブジェクト: ref, config, active, recent
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/rolling-releases" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/rolling-releases', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/rolling-releases

段階的リリースの設定 新しい本番デプロイを段階的な割合で出すかを決めます。stages は大きくなる割合のリスト (例: [10, 50])、stage_minutes は段階の長さで、auto_advance が false なら段階ごとに承認が必要です。abort_error_rate (0.05 = 5%) を超えると自動で戻します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_rolling_releases
本文の上限256 KiB
レスポンスオブジェクト: ref, config, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
enabled本文booleanいいえオン。
stages本文array<integer>いいえ段階ごとの割合 (%)。
stage_minutes本文integer, min 1, max 1440いいえ段階の長さ (分)。
auto_advance本文booleanいいえ時間が経ったら自動で進む。
abort_error_rate本文number, min 0.001, max 1いいえ自動で中止する5xx率。null ならオフ。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/rolling-releases" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true,"stages":["value"],"stage_minutes":1,"auto_advance":true,"abort_error_rate":0.001}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/rolling-releases', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true,
    "stages": [
      "value"
    ],
    "stage_minutes": 1,
    "auto_advance": true,
    "abort_error_rate": 0.001
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/rolling-releases/{action}

段階的リリースを次の段階へ 進行中のリリースを次の段階の割合に上げます。最後の段階なら全員にリリースします。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールadvance_rolling_release
本文の上限256 KiB
レスポンスオブジェクト: ref, release
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
actionパスstringはい
reason本文stringいいえ
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/rolling-releases/value" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"reason":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/rolling-releases/value', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "reason": "value"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/kv

KV キーの一覧 KV ストアのキーを接頭辞で50個ずつ返します。使用量、上限、REST のアドレスもあわせて返します。シークレットを見られるロールのみ行えます。

名前説明
トークンのスコープread
ロールsecrets.read オーナーまたは管理者または開発者
MCP ツールlist_kv_keys
レスポンスオブジェクト: ref, usage, keys, cursor, rest_url
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
prefixクエリstringいいえ接頭辞。
cursorクエリstringいいえ前の応答の cursor。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/kv?prefix=value&cursor=value" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/kv?prefix=value&cursor=value', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/kv/{id}

KV の値を読む キー1つの値と残り秒数 (ttl、-1 は期限なし) を返します。

名前説明
トークンのスコープread
ロールsecrets.read オーナーまたは管理者または開発者
MCP ツールget_kv
レスポンスオブジェクト: ref, key, value, ttl
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはい
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/kv/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/kv/ID', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/kv/{id}

KV の値を保存 キーに JSON の値を保存します。ttl は有効期限までの秒数です。開発者以上が行えます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールset_kv
本文の上限256 KiB
レスポンスオブジェクト: ref, key, saved
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはい
value本文stringはい値 (JSON)。
ttl本文integer, min 1いいえ有効期限までの秒数。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/kv/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"value":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/kv/ID', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "value": "value"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/kv/{id}

KV キーを削除 キーを削除します。開発者以上が行えます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールdelete_kv
レスポンスオブジェクト: ref, key, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはい
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/kv/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/kv/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/ai-gateway

AI ゲートウェイ AI ゲートウェイの OpenAI 互換アドレス、設定、プロバイダー (キーは末尾4文字のみ)、直近30日の使用量を返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_ai_gateway
レスポンスオブジェクト: ref, base_url, settings, providers, usage_30d, top_users_30d
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/ai-gateway

AI ゲートウェイの設定 AI ゲートウェイのオン・オフ、ログインしたユーザーの許可、キャッシュ (秒)、1分あたりの上限、プラットフォームのプロバイダーへのフォールバック (トークン課金)、アプリのユーザー1人あたりの1日のリクエスト・トークン上限を決めます。ユーザーはログインしたユーザーの id、または secret キーで呼ぶときの x-oneend-user ヘッダーか本文の user です。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_ai_gateway
本文の上限256 KiB
レスポンスオブジェクト: ref, settings, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
enabled本文booleanいいえオン。
allow_users本文booleanいいえログインしたユーザーを許可。
cache_seconds本文integer, min 0, max 86400いいえキャッシュの秒数。
rate_per_minute本文integer, min 1いいえ1分あたりのリクエスト上限。
platform_fallback本文booleanいいえプラットフォームのプロバイダーへのフォールバック。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true,"allow_users":true,"cache_seconds":0,"rate_per_minute":1,"platform_fallback":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true,
    "allow_users": true,
    "cache_seconds": 0,
    "rate_per_minute": 1,
    "platform_fallback": true
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/ai-gateway/logs

AI ゲートウェイの呼び出し履歴 最近の呼び出しのプロバイダー、モデル、状態、トークン、レイテンシ、フォールバックの有無を返します。会話の内容は保存しません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_ai_gateway_logs
レスポンスオブジェクト: ref, logs
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
limitクエリinteger, min 1, max 500いいえ件数。既定は50です。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/logs?limit=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/logs?limit=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/ai-gateway/providers

AI プロバイダーを追加 プロバイダーをキーとあわせて追加します。OpenAI 互換、Anthropic(Messages API と相互に変換)、Google Gemini を選べます。アドレスは公開された https のみです。キーは封印して保存し、二度と表示しません。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールadd_ai_provider
本文の上限256 KiB
レスポンスオブジェクト: note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文string, pattern ^[a-z][a-z0-9-]{0,39}$はい名前。名前/モデルで呼ぶとこのプロバイダーだけを呼びます。
kind本文string, openai | anthropic | google | deepseek | openai-compatibleはい種類。
base_url本文stringいいえアドレス。openai、anthropic、google、deepseek は省略できます。
key本文stringいいえAPI キー。
models本文array<string>いいえ受け付けるモデル。空ならすべて。
priority本文integer, min 0, max 1000いいえ優先順位。小さい順。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/providers" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","kind":"openai"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/providers', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "kind": "openai"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/ai-gateway/providers/{id}

AI プロバイダーのオン・オフ 設定とキーは残したまま、プロバイダーの使用を止めたり再開したりします。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_ai_provider_enabled
本文の上限256 KiB
レスポンスオブジェクト: ref, id, enabled
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいget_ai_gateway が返した id。
enabled本文booleanはい使う。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/providers/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/providers/ID', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/ai-gateway/providers/{id}

AI プロバイダーを削除 プロバイダーと封印されたキーを削除します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールremove_ai_provider
レスポンスオブジェクト: ref, id, removed
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいget_ai_gateway が返した id。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/providers/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/providers/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/ai-gateway/budgets

AI ゲートウェイの予算 プロジェクトの AI ゲートウェイの予算をドルで設定します(日・週・月、UTC)。使い切ると次の期間まで呼び出しを拒否します。指定しない値はそのままです。オーナーと管理者のみ実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_ai_budgets
本文の上限256 KiB
レスポンスオブジェクト: ref, budgets, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
daily_usd本文string, min 0, max 1000000いいえ1 日(UTC)の予算(ドル)。null で上限なし。
weekly_usd本文string, min 0, max 1000000いいえ1 週間(月曜始まり、UTC)の予算(ドル)。null で上限なし。
monthly_usd本文string, min 0, max 1000000いいえ1 か月(UTC)の予算(ドル)。null で上限なし。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/budgets" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"daily_usd":"value","weekly_usd":"value","monthly_usd":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/budgets', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "daily_usd": "value",
    "weekly_usd": "value",
    "monthly_usd": "value"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/ai-gateway/keys

AI ゲートウェイキー一覧 ゲートウェイキーの名前、先頭部分、予算、今月の支出、最終使用時刻を返します。キーそのものは返しません。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_ai_gateway_keys
レスポンスオブジェクト: ref, keys
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/keys" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/keys', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/ai-gateway/keys

AI ゲートウェイキーを作成 アプリ 1 つ、またはプロジェクトが AI を再販する顧客 1 人に渡すゲートウェイキー(bwai_…)を、予算・タグ・1 分あたりの上限付きで作成します。キーはこの応答で一度だけ表示されます。タグ(external_ref)付きのキーはプロジェクトごとの 50 個の上限に数えません。オーナーと管理者のみ実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールcreate_ai_gateway_key
本文の上限256 KiB
レスポンスオブジェクト: ref, id, name, key, base_url, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文string, min length 1, max length 60はいキーの名前。
daily_usd本文string, min 0, max 1000000いいえ1 日(UTC)の予算(ドル)。null で上限なし。
weekly_usd本文string, min 0, max 1000000いいえ1 週間(月曜始まり、UTC)の予算(ドル)。null で上限なし。
monthly_usd本文string, min 0, max 1000000いいえ1 か月(UTC)の予算(ドル)。null で上限なし。
external_ref本文string, max length 200いいえこのキーがプロジェクトの台帳で誰か(例: 顧客のユーザー ID)。フックに一緒に送ります。
labels本文objectいいえ自由なラベル 20 個まで。例: {"tier": "1"}。フックに一緒に送ります。
rate_per_minute本文string, min 1, max 100000いいえ1 分あたりのリクエスト数の上限。null で上限なし。
tokens_per_minute本文string, min 1, max 100000000いいえ1 分あたりのトークン数(入力と出力)の上限。null で上限なし。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/keys" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/keys', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name"
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/ai-gateway/keys/{id}/limits

AI ゲートウェイキーの上限 ゲートウェイキー 1 つの 1 分あたりのリクエスト数とトークン数の上限を変更します。すべてのサーバーが同じ数を数えます。指定しない値はそのまま、null で上限をなくします。オーナーと管理者のみ実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_ai_gateway_key_limits
本文の上限256 KiB
レスポンスオブジェクト: ref, id, limits, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_ai_gateway_keys が返した id。
rate_per_minute本文string, min 1, max 100000いいえ1 分あたりのリクエスト数の上限。null で上限なし。
tokens_per_minute本文string, min 1, max 100000000いいえ1 分あたりのトークン数(入力と出力)の上限。null で上限なし。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/keys/ID/limits" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"rate_per_minute":"value","tokens_per_minute":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/keys/ID/limits', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "rate_per_minute": "value",
    "tokens_per_minute": "value"
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/ai-gateway/aliases

AI モデルの別名 呼び出す側が使うモデル名(別名)と、実際に送るモデルを設定します。別名ごとに先頭に入れるシステム指示を置けます。応答の model は別名で返ります。送った一覧が今の一覧をまるごと置き換えます。aliases_only を有効にすると別名以外は呼び出せず、/models も別名だけを返します。オーナーと管理者のみ実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_ai_model_aliases
本文の上限256 KiB
レスポンスオブジェクト: ref, aliases_only, aliases, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
aliases本文array<object>, max items 50はい別名の一覧すべて。空の配列ですべて削除します。
aliases_only本文booleanいいえ別名だけを呼び出せるようにします。指定しなければそのままです。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/aliases" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"aliases":[{"alias":"value","target":"hello","system_prompt":"value"}]}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/aliases', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "aliases": [
      {
        "alias": "value",
        "target": "hello",
        "system_prompt": "value"
      }
    ]
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/ai-gateway/hooks

AI ゲートウェイのフック ゲートウェイキーで呼び出すたびに問い合わせ、知らせる https アドレスを設定します。ai.before が timeout_ms 以内に 2xx を返さなければ呼び出しを拒否します(402 は残高不足としてそのまま伝えます)。ai.after は使用量・費用・状態を送り、受け取られるまで 1 日のあいだ再送します。応答に署名用のシークレットがあります。url を null にすると無効になります。オーナーと管理者のみ実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_ai_gateway_hooks
本文の上限256 KiB
レスポンスオブジェクト: ref, url, timeout_ms, signing_secret, events, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
url本文string, max length 500いいえフックのアドレス(https)。null で無効。
timeout_ms本文integer, min 200, max 10000いいえai.before が応答するまでの時間(ミリ秒)。既定は 2000。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/hooks" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"url":"https://example.com/hook","timeout_ms":200}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/hooks', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "url": "https://example.com/hook",
    "timeout_ms": 200
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/ai-gateway/keys/{id}

AI ゲートウェイキーの予算 ゲートウェイキー 1 つの予算を変更します。指定しない値はそのままです。オーナーと管理者のみ実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_ai_gateway_key_budgets
本文の上限256 KiB
レスポンスオブジェクト: ref, id, budgets
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_ai_gateway_keys が返した id。
daily_usd本文string, min 0, max 1000000いいえ1 日(UTC)の予算(ドル)。null で上限なし。
weekly_usd本文string, min 0, max 1000000いいえ1 週間(月曜始まり、UTC)の予算(ドル)。null で上限なし。
monthly_usd本文string, min 0, max 1000000いいえ1 か月(UTC)の予算(ドル)。null で上限なし。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/keys/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"daily_usd":"value","weekly_usd":"value","monthly_usd":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/keys/ID', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "daily_usd": "value",
    "weekly_usd": "value",
    "monthly_usd": "value"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/ai-gateway/keys/{id}

AI ゲートウェイキーを無効化 ゲートウェイキーを無効化します。30 秒以内にすべてのサーバーで拒否されます。オーナーと管理者のみ実行できます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールrevoke_ai_gateway_key
レスポンスオブジェクト: ref, id, revoked
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
idパスstringはいlist_ai_gateway_keys が返した id。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/keys/ID" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/keys/ID', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/ai-gateway/spend

AI ゲートウェイの支出 今日・今週・今月の支出と予算、日別・モデル別・キー別の支出をドルで返します。自分のキーで呼び出したプロバイダーは定価で計算した推定です。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_ai_spend
レスポンスオブジェクト: ref, spent_usd, budgets, days, models, keys
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
daysクエリinteger, min 1, max 400いいえ日数。既定は 30。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/spend?days=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/ai-gateway/spend?days=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/middleware

ミドルウェアの設定 サイトのミドルウェア (middleware.ts) を実行するかと、時間制限を返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_middleware
レスポンスオブジェクト: ref, enabled, timeout_ms
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/middleware" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/middleware', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/middleware

ミドルウェアの設定を変える サイトのミドルウェアをオン・オフし、時間制限 (100〜5000ms) を決めます。オフにするとデプロイし直さなくてもミドルウェアなしで配信します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_middleware
本文の上限256 KiB
レスポンスオブジェクト: ref, enabled, timeout_ms, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
enabled本文booleanいいえ実行する。
timeout_ms本文integer, min 100, max 5000いいえ時間制限 (ms)。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/middleware" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true,"timeout_ms":100}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/middleware', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "enabled": true,
    "timeout_ms": 100
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/branches

データベースブランチの一覧 このプロジェクトのデータベースブランチです。名前、ブランチ自身のプロジェクトref(ほかのすべてのツールにそのまま使います)、紐づくgitブランチ、状態(creating、ready、merging、resetting、failed、deleting)、サイズ、期限を返します。自動ブランチの設定も返します。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_branches
レスポンスオブジェクト: ref, automatic, lifetime_days, has_seed, branches
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branches" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branches', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/branches

データベースブランチを作成する プロジェクトのスキーマからプレビュー用のデータベースを作ります。プロジェクトのマイグレーション(apply_migrationsが記録した履歴)を順に再実行し、シードを入れます。データはwith_dataを指定したときだけコピーします。ブランチは独自のrefを持つプロジェクトで、run_sqlやget_project_keysなどすべてのツールにそのrefを使います。git_branchを指定すると、そのブランチのプレビューデプロイがこのデータベースを使います。Proプランから使えます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_branch
本文の上限256 KiB
レスポンスオブジェクト: ref, branch, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文stringいいえブランチ名です(英小文字、数字、-、30文字まで)。省略するとgit_branchから作ります。
git_branch本文stringいいえ紐づけるgitブランチです。そのブランチのプレビューデプロイに、このデータベースのアドレス、キー、接続文字列が入ります。
with_seed本文booleanいいえfalseならシードを入れません。
with_data本文booleanいいえtrueならプロジェクトの行までコピーします(マイグレーションの再実行とシードの代わり)。ファイルとその行はコピーしません。データが512MBを超えると断ります。進み具合はlist_branchesのcopyに出ます。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branches" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","git_branch":"value","with_seed":true,"with_data":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branches', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "git_branch": "value",
    "with_seed": true,
    "with_data": true
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/branching

自動データベースブランチの設定 プレビューとしてデプロイされるgitブランチごとにデータベースブランチを自動で作るか、すべてのブランチに入れるシードSQL、使われていないブランチを残す日数(1から90日、デプロイのたびに延長)を設定します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_branching
本文の上限256 KiB
レスポンスオブジェクト: ref, automatic, lifetime_days, has_seed
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
automatic本文booleanいいえtrueならプレビューブランチごとに自動で作ります。
seed_sql本文stringいいえ新しいブランチでマイグレーションの後に実行するSQLです(1MBまで)。空文字列なら削除します。
lifetime_days本文integer, min 1, max 90いいえ最後のデプロイの後、ブランチを残す日数です。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branching" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"automatic":true,"seed_sql":"value","lifetime_days":1}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branching', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "automatic": true,
    "seed_sql": "value",
    "lifetime_days": 1
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/branches/{name}/merge

データベースブランチをマージする ブランチにだけあるマイグレーションを、バージョン順にプロジェクト(本番)へ適用します。1つずつ独自のトランザクションで実行し、失敗したらそれだけを元に戻して止まります。データは移しません。ブランチでスキーマを変えるときは、マージされるようにrun_sqlではなくapply_migrationsを使ってください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールmerge_branch
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 422
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいブランチ名です(list_branchesのname)。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branches/my-name/merge" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branches/my-name/merge', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/branches/{name}/reset

データベースブランチを初期化する ブランチのデータベースを削除し、プロジェクトのマイグレーションとシードから作り直します。ブランチのデータとユーザーはすべて失われ、バックアップは残りません。confirm にブランチ名をそのまま入れてください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールreset_branch
本文の上限256 KiB
レスポンスオブジェクト: ref, branch, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいブランチ名です。
confirm本文stringはいブランチ名です。nameと完全に同じである必要があります。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branches/my-name/reset" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branches/my-name/reset', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/branches/{name}

データベースブランチを削除する ブランチと、そのデータベースやキーを削除します。元に戻せないので、confirm にブランチ名をそのまま入れてください。gitブランチを削除するかプルリクエストを閉じると自動で削除されます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールdelete_branch
本文の上限256 KiB
レスポンスオブジェクト: ref, branch, deleted, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいブランチ名です。
confirm本文stringはいブランチ名です。nameと完全に同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branches/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/branches/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/queues

キューの一覧 キュー(pgmqと同じSQL関数: pgmq.send、pgmq.read、pgmq.pop、pgmq.archive、pgmq.delete)と、それぞれのメッセージ数、今読める数、アーカイブされた数、最も古いメッセージの経過時間を返します。enabledはpgmqがインストールされているか、exposedはデータAPI(pgmq_public)から呼べるかです。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールlist_queues
レスポンスオブジェクト: ref
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/queues/metrics

キューの指標 5 分ごとに測ったキューの記録から、各キューの現在の待機数・読めるメッセージ数・最長待ち時間・アーカイブ数と、キュー全体の時間ごとの待機数・送信数・処理数を返します。既定は 24 時間、最大 168 時間。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_queue_metrics
レスポンスオブジェクト: ref, hours, queues, points
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
hoursクエリinteger, min 1, max 168いいえ時間数。既定は 24。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/metrics?hours=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/metrics?hours=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/queues

キューを作成する キューを1つ作ります(pgmq.create)。初回はpgmqもインストールします。メッセージはpgmq.q_<名前>テーブルに保存され、SQLではpgmq.send(名前, メッセージ)で入れ、pgmq.read(名前, 秒, 件数)で読みます。専用データベースでのみ使えます。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールcreate_queue
本文の上限256 KiB
レスポンスオブジェクト: ref
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文stringはいキュー名です(英小文字、数字、_、47文字まで)。
unlogged本文booleanいいえtrueならWALを書かない高速なテーブルで作ります(サーバーが異常終了するとメッセージを失います)。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name"
  }),
})
const result = await response.json()

PUT /api/v1/projects/{ref}/queues/api

キューをデータAPIに公開する trueならpgmq_publicスキーマ(send、send_batch、read、pop、archive、delete)を作り、データAPIからsupabase.schema("pgmq_public").rpc("send", ...)で呼べるようにします。呼び出した人の権限で実行されるため、公開キーやログインユーザーが使うには、キューのテーブルに権限とアクセスルールを与えてください。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールset_queues_api
本文の上限256 KiB
レスポンスオブジェクト: ref
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
exposed本文booleanはいtrueで公開、falseで非公開にします。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/api" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"exposed":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/api', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "exposed": true
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/queues/{name}

キューを削除する キューと、そのメッセージ、アーカイブを削除します(pgmq.drop_queue)。元に戻せないので、confirm にキュー名をそのまま入れてください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールdelete_queue
本文の上限256 KiB
レスポンスオブジェクト: ref, queue, dropped
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいキュー名です。
confirm本文stringはいキュー名です。nameと完全に同じである必要があります。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/queues/{name}/purge

キューを空にする キューのメッセージをすべて削除します(pgmq.purge_queue)。アーカイブは残します。元に戻せないので、confirm にキュー名をそのまま入れてください。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールpurge_queue
本文の上限256 KiB
レスポンスオブジェクト: ref, queue, purged
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいキュー名です。
confirm本文stringはいキュー名です。nameと完全に同じである必要があります。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/my-name/purge" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-project"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/my-name/purge', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "confirm": "my-project"
  }),
})
const result = await response.json()

POST /api/v1/projects/{ref}/queues/{name}/messages

キューにメッセージを入れる JSONのメッセージを1つキューに入れます(pgmq.send)。delay秒の間は読めません。

名前説明
トークンのスコープwrite
ロールdata.write オーナーまたは管理者または開発者
MCP ツールsend_queue_message
本文の上限256 KiB
レスポンスオブジェクト: ref, queue, msg_id
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいキュー名です。
message本文stringはい入れるメッセージです。JSONの値なら何でも構いません。
delay本文integer, min 0いいえこの秒数が過ぎてから読めるようにします。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/my-name/messages" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"message":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/my-name/messages', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "message": "value"
  }),
})
const result = await response.json()

GET /api/v1/projects/{ref}/queues/{name}/messages

キューのメッセージを見る キューの先頭のメッセージを、取り出さずに見ます。読み取り回数も可視性の時刻も変えないため、ワーカーが受け取るはずのメッセージを横取りしません。

名前説明
トークンのスコープread
ロールdata.write オーナーまたは管理者または開発者
MCP ツールpeek_queue
レスポンスオブジェクト: ref, queue, messages
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいキュー名です。
limitクエリinteger, min 1, max 100いいえ見るメッセージの数です(既定は20)。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/my-name/messages?limit=1" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/queues/my-name/messages?limit=1', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/vault

Vaultのシークレットの一覧 Vaultに保存したシークレットの名前と説明です。値は返しません。プロジェクトのコードはシークレットキーでselect decrypted_secret from vault.decrypted_secrets where name = ...として読みます。

名前説明
トークンのスコープread
ロールsecrets.read オーナーまたは管理者または開発者
MCP ツールlist_vault_secrets
レスポンスオブジェクト: ref, enabled, secrets
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/vault" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/vault', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

POST /api/v1/projects/{ref}/vault

Vaultにシークレットを保存する シークレットを1つ暗号化し、プロジェクトのデータベースのvault.secretsに保存します(vault.create_secret)。鍵はプラットフォームが持ち、データベースには保存されないため、ダンプやバックアップには暗号文だけが残ります。初回はVaultを有効にします。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールcreate_vault_secret
本文の上限256 KiB
レスポンスオブジェクト: ref, secret, note
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
name本文stringはいシークレット名です(英字か_で始まり、128文字まで)。
value本文stringはい保存する値です(64KBまで)。二度と表示しません。
description本文stringいいえ説明です(500文字まで)。
curl -X POST "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/vault" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-name","value":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/vault', {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "name": "my-name",
    "value": "value"
  }),
})
const result = await response.json()

PATCH /api/v1/projects/{ref}/vault/{name}

Vaultのシークレットを変更する シークレットの値や説明を変更します(vault.update_secret)。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールupdate_vault_secret
本文の上限256 KiB
レスポンスオブジェクト: ref, secret
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいシークレット名です。
value本文stringいいえ新しい値です。
description本文stringいいえ新しい説明です。
curl -X PATCH "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/vault/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"value":"value","description":"value"}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/vault/my-name', {
  method: 'PATCH',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "value": "value",
    "description": "value"
  }),
})
const result = await response.json()

DELETE /api/v1/projects/{ref}/vault/{name}

Vaultのシークレットを削除する シークレットを1つ削除します。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールdelete_vault_secret
レスポンスオブジェクト: ref, name, deleted
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
nameパスstringはいシークレット名です。
curl -X DELETE "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/vault/my-name" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/vault/my-name', {
  method: 'DELETE',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

GET /api/v1/projects/{ref}/network-restrictions

データベースの接続制限 データベースに直接(5432と6543)接続できるアドレスと、TLSを必須にしているかです。restrictedがfalseならすべてのアドレスが接続できます。your_address_allowedは、このリクエストを送ったアドレスが許可されているかです。

名前説明
トークンのスコープread
ロール組織のすべてのメンバー
MCP ツールget_network_restrictions
レスポンスオブジェクト: ref
ステータスコード200 · 400 · 401 · 403 · 404 · 409
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
curl "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network-restrictions" \
  -H "Authorization: Bearer $ONEEND_TOKEN"
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network-restrictions', {
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}` },
})
const result = await response.json()

PUT /api/v1/projects/{ref}/network-restrictions

データベースの接続制限を変更する 直接接続を許可するアドレス(CIDRの一覧、100個まで)と、TLSを必須にするかを変更します。allow_allならすべてのアドレスを再び許可します。このリクエストを送ったアドレスが一覧にないと、confirmなしでは拒否されます。コンソール、API、run_sqlは接続プーラーを通らないため、制限をかけても元に戻せます。この操作はオーナーと管理者のみ行えます。

名前説明
トークンのスコープwrite
ロールproject.admin オーナーまたは管理者
MCP ツールupdate_network_restrictions
本文の上限256 KiB
レスポンス結果の JSON(形は操作ごとに異なります)
ステータスコード200 · 400 · 401 · 403 · 404 · 409 · 413
名前場所型必須説明
refパスstring, pattern ^[a-z]{20}$はいプロジェクト識別子です。list_projectsで確認できます。
allowed_cidrs本文array<string>いいえ許可するアドレスかCIDRです(例: 203.0.113.0/24)。空の配列なら制限を解除します。
allow_all本文booleanいいえtrueなら制限を解除し、すべてのアドレスを許可します。
enforce_ssl本文booleanいいえtrueならTLS(sslmode=require)の接続だけを受け付けます。既定はtrueです。
confirm本文booleanいいえこのリクエストを送ったアドレスが一覧になくても保存します。
curl -X PUT "https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network-restrictions" \
  -H "Authorization: Bearer $ONEEND_TOKEN" \
  -H "content-type: application/json" \
  -d '{"allowed_cidrs":["value"],"allow_all":true,"enforce_ssl":true,"confirm":true}'
const response = await fetch('https://end.blackall.ai/api/v1/projects/abcdefghijklmnopqrst/network-restrictions', {
  method: 'PUT',
  headers: { authorization: `Bearer ${process.env.ONEEND_TOKEN}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    "allowed_cidrs": [
      "value"
    ],
    "allow_all": true,
    "enforce_ssl": true,
    "confirm": true
  }),
})
const result = await response.json()