deploy.completed timeline
signals. They are useful when you want rank or traffic changes to line up with
shipping activity.
The endpoint is:
Create a hook
- Open Settings in the app.
- Find Deploy webhooks.
- Select Create webhook and give it a label.
- Copy the token immediately. It is revealed once, then only a hash is stored.
Authentication
Prefer a bearer token header:?token=<ingest-hook-token> only when the source cannot send custom
headers. Query tokens can appear in proxy, CDN, and access logs.
The provider query parameter selects a provider mapper:
provider for the generic JSON shape.
Trust boundary and rate limits
Bisibility does not verify provider-native webhook signatures. The ingest token is the only authentication performed by this endpoint, so keep it secret and rotate it if it is exposed. Two rolling one-minute limits protect the endpoint: 60 anonymous requests per client address per minute are checked before token lookup, then 600 authenticated requests per hook per minute are checked after authentication. Exceeding either limit returns429 with rate-limit and retry headers.
Vercel
Create a project webhook for successful deployments:- Open the project in Vercel.
- Add a webhook for the
deployment.succeededevent. - Set the endpoint URL to:
Authorization header, append the token:
Netlify
Create a deploy notification for successful deploys:- Open Site configuration in Netlify.
- Add an outgoing deploy notification for Deploy ready.
- Use the endpoint URL with the token in the query string:
AWS Amplify
Amplify Hosting emits EventBridge events instead of plain webhooks. Forward the raw EventBridge event to bisibility with an EventBridge rule and API destination. Do not use an input transformer. Use this endpoint:events.amazonaws.com and allow
events:InvokeApiDestination for the API destination ARN.
Generic JSON
Send a custom deploy event when your deploy system can runcurl:
Delivery retries
Successful events with a deployment identifier are idempotent per hook for 60 minutes. Repeating the samedeployment_id (or provider-native deployment ID)
with the same hook during that window returns 202 with
{"ok":true,"duplicate":true} and does not create another timeline signal.
Events without a deployment identifier cannot be matched and are accepted
individually.