skip to content
superbot.gg

Get the calling key

Part of Keys, 6 operations. The overview covers keys, scopes and errors.

GET /v1/keys/whoami

The calling caller key’s own row and effective scopes, and its own metered usage in three windows (usage). A person key’s fields ride on row. Caller keys only; a session gets 403 caller_key_required. A revoked key gets 403 revoked_key, a paused one 403 key_paused.

Any live caller key (Authorization: Bearer sbc_… or x-api-key: sbc_…).

Operation id getCurrentKey in Keys.

Response 200

The key.

application/json: CurrentKey.

  • row CallerKey required
    29 fields
    • id string required
    • user_id string required
    • name string required

      What the tool calls itself, 1-64 chars.

    • mask string required

      The only form shown after mint.

    • created_at string (date-time) required
    • last_used_at string (date-time)
    • revoked_at string (date-time)
    • daily_limit_tokens number

      Daily spend cap in whole credits.

    • monthly_limit_tokens number

      Monthly spend cap in whole credits.

    • caps_unit string

      One of credit.

    • allowed_models array of string

      Glob allow-list over model names; absent = every model. With models_listed: the exact canonical ids the key may dial, and empty = none.

    • models_listed boolean

      true = the listed reading: allowed_models are literal canonical ids (no globs), the key lists exactly those as its per-app picker names, and an empty list allows nothing.

    • model_pins object

      Canonical model id to the stable account id it is pinned to: a pinned model dials only that account, and one id pinned to two accounts gets two picker names.

    • model_aliases object

      Canonical model id (a member of allowed_models) to the custom name its picker shows: 1-64 characters of letters, numbers, dots, dashes or colons; no Cursor routing word (claude, gemini, anthropic, sonnet-, opus-, haiku-, grok, composer); not a house id (superbot, superbot-fast, superbot-omni); unique among this key's forwards; not another model's id. A refused name stores nothing. A custom name replaces the default name for that model.

    • app string

      Forwarding app this listed key's model names are spelled for: cursor, copilot-cli, cline, roo, qwen-code, hermes, openclaw, zazen, default. Set at creation, cannot be changed. Absent = cursor.

    • default_model string

      The model a call that names the bare house agent superbot (the default model of Zapier and n8n), or names no model, is answered by instead: superbot-fast, superbot-omni or a model of one of your own accounts. A call that names any other model is dialled as named. Absent = a call naming superbot gets superbot.

    • route string required

      One of byo, credits, auto.

    • mode string required

      One of model, agent.

    • incognito boolean required
    • device_id string
    • org_id string

      Set on a team key.

    • person_id string

      Set on a key minted for a person: per_ + 16 hex. Every key minted for the same person carries the same id. A person key has no device_id and no org_id, and is billed to the owner.

    • person_name string

      The person's display name, 1-64 characters. Present on every person key.

    • person_email string

      The person's email address, when the owner gave one.

    • person_group string

      A free-text grouping the owner sorts people by (a team, a class), 1-64 characters.

    • prompt_history PromptHistory

      What the owner told a person about their prompts, and how long they are kept. Absent on a key until the owner sets it: the person's prompts are then not visible to the owner and follow the account's own retention.

      3 fields
      • visible_to_owner boolean required

        The owner may read this person's prompts.

      • retention_days integer required

        Whole days the prompts are kept, 1-3650.

      • attested_at string (date-time) required

        ISO 8601 time the owner attested the person was told. The owner's own claim, stored as given and not verified; the answer normalises it to UTC.

    • paused_at string (date-time)

      Set while the owner holds this person: until a PATCH clears it the key answers 403 key_paused at the model gateway, the /v1/keys routes, the relay door and the Cosmos door; every other route does not recognise a held key and answers 401 unauthorized. Held is not revoked. It is written to every live key of the person.

    • person_limit_usd number

      The owner's monthly spend limit for this person, in US dollars to the cent. Set by the owner's PUT /v1/keys/person/{person_id}/limit (the Helper), written to every live key of the person, and absent while no limit is set.

    • scopes array of Scope required

      The EFFECTIVE scopes: stored list or the legacy set, team keys capped. One of gateway:invoke, usage:read, billing:read, keys:read, keys:write, endpoints:read, endpoints:write, teams:read, teams:write, devices:read, devices:write, runs:read, runs:write, mcp:invoke, turns:read.

  • scopes array of Scope required

    One of gateway:invoke, usage:read, billing:read, keys:read, keys:write, endpoints:read, endpoints:write, teams:read, teams:write, devices:read, devices:write, runs:read, runs:write, mcp:invoke, turns:read.

  • usage KeyUsage required

    This key's own metered usage in three windows: day is the trailing 24 hours (the daily cap's window), week the trailing 7 days, month the current UTC calendar month (the monthly cap's window). Each window reports requests (every metered request), prompts (the requests that were the person's own text), tokens and billed_usd.

    3 fields
    • day KeyUsageWindow required
      5 fields
      • requests integer required

        Distinct metered requests (a request that dialed several times counts once). Every request the key made is one, an agent's tool legs, a title helper and a probe included: the call volume, not what the person asked.

      • prompts integer required

        Distinct answered prompts: requests whose last message was the person's own text and that were answered (the gateway marks the request's row only then), counted once per request id. A tool leg, a title helper, a probe and a refused or failed call are requests but not prompts. Only the dials the gateway wrote a row for are read, so the relay door's turns are not counted here.

      • tokens number required

        Every metered leg: fresh input, output and both cache legs.

      • billed_usd number required

        What the window's calls are worth to the caps and the usage pages, USD: the router's settle once read back, else the metered list value.

      • clients object

        Distinct requests of the window made by Zapier or n8n, counted from the x-superbot-client tag (zapier/<v>, n8n/<v>) the request carried. A platform with no request in the window is absent, and the member is absent when neither made one.

        2 fields
        • zapier integer
        • n8n integer
    • week KeyUsageWindow required
      5 fields
      • requests integer required

        Distinct metered requests (a request that dialed several times counts once). Every request the key made is one, an agent's tool legs, a title helper and a probe included: the call volume, not what the person asked.

      • prompts integer required

        Distinct answered prompts: requests whose last message was the person's own text and that were answered (the gateway marks the request's row only then), counted once per request id. A tool leg, a title helper, a probe and a refused or failed call are requests but not prompts. Only the dials the gateway wrote a row for are read, so the relay door's turns are not counted here.

      • tokens number required

        Every metered leg: fresh input, output and both cache legs.

      • billed_usd number required

        What the window's calls are worth to the caps and the usage pages, USD: the router's settle once read back, else the metered list value.

      • clients object

        Distinct requests of the window made by Zapier or n8n, counted from the x-superbot-client tag (zapier/<v>, n8n/<v>) the request carried. A platform with no request in the window is absent, and the member is absent when neither made one.

        2 fields
        • zapier integer
        • n8n integer
    • month KeyUsageWindow required
      5 fields
      • requests integer required

        Distinct metered requests (a request that dialed several times counts once). Every request the key made is one, an agent's tool legs, a title helper and a probe included: the call volume, not what the person asked.

      • prompts integer required

        Distinct answered prompts: requests whose last message was the person's own text and that were answered (the gateway marks the request's row only then), counted once per request id. A tool leg, a title helper, a probe and a refused or failed call are requests but not prompts. Only the dials the gateway wrote a row for are read, so the relay door's turns are not counted here.

      • tokens number required

        Every metered leg: fresh input, output and both cache legs.

      • billed_usd number required

        What the window's calls are worth to the caps and the usage pages, USD: the router's settle once read back, else the metered list value.

      • clients object

        Distinct requests of the window made by Zapier or n8n, counted from the x-superbot-client tag (zapier/<v>, n8n/<v>) the request carried. A platform with no request in the window is absent, and the member is absent when neither made one.

        2 fields
        • zapier integer
        • n8n integer

