• Precios
  • Blog
Iniciar sesiónAgendá una demo
Introducción

Inicio rápido

Aprender

Administrar planesConfigurar featuresModelos de consumoAddonsPacks de créditosGrupos de planesPagos únicos

Recursos

Referencia del SDKVersionado de APIManejo de erroresTestingCLI

Plugins

Better Auth
DocumentaciónRecursosConstruir con AIAPI ReferenceWebhooks

Configurar features

Definí capacidades y consultá el acceso actual o el consumo propuesto de un customer.

Las features son capacidades reutilizables que pueden asociarse a varios planes con diferentes límites y precios.

Tipos de feature

TipoPara qué sirve
booleanCapacidades on/off como SSO
usageCantidades medidas como llamadas a la API
seatsLicencias por usuario
quotaBalances enteros durables que pueden subir y bajar

El código de la feature es el identificador que usan Feature Access, Usage, Seats y Quota. Usá letras minúsculas, números y guiones bajos.

Estado actual de una feature

Usá featureAccess.get para leer si el customer tiene acceso actualmente y los contadores de la feature:

import { Commet } from "@commet/node";const commet = new Commet({ apiKey: "ck_xxx" });const featureAccess = await commet.featureAccess.get({  code: "api_calls",  customerId: "user_123",});
from commet import Commetcommet = Commet("ck_xxx")feature_access = commet.feature_access.get(    "api_calls",    customer_id="user_123",)
client, err := commet.New("ck_xxx")if err != nil {	log.Fatal(err)}ctx := context.Background()featureAccess, err := client.FeatureAccess.Get(ctx, "api_calls", &commet.GetFeatureAccessParams{	CustomerID: "user_123",})if err != nil {	log.Fatal(err)}
import co.commet.Commet;import co.commet.params.GetFeatureAccessParams;var commet = Commet.builder().apiKey("ck_xxx").build();var featureAccess = commet.featureAccess().get(    "api_calls",    GetFeatureAccessParams.builder("user_123").build());
use Commet\Commet;$commet = new Commet('ck_xxx');$featureAccess = $commet->featureAccess->get(    code: 'api_calls',    customerId: 'user_123',);

La response exacta se discrimina por el type de feature. Puede incluir estado habilitado, uso, unidades incluidas, unidades restantes, seats o valores de quota.

Usá la operación de lista para obtener el estado actual completo de features del customer:

import { Commet } from "@commet/node";const commet = new Commet({ apiKey: "ck_xxx" });const response = await commet.featureAccess.list({ customerId: "user_123" });
from commet import Commetcommet = Commet("ck_xxx")feature_access_list_result = commet.feature_access.list(customer_id="user_123")
client, err := commet.New("ck_xxx")if err != nil {	log.Fatal(err)}ctx := context.Background()featureAccessListResult, err := client.FeatureAccess.List(ctx, &commet.ListFeatureAccessParams{	CustomerID: "user_123",})if err != nil {	log.Fatal(err)}
import co.commet.Commet;import co.commet.params.ListFeatureAccessParams;var commet = Commet.builder().apiKey("ck_xxx").build();var featureAccessListResult = commet.featureAccess().list(    ListFeatureAccessParams.builder("user_123").build());
use Commet\Commet;$commet = new Commet('ck_xxx');$featureAccessListResult = $commet->featureAccess->list(customerId: 'user_123');

Las listas de Feature Access devuelven el envelope estándar { object, data, hasMore, nextCursor }.

Consumo propuesto

Usá usage.check antes de una acción cuando necesites saber si se puede consumir una cantidad y cuánto costaría:

import { Commet } from "@commet/node";const commet = new Commet({ apiKey: "ck_xxx" });const usageCheck = await commet.usage.check({  customerId: "user_123",  featureCode: "api_calls",});
from commet import Commetcommet = Commet("ck_xxx")usage_check = commet.usage.check(    customer_id="user_123",    feature_code="api_calls",)
client, err := commet.New("ck_xxx")if err != nil {	log.Fatal(err)}ctx := context.Background()usageCheck, err := client.Usage.Check(ctx, &commet.CheckUsageAvailabilityParams{	CustomerID: "user_123",	FeatureCode: "api_calls",})if err != nil {	log.Fatal(err)}
import co.commet.Commet;import co.commet.params.CheckUsageAvailabilityParams;var commet = Commet.builder().apiKey("ck_xxx").build();var usageCheck = commet.usage().check(    CheckUsageAvailabilityParams.builder("user_123", "api_calls").build());
use Commet\Commet;$commet = new Commet('ck_xxx');$usageCheck = $commet->usage->check(    customerId: 'user_123',    featureCode: 'api_calls',);

La response se discrimina según el consumption model del plan:

  • metered informa uso actual, restante, incluido y precio de overage.
  • credits informa el costo estimado en créditos y los pools disponibles.
  • balance informa el monto monetario estimado y el balance actual.

No uses Feature Access como reemplazo de este check. Feature Access describe el estado actual; Usage Check evalúa el consumo propuesto.

Registrar el consumo

Cuando la acción termina correctamente, registrala mediante Usage:

import { Commet } from "@commet/node";const commet = new Commet({ apiKey: "ck_xxx" });const usageEvent = await commet.usage.track({  featureCode: "api_calls",  customerId: "user_123",  model: "example",  inputTokens: 1,  outputTokens: 1,});
from commet import Commetcommet = Commet("ck_xxx")usage_event = commet.usage.track(    feature_code="api_calls",    customer_id="user_123",    model="example",    input_tokens=1,    output_tokens=1,)
client, err := commet.New("ck_xxx")if err != nil {	log.Fatal(err)}ctx := context.Background()usageEvent, err := client.Usage.Track(ctx, &commet.TrackUsageParams{	FeatureCode: "api_calls",	CustomerID: "user_123",	Model: func(value string) *string { return &value }("example"),	InputTokens: func(value int) *int { return &value }(1),	OutputTokens: func(value int) *int { return &value }(1),})if err != nil {	log.Fatal(err)}
import co.commet.Commet;import co.commet.params.TrackUsageParams;var commet = Commet.builder().apiKey("ck_xxx").build();var usageEvent = commet.usage().track(    TrackUsageParams.builder("api_calls", "user_123").model("example").inputTokens(1L).outputTokens(1L).build());
use Commet\Commet;$commet = new Commet('ck_xxx');$usageEvent = $commet->usage->track(    featureCode: 'api_calls',    customerId: 'user_123',    model: 'example',    inputTokens: 1,    outputTokens: 1,);

Usá el eventId controlado por quien llama para identificar el evento de negocio cuando los reintentos deban deduplicarlo. La idempotencia del request es una opción separada de transporte que se convierte en Idempotency-Key.

Relacionado

  • Registrar uso
  • Consumption Models
  • Administrar seats
  • Administrar quota

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

On this page

Tipos de feature
Estado actual de una feature
Consumo propuesto
Registrar el consumo
Relacionado