Facturación SaaS con un merchant of record: planes, pruebas, cargos por uso y webhooks
Skalp puede facturar tu SaaS como merchant of record. Tu app abre un pago de suscripción, Skalp cobra, suma el IVA del país del cliente y emite cada factura, y los webhooks firmados mantienen tu base de datos al día. El uso por encima del plan va a la misma tarjeta.
Planes
Cada plan es un producto que se cobra cada semana, mes o año, con una prueba opcional de hasta 14 días. Los precios son netos y en la moneda de tu tienda. También puedes darle a un plan un precio redondo en hasta tres monedas más para clientes de Polonia, la zona euro, Estados Unidos y Brasil.
Abrir el pago
client := skalp.New(skalp.Options{})
session, err := client.CreateSubscriptionCheckout(ctx, skalp.CreateSubscriptionCheckoutParams{
ProductSlug: "pro-monthly",
ExternalRef: orgID,
ReturnURL: "https://app.example.com/billing?checkout=success",
})
if err != nil {
return err
}
http.Redirect(w, r, session.URL, http.StatusSeeOther)
En Node la misma llamada es skalp.subscriptions.createCheckout(...). El cliente paga en la página de Skalp, así que tu app nunca muestra un formulario de tarjeta. Una empresa de la UE puede introducir ahí su NIF-IVA y compra con inversión del sujeto pasivo. ExternalRef vuelve en cada evento de la suscripción, lo que te ahorra guardar ids de Skalp antes del primer pago.
Webhooks para todo el ciclo de vida
| Evento | Cuándo llega |
subscription.created | La suscripción ha empezado. |
subscription.renewed | Se ha pagado un periodo. Incluye el id de la factura, el importe y la nueva fecha de fin. |
subscription.past_due | Una renovación ha fallado. Incluye el número de intentos y el siguiente. |
subscription.updated | Algo ha cambiado, por ejemplo el plan o una cancelación programada para el final del periodo. |
subscription.canceled | El plan ha terminado. Incluye cancelReason. |
subscription.refunded, subscription.disputed | Se ha reembolsado un pago o el banco del cliente ha abierto una disputa. |
Cada petición lleva una firma HMAC-SHA256 en la cabecera Skalp-Signature. skalp.webhooks.constructEvent en Node y client.ConstructEvent en Go la comprueban y rechazan los envíos de hace más de cinco minutos.
Cambios de plan y cancelaciones
subscriptions.changePlan pasa a un cliente a otro plan y prorratea la diferencia. subscriptions.cancel termina el plan al final del periodo pagado, así que el cliente conserva el acceso hasta entonces.
Cargos por uso
const charge = await skalp.subscriptions.createUsageCharge(subscription.id, {
amount: 12.34,
currency: 'EUR',
description: 'Seats over the plan, September 2026',
idempotencyKey: `seats:${orgId}:2026-09`,
periodStart: new Date('2026-09-01T00:00:00Z'),
periodEnd: new Date('2026-10-01T00:00:00Z'),
})
if (charge.status === 'open') await sendPaymentLink(charge.hostedUrl)
Los cargos por uso se cobran en la moneda de tu tienda a la tarjeta guardada. El mismo idempotencyKey devuelve siempre el mismo cargo, así que puedes reintentar tras un timeout o un 5xx sin cobrar dos veces. Cada suscripción tiene un tope diario de cargos por uso, que el soporte de Skalp puede subir.
Pagos fallidos
Cuando falla una renovación, el cliente recibe una factura abierta que puede pagar con cualquier tarjeta, y esa tarjeta se usa en las renovaciones siguientes. Tú recibes subscription.past_due y puedes mostrar un aviso en tu app hasta que llegue subscription.renewed.
Facturas, cupones e impuestos
Skalp emite una factura en PDF por cada pago con el IVA del país del cliente, y subscriptions.listInvoices te las devuelve para tu página de facturación. Los cupones de un plan pueden aplicarse al primer pago, a un número de meses o a toda la suscripción.
Preguntas frecuentes
¿A nombre de quién va la factura?
De Skalp. Skalp es el merchant of record, así que vende el plan a tu cliente y te paga tu parte.
¿Puedo mantener mi propia página de precios?
Sí. Tu página de precios llama a la API y envía al cliente al pago que devuelve.
¿El cliente necesita una cuenta en Skalp?
No. Los clientes que llegan por la API gestionan su suscripción con un código que reciben por email.
¿Cuánto cuesta?
El 10 % de cada pago, o el 7 % cuando tus ventas de los últimos 30 días superan los 20 000 $, con el procesamiento incluido y sin cuota mensual.