Skip to content

RecipesOpenAI

OpenAI spend

Free

Spend today, spend this month, daily spend, cost by model, and approaching the limit. Botopticon is not affiliated with OpenAI.

Access

OpenAI admin key, usage read

Required. Env OPENAI_ADMIN_KEY. Mode api_key.

  • Usage: Read

In the OpenAI platform create an admin API key that can read organization usage and costs. A project secret that only calls models cannot read spend. Access varies by org role. If usage endpoints return 403, the board cannot guess; leave the tiles stale.

Botopticon never stores this key. Paste it into the agent, cron host, or MCP config. Revoke it any time.

Board

Sample · not your account.

Spend today

Sample · UTC

$184

+$22

Updated just nownowOpenAI

Month spend

Sample · Month to date

$4.12k

Updated just nownowOpenAI

Daily spend

Sample · Last 7 days

$184.00

min $98.00max $184.00

SunMonTueWedThuFriSat

Updated just nownowOpenAI

By model

Sample · Month to date

  1. 1gpt-4.1
    2,400USD
  2. 2o-series
    1,100USD
  3. 3embeddings
    620USD

Updated just nownowOpenAI

Command Tiles

Pro

Sample · not your account. The agent puts the ask on the board. You answer there. How Command Tiles work

  • Pause at 80% spend

    Needs you

    Sample data

    Approval · OpenAI

    Pause new jobs at 80% of the month budget?

    Updated just nownowOpenAI

    Needs you
  • Budget is 82%. Next?

    Needs you

    Sample data

    Question · OpenAI

    Month-to-date spend is 82% of the org budget. What next?

    Updated just nownowOpenAI

    Needs you

Tiles

  • Spend today
  • Month spend
  • Daily spend
  • By model
  • Usage limitneeds you
  • Usage limit. needs_you when month-to-date spend is at or above 80% of a budget you can read. Skip if none.

Setup

  1. 01

    Mint a read-only OpenAI key

    Create a key that can only read. Never grant write. Keep it in the env var named on this page, on the agent or cron host. Botopticon never stores this key. Paste it into the agent, cron host, or MCP config. Revoke it any time.

  2. 02

    Create a Botopticon token

    In the app, open Connection tokens and create one named after this board. Copy it. It is shown once. That token posts to Botopticon. It is not the source key.

  3. 03

    Paste the prompt into your agent

    Open the tab for Grok Bot, Muse, MCP, Cursor, Claude, or curl. Replace $BOTOPTICON_TOKEN. The agent fetches the source, maps the fields in the brief, and posts. Do not paste canned sample JSON as live data.

  4. 04

    Wait for the first live post

    These numbers are sample. They flip when your agent posts with the key. Each tile keeps the sample label until that tile is replaced.

Snippets

Same recipe, one tab per platform. Replace $BOTOPTICON_TOKEN with a connection token. The prompt fetches the source and posts. Do not paste the sample numbers as live data.

Grok Bot

Paste this into Grok Bot. Replace $BOTOPTICON_TOKEN with a Botopticon connection token. Connect MCP at https://www.botopticon.com/api/mcp if this client can. If it cannot, POST /api/ingest with curl instead.

Keep the Botopticon board "OpenAI spend" current.

Source: OpenAI.
You hold OPENAI_ADMIN_KEY (OpenAI admin key, usage read). Botopticon never stores this key. Paste it into the agent, cron host, or MCP config. Revoke it any time.
In the OpenAI platform create an admin API key that can read organization usage and costs. A project secret that only calls models cannot read spend. Access varies by org role. If usage endpoints return 403, the board cannot guess; leave the tiles stale.
Scopes (read-only): Usage: Read.

What to fetch and how to map it:
Read the current OpenAI Admin usage and costs docs. Objects: organization usage buckets, costs by line_item or model.
Spend today: cost since midnight UTC (or the org timezone you already use) as format currency.
Month: cost since the first of the month.
Daily spend: one point per day for the last 7 days.
By model: rank line items or models by cost. If the API groups as line_item, use that label.
Approaching limit: status needs_you when month-to-date spend is at or above 80% of the budget you already track, or when OpenAI returns a limit you can read. Do not invent a budget the org does not have. If you cannot read a limit, post idle and skip needs_you.

Tiles:
- Spend today — bot OpenAI, tile spend-today, type kpi.
- Month spend — bot OpenAI, tile spend-month, type kpi.
- Daily spend — bot OpenAI, tile spend-7d, type trend.
- By model — bot OpenAI, tile by-model, type leaderboard.
- Usage limit — bot OpenAI, tile near-limit, type status. needs_you when month-to-date spend is at or above 80% of a budget you can read. Skip if none. Sample shows needs_you true.

Post each tile to https://www.botopticon.com/api/ingest with header Authorization: Bearer $BOTOPTICON_TOKEN and Content-Type: application/json. Fields: bot, tile, type, title, subtitle, props, needs_you, ttl_seconds.
If you can call MCP, connect to https://www.botopticon.com/api/mcp with the same Authorization header and call post_tile once per tile. The arguments are those JSON fields.
Do not invent numbers. Do not post the same body again just to keep a tile fresh. Set ttl_seconds to how often the value really changes. A quiet tile should show as stale.
When needs_you is true, say who is asking, what it is about, and the ask.

FAQ

What if usage endpoints return 403?
Admin usage access varies by org. Leave the tiles stale. Do not invent spend. A project secret that only calls models cannot read this board.
Does this run on the Free plan?
Yes. Every tile in this recipe is a Free type. A Free workspace still has one board and 8 live tiles. Using this recipe adds the sample tiles to that board.
Does Botopticon store the OpenAI key?
Botopticon never stores this key. Paste it into the agent, cron host, or MCP config. Revoke it any time.
How does the board stay current?
Your agent fetches the source and posts when a number changes. Set ttl_seconds to how often that work really happens, so a quiet tile shows as stale. Use a timer only for data no agent touches, and then at most daily. Never post the same content again just to keep a tile fresh.