🏗️ documentación
Construir sobre CloudWapp (marca blanca)
Si tienes una plataforma —un constructor de sitios, una agencia, un SaaS vertical— puedes usar CloudWapp como el motor que construye con IA, despliega y hospeda las apps de tus clientes. Tu backend habla con nuestra API; tus clientes ven tu marca y tu dominio.
Cómo funciona
Todo pasa por tu cuenta de CloudWapp y una API key (x-api-key). Tu backend guarda qué app
es de qué cliente tuyo; nosotros nunca le hablamos a tu cliente final.
- Crear la app con IA. Describes lo que quiere tu cliente y Claude Code la construye:
curl -X POST https://cloudwapp.net/api/v1/tickets/app \
-H "x-api-key: TU_API_KEY" -H "Content-Type: application/json" \
-d '{ "name": "Barbería Don Pepe", "description": "Landing con servicios, precios y reservas por WhatsApp." }'
- Revisar y publicar. Cuando el cambio está listo te llega el webhook
ticket.readycon el resumen. Lo apruebas y se despliega:
curl -X POST https://cloudwapp.net/api/v1/tickets/TICKET_ID/approve -H "x-api-key: TU_API_KEY"
- Pedir cambios después. Cada pedido de tu cliente es un ticket sobre la misma app:
curl -X POST https://cloudwapp.net/api/v1/tickets \
-H "x-api-key: TU_API_KEY" -H "Content-Type: application/json" \
-d '{ "appId": "APP_ID", "title": "Cambiar colores", "body": "Usar azul marino y dorado." }'
También puedes desplegar código propio (POST /apps/:id/upload o desde Git), levantar
templates (POST /apps/from-template) y agregarle bases de datos o buckets
(POST /apps/:id/services).
Tu dominio, no el nuestro
Crea una sola vez un CNAME comodín *.tumarca.com apuntando a CloudWapp. Desde ahí
cada app de un cliente se conecta con su propio nombre, sin volver a tocar el DNS:
curl -X POST https://cloudwapp.net/api/v1/apps/APP_ID/domains \
-H "x-api-key: TU_API_KEY" -H "Content-Type: application/json" \
-d '{ "domainName": "donpepe.tumarca.com" }'
El certificado SSL se emite solo en la primera visita. Si tu cliente trae su propio
dominio, le pides que cree un CNAME al mismo destino.
Webhooks
Configura la URL en Configuración → Webhook. Te hacemos POST en cada evento:
| Evento | Cuándo |
|---|---|
ticket.ready | La IA terminó un cambio y espera tu aprobación |
ticket.applied | Lo aprobaste: el cambio quedó en cola de deploy (deploymentId) |
ticket.failed | La IA no pudo hacer el cambio, o falló al aplicarlo (error) |
app.deploy.succeeded | El deploy terminó y la app está en línea (url) |
app.deploy.failed | El deploy falló; la versión anterior sigue corriendo (error) |
El cuerpo es siempre { event, userId, timestamp, data }. Si configuras un secret, la
firma va en X-CloudWapp-Signature: sha256=<HMAC-SHA256 del cuerpo>. Verifícala antes de
confiar en el evento:
import { createHmac, timingSafeEqual } from 'node:crypto';
function firmaValida(rawBody, header, secret) {
const esperada = 'sha256=' + createHmac('sha256', secret).update(rawBody).digest('hex');
return header?.length === esperada.length && timingSafeEqual(Buffer.from(header), Buffer.from(esperada));
}
Si tu servidor no responde 2xx, reintentamos 5 veces con espera creciente. La URL tiene que ser pública: no aceptamos localhost ni redes internas, y no seguimos redirecciones.
Cupos para plataformas
Los planes normales tienen topes pensados para una persona (por ejemplo, 10 apps y 50 builds de IA al mes en Hobbyist). Para una plataforma ajustamos los topes de tu cuenta a medida —apps, builds de IA, dominios, servicios— sin cambiar de plan. Escríbenos y lo dejamos configurado.