unipile-v2-posts-and-webhookslisted
Install: claude install-skill henriquecaner/next-level-outreach
# Unipile v2 — Posts e Webhooks
Rotas de post são `/v2/{account_id}/posts/...`. Ver [[unipile-v2-foundations]].
## Regra de ouro dos posts: use `social_id`, não `id`
Toda ação (reagir/comentar/listar) usa o `social_id` no formato `urn:li:activity:...`
(ou `urn:li:ugcPost:...` / `urn:li:share:...`). O `id` numérico é fonte de bug.
- Listar posts de um usuário/empresa: `GET /v2/{account_id}/users/{user_id}/posts`
→ use o campo `social_id` de cada item. ✅ Nosso `listRecentPosts` prioriza `social_id`.
### Reagir a um post — `POST /v2/{account_id}/posts/{post_id}/reactions`
(`{post_id}` = social_id.) Body: `{ "reaction": "<tipo>" }`. No LinkedIn o tipo é o
enum `linkedin_like | linkedin_celebrate | linkedin_support | linkedin_love |
linkedin_insightful | linkedin_funny`. ✅ Nosso `reactToPost` normaliza `like` →
`linkedin_like`. (Reagir a um comentário: `.../comments/{comment_id}/reactions`.)
### Comentar um post — `POST /v2/{account_id}/posts/{post_id}/comments`
Body: `{ "text": "…", "comment_as": "<user_id p/ comentar como org (opcional)>",
"attachments": [...] }`. Responder a um comentário: `.../comments/{comment_id}`.
## Webhooks (recebimento)
Os payloads de webhook são o **formato realtime da Unipile** e não mudaram na v2 (são
independentes do versionamento das rotas REST). Gestão de endpoints:
`POST /v2/webhooks/endpoints/`. Regra operacional: **responda 200 em < 30s**;
webhooks são at-least-once → **dedup por id externo** (`message_id`, `event_id`…).
### Novas men