Webhooks let you react to ByteStack job completions without polling the API. When a scheduled job finishes a run, ByteStack sends a signed HTTP POST request to the URL you registered. Your server receives the payload, verifies the signature, and processes the results in real time.Documentation Index
Fetch the complete documentation index at: https://docs.bytestack.com/llms.txt
Use this file to discover all available pages before exploring further.
How webhooks work
Register a webhook endpoint
Provide ByteStack with the HTTPS URL of your server endpoint. You can do this in the dashboard under Settings → Webhooks, or by calling the API directly.
Attach the webhook to a job
When creating a job, set the
webhook_url field. ByteStack calls your endpoint after every run of that job.Receive and verify the payload
ByteStack POSTs a JSON payload to your endpoint and signs the request with an HMAC-SHA256 signature in the
X-ByteStack-Signature header. Verify it before processing.Registering a webhook
Via the dashboard: Go to Settings → Webhooks and click Add endpoint. Enter your HTTPS URL and select the events to subscribe to. Via the API:Webhook payload format
ByteStack sends a JSON body with the following fields on everyjob.completed event:
| Field | Type | Description |
|---|---|---|
event | string | Always job.completed for job completion events. |
job_id | string | The ID of the job that ran. |
run_id | string | A unique ID for this specific run. |
status | string | completed or failed. |
result_url | string | URL to download the full result JSON. |
timestamp | string | ISO 8601 time the run finished. |
Verifying webhook signatures
ByteStack signs each request using HMAC-SHA256 with your webhook secret. The signature is sent in theX-ByteStack-Signature header in the format sha256=<hex_digest>.
To verify: compute the HMAC-SHA256 of the raw request body using your webhook secret, then compare the result to the value in the header using a constant-time comparison.
Responding to webhooks
Your endpoint must return a2xx HTTP response within 10 seconds of receiving the request. ByteStack considers any other status code, a timeout, or a network error as a failed delivery.
Retry behavior
When a delivery fails, ByteStack retries up to 3 times using exponential backoff:| Attempt | Delay |
|---|---|
| 1st retry | 1 minute |
| 2nd retry | 5 minutes |
| 3rd retry | 30 minutes |