API de Plantillas
API de Plantillas
Las plantillas son cotizaciones pre-configuradas que puedes reutilizar para crear cotizaciones nuevas al instante. Cada plantilla incluye productos, notas, costo de envío y moneda.
Lectura: cualquier usuario autenticado con tenant. Escritura: requiere plan PRO y permiso config:manage (solo Owner).
Listar Plantillas
GET /api/templates
Lista todas las plantillas activas del tenant, incluyendo el nombre del creador.
Respuesta 200 OK:
[
{
"id": "clxyz...",
"tenantId": "...",
"name": "Paquete Premium",
"description": "Cotización estándar para clientes premium",
"items": [
{
"productName": "Servicio de consultoría",
"unitPrice": 5000,
"quantity": 1,
"discountPct": 0
}
],
"notes": "Incluye soporte prioritario",
"shippingCost": 0,
"currency": "MXN",
"isActive": true,
"createdAt": "2026-04-01T10:00:00.000Z",
"updatedAt": "2026-04-01T10:00:00.000Z",
"creator": {
"name": "Juan García"
}
}
]Crear Plantilla
POST /api/templates
Permiso: config:manage | Plan: PRO
Crea una nueva plantilla de cotización.
Cuerpo de la solicitud:
{
"name": "Paquete Premium",
"description": "Cotización estándar para clientes premium",
"items": [
{
"productName": "Servicio de consultoría",
"unitPrice": 5000,
"quantity": 1,
"discountPct": 0
}
],
"notes": "Incluye soporte prioritario",
"shippingCost": 150,
"currency": "MXN"
}| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| name | string | Sí | Nombre de la plantilla (1-100 caracteres) |
| description | string | No | Descripción (máximo 500 caracteres) |
| items | array | Sí | Al menos un producto |
| notes | string | No | Notas de la cotización (máximo 2,000 caracteres) |
| shippingCost | number | No | Costo de envío (predeterminado: 0) |
| currency | string | No | Código de moneda (predeterminado: "MXN", máximo 10 caracteres) |
Respuesta 201 Created: Devuelve la plantilla creada.
Errores:
| Status | Error | Cuando |
|---|---|---|
| 400 | Mensaje de validación | Datos inválidos o faltantes |
| 403 | "Sin permisos" | El usuario no tiene permiso config:manage |
| 403 | "Función disponible en plan PRO" | El tenant tiene plan FREE |
Obtener una Plantilla
GET /api/templates/:id
Obtiene una plantilla individual con el nombre del creador.
Respuesta 200 OK: Devuelve el objeto de plantilla.
Errores:
| Status | Error | Cuando |
|---|---|---|
| 404 | "Plantilla no encontrada" | No se encontró la plantilla en el tenant |
Actualizar Plantilla
PATCH /api/templates/:id
Permiso: config:manage | Plan: PRO
Actualiza una plantilla existente. Todos los campos son opcionales.
Cuerpo de la solicitud:
{
"name": "Paquete Premium v2",
"items": [
{
"productName": "Servicio de consultoría",
"unitPrice": 6000,
"quantity": 1,
"discountPct": 10
}
]
}Respuesta 200 OK: Devuelve la plantilla actualizada.
Eliminar Plantilla
DELETE /api/templates/:id
Permiso: config:manage
Desactiva una plantilla (eliminación lógica — establece isActive en false). La plantilla deja de aparecer en las listas pero no se elimina de la base de datos.
Respuesta 200 OK:
{
"ok": true
}Uso con Zapier
Las plantillas se integran con Zapier a través de dos endpoints adicionales:
- Crear cotización desde plantilla:
POST /api/zapier/actions/create-from-template— crea una cotización usando los productos y configuración de una plantilla - Listar plantillas:
GET /api/zapier/actions/list-templates— devuelve las plantillas disponibles para el dropdown dinámico en Zapier
Consulta la guía de Zapier para más detalles.