認証
個人用 API トークン、OAuth アプリのトークン、セッションの JWT で Nodaro API の呼び出しを認証します。API トークンの作成、対象の限定、ワークスペースへの紐付け、取り消しも説明します。
Nodaro API へのリクエストは、すべて Authorization ヘッダーのベアラートークンで認証します。自分のサーバーが自分のアカウントで Nodaro を呼び出す場合は、個人用 API トークン(ndr_…)を使います。プロダクトがほかの Nodaro ユーザーの代わりに動作する場合は OAuth アクセストークン(ndr_app_…)を、セルフホスティングの Community エディションのインストール環境ではセッションの JWT を使います。
Authorization: Bearer ndr_4f1c…使う認証情報の選び方
| あなたの状況 | 使うもの | トークンの形式 |
|---|---|---|
| サーバー、cron ジョブ、CI パイプラインから、自分の Nodaro アカウントをスクリプトで操作する | 個人用 API トークン | ndr_ の後に 16 進数 64 文字 |
| ほかのユーザーの Nodaro アカウントでワークフローを実行するプロダクトを構築する | OAuth アクセストークン | ndr_app_ の後に 16 進数 64 文字 |
| セルフホスティングの Community エディションを自分用に運用する | 自分のセッションの JWT | eyJ で始まる JWT |
簡単な見分け方があります。サーバーが必要とする認証情報が 1 組だけで、同意画面も不要なら、API トークンを使います。多くの顧客がそれぞれ、自分のアカウントへのアクセスをあなたのアプリに許可する必要があるなら、OAuth を使います。
API トークンは、Nodaro Cloud と Business エディションで利用できます。Community エディションでは、代わりに、ログイン中のセッションのアクセストークンを使って、同じエンドポイントを呼び出します。エディションを参照してください。
API トークンを作成する
APIトークンのページを開く
Nodaro にログインし、設定 › APIトークンを開きます。Nodaro Cloud では、このページは https://app.nodaro.ai/settings/api にあります。
トークンを作成する
トークンを作成をクリックします。APIトークンを作成ダイアログで、自分で区別するための名前(prod-scheduler など)と、1〜120 のレート制限(リクエスト/分)を入力します。デフォルトは 1 分あたり 30 リクエストです。
すぐにコピーする
作成をクリックし、トークンをシークレットストアにコピーします。トークンが表示されるのは 1 回だけです。Nodaro はトークンの SHA-256 ハッシュしか保存しないため、紛失したトークンは復元できません。その場合は、新しいトークンを作成してください。
このページには、各トークンの名前、プレフィックス、レート制限、最終使用日時、作成日時が一覧表示されます。トークンの横にあるスイッチでトークンのオンとオフを切り替え、ゴミ箱のボタンでトークンを削除します。
API トークンのルール
- 1 つのアカウントにつき最大 10 個:有効かどうかにかかわらず数えます。無効にしたトークンも数に含まれるので、枠を空けるには削除してください。11 個目のトークンは、
400 limit_reachedで拒否されます。 - 有効期限も利用額の上限もありません:トークンは、無効にするか削除するまで使えます。トークンを削除すると、すぐに取り消されます。
- トークンはあなたとして動作します:トークンによる呼び出しは、すべてあなたのアカウントとして実行され、あなたのクレジットを消費します。
- ログインに使うプロバイダーで再確認されることはありません:ID プロバイダーからアカウントが削除されても、その前に作成したトークンは、取り消すまで使え続けます。すべてのトークンを、期限のない認証情報として扱ってください。
トークンを一部のワークフローに限定する
トークンは、特定のワークフローのリストに限定できます。これを、トークンのワークフロースコープと呼びます。スコープを設定したトークンは、リストにあるワークフローだけを実行、確認でき、それ以外のワークフローでは 403 forbidden が返されます。リストが空の場合、トークンは、あなたが所有するすべてのワークフローを実行できます。
スコープは、下のエンドポイントでトークンを作成または更新するときに、workflowIds フィールドで設定します。リストに入れられるのは、個人スペースにあるワークフローだけです。ワークスペースにあるワークフローを指定すると、400 invalid_workflow が返されます。
コードからトークンを管理する
| メソッド | パス | 内容 |
|---|---|---|
POST | /v1/api-tokens | トークンを作成します。ボディは { name, workflowIds, rateLimit } です。トークン全体が表示されるのは、このレスポンスだけです。 |
GET | /v1/api-tokens | トークンを、その設定とワークスペースの紐付け(workspaceId)とともに一覧表示します。トークン自体が返されることはありません。 |
PATCH | /v1/api-tokens/:id | 名前、ワークフロースコープ、レート制限、有効フラグ、ワークスペースの紐付けを変更します。 |
DELETE | /v1/api-tokens/:id | トークンを削除します。トークンはすぐに使えなくなります。 |
この 4 つのルートは、ログイン中のセッションからしか使えません。API トークンではなく、セッションの JWT を送ってください。個人用 API トークンや OAuth トークンは、403 forbidden で拒否され、「API token management is only available from a logged-in session」というメッセージが返されます。Community エディションのインストール環境では、作成と一覧表示のルートが、required_edition: "business" とともに 403 edition_required を返します。
トークンを 1 つのワークスペースに紐付けるには、トークンをワークスペースに紐付けるを参照してください。
トークンを送る
GET /v1/me は、有効なトークンであれば、そのトークンの背後にあるアカウントを返します。そのため、トークンを確認するいちばん手軽な方法です。トークンがない場合、無効な場合、取り消されている場合は、401 unauthorized が返されます。
curl https://app.nodaro.ai/v1/me \
-H "Authorization: Bearer $NODARO_API_KEY"{
"data": {
"id": "5bf0d884-47b1-468e-a7b2-2433f957b267",
"email": "ada@example.com",
"displayName": "Ada",
"avatarUrl": null,
"tier": "pro",
"isAdmin": false
}
}import { createClient, StaticTokenAuth } from '@nodaro/sdk'
const client = createClient({
baseUrl: 'https://app.nodaro.ai',
auth: new StaticTokenAuth(process.env.NODARO_API_KEY!),
})
const me = await client.me()
console.log(me.email, me.tier)nodaro auth login --token "$NODARO_API_KEY"
nodaro auth status組織に属するアカウントでは、同じレスポンスに、そのアカウントが所属する組織とワークスペースも含まれます。ワークスペースと組織を参照してください。
SDK は認証プロバイダーからトークンを受け取るので、トークンの取得方法を自分で選べます。
| プロバイダー | 用途 |
|---|---|
StaticTokenAuth | サーバー上の固定のトークンです。API トークンまたは OAuth アクセストークンを使います。 |
supabaseAuth(supabase) | Nodaro のインストール環境とログインを共有するブラウザーアプリです。セッションのトークンはリクエストのたびに読み取られるため、更新は自動で行われます。 |
CallbackAuth | 独自の処理です。たとえば、トークンを更新するセッションストアです。コールバックが null を返すと、ヘッダーは送られません。 |
CLI は、トークンを ~/.config/nodaro/config.json に、ファイルモード 0600 で保存します。--profile と --base-url を付けると、セルフホスティング環境用に 2 つ目のログインを保持できます。たとえば nodaro auth login --profile local --base-url http://localhost:3000 です。
OAuth アクセストークン
ユーザーがそれぞれ自分の Nodaro アカウントをあなたのプロダクトに接続する場合は、OAuth を使います。あなたのサーバーは、認可コードを、ndr_app_ で始まるアクセストークンと交換します。トークンの有効期間は 90 日で、リフレッシュトークンはありません。期限が切れたら、ユーザーにもう一度同意画面を通ってもらいます。
OAuth トークンには、ユーザーが許可したスコープだけが含まれます。トークンにないスコープを必要とするルートは 403 insufficient_scope を返し、エラーの missingScope にそのスコープが示されます。ほとんどの API 連携で必要になるスコープは、次のとおりです。
| スコープ | 許可される操作 |
|---|---|
workflows:read | ユーザーのワークフローの読み取りです。GET /v1/workflows、GET /v1/workflows/:id、そのエクスポート、プロジェクトごとの一覧が対象です。 |
workflows:write | ワークフローの作成、変更、インポート、削除です。 |
workflows:execute | POST /v1/workflows/:id/run による、ワークフローの実行です。 |
jobs:read | ジョブのステータスと結果の読み取りです。一括ポーリングも含みます。 |
個人用 API トークンとセッションの JWT には、スコープがありません。どちらも、あなた自身のアカウントとして動作します。フローの全体、すべてのスコープ、同意画面については、OAuth アプリを参照してください。
ログイン中のセッションが必要なルート
いくつかのルートは Nodaro の Web アプリのためにあり、API トークンと OAuth トークンのどちらも拒否します。
| ルート | トークンへの応答 |
|---|---|
/v1/api-tokens(トークンの管理) | 403 forbidden |
/v1/billing/*(購入手続き、クレジットのチャージ、自動チャージ、購入履歴) | 403 forbidden |
| ノードプリセットへの書き込み | 403 forbidden |
/v1/copilot/*(ワークフロー Copilot) | 403 in_app_only |
/v1/http-credentials(Webhook 出力(Webhook Output)ノード用に保存したキー) | 403 in_app_only |
コードからワークフローを構築するには、ワークフローのエンドポイント、SDK、または MCP サーバーを使います。
クライアントを識別する
X-Nodaro-Client ヘッダーを送ると、Nodaro はその値を、そのリクエストが作成するすべてのジョブの発信元として記録します。
X-Nodaro-Client: sdk/1.10.0認識される形式は、sdk/<version>、cli/<version>、extension/<name> の 3 つだけです。このヘッダーは認証されないため、それ以外の値は無視されます。@nodaro/sdk と @nodaro/cli はこのヘッダーを自動で送るので、ヘッダーが必要になるのは、REST API を直接呼び出す場合だけです。省略しても問題ありません。その場合、ジョブは一般的な API 呼び出しとして記録されます。
ブラウザーから呼び出す場合は、このヘッダーを送らないでください。ブラウザーの Origin ヘッダーがすでにサイトを示しており、Nodaro はそちらを優先します。SDK は、ブラウザーで動作しているときは、このヘッダーを自動で省きます。
トークンはサーバーに置く
ブラウザーのコードに入れたトークンは、開発者ツールを使えば誰でも読み取れ、あなたのクレジットを消費できてしまいます。トークンは、サーバーのルート、エッジ関数、またはプラットフォームのシークレットストアに置き、ブラウザーはあなたのサーバーとだけ通信するようにします。
Browser -> your server (holds NODARO_API_KEY) -> Nodaro APIたとえば Next.js では、ルートハンドラーの中で、NEXT_PUBLIC_ プレフィックスの付かない環境変数からトークンを読み取ります。OAuth トークンを使ってブラウザーから Nodaro を呼び出す場合は、開発者アプリの許可するオリジンに、サイトのオリジンを追加してください。
トークンでセルフホスティング環境を接続する
個人用 API トークンは、セルフホスティング環境の生成を Nodaro Cloud で実行するための、いちばん簡単な方法でもあります。セルフホスティング環境で、NODARO_CLOUD_URL に Nodaro Cloud のアドレスを、NODARO_API_KEY にトークンを設定します。すると、すべての生成が Nodaro Cloud で実行され、料金はトークンのアカウントに請求されます。OAuth による接続は必要ありません。Nodaro Cloud への接続を参照してください。
請求アカウントが 1 つのデプロイメント
一部のデプロイメントには、すべてのユーザーの料金を支払う請求アカウントが 1 つだけあります。そのようなデプロイメントでは、次のようになります。
- トークンを作成できるのは、請求アカウントだけです。ほかのユーザーには
403 api_tokens_payer_onlyが返されます。既存のトークンは、引き続き、その所有者が一覧表示したり取り消したりできます。 - 「設定」に「APIトークン」のカードは表示されません。請求アカウントは、
/settings/apiを直接開きます。 - トークンによる呼び出しは、すべてデプロイメントの共有残高から支払われます。
- トークンでは、その共有残高を読み取れません。請求アカウントのトークンで残高を読み取ると
403 payer_balance_jwt_onlyが返され、デプロイメントの請求用ルートでは403 payer_requiredが返されます。
エラー
| ステータス | コード | 意味 |
|---|---|---|
| 400 | limit_reached | 有効かどうかにかかわらず、すでに 10 個のトークンがあります。先に 1 つ削除してください。 |
| 400 | invalid_workflow | workflowIds のエントリが、個人スペースにあるワークフローではありません。 |
| 400 | token_workspace_mismatch | 1 つのワークスペースに紐付けたトークンが、別のワークスペースを指定する X-Nodaro-Workspace ヘッダーとともに送られました。 |
| 401 | unauthorized | トークンがないか、無効か、期限切れか、取り消されています。 |
| 403 | forbidden | トークンのワークフロースコープにこのワークフローが含まれていないか、ルートにログイン中のセッションが必要です。 |
| 403 | insufficient_scope | OAuth トークンに、ルートが必要とするスコープがありません。missingScope にそのスコープが示されます。 |
| 403 | in_app_only | このルートは、Nodaro の Web アプリ専用です。 |
| 403 | edition_required | このルートには、より上位のエディションが必要です。required_edition に、最低限必要なエディションが示されます。 |
| 403 | api_tokens_payer_only | 請求アカウントが 1 つのデプロイメントでは、その請求アカウントだけがトークンを作成できます。 |
| 403 | sso_required | デプロイメントがログインを自身の ID プロバイダーに限定しており、このセッションのアカウントは、その ID プロバイダー経由で作成されていません。API トークンと OAuth トークンは影響を受けません。 |
すべてのエラーは、同じエンベロープを使います。完全な一覧は、エラーを参照してください。
よくある質問
関連ページ
OAuth アプリ
ワークスペースと組織
レート制限
エラー
TypeScript SDK
最終更新