Webhooks Overview

Webhooks allow you to quickly find out if something happened in Fleetio. You can subscribe to certain events and whenever that event happens, Fleetio will make a HTTP POST to your endpoint containing the relevant data (serialized as JSON).

📘

Webhooks are only available on our Advanced plans

Timing & Delivery

Whenever an update event occurs in Fleetio, Fleetio will wait a little for any other identical events before firing off a message to your webhook. So if 5 people edited the same vehicle within a minute, you will only get one message. This is done to prevent your endpoint from being overloaded. Events based on creation or deletion are fired off as soon as possible.

Webhook events are asynchronous. We will do our best to deliver them as soon as possible to your endpoint, so you should not rely on them for anything time sensitive. Your application should be prepared for delays in receiving messages, or even out of order messages if there are interruptions or delays in the network.

Please contact [email protected] if you experience delays longer than 1 hour.

Message Format

Fleetio will make a HTTP POST to your endpoint with a content type of application/json.
The body of the POST will contain a JSON message that looks like the following:

{
  id: 1,
  event: "vehicle_updated",
  timestamp: "2017-11-03T10:15:38.741-05:00",
  triggered_by: "[email protected]",
  payload: {
    "id": 123,
    "current_meter_value": 110111.0,
    additional vehicle fields.....
  }
}

As you can see from the sample message, the payload will always contain the object that caused the webhook to fire. So if the event is vehicle_updated, the payload will contain a vehicle object. Similarly, if the webhook event is contact_created, the payload will contain a contact object.

Each message is timestamped by the timestamp attribute indicating when the event happened. This is a ISO8601 string, that is either the account's time zone or Central Time, if there is none set.

The triggered_by attribute is set to the user who triggered this webhook event. For example, if an issue was created, triggered_by would be set to the user who created the issue. Note that triggered_by can be null, if the event was generated by Fleetio as part of a background job.

Verifying Messages

In order to protect your endpoint from malicious hackers, Fleetio signs each message
with a shared key that you can find by selecting the "View Secret Key" action in the dropdown menu of your webhook. Using this key, Fleetio computes the HMAC SHA-256 digest with the message body and sends it in the X-Fleetio-Webhook-Signature HTTP header.

In order to verify that the message came from Fleetio, all you have to do is compute the HMAC SHA-256 digest of the raw HTTP body using the webhook secret as the key, and compare it with the X-Fleetio-Webhook-Signature HTTP header.

In Ruby, it would look like this:

OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), webhook.shared_key, message.body)

Response

Your endpoint MUST respond with a HTTP 200 code within 30 seconds. Any other code will make Fleetio think your endpoint failed to handle the message.

Failures and Retries

If you fail to handle the message, Fleetio will try 5 times over the next hour deliver the message to your endpoint. If none of these succeed, Fleetio will try once per hour for the next 24 hours. The timing of each attempt is described in the table below:

Attempt

Timing

1

1 minute after the original event

2

1 minute after last failure

3

5 minutes after last failure

4

15 minutes after last failure

5

30 minutes after last failure

6-29

hourly for the next 24 hours

If your endpoint fails to successfully handle the message by the end of the 24 hour period, we will mark the message as failed and undeliverable. The account owner and the creator of the webhook will also receive an email notification.

After 3 consecutive failed messages, we will disable your webhook, and send an email notification to the account owner and the webhook creator. It is up to you to fix your endpoint and then manually reenable the webhook under your Fleetio account settings.

Events

Fleetio will save all webhook events for 30 days. After 30 days of an event occurring, that event will be automatically removed. You can view all events that have been fired for your webhooks on the Webhook Events index page.

For a reference to all events Fleetio publishes, please go here.

Webhook Event Statuses

Status

Description

Success

Successfully POSTed to webhook endpoint

Failed

Failed to POST to endpoint. This could either be due to your endpoint not returning a HTTP 200, or your endpoint taking more than 30 seconds to respond, or something else.

Sending

Fleetio is currently POSTing a message to the webhook endpoint.

Will Not Send

The webhook endpoint was disabled (either by Fleetio or by a user) before it was able to POST.