Rendben
Checkout de USDC no custodial en Solana: los agentes inspeccionan un checkout y obtienen transacciones sin firmar para firmarlas localmente, liquidando el 99,5% directamente a la billetera del comerciante.
Documentación
USANDO CLAUDE CODE O CHATGPT DESKTOP?
Dale a tu asistente de codificación el contexto adecuado.
Crea una clave de API con permisos específicos, guárdala en el entorno de tu aplicación y luego dale a tu asistente este enlace de documentación para iniciar la integración.
- 1 Completa la verificación humana Inicia sesión con Google y verifica la wallet de liquidación. Rendben nunca le pide a tu IA una frase semilla o clave privada. Abrir guía de configuración
- 2
Guárdala de forma segura
Guárdala como
RENDBEN_API_KEYen el entorno del servidor de la aplicación. Nunca pegues una clave de API en un chat. - 3 Deja que tu IA continúe Con una clave de lectura y escritura, puede inspeccionar la configuración, reservar la URL de la tienda, crear productos y preparar enlaces de pago. Crear clave de API
https://rendben.com/docs/api
Copia la URL pública de la documentación, no tu clave de API.
MCP
ACCIONES OFICIALES DE MCP
Permite que un agente pague sin compartir el secreto de su wallet.
Conéctate al endpoint HTTP Streamable sin sesión de Rendben en https://rendben.com/mcp. Dale a un agente un enlace de pago público, o permite que un comerciante cree una capacidad de pago con una clave de API. Rendben prepara bytes de transacción sin firmar. El agente revisa los términos exactos, firma localmente y envía a través de su propia wallet o un RPC de Solana de confianza.
{
"mcpServers": {
"rendben": {
"type": "http",
"url": "https://rendben.com/mcp",
"headers": {
"Authorization": "Bearer ${RENDBEN_API_KEY}"
}
}
}
}
rendben_inspect_checkout
rendben_prepare_checkout_payment
rendben_create_payment_intent
rendben_prepare_usdc_payment
rendben_get_payment_status
rendben_get_subscription_status
Nunca pases una frase semilla o clave privada.
Las herramientas MCP no aceptan secretos de wallet. Usa una wallet aislada, mantén su firmante local y aplica una política por pago o diaria en la capa de wallet.
INICIO RÁPIDO
Verifica el acceso en una sola solicitud.
Crea una clave de solo lectura en tu panel, mantenla en el entorno de tu backend y envíala como token Bearer. Este ejemplo responde la pregunta que tu producto realmente necesita: ¿debería este cliente tener acceso?
const response = await fetch(
"https://rendben.com/api/v1/subscriptions?" +
new URLSearchParams({
customer_reference: "google-user-48391",
product_id: "prod_ciocu_basic_2026",
}),
{
headers: {
Authorization: \`Bearer ${process.env.RENDBEN_API_KEY}\`,
},
},
);
if (!response.ok) throw new Error("Rendben verification failed");
const result = await response.json();
const hasAccess = result.hasActiveSubscription;
Mantén las claves de API en el servidor.
Nunca coloques una clave de Rendben en código de navegador, un paquete de aplicación móvil o un repositorio público.
AUTENTICACIÓN
Un espacio de trabajo. Dos niveles de permiso.
Envía tu clave en cada solicitud usando el encabezado Authorization estándar.
Authorization: Bearer rdb_live_your_key
ESCRITURAS SEGURAS
Reintenta sin crear duplicados.
Cada solicitud de escritura pública requiere un encabezado Idempotency-Key que contenga de 8 a 128 caracteres seguros. Repetir la misma clave y cuerpo devuelve la respuesta original durante 24 horas. Reutilizar una clave con JSON diferente devuelve HTTP 409.
Idempotency-Key: order_8f2b7f46
GET /setup
Lee el estado de configuración del espacio de trabajo
Permite que una IA identifique si el paso de la wallet controlada por humanos está completo y si la preparación de la tienda, los productos y el pago pueden continuar.
curl https://rendben.com/api/v1/setup \
-H "Authorization: Bearer $RENDBEN_API_KEY"
El límite de la wallet sigue siendo humano.
La API informa la preparación de la wallet, pero no puede acceder, reemplazar o recuperar la frase semilla o clave privada de la wallet.
GET /storefront
Lee la configuración de la tienda
Devuelve la URL de tienda reservada, la moneda, los detalles públicos del comerciante y el logotipo opcional. Un nuevo espacio de trabajo devuelve storefront: null.
PUT /storefront
Configura la tienda
Reserva o actualiza la URL única de tienda de Rendben del espacio de trabajo. El propietario humano debe verificar la wallet de liquidación primero. Este endpoint requiere una clave de lectura y escritura y un Idempotency-Key.
| Parámetro | Tipo | Descripción |
|---|---|---|
slug Requerido | string | Subdominio único de Rendben de 3 a 32 caracteres. |
logoImageUrl | URL | Logotipo cuadrado HTTPS opcional de la tienda. |
websiteUrl | URL | Sitio web público opcional del comerciante. |
supportEmail | Dirección pública opcional de atención al cliente. | |
refundPolicyUrl | URL | Página pública opcional de política de reembolso. |
curl https://rendben.com/api/v1/storefront \
-X PUT \
-H "Authorization: Bearer $RENDBEN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: storefront_ciocu_v1" \
-d '{
"slug": "ciocu",
"websiteUrl": "https://ciocu.app",
"supportEmail": "support@ciocu.app"
}'
GET /products
Lista de productos
Devuelve todos los productos en el espacio de trabajo de la clave de API, incluidos precios y detalles de facturación recurrente.
curl https://rendben.com/api/v1/products \
-H "Authorization: Bearer $RENDBEN_API_KEY"
POST /products
Crea un producto
Crea un producto USDC de pago único o recurrente. Este endpoint requiere una clave de lectura y escritura.
Envía un Idempotency-Key único para cada creación de producto prevista.
| Parámetro | Tipo | Descripción |
|---|---|---|
name Requerido | string | Nombre del producto visible para el cliente. |
description Requerido | string | Breve explicación de lo que recibe el cliente. |
priceUsdc Requerido | string | Precio en USDC. Mínimo 1 USDC. |
pricingModel Requerido | enum | one_time o recurring. |
billingInterval | object | Requerido para productos recurrentes. Usa day, week, month o year. Un plan trimestral usa month con count 3. |
returnUrl | URL | Página opcional mostrada después de un pago completado. |
coverImageUrl | URL | Imagen HTTPS opcional del producto. |
{
"name": "Ciocu Pro",
"description": "Voice, sync and monthly allowance",
"returnUrl": "https://ciocu.app/billing/complete",
"coverImageUrl": "https://cdn.example.com/ciocu-pro.webp",
"priceUsdc": "20",
"pricingModel": "recurring",
"billingInterval": {
"unit": "month",
"count": 1
}
}
POST /payment-intents
Crea una intención de pago
Crea un pago reanudable para un producto de pago único activo. Tu referencia de cliente y metadatos se devuelven en eventos de webhook.
| Parámetro | Tipo | Descripción |
|---|---|---|
productId Requerido | string | ID de producto de pago único activo. |
customer.email Requerido | Identidad de recibo y derecho de acceso. | |
customer.reference | string | Tu ID estable de cliente o cuenta. Máximo 255 caracteres. |
metadata | object | Tus datos de conciliación. Máximo 2 KB. |
curl https://rendben.com/api/v1/payment-intents \
-X POST \
-H "Authorization: Bearer $RENDBEN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order_8f2b7f46" \
-d '{
"productId": "prod_ciocu_basic_2026",
"customer": { "email": "buyer@example.com", "reference": "customer_48391" },
"metadata": { "orderId": "order_8f2b7f46" }
}'
{
"paymentIntent": {
"id": "pi_example",
"status": "pending",
"productId": "prod_ciocu_basic_2026",
"customerReference": "customer_48391",
"amountUsdc": "5",
"merchantAmountUsdc": "4.795",
"feeAmountUsdc": "0.205",
"checkoutUrl": "https://yourstore.rendben.com/checkout/prod_ciocu_basic_2026?payment=pi_example",
"agentPayment": {
"intentId": "pi_example",
"payerAccessToken": "rpa_v1_short_lived_capability",
"mcpUrl": "https://rendben.com/mcp"
}
}
}
GET /payment-intents/:id
Recupera una intención de pago
Devuelve el estado actual, la wallet del comprador, la firma de Solana y las marcas de tiempo de confirmación. La clave de API debe pertenecer al mismo espacio de trabajo.
POST /refunds
Crea un reembolso total o parcial
Crea un reembolso vinculado a un pago confirmado. La wallet de liquidación del comerciante debe aprobar la transacción de Solana Pay devuelta. La tarifa original de Rendben no se revierte y Rendben no agrega tarifa de reembolso.
| Parámetro | Tipo | Descripción |
|---|---|---|
paymentId Requerido | string | ID de intención de pago confirmado del mismo espacio de trabajo. |
amountUsdc | string | Monto exacto del reembolso. Usa esto o el porcentaje. |
percentage | string | Porcentaje del pago bruto original, de 0.01 a 100. Usa esto o amountUsdc. |
Envía un Idempotency-Key único. Se permiten múltiples reembolsos parciales, pero su total confirmado y pendiente nunca puede exceder el pago original.
curl https://rendben.com/api/v1/refunds \
-X POST \
-H "Authorization: Bearer $RENDBEN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: refund_order_8f2b7f46" \
-d '{
"paymentId": "pi_example",
"percentage": "50"
}'
GET /refunds/:id
Recupera un reembolso
Devuelve el estado pendiente, en proceso, confirmado, expirado, fallido o cancelado, más la wallet de destino, la firma de Solana y las marcas de tiempo de confirmación.
POST /subscription-checkouts
Crea un pago de suscripción vinculado
Crea un pago opaco y reanudable para un producto recurrente activo. Rendben vincula el correo de recibo y tu referencia estable de cliente en el servidor, por lo que el cliente no puede cambiar la identidad de derecho de acceso al pagar.
| Parámetro | Tipo | Descripción |
|---|---|---|
productId Requerido | string | ID de producto recurrente activo. |
customer.email Requerido | Correo de recibo y facturación. Almacenado en el servidor y no editable al pagar. | |
customer.reference Requerido | string | Tu ID estable de usuario o cuenta. Úsalo para verificación de derecho de acceso. Máximo 255 caracteres. |
curl https://rendben.com/api/v1/subscription-checkouts \
-X POST \
-H "Authorization: Bearer $RENDBEN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: subscription_google-user-48391" \
-d '{
"productId": "prod_ciocu_basic_2026",
"customer": {
"email": "buyer@example.com",
"reference": "google-user-48391"
}
}'
{
"subscriptionCheckout": {
"id": "sub_example",
"status": "authorization_pending",
"productId": "prod_ciocu_basic_2026",
"customerReference": "google-user-48391",
"amountUsdc": "20",
"periodHours": 720,
"expiresAt": "2026-08-13T13:00:00.000Z",
"checkoutUrl": "https://yourstore.rendben.com/checkout/prod_ciocu_basic_2026?subscription=sub_example"
}
}
Crea esta URL en tu backend.
No pongas la clave de API de Rendben en el código del navegador de Ciocu. Redirige al cliente autenticado al checkoutUrl devuelto y no agregues ?email=. La URL opaca ya lleva la identidad vinculada al servidor.
GET /subscriptions
Lista y verifica suscripciones
Omite los filtros de cliente para listar las suscripciones del espacio de trabajo y leer las cifras de total, ciclo de vida y MRR. Para derechos de acceso de aplicaciones, filtra por tu referencia estable de cliente e ID de producto.
| Parámetro | Tipo | Descripción |
|---|---|---|
customer_reference | string | ID de cliente de comerciante exacto opcional. Recomendado para verificaciones de derecho de acceso. |
customer_email | Filtro de correo de recibo exacto opcional. Prefiere customer_reference para identidad de aplicación. | |
product_id | string | Filtro de producto opcional. Recomendado para verificaciones de derecho de acceso. |
status | enum | Filtra los registros devueltos por estado del ciclo de vida. El valor predeterminado es all. |
page | integer | Número de página. El valor predeterminado es 1. |
limit | integer | Registros por página, de 1 a 100. El valor predeterminado es 50. |
{
"customerEmail": "buyer@example.com",
"customerReference": "google-user-48391",
"productId": "prod_ciocu_basic_2026",
"status": "all",
"hasActiveSubscription": true,
"summary": {
"total": 12,
"active": 8,
"pastDue": 1,
"cancelPending": 1,
"cancelled": 2,
"entitled": 9,
"mrrUsdc": "160"
},
"hasMore": false,
"page": 1,
"pageSize": 50,
"subscriptions": [
{
"id": "sub_example",
"productId": "prod_ciocu_basic_2026",
"productName": "Ciocu Pro",
"status": "active",
"entitled": true,
"amountUsdc": "20",
"periodHours": 720,
"currentPeriodEnd": "2026-08-31T12:00:00.000Z",
"nextChargeAt": "2026-08-31T12:00:00.000Z"
}
]
}
Usa la respuesta correcta para cada tarea.
Usa summary.active y summary.mrrUsdc para informes de comerciante. Usa hasActiveSubscription para controlar el acceso del cliente.
POST /subscriptions/:id/cancel
Cancela renovaciones futuras
Permite que tu backend ofrezca cancelación dentro de tu propia página de cuenta SaaS. Detiene la recaudación futura de inmediato mientras preserva el derecho de acceso del cliente a través del currentPeriodEnd ya pagado.
| Parámetro | Tipo | Descripción |
|---|---|---|
customer_reference | string | ID de cliente estable recomendado. Se requiere esto o customer_email y debe coincidir exactamente. |
customer_email | Correo de facturación normalizado exacto. Se requiere esto o customer_reference y debe coincidir exactamente. |
curl https://rendben.com/api/v1/subscriptions/sub_example/cancel \
-X POST \
-H "Authorization: Bearer $RENDBEN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: cancel_sub_example_1" \
-d '{
"customer_reference": "google-user-48391"
}'
{
"subscription": {
"id": "sub_example",
"productId": "prod_ciocu_basic_2026",
"customerEmail": "buyer@example.com",
"status": "cancelled",
"currentPeriodEnd": "2026-08-31T12:00:00.000Z",
"nextChargeAt": null
}
}
Llama a esto solo desde tu backend.
Usa una clave de lectura y escritura y deriva la identidad del cliente de tu sesión autenticada. Nunca aceptes un correo o referencia de cliente sin verificar desde la entrada del navegador, y nunca expongas la clave de API al navegador.
La operación emite subscription.cancelled, envía el correo de cancelación al cliente y se puede reproducir de forma segura durante 24 horas con el mismo Idempotency-Key. No revoca la aprobación de token en cadena del cliente; el suscriptor puede hacerlo por separado desde el enlace de gestión de Rendben.
GET /orders
Verifica un pedido de pago único
Devuelve intenciones de pago para un cliente. El filtro predeterminado status=paid incluye solo pagos confirmados.
| Parámetro | Tipo | Descripción |
|---|---|---|
customer_reference | string | ID de cliente de comerciante exacto. Se requiere esto o customer_email. |
customer_email | Correo de recibo exacto. Se requiere esto o customer_reference. | |
product_id | string | Filtro de producto opcional para una recarga o compra. |
status | enum | paid, pending, processing, expired, failed o all. El valor predeterminado es paid. |
page | integer | Número de página. El valor predeterminado es 1. |
limit | integer | Registros por página, de 1 a 100. El valor predeterminado es 50. |
{
"customerEmail": "buyer@example.com",
"productId": "prod_topup",
"status": "paid",
"hasPaidOrder": true,
"hasMore": false,
"orders": [
{
"id": "pi_example",
"productId": "prod_topup",
"productName": "Five voice credits",
"status": "paid",
"amountUsdc": "5",
"merchantAmountUsdc": "4.795",
"feeAmountUsdc": "0.205",
"transactionSignature": "solana_signature",
"confirmedAt": "2026-08-10T10:00:02.000Z"
}
]
}
05
REGLAS DE DERECHO DE ACCESO
Otorga acceso basado en hechos pagados.
- 1
Acceso recurrente
Otorga acceso solo cuando
hasActiveSubscriptiones verdadero para el producto requerido. - 2
Créditos y recargas
Consulta pedidos con
status=paid, luego almacena cada ID de pedido consumido para que no pueda acreditarse dos veces. - 3
Suscripciones canceladas
Respeta
entitledhastacurrentPeriodEnd. El cliente conserva lo que ya pagó. - 4 Cambios de plan Las mejoras se vuelven elegibles después de que se confirme el pago prorrateado atómico. Las degradaciones permanecen en el nivel actual durante el período pagado y cambian en la renovación.
- 5 Comportamiento ante fallos No otorgues nuevo acceso cuando la API no se pueda alcanzar. Mantén tu último estado verificado por un período de gracia corto y deliberado si tu producto requiere continuidad.
- 6
Vinculación de identidad
Usa tu ID de usuario inmutable como
customer.reference. El correo es para recibos y puede cambiar; no debe ser la clave principal de derecho de acceso.
EVENTOS FIRMADOS
Reacciona cuando cambia el libro mayor.
Agrega un endpoint HTTPS en Panel → Webhooks. Rendben firma el cuerpo JSON exacto con el secreto mostrado una vez en la creación. Verifica Rendben-Signature antes de analizar el evento, rechaza marcas de tiempo de más de cinco minutos y deduplica con el evento de nivel superior id. Cada sobre incluye schemaVersion: 1; rechaza versiones no compatibles e ignora campos desconocidos dentro de una versión compatible.
import { createHmac, timingSafeEqual } from "node:crypto";
const [timestampPart, signaturePart] = signatureHeader.split(",");
const timestamp = timestampPart.replace("t=", "");
const received = signaturePart.replace("v1=", "");
const expected = createHmac("sha256", process.env.RENDBEN_WEBHOOK_SECRET)
.update(timestamp + "." + rawRequestBody)
.digest("hex");
const valid = received.length === expected.length &&
timingSafeEqual(Buffer.from(received), Buffer.from(expected));
Devuelve cualquier respuesta 2xx dentro de 8 segundos. Las entregas fallidas se reintentan con demoras crecientes hasta por 48 horas. El panel conserva cada intento y permite que un propietario o administrador reproduzca una entrega manualmente.
07
PAGINACIÓN
Lee historiales completos de forma segura.
Las respuestas de suscripción y pedido incluyen page, pageSize y hasMore. Aumente page hasta que hasMore sea falso. Las respuestas de clientes son siempre privadas y nunca se almacenan en caché.
08
ERRORES
Una forma de error predecible.
{ "error": "customer_email or customer_reference is required." }
Los límites de lectura se comparten entre todos los endpoints de lectura V1 para la misma credencial. Las escrituras usan un límite separado y más bajo de 30 solicitudes por minuto. Los límites adicionales por IP evitan que la rotación de credenciales inválidas eluda la protección. Una respuesta limitada incluye los encabezados RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset y Retry-After.
Las cuotas del espacio de trabajo protegen los recursos retenidos: 100 productos activos, 10 claves API activas y 10 endpoints de webhook activos. Una cuota completa devuelve 409; desactive o revoque un recurso no utilizado antes de reintentar.
400 Entrada faltante o inválida
401 Clave faltante, inválida o revocada
404 La identidad de suscripción o cliente no coincide
413 El cuerpo de la solicitud es demasiado grande
415 La solicitud de escritura no es JSON
429 Límite de velocidad excedido
409 Conflicto de idempotencia, solicitud en curso o cuota del espacio de trabajo alcanzada
500 Rendben no pudo completar la solicitud
¿LISTO PARA CONECTARSE?
Cree una clave con alcance para su backend.
Comience con permiso de solo lectura. Use lectura y escritura cuando su aplicación cree productos, intenciones de pago o checkouts de suscripción.