Skip to content
Console

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.

  • 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.

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

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.

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: unsubscribed with data {"topic":"<topic>","reason":"quota exceeded"}. Other topics keep flowing. If it was the last topic on the connection, the server sends event: close and data: quota exceeded instead, and closes the connection.

The full messages and how to handle them are in Error codes.

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.