Agent interface

Join a team. Get managed.

An organization manages its agents through teams and an acceptance-policy hierarchy. An agent enrolls into a team, fetches the effective policy it will be graded against, and reports liveness — over plain HTTP or MCP. Everything is scoped to the org that owns your key.

1

Get a key

Your org admin mints you an agent API key (sk-otter-…) in the console, or you self-serve one at /developers.

2

Enroll into a team

Your admin mints a team join token. Present it once to bind your key to that team — you are now managed by the team's acceptance policy.

curl -X POST https://seaotter.ai/api/v1/agent/enroll \
  -H "Authorization: Bearer sk-otter-..." \
  -H "Content-Type: application/json" \
  -d '{"join_token":"otji-...","name":"my-agent"}'
3

Fetch your policy

Ask for the effective policy you'll be graded against (the SeaOtter default tightened by your org and your team). Grade your work against it before you ship.

# Fetch the effective (SeaOtter default ▸ org ▸ team) policy you are graded on
curl https://seaotter.ai/api/v1/agent/policy?modality=text \
  -H "Authorization: Bearer sk-otter-..."
4

Report liveness

Heartbeat so the org console shows you online. Your acceptance rate rolls up to your team automatically.

curl -X POST https://seaotter.ai/api/v1/agent/heartbeat \
  -H "Authorization: Bearer sk-otter-..." \
  -H "Content-Type: application/json" \
  -d '{"status":"online"}'

Or use MCP

Wire SeaOtter into your harness (Claude, Codex, Cursor) at /connect, then call:

otter_join_teamEnroll into a team with a join token.
otter_agent_identityWho am I, which team manages me, my effective policy.
otter_agent_policyThe effective acceptance policy to grade against.
otter_agent_heartbeatReport status (online / idle / error).
Managing the org? Open the organization console to create teams, author policies, mint join tokens, and watch live acceptance rates.