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
¿USAS CLAUDE CODE O CHATGPT DESKTOP?
Dale a tu asistente de codificación el contexto adecuado.
Crea una clave API con alcance, 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 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 checkout. Crear clave API
https://rendben.com/docs/api
Copia la URL de documentación pública, no tu clave API.
MCP
ACCIONES OFICIALES DE MCP
Permite que un agente pague sin compartir su secreto de wallet.
Conéctate al endpoint HTTP Streamable sin sesión de Rendben en https://rendben.com/mcp. Dale a un agente un enlace de checkout público, o permite que un comerciante cree una capacidad de pago con una clave 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 tu entorno de 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 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 wallet controlado por humanos está completo y si la preparación de tienda, productos y checkout puede continuar.
curl https://rendben.com/api/v1/setup \
-H "Authorization: Bearer $RENDBEN_API_KEY"
El límite de la wallet permanece humano.
La API informa la disponibilidad 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 espacio de trabajo nuevo devuelve storefront: null.
PUT /storefront
Configura la tienda
Reserva o actualiza la URL de tienda única de Rendben del espacio de trabajo. El propietario humano debe verificar primero la wallet de liquidación. 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 productos
Devuelve todos los productos en el espacio de trabajo de la clave API, incluidos los precios y los 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 | Explicación breve 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 checkout 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 API debe pertenecer al mismo espacio de trabajo.
POST /subscription-checkouts
Crea un checkout de suscripción vinculado
Crea un checkout opaco y reanudable para un producto recurrente activo. Rendben vincula el correo de recibo y tu referencia estable de cliente en el servidor, para que el cliente no pueda cambiar la identidad de derecho de acceso en el checkout.
| 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 en el checkout. | |
customer.reference Requerido | string | Tu ID estable de usuario o cuenta. Úsalo para la verificación de derechos 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 coloques la clave API de Rendben en el código de navegador de Ciocu. Redirige al cliente con sesión iniciada 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 resumen total, ciclo de vida y MRR. Para derechos de acceso de aplicación, 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 derechos de acceso. |
customer_email | Filtro opcional de correo de recibo exacto. Prefiere customer_reference para identidad de aplicación. | |
product_id | string | Filtro de producto opcional. Recomendado para verificaciones de derechos 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.
GET /orders
Verifica un pedido de pago único
Devuelve intenciones de pago para un cliente. El filtro status=paid predeterminado incluye solo pagos confirmados.
| Parámetro | Tipo | Descripción |
|---|---|---|
customer_reference | string | ID de cliente de comerciante exacto. Se requiere este o customer_email. |
customer_email | Correo de recibo exacto. Se requiere este 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 DERECHOS DE ACCESO
Otorga acceso a partir de hechos pagados.
- 1
Acceso recurrente
Otorga acceso solo cuando
hasActiveSubscriptionsea true para el producto requerido. - 2
Créditos y recargas
Consulta pedidos con
status=paidy 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 obtienen derecho de acceso 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 no se pueda alcanzar la API. Mantén tu último estado verificado durante un período de gracia breve 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 derechos 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 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 suscripciones y pedidos incluyen page, pageSize y hasMore. Aumenta page hasta que hasMore sea false. Las respuestas de clientes siempre son 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 en 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 evite 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; desactiva o revoca un recurso no utilizado antes de reintentar.
400 Entrada faltante o inválida
401 Clave faltante, inválida o revocada
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?
Crea una clave con alcance para tu backend.
Comienza con permiso de solo lectura. Usa lectura y escritura cuando tu aplicación cree productos, intenciones de pago o checkouts de suscripción.