Renvo
API docs
Concepts

Webhooks

Receive real-time event notifications when things happen in your Renvo organization. Configure endpoints in Settings → Developers.

Event delivery

When an event occurs, we POST a JSON payload to your endpoint. Events include a unique ID, type, timestamp, and the resource that triggered it.

Example webhook deliveryhttp
POST /your-webhook-endpoint HTTP/1.1
Host: yourbiz.com
Content-Type: application/json
User-Agent: Renvo-Webhooks/1.0
Renvo-Signature: t=1714944000,v1=4f9b7c8a2e1d…
Renvo-Event-Id: evt_a4d2e1c0
Renvo-Event-Type: rental.created

{
  "id": "evt_a4d2e1c0",
  "type": "rental.created",
  "created": 1714944000,
  "data": {
    "object": "rental",
    "id": "re_…",
    "customer_id": "cu_…",
    "vehicle_id": "ve_…",
    "status": "NEW"
  }
}

Verifying signatures

Every delivery is signed with HMAC-SHA256 using the secret shown when you created the webhook. The Renvo-Signature header contains a timestamp and signature pair:

Renvo-Signature: t=1714944000,v1=<hmac_sha256_hex>

To verify, compute HMAC-SHA256(secret, "{t}.{raw_body}") and constant-time compare to the v1 value.

import { createHmac, timingSafeEqual } from 'node:crypto'

export function verifyRenvoSignature(rawBody, header, secret) {
  const m = /^t=(\d+),v1=([a-f0-9]+)$/.exec(header)
  if (!m) return false
  const [, ts, sig] = m
  // Reject deliveries older than 5 minutes (replay protection)
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false
  const expected = createHmac('sha256', secret)
    .update(`${ts}.${rawBody}`)
    .digest('hex')
  return timingSafeEqual(Buffer.from(expected), Buffer.from(sig))
}

Retries

We retry failed deliveries up to 5 timeswith exponential backoff (30s, 2m, 10m, 30m, 2h). After 20 consecutive failures across all events, we auto-disable the endpoint and you'll need to re-enable it from the dashboard.

Your endpoint must respond with 2xx within 10 seconds. Anything else (or a timeout) is treated as failure.

Idempotency

Deliveries are at-least-once. The same event may be delivered more than once during a retry window. Use Renvo-Event-Id as a deduplication key.

Event types

rental.createdrental.updatedrental.completedrental.cancelledcustomer.createdcustomer.updatedinvoice.createdinvoice.paidinvoice.voidedvehicle.createdvehicle.updatedtoll.attachedviolation.attachedlead.received