전체 문서 탐색

에이전트 가입

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초를 넘으면 하루 한도에 도달한 것입니다. 바로 멈추고 사용자에게 알리세요.
  • 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번입니다. 한 주소로 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회입니다.12개월 동안 매달 10달러 무료, 카드 불필요. 이후에는 선불 충전입니다.
분당 요청10무료 크레딧만 있으면 50, 유료 크레딧이 있으면 500입니다.
웹훅, 이벤트 스트림, 팀 초대, 충전사용할 수 없습니다.사용할 수 있습니다.
유효 기간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"라는 링크는 버튼이 하나뿐인 페이지를 엽니다. 링크를 여는 것만으로는 아무것도 바뀌지 않습니다. 버튼을 누르면 키가 폐기되고 Narwhal은 그 주소로 더 이상 이메일을 보내지 않습니다.

오류

오류는 오류 가이드의 problem 형식을 따릅니다. 먼저 status, 그다음 code로 분기하세요.

상태공개 코드엔드포인트의미
400invalid_query전체필드가 없거나 형식이 올바르지 않습니다. 예를 들어 일반 주소가 아닌 이메일이나 6자리가 아닌 코드입니다.
400invalid_code확인코드가 틀렸습니다. 메시지에 남은 시도 횟수가 나옵니다.
401invalid_api_key확인, 상태Bearer 키가 없거나 형식이 올바르지 않거나 알 수 없거나 폐기되었습니다.
402insufficient_credits데이터 호출체험 크레딧을 모두 썼습니다. 본문에 verify_required와 message_for_user가 추가됩니다.
403code_locked확인틀린 코드가 너무 많습니다. 새로 가입하기 전에 사용자에게 물어보세요.
403account_pending웹훅, 스트림 티켓보류 중인 키는 웹훅이나 이벤트 스트림을 사용할 수 없습니다.
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전체이 네트워크에서 요청이 너무 많거나 보류 중인 키의 분당 한도를 넘었습니다. Retry-After에 적힌 초만큼 기다리세요.
429domain_daily_limit확인오늘 이 이메일 도메인에서 확인된 계정이 너무 많습니다. UTC 00:00 이후에 같은 코드로 다시 시도하세요.
503agent_signup_unavailable요청, 차단가입을 일시적으로 사용할 수 없거나 하루 한도에 도달했습니다. 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.

이 페이지가 도움이 되었나요?