Commet
  • Pricing
Log InTry out
Introducción

Inicio rápido

Aprender

Administrar planesConfigurar featuresModelos de consumoAddonsPacks de créditosCódigos promocionalesGrupos de planesPrecios regionalesPagos únicosPeríodos de pruebaOfertas introductorias

Recursos

Referencia del SDKVersionado de APIManejo de erroresTestingCLI

Plugins

Better Auth
DocumentaciónRecursosConstruir con AIAPI ReferenceWebhooks

Configurar features

Define capacidades con tipos de feature boolean, metered y de licencias en Commet.

Las features son bloques reutilizables que definen las capacidades que vendes. Crea una feature una vez y agrégala a múltiples planes con configuraciones distintas.

Tipos de feature

TipoDescripciónEjemplos
BooleanAcceso on/off a una capacidadSSO, branding personalizado, soporte prioritario
MeteredBasada en uso con cantidades incluidasAPI Calls, Storage GB, Emails enviados
SeatsLicencias por usuarioLicencias de Editor, Admin, Viewer

El consumo se define a nivel de plan, no a nivel de feature. Cuando agregas una feature a un plan, especificas cuánto está incluido, si hay excedente y a qué precio.

Crear features en el dashboard

Ve a Features y haz clic en Create Feature. Toda feature necesita un Name (visible para el cliente) y un Code (identificador interno para el SDK, ej. api_calls). Los códigos de feature solo aceptan letras minúsculas, números y guiones bajos (^[a-z0-9_]+$) y deben ser únicos dentro de tu organización.

Las features Metered también requieren un Event Code y un Unit Name (ej. "calls", "GB"). Las features de licencias opcionalmente aceptan un Seat Type (ej. "Editor", "Admin").

Verificar acceso a features

Restringe features según el plan del cliente.

const { data } = await commet.features.check({
  code: 'custom_branding',
  customerId: 'user_123',
})

if (!data.allowed) {
  redirect('/upgrade')
}
response = commet.features.check(
    code='custom_branding',
    customer_id='user_123',
)

if not response.data['allowed']:
    redirect('/upgrade')
result, err := client.Features.Check(ctx, "custom_branding", "user_123")
if err != nil {
    return err
}

if !result.Data.Allowed {
    // redirigir a upgrade
}
ApiResponse<CheckResult> result = commet.features().check("custom_branding", "user_123");

if (!result.getData().isAllowed()) {
    // redirigir a upgrade
}
$result = $commet->features->check('custom_branding', 'user_123');

if (!$result->data['allowed']) {
    // redirigir a upgrade
}
curl "https://commet.co/api/features/custom_branding?customerId=user_123&action=canUse" \
  -H "x-api-key: $COMMET_API_KEY"

Obtener detalles de una feature

Devuelve números de uso, límites y datos de excedente.

const { data } = await commet.features.get({
  code: 'api_calls',
  customerId: 'user_123',
})

// data.current    — uso en este período
// data.included   — incluido en el plan
// data.remaining  — unidades restantes
// data.overage    — unidades sobre el límite
// data.unlimited  — true si no hay tope
response = commet.features.get(
    code='api_calls',
    customer_id='user_123',
)

# response.data['current']    — uso en este período
# response.data['included']   — incluido en el plan
# response.data['remaining']  — unidades restantes
# response.data['overage']    — unidades sobre el límite
# response.data['unlimited']  — true si no hay tope
result, err := client.Features.Get(ctx, "api_calls", "user_123")
if err != nil {
    return err
}

// result.Data.Current    — uso en este período
// result.Data.Included   — incluido en el plan
// result.Data.Remaining  — unidades restantes
// result.Data.Overage    — unidades sobre el límite
// result.Data.Unlimited  — true si no hay tope
ApiResponse<Feature> result = commet.features().get("api_calls", "user_123");

// result.getData().getCurrent()    — uso en este período
// result.getData().getIncluded()   — incluido en el plan
// result.getData().getRemaining()  — unidades restantes
// result.getData().getOverage()    — unidades sobre el límite
// result.getData().isUnlimited()   — true si no hay tope
$result = $commet->features->get('api_calls', 'user_123');

// $result->data['current']    — uso en este período
// $result->data['included']   — incluido en el plan
// $result->data['remaining']  — unidades restantes
// $result->data['overage']    — unidades sobre el límite
// $result->data['unlimited']  — true si no hay tope
curl "https://commet.co/api/features/api_calls?customerId=user_123" \
  -H "x-api-key: $COMMET_API_KEY"

Pre-flight check

Verifica si un cliente puede usar una feature y si se le cobrará un extra.

const { data } = await commet.features.canUse({
  code: 'team_members',
  customerId: 'user_123',
})

if (!data.allowed) {
  return { error: 'Haz upgrade para agregar más miembros' }
}

if (data.willBeCharged) {
  // Mostrar confirmación de excedente
}
response = commet.features.can_use(
    code='team_members',
    customer_id='user_123',
)

if not response.data['allowed']:
    return {'error': 'Haz upgrade para agregar más miembros'}

if response.data['will_be_charged']:
    # Mostrar confirmación de excedente
    pass
result, err := client.Features.CanUse(ctx, "team_members", "user_123")
if err != nil {
    return err
}

if !result.Data.Allowed {
    return errors.New("haz upgrade para agregar más miembros")
}

if result.Data.WillBeCharged {
    // Mostrar confirmación de excedente
}
ApiResponse<FeatureAccess> result = commet.features().canUse("team_members", "user_123");

if (!result.getData().isAllowed()) {
    return Map.of("error", "Haz upgrade para agregar más miembros");
}

if (result.getData().isWillBeCharged()) {
    // Mostrar confirmación de excedente
}
$result = $commet->features->canUse('team_members', 'user_123');

if (!$result->data['allowed']) {
    return ['error' => 'Haz upgrade para agregar más miembros'];
}

if ($result->data['willBeCharged']) {
    // Mostrar confirmación de excedente
}
curl -X POST https://commet.co/api/usage/check \
  -H "x-api-key: $COMMET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "user_123",
    "featureCode": "team_members",
    "quantity": 1
  }'

Listar todas las features

const { data } = await commet.features.list('user_123')
response = commet.features.list(customer_id='user_123')
result, err := client.Features.List(ctx, "user_123")
ApiResponse<List<Feature>> result = commet.features().list("user_123");
$result = $commet->features->list('user_123');
curl "https://commet.co/api/features?customerId=user_123" \
  -H "x-api-key: $COMMET_API_KEY"

Relacionado

  • Trackear uso — Envía eventos de uso para features metered
  • Administrar planes — Agrega features a tus planes
  • Modelos de consumo — Cómo se comportan las features en cada modelo
  • Gestión de licencias — Administra licencias por usuario

¿Cómo está esta guía?

Administrar planes

Crea y administra planes de precios en Commet que generan suscripciones automáticamente.

Modelos de consumo

Conocé las tres formas en que los clientes consumen y pagan por features en los planes de Commet.

En esta página

Tipos de feature
Crear features en el dashboard
Verificar acceso a features
Obtener detalles de una feature
Pre-flight check
Listar todas las features
Relacionado