--- title: workflow.succeeded | SafetyKit description: Deploy AI agents to automate risk reviews, onboarding, and investigations. Trusted by leading marketplaces and fintech platforms. --- You will receive this event when a Data API workflow succeeds for an object. ## Example Payload ``` { "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 } } } ``` ## Fields - `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 ## Reliability guidance - 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` as optional ## Minimal validation checklist - 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