Skip to content

Usage, limit আর alert

Dashboard, CSV export, GET /v1/tokens/usage endpoint বা CLI দিয়ে Tokens-এ খরচ আর বাকি allowance দেখুন, usage alert চালু করুন, আর rate limit ও Retry-After ঠিকমতো সামলান।

সর্বশেষ আপডেট 11 অক্টোবর 2026

Markdown-এ দেখুন
এই পাতায়

একটা লম্বা session-এ coding agent অনেক খরচ করে ফেলতে পারে। তাই শুরুর আগেই জেনে রাখা ভালো usage কোথায় দাঁড়িয়ে আছে, পরে নয়। এই পেজে আছে Tokens-এ usage দেখার চারটা উপায়, ইমেইল alert, আর প্রতিটা অ্যাকাউন্টে যে rate limit খাটে সেগুলো।

Usage dashboard পড়ুন#

Dashboard-এর Usage পেজে এগুলো দেখা যায়:

  • Totals: খরচ আর request-এর সংখ্যা, সাথে সাম্প্রতিক burn rate।
  • Usage limits: আপনার plan-এর প্রতিটা usage window, তার কতটা খরচ হয়েছে আর কখন reset হবে।
  • একটা chart: গত 7, 14 বা 30 দিনের দৈনিক খরচ ও request, সাথে খরচ অনুযায়ী সাজানো ভাগ-ভাগ হিসাব।
  • Recent activity: সাম্প্রতিক request, model, token আর খরচ সহ।

Dashboard Overview-তে এই সংখ্যাগুলোরই ছোট রূপ আছে, আর Wallet পেজে প্রতিটা top-up ও charge-এর তালিকা পাবেন।

Usage CSV হিসেবে নামান#

Usage পেজের Export CSV চাপলে গত 30 দিনের request record নামে, প্রতি request-এ এক সারি:

Columnমানে
Record IDUsage record-এর ভেতরের id
Request IDওই request-এর x-tokens-request-id
Dateকখন হয়েছে (UTC, ISO 8601)
Modelআপনি যে model id দিয়ে call করেছিলেন
Input Tokens, Output Tokens, Cache Read Tokensওই request-এর token সংখ্যা
Cost (USD)খরচ কত, দশমিকের পর ছয় ঘর পর্যন্ত
Sourceকোথা থেকে এসেছে, যেমন API call হলে v1

কোনো নির্দিষ্ট call নিয়ে Support-কে জিজ্ঞেস করতে হলে Request ID column কাজে লাগবে।

কোড থেকে usage দেখুন: GET /v1/tokens/usage#

GET /v1/tokens/usage আপনার plan, usage window, Wallet ব্যালান্স আর যে key দিয়ে call করছেন তার limit ফেরত দেয়। এটা inference-এর মতো একই API key-তে চলে, আর এর কোনো খরচ ধরা হয় না। তাই script, status bar বা CI থেকে বারবার poll করা যায়।

bash
curl -s https://tokens.bd/v1/tokens/usage \
  -H "Authorization: Bearer $TOKENS_API_KEY"

একটা উদাহরণ response (মানগুলো শুধু বোঝানোর জন্য):

json
{
  "object": "tokens.usage",
  "plan": { "name": "Example Plan", "tier": "monthly", "periodEnd": "2026-10-31T00:00:00.000Z" },
  "windows": [
    {
      "type": "session_5h",
      "label": "5-Hour Session",
      "unit": "usd",
      "limit": 5,
      "used": 1.85,
      "remaining": 3.15,
      "percentUsed": 37,
      "resetsAt": "2026-10-03T14:20:00.000Z"
    },
    {
      "type": "weekly",
      "label": "Weekly Ceiling",
      "unit": "usd",
      "limit": 25,
      "used": 9.4,
      "remaining": 15.6,
      "percentUsed": 38,
      "resetsAt": "2026-10-05T00:00:00.000Z"
    }
  ],
  "wallet": { "balanceUsd": 12.5 },
  "key": { "monthlySpendCapUsd": 20, "allowedModels": null }
}
Fieldমানে
planআপনার চালু plan, আর শুধু pay-as-you-go হলে null
windows[].typesession_5h, weekly বা monthly
windows[].unitCredit-ভিত্তিক window-এ usd (ডলারে), request-সংখ্যার window-এ requests
windows[].percentUsedWindow-র কত শতাংশ খরচ হয়েছে (round করা সংখ্যা)
windows[].resetsAtWindow কখন reset হবে (UTC)
wallet.balanceUsdUSD-তে Wallet ব্যালান্স
key.monthlySpendCapUsdএই key-এর monthly cap, আর কোনো cap না থাকলে null
key.allowedModelsএই key-এ যেসব model চলবে, আর আপনার সব model চললে null

শুধু window-গুলো jq দিয়ে print করতে:

bash
curl -s https://tokens.bd/v1/tokens/usage -H "Authorization: Bearer $TOKENS_API_KEY" \
  | jq -r '.windows[] | "\(.label): \(.percentUsed)% (resets \(.resetsAt))"'

