# Zapini API — Mensagens

**Versão:** 1.2.0
**Base URL:** `https://zapini.app/api/v1`

---

## Autenticação

Todos os endpoints requerem um Bearer Token:

```
Authorization: Bearer {your_token}
Accept: application/json
Content-Type: application/json
```

Gere tokens de API no painel admin em **API Docs → Gerenciar Tokens**.

---

## Mensagens

### GET /messages

Listar mensagens com filtros.

**Parâmetros de Consulta:**

| Campo | Tipo | Descrição |
|-------|------|-----------|
| instance_id | string | UUID da instância |
| conversation_id | integer | ID da conversa |
| direction | string | Direção (incoming, outgoing) |
| status | string | Status (pending, sent, delivered, read, failed) |
| from | datetime | Data de início |
| to | datetime | Data de fim |
| search | string | Pesquisar no corpo da mensagem |
| per_page | integer | Itens por página (padrão: 20) |

---

### POST /messages/send

Enviar mensagem de texto.

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| instance_id | string | Sim | UUID da instância |
| recipient | string | Sim | Número do destinatário (formato: +15551234567) |
| message | string | Sim | Conteúdo da mensagem (máx. 4096 caracteres) |
| schedule_at | datetime | Não | Agendar envio para data/hora específica |
| reply_to | string | Não | UUID ou ID da mensagem para responder |

**Exemplo de Requisição:**

```bash
curl -X POST https://zapini.app/api/v1/messages/send \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "instance_id": "550e8400-e29b-41d4-a716-446655440000",
    "recipient": "+15551234567",
    "message": "Hello! This is a test message."
  }'
```

**Resposta:**

```json
{
  "success": true,
  "message": "Message added to queue",
  "data": {
    "uuid": "660e8400-e29b-41d4-a716-446655440001",
    "status": "pending",
    "scheduled_at": null,
    "delay_seconds": 15,
    "remaining_quota": 449
  }
}
```

---

### POST /messages/send-media

Enviar mensagem com mídia.

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| instance_id | string | Sim | UUID da instância |
| recipient | string | Sim | Número do destinatário |
| media_url | string | Sim | URL pública do arquivo |
| media_type | string | Sim | Tipo (image, video, audio, document) |
| caption | string | Não | Legenda (máx. 4096 caracteres) |
| filename | string | Não | Nome do arquivo (para documentos) |
| schedule_at | datetime | Não | Agendar envio |

**Exemplo:**

```bash
curl -X POST https://zapini.app/api/v1/messages/send-media \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "instance_id": "550e8400-e29b-41d4-a716-446655440000",
    "recipient": "+15551234567",
    "media_url": "https://example.com/image.jpg",
    "media_type": "image",
    "caption": "Check out this image!"
  }'
```

---

### GET /messages/{uuid}

Retorna detalhes da mensagem.

---

### GET /messages/{uuid}/status

Retorna apenas o status da mensagem.

**Resposta:**

```json
{
  "success": true,
  "data": {
    "uuid": "660e8400-e29b-41d4-a716-446655440001",
    "status": "delivered",
    "sent_at": "2025-01-15T10:30:00Z",
    "delivered_at": "2025-01-15T10:30:05Z",
    "read_at": null,
    "error_message": null,
    "retry_count": 0
  }
}
```

---

### PATCH /messages/{uuid}/edit

Editar uma mensagem enviada.

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| message | string | Sim | Novo conteúdo da mensagem |

**Notas:**
- Apenas mensagens enviadas podem ser editadas
- A mensagem deve ter status sent, delivered ou read

---

### DELETE /messages/{uuid}

Excluir uma mensagem.

**Notas:**
- Apenas mensagens enviadas podem ser excluídas
- A mensagem também será excluída do WhatsApp do destinatário

---

### POST /messages/{uuid}/reaction

Adicionar reação a uma mensagem.

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| emoji | string | Sim | Emoji de reação |

---

### DELETE /messages/{uuid}/reaction

Remover reação de uma mensagem.

---

### GET /messages/{uuid}/reactions

Listar todas as reações de uma mensagem.

---

*Gerado por Zapini — https://zapini.app*
