---
title: "Register a saved-query webhook"
method: POST
path: "/v1/webhooks"
tags: ["Webhooks"]
---

# Register a saved-query webhook

`POST /v1/webhooks`

## Request

- Base URL: `https://api.omniaauto.ca`
- URL: `https://api.omniaauto.ca/v1/webhooks`
- Auth: HTTP bearer

Register a search and a URL. When a listing that matches first appears, it is POSTed to your URL — no polling.

The body is `{"webhook_id", "query", "count", "listings"}`, where each listing uses the same schema as /v1/listings. Every delivery carries `X-Omnia-Signature: sha256=<hex HMAC of the raw body>`, keyed with the secret returned once at creation — verify it with a constant-time comparison before trusting the payload.

A new subscription starts from the moment you create it; it does not replay history. Deliveries retry until they succeed, so a 5xx on your side is resent rather than lost, and a URL that fails 10 times in a row is parked. Your URL must be public HTTPS. Limit 10 active webhooks per key.

## Request body

- object
  - `url` string, uri, required
  - `query` object: Any /v1/listings filter: province, make, model, trim, year, condition, body_type, drivetrain, fuel_type, city, oem, price_min/max, mileage_min/max, year_min/max.

## Response `201`

Created — the signing secret is returned ONCE

## Other responses

- `400`: Bad url or unsupported filter
- `409`: Too many active webhooks

---

[API](https://skmtc.dev/omniaauto/apis/omniaauto-canadian-vehicle-listings-api.md) · [All operations](https://skmtc.dev/omniaauto/apis/omniaauto-canadian-vehicle-listings-api/llms.txt) · [OpenAPI document](https://skmtc.dev/omniaauto/apis/omniaauto-canadian-vehicle-listings-api/revisions/f46ac0dabe3d?raw)
