Webhooks let your own systems react as soon as something finishes in EmbodiFlow, instead of polling. When a recording is processed, a workflow run ends or a training job succeeds, EmbodiFlow sends a signed JSON request to a URL you run. Your service can then pull the new data, start the next job or post a message to your team.
Add an endpoint
Adding and managing endpoints is for team owners and admins. You create an endpoint with the CLI or the API, then follow its deliveries in the console.
Create the endpoint
Give it an HTTPS URL and the event types it should receive, comma-separated. Add --project-id to limit it to one project.
embodiflow webhook-endpoints create --url https://example.com/hooks --event-types workflow.run.succeeded,training.job.succeededOr call the API directly:
curl -X POST https://api.embodiflow.io/v1/webhook-endpoints \
-H "Authorization: Bearer $EMBODIFLOW_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/hooks","eventTypes":["workflow.run.succeeded"]}'Save the signing secret
The response includes the endpoint's signingSecret. It's shown this one time only, so store it with your service right away. You need it to verify each delivery.
Check it in the console
Open Settings and choose Webhooks under team settings. Pick your endpoint and choose Send test ping to check that your service receives it; the ping arrives with the type webhook.endpoint.ping. Below, Delivery history lists recent deliveries with their status, attempts and failure reason; set From and To and choose Apply filters to look at another time window. If a delivery failed while your service was down, choose Replay to send it again.
Events
The list of event types is fixed, so you can rely on it:
| Event type | Sent when |
|---|---|
recording.imported | A recording was imported. |
recording.processed | A recording finished processing. |
recording.failed | A recording failed processing. |
version.created | A dataset version was created. |
version.redacted | A dataset version was redacted. |
version.alias_set | An alias was set on a dataset version. |
export.succeeded, export.failed | An export finished. |
workflow.run.succeeded, workflow.run.failed | A workflow run finished. |
training.job.succeeded, training.job.failed | A training job finished. |
collection.submission.decided | A collection submission was accepted or rejected. |
erasure.completed | An erasure request completed. |
What a delivery looks like
Every event uses the same envelope: id, type, specVersion, occurredAt, tenantId, projectId when the event belongs to a project, resource and data. On purpose, data carries ids and a coarse status, never the records themselves. Use the ids to fetch what you need from the API, with your own credential.