Usage & Quotas
Every team has quota limits set by its plan. Xagent meters usage against those limits and enforces them as you create agents and run tasks.
What Is Metered
| Metric | Counts | Resets? |
|---|---|---|
actions_per_month | Every step an agent takes — each tool call or step counts as one. | Monthly |
ai_credits_per_month | Model usage. Steps that call a built-in model draw credits; your own model keys never do. | Monthly |
max_users | Team seats currently filled. | No — live count |
kb_storage_gb | Total size of team knowledge base content. | No — live measurement |
max_agents | Number of agents. Currently unlimited on every sellable plan. | No — live count |
Metrics you may not see
agent_executions_per_month exists but is switched off by default, so it does not appear in your usage. Metrics that are unlimited on your plan are omitted from the response rather than shown as unlimited.
Checking Usage
Read current usage and remaining allowance for your team. Each metric reports used against its limit, where -1 means unlimited:
GET /api/billing/usage{
"actions_per_month": { "used": 1240, "limit": 5000 },
"ai_credits_per_month": { "used": 3180, "limit": 10000 },
"max_users": { "used": 2, "limit": 2 },
"kb_storage_gb": { "used": 0.8, "limit": 3 }
}When You Hit a Limit
Once an allowance is used up, further work of that kind is refused until the next reset or until you upgrade. The API responds with 402 Payment Required and a structured body naming the metric and your plan:
HTTP/1.1 402 Payment Required
{
"code": "quota_exceeded",
"plan": "pro",
"message": "Plan limit reached: actions_per_month (5000/5000)"
}Two situations produce a 402 that people find surprising:
| Situation | What happens |
|---|---|
| Accepting a team invitation | If the team is already at its seat limit, the invitee gets the 402. Only an admin can free a seat or upgrade. |
| Uploading to a knowledge base | Once team storage is full, uploads are refused with a message asking you to upgrade. Deleting files frees space straight away. |
Partner integrations have their own share
If your organisation runs a partner integration, an individual application can have its own slice of the team allowance. When that slice runs out you get client_quota_exceeded instead of quota_exceeded, even though the team still has headroom.
If your subscription lapses
A team with no active paid plan falls back to a state with zero allowance, so agents stop running until a plan is active again. Your agents, knowledge bases and history are not deleted.