Usage and quota
When you read data with an API Token, usage is counted per resource and per day. Each permission that is metered maps to one resource, for example eq.report or trem.rts. A request with no token (a public HTTP data API, or an anonymous public stream) is not counted on any account.
Daily quota
Section titled “Daily quota”- Limit = the resource’s daily quota × the plan multiplier. Each resource’s quota and plan are on Subscriptions on the dashboard. The numbers depend on the plan.
- Reset: every day at 00:00 (Taipei time, UTC+8). This is a calendar day, not a rolling 24 hours. Unused calls do not carry over to the next day.
- A resource with no daily quota: unlimited, and no subscription is required.
- The request that reaches the limit still succeeds. The next one is rejected.
Usage is on Usage on the dashboard.
What counts
Section titled “What counts”| Case | How it is counted |
|---|---|
| HTTP (endpoints that require a token) | 1 per request. Success (2xx), 403, and 429 all count. 401 and 404 do not |
| SSE stream (a connection that sent a token) | 1 per topic per second of connection, settled every 10 seconds. A connection subscribed to 3 topics counts as 3 |
| SSE stream (no token) | Not counted |
Over quota or not subscribed
Section titled “Over quota or not subscribed”An HTTP endpoint that requires a token checks the token, the permission, and the quota, in that order. All of these failures have an empty body. Use the status code.
| Status | Condition |
|---|---|
| 401 | No X-Api-Token, or the token is invalid or revoked |
| 403 | The token lacks that permission; or the account is not subscribed to this resource (and the resource has a daily quota); or the server cannot look up quota data right now |
| 429 | Subscribed, but today’s count is used up (including when the multiplier is 0) |
A 403 usually means the account is not eligible, and trying again later usually stays 403. Check the token’s permissions and the subscription. A 429 means today’s count is used up. It recovers after 00:00 Taipei time, or you can raise the plan on the dashboard.
SSE streams
Section titled “SSE streams”When a topic that requires a permission is over quota:
- Already over at connect time: that topic is rejected with reason
quota exceeded. If every topic in this request is rejected, the HTTP status is 429. Reconnecting within about 60 seconds gets the same result. - Goes over while connected: the server sends
event: unsubscribedwithdata{"topic":"<topic>","reason":"quota exceeded"}. Other topics keep flowing. If it was the last topic on the connection, the server sendsevent: closeanddata: quota exceededinstead, and closes the connection.
The full messages and how to handle them are in Error codes.
Counting delay
Section titled “Counting delay”Usage is rolled up about once a minute, and the server caches quota state for about 1 minute, so:
- After you hit the limit, requests may still succeed for up to about 1 minute. Actual usage can end up slightly over the limit.
- After you subscribe or change the plan, it can take up to about 1 minute to take effect. During that window you can still get 403 or 429.
Do not depend on behavior that stops at exactly the limit. Leave some margin when you need a steady feed.
