> ## Documentation Index
> Fetch the complete documentation index at: https://commet.co/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Gestión de Quota

> Gestiona balances de quota durables con el SDK de Commet.

La quota trackea un balance durable y contable que sube y baja a medida que tus clientes crean y eliminan — tareas, números de WhatsApp, automatizaciones en paralelo. Commet incluye un monto con el plan y cobra el excedente por unidad automáticamente.

## Componentes de la quota

| Componente | Descripción | Ejemplo |
| - | - | - |
| **Feature Code** | El recurso de quota que trackeas | `tasks`, `whatsapp_numbers`, `automations` |
| **Count** | Unidades a agregar, quitar o setear | `5`, `10`, `50` |
| **Billing** | El excedente se cobra por unidad en el plan | \$1/tarea/mes |

## Dashboard

Crea una feature de quota desde **Features**, luego **Create Feature**, y elige el tipo **Quota**. Los feature codes deben crearse antes de usarse. Ve los balances actuales en la página de detalle de suscripción de cada cliente.

## Agregar quota

Por defecto agrega 1 unidad si se omite `count`.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    await commet.quota.add({
      customerId: 'user_123',
      featureCode: 'tasks',
      count: 5,
    })
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    commet.quota.add(
        feature_code='tasks',
        count=5,
        customer_id='user_123',
    )
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    customerID := "user_123"
    count := 5
    client.Quota.Add(ctx, &commet.AddQuotaParams{
        FeatureCode: "tasks",
        Count:       &count,
        CustomerID:  &customerID,
    })
    ```
  </Tab>

  <Tab title="Java">
    ```java theme={null}
    commet.quota().add(AddQuotaParams.builder("tasks").customerId("user_123").count(5L).build());
    ```
  </Tab>

  <Tab title="PHP">
    ```php theme={null}
    $commet->quota->add(
        featureCode: 'tasks',
        count: 5,
        customerId: 'user_123',
    );
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST https://commet.co/api/v1/usage/quota \
      -H "x-api-key: $COMMET_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "customerId": "user_123",
        "featureCode": "tasks",
        "count": 5
      }'
    ```
  </Tab>
</Tabs>

## Quitar quota

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    await commet.quota.remove({
      customerId: 'user_123',
      featureCode: 'tasks',
      count: 2,
    })
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    commet.quota.remove(
        feature_code='tasks',
        count=2,
        customer_id='user_123',
    )
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    customerID := "user_123"
    count := 2
    client.Quota.Remove(ctx, &commet.RemoveQuotaParams{
        FeatureCode: "tasks",
        Count:       &count,
        CustomerID:  &customerID,
    })
    ```
  </Tab>

  <Tab title="Java">
    ```java theme={null}
    commet.quota().remove(RemoveQuotaParams.builder("tasks").customerId("user_123").count(2L).build());
    ```
  </Tab>

  <Tab title="PHP">
    ```php theme={null}
    $commet->quota->remove(
        featureCode: 'tasks',
        count: 2,
        customerId: 'user_123',
    );
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X DELETE https://commet.co/api/v1/usage/quota \
      -H "x-api-key: $COMMET_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "customerId": "user_123",
        "featureCode": "tasks",
        "count": 2
      }'
    ```
  </Tab>
</Tabs>

La quota no puede bajar de cero — quitar más que el balance actual devuelve `400 insufficient_balance`.

## Setear cantidad exacta

