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

# Addons

> Ofrece features opcionales que los clientes pueden activar en sus suscripciones por un precio adicional.

Los addons son features opcionales con su propio precio y modelo de consumo que los clientes activan en sus suscripciones. Extienden una suscripción sin modificar el plan base — piensa en SSO, canales SMS o soporte premium.

## Cómo funcionan los addons

| Aspecto | Descripción |
| - | - |
| **Precio** | Precio base fijo por período de cobro, prorrateado al activarse |
| **Cargo al activar** | Cargo inmediato por los días restantes del período actual |
| **Cobro recurrente** | El precio base se suma al recibo del plan en cada ciclo |
| **Desactivación** | Sin reembolso — la feature se detiene de inmediato |
| **Acceso a la feature** | La feature del addon aparece junto a las features del plan |

Cada addon se mapea a exactamente una feature. Al activarse, esa feature queda disponible a través de `featureAccess.get`, `usage.check` y `featureAccess.list` — igual que cualquier feature del plan.

## Modelos de consumo

Los addons declaran su propio modelo de consumo. Los addons booleanos son compatibles con cualquier plan. Los demás modelos requieren coincidir con el modelo del plan.

| Modelo | Descripción | Planes compatibles | Ejemplo |
| - | - | - | - |
| **Boolean** | Desbloquea acceso, sin tracking de uso | Todos los planes | SSO, cumplimiento HIPAA |
| **Metered** | Unidades incluidas + excedente al cierre del período | Planes Metered | SMS: 1000 incluidos, \$0.03/extra |
| **Credits** | El uso consume del pool de créditos del plan | Planes Credits | Resúmenes IA: 5 créditos/uso |
| **Balance** | El uso descuenta del pool de balance del plan | Planes Balance | Procesamiento de imágenes: \$0.015/unidad |

<Note>
  Los addons Credits y Balance consumen del **pool compartido** del plan — no hay un pool separado para el addon. Si el pool se agota, la feature del addon también queda bloqueada.
</Note>

## Crear addons en el dashboard

Ve a **Add-ons** y haz clic en **Create Add-on**. Configura el nombre, precio base, feature y modelo de consumo. Para addons Metered, define las unidades incluidas y la tarifa de excedente. Para Credits, define el costo en créditos por unidad.

El dropdown de feature solo muestra features que no están asignadas a otro addon. Una vez creado, el addon queda disponible para cualquier cliente cuyo plan sea compatible.

## Disponibilidad por estado de la suscripción

Los addons se pueden activar en cualquier suscripción con un método de pago:

| Estado | Puede activar addons |
| - | - |
| **Active** | Sí |
| **Trialing** | Sí — la tarjeta se capturó en el checkout del trial |
| **Free plan** | Sí — la primera compra pide un método de pago |

## Administrar addons

Los addons se gestionan desde el dashboard, el customer portal o la API.

| Acción | Dónde |
| - | - |
| **Crear / actualizar / archivar addons** | Dashboard → Add-ons, o el recurso `addons` de la API |
| **Activar / desactivar** | Dashboard (detalle de suscripción), Customer Portal o la API |
| **Listar addons activos** | API, Dashboard o Customer Portal |

Activa o desactiva un addon en una suscripción vía SDK. La activación cobra el monto prorrateado del período actual; la desactivación detiene la feature de inmediato, sin reembolso.

```typescript theme={null}
await commet.subscriptions.activateAddon({
  id: 'sub_abc123',
  addonId: 'adn_xyz789',
})

await commet.subscriptions.deactivateAddon({
  id: 'sub_abc123',
  addonId: 'adn_xyz789',
})
```

Equivalentes REST: `POST /api/v1/subscriptions/{id}/addons` y `DELETE /api/v1/subscriptions/{id}/addons/{addonId}`. Los addons en sí soportan CRUD completo a través del recurso `addons`: `commet.addons.list`, `get`, `create`, `update` y `delete`.

## Acceso a features

