How to Track Makes Usage and Avoid Rate Limits

September 16, 2026

Makes are the one currency for everything in getqueryly: the website, the REST API, and MCP tool calls from your AI assistant. If you are building an integration, a report job, or a nightly health check, you need to know how much you have, how fast you are spending, and how to handle the guardrails without losing a run. This is the whole picture in one place.

The Simple Rule

Uploading is free. Everything else spends Makes from one shared pool. Free users get 10 Makes per day, 2 per day without signing in. Paid users buy a balance that never expires and have no daily cap: Starter 50 Makes for GHS 49, Growth 200 for GHS 149, Pro 600 for GHS 399. Web, API and MCP all draw from the same balance, so the Usage page is the single source of truth.

What Each Action Costs

ActionMakesWhere
Upload, Kaggle search, costs checkFreeEntry only
Data question (ds_query, chat)1Every question
Health check (ds_health)2Quality score
Insights (ds_insights), report (ds_report)3Patterns and PDF
Swarm quick, swarm full5, 8Multi-analyst consensus
Visuals, diagram, infographic, notebook, dashboard2, 1, 1, 2, 2Charts and workspaces

Check live numbers anytime: GET /api/makes/costs returns the current table with per-tier RPM, and GET /api/makes/limits returns your remaining balance. The same table drives the pricing page, the Usage page, and the api-docs so they never drift.

Where to Watch Your Spend

The Usage Page

Open /usage while signed in. You get balance from GET /api/makes/limits, per-key activity today with a live RPM readout from GET /api/keys/{hash}/rpm, the published per-key throttle table, and the full Makes cost table from GET /api/makes/costs. No guessing which key spent what, refresh and you see it. Unused keys show idle, active ones show used this minute and when the bucket refills.

In Code

Check before you call, or just call and read the headers after. Both work:

# check remaining before a batch
curl https://getqueryly.com/api/makes/limits -H "X-API-Key: YOUR_API_KEY"
# {"remaining": 23, "dailyLimit": 10, "tier":"starter", ... }

# after any keyed call, read headers
curl -i https://getqueryly.com/api/data-scientist/health/SESSION_ID \
  -H "X-API-Key: YOUR_API_KEY"
# X-RateLimit-Limit: 30
# X-RateLimit-Remaining: 22
# X-RateLimit-Reset: 41

If you drive multiple keys, check per-key RPM at GET /api/keys/{key_hash}/rpm. It returns limit, remaining, and seconds until reset for both regular and AI buckets. The Usage page does this for you automatically.

Per-Key Rate Limits, Honestly

Throttling is per key per minute, not per IP or per account, so one noisy script cannot take down another key. Regular endpoints: free 10, starter 30, developer 60, business 120 per minute. AI endpoints (query, health, insights, swarm, chat, visuals, MCP) get half: 5, 15, 30, 60. Every keyed API and MCP response carries X-RateLimit-Limit, Remaining, and Reset. Over the limit returns 429 with Retry-After in seconds and a plain message like Wait 37 seconds. No extra Makes are spent on the blocked request.

Handling 429 Without Losing Data

429 is not an error, it is a wait. The simplest correct handler respects Retry-After:

import time, requests
for attempt in range(5):
    r = requests.get("https://getqueryly.com/api/data-scientist/health/"+sid,
                     headers={"X-API-Key": key})
    if r.status_code != 429:
        break
    wait = int(r.headers.get("Retry-After", "30"))
    time.sleep(wait)

Two practical tips that keep you out of 429 in the first place:

A Real Nightly Job

Say you run a playbook every morning: upload, health, insights, and a quick swarm. That is 0 plus 2 plus 3 plus 5, which is 10 Makes. On free that is your whole day, on starter it is a fifth of your balance with no daily pressure. The clean open is:

curl -X POST https://getqueryly.com/api/data-scientist/upload \
  -H "X-API-Key: YOUR_API_KEY" -F "[email protected]"
curl https://getqueryly.com/api/data-scientist/health/SESSION_ID -H "X-API-Key: YOUR_API_KEY"
curl https://getqueryly.com/api/data-scientist/insights/SESSION_ID -H "X-API-Key: YOUR_API_KEY"
curl -X POST https://getqueryly.com/api/data-scientist/swarm \
  -H "X-API-Key: YOUR_API_KEY" -F "session_id=SESSION_ID" -F "query=sumarize this week" -F "depth=quick"

If the upload is a repeat with the same session, skip it and you save a round trip. If any call returns 429, wait the Retry-After and retry the same request, do not re-upload.

Frequently Overlooked Details

Think of Makes as fuel and RPM as lane speed. Watch the gauge at /usage before a long drive, respect the speed signs in X-RateLimit headers, and you will never stall mid-job.

Keep Reading

New to keys? Start with API keys done right for naming, expiry, rotate and revoke. Building an integration? See API data analysis guide and how your AI assistant can actually do things for the full endpoint list.

Check Your Usage