POST
/api/mod/landing/{espacio}/landingsCrea una landing
Mandas el brief y la URL que recibe el formulario. Bentho escribe la landing, la prueba en un navegador y la deja lista para publicar. Contesta al momento con el id; el trabajo sigue en segundo plano.
- PERMISOescribe
- CRÉDITOSgasta créditos
- AUTENTICACIÓNBearer bth_…
PARÁMETROS
| CAMPO | TIPO | REQUERIDO | QUÉ ES |
|---|---|---|---|
| espacio | string | SÍ | El id del espacio (sale en GET /api/companies). Tiene que tener el módulo Landings. |
CUERPO · JSON
| CAMPO | TIPO | REQUERIDO | QUÉ ES |
|---|---|---|---|
| prompt | string | SÍ | El brief: qué ofreces, a quién, con qué tono, qué secciones y qué datos (precios, fechas, testimonios). Hasta 24 000 caracteres. |
| submitUrl | string | SÍ | Adónde envía sus datos el formulario. HTTP o HTTPS, sin usuario ni contraseña. Qué le llega, en la guía. |
| titulo | string | no | Para reconocerla en la lista. Hasta 120 caracteres; sin él, el comienzo del brief. |
| pageId | string | no | Tu identificador de la página, hasta 200 caracteres. El formulario lo manda como page_id en cada envío. |
| brandBlock | string | no | Tu marca, en texto: nombre, colores, tipografías, tono, URL del logotipo. Hasta 20 000 caracteres. |
| formConfig | object | no | El formulario: campos, mensaje de éxito, botones y redirección. Su forma, en la guía. |
| chatHistory | [{ role, content }] | no | La conversación con tu usuario que llevó a esta petición, si la hay. Hasta 50 mensajes de 8000 caracteres. |
| funnelReferenceHtml | string | no | El HTML de otra página de tu embudo, para que esta siga su estilo. Hasta 300 000 caracteres. |
| { data, name? } | no | Un PDF con la información del producto, en base64 en data. Hasta 16 000 000 de caracteres (unos 12 MB de PDF). | |
| revisarBrief | boolean | no | Por defecto true: antes de escribir, revisa si el brief pide datos que no da y te los pregunta (esperando_datos). Con false, no pregunta. |
RESPUESTA 202
| CAMPO | TIPO | QUÉ ES |
|---|---|---|
| id | string | El id de la landing. |
| version | integer | El número de la versión que se encoló. |
| trabajo | string | El id de esa versión. Para seguirla te basta con id y version. |
| status | "pendiente" | Siempre pendiente al encolar. |
ERRORES DE ESTA RUTA · SIEMPRE {"detail": …}
| STATUS | CUÁNDO | DETAIL LITERAL |
|---|---|---|
| 403 | El espacio no tiene el módulo Landings | módulo no habilitado para este espacio. |
| 403 | La clave es de solo lectura | Tu cuenta es de solo lectura en este espacio. |
| 402 | La cuenta agotó sus créditos del ciclo | La cuenta de este espacio agotó sus créditos de este ciclo. |
| 413 | El cuerpo pasa de 24 MB | Cuerpo demasiado grande |
| 422 | Falta prompt | prompt es obligatorio |
| 422 | submitUrl no es una URL HTTP/HTTPS, o lleva usuario o contraseña | submitUrl debe ser una URL HTTP/HTTPS sin credenciales |
| 422 | Un campo que no es de esta ruta | Campos no admitidos: … |
| 429 | El espacio tiene demasiadas landings generándose a la vez | Hay demasiadas landings en curso en este espacio; espera a que terminen. |
Y los de cualquier ruta —clave inválida, cuenta no al día, IP, límites—, en Errores, límites y créditos.
CONVIENE SABER
- Responde enseguida: el trabajo sigue en segundo plano y suele tardar unos minutos. Sigue la versión con GET landings/{landing}.
- Mientras se prueba, el formulario no envía nada de verdad: a tu
submitUrlno le llegan envíos de prueba. - Un
formConfigque no cumple su forma no da 422: la versión termina enfallidoyerrordice por qué. - Los 422 del módulo traen el
detailcomo texto ("prompt es obligatorio"), no como lista.