DEV Community

Andrey Altrouter
Andrey Altrouter

Posted on

A $5-a-month AI plan is a 17-cent daily budget. On GPT-5.6 that's 25 messages.

You've built a chatbot and plan to charge $5 a month for it. One message on GPT-5.6 costs well under a cent, so unlimited use sounds safe. Divide the $5 by 30 days, though, and each subscriber gets about 17 cents of model calls a day. A typical message costs 0.66 cents at OpenAI's published price, so from the 26th message of the day, that user costs you more than they pay.

A monthly price is a daily budget

Model APIs bill per token, a chunk of text about three-quarters of an English word. Input tokens are what you send: your instructions, the recent chat history and the user's question. Output tokens are what the model writes back, and they cost more. Prices are quoted per million tokens, and the ones vendors publish themselves are called list prices.

So one message costs input tokens × input price + output tokens × output price. For this article I fixed a message at 1,500 input tokens and 300 output: a few lines of instructions, a few earlier turns and an answer of two paragraphs. On GPT-5.6, at $2 per million input tokens and $12 per million output, that's $0.003 + $0.0036 = $0.0066.

A flat monthly price is a daily budget per user: $5 / 30 = $0.167. Divide it by the cost of one message and you get how many messages a day the plan pays for. That number still leaves nothing for hosting, card fees or profit.

Five models, one $5 plan

I ran that division for five models from three vendors. List prices come from the catalog of the LLM gateway I work on, read on 24 October 2026. The last column assumes you keep 70% of the $5 as margin, the share of revenue left after paying for the model, so the model gets $1.50 a month, 5 cents a day.

Model List price in / out, $ per 1M One message Messages a day for $5 Keeping 70%
claude-haiku-5.5 0.10 / 0.50 $0.0003 555 166
gpt-5.6-mini 0.20 / 1.20 $0.00066 252 75
gemini-3.8-flash 0.75 / 3.75 $0.00225 74 22
gpt-5.6 2 / 12 $0.0066 25 7
claude-opus-5.5 4 / 20 $0.012 13 4

A message costs 40 times more in the last row than in the first, and the same $5 buys 40 times fewer of them. With a margin, a GPT-5.6 user who sends eight messages a day is already over budget.

Most of your users won't send 25 messages a day, and a flat price is set for the average user. The budget is for the one who isn't average. Someone who wires your bot into a script and sends 1,000 messages a day costs $6.60 a day on GPT-5.6, $198 a month, and pays you $5.

Count dollars per user, not messages

A message limit is easy to write and wrong in both directions: "hi" and a pasted 20-page document count the same. Count dollars instead. The API reports what each call billed in a usage field: prompt_tokens and completion_tokens. Price them, add them to the user's total for the day, and refuse new messages once the total reaches the budget.

from collections import defaultdict
from datetime import date

PLAN_USD, KEEP = 5.00, 0.70         # monthly price, share you keep as margin
PRICE_IN, PRICE_OUT = 2.00, 12.00   # $ per 1M tokens, gpt-5.6 list price
DAILY_USD = PLAN_USD * (1 - KEEP) / 30
spent = defaultdict(float)          # (user, day) -> dollars spent on the model

def allowed(user):
    return spent[user, date.today()] < DAILY_USD

def record(user, prompt_tokens, completion_tokens):
    cost = (prompt_tokens * PRICE_IN + completion_tokens * PRICE_OUT) / 1e6
    spent[user, date.today()] += cost

n = 0
while allowed("alice"):             # one simulated day of 1,500-in / 300-out messages
    record("alice", 1500, 300)
    n += 1
print(f"${DAILY_USD:.4f} a day, {n} messages, spent ${spent['alice', date.today()]:.4f}")
Enter fullscreen mode Exit fullscreen mode

It needs no API key: the loop at the bottom stands in for a day of GPT-5.6 messages and prints $0.0500 a day, 8 messages, spent $0.0528. In your app, call allowed(user) before each request and record(user, r.usage.prompt_tokens, r.usage.completion_tokens) after it, where r is the API response. The eighth message gets through because the check runs before the reply is priced, so a user can go over by one reply at most.

Keep spent in your database rather than in memory, or every restart gives everyone a fresh day. When a user hits the limit, say so and offer something: a reset at midnight, a cheaper model for the rest of the day, or a higher plan.

What this doesn't solve

1,500 tokens in and 300 out is my assumption, not a measurement: in a long chat the input grows every turn, so take averages from usage on real traffic. The check runs before a call and the charge after, so one 100,000-token paste costs $0.20 on GPT-5.6, four days of the 5-cent budget, in a single message. Cap the size of a single request too. And the table says nothing about quality: a model 40 times cheaper may not do your job.

A lower price per token barely moves any of this. The gateway I mentioned sells GPT-5.6 15% under list, at $1.70 / $10.20, which lifts the $5 plan from 25 to 29 messages a day. Switching to gpt-5.6-mini lifts it to 252.

The takeaway

A flat price doesn't make usage free. It gives every user a daily budget: divide the price by 30, divide again by what a message costs, and enforce the result in dollars, not messages.

Top comments (0)