Tokens CLI দিয়ে usage দেখুন#

আপনার agent যদি Tokens CLI দিয়ে সেটআপ করা হয়ে থাকে, তাহলে সেটাও একই endpoint পড়ে:

bash
node tokens.mjs usage
node tokens.mjs usage --json

প্রথম command-টা দেখায় আপনার plan, প্রতিটা window-র progress bar ও reset-এর সময়, Wallet ব্যালান্স আর key-এর cap। --json দিলে ওপরের মতো raw response print হয়।

Usage alert চালু করুন#

Dashboard-এর Notifications থেকে বেছে নিতে পারেন কোন কোন ইমেইল পাবেন:

  • Usage warning: plan-এর limit-এর 50%, 75% ও 90%-এ (প্রতিটা ধাপ আলাদা করে চালু বা বন্ধ করা যায়), আর limit ছুঁয়ে ফেললে। প্রতিটা ধাপে alert যায় একবারই, প্রতি request-এ নয়।
  • Low balance: Wallet $5-এর নিচে নামলে। ডিফল্টে চালু।
  • Renewal reminder: plan-এর period শেষ হওয়ার আগে। Plan নিজে থেকে renew হয় না, তাই এটা চালু রাখুন।
  • Billing receipt আর payment failure।

টিপ

Agent-কে নিজে নিজে চলতে দিয়ে যাওয়ার আগে দুটো জিনিস দেখে নিন: usage warning চালু আছে কি না, আর agent যে key ব্যবহার করে তাতে monthly spend cap আছে কি না। Cap দিতে হয় key তৈরির সময়; দেখুন API key।

Rate limit আর concurrency#

Usage window আর credit-এর পাশাপাশি প্রতিটা অ্যাকাউন্টে আলাদা করে দুটো limit খাটে:

Limitডিফল্টError
প্রতি মিনিটে request, প্রতি user60 RPM (আপনার plan অন্য মান ঠিক করে দিতে পারে); Dashboard playground-এর নিজের 10 RPM429 rate_limited
একসাথে চলা request, প্রতি অ্যাকাউন্টPlan ঠিক করে; plan না থাকলে 3429 concurrency_limit

Rate limit খাটে আপনার অ্যাকাউন্টে, আলাদা আলাদা key-তে নয়। বেশি key বানালে limit বাড়ে না।

Tokens X-RateLimit-* header পাঠায় না। এর বদলে 429 response-এর Retry-After header দেখুন:

CodeRetry-After কী বলে
rate_limitedপরের মিনিট শুরু হতে কত সেকেন্ড বাকি
concurrency_limit2 সেকেন্ড
model_limit_reachedBilling period শেষ হয়ে model-এর allowance reset হতে কত সেকেন্ড বাকি (কয়েক দিনও হতে পারে)
window_exhaustedUsage window reset হতে কত সেকেন্ড বাকি (কয়েক ঘণ্টাও হতে পারে)
rate_limit_exceededএটা আসে upstream provider থেকে, Tokens-এর automatic failover-এ চেষ্টা করার মতো আর কোনো source না থাকার পর। একটু থেমে retry করুন, নয়তো অন্য model নিন

আপনার কোডে Retry-After সামলানো#

Coding agent নিজেই 429 retry করে। নিজের কোডে ছোট limit-এর বেলায় Retry-After পর্যন্ত অপেক্ষা করুন, আর window_exhausted এলে থেমে যান। কারণ request loop-এর ভেতরে ঘণ্টার পর ঘণ্টা ঘুমিয়ে থাকা সাধারণত কেউ চায় না:

retry.py
import os
import time
from openai import OpenAI, RateLimitError

client = OpenAI(
    base_url="https://tokens.bd/v1",
    api_key=os.environ["TOKENS_API_KEY"],
    max_retries=0,  # we handle retries below
)

def ask(messages, attempts=5):
    for attempt in range(attempts):
        try:
            return client.chat.completions.create(
                model="deepseek/deepseek-v4.1-flash",
                messages=messages,
            )
        except RateLimitError as err:
            if err.code == "window_exhausted":
                raise  # resets in hours; report it instead of sleeping
            wait = float(err.response.headers.get("retry-after", 2 ** attempt))
            time.sleep(wait)
    raise RuntimeError("Still rate limited after retries")

print(ask([{"role": "user", "content": "One-line summary of HTTP 429."}]).choices[0].message.content)

Concurrency error কমাতে চাইলে আপনার script একসাথে যত request পাঠায় তা plan-এর concurrency limit-এর মধ্যে রাখুন। আরও বিস্তারিত আছে rate limit ও error পেজে।

এই পাতাটা কি কাজে লেগেছে?

এখনো আটকে আছেন? Support ticket খুলুন

আপনার agent set up করতে সাহায্য লাগবে?

Connection tester দিয়ে সংযোগ পরীক্ষা করে নিন, অথবা একটা API key তৈরি করুন।