Setting up Webhooks

Webhooks allow you to send real-time notifications about user and message activity in Vero to external systems. This is useful for:

  • Triggering workflows in tools like Zapier or Segment.
  • Syncing events to your data warehouse for analysis.
  • Keeping your systems up to date with Vero activity.

This guide walks you through configuring and testing webhooks in Vero 2.0.

What are webhooks?

A webhook is a simple HTTP request that Vero sends to a URL you specify whenever certain events occur in your project (e.g. a message is sent or a user unsubscribes).

Each webhook includes a JSON payload with details about the event.

Add or edit webhooks

To manage your webhooks:

  1. Go to Settings → Project → Reporting Webhooks.
  2. Click Add webhook. add-webhook
  3. Enter the following details: add-webhook
  • URL – The endpoint in your system that should receive the webhook payload.
  • Event – Choose which activity will send data to this URL:
    • Sent (email has been sent by Vero)
    • Delivered (email has been delivered to the recipient email server)
    • Opened
    • Clicked
    • Failed
    • Bounced (hard and soft)
    • Converted
    • Unsubscribed
    • Resubscribed
    • Complained
    • User created
    • User updated
  1. Click Save. To edit an existing webhook, use the actions menu and select Edit.

Test your webhooks

You can test a webhook to ensure your endpoint is set up correctly:

  1. In the webhooks list, click the actions menu next to a webhook and choose Test.

test

  1. Vero will send a sample payload to your webhook URL.
  2. You’ll see a success or failure message in the app.

For testing, try using Request Bin - it's a fantastic way to see the webhooks Vero (or any service) sends.

Enable or disable webhooks

Next to each webhook you’ll find an enable webhooks toggle, with this you can enable/disable each webhook individually.

enable

Webhook payloads

Each webhook sends a JSON payload containing details about the event:

sent – When an email has been sent by Vero

    {
        "sent_at":1435016238,
        "type":"sent",
        "user": {
            "id":123,
            "email":"steve@getvero.com"
        },
        "campaign": {
            "id":987,
            "type":"transactional",
            "name":"Order confirmation",
            "group": "Order confirmation - Email 6",
            "channel": "email",
            "subject":"Your order is being processed!",
            "trigger-event":"purchased item",
            "permalink":"http://app.getvero.com/view/1/341d64944577ac1f70f560e37db54a25",
            "sent_to":"user@example.com",
            "variation":"Variation A",
            "locale":"en-US"
        },
        "message_id": "20190730123456.1.1B72E094173067F0F@veromail.com"
    }

delivered – When an email has been delivered to the ISP server:

    {
        "delivered_at":1435016238,
        "type":"delivered",
        "user": {
            "id":123,
            "email":"steve@getvero.com"
        },
        "campaign": {
            "id":987,
            "type":"transactional",
            "name":"Order confirmation",
            "group": "Order confirmation - Email 6",
            "channel": "email",
            "subject":"Your order is being processed!",
            "trigger-event":"purchased item",
            "permalink":"http://app.getvero.com/view/1/341d64944577ac1f70f560e37db54a25",
            "sent_to":"user@example.com",
            "variation":"Variation A",
            "locale":"en-US"
        },
        "message_id": "20190730123456.1.1B72E094173067F0F@veromail.com"
    }

opened – When a customer has opened an email

    {
        "opened_at":1435016238,
        "user_agent":"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
        "type":"opened",
        "user": {
            "id":123,
            "email":"steve@getvero.com"
        },
        "campaign": {
            "id":987,
            "type":"transactional",
            "name":"Order confirmation",
            "group": "Order confirmation - Email 6",
            "channel": "email",
            "subject":"Your order is being processed!",
            "trigger-event":"purchased item",
            "permalink":"http://app.getvero.com/view/1/341d64944577ac1f70f560e37db54a25",
            "sent_to":"user@example.com",
            "variation":"Variation A",
            "locale":"en-US"
        },
        "message_id": "20190730123456.1.1B72E094173067F0F@veromail.com"
    }

clicked – When a customer has clicked an email

    {
        "clicked_at":1435016238,
        "user_agent":"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
        "type":"clicked",
        "user": {
            "id":123,
            "email":"steve@getvero.com"
        },
        "campaign": {
            "id":987,
            "type":"transactional",
            "name":"Order confirmation",
            "group": "Order confirmation - Email 6",
            "channel": "email",
            "subject":"Your order is being processed!",
            "trigger-event":"purchased item",
            "permalink":"http://app.getvero.com/view/1/341d64944577ac1f70f560e37db54a25",
            "sent_to":"user@example.com",
            "variation":"Variation A",
            "locale":"en-US"
        },
        "message_id": "20190730123456.1.1B72E094173067F0F@veromail.com"
    }

