すべてのドキュメントを閲覧

エージェントのサインアップ

Let an AI agent get a Narwhal API key for its user.

AIエージェントは、ブラウザなしでユーザーのために Narwhal API キーを取得できます。エージェントがユーザーのメールアドレスを送ると、少額のお試しクレジット付きで使えるキーがすぐに返ります。ユーザーがメールに届いた6桁のコードをエージェントに伝え、エージェントが確認すると、同じキーが通常のアカウントになります。

エージェントは同じ手順を、プレーンな markdown として /auth.md で読めます。

エージェント向けのルール

  • ユーザーをサインアップさせる前に、ユーザーの了承を得てください。
  • ユーザーが教えてくれたメールアドレスだけを使ってください。
  • ユーザーのメールボックスからコードを自分で読み取ってはいけません。コードはユーザーが伝える必要があります。
  • 429 と 503 の再試行は最大3回までとし、Retry-After の秒数だけ待ってください。それでもだめなら中止して、ユーザーに伝えてください。Retry-After が300秒を超える場合は1日の上限に達しています。すぐに中止して、ユーザーに伝えてください。
  • 403 または 410 のあとで新しくサインアップするときは、先にユーザーに確認してください。サインアップのたびに別のコードがメールで届きます。

キーをリクエストする

ユーザーのメールアドレスを送ります。API キーは不要です。応答は常にステータス 202 で同じ文面なので、そのアドレスにアカウントがあるかどうかは分かりません。api_key は保留中のアカウントですぐに使えます。

POST /v1/agent-signup
curl --request POST \
  --url https://api.narwhalapi.com/v1/agent-signup \
  --header "Content-Type: application/json" \
  --data '{"email": "person@example.com", "agent_name": "Claude Code", "client": "claude-code"}'
レスポンス
{
  "status": "pending",
  "message": "If this email address can be used, Narwhal emailed it a 6-digit code. Ask the user to read the code to you, then call POST /v1/agent-signup/verify with it. The api_key works now with a small trial credit.",
  "api_key": "nw_live_...",
  "trial_credit_micro": 200000,
  "expires_at": "2026-11-16T09:00:00Z",
  "verify_path": "/v1/agent-signup/verify"
}

リクエストフィールド

フィールド必須意味
emailはいユーザーのメールアドレスです。Narwhal はここに6桁のコードを送ります。使い捨てメールのドメインは受け付けません。
agent_nameはいエージェントの自称です。英数字、スペース、_ - / ( ) で1〜80文字。ドットはバージョン番号のように数字と数字の間にだけ使えます。URL、ドメイン名、コロンは使えません。メールでユーザーに表示されます。
clientいいえエージェントが動いているツールです(例: claude-code、cursor)。英小文字、数字、_、- で最大40文字。

レスポンスフィールド

フィールド意味
statusコードが確認されるまでは常に pending です。
messageどのリクエストでも同じ文面です。
api_key保留中のアカウントで使えるキーです。秘密にしてください。表示されるのは一度だけです。
trial_credit_microお試しクレジット(一度きり)をマイクロドルで表したものです(1,000,000 が1ドル)。200000 は0.20ドルです。
expires_at確認されない場合にキーが使えなくなる日時です。リクエストから7日後です。
verify_pathユーザーが伝えたコードを送る先です。

そのアドレスにすでにアカウントがある場合、所有者にはサインインを促すメールが届き、コードは届きません。新しいアドレスにはコードのメールが届きます。コードの有効期間は15分で、間違えられるのは5回までです。1つのアドレスに送るコードのメールは30日間で最大3通です。

コードを確認する

エージェントはユーザーに6桁のコードを読み上げてもらい、最初の手順で受け取ったキーを Bearer トークンとして付けて送信します。コードを伝えることが、ユーザーが規約に同意する方法です。確認は無料で、クレジットが0でも使えます。

POST /v1/agent-signup/verify
curl --request POST \
  --url https://api.narwhalapi.com/v1/agent-signup/verify \
  --header "Authorization: Bearer $NARWHAL_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{"code": "123456"}'
レスポンス
{
  "status": "claimed",
  "message": "Verified. This key is now a normal Narwhal account with the free monthly credit. When you show Narwhal data to the user, credit it as \"Data by Narwhal API\"."
}

リクエストフィールド

フィールド必須意味
codeはいThe 6-digit code from the email Narwhal sent to the user.

レスポンスフィールド

フィールド意味
statusコードが受理されると claimed になります。
messageアカウントの確定を伝え、クレジット表記のルールを繰り返します。

成功すると同じキーが通常のアカウントになり、月10ドル・12か月間の無料クレジットは確認した日から始まります。

ステータスを確認する

無料で、キーが必要です。サインアップの進み具合が分かります。

GET /v1/agent-signup/status
curl --request GET \
  --url https://api.narwhalapi.com/v1/agent-signup/status \
  --header "Authorization: Bearer $NARWHAL_API_KEY"
レスポンス
{
  "state": "pending",
  "trial_credit_left_micro": 200000,
  "expires_at": "2026-11-16T09:00:00Z",
  "code_expires_at": "2026-11-09T09:15:00Z",
  "attempts_left": 5
}

