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/rules/
Authentication: Requires manage_woocommerce capability and proper WordPress authentication.
Endpoints
GET /rules/
List all automation rules with optional filtering.
Parameters:
status(string, optional) – Filter by rule status:publish,draft,trashsearch(string, optional) – Search rule names and descriptionsper_page(int, optional) – Items per page (default: 20, max: 100)page(int, optional) – Page number (default: 1)
Example Request:
curl "https://yoursite.com/wp-json/odcm/v1/rules/?status=publish&per_page=10" \
-H "Authorization: Bearer YOUR_TOKEN"
Example Response:
{
"success": true,
"data": {
"items": [
{
"id": 123,
"name": "Auto-Complete Virtual Orders",
"status": "publish",
"trigger": {
"type": "order_processing",
"settings": {}
},
"conditions": [
{
"type": "product_type",
"settings": {
"product_types": ["virtual"]
}
}
],
"actions": [
{
"type": "complete_order",
"settings": {}
}
],
"created_date": "2025-01-15T10:30:00Z",
"modified_date": "2025-01-15T10:30:00Z"
}
],
"total": 5,
"page": 1,
"per_page": 10,
"total_pages": 1
}
}
GET /rules/{id}
Get a specific rule by ID.
Parameters:
id(int, required) – Rule post ID
Example Request:
curl "https://yoursite.com/wp-json/odcm/v1/rules/123" \
-H "Authorization: Bearer YOUR_TOKEN"
Example Response:
{
"success": true,
"data": {
"id": 123,
"name": "Auto-Complete Virtual Orders",
"description": "Automatically complete orders containing only virtual products",
"status": "publish",
"trigger": {
"type": "order_processing",
"settings": {}
},
"conditions": [
{
"type": "product_type",
"settings": {
"product_types": ["virtual"],
"match_type": "all"
}
}
],
"actions": [
{
"type": "complete_order",
"settings": {}
}
],
"created_date": "2025-01-15T10:30:00Z",
"modified_date": "2025-01-15T10:30:00Z"
}
}
POST /rules/
Create a new automation rule.
Request Body:
{
"name": "Auto-Complete Virtual Orders",
"description": "Automatically complete orders containing only virtual products",
"status": "draft",
"trigger": {
"type": "order_processing",
"settings": {}
},
"conditions": [
{
"type": "product_type",
"settings": {
"product_types": ["virtual"],
"match_type": "all"
}
}
],
"actions": [
{
"type": "complete_order",
"settings": {}
}
]
}
Example Request:
curl -X POST "https://yoursite.com/wp-json/odcm/v1/rules/" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d @rule-data.json
Example Response:
{
"success": true,
"data": {
"id": 124,
"name": "Auto-Complete Virtual Orders",
"status": "draft",
// ... full rule data
},
"message": "Rule created successfully"
}
PUT /rules/{id}
Update an existing rule.
Parameters:
id(int, required) – Rule post ID
Request Body: Same format as POST, but all fields are optional (partial updates allowed).
Example Request:
curl -X PUT "https://yoursite.com/wp-json/odcm/v1/rules/123" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"status": "publish"}'
DELETE /rules/{id}
Delete a rule (move to trash).
Parameters:
id(int, required) – Rule post IDforce(boolean, optional) – Permanently delete instead of trash (default: false)
Example Request:
curl -X DELETE "https://yoursite.com/wp-json/odcm/v1/rules/123" \
-H "Authorization: Bearer YOUR_TOKEN"
Example Response:
{
"success": true,
"message": "Rule moved to trash"
}
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