Las features de los addons funcionan exactamente igual que las features del plan — sin manejo especial:

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    // Verificar addon booleano
    const sso = await commet.featureAccess.get({
      customerId: 'user_123',
      code: 'sso',
    })
    // { allowed: true, type: 'boolean', enabled: true }

    // Registrar uso de addon metered
    await commet.usage.track({
      customerId: 'user_123',
      featureCode: 'sms_messages',
      value: 50,
    })

    // Listar todas las features (plan + addons combinados)
    const features = await commet.featureAccess.list({
      customerId: 'user_123',
    })
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    # Verificar addon booleano
    sso = commet.feature_access.get('sso', customer_id='user_123')
    # sso.allowed == True, sso.type == 'boolean'

    # Registrar uso de addon metered
    commet.usage.track(customer_id='user_123', feature_code='sms_messages', value=50)

    # Listar todas las features (plan + addons combinados)
    features = commet.feature_access.list(customer_id='user_123')
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    // Verificar addon booleano
    sso, _ := client.FeatureAccess.Get(ctx, "sso", &commet.GetFeatureAccessParams{
      CustomerID: "user_123",
    })
    // sso.Allowed == true, *sso.Type == "boolean"

    // Registrar uso de addon metered
    value := 50
    client.Usage.Track(ctx, &commet.TrackUsageParams{
      CustomerID: "user_123",
      FeatureCode: "sms_messages",
      Value:      &value,
    })

    // Listar todas las features (plan + addons combinados)
    features, _ := client.FeatureAccess.List(ctx, &commet.ListFeatureAccessParams{
      CustomerID: "user_123",
    })
    ```
  </Tab>

  <Tab title="Java">
    ```java theme={null}
    // Verificar addon booleano
    var sso = commet.featureAccess()
        .get("sso", GetFeatureAccessParams.builder("user_123").build());
    // sso.allowed() == true

    // Registrar uso de addon metered
    commet.usage().track(
        TrackUsageParams.builder("sms_messages", "user_123").value(50.0).build()
    );

    // Listar todas las features (plan + addons combinados)
    var features = commet.featureAccess()
        .list(ListFeatureAccessParams.builder("user_123").build());
    ```
  </Tab>

  <Tab title="PHP">
    ```php theme={null}
    // Verificar addon booleano
    $sso = $commet->featureAccess->get('sso', 'user_123');
    // $sso->allowed === true, $sso->enabled === true

    // Registrar uso de addon metered
    $commet->usage->track(
        featureCode: 'sms_messages',
        customerId: 'user_123',
        value: 50,
    );

    // Listar todas las features (plan + addons combinados)
    $features = $commet->featureAccess->list('user_123');
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    # Verificar addon booleano
    curl "https://commet.co/api/v1/feature-access/sso?customerId=user_123" \
      -H "x-api-key: $COMMET_API_KEY"

    # Registrar uso de addon metered
    curl -X POST https://commet.co/api/v1/usage/events \
      -H "x-api-key: $COMMET_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "featureCode": "sms_messages",
        "customerId": "user_123",
        "value": 50
      }'

    # Listar todas las features (plan + addons combinados)
    curl "https://commet.co/api/v1/feature-access?customerId=user_123" \
      -H "x-api-key: $COMMET_API_KEY"
    ```
  </Tab>
</Tabs>

## Comportamiento de cobro

### Cargo al activar

Cuando un cliente activa un addon de \$50/mes en el día 11 de un período de 31 días (20 días restantes):

| | Valor |
| - | - |
| **Precio completo** | \$50.00 |
| **Prorrateado** | $50 × (20/31) = **$32.26\*\* |
| **Tipo de recibo** | `addon_activation` |

El cargo va al proveedor de pago de la suscripción de inmediato con su propio recibo.

### Recibos recurrentes

A partir del siguiente ciclo de cobro completo, el precio base del addon aparece como una línea separada en el recibo del plan:

```
Plan Pro (base)                             $99.00
API Calls: 12,500 (2,500 excedente × $0.01)$25.00

Addons
  SMS Channel (base)                        $15.00
  SMS: 1,800 (800 excedente × $0.03)        $24.00
  SSO                                       $50.00

Subtotal                                   $213.00
```

### Multi-moneda

Los precios de los addons se definen en USD. Para suscripciones en monedas no USD, el precio se convierte usando el tipo de cambio del plan — el mismo mecanismo que se usa para los precios base de los planes.

## Customer portal

Los clientes pueden autogestionar addons desde el portal:

* **Addons disponibles** — ver addons compatibles con su precio
* **Activar** — diálogo de confirmación con vista previa del cargo prorrateado
* **Addons activos** — administrar addons activos
* **Desactivar** — instantáneo, sin reembolso

<Note>
  Los addons cuya feature ya existe en el plan del cliente se ocultan del portal automáticamente.
</Note>

## Más información

* [Cómo funcionan los cobros y pagos](/docs/es/how-does-billing-work)

## Relacionado

* [Modelos de consumo](/docs/es/consumption-models) — Metered, Credits y Balance explicados
* [Configurar features](/docs/es/configure-features) — Define las features que los addons pueden desbloquear
* [Packs de créditos](/docs/es/credit-packs) — Otra forma de extender las capacidades del plan
* [Administrar suscripciones](/docs/es/manage-subscriptions) — Ciclo de vida y gestión de suscripciones
* [Customer Portal](/docs/es/customer-portal) — Donde los clientes activan addons


## Related topics

- [addon.deactivated](/docs/es/webhooks/addon-deactivated.md)
- [addon.activated](/docs/es/webhooks/addon-activated.md)
- [Addon deactivated](/docs/es/webhooks/2026-05-25/addon-deactivated.md)


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