run.created— a top-level workflow or agent run was created.run.status_changed— a top-level run moved from one persisted status to another.
action.invoke-workflow step do not emit webhook
events.
Create an endpoint
1
Open Webhooks
Select Webhooks in the dashboard sidebar and choose Add webhook.
2
Enter the destination
Add a descriptive name and an HTTPS URL that accepts
POST requests.3
Choose events
Select
run.created, run.status_changed, or both.4
Add optional headers
Add credentials such as an
Authorization header when your receiver requires them. Header
values are encrypted and are not shown again.5
Store the signing secret
Copy the
whsec_... signing secret from the creation dialog or the endpoint page. Use it to
verify that webhook requests were sent by Eigenpal.Event envelope
Every request has a versioned JSON envelope and a stable event ID:run.created contains the run in its initial status and omits
previousStatus and currentStatus.
When available, the public run output is included in the event. If the complete
event would exceed the webhook payload limit, output is omitted and
outputOmitted is true. Retrieve the canonical result using the included run
ID and GET /api/v1/runs/{id}.
Verify signatures
Do not process an event until its signature and timestamp have been verified. EigenPal signs the exact request bytes with HMAC-SHA256 and sends:webhook-idwebhook-timestampwebhook-signature, formatted asv1,<hex digest>
Delivery and retries
Webhook delivery is asynchronous and at least once. Your receiver must:- Verify the signature.
- Store or deduplicate by the event
id. - Return a
2xxresponse quickly. - Process expensive work asynchronously.
408, 425, 429, and 5xx
responses with bounded backoff. Other 4xx responses end automatic delivery.
Any 2xx response marks the delivery successful.
Events are not guaranteed to arrive in order. For status changes, use
previousStatus, currentStatus, and createdAt rather than assuming the
delivery sequence matches the run lifecycle.
The Webhooks dashboard shows each delivery and its attempts, including response
status and latency. Endpoints without custom headers also retain a bounded
response preview; EigenPal omits response bodies for credential-bearing endpoints
so echoed credentials cannot enter delivery history. You can manually redeliver
an event after fixing your receiver. Redelivery preserves the event ID and payload
so your normal deduplication logic still applies.
Test an endpoint
Use Send test from an endpoint page. Test requests pass through the same queue, signing, security checks, and delivery history as production events and settest to true.