Usa `set` cuando sincronizas el balance desde tu sistema.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    await commet.quota.set({
      customerId: 'user_123',
      featureCode: 'tasks',
      count: 10,
    })
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    commet.quota.set(
        feature_code='tasks',
        count=10,
        customer_id='user_123',
    )
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    customerID := "user_123"
    client.Quota.Set(ctx, &commet.SetQuotaParams{
        FeatureCode: "tasks",
        Count:       10,
        CustomerID:  &customerID,
    })
    ```
  </Tab>

  <Tab title="Java">
    ```java theme={null}
    commet.quota().set(SetQuotaParams.builder("tasks", 10L).customerId("user_123").build());
    ```
  </Tab>

  <Tab title="PHP">
    ```php theme={null}
    $commet->quota->set(
        featureCode: 'tasks',
        count: 10,
        customerId: 'user_123',
    );
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X PUT https://commet.co/api/v1/usage/quota \
      -H "x-api-key: $COMMET_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "customerId": "user_123",
        "featureCode": "tasks",
        "count": 10
      }'
    ```
  </Tab>
</Tabs>

## Obtener una quota

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    const allowance = await commet.quota.get({
      customerId: 'user_123',
      featureCode: 'tasks',
    })
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    allowance = commet.quota.get(
        customer_id='user_123',
        feature_code='tasks',
    )
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    allowance, err := client.Quota.Get(ctx, &commet.GetQuotaAllowanceParams{
        CustomerID:  "user_123",
        FeatureCode: "tasks",
    })
    ```
  </Tab>

  <Tab title="Java">
    ```java theme={null}
    var allowance = commet.quota()
            .get(GetQuotaAllowanceParams.builder("user_123", "tasks").build());
    ```
  </Tab>

  <Tab title="PHP">
    ```php theme={null}
    $allowance = $commet->quota->get(
        customerId: 'user_123',
        featureCode: 'tasks',
    );
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://commet.co/api/v1/usage/quota?customerId=user_123&featureCode=tasks" \
      -H "x-api-key: $COMMET_API_KEY"
    ```
  </Tab>
</Tabs>

**Respuesta:**

```json theme={null}
{
  "featureCode": "tasks",
  "current": 30,
  "included": 50,
  "remaining": 20,
  "billedQuantity": 0,
  "unlimited": false,
  "overageEnabled": true
}
```

`current` es el balance en vivo, `included` es el monto gratis del plan, `remaining` es lo que queda antes del excedente, y `billedQuantity` son las unidades extra cobradas este período. Pasa un ID de Commet (`cus_xxx`) o tu ID externo como `customerId`. Se requiere una suscripción activa por cliente.

## Obtener todas las quotas

Devuelve una asignación por cada feature de quota en la suscripción activa del cliente.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    const allowances = await commet.quota.getAll({
      customerId: 'user_123',
    })
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    allowances = commet.quota.get_all(
        customer_id='user_123',
    )
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    allowances, err := client.Quota.GetAll(ctx, &commet.GetAllQuotaAllowancesParams{
        CustomerID: "user_123",
    })
    ```
  </Tab>

  <Tab title="Java">
    ```java theme={null}
    var allowances = commet.quota()
            .getAll(GetAllQuotaAllowancesParams.builder("user_123").build());
    ```
  </Tab>

  <Tab title="PHP">
    ```php theme={null}
    $allowances = $commet->quota->getAll(
        customerId: 'user_123',
    );
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://commet.co/api/v1/usage/quota/all?customerId=user_123" \
      -H "x-api-key: $COMMET_API_KEY"
    ```
  </Tab>
</Tabs>

## Aprende más

* [Cómo funciona el cobro por quota](/docs/es/how-does-quota-based-billing-work)

## Relacionado

* [Configurar features](/docs/es/configure-features) — Crea features de quota en tus planes
* [Administrar planes](/docs/es/create-plans) — Planes que incluyen pricing por quota
* [Trackear uso](/docs/es/track-usage) — Envía eventos de uso para features metered


## Related topics

- [Gestión de Licencias](/docs/es/seat-management.md)
- [Quota](/docs/es/how-does-quota-based-billing-work.md)
- [Gestioná recibos](/docs/es/manage-invoices.md)
- [Better Auth](/docs/es/better-auth.md)
- [quota.exceeded](/docs/es/webhooks/quota-exceeded.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.