Skip to content

Webhook Subscriptions

Taxi & Private HireProductsWebhook › Webhook Subscriptions

Generally available

Tenant-configured outbound webhook subscriptions: subscribe a destination URL to platform events (trip.created, trip.status_changed, trip.late_predicted, etc.) with HMAC signing, retry on 5xx, and optional decision-tree filtering to narrow which entities fire which subscription. Used heavily for downstream integrations (dispatcher CRM, billing systems, customer notification channels).

Fields

FieldTypeDescription
name string Operator-facing label for the subscription. Surfaced on the webhook-management UI and in delivery-log filtering.
active boolean Whether the subscription fires on matching events. Set false to mute without deleting the configuration.
eventName string Event-name key the subscription listens for (e.g. `trip.created`, `trip.status_changed`, `trip.late_predicted`). Resolved from the WebhookEvent registry.
url string Destination URL the platform POSTs to when this subscription fires. HTTPS recommended; the platform signs every payload with the configured auth headers.
method WebhookMethod · GET | POST | PUT | PATCH HTTP method (POST / PUT / PATCH). Default POST — change only if the receiver explicitly requires a different verb.
headers json Additional outbound HTTP headers (e.g. integration-specific routing keys). Authentication headers are configured separately via the auth fields below; this is for extras.
bodyMode WebhookBodyMode · STANDARD | CUSTOM_TEMPLATE | NONE Payload shape: STANDARD (full platform JSON envelope) or TEMPLATE (renders `bodyTemplate` against the event variables — for receivers that need a specific schema).
bodyTemplate text Twig-style template for the outbound body — used only when `bodyMode` = TEMPLATE. Event variables (trip, customer, etc.) are available as template scope.
decisionTree JsonStorage JsonCondition decision tree filtering which entities fire this subscription. Empty / null = fire on every matching event-name; populated = only fire when the tree evaluates true for the trigger entity.
authType WebhookAuthType · NONE | BEARER | BASIC | API_KEY Auth mode for the outbound request: NONE / BEARER / BASIC / HEADER. Drives which of the auth* fields below get used to compute the signing headers.
authToken string
authUsername string
authPassword string
authHeaderName string
retryEnabled boolean Whether the platform retries on non-success responses. When false, a single failed delivery is logged and dropped.
retryMaxAttempts integer How many times the platform will retry a failed delivery before giving up. Active only when `retryEnabled` = true. Default 3.
retryDelaySeconds integer Seconds to wait before the first retry. Subsequent retries multiply this by `retryBackoffMultiplier`.
retryBackoffMultiplier float Exponential-backoff multiplier between retry attempts. 2.0 means each retry waits 2× the previous delay (30s, 60s, 120s, ...).
successCodePattern string HTTP status pattern treated as success — `2xx` (any 2xx) or an exact code like `204`. Anything else triggers the retry path (when enabled) or marks the delivery failed.
debounceSeconds integer Coalesce-debounce window in seconds. When > 0, repeated events for the same target entity collapse into a single delivery at the end of the window — useful for high-frequency status changes.
consecutiveFailures integer Running count of consecutive failed deliveries. The auto-disable circuit-breaker trips this against a tenant-configured threshold — too many failures sets `active = false` + `disabledReason`.
disabledReason string Reason the subscription was auto-disabled (e.g. "exceeded 50 consecutive failures"). Null when the subscription is healthy or manually disabled.
lastDeliveryDate integer
lastResponseCode integer
clientId bigint Tenant scope. Every tenant-aware entity carries this; `ClientFilter` enforces row-level isolation on read; the multi-tenancy routing layer (`/client/{clientId}`) sets it at create time. Surfaced only under `admin` / `tripLog` groups — never to end users.
internalKey string Optional client-supplied external reference / idempotency key. When present, lets external systems correlate platform-side records back to their own source-of-truth ids. Not persisted to a column — populated by the request handler when the caller sets it.
__objectType string Discriminator string (entity class short-name) emitted alongside the id in serialized output. Resolved at read time by `getObjectType()`; lets the FE dispatch entity-specific rendering without inspecting the URL.
id bigint Snowflake-style primary key (unsigned BIGINT). Generated by `IdFactory` at create time; surfaced to the FE / API as a `G`-prefixed string and stripped back to plain bigint server-side before Doctrine lookup.
createdDate integer Unix timestamp the row was first persisted. Set in the entity's PrePersist hook; never rewritten on subsequent updates.
updatedDate integer Unix timestamp the row was last touched. Bumped on every commit that hits the Doctrine UoW for this entity; drives FE invalidation + the listing change cursor.
passiveUpdatedDate int Read-through alias for `updatedDate` exposed under different serializer groups. Lets the FE distinguish "real edit" from "background touch" projections without changing the underlying column.
listingUpdatedDate int Listing-projection timestamp surfaced only under the `listMode` group. Driven by `TripCache` and other listing-shape refreshers separately from `updatedDate` so a listing rebuild doesn't trigger detail-page invalidation.