API › Catalogs

Limits

The free plan limits as a public endpoint: the recording cap every recorder states, and the quotas behind every refusal.

The free plan has a small table of numbers: how long a hosted recording may run, how much storage an account holds, how many saves a day. Every refusal prints its number from that one table, and every recorder states the recording cap before a take starts. This endpoint is the table, public, so a recorder that cannot import it reads it live.

The limits

GET vos.so/api/limits needs no credential and answers with the free plan:

JSON
{
  "plan": "free",
  "limits": {
    "recordingMaxSeconds": 1800,
    "recordingMaxBytes": 536870912,
    "storageBytes": 5368709120,
    "dailySaves": 10,
    "privateVoses": 20,
    "versionsPerVosDay": 100
  }
}

The full object carries every quota the API enforces; the keys above are the ones a client states before an action. With a session, an API key or the service token, the answer is the caller's own plan.

Signed out, the answer is cached for five minutes. Access-Control-Allow-Origin is *, so a browser extension or a page on another origin can read it.

Who reads it

  • vos record reads recordingMaxSeconds before a take and stops at it, the way pressing Stop would, so what lands is what vos.so hosts. Offline it falls back to its built-in 30 minutes; --max-duration overrides either.
  • The recorder extension reads it when its record page opens, for the same cap and the same sentence.
  • The in-page recorder and the settings usage strip import the table directly; they never fetch it.