レスポンスフィールド

フィールド意味
statepending、claimed、expired、blocked のいずれかです。
trial_credit_left_micro残りのお試しクレジット(マイクロドル)です。保留中のみ含まれます。
expires_at確認されない場合にキーが使えなくなる日時です。保留中のみ含まれます。
code_expires_atメールで届いたコードが無効になる日時です。保留中のみ含まれます。
attempts_leftコードがロックされるまでに間違えられる残り回数です。保留中のみ含まれます。
verified_atユーザーが確認した日時です。確定後のみ含まれます。

確認前と確認後の制限

確認前(保留中)確認後
クレジット一度きりのお試し0.20ドル。1,000件あたり2ドルで、データ呼び出し約100回分です。月10ドルを12か月間無料、カード不要。その後はプリペイドのチャージです。
毎分のリクエスト数10無料クレジットのみなら50、有料クレジットを持つと500です。
Webhook、イベントストリーム、チームへの招待、チャージ利用できません。利用できます。
有効期間7日間。その後キーは失効します。通常のルールです。

保留中のキーへのすべての応答に X-Narwhal-Account-State: pending が付きます。サインアップ、確認、ステータスの呼び出しに料金はかかりません。料金は1,000回あたり2ドル、Companies は1,000回あたり10ドルです。

お試しクレジットを使い切ると、データ呼び出しは 402 の insufficient_credits を返し、verify_required: true と、エージェントが表示するための message_for_user が付きます。

レスポンス
{
  "status": 402,
  "code": "insufficient_credits",
  "verify_required": true,
  "message_for_user": "The trial credit on this Narwhal key is used up. To go on, please read me the 6-digit code Narwhal emailed you. When Narwhal data is shown to you, it is credited \"Data by Narwhal API\"."
}

ユーザーがコードを伝えない場合、お試しクレジットを使い切るか7日が過ぎるまで、キーは使えます。

コードのメールには、エージェント名、使用ツール、リクエスト元の国が書かれています。「This wasn't me」というリンクは、ボタンが1つだけのページを開きます。リンクを開くだけでは何も変わりません。ボタンを押すとキーが失効し、Narwhal はそのアドレスにメールを送らなくなります。

エラー

エラーはエラーガイドの problem 形式を使います。まず status、次に code で分岐してください。

ステータス公開コードエンドポイント意味
400invalid_queryすべて項目が足りないか形式が正しくありません。たとえば、通常のアドレスではないメールや、6桁ではないコードです。
400invalid_code確認コードが違います。メッセージに残りの試行回数が書かれています。
401invalid_api_key確認、ステータスBearer キーがない、形式が正しくない、不明、または失効しています。
402insufficient_creditsデータ呼び出しお試しクレジットを使い切りました。本文に verify_required と message_for_user が加わります。
403code_locked確認コードを間違えすぎました。新しくサインアップする前にユーザーに確認してください。
403account_pendingWebhook、ストリームチケット保留中のキーは Webhook やイベントストリームを使えません。
404not_an_agent_accountステータスこのキーはエージェントのサインアップで作られたものではありません。
404block_link_invalidブロックメールのリンクが無効です。
404route_not_foundすべてエージェントのサインアップは有効になっていません。
409email_has_account確認このアドレスにはすでにアカウントがあります。キーは失効したので、ユーザーにサインインしてもらってください。
409already_verified確認、ブロックこのキーはすでに確認済みです。コードは二度使えません。
409not_pending確認このサインアップはもう確認待ちではありません(期限切れまたはブロック済み)。
409verify_in_progress確認、ブロックこのキーの別の確認処理が実行中です。ステータスを確認してください。
410code_expired確認コードの有効期限が切れました。新しくサインアップする前にユーザーに確認してください。
422agent_name_not_allowedリクエストエージェント名に使えない文字が含まれています。
422email_domain_not_allowedリクエストメールのドメインは使い捨てメールのサービスです。
429rate_limit_exceededすべてこのネットワークからのリクエストが多すぎるか、保留中のキーの1分あたりの上限を超えました。Retry-After の秒数だけ待ってください。
429domain_daily_limit確認今日、このメールドメインで確認されたアカウントが多すぎます。UTC 0時を過ぎてから同じコードをもう一度試してください。
503agent_signup_unavailableリクエスト、ブロックサインアップは一時的に利用できないか、1日の上限に達しています。Retry-After を確認してください。
503verify_unavailable確認確認は一時的に利用できません。同じコードでもう一度試してください。

エラーガイド全体を読む

Data by Narwhal API

アカウントが無料クレジットしか持っていない間は、Narwhal のデータを人に見せるとき、「Data by Narwhal API」というクレジット表記と Narwhal API へのリンクを付けてください。確認時の message と 402 の message_for_user にも同じルールが書かれています。有料クレジットのあるアカウントは、表記なしでデータを表示できます。

あとでサインインする

After verify, the user can sign in with Google or GitHub using the same email address. That opens the same account, with the same key and balance. 次の内容: 認証ガイド covers storing and rotating the key.

このページは役に立ちましたか?