Rules

Rules Endpoints #

Manage monitoring rules within workspaces.

GET /v1/rules #

Get all rules for workspace.

Request #

GET /api/v1/rules?workspace_id=ws_123456
Authorization: Bearer YOUR_JWT_TOKEN

Query Parameters #

ParameterTypeRequiredDescription
workspace_idstringYesThe workspace UID

Response #

Success Response #

Status: 200 OK

{
  "result": [
    {
      "id": "rule_123456",
      "name": "Website Health Check",
      "interval": 300,
      "workspace_id": "ws_123456",
      "request": {
        "url": "https://example.com",
        "method": "GET",
        "content_type": "",
        "data": "",
        "kind": "rule_request"
      },
      "response": {
        "statuses": [200],
        "body": {
          "content": "",
          "kind": "rule_response_body"
        },
        "kind": "rule_response"
      },
      "kind": "rule"
    }
  ],
  "error": null,
  "meta": null
}

Response Fields #

FieldTypeDescription
resultarrayArray of rule objects
result[].idstringUnique rule identifier
result[].namestringHuman-readable rule name
result[].intervalintegerCheck interval in seconds
result[].workspace_idstringWorkspace UID this rule belongs to
result[].requestobjectHTTP request configuration
result[].request.urlstringTarget URL to monitor
result[].request.methodstringHTTP method (GET, POST, PUT, etc.)
result[].request.content_typestringContent-Type header (optional)
result[].request.datastringRequest body data (optional)
result[].responseobjectExpected response configuration
result[].response.statusesarrayExpected HTTP status codes
result[].response.body.contentstringExpected response body content (optional)
result[].kindstringObject type identifier (rule)

Error Responses #

2004 - Missing Workspace ID #

{
  "result": null,
  "error": {
    "code": 2004,
    "error_type": "validation_error",
    "message": "Missing workspace ID",
    "details": "workspace_id query parameter is required"
  },
  "meta": null
}

2005 - Access Denied #

{
  "result": null,
  "error": {
    "code": 2005,
    "error_type": "access_denied",
    "message": "Access denied",
    "details": "User does not have access to this workspace"
  },
  "meta": null
}

GET /v1/rules/{uid} #

Get rule by UID.

Request #

GET /api/v1/rules/rule_123456
Authorization: Bearer YOUR_JWT_TOKEN

Path Parameters #

ParameterTypeRequiredDescription
uidstringYesThe rule UID

Response #

Success Response #

Status: 200 OK

{
  "result": {
    "id": "rule_123456",
    "name": "Website Health Check",
    "interval": 300,
    "workspace_id": "ws_123456",
    "request": {
      "url": "https://example.com",
      "method": "GET",
      "content_type": "",
      "data": "",
      "kind": "rule_request"
    },
    "response": {
      "statuses": [200],
      "body": {
        "content": "",
        "kind": "rule_response_body"
      },
      "kind": "rule_response"
    },
    "kind": "rule"
  },
  "error": null,
  "meta": null
}

Error Responses #

2002 - Rule Not Found #

{
  "result": null,
  "error": {
    "code": 2002,
    "error_type": "not_found",
    "message": "Rule not found",
    "details": "Rule does not exist or access denied"
  },
  "meta": null
}

POST /v1/rules #

Create new rule.

Request #

POST /api/v1/rules
Authorization: Bearer YOUR_JWT_TOKEN
Content-Type: application/json

Request Body #

{
  "name": "Website Health Check",
  "interval": 300,
  "workspace_id": "ws_123456",
  "request": {
    "url": "https://example.com",
    "method": "GET",
    "content_type": "",
    "data": ""
  },
  "response": {
    "statuses": [200],
    "body": {
      "content": ""
    }
  }
}

Request Fields #

FieldTypeRequiredDescription
namestringYesHuman-readable rule name (1-100 characters)
intervalintegerYesCheck interval in seconds (60-86400)
workspace_idstringYesWorkspace UID this rule belongs to
requestobjectYesHTTP request configuration
request.urlstringYesTarget URL to monitor (must be valid URL)
request.methodstringYesHTTP method (GET, POST, PUT, DELETE, HEAD, OPTIONS)
request.content_typestringNoContent-Type header
request.datastringNoRequest body data
responseobjectYesExpected response configuration
response.statusesarrayYesExpected HTTP status codes (1-10 status codes)
response.body.contentstringNoExpected response body content

