Changelog
O que mudou na API, em ordem.
Mudanças retrocompatíveis entram sem aviso e aparecem aqui. Quebras não acontecem dentro de uma versão — veja Versões e depreciação.
Mídia pela API, e capacidades que dizem a verdade
Adicionado
- `POST /v1/uploads`: sobe um arquivo (multipart, campo `file`) e devolve um anexo `att_…`, válido para a organização e o ambiente da chave até `expires_at`. Mesmos tipos e mesmo limite do painel.
- `POST /v1/messages` envia `type` `image`, `video`, `audio` e `document` com `attachment_id`, pelo mesmo caminho de envio do painel. `type: "template"` continua recusado com `422 unsupported_message_type`.
- Código de erro `attachment_type_mismatch` (422): o `type` pedido não é o do arquivo anexado.
- `GET /v1/attachments/{id}/content` (alcance `messages:read`): baixa o arquivo de um anexo com a chave de API — o subido e a mídia das mensagens, inclusive a recebida do cliente.
Corrigido
- `attachment.url` — nas mensagens, no `message.received` e nos demais webhooks — trazia o caminho interno de mídia do painel, que a chave de API não alcança. Agora é o endereço absoluto de `GET /v1/attachments/{id}/content`. O tipo do campo não mudou; quem montava a URL à mão a partir do caminho antigo deve passar a usar o valor como veio.
- `GET /v1/channels`: o chat do site passou a declarar só `text` em `capabilities`. Imagem, áudio, vídeo e documento apareciam como suportados, mas o widget nunca os entregou ao visitante — mídia numa conversa do chat do site agora volta `422 unsupported_message_type`.
- O escopo `messages:write` descreve o que a API faz: texto e mídia (com o upload do anexo), e ainda não modelo aprovado.
A API pública, v1
Adicionado
- Contatos, conversas, mensagens, canais, atendentes, times, etiquetas, notas e campos personalizados.
- Webhooks com assinatura HMAC-SHA-256, reentrega com recuo e depurador de entregas no painel.
- Chaves de API com escopos granulares, e ambiente de teste isolado no banco.
- Idempotência por `Idempotency-Key` em mensagens, contatos e conversas.
- Paginação por cursor, limite por organização e `X-Amivu-Request-Id` em toda resposta.
- Especificação OpenAPI 3.1 em `api.amivu.com.br/v1/openapi.json`.
Escrevemos sobre operação de atendimento, canais e IA no blog da Amivu.