Docs

Rules Management API

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, trash
  • search (string, optional) – Search rule names and descriptions
  • per_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 ID
  • force (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, customers
  • search (string, required) – Search query
  • limit (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 ID
  • order_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

Was this article helpful?

  • Loading...
Table of Contents
  • Loading...