CommetCommet
GitHubDiscordStatus
Introducción

Inicio rápido

Creá una API keyQuickstart

Aprender

Aceptar pagos únicosTransacciones, Refunds y RetriesPayment ProvidersPayment Orchestration

Recursos

Referencia del SDKVersionado de APIManejo de erroresTestingCLIEjemplos

Plugins

Better Auth
DocumentaciónRecursosConstruir con AIAPI ReferenceWebhooks

Transacciones, Refunds y Retries

Revisá intentos de pago, devolvé cobros exitosos y reintentá renovaciones fallidas de forma segura.

Una transaction representa un intento de pago. Registra proveedor, monto, customer, recibo, estado y eventos del lifecycle sin exponer credenciales del proveedor.

Revisá intentos de pago

Abrí Transactions para investigar un pago desde el dashboard o listalos desde tu aplicación:

import { Commet } from "@commet/node";const commet = new Commet({ apiKey: "ck_xxx" });const response = await commet.transactions.list();
from commet import Commetcommet = Commet("ck_xxx")transactions_list_result = commet.transactions.list()
client, err := commet.New("ck_xxx")if err != nil {	log.Fatal(err)}ctx := context.Background()transactionsListResult, err := client.Transactions.List(ctx, nil)if err != nil {	log.Fatal(err)}
import co.commet.Commet;import co.commet.params.ListTransactionsParams;var commet = Commet.builder().apiKey("ck_xxx").build();var transactionsListResult = commet.transactions().list(ListTransactionsParams.builder().build());
use Commet\Commet;$commet = new Commet('ck_xxx');$transactionsListResult = $commet->transactions->list();

Un recibo puede tener varias transacciones cuando se reintenta una renovación. La transacción fallida original queda inmutable y el retry crea un intento nuevo.

Devolvé una transacción exitosa

import { Commet } from "@commet/node";const commet = new Commet({ apiKey: "ck_xxx" });const refund = await commet.transactions.refund({ id: "transaction_xxx" });
from commet import Commetcommet = Commet("ck_xxx")refund = commet.transactions.refund("transaction_xxx")
client, err := commet.New("ck_xxx")if err != nil {	log.Fatal(err)}ctx := context.Background()refund, err := client.Transactions.Refund(ctx, "transaction_xxx", nil)if err != nil {	log.Fatal(err)}
import co.commet.Commet;import co.commet.params.RefundTransactionParams;var commet = Commet.builder().apiKey("ck_xxx").build();var refund = commet.transactions().refund(    "transaction_xxx",    RefundTransactionParams.builder().build());
use Commet\Commet;$commet = new Commet('ck_xxx');$refund = $commet->transactions->refund(id: 'transaction_xxx');

La operación solicita un refund completo y devuelve su estado real, normalizado entre proveedores. No otorgues la devolución en tu producto antes de confirmar el resultado. Procesá payment.refunded de forma idempotente para los cambios posteriores de acceso o balance.

Reintentá una renovación fallida

import { Commet } from "@commet/node";const commet = new Commet({ apiKey: "ck_xxx" });const transactionRetry = await commet.transactions.retry({ id: "transaction_xxx" });
from commet import Commetcommet = Commet("ck_xxx")transaction_retry = commet.transactions.retry("transaction_xxx")
client, err := commet.New("ck_xxx")if err != nil {	log.Fatal(err)}ctx := context.Background()transactionRetry, err := client.Transactions.Retry(ctx, "transaction_xxx", nil)if err != nil {	log.Fatal(err)}
import co.commet.Commet;import co.commet.params.RetryTransactionParams;var commet = Commet.builder().apiKey("ck_xxx").build();var transactionRetry = commet.transactions().retry(    "transaction_xxx",    RetryTransactionParams.builder().build());
use Commet\Commet;$commet = new Commet('ck_xxx');$transactionRetry = $commet->transactions->retry(id: 'transaction_xxx');

Retry aplica a renovaciones fallidas, no a cualquier pago one-time. Conserva el intento fallido para auditoría y devuelve el nuevo intento sin ocultar su resultado.

En una suscripción past_due, preferí las acciones de lifecycle de Manejar pagos fallidos cuando el customer necesite un recovery link o actualizar su método de pago.

Cambiar el routing no mueve un método guardado. El retry usa la conexión ya asociada a la suscripción.

¿Cómo está esta guía?

Aceptar pagos únicos

Cobra a tus clientes una sola vez con el recurso payments de Commet — sin suscripción ni plan. Impuestos, recibo y comprobante de forma automática.

Payment Providers

Conecta tu cuenta de Stripe o dLocal a Commet y enruta pagos sin cambiar tu integración de billing.

On this page

Revisá intentos de pago
Devolvé una transacción exitosa
Reintentá una renovación fallida