Skip to content

API Reference

Temp edited this page Jan 27, 2026 · 3 revisions

API Reference

Complete reference for DO Manager's REST API endpoints.


Base URL

  • Local Development: http://localhost:8787/api
  • Production: https://your-domain.com/api

All endpoints require authentication via Cloudflare Access.


Namespaces

List Namespaces

GET /api/namespaces

Returns all tracked namespaces.

Discover Namespaces

GET /api/namespaces/discover

Auto-discover Durable Object namespaces from Cloudflare API.

Add Namespace

POST /api/namespaces
Content-Type: application/json

{
  "name": "my-namespace",
  "classId": "abc123",
  "scriptName": "my-worker",
  "storageType": "sqlite",
  "adminHookUrl": "https://my-worker.workers.dev"
}

Clone Namespace

POST /api/namespaces/:id/clone
Content-Type: application/json

{
  "newName": "cloned-namespace"
}

Export Namespace Config

GET /api/namespaces/:id/export

Returns namespace configuration as JSON.

Delete Namespace

DELETE /api/namespaces/:id

Instances

List Instances

GET /api/namespaces/:id/instances

Returns all instances for a namespace.

Create Instance

POST /api/namespaces/:id/instances
Content-Type: application/json

{
  "name": "my-instance",
  "objectId": "hex-id-optional"
}

Clone Instance

POST /api/instances/:id/clone
Content-Type: application/json

{
  "newName": "cloned-instance"
}

Export Instance Storage

GET /api/instances/:id/export

Returns instance storage as JSON.

Update Instance Color

PUT /api/instances/:id/color
Content-Type: application/json

{
  "color": "blue"
}

Compare Instances

POST /api/instances/diff
Content-Type: application/json

{
  "instanceId1": "id-1",
  "instanceId2": "id-2"
}

Delete Instance

DELETE /api/instances/:id

Migrate Instance

POST /api/instances/:id/migrate
Content-Type: application/json

{
  "targetNamespaceId": "namespace-id",
  "targetInstanceName": "new-instance-name",
  "cutoverMode": "copy",
  "runVerification": true,
  "migrateAlarms": false
}

Cutover Modes:

  • copy — Source unchanged
  • copy_freeze — Source frozen (read-only)
  • copy_delete — Source deleted after migration

Response:

{
  "success": true,
  "newInstance": { "id": "...", "name": "...", ... },
  "sourceFrozen": false,
  "sourceDeleted": false,
  "verification": { "passed": true, "sourceKeyCount": 10, "targetKeyCount": 10 },
  "warnings": []
}

Storage

Get Storage Contents

GET /api/instances/:id/storage

Returns all key-value pairs.

Update Storage

PUT /api/instances/:id/storage
Content-Type: application/json

{
  "key": "my-key",
  "value": { "data": "example" }
}

Import Keys

POST /api/instances/:id/import
Content-Type: application/json

{
  "data": {
    "key1": "value1",
    "key2": "value2"
  }
}

Execute SQL

POST /api/instances/:id/sql
Content-Type: application/json

{
  "query": "SELECT * FROM users LIMIT 10"
}

Alarms

Get Alarm State

GET /api/instances/:id/alarm

Set Alarm

PUT /api/instances/:id/alarm
Content-Type: application/json

{
  "scheduledTime": "2025-12-01T00:00:00Z"
}

Delete Alarm

DELETE /api/instances/:id/alarm

Backups

List Backups

GET /api/instances/:id/backups

Create Backup

POST /api/instances/:id/backups

Restore from Backup

POST /api/instances/:id/restore
Content-Type: application/json

{
  "backupId": "backup-123"
}

Batch Operations

Batch Delete Namespaces

POST /api/batch/namespaces/delete
Content-Type: application/json

{
  "ids": ["id-1", "id-2", "id-3"]
}

Batch Delete Instances

POST /api/batch/instances/delete
Content-Type: application/json

{
  "ids": ["id-1", "id-2", "id-3"]
}

Batch Backup Instances

POST /api/batch/instances/backup
Content-Type: application/json

{
  "ids": ["id-1", "id-2", "id-3"]
}

Batch Delete Keys

POST /api/batch/keys/delete
Content-Type: application/json

{
  "instanceId": "instance-id",
  "keys": ["key1", "key2", "key3"]
}

Batch Export Keys

POST /api/batch/keys/export
Content-Type: application/json

{
  "instanceId": "instance-id",
  "keys": ["key1", "key2", "key3"]
}

Search

Search Keys

POST /api/search/keys
Content-Type: application/json

{
  "query": "user",
  "namespaceId": "optional-filter"
}

Search Values

POST /api/search/values
Content-Type: application/json

{
  "query": "email@example.com",
  "namespaceId": "optional-filter"
}

Saved Queries

List Saved Queries

GET /api/namespaces/:id/queries

Create Saved Query

POST /api/namespaces/:id/queries
Content-Type: application/json

{
  "name": "Active Users",
  "query": "SELECT * FROM users WHERE active = 1"
}

Update Saved Query

PUT /api/queries/:id
Content-Type: application/json

{
  "name": "Updated Name",
  "query": "SELECT * FROM users WHERE active = 1 LIMIT 50"
}

Delete Saved Query

DELETE /api/queries/:id

Webhooks

List Webhooks

GET /api/webhooks

Create Webhook

POST /api/webhooks
Content-Type: application/json

{
  "url": "https://example.com/webhook",
  "events": ["backup_complete", "job_failed"],
  "secret": "optional-hmac-secret"
}

Update Webhook

PUT /api/webhooks/:id
Content-Type: application/json

{
  "url": "https://example.com/webhook-updated",
  "events": ["backup_complete"],
  "enabled": true
}

Test Webhook

POST /api/webhooks/:id/test

Delete Webhook

DELETE /api/webhooks/:id

Jobs

List Jobs

GET /api/jobs

Optional query parameters:

  • status — Filter by status (pending, running, completed, failed)
  • namespaceId — Filter by namespace

Metrics

Get Account Metrics

GET /api/metrics

Returns request volume, storage usage, and CPU time metrics from Cloudflare GraphQL Analytics.


Health

Get System Health

GET /api/health

Returns:

  • Total namespaces, instances, and alarms
  • Stale instance detection
  • Storage quota alerts
  • Recent activity summary

Clone this wiki locally