Webhooks
What webhooks do
Webhooks let you receive HTTP POST requests when things happen in your Meshia sessions. Use them to trigger external systems, update a dashboard, notify Slack, start a deployment, log to your own database.
Creating a webhook
Go to Settings > Webhooks and click Add webhook.
- URL. The HTTPS endpoint that receives the POST request
- Events. Pick which events trigger the webhook (or select all)
- Secret. An optional signing secret for verifying request authenticity
Click Save. Meshia sends a test ping to your URL. If it returns 2xx, you're set.
Supported events
| Event | Fires when |
|---|---|
| session.started | A GPU pod finishes provisioning and is ready |
| session.stopped | A session is stopped (by you or auto-idle) |
| experiment.completed | An experiment run finishes |
| experiment.failed | An experiment run errors out |
| plan.completed | A research plan finishes all experiments |
| plan.needs_input | The agent needs your decision on an ambiguous result |
| workflow.completed | A scheduled workflow finishes |
| workflow.failed | A workflow step fails and the workflow halts |
Payload format
Every webhook POST includes a JSON body:
{
"event": "experiment.completed",
"timestamp": "2026-04-11T14:32:00Z",
"session_id": "sess_abc123",
"data": {
"experiment_id": "exp_def456",
"metrics": { "loss": 0.0342, "accuracy": 0.921 },
"duration_seconds": 1847
}
}
Signature verification
If you set a signing secret, every request includes an X-Meshia-Signature header. Verify it like this:
import hmac, hashlib
def verify(payload_bytes, signature, secret):
expected = hmac.new(
secret.encode(), payload_bytes, hashlib.sha256
).hexdigest()
return hmac.compare_digest(f"sha256={expected}", signature)
Delivery logs
Every webhook delivery is logged. Go to Settings > Webhooks, click a webhook, and open the Deliveries tab. You'll see the request body, response status, and latency for each attempt. Failed deliveries are retried 3 times with exponential backoff.