Commet
  • Precios
Iniciar SesiónRegistrarse

Commet Headless

Todas las operaciones del dashboard ahora disponibles desde el SDK, API y CLI. Nuevos recursos, firmas de métodos más simples, y paridad completa en Node, Python, Go, Java y PHP.

D
Decker Urbano·@0xDecker·27 de mayo de 2026
Changelog

Commet ahora es completamente headless. Todo lo que podés hacer en el dashboard, ahora lo podés hacer desde el SDK, API y CLI. Se publica en los cinco lenguajes con los mismos recursos, métodos y tipos.

Todas las versiones de la API siguen funcionando. Desde la v1 hasta la v5, cada versión es aceptada y lo va a seguir siendo.

Nuevos recursos

Antes eran solo desde el dashboard. Ahora los podés manejar programáticamente:

  • Plans — crear, actualizar, eliminar, gestionar features y precios, visibilidad, precios regionales
  • Invoices — listar, ver detalle, descargar PDF, enviar al cliente, actualizar estado, crear ajustes
  • Transactions — listar, ver detalle, reembolsar, reintentar pagos fallidos
  • Plan Groups — organizar planes en grupos, reordenar, gestionar membresía
  • Promo Codes — crear y gestionar códigos de descuento
  • Credit Packs — crear y gestionar paquetes de créditos
  • API Keys — crear, listar, eliminar keys programáticamente
  • Webhooks — crear, listar, eliminar endpoints y disparar envíos de prueba
  • Addons — CRUD completo para definiciones de addons, más activar/desactivar en una suscripción

Recursos existentes también tienen métodos nuevos:

  • Subscriptions — list(), previewChange(), activateAddon(), deactivateAddon(), adjustBalance(), topupBalance(), purchaseCredits()
  • Features — create(), update(), delete()

Breaking changes

Todos los .get() ahora reciben objetos

Todos los getters de recursos cambiaron de argumentos posicionales a un objeto de parámetros.

// v4
await commet.customers.get("cus_xxx");
await commet.plans.get("pro");

// v5
await commet.customers.get({ id: "cus_xxx" });
await commet.plans.get({ id: "pro" });

subscriptions.get() → getActive()

Renombrado y recibe un objeto.

// v4
const sub = await commet.subscriptions.get(userId);

// v5
const sub = await commet.subscriptions.getActive({ customerId: userId });

subscriptionId → id en cancel, uncancel, changePlan

// v4
await commet.subscriptions.cancel({ subscriptionId: "sub_xxx", reason: "..." });
await commet.subscriptions.uncancel({ subscriptionId: "sub_xxx" });
await commet.subscriptions.changePlan({ subscriptionId: "sub_xxx", newPlanId: "plan_xxx" });

// v5
await commet.subscriptions.cancel({ id: "sub_xxx", reason: "..." });
await commet.subscriptions.uncancel({ id: "sub_xxx" });
await commet.subscriptions.changePlan({ id: "sub_xxx", newPlanId: "plan_xxx" });

customerId → id en customers.update

// v4
await commet.customers.update({ customerId: "cus_xxx", email: "new@co.com" });

// v5
await commet.customers.update({ id: "cus_xxx", email: "new@co.com" });

features.check() eliminado

Usá canUse() — devuelve más contexto (impacto de billing, razón si está bloqueado).

// v4
const { allowed } = await commet.features.check({ customerId: userId, code: "api_calls" });

// v5
const { allowed } = await commet.features.canUse({ customerId: userId, code: "api_calls" });

features.list() recibe un objeto

// v4
const features = await commet.features.list(userId);

// v5
const features = await commet.features.list({ customerId: userId });

addons.getActive() → listActive()

// v4
const addons = await commet.addons.getActive({ customerId: userId });

// v5
const addons = await commet.addons.listActive({ customerId: userId });

seatType → featureCode

