Developers

Incoming webhooks

Incoming webhooks let an external system create a log by sending a single HTTP request — no API token required. Each webhook posts into one fixed channel.

Overview

An incoming webhook is created and configured from within Trailogs — you pick a channel, and optionally set defaults for category, owner, tags, and subjects. Once created, it's issued a unique URL on a dedicated hooks domain, separate from the main API.

Trigger URL format
https://hooks.trailogs.com/webhooks/{token}

The URL itself is the credential — anyone who has it can create logs in the channel the webhook was configured for. Treat it like a secret.

Sending a request

POST/webhooks/{token}

Create a log via webhook

No Authorization header is required — the token in the path identifies the webhook and its target channel. Send a JSON body with Content-Type: application/json. Requests are rate-limited to 60 per minute per source IP.

Example request
curl -X POST https://hooks.trailogs.com/webhooks/{token} \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Payment failed for invoice #4821",
    "content": "Card declined: insufficient funds.",
    "tag_ids": ["tag_uuid"]
  }'
Response · 201
{
  "id": "log_uuid"
}

The response is a minimal object rather than a full log — fetch it from the main API if you need the complete record (requires a bearer token).

Payload reference

The channel is fixed by the webhook's configuration and can't be set in the request body. Any field not listed below is rejected as a validation error.

FieldTypeRequiredDescription
titlestringRequiredUp to 500 characters.
contentstringOptionalFree-form body text.
occurred_attimestampOptionalWhen the event happened. Defaults to the time the request is received.
category_iduuidOptionalFalls back to the webhook's default category if omitted. One of the two must resolve, or the request fails.
owner_member_iduuidOptionalFalls back to the webhook's default owner if omitted. One of the two must resolve.
participant_idsuuid[]OptionalOther members involved in the event.
tag_idsuuid[]OptionalIf present, replaces (not merges with) the webhook's default tags.
subject_idsuuid[]OptionalIf present, replaces the webhook's default subjects. Archived subjects are rejected.

A webhook can be configured with defaults for category, owner, tags, and subjects so that simple integrations only ever need to send title.

Errors

StatusCause
401The token doesn't match any webhook.
403The webhook is disabled, or its workspace is no longer available.
422Validation failed — a required field is missing, an unrecognized field was sent, no category could be resolved, or a business rule (archived channel/category, workspace log limit) was violated.
429Rate limit exceeded (60 requests/minute).
503The webhook's bot member is temporarily unavailable.