Rule components
Rule components are created at the property route, but the owning rule is supplied through relationships. That detail is easy to miss when building payloads by hand, which is one reason the SDK method is valuable.
Familyclient.rule_components
Rule components
| Attribute | Data type | Description |
|---|---|---|
| list_for_rule(rule_id) | Array<RuleComponent> | Lists components attached to a rule. |
| find(rule_component_id) | RuleComponent | Fetches a single component. |
| create(property_id:, rule_id:, name:, delegate_descriptor_id:, settings:, extension_id:, rule_order: 50.0, order: 0) | RuleComponent | Creates a component with both rule and extension relationships embedded in the JSON:API payload. |
| extension(rule_component_id) | Extension | Traverses from a component to the owning extension. |
| rules(rule_component_id) | Array<Rule> | Lists rules that use the component. |
settings should usually be JSON-encoded. The matching resource object exposes parsed_settings so you can read the configuration back as a hash.
Creation payload
Sample: create a rule component
POST /properties/:property_id/rule_components
# PR... = property ID.
# EX... = extension ID.
# RL... = rule ID.
# Create one rule component inside the property and attach it to both an extension and a rule.
curl -s "https://reactor.adobe.io/properties/PR1234567890abcdef1234567890abcd/rule_components" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "x-api-key: YOUR_ADOBE_CLIENT_ID" \
-H "x-gw-ims-org-id: YOUR_IMS_ORG_ID" \
-H "Accept: application/vnd.api+json;revision=1" \
-H "Content-Type: application/vnd.api+json" \
--data '{
"data": {
"type": "rule_components",
"attributes": {
"name": "Send custom event",
"delegate_descriptor_id": "core::actions::custom-code",
"settings": "{\"source\":\"console.log(\\\"order confirmed\\\")\"}",
"rule_order": 50.0,
"order": 0
},
"relationships": {
"extension": {
"data": {
"id": "EX1234567890abcdef1234567890abcd",
"type": "extensions"
}
},
"rules": {
"data": [
{
"id": "RL1234567890abcdef1234567890abcd",
"type": "rules"
}
]
}
}
}
}'
Sample response
{
"data": {
// RC... = rule component ID.
"id": "RC1234567890abcdef1234567890abcd",
"type": "rule_components",
"attributes": {
// Human-readable component name.
"name": "Send custom event",
// Delegate inside the extension package that defines component behavior.
"delegate_descriptor_id": "core::actions::custom-code",
// Serialized component settings as stored by Adobe.
"settings": "{\"source\":\"console.log(\\\"order confirmed\\\")\"}",
// Execution order inside the rule type bucket.
"order": 0,
// Adobe creation timestamp.
"created_at": "2026-03-26T10:14:03.000Z",
// Adobe last-update timestamp.
"updated_at": "2026-03-26T10:14:03.000Z"
},
"relationships": {
"extension": {
"data": {
// EX... = backing extension instance ID.
"id": "EX1234567890abcdef1234567890abcd",
"type": "extensions"
}
},
"rules": {
"data": [
{
// RL... = owning rule ID.
"id": "RL1234567890abcdef1234567890abcd",
"type": "rules"
}
]
}
}
}
}