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

AttributeData typeDescription
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"
          }
        ]
      }
    }
  }
}

Was this page helpful?