failed - When an email could not send due to an error (such as a bad Fusion response)

    {
        "type":"failed",
        "bounce_code":500,
        "bounce_message": "FusionBadResponse",
        "user": {
            "id":123,
            "email":"steve@getvero.com"
        },
        "campaign": {
            "id":987,
            "type":"transactional",
            "name":"Order confirmation",
            "group": "Order confirmation - Email 6",
            "channel": "email",
            "subject":"Your order is being processed!",
            "trigger-event":"purchased item",
            "permalink":"http://app.getvero.com/view/1/341d64944577ac1f70f560e37db54a25",
            "sent_to":"user@example.com",
            "variation":"Variation A",
            "locale":"en-US"
        }
    }

bounced – When an email has not been delivered to the ISP server

    {
        "bounced_at":1435016238,
        "bounce_type":"hard",
        "bounce_code":550,
        "bounce_message":"5.5.1 The email account that you tried to reach does not exist.",
        "type":"bounced",
        "user": {
            "id":123,
            "email":"steve@getvero.com"
        },
        "campaign": {
            "id":987,
            "type":"transactional",
            "name":"Order confirmation",
            "group": "Order confirmation - Email 6",
            "channel": "email",
            "subject":"Your order is being processed!",
            "trigger-event":"purchased item",
            "permalink":"http://app.getvero.com/view/1/341d64944577ac1f70f560e37db54a25",
            "sent_to":"user@example.com",
            "variation":"Variation A",
            "locale":"en-US"
        },
        "message_id": "20190730123456.1.1B72E094173067F0F@veromail.com"
    }

converted – When a customer has converted on an email campaign

    {
        "type":"converted",
        "user": {
            "id":123,
            "email":"steve@getvero.com"
        },
        "campaign": {
            "id":987,
            "type":"transactional",
            "name":"Order confirmation",
            "group": "Order confirmation - Email 6",
            "channel": "email",
            "subject":"Your order is being processed!",
            "trigger-event":"purchased item",
            "permalink":"http://app.getvero.com/view/1/341d64944577ac1f70f560e37db54a25",
            "sent_to":"user@example.com",
            "variation":"Variation A",
            "locale":"en-US"
        },
        "message_id": "20190730123456.1.1B72E094173067F0F@veromail.com"
    }

resubscribed – When a customer has resubscribed

     {
        "type": "resubscribed",
        "user": {
            "id": 123,
            "email": "steve@getvero.com"
        }
    }

unsubscribed – When a customer has unsubscribed

    {
        "unsubscribed_at":1435016238,
        "type":"unsubscribed",
        "user": {
            "id":123,
            "email":"steve@getvero.com"
        },
        "campaign": {
            "campaign_title": "Order confirmation",
            "series_title": "Order Tracking",
            "channel": "email",
            "message_id": "20190730123456.1.1B72E094173067F0F@veromail.com",
            "email_subject": "Your order is being processed!",
            "variation_name": "Control",
            "template": "Order Template"
        },
    }

complained – When a customer complains through their email client

   {
        "complained_at": 1435016238,
        "type": "complained",
        "user": {
            "id": 123,
            "email": "steve@getvero.com"
        },
        "event": {
              "data": {"key": "value"},
              "name": "Test event",
              "triggered_at": 1424012238
        },
        "campaign": {
            "id": 987,
            "type": "transactional",
            "name": "Order confirmation",
            "group": "Order confirmation - Email 6",
            "channel": "email",
            "subject": "Your order is being processed!",
            "trigger-event": "purchased item",
            "permalink": "http://app.getvero.com/view/1/341d64944577ac1f70f560e37db54a25",
            "sent_to": "user@example.com",
            "variation": "Variation A",
            "locale": "en"
        }
        "message_id": "20190730123456.1.1B72E094173067F0F@veromail.com"
    }

user_created - When a user profile is created via the API or import

    {
        "type":"user_created",
        "user": {
            "firstname":"Steve",
            "company":"Vero",
            "role":"Bot",
            "id":123,
            "email":"steve@getvero.com"
        }
    }

user_updated - When a user profile is updated via the API or import

     {
        "action": "user_updated",
        "type":"user_updated",
        "user": {
            "id":123,
            "email":"steve@getvero.com"
        },
        "id": "123",
        "email": "steve@getvero.com",
        "changes": {
            "_tags": {
                "add": ["active-customer"],
                "remove":["unactive-180-days"]
            }
        }
    }

Best practices

To ensure your experience with Vero’s webhooks is a good one, take these best practices into consideration:

  • Ensure your webhook URL is secure and only accepts requests from Vero or other trusted sources.

  • Respond quickly (within 5 seconds) to webhook requests to avoid timeouts. Note: Vero does not currently retry failed webhook requests. If your endpoint returns a non-2xx response or times out, that webhook will not be resent.

    ⚠️ Note: Vero does not currently retry failed webhook requests. If your endpoint returns a non-2xx response or times out, that webhook will not be resent.

  • Consider queueing incoming webhook data in your system to handle spikes in traffic.

Authors

  • Rory Colsell
    Product