The Rules API provides complete CRUD operations for automation rules, plus component discovery endpoints for building rule management interfaces.
Base URL
/wp-json/odcm/v1/rule-builder
Authentication: Requires manage_woocommerce capability and proper WordPress authentication.
Endpoints
GET /rule-builder/components
Get available triggers, conditions, and actions for building rules.
Parameters:
rule_id(int, optional) – Current rule ID for state detection
Example Request:
curl "https://yoursite.com/wp-json/odcm/v1/rule-builder/components" \
-H "Authorization: Bearer YOUR_TOKEN"
Example Response:
{
"triggers": [
{
"id": "order_processing",
"label": "Order Processing",
"description": "Triggered when order status changes to Processing",
"schema": {
"type": "object",
"properties": {},
"required": []
},
"capability": "default",
"accessible": true,
"state": "available",
"already_in_rule": false,
"is_default": true,
"priority": 1
}
],
"conditions": [
{
"id": "product_type",
"label": "Product Type",
"description": "Match orders by product type",
"schema": {
"type": "object",
"properties": {
"types": {
"type": "array",
"items": {"type": "string"}
},
"match_all": {"type": "boolean"}
},
"required": ["types"]
},
"capability": "default",
"accessible": true,
"state": "available",
"already_in_rule": false,
"is_default": false,
"priority": 4
}
],
"primaryActions": [
{
"id": "change_status_to_completed",
"label": "Change Status to Completed",
"description": "Changes order status to Completed",
"schema": {
"type": "object",
"properties": {
"send_emails": {"type": "boolean"},
"update_stock": {"type": "boolean"}
}
},
"capability": "default",
"accessible": true,
"state": "available",
"already_in_rule": false,
"is_default": true,
"priority": 1
}
],
"secondaryActions": [
{
"id": "send_notification",
"label": "Send Notification",
"description": "Send email notification",
"schema": {
"type": "object",
"properties": {
"recipient": {"type": "string"},
"template": {"type": "string"}
},
"required": ["recipient", "template"]
},
"capability": "default",
"accessible": true,
"state": "available",
"already_in_rule": false,
"is_default": false,
"priority": 2
}
],
"actions": [], // Legacy compatibility
"meta": {
"execution_time": 0.123,
"timestamp": "2026-01-18T14:30:00Z"
}
}
GET /rule/{id}
Get a specific rule by ID.
Parameters:
id(int, required) – Rule post ID
Example Request:
curl "https://yoursite.com/wp-json/odcm/v1/rule/123" \
-H "Authorization: Bearer YOUR_TOKEN"
Example Response:
{
"trigger": {
"id": "order_processing",
"settings": {}
},
"conditions": [
{
"id": "product_type",
"settings": {
"types": ["virtual", "downloadable"],
"match_all": false
}
}
],
"primaryAction": {
"id": "change_status_to_completed",
"settings": {
"send_emails": true,
"update_stock": false
}
},
"secondaryActions": [
{
"id": "send_notification",
"settings": {
"recipient": "admin@example.com",
"template": "order_completed"
}
}
]
}
POST /rule/{id}
Save a rule’s data.
Parameters:
id(int, required) – Rule post ID
Request Body:
{
"rule": {
"trigger": {
"id": "order_processing",
"settings": {}
},
"conditions": [
{
"id": "product_type",
"settings": {
"types": ["virtual"],
"match_all": false
}
}
],
"primaryAction": {
"id": "change_status_to_completed",
"settings": {
"send_emails": true,
"update_stock": false
}
},
"secondaryActions": []
},
"audit": {
"action": "rule_modified",
"before_data": {...},
"user_context": {
"user_agent": "Mozilla/5.0",
"page_url": "https://yoursite.com/wp-admin/..."
}
}
}
Example Request:
curl -X POST "https://yoursite.com/wp-json/odcm/v1/rule/123" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"rule": {...}, "audit": {...}}'
Example Response:
{
"success": true,
"message": "Rule saved successfully",
"rule_id": 123,
"audit_logged": true
}
GET /rule-builder/search-content
Search for dynamic content for rule building.
Parameters:
source(string, required) – Data source:products,categories,posts,users,order_statuses,payment_methods,shipping_methods,product_tagssearch(string, optional) – Search querylimit(int, optional) – Maximum results (default: 50, max: 100)
Example Request:
curl "https://yoursite.com/wp-json/odcm/v1/rule-builder/search-content?source=products&search=shirt&limit=10" \
-H "Authorization: Bearer YOUR_TOKEN"
Example Response:
{
"results": [
{
"value": "456",
"label": "T-Shirt (SKU: TS-100) (ID: 456)",
"meta": {
"id": 456,
"title": "T-Shirt",
"sku": "TS-100"
}
}
],
"meta": {
"source": "products",
"search_term": "shirt",
"count": 5,
"execution_time": 0.045
}
}
Component Discovery API
GET /rule-builder/components
Get available triggers, conditions, and actions for building rules.
Parameters:
type(string, optional) – Filter by component type:triggers,conditions,actions
Example Request:
curl "https://yoursite.com/wp-json/odcm/v1/rule-builder/components" \
-H "Authorization: Bearer YOUR_TOKEN"
Example Response:
{
"success": true,
"data": {
"triggers": [
{
"id": "order_processing",
"label": "Order Processing",
"description": "Triggered when order status changes to Processing",
"capability": "core",
"settings_schema": {
"type": "object",
"properties": {},
"required": []
}
}
],
"conditions": [
{
"id": "product_type",
"label": "Product Type",
"description": "Match orders by product type",
"capability": "core",
"settings_schema": {
"type": "object",
"properties": {
"product_types": {
"type": "array",
"items": {"type": "string"}
},
"match_type": {
"type": "string",
"enum": ["all", "any"]
}
},
"required": ["product_types"]
}
}
],
"actions": [
{
"id": "complete_order",
"label": "Complete Order",
"description": "Set order status to Completed",
"capability": "core",
"settings_schema": {
"type": "object",
"properties": {},
"required": []
}
}
]
}
}
GET /rule-builder/search
Search for products, categories, or other entities for rule building.
Parameters:
type(string, required) – Search type:products,categories,customerssearch(string, required) – Search querylimit(int, optional) – Maximum results (default: 10, max: 50)
Example Request:
curl "https://yoursite.com/wp-json/odcm/v1/rule-builder/search?type=categories&search=digital&limit=5" \
-H "Authorization: Bearer YOUR_TOKEN"
Example Response:
{
"success": true,
"data": [
{
"id": 45,
"name": "Digital Downloads",
"slug": "digital-downloads",
"type": "category"
},
{
"id": 67,
"name": "Digital Courses",
"slug": "digital-courses",
"type": "category"
}
]
}
Validation and Testing
POST /rules/validate
Validate a rule configuration without saving.
Request Body: Same format as rule creation.
Example Response:
{
"success": true,
"data": {
"valid": true,
"warnings": [
"This trigger may fire frequently on busy stores"
],
"errors": []
}
}
POST /rules/{id}/test
Test a rule against a specific order.
Parameters:
id(int, required) – Rule IDorder_id(int, required) – WooCommerce order ID to test against
Example Request:
curl -X POST "https://yoursite.com/wp-json/odcm/v1/rules/123/test" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"order_id": 456}'
Example Response:
{
"success": true,
"data": {
"would_trigger": true,
"conditions_passed": [
{
"condition": "product_type",
"passed": true,
"message": "All products are virtual"
}
],
"actions_would_execute": [
{
"action": "complete_order",
"message": "Would change order status to Completed"
}
]
}
}
Error Responses
Validation Errors (400):
{
"success": false,
"message": "Validation failed",
"code": "validation_error",
"data": {
"errors": [
{
"field": "trigger.type",
"message": "Invalid trigger type"
}
]
}
}
Premium Feature Error (403):
{
"success": false,
"message": "This trigger requires Order Daemon Pro",
"code": "odcm_premium_blocked"
}
Rule Not Found (404):
{
"success": false,
"message": "Rule not found",
"code": "rule_not_found"
}
Integration Examples
JavaScript – Create Rule:
const ruleData = {
name: "Complete High-Value Orders",
trigger: { type: "order_processing", settings: {} },
conditions: [{
type: "order_total",
settings: { operator: ">=", amount: 100 }
}],
actions: [{ type: "complete_order", settings: {} }]
};
wp.apiFetch({
path: '/odcm/v1/rules/',
method: 'POST',
data: ruleData
}).then(response => {
console.log('Rule created:', response.data.id);
});
PHP – List Rules:
$request = new WP_REST_Request('GET', '/odcm/v1/rules/');
$request->set_param('status', 'publish');
$response = rest_do_request($request);
if ($response->is_success()) {
$rules = $response->get_data()['data']['items'];
foreach ($rules as $rule) {
echo "Rule: " . $rule['name'] . "\n";
}
}
Rate Limits and Best Practices
- Bulk operations: Use pagination for large rule sets
- Testing: Use validate endpoint before saving rules
- Component discovery: Cache component data, it changes infrequently
- Search: Implement debouncing for search-as-you-type features
What’s Next
- Audit API – Access automation logs and timelines
- Webhooks API – External webhook integration
- REST API Overview – General API information
- Developer Overview – Plugin architecture

