Plantillas
CRUD de plantillas de WhatsApp. Sincroniza estado con Meta (PENDING / APPROVED / REJECTED).
/organizations/:orgId/templates·10 endpoints·Source: mosend-wb-backend/src/modules/templates/templates.controller.ts/organizations/:orgId/templatesLista las plantillas de la organización, opcionalmente filtradas por WABA.
Path params
orgIdstringrequerido
Query params
wabaIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/templates' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/templates/:idObtiene el detalle de una plantilla por su id.
Path params
orgIdstringrequeridoidstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/templates/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/templatesCrea una plantilla y la envía a Meta para aprobación.
Path params
orgIdstringrequerido
Body (JSON)
wabaIdstring · uuidrequeridonamestringrequeridolanguagestringrequeridocategorystringrequeridoMARKETINGUTILITYAUTHENTICATIONcomponentsTemplateComponentDto[]requerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/templates' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"wabaId": "00000000-0000-0000-0000-000000000000","name": "<name>","language": "<language>","category": "MARKETING","components": []}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "bienvenida_v1",
"language": "es_CO",
"category": "MARKETING",
"components": []
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/templates/:idMeta solo permite editar plantillas aprobadas o rechazadas; name/language/category no son editables. Cuotas de Meta: 1 edición/24h, máximo 10/mes por plantilla.
Path params
orgIdstringrequeridoidstringrequerido
Body (JSON)
componentsTemplateComponentDto[]requerido
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/templates/00000000-0000-0000-0000-000000000000' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"components": []}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "bienvenida_v1",
"language": "es_CO",
"category": "MARKETING",
"components": []
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/templates/:idBorra una plantilla — primero en Meta y luego en la BD local.
Path params
orgIdstringrequeridoidstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/templates/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/templates/:id/copiarEn Meta cada plantilla es de una cuenta y solo sus números la pueden enviar. La copia se manda a aprobación (queda PENDING). No se copian las de autenticación, carrusel ni oferta por tiempo limitado.
Path params
orgIdstringrequeridoidstringrequerido
Body (JSON)
wabaIdstring · uuidrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/templates/00000000-0000-0000-0000-000000000000/copiar' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"wabaId": "00000000-0000-0000-0000-000000000000"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"planSlug": "pro",
"coupon": null
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/templates/syncSincroniza plantillas desde Meta para todos los WABA de la organización
Path params
orgIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/templates/sync' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/templates/:id/header-mediaCambia la cabecera predeterminada (imagen, video o PDF) de la plantilla: la que se usa cuando un envío no trae su archivo.
Path params
orgIdstringrequeridoidstringrequerido
Respuestas
- 200
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/templates/00000000-0000-0000-0000-000000000000/header-media' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/templates/:id/header-mediaQuita la cabecera predeterminada: cada envío tendrá que traer su archivo.
Path params
orgIdstringrequeridoidstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/templates/00000000-0000-0000-0000-000000000000/header-media' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/templates/upload-header-mediaSube imagen/video/PDF para usar como Header de plantilla. Devuelve header_handle.
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/templates/upload-header-media' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}