Response #

Success Response #

Status: 200 OK

{
  "result": {
    "id": "rule_123456",
    "name": "Website Health Check",
    "interval": 300,
    "workspace_id": "ws_123456",
    "request": {
      "url": "https://example.com",
      "method": "GET",
      "content_type": "",
      "data": "",
      "kind": "rule_request"
    },
    "response": {
      "statuses": [200],
      "body": {
        "content": "",
        "kind": "rule_response_body"
      },
      "kind": "rule_response"
    },
    "kind": "rule"
  },
  "error": null,
  "meta": null
}

Error Responses #

2001 - Validation Error #

{
  "result": null,
  "error": {
    "code": 2001,
    "error_type": "validation_error",
    "message": "Validation failed",
    "details": "Field 'name' is required"
  },
  "meta": null
}

2005 - Access Denied #

{
  "result": null,
  "error": {
    "code": 2005,
    "error_type": "access_denied",
    "message": "Access denied",
    "details": "User does not have access to this workspace"
  },
  "meta": null
}

POST /v1/rules/{uid} #

Update rule.

Request #

POST /api/v1/rules/rule_123456
Authorization: Bearer YOUR_JWT_TOKEN
Content-Type: application/json

Path Parameters #

ParameterTypeRequiredDescription
uidstringYesThe rule UID

Request Body #

{
  "name": "Updated Website Health Check",
  "interval": 600,
  "request": {
    "url": "https://example.com/health",
    "method": "GET",
    "content_type": "",
    "data": ""
  },
  "response": {
    "statuses": [200, 201],
    "body": {
      "content": "healthy"
    }
  }
}

Request Fields #

FieldTypeRequiredDescription
namestringYesHuman-readable rule name (1-100 characters)
intervalintegerYesCheck interval in seconds (60-86400)
requestobjectYesHTTP request configuration
request.urlstringYesTarget URL to monitor (must be valid URL)
request.methodstringYesHTTP method (GET, POST, PUT, DELETE, HEAD, OPTIONS)
request.content_typestringNoContent-Type header
request.datastringNoRequest body data
responseobjectYesExpected response configuration
response.statusesarrayYesExpected HTTP status codes (1-10 status codes)
response.body.contentstringNoExpected response body content

Response #

Success Response #

Status: 200 OK

{
  "result": {
    "id": "rule_123456",
    "name": "Updated Website Health Check",
    "interval": 600,
    "workspace_id": "ws_123456",
    "request": {
      "url": "https://example.com/health",
      "method": "GET",
      "content_type": "",
      "data": "",
      "kind": "rule_request"
    },
    "response": {
      "statuses": [200, 201],
      "body": {
        "content": "healthy",
        "kind": "rule_response_body"
      },
      "kind": "rule_response"
    },
    "kind": "rule"
  },
  "error": null,
  "meta": null
}

DELETE /v1/rules/{uid} #

Delete rule.

Request #

DELETE /api/v1/rules/rule_123456
Authorization: Bearer YOUR_JWT_TOKEN

Path Parameters #

ParameterTypeRequiredDescription
uidstringYesThe rule UID

Response #

Success Response #

Status: 200 OK

{
  "result": null,
  "error": null,
  "meta": null
}

Error Responses #

2002 - Rule Not Found #

{
  "result": null,
  "error": {
    "code": 2002,
    "error_type": "not_found",
    "message": "Rule not found",
    "details": "Rule does not exist or access denied"
  },
  "meta": null
}

Validation Rules #

Name #

  • Required, 1-100 characters

Interval #

  • Required, 60-86400 seconds

URL #

  • Required, valid HTTP/HTTPS URL

Method #

  • Required: GET, POST, PUT, DELETE, HEAD, OPTIONS

Status Codes #

  • Required, 1-10 codes, 100-599 range

Content Type #

  • Optional, valid MIME type

Notes #

  • Rules are workspace-specific
  • interval determines check frequency
  • Response body validation is optional
  • Rules auto-assign to available workers