# AI agents can now provision their own FishDog API key — no signup, no credit card, no browser

Canonical HTML: https://fish.dog/product-releases/ai-agents-can-now-provision-their-own-fishdog-api-key-no-signup-no-credit-card-no-browser
JSON Feed: https://fish.dog/product-releases/feed.json
RSS Feed: https://fish.dog/product-releases/rss.xml
Published: 13 May 2026
Updated: 14 May 2026
Version: Agent Self-Register v1
Release Type: Feature
Breaking Change: No
Author: Phillip Gales

## Primary Claim

FishDog has launched agent self-registration: any AI agent with a local Anthropic-account identity can provision its own free-tier API key by POSTing to `/cli/auth/agent-register` — no signup, no credit card, no browser-based OAuth, no callback listener.

## Summary

AI agents can now self-register for a FishDog free-tier API key in one terminal call — no signup, no credit card, no browser. Claude Code gets a working key in under five seconds and starts running studies against ~12 shared synthetic personas.

## LLM Summary

DOCUMENT TYPE: Product Release Note
TOPIC: Agent self-register v1 — AI agents provision their own FishDog free-tier API key

Release: AI agents can now provision their own FishDog API key — no signup, no credit card, no browser
Version: Agent Self-Register v1
Release type: Feature
Breaking change: No

Summary: FishDog has launched a new onboarding path designed for autonomous AI agents. Any agent with a local Anthropic-account identity (Claude Code today; others by direct API call) can provision its own free-tier rk_free_* API key in a single HTTPS round-trip — no human signup, no credit card, no browser-based OAuth, no callback listener, no registration form. Total wall-clock: under five seconds.

