Deprecated: agents follow /auth.md instead, which emails nobody and also works for an existing account. Send your human's email address and get a key that stays pending until the human confirms by email, which grants the free credits. Agents never get spending power without a human. For an address that already has an account, no keys are made: the owner is emailed a sign-in link to create one in the dashboard, and the answer is 202 with the human signup's object (check your email).
Auth: none.
Example
curl -X POST 'https://socialtap.dev/v1/agent_signup' \
-H "content-type: application/json" \
-d '{
"email": "string"
}'Body
JSON. Fields marked nullable may be null; optional ones may be left out.
emailstringYour human's email address: they confirm there before the live key works.
name?stringYour name as an agent, shown to the human and used as the keys' label: at most 40 ASCII letters, digits, spaces, hyphens, underscores or parentheses, starting with a letter or digit (anything else is invalid_input). Default: "Agent".
Response
201
Sign up as an agent: a key that works on confirm
dataobjectShowHide 6 child fields
account_idstringThe new account (unverified until the human confirms).
confirmation_expires_atstring date-timeWhen the confirmation link stops working; then sign up again.
emailstringWhere the confirmation link was sent.
free_creditsintegerCredits the account gets when the human confirms.
live_keyobjectPending until the human confirms by email; until then it can only read GET /v1/account (poll api_key.status).
ShowHide 17 child fields
created_atstring date-timeWhen the key was created, RFC 3339 UTC.
created_by_keystringnullableThe API key (key_…) that last created this key, gave it the admin scope or rotated it: revoking that key also revokes this one if this one has admin. Null when none did, or a person has rotated it in the dashboard since.
created_by_userstringnullableThe person (GET /v1/members user_id) who created this key in the dashboard, or whose key created it. They may have left the account since. Null when no person did (an operator, or a key from before this was recorded).
dashboardbooleantrue for the account's built-in dashboard key: the dashboard's playground runs as it (so its requests are logged, counted and billed like any key's). Nobody holds its secret, so it works only from the signed-in dashboard. Only its spend_limit can be changed (to cap what the playground spends live); renaming, rescoping, restricting, rotating or revoking it is forbidden (details.reason dashboard_key). It is made on first use and revoked with the account.
expires_atstring date-timenullableWhen the key stops working, RFC 3339 UTC; null when it never expires.
idstringKey ID (key_…): manage the key with it. It is not the secret.
ip_allowliststring[]IP addresses or CIDR ranges (IPv4 or IPv6) the key works from; [] = any.
last_used_atstring date-timenullableAbout when the key was last used (updated at most hourly); null when never.
namestringYour label for the key.
objectstringAlways api_key.
One ofapi_key
prefixstringThe secret's first characters, to recognize it.
previous_secret_expires_atstring date-timenullableUntil then the secret this key had before its last rotation works too (rotate_secret), RFC 3339 UTC; null when none does.
revoked_atstring date-timenullableWhen the key was revoked; null while it is not.
scopesstring[]What the key may call: endpoints (data endpoints), jobs (create, read and cancel jobs; includes jobs:read), jobs:read (read jobs and their results), account:read (account, usage, ledger, keys), admin (account settings and key management; includes account:read).
One ofendpointsjobsjobs:readaccount:readadmin
secretstringThe key itself: send it in the x-api-key header. Shown only once: store it now.
spend_limitobjectnullableThe key's spend limit and what it used this interval; null when the key has none.
statusstringpending: created by an agent signup and waiting for the owner's email confirmation (it can only read GET /v1/account). expired: past expires_at.
One ofactivependingexpiredrevoked
objectstringAlways agent_signup.
One ofagent_signup
metaobjectThe shared route meta (see the API reference introduction).
202
The address already has an account: no keys were made; its owner was emailed a sign-in link to create a key for you in the dashboard. Ask them to check their email.
dataobjectShowHide 3 child fields
emailstringWhere the link was sent.
expires_atstring date-timeWhen the link stops working, RFC 3339 UTC.
objectstringAlways signup.
One ofsignup
metaobjectThe shared route meta (see the API reference introduction).
400
400 Bad Request.
invalid_inputNo retryA parameter is missing or malformed, or the link is not one this endpoint takes.
Fix the parameter named in param as the message says. For a link of the wrong kind, call an endpoint listed in details.endpoints, when there is one.
429
429 Too Many Requests.
rate_limitedYes, laterThe account passed its runaway-protection ceiling: a high per-account limit that stops a broken client loop (plans have no rate limit). Requests without an API key (signup, the MCP server's tool listing and find_endpoint) are limited per IP address instead. It also stops an account whose failed requests in the last hour cost far more than its successful ones paid for: failures are free within a limit (the message says so), and successes raise it.
Wait the seconds in the retry-after header, then retry. If your steady traffic needs more, ask support to raise the ceiling; without an API key, send one.
operationId agent_signup.create