Skip to main content
An incoming webhook gives you a URL that turns an HTTP POST into an object in your workspace. Point your CI pipeline, deploy script, or any tool that can send a webhook at it, and Onset creates the release or subscriber for you. Unlike the REST API, there’s no API key to manage. The secret is baked into the URL, so a service that can only send “a POST to a URL” — GitHub Actions, Zapier, a shell script — can write to Onset. There are two types:

Create a webhook

1

Open developer settings

In the dashboard, go to Settings → Developers → Incoming Webhooks.
2

Create the webhook

Click Create webhook, give it a name, and pick the event type. The type can’t be changed afterwards — create a second webhook if you need both.
3

Copy the URL

Copy the endpoint from the Webhook Endpoint column and store it as a secret in whatever service will call it.
Your URL looks like this:
The URL is the credential — anyone holding it can write to your workspace. Store it as a secret, never commit it, and don’t put it in client-side code or logs. If it leaks, delete the webhook and create a new one.

Sending a request

Send a POST with a JSON body and Content-Type: application/json. No authentication headers are needed. The body uses the same field names as the equivalent REST API endpoint, so anything you can build with the API you can send here.
The response is the created release, in the same shape the REST API returns.

Releases arrive as drafts

A release created through an incoming webhook is always saved with status DRAFT, even if is_public is true. Nothing appears on your public page, and no subscriber emails or Slack/Discord announcements go out, until someone publishes it from the dashboard or via the API. That’s deliberate: it lets a deploy pipeline stage release notes automatically while a human still decides when customers see them. See Publishing.

Change types

Each entry in changes must use the title of a change type configured in your workspace (Settings → Releases), matched case-insensitively. The badge colour comes from that configuration, so it isn’t accepted in the payload. An unrecognised title returns 400 with the list of titles your workspace accepts, so you can correct the call without a second lookup. If you’d rather not deal with change types, leave changes out and write everything into body.

Responses

A successful call returns 200 with the created object. Errors have a consistent shape:

Example: publish from GitHub Actions

Draft a release in Onset whenever you tag a version:
The draft lands in your dashboard for editing before you publish it.

Managing webhooks programmatically

Incoming webhooks can also be created, listed, updated and deleted through the REST API under /incoming-webhooks, or with the Node SDK:

Milestone webhooks

Milestone incoming webhooks can no longer be created, and calls to existing ones return 410 Gone. The roadmap is being deprecated and will be disabled on October 5. Existing milestone webhooks stay visible in settings so you can find and delete them.
Incoming webhooks are for sending data into Onset. To receive notifications from Onset when something changes, see Webhooks.