Los seats son features. El nombre del parámetro ahora lo refleja. featureCode ahora es requerido (antes era opcional junto al deprecado seatType en v4).

// v4
commet.seats.add({ customerId: userId, seatType: "member", count: 1 });

// v5
commet.seats.add({ customerId: userId, featureCode: "member" });

count tiene default 1 — no hace falta pasarlo para operaciones de un solo seat.

Sin más customer() context

Todos los métodos ahora reciben customerId como parámetro directo. Menos indirección, más fácil de entender.

// v4
const customer = commet.customer(userId);
await customer.features.canUse("editor");
await customer.seats.add("member");

// v5
await commet.features.canUse({ customerId: userId, code: "editor" });
await commet.seats.add({ customerId: userId, featureCode: "member" });

externalId eliminado

Si estabas pasando externalId para identificar clientes en seats, usage o subscriptions — usá customerId. Para crear un customer, seguí usando id. También fue eliminado de los payloads de WebhookData.

// v4 — externalId en varios recursos
commet.usage.track({ feature: "api_calls", externalId: userId });

// v5 — customerId en todos lados
commet.usage.track({ feature: "api_calls", customerId: userId });

Formato de respuesta de errores

ApiResponse ya no tiene code, message, details en el nivel superior. Usá el objeto error.

// v4
if (!response.success) {
  console.log(response.code, response.message);
}

// v5
if (!response.success) {
  console.log(response.error?.code, response.error?.message);
}

Los errores lanzados también son más ricos. CommetAPIError ahora incluye type, param y docUrl.

try {
  await commet.subscriptions.create({ customerId, planCode: "pro" });
} catch (error) {
  if (error instanceof CommetAPIError) {
    console.log(error.type);    // "invalid_request_error"
    console.log(error.param);   // "planCode"
    console.log(error.docUrl);  // link a la documentación
  }
}

Modo debug

Pasá debug: true para ver cada request y response en tu consola. Útil cuando estás integrando.

const commet = new Commet({ apiKey: "ck_...", debug: true });
// [Commet SDK] POST https://commet.co/api/v1/subscriptions
// [Commet SDK] Response status: 201 Created

CLI con resource commands

Cada método del SDK ahora disponible desde la terminal. Sin escribir código — creá clientes, planes, suscripciones, emití reembolsos, todo desde la línea de comandos.

commet customers create --email user@example.com --id user_123
commet plans create --name "Pro" --code pro
commet plans add-price --plan-id pln_abc --billing-interval monthly --price 2900
commet subscriptions create --customer-id user_123 --plan-code pro
commet invoices list --customer-id user_123
commet transactions refund --id txn_abc

Misma estructura en todos: commet <recurso> <acción> [--flags].

--output agent devuelve JSON crudo. --help en cada nivel muestra las acciones y flags disponibles. Los errores siempre te dicen qué salió mal y qué valores son válidos.

commet link ahora auto-genera una API key para tu org — sin pasos extra.

Todos los lenguajes, misma API

Node, Python, Go, Java y PHP — todos con los mismos recursos y firmas de métodos idénticas.

npm install @commet/node@5
pip install commet-sdk==5.0.0
go get github.com/commet-labs/commet-go/v5
composer require commet/commet-php:^5.0
implementation("co.commet:commet-java:5.0.0") // Gradle

Desarrolladores

  • Documentación
  • Templates
  • GitHub

Frameworks

  • Next.js
  • Remix
  • Nuxt
  • SvelteKit
  • Astro
  • Express
  • Hono
  • Django

Recursos

  • Blog
  • Changelog
  • Precios

IA

  • Agentes
  • Servidor MCP
  • Agent Skills
  • Claude Code
  • Codex

Aprender

  • Guías
  • Glosario
  • Soluciones
  • Facturación por Modelo de IA
  • Commet VS otros

Nosotros

  • Nosotros
  • Open Source
  • Términos y condiciones
  • Política de privacidad
XLinkedInGitHub