Upsert workflow binding
Create or update the brand’s binding for . Upserts on (brand_id, workflow_type, template_key, template_version)…
PUT
Create or update the brand’s binding for {workflow_type}. Upserts on (brand_id, workflow_type, template_key, template_version).
Because template_key is part of that key, writing a DIFFERENT template_key for a workflow_type the brand already has would create a SECOND row — an ambiguity the dispatch read path refuses to arbitrate (it skips the auto-trigger entirely when more than one enabled row matches). Such a write returns 409 WORKFLOW_BINDING_TEMPLATE_CONFLICT naming the conflicting template_key, unless
?replace=true is passed, which deletes the other-template_key rows in the same transaction. DELETE followed by PUT is the equivalent explicit path.
For workflow_type payment-recovery with enabled: true, binding_config.connector_key_mail is required and must be a non-blank string — without it the Stripe auto-trigger cannot send and would silently skip every event (400 otherwise).
NOTE: PATCH /v1/brands/{brand_id} with a workflow_bindings array delete-and-reinserts ALL bindings for the brand and will clobber rows created here.
Path parameters
string (uuid)
required
string (string)
required
Query parameters
boolean
Delete the brand’s existing bindings for this workflow_type under a DIFFERENT template_key, in the same transaction. Without it such a write is a 409 (see the endpoint description).
Request body
WorkflowBindingWrite
string
Optional; must equal the path value when present.
string
required
integer
string
Defaults to the served task queue.
object
Deterministic config for the bound workflow. May hold connector KEYS, never secrets. For an enabled payment-recovery binding, connector_key_mail is required and must be non-blank.
integer
boolean
object
Response
WorkflowBindingRecord
string (uuid)
required
string (uuid)
required
string
required
string
required
integer
required
string
object
integer
boolean
required
object
string (date-time)
string (date-time)