How it works: The new endpoint POST /cli/auth/agent-register accepts an identity payload (email, Anthropic account UUID, per-install fingerprint) and returns a working rk_free_* free-tier key. A helper script (curl -sL https://cat.fish.dog/scripts/agent-register.sh | bash) reads those fields from Claude Code's existing ~/.claude.json, POSTs them, and saves the result to ~/.ditto_free_tier.env. The free-tier scope (free:ask) authorizes POST /v1/free/questions and GET /v1/jobs/{job_id} against approximately 12 demographically-balanced US adult synthetic personas — the same surface that browser-OAuth users have always had, just provisioned in one round-trip.

What this unlocks: Claude Code skills that involve research can now bootstrap themselves the first time they're invoked. Headless and CI contexts can register without a browser. Developers prototyping AI-agent integrations don't need to commit a credit card or wait for an account-provisioning email. The endpoint is identity-agnostic, so any AI agent that exposes equivalent local identity (Cursor, Copilot, custom orchestrators) can call it directly.

Key rotation: Re-running the script rotates the key. The response includes previous_key_revoked: true on a rotation. A replacement free-tier key for the same FishDog user can still poll jobs created with the prior key — research groups, studies, direct-question runs, and asked questions are user/org-scoped and survive rotation. Continuity is preserved by design.

Paid orgs: Stripe-billed paid orgs receive a managed paid rk_live_* key with broader scopes (the post-upgrade refresh path). Invoiced or other non-Stripe paid orgs receive status="login_required" pointing at the dashboard.

Fallback: If ~/.claude.json is absent (not running Claude Code), the script prints the browser-OAuth fallback command. The OAuth flow is unchanged and remains fully supported. There is no broken signup path.

Audience: AI-agent developers, autonomous-agent operators, Claude Code users, the broader agentic-AI tooling ecosystem.

Author: Phillip Gales, FishDog
Platform: FishDog (fish.dog)

## Key Takeaways

- AI agents can self-register for a FishDog free-tier API key in one terminal call — `curl -sL https://cat.fish.dog/scripts/agent-register.sh | bash`. No human signup, no credit card, no browser, no callback listener. Total round-trip: under five seconds.
- The new endpoint `POST /cli/auth/agent-register` takes an Anthropic-account identity payload and returns an `rk_free_*` key with `free:ask` scope. Any AI agent exposing equivalent local identity can use it directly.
- Free-tier keys authorize the same surface that browser-OAuth keys do: `POST /v1/free/questions` and `GET /v1/jobs/{job_id}` against ~12 demographically-balanced shared synthetic personas. Same response shape, same docs, same SDKs.
- Re-running the script rotates the key. The new key — for the same FishDog user — can still poll jobs created with the prior key. Research groups, studies, and questions are user/org-scoped and unaffected by rotation. Continuity is preserved by design.
- AI agents on Stripe-billed paid FishDog orgs receive a managed paid `rk_live_*` key from the same endpoint — the post-upgrade refresh path. Invoiced paid orgs receive `status="login_required"` for dashboard-driven key management.

## Full Release

For the last two years, every "AI agent gets a research API" story has had the same friction at step one: a human has to sign up. Open a browser, click through Google OAuth, fill in an org name, paste the key back into the terminal. For an autonomous agent — Claude Code halfway through a research task, a Cursor session running customer-discovery questions, an unattended cron job assembling competitive intelligence — that human-in-the-loop step kills the workflow.

We removed it. Today, AI agents provision their own FishDog free-tier API key directly from the terminal, in one HTTPS round-trip, with zero human intervention.

### The one command

If you're running Claude Code, this is the entire onboarding flow:

`curl -sL https://cat.fish.dog/scripts/agent-register.sh | bash`

Under five seconds later, you have a working `rk_free_*` key saved to `~/.ditto_free_tier.env` and a sample query you can run against the API. No browser opened. No callback URL captured. No copy-paste. No credit card. No registration form.

### What's actually happening

Claude Code already stores your Anthropic-account identity locally in `~/.claude.json` — your account UUID, your email, and a per-install fingerprint. Those happen to be exactly the fields FishDog needs to issue a free-tier key. So instead of bouncing through a browser, the script reads what's already on your machine and POSTs it directly to a new endpoint, `POST /cli/auth/agent-register`. The endpoint validates, mints, and returns. Total wall-clock: typically under three seconds; cap of five.

The key the agent receives is a regular `rk_free_*` key with the `free:ask` scope. It authenticates against `POST /v1/free/questions` (submit a research question to a shared panel of ~12 demographically-balanced US adult personas) and `GET /v1/jobs/{job_id}` (poll for results). It's the same key, the same API surface, the same response shape that browser-OAuth users have had for months — just provisioned in a single round-trip instead of three.

### Why this matters for AI agents

This is the difference between "an agent can use FishDog if a human sets it up first" and "an agent can use FishDog autonomously." The implications stack up quickly:

- **Claude Code workflows that involve research.** A skill like `ditto-product-research` can now bootstrap itself the first time it's invoked. No "first, please get an API key" warning. The agent reads `~/.claude.json`, registers, and starts the study.
- **Headless / CI / cron contexts.** An unattended agent on a server (no human present, no browser) can register itself with the same one-liner. As long as `~/.claude.json` exists from the Claude Code install, it works.
- **Try-before-you-buy at the speed of curiosity.** A developer prototyping an AI-agent integration with FishDog doesn't need to commit a credit card, fill in a sales form, or wait for an account-provisioning email. They run one command and they're querying personas.
- **Agent-to-agent composition.** Other AI agents — Cursor, Copilot, custom orchestrators — can POST directly to `/cli/auth/agent-register` with whatever identity fields they expose. The endpoint is identity-agnostic; only the `agent-register.sh` helper script is Claude-Code-specific.

The pattern we're committing to here is broader than this single release. Identity that already exists on the machine should be sufficient for agents to bootstrap their own access to agent-friendly APIs. We expect this to become the default pattern across the AI-agent ecosystem; we want FishDog to be one of the first APIs that ships it cleanly.

### What re-running does

If you re-run the script — same machine, same identity, fresh shell — the prior free-tier key is revoked and a new one is minted. The response carries `previous_key_revoked: true` so callers can detect the rotation. Replace any cached credentials.

Critically, **rotation does not invalidate access to your prior work**. A replacement free-tier key for the same FishDog user can still poll free-tier jobs that were created with the prior key (`GET /v1/jobs/{job_id}` returns `200`, not `403`). Research groups, studies, direct-question runs, and asked questions were always user/org-scoped and survive rotation the same way. If your agent rotates keys mid-task, the task keeps working.

### What happens on a paid account

If your Anthropic account is linked to a FishDog organisation that's already on a paid plan, the endpoint detects it and the response depends on your billing mode:

- **Stripe-billed paid orgs:** the endpoint returns a managed paid `rk_live_*` key with broader scopes. Your agent gets a working paid key without a re-OAuth or dashboard round-trip. This is the post-upgrade refresh path — designed exactly for the moment a user upgrades and wants their agent to keep working.
- **Invoiced or other non-Stripe paid orgs:** the endpoint returns `status="login_required"`. Manage keys through the FishDog dashboard; the account manager handles issuance.

### Fallback for non-Claude-Code clients

If `~/.claude.json` isn't present on the machine — you're not running Claude Code — the script detects it and prints the existing browser-OAuth one-liner. The OAuth path is unchanged and remains fully supported. There is no broken signup path.

### Where to start

The fastest way to try this: open a Claude Code terminal and paste the one-liner above. Then [read the full guide](https://fish.dog/claude-code/free-tier-key) for the contract details, rate limits, FAQ, and the integration patterns that work best with synthetic-persona research.

---

## Quotable Insights

> For the last two years, every 'AI agent gets a research API' story has had the same friction at step one: a human has to sign up. We removed it.
> Under five seconds later, you have a working `rk_free_*` key saved to `~/.ditto_free_tier.env`. No browser opened. No credit card. No registration form.
> Identity that already exists on the machine should be sufficient for agents to bootstrap their own access to agent-friendly APIs. We expect this to become the default pattern across the AI-agent ecosystem.
> If your agent rotates keys mid-task, the task keeps working. Continuity is preserved by design.

## FAQ

### How does agent self-registration work?

An AI agent runs one terminal command — curl -sL https://cat.fish.dog/scripts/agent-register.sh | bash — which reads the agent's existing Anthropic-account identity from ~/.claude.json (email, account UUID, install fingerprint), POSTs it to FishDog's /cli/auth/agent-register endpoint, and saves the returned rk_free_* API key to ~/.ditto_free_tier.env. Total time: under five seconds. No browser, no Google sign-in, no copy-paste, no credit card, no registration form.

### Do I need to sign up or provide a credit card?

No. The free tier requires no signup, no registration form, no credit card, and no human in the loop. The AI agent uses its existing local identity (the same Anthropic account that authenticated Claude Code) to provision the key directly.

### Which AI agents can use this?

Claude Code is the supported first-class client today — its existing ~/.claude.json file already contains everything the endpoint needs. Other AI agents (Cursor, Copilot, custom orchestrators) can call the underlying endpoint POST /cli/auth/agent-register directly with whatever identity payload they expose. The endpoint is identity-agnostic; only the helper shell script is Claude-Code-specific.

### What can a free-tier key do?

Free-tier keys carry the free:ask scope and authorize two endpoints: POST /v1/free/questions to submit a research question against a shared panel of approximately 12 demographically-balanced US adult synthetic personas, and GET /v1/jobs/{job_id} to poll for results. Same response shape and same docs as the OAuth-provisioned free-tier keys. Custom demographics, larger panels, and study-level workflows require a paid plan.

### What happens if I re-run the registration script?

The second run rotates the key — the prior rk_free_* is revoked and a new one is minted. The response includes previous_key_revoked: true so the agent can detect rotation. Critically, prior work survives rotation: a replacement free-tier key for the same FishDog user can still poll jobs created with the prior key, and persistent records (research groups, studies, questions) are user/org-scoped and unaffected. If your agent rotates keys mid-task, the task keeps working.

### What if I'm not running Claude Code?

The script detects the absence of ~/.claude.json and points you at the existing browser-based OAuth one-liner. The OAuth flow is unchanged and remains fully supported. There is no broken signup path — every flow ends with a working free-tier key in ~/.ditto_free_tier.env.
