Console and teams
What every page of the SpicyAPI console does and when to use it, and how teams share API keys and spend limits while the team owner pays.
The console at spicyapi.ai/console is where you manage your account in a web browser: money, API keys, logs, teammates and settings. Your own programs never use the console. They call the API with an API key.
New here? Follow Set up your account first: it walks through signing up, adding funds and creating a key in order. This page is the reference for everything else in the console.
Programs use API keys, not your console sign-in
Never copy a console sign-in cookie or session into code. Sign-ins expire, are tied to your browser and have no spend caps. Create an API key for anything automated. See Authentication.
Find your way around
Along the top of every page: your balance with a Top up button, Models, Docs, the notification bell, and Find a page (press ⌘K on macOS or Ctrl + K on Windows and Linux, then type the name of a console page).
On the left, the sidebar. At the very top sits the scope picker, which decides which account or team you are looking at (see Personal scope and teams). Below it the pages are grouped:
| Group | Pages |
|---|---|
| (no heading) | Overview, Billing |
| Developer | API keys, Webhooks, Integrations, Logs |
| Account | Team, Settings, Notifications, Data protection |
| (bottom) | Support |
On a phone, open the sidebar with the menu button.
Console pages at a glance
| Page | Address | Use it to |
|---|---|---|
| Overview | /console | See your balance, recent activity and a getting-started checklist |
| Billing | /console/billing | Add funds, set up auto top-up, read balance activity, see usage, issue invoices |
| API keys | /console/keys | Create, restrict and revoke keys |
| Webhooks | /console/webhooks | Get the signing key for callbacks and check deliveries |
| Integrations | /console/integrations | Copy setup for the SDK, CLI, MCP server and other tools |
| Logs | /console/logs | Look up any task: status, cost, errors, results |
| Team | /console/team | Create teams, invite people, set team spend limits |
| Settings | /console/settings | Profile, password, two-factor authentication, devices, API error language, closing the account |
| Notifications | /console/notifications | Low-balance alert, model updates, which emails you get |
| Data protection | /console/settings/data | Shorten how long results, prompts and uploads are kept; download your data |
| Support | /console/support | Talk privately with our support team |
All addresses start with https://spicyapi.ai. The console's addresses have no language prefix.
What each page does
Overview
The first page after you sign in.
- Getting started checklist: Verify your email, Add funds, Run your first task, plus links for building with the API or creating without code. Hide it with Hide getting started once you are done.
- Available balance, with the amount on hold for tasks still running and what you spent in the last 7 days.
- Requests in the last 7 days and Errors in the last 7 days, with links to Check usage and See logs.
- Recently active models and Recent tasks.
- A warning when the balance is low or empty. With an empty balance, new tasks are rejected until you top up; tasks already accepted still finish.
Billing
Billing has three tabs: Overview, Usage and Invoices.
Billing → Overview (/console/billing)
- Add funds by card, crypto or, when offered, manual transfer. Step-by-step instructions, timing and what to do when a payment does not show up are in Set up your account → Add funds.
- Top-up orders: every top-up with its status (Pending, Paid, Canceled, Refunded). Open a pending manual order with Complete payment to see its payment instructions, submit your transaction reference, or Cancel pending order if you have not paid.
- Auto top-up: save a card and let us top up when the balance runs low. The exact rules, including what happens when a charge fails, are in Set up your account → Auto top-up.
- Balance details: only shown if your account has promotional credit or approved credit. Lists each promotional credit batch with its expiry date.
- Balance activity: every movement of money, newest first. Filter by type and date range, or Export CSV. Typical entries are Top-up, Bonus, On hold (set aside when a task is accepted), Charged (the final price of a successful task), Unused hold returned, and Returned (the full hold given back after a failure or timeout). See Billing for how charges work.
Billing → Usage (/console/billing/usage)
Tasks and spend per day, as a chart, for the last 7, 30 or 90 days or a custom range of up to 92 days (UTC days). Below it, By model: tasks, failures, spend and share for each model, with View tasks to jump to those tasks in Logs. Export CSV downloads the daily totals shown. The API's usage endpoint only reports the key that calls it; this page shows the whole scope selected in the sidebar.
Billing → Invoices (/console/billing/invoices)
Enter your invoice details, issue a payment invoice for a paid top-up or a usage statement for a closed month, and create monthly Account statements (CSV). How each document differs, and how to correct one, is in Set up your account → Invoices and receipts.
API keys
Create, edit and revoke the keys your programs use. The list shows each key's masked value, spend so far, caps, allowed models, IP allowlist, expiry and when it was last used. Search by name or masked key, and filter by Active, Expired or Revoked.
- Create key makes a key in the scope selected in the sidebar. The full key is shown once.
- Edit changes the name, spend caps (daily, monthly, lifetime), allowed models, IP allowlist and expiry. When editing, an empty cap means no cap.
- Revoke stops a key immediately and cannot be undone. Tasks already accepted keep running and are charged.
Every field is explained in Set up your account → Create an API key. The error codes each restriction produces are in Authentication.
In a team: you can create and manage the team's keys only with the Owner, Admin or Developer role. A team key's usage and limits count against the team, and its tasks are paid by the team owner.
Webhooks
A webhook is a message SpicyAPI sends to your own server when a task finishes, so you do not have to keep asking. You choose the address per task with callBackUrl. This page does two things.
Webhook signing key. Every callback is signed, so your server can check it really came from SpicyAPI. Your account has one signing key, shared by all of its API keys, and its value is shown only once, at the moment it is created. New accounts already have a key that nobody has seen, so the card may say Configured while you have nothing to copy:
- Choose Generate (if the card says Not set) or Rotate (if it says Configured).
- Copy the new key into your server's settings, usually as
SPICY_WEBHOOK_SECRET. - Choose I've saved it.
Rotating has no overlap window
The old key stops signing the moment you rotate, and the new one is live at once. Until your server holds the new key, it cannot verify a single callback, including retries of earlier deliveries. Rotate in a quiet period and update your server straight away. Missed results can still be fetched with recordInfo. See Webhooks.
Webhook deliveries. Every callback attempt for your account, newest first, filterable by Delivered, Retrying and Failed, with the number of attempts and the next retry time. Retry sends the original signed message again; make sure your server can safely receive the same message twice. A delivery whose stored content has already been cleared by your retention settings cannot be retried.
Integrations
Copy-and-paste setup for tools that work with SpicyAPI. Pick a tool to see its setup and Open docs.
- Connection basics: the base URL for OpenAI-compatible clients, and a Create a key shortcut. Name a key after the tool that uses it.
- Official tools: the TypeScript SDK, the CLI, the MCP server and the Agent Skill.
- OpenAI-compatible clients: tools that let you change the base URL, for text and video models. Image generation is not on the compatible endpoints.
- Coding agents: editors and agents that add the MCP server, which asks you to confirm every charge.
Snippets use the placeholder MODEL_ID_FROM_CATALOG: replace it with an exact model ID from the live catalog (GET /api/v1/models, spicyapi models list or listModels()). See Models.
Logs
Every task, newest first, including failures. Each row shows the task, model, status, latency and cost.
- Filters: status, model and date range. The search box takes an exact task ID or request ID, which is the fastest way to find the task behind an error report. Up to 500 rows load on the page; narrow the filters for more.
- Export CSV exports every task that matches the filters: by default the last 30 days, at most 92 days or 10,000 rows.
- Open details on a task shows its state, cost, start and finish time, the key used, the task ID and request ID, the error code and Why it failed, the request parameters, the response and download links (Get a link; each link expires, and you can make a new one).
The cost box shows the held amount while a task is running, then the actual charge once settled. A failed task can still have a positive charge for a content refusal explicitly disclosed on the model page; read the settlement rather than inferring a refund from its state.
Three actions appear in the task details:
| Action | What it does | Money |
|---|---|---|
| Retry as new task | Runs the same input again as a new task. Only for tasks that failed, timed out or were canceled, and only while their input is still kept | A new charge. The original record stays as it was |
| Destroy outputs | Deletes the images, videos and text the task produced, its stored result and the prompt you sent. Cannot be undone | Nothing changes: cost, model, state, timestamps and request ID stay on record |
| Remove from history | Clears the task's request and result, queues its media for deletion and hides the row from your logs. Available once the task has ended and been settled | Nothing changes: billing records stay |
None of these cancels a running task: accepted tasks cannot be canceled. See Data retention for what deletion keeps and removes.
In a team: every member sees the team's tasks with status and cost. Only Owner, Admin and Developer see prompts, results and download links. The three actions above are only available to the account that paid for the task.
Team
Create teams, invite people, change roles, set team spend limits, and leave or hand over a team. Working alone? You do not need a team: your keys, balance and usage already work on their own. Everything about teams is in Teams below.
Settings
One page, in groups.
Account
- Email, marked Verified or Unverified. Change the sign-in email with Change sign-in email: we send a confirmation link to the new address (valid 20 minutes) and alert the old one. You need your current password.
- Display name, Account ID (quote it when you contact support) and Member since.
Security
- Password. Changing it signs every device out. An account created with Google or GitHub has no password until you choose Email setup link and set one; you need a password to close the account or transfer a team.
- Signed-in devices. Sign out any device you do not recognize, or Sign out everywhere (including this device) if you think someone else has access. Change your password straight after.
- Two-factor authentication. Choose Set up 2FA, enter your current password, add the account to an authenticator app and enter its six-digit code. From then on every sign-in asks for a code. You also get ten single-use recovery codes: store them somewhere other than your phone, because without the phone they are the only way back in, and they cannot be shown again. New recovery codes replaces all of them; Turn off 2FA removes it. Both first ask you to confirm it is you.
- Security activity: recent sign-ins, new devices and credential changes.
Preferences
- API error language: the language of
msgin error responses and of taskerrorMessage(in status checks and webhooks) for requests made with your API keys. English is the default. A request's ownAccept-Languageheader takes priority, and the codes you should branch on (code,errorCode) never change. See Errors.
Billing and data
- Shortcuts to Billing details and statements (on Billing → Invoices) and Data and privacy (the Data protection page).
Danger zone: Close account
Closing signs out every device, permanently revokes every API key and deletes generated media and retained task content. Billing, audit and reconciliation records are kept, as the Privacy Policy describes. Abandoned top-up orders you never paid are cancelled for you. Closing waits only while:
- tasks are queued or running, or finished tasks are still settling (usually within a minute);
- a top-up payment is still being processed (this clears itself once the payment provider confirms or releases it, usually within a few minutes; contact support if it is still there after an hour);
- the account owes money (approved credit in use or a negative balance), which you clear by topping up;
- a team you own still needs to be transferred to another member or emptied of other members.
The console lists anything still in the way. You confirm with your current password or, if you signed up with Google or another sign-in provider and have no password, with a 6-digit code we email you (valid for 15 minutes).
Closing forfeits your balance
Any balance left on the account is forfeited. It is not refunded or paid out in cash, and the console asks you to confirm that explicitly. Spend it first if you would rather. See the refund policy.
Notifications
- Low balance alert. Turn it on and pick a threshold ($5, $10, $25, $50 or $100). When your available balance drops below it, you get one alert in the notification bell, plus an email if your account has an email address. You are alerted again only after the balance has gone back up to the threshold or above and then dropped below it again. Balances are checked about every 10 minutes.
- Updates for models you follow. Follow a model from its page on spicyapi.ai; Manage opens the list of followed models and product updates.
- Delivery. In-app alerts are always on. Product updates and Offers and announcements emails can be switched on or off. Security, billing and service-critical notices are always sent.
Data protection
- Retention: three separate clocks for Generated results, Prompt text and Uploaded files. You can only make them shorter than the platform maximums (14 days for results, 30 days for prompt text, 24 hours for uploads). Shortening a clock can delete content from tasks you have already run at the next cleanup, which runs within a minute; the console counts what will be affected before you confirm, and deleted content cannot be restored. Download anything you want to keep first.
- Job-content retention: an older card with two settings. Retain job content shows, in days, how long task content is kept; set the time with the three clocks above. Clear content soon after completion clears a finished task's content about an hour after its results have been stored and its webhook delivered.
- Where your data goes: a summary of what the Privacy Policy already commits to, including that your inputs and outputs are not used to train models.
- Download your data: a JSON file with your profile, team roles, API key details (never the keys themselves), retained task data and billing records. Media files are not included, so download results separately.
The full rules, including the per-request override and what deletion keeps, are in Data retention.
Support
Open a private conversation that only you and SpicyAPI support can read. Choose New conversation, a subject, a topic (Account, Billing, API integration, Task or result, Privacy, Enterprise or Something else) and describe what happened. Replies appear in the conversation (status Waiting for support, Waiting for you, Resolved or Closed) and in the notification bell.
Help us help you quickly: include the task ID, the request_id from an error response, or the top-up order ID, and roughly when it happened (UTC). Never paste an API key, a password or card details. You can also email support@spicyapi.ai.
Teams
Personal scope and teams
Every account has a Personal scope. Nobody else is in it, and on your own it is all you need: your personal keys, balance and usage work without a team.
A team lets colleagues share API keys, see the same task history and work under shared spend limits. Each team has its own members, its own keys and its own limits.
The scope picker at the top of the sidebar decides what the console shows:
- Personal: only your own scope.
- A team's name: only that team's keys, tasks, usage and activity.
- All scopes: everything you have access to, combined.
- New team: a shortcut to create one.
It also decides where a new API key goes: a key created while a team is selected belongs to that team.
Who pays for a team
Every task sent with a team's API key is paid from the team owner's balance. This is the single most important rule of teams.
- Members never top up a team and never see the owner's balance, top-ups, payment details or invoices.
- If you are a member and a team key starts returning
40201, the owner has to add funds. - Your own personal keys, balance and usage are never shared with a team you join, and leaving a team does not touch them.
- An owner, admin or developer can create team keys that spend the owner's balance. Owners: set team spend limits and give keys their own caps.
Create a team
- Open Team and choose Create a team (or New team in the scope picker).
- Enter a team name (up to 120 characters) and choose Create team.
You become the team's Owner. One account can own up to 10 workspaces, and your Personal scope counts as one of them, so you can create up to nine teams. There is no limit on how many other people's teams you join.
Invite people
Only an Owner or Admin can invite.
Send the invitation
Open the team, choose Invite a teammate, enter the colleague's email under Invitee email, pick a Role (see Roles and permissions; What can each role do? shows a summary) and choose Send invitation.
What you should see: the invitation in the list as Pending, with Invitation sent or Invitation not sent and its expiry date. The console also shows a one-time invitation token.
What just happened: we emailed a link to that address. The invitation is valid for 7 days.
If the email did not go out
If the list says Invitation not sent, or the email never arrives, share the one-time token through a private channel you trust. It is shown once. Choose Resend to send a new email and get a new token: resending invalidates the old link and token and starts a fresh 7-day period.
Your colleague accepts
They open the link from the email, sign in, or create an account first, with the exact email address the invitation was sent to, and choose Accept invitation. Alternatively, a pending invitation appears on their Team page under Invitations for you with Join team, and a token can be pasted under Have an invitation token?.
What they should see: You're in, and the team appears in their scope picker.
Invitation rules:
- An invitation can only be accepted by an account whose email matches the invited address. A different email gets
Please sign in with the invited email address to accept this invite. - Private self-custody accounts cannot join teams, because they have no email address.
- One pending invitation per email per team. Someone who is already a member cannot be invited again.
- A team can have up to 100 members, including the owner.
- Revoke cancels a pending invitation at any time; you can invite the same person again later.
- An expired invitation cannot be accepted. Send a new one.
Roles and permissions
Roles are shown in the console by these names. The API and exports use the lower-case names in brackets.
| What the member can do | Owner (owner) | Admin (admin) | Developer (developer) | Budget manager (billing) | Read-only (readonly) |
|---|---|---|---|---|---|
| See the team's tasks, status, cost and usage | Yes | Yes | Yes | Yes | Yes |
| Read prompts and results, get download links | Yes | Yes | Yes | No | No |
| See Team activity (money movements from team tasks) | Yes | Yes | No | Yes | No |
| Create, edit and revoke team API keys | Yes | Yes | Yes | No | No |
| Use assets in generations (team library) | Yes | Yes | Yes | Yes | Yes |
| Save to the team asset library | Yes | Yes | Yes | No | No |
| Rename or delete team assets | Yes | Yes | Only assets they saved | No | No |
| Change team spend limits | Yes | Yes | No | Yes | No |
| Invite people, resend or revoke invitations | Yes | Yes, but cannot invite admins | No | No | No |
| Change roles and remove members | Yes | Yes, but not other admins, and cannot make anyone an admin | No | No | No |
| Rename the team | Yes | Yes | No | No | No |
| Transfer ownership | Yes | No | No | No | No |
| Leave the team | No, transfer first | Yes | Yes | Yes | Yes |
Also:
- Nobody can change their own role. The owner's role only changes through a transfer.
- Retrying, destroying or removing a task is only possible for the account that paid for it, whatever the role.
- A member with a role that cannot read content sees Your role can view task status and usage, but cannot read prompts or results.
- Nobody but the owner ever sees the owner's personal balance, top-ups, payment details or invoices. Team activity only lists money movements caused by the team's tasks.
Team spend limits
Every team (and your Personal scope) has a daily and a monthly limit in US dollars, under Team → your team → Spend limits. Owners, admins and budget managers can change them with Edit, then Save limits.
- They cover every task sent with that scope's keys, together.
- Money already charged and money on hold for tasks still running both count.
- The daily limit restarts at 00:00 UTC; the monthly limit on the 1st of each month at 00:00 UTC.
- No cap is the default. Enter
0for no limit. Leaving a field blank keeps its current value. - A task that would go over a limit is refused with
40202and the messageWorkspace daily budget has been reachedorWorkspace monthly budget has been reached. Nothing is created and nothing is held.
Team limits apply on top of each key's own daily, monthly and lifetime caps and the owner's balance. Whichever runs out first stops the task. See Billing for all spend caps.
Change roles and remove members
Open the team. Under Members, pick a new role for a member and confirm Change role; the change is immediate. Remove takes a member out of the team at once: they lose access to the team, its keys and its activity. The owner cannot be removed.
Removing a member does not revoke keys they created or used. Team keys belong to the team, so revoke any key that person still holds on API keys.
Leave a team
Any member except the owner can leave: open the team and choose Leave team, then confirm. Access ends immediately, and only a new invitation brings you back.
Nothing is deleted. The team's keys, tasks and usage stay with the team and stay billed to its owner. If you still hold one of its keys, ask an admin to revoke it. Your personal scope is untouched.
The owner cannot simply leave, because the team's keys would keep spending the owner's money with nobody able to manage them. Transfer ownership first. If you are the only member, invite someone and hand the team to them.
Transfer ownership
Only the owner can transfer, and only to someone who is already a member.
- Open the team, go to Danger zone → Transfer ownership.
- Choose the New owner and enter your Current password. (An account created with Google or GitHub needs to set a password in Settings first.)
- Review and choose Transfer team.
From that moment:
- the new owner's balance pays for every task sent with the team's keys, and all team keys move to the new owner's account;
- you become an Admin;
- tasks accepted before the transfer keep their original billing and are not canceled.
Deleting a team
A team cannot be deleted. An unused team costs nothing and never appears on a bill. Remove its members and leave it idle, or rename it and reuse it instead of creating another.
Team limits at a glance
| Limit | Value |
|---|---|
| Workspaces one account can own | 10, including the Personal scope |
| Members per team | 100, including the owner |
| Invitation validity | 7 days; resending starts a new 7-day period |
| Active API keys per scope | 50 |
| Team name | 1 to 120 characters |

