Skip to content
StatusSupportDashboard
Webhooks
Event Types

workflow.succeeded

You will receive this event when a Data API workflow succeeds for an object.

{
"type": "workflow.succeeded",
"namespace": "users",
"id": "user_12345",
"request_id": "req_01h2m7qdmdjckc30e1mnq6xqfd",
"url": "https://app.safetykit.com/t/example/data-api/namespaces/users/user_12345/execution_abc",
"metadata": {
"customer_tier": "enterprise"
},
"output": {
"actions": ["suspend_account"],
"labels": [
{
"label": "fraud.risk_high",
"explanation": "High-risk behavior pattern detected",
"confidence": "medium"
}
],
"fields": {
"risk_score": 0.92
},
"label_changes": {
"added": ["fraud.risk_high"],
"removed": ["fraud.risk_low"]
}
}
}
  • type: Event type (workflow.succeeded)
  • namespace: Namespace where the object was processed
  • id: Original id provided when the object was ingested
  • request_id: Request identifier from ingestion
  • url: Link to the object view in SafetyKit
  • metadata: Optional metadata derived from ingested object metadata
  • output.actions: Actions produced by workflow/rules
  • output.labels: Labels produced by workflow
  • output.fields: Optional structured output fields
  • output.label_changes: Optional diff of label ids added and removed by this run, compared to the object’s labels before the run

output.labels always contains the final set of labels applied to the object. output.label_changes tells you what this run changed:

  • added: label ids that were applied by this run and were not present before
  • removed: label ids that were present before this run and are no longer applied

The field is omitted entirely when the run did not change any labels, or when the object’s prior label state is unknown.

  • process events by (namespace, id) for object identity
  • use request_id for batch/request reconciliation
  • do not assume label ordering unless your own workflow enforces it
  • treat output.fields and output.label_changes as optional
  • verify signature and timestamp before parsing
  • require type === "workflow.succeeded"
  • require non-empty namespace, id, and request_id
  • handle empty actions and empty labels as valid outcomes