Repository navigation
Notifications and Webhooks
torq notifies you only through outbound webhooks; there is no e-mail. Administrators add endpoints under Settings → Webhooks. Each endpoint sends in the language and formats of the user who created it.
| Event | When | Severity |
|---|---|---|
reminder_due_soon |
A reminder enters its "due soon" window | warning |
reminder_overdue |
A reminder becomes overdue | critical |
digest_weekly |
Weekly summary of overdue and due-soon reminders | info |
digest_monthly |
Monthly summary | info |
test |
The Send test button | info |
Each endpoint chooses which events it receives. Digest days and hours are set under Settings → Instance. Reminders are re-checked with every odometer update and service entry.
| Preset | URL to enter | Notes |
|---|---|---|
| Discord | Channel webhook URL | Rich embeds, coloured by severity |
| ntfy | Topic URL, e.g. https://ntfy.example/torq
|
Add Authorization: Bearer … for protected topics |
| Gotify | https://gotify.example/message |
Add the app token as header X-Gotify-Key
|
| Home Assistant | Webhook trigger URL …/api/webhook/<id>
|
Use trigger.json.title, trigger.json.reminder.state and so on in automations |
| Generic JSON | Any URL | The torq.notification/v1 payload below |
Custom headers can be added to every endpoint. Header values are write-only: torq never shows or returns them after saving.
Tip
Use Send test after saving an endpoint. The delivery log on the endpoint shows the status code and response of every attempt.
Failed deliveries are retried after 30 seconds, 2 minutes and 10 minutes. Every attempt appears in the endpoint's delivery log.
Content-Type: application/json, schema torq.notification/v1. Example for an overdue reminder:
{
"schema": "torq.notification/v1",
"event": "reminder_overdue",
"severity": "critical",
"title": "Overdue: Engine Oil & Filter — Mercedes-Benz C 220 CDI",
"message": "-350 km",
"url": "https://torq.example/vehicles/1/reminders",
"sent_at": "2026-10-30T08:00:00Z",
"reminder": {
"id": 7,
"name": "Engine Oil & Filter",
"state": "overdue",
"trigger": "km",
"next_due_km": 225000,
"next_due_date": "2027-10-15",
"remaining_km": -350,
"remaining_days": 350
},
"vehicle": {
"id": 1,
"name": "Mercedes-Benz C 220 CDI",
"license_plate": "B-TQ 646",
"current_odometer_km": 225350
}
}| Field | Meaning |
|---|---|
schema |
Always torq.notification/v1
|
event |
One of the events above |
severity |
info, warning or critical
|
title, message
|
Human-readable text in the endpoint owner's language |
url |
Link into torq; only present when TORQ_BASE_URL is set |
sent_at |
RFC 3339 timestamp |
reminder.state |
due_soon or overdue
|
reminder.trigger |
Which limit caused the state: km or time
|
reminder.remaining_km, remaining_days
|
Negative when overdue |
vehicle |
The vehicle; absent in digests (each digest item carries its own vehicle) |
Digests replace reminder and vehicle with a digest object:
{
"schema": "torq.notification/v1",
"event": "digest_weekly",
"severity": "info",
"title": "Weekly maintenance digest",
"message": "25",
"digest": {
"period": "weekly",
"overdue": [ { "id": 7, "name": "Engine Oil & Filter", "state": "overdue", "vehicle": { "id": 1, "name": "…" } } ],
"due_soon": []
}
}Getting started
Features
Operations