Webhooks are being rolled out by organization. If you do not see the Webhooks card in Settings → MCP and API, contact support.
The two events
There is one address per event type:
Not sent: group conversations, company page messages and sponsored messages. Imports and sync changes send no events either.
What you receive
Each event is onePOST with a JSON body:
id: unique per event and per address, and the same on every retry. Use it to skip events you already handled.timestamp: when the event happened (the message time, or when LinkedIn reported the connection), not when it was sent to you.is_test:truefor the test events you send from the settings page.
content-type: application/json, user-agent: Groovin-Webhooks/1, webhook-id, webhook-timestamp, webhook-signature.
What to answer
- Answer with any 2xx status within 10 seconds, then do your processing.
- Redirects are not followed: use the final address.
- Answer 410 Gone to turn the webhook off.
- If your address requires authentication, let these requests through and verify the signature instead.
Good to know
- Events can arrive more than once and out of order: skip repeats using
webhook-id, and order bytimestamp. - If one LinkedIn account is connected to several Groovin accounts, each sends its own events. To skip repeats across them, use
data.message.provider_idfor messages (ordata.message.idwhen it isnull), and the pair of LinkedIn profile ids for connections. - After a LinkedIn reconnection, the messages received in the meantime can arrive in a burst.
- Message texts and names are written by LinkedIn users. Treat them as untrusted, especially if an AI reads them.
- New fields can be added at any time: ignore the ones you do not use. A breaking change would ship under a new event type.
- Test events carry your real
groovin_userandlinkedin_accountblocks, and made-up message, contact and CRM data.