Skip to main content

Integrations API

Manage your alert integrations programmatically.

List Integrations

GET /organizations/{org}/projects/{project}/integrations
Response:
{
  "items": [
    {
      "id": 1,
      "type": "slack",
      "name": "Engineering Alerts",
      "enabled": true,
      "created_at": "2025-01-01T00:00:00Z",
      "config": {
        "channel": "#alerts"
      }
    },
    {
      "id": 2,
      "type": "pagerduty",
      "name": "On-Call",
      "enabled": true,
      "config": {
        "service_id": "PXXXXXX"
      }
    }
  ]
}

Create Integration

POST /organizations/{org}/projects/{project}/integrations

Slack

{
  "type": "slack",
  "name": "Engineering Alerts",
  "config": {
    "webhook_url": "https://hooks.slack.com/services/xxx"
  }
}

PagerDuty

{
  "type": "pagerduty",
  "name": "On-Call",
  "config": {
    "integration_key": "your-integration-key",
    "severity_mapping": {
      "critical": "critical",
      "warning": "warning",
      "info": "info"
    }
  }
}

Email

{
  "type": "email",
  "name": "Team Notifications",
  "config": {
    "recipients": ["team@example.com", "alerts@example.com"],
    "subject_prefix": "[Roboticks]"
  }
}

Webhook

{
  "type": "webhook",
  "name": "Custom Integration",
  "config": {
    "url": "https://your-server.com/webhook",
    "method": "POST",
    "signing_secret": "your-secret"
  }
}

Get Integration

GET /organizations/{org}/projects/{project}/integrations/{integration_id}

Update Integration

PATCH /organizations/{org}/projects/{project}/integrations/{integration_id}
Request Body:
{
  "name": "Updated Name",
  "enabled": false,
  "config": {
    "channel": "#new-channel"
  }
}

Delete Integration

DELETE /organizations/{org}/projects/{project}/integrations/{integration_id}

Test Integration

Send a test alert to verify the integration is working:
POST /organizations/{org}/projects/{project}/integrations/{integration_id}/test
Response:
{
  "success": true,
  "message": "Test alert sent successfully"
}

Alert Rules

Configure which alerts trigger which integrations.

List Alert Rules

GET /organizations/{org}/projects/{project}/alert-rules
Response:
{
  "items": [
    {
      "id": 10,
      "name": "Device Offline",
      "condition": {
        "type": "device_status",
        "status": "offline",
        "duration_seconds": 300
      },
      "severity": "critical",
      "integration_ids": [1, 2],
      "enabled": true
    }
  ]
}

Create Alert Rule

POST /organizations/{org}/projects/{project}/alert-rules
Request Body:
{
  "name": "High CPU Usage",
  "condition": {
    "type": "metric_threshold",
    "metric": "cpu_usage",
    "operator": "gt",
    "threshold": 90,
    "duration_seconds": 60
  },
  "severity": "warning",
  "integration_ids": [1],
  "device_group_ids": [5],
  "enabled": true
}
Condition Types:
TypeDescription
device_statusDevice online/offline status
metric_thresholdMetric exceeds threshold
log_patternLog message matches pattern
deployment_statusDeployment success/failure

Update Alert Rule

PATCH /organizations/{org}/projects/{project}/alert-rules/{rule_id}

Delete Alert Rule

DELETE /organizations/{org}/projects/{project}/alert-rules/{rule_id}

Code Examples

import requests

API_KEY = "rbtk_xxx"
BASE = "https://api.roboticks.io/api/v1"

headers = {"Authorization": f"Bearer {API_KEY}"}

# Create Slack integration
slack = requests.post(
    f"{BASE}/organizations/acme/projects/warehouse/integrations",
    headers=headers,
    json={
        "type": "slack",
        "name": "Alerts",
        "config": {
            "webhook_url": "https://hooks.slack.com/services/xxx"
        }
    }
).json()

# Test the integration
test = requests.post(
    f"{BASE}/organizations/acme/projects/warehouse/integrations/{slack['id']}/test",
    headers=headers
).json()

print(f"Test result: {test['success']}")

# Create alert rule using this integration
rule = requests.post(
    f"{BASE}/organizations/acme/projects/warehouse/alert-rules",
    headers=headers,
    json={
        "name": "Device Offline Alert",
        "condition": {
            "type": "device_status",
            "status": "offline",
            "duration_seconds": 300
        },
        "severity": "critical",
        "integration_ids": [slack["id"]],
        "enabled": True
    }
).json()