Errors

StatusCodeWhat to change
401unauthorized

Send a live caller key or session as Authorization: Bearer … or x-api-key. No key yet: create one at /account/api, or sign a user in at /auth.md.

403insufficient_scope

The key lacks the scope in required_scopes; mint a key that holds it.

404not_found

No such resource on this account; check the id.

view .mdopenapi
Request

curl

curl -sS -X GET "https://superbot.gg/v1/keys/whoami" \
  -H "Authorization: Bearer $SUPERBOT_API_KEY"

JavaScript

const res = await fetch(`https://superbot.gg/v1/keys/whoami`, {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.SUPERBOT_API_KEY}`,
  },
});
console.log(res.status, await res.json());

Python

import os
import requests

res = requests.request(
    "GET",
    "https://superbot.gg/v1/keys/whoami",
    headers={
        "Authorization": f"Bearer {os.environ['SUPERBOT_API_KEY']}",
    },
)
print(res.status_code, res.json())
Response

200 The key.

{
  "row": {
    "id": "ck_9f2c41d0",
    "user_id": "your-user-id",
    "name": "your-name",
    "mask": "sbc_ab12…cd34",
    "created_at": "2026-09-01T00:00:00Z",
    "last_used_at": "2026-09-01T00:00:00Z",
    "revoked_at": "2026-09-01T00:00:00Z",
    "daily_limit_tokens": 0,
    "monthly_limit_tokens": 0,
    "caps_unit": "credit",
    "allowed_models": [
      "your-allowed-models"
    ],
    "models_listed": true,
    "model_pins": {},
    "model_aliases": {},
    "app": "your-app",
    "default_model": "your-default-model",
    "route": "byo",
    "mode": "model",
    "incognito": true,
    "device_id": "your-device-id",
    "org_id": "your-org-id",
    "person_id": "per_9f2c41d0a7b35e68",
    "person_name": "your-person-name",
    "person_email": "[email protected]",
    "person_group": "your-person-group",
    "prompt_history": {
      "visible_to_owner": true,
      "retention_days": 0,
      "attested_at": "2026-09-01T00:00:00Z"
    },
    "paused_at": "2026-09-01T00:00:00Z",
    "person_limit_usd": 0,
    "scopes": [
      "gateway:invoke"
    ]
  },
  "scopes": [
    "gateway:invoke"
  ],
  "usage": {
    "day": {
      "requests": 0,
      "prompts": 0,
      "tokens": 0,
      "billed_usd": 0,
      "clients": {
        "zapier": 0,
        "n8n": 0
      }
    },
    "week": {
      "requests": 0,
      "prompts": 0,
      "tokens": 0,
      "billed_usd": 0,
      "clients": {
        "zapier": 0,
        "n8n": 0
      }
    },
    "month": {
      "requests": 0,
      "prompts": 0,
      "tokens": 0,
      "billed_usd": 0,
      "clients": {
        "zapier": 0,
        "n8n": 0
      }
    }
  }
}

401 The bearer is missing, malformed or unknown.

{
  "error": "unauthorized",
  "message": "Send a live caller key or session as Authorization: Bearer … or x-api-key. No key yet: create one at /account/api, or sign a user in at /auth.md.",
  "doc_url": "https://superbot.gg/developers#errors-unauthorized",
  "request_id": "req_5f1c0a9e2b7d4c3a1e0f9b8d"
}

403 The key lacks a scope (insufficient_scope), is revoked, or may not call this route.

{
  "error": "insufficient_scope",
  "message": "The key lacks the scope in required_scopes; mint a key that holds it.",
  "doc_url": "https://superbot.gg/developers#errors-insufficient_scope",
  "request_id": "req_5f1c0a9e2b7d4c3a1e0f9b8d"
}

404 No such resource on this account.

{
  "error": "not_found",
  "message": "No such resource on this account; check the id.",
  "doc_url": "https://superbot.gg/developers#errors-not_found",
  "request_id": "req_5f1c0a9e2b7d4c3a1e0f9b8d"
}