Guías
Receta: créditos de API
Vende créditos prepagados para una API o una función de IA y descuenta uno por llamada. Si no alcanza el saldo, responde 402 con un enlace de recarga.
Los compradores pagan por adelantado un paquete de créditos; cada llamada gasta algunos. Perly Pay lleva la cuenta: el gasto es una sola llamada atómica que no baja de cero, y cada comprador tiene su propia página de recarga. Nada se cobra solo: cuando se acaban los créditos, el comprador recarga. Todo sobre los créditos está en Sell credits; aquí, la receta alrededor.
sell-credits del plugin de Perly Pay hace esta receta en tu proyecto. El ejemplo ejecutable es examples/api-credits (MIT) en el repositorio del plugin.Cómo funciona
- 1
Un paquete de créditos
Un producto y un precio con
model: "credit_pack",unit_amounten centavos ycredits. Una vez por modo. - 2
Tus usuarios son clientes
Se crean una vez con
external_id(tu id de usuario); después,credits.*aceptan ese id. - 3
Recargas
credits.topUpUrl(userId)es la página propia del comprador: elige un paquete y paga. Cada paquete pagado suma créditos. - 4
Gasto por llamada
Primero
credits.consume(userId, cost, { idempotencyKey }), luego el trabajo. Un reintento con la misma clave devuelve el primer gasto, así que la clave de cada llamada la genera tu servidor y nunca la toma de quien llama. - 5
¿No alcanza?
insufficient_credits(409) no gasta nada: responde402con la página de recarga, no un 500.
Ejecuta el ejemplo
- 1
Instala
npm installenexamples/api-credits(Node 20.12+). - 2
Clave
Copia
.env.examplea.envy pon una clave de prueba (sk_test_…) enPERLY_PAY_SECRET_KEY. - 3
Prepara
npm run setupcrea el producto y el precio con tu clave e imprime sus ids para.env. - 4
Ejecuta
npm start(onpm run dev), según diga su README. - 5
Paga sin billetera
Llama a
POST /v1/shout(402), abre la página que daPOST /top-up, elige un paquete, pulsa Simulate payment en la factura y llama otra vez: 200 yX-Credits-Remaining: 499.
Errores comunes
- Gastar sin clave de idempotencia: una llamada repetida descuenta dos veces.
- Tomar la clave del gasto de lo que envía el cliente (una cabecera
Idempotency-Key): la misma clave devuelve el primer gasto como éxito y el cliente vuelve a recibir el trabajo sin pagar. - Consultar el saldo y luego gastar en dos pasos.
consumeya impide bajar de cero; el saldo es para mostrarlo. - Primero el trabajo, luego el gasto. Al revés: primero el gasto.
- Ids de prueba con una clave real. Productos, precios y webhooks pertenecen a un modo: antes de lanzar, repite la configuración con
sk_live_….