Templates API Routes
Documentação de todas as rotas em /api/templates/**.
GET /api/templates
Seção intitulada “GET /api/templates”Descrição: Lista templates de mensagem WhatsApp com paginação offset/cursor, busca e filtros. Auth: Required
Request:
- Query params:
page,limit,cursor,search,category,meta_status,folder_id,sort,order
Response (offset mode):
- 200:
{ data: { data: Template[], total, page, limit, totalPages } }
Response (cursor mode):
- 200:
{ data: { data: Template[], nextCursor, hasMore } }
POST /api/templates
Seção intitulada “POST /api/templates”Descrição: Cria um novo template de mensagem WhatsApp.
Request:
- Body (templateSchema):
{ name, category, language, template_type, header_type?, body_text?, footer_text?, buttons?, example_values?, carousel_cards?, ... }
Response:
- 201:
{ data: Template }
Notas: example_values do input e mapeado para variables no banco.
GET /api/templates/[id]
Seção intitulada “GET /api/templates/[id]”Response:
- 200:
{ data: Template } - 404: Não encontrado
PUT /api/templates/[id]
Seção intitulada “PUT /api/templates/[id]”Descrição: Atualiza um template (parcial).
Response:
- 200:
{ data: Template } - 404: Não encontrado
DELETE /api/templates/[id]
Seção intitulada “DELETE /api/templates/[id]”Descrição: Soft-deleta um template.
Audit: delete message_template
Response:
- 204: No Content
POST /api/templates/[id]/submit
Seção intitulada “POST /api/templates/[id]/submit”Descrição: Submete um template para aprovação na Meta WhatsApp API.
Request:
- Body (opcional):
{ profile_id?: string }
Response:
- 200:
{ data: { meta_template_id, status, category } } - 502: WhatsAppError (Meta API falhou)
Notas:
- Converte formato x17 para Meta via
convertToMetaFormat() - Submete via
MetaWhatsAppApi.submitTemplate() - Atualiza
meta_template_idemeta_status: "pending"no banco - Cria notificação in-app
POST /api/templates/media/upload
Seção intitulada “POST /api/templates/media/upload”Descrição: Upload de mídia para templates (header image/video/document). Auth: Required Rate Limit: 5 uploads / 60s
Request:
- Content-Type: multipart/form-data
- Body:
file(File)
Response:
- 200:
{ data: { url, type, size, name } }
Notas:
- Tipos: image/jpeg, image/png, image/webp (max 5MB), video/mp4 (max 16MB), application/pdf (max 100MB)
- Upload para bucket
template-mediado Supabase Storage - Path:
{accountId}/{uuid}.{ext}