Programmatic access for external integrations. RESTful, JSON, simple Bearer auth.
Base URL: https://your-domain.com/api/v1
API keys are created and revoked by a dashboard admin. To generate one:
dsk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLost a key? You can't recover it β revoke the old one and generate a new one. The same Settings β API keys page shows when each key was last used so you can spot stale or compromised keys.
Every request must include an Authorization header with a Bearer token.
Authorization: Bearer dsk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
| Status | Meaning |
|---|---|
| 401 | Missing or invalid Bearer token, or key has been revoked. |
| 403 | Key is valid but doesn't have the scope required for this endpoint. |
| 404 | Unknown endpoint or resource not found. |
| 429 | Rate limit exceeded. Response includes a Retry-After header (seconds) and an X-RateLimit-Remaining header. |
| 500/503 | Server error, or upstream service (DigitalOcean, SalesCRM) is unavailable. |
Each API key gets a token bucket: 100 requests burst, refilled at 1 per second (effectively ~60/minute sustained). That's plenty for normal use including initial big pulls (e.g. fetching all 500 security findings in one go).
The bucket is keyed on the API key's ID, not IP β so the same key from multiple deployments shares one bucket. If you need higher throughput, request a second key (each key gets its own bucket).
When the bucket is empty you'll get a 429 with Retry-After telling you exactly how many seconds to wait. A simple retry-with-backoff loop is the right client behavior.
Each key has either admin (full access) or a list of scopes. An endpoint's required scope is listed with the endpoint below.
| Scope | Grants access to |
|---|---|
| apps | App catalog (GitHub repos + manual deployment mappings) |
| notes | Knowledge wiki + user-created notes |
| documents | Uploaded files (PDFs, Word docs) |
| servers | DigitalOcean droplets, databases, spaces |
| finance | Finance Plus β transactions, vendors, budgets, recurring costs |
| hr | HR & Payroll β employees, leave, payroll runs |
| security | SOC2 security findings across all repos β vulnerabilities, secrets, branch protection |
| admin | Full access. Reserved for trusted internal services only. |
/api/v1/merequires scope: any valid keyReturns the calling API key's identity, scopes, and admin status. Useful for verifying your key works.
curl \ -H "Authorization: Bearer dsk_xxxxxxxxxxxx" \ $BASE_URL/api/v1/me
{
"keyId": 3,
"name": "SOC2 platform",
"isAdmin": false,
"permissions": ["apps", "servers"],
"createdBy": "james@jamesbratton.me"
}/api/v1/appsrequires scope: appsLists all known apps β GitHub repos plus manual app-to-droplet mappings recorded in the dashboard.
curl \ -H "Authorization: Bearer dsk_xxxxxxxxxxxx" \ $BASE_URL/api/v1/apps
{
"count": 28,
"apps": [
{
"slug": "jbratton45/omniforgehq",
"name": "omniforgehq",
"language": "TypeScript",
"pushedAt": "2026-05-22T10:30:00Z",
"url": "https://github.com/jbratton45/omniforgehq"
}
],
"deployments": [
{
"appName": "OmniForgeHQ",
"dropletId": 12345678,
"dropletName": "Omni-Suite-Plainfield",
"url": "https://omniforgehq.com",
"githubRepo": "jbratton45/omniforgehq",
"notes": null
}
]
}/api/v1/dropletsrequires scope: serversLists DigitalOcean droplets with cost, status, networking, and tags.
curl \ -H "Authorization: Bearer dsk_xxxxxxxxxxxx" \ $BASE_URL/api/v1/droplets
{
"count": 3,
"totalMonthlyEstimate": 144.00,
"droplets": [
{
"id": 12345678,
"name": "Omni-Suite-Plainfield",
"status": "active",
"publicIp": "192.0.2.15",
"region": "New York 1",
"size": "s-4vcpu-8gb",
"memoryGb": 8,
"vcpus": 4,
"diskGb": 160,
"monthlyCost": 48.00,
"tags": [],
"createdAt": "2025-08-12T14:22:00Z"
}
]
}/api/v1/financerequires scope: financeFinance Plus overview from the in-house SalesCRM: income/expense in last 30 days, recurring burn, vendor count, business line count.
curl \ -H "Authorization: Bearer dsk_xxxxxxxxxxxx" \ $BASE_URL/api/v1/finance
{
"asOf": "2026-05-23",
"totalTransactions": 42,
"recentIncome": 18450.00,
"recentExpense": 7920.50,
"totalRecurringMonthly": 1245.00,
"vendorCount": 12,
"businessLineCount": 9,
"budgetCount": 4
}/api/v1/securityrequires scope: securitySOC2 security findings across all monitored repos. Each finding is mapped to its SOC2 control (CC6.1 access, CC7.1 vulnerability mgmt, CC8.1 change mgmt). Designed to be polled by the SOC2 preparedness platform for compliance evidence. Query params: state, severity, category, control (e.g. 'CC7.1'), repo, limit, summary.
curl \ -H "Authorization: Bearer dsk_xxxxxxxxxxxx" \ $BASE_URL/api/v1/security
{
"asOf": "2026-05-23T11:42:00Z",
"appliedFilters": { "state": "open", "limit": 500 },
"count": 27,
"summary": {
"totalOpen": 27,
"openBySeverity": { "high": 27 },
"openByCategory": { "branch_protection": 27 },
"openByControl": { "CC8.1": 27 },
"resolvedLast30Days": 0
},
"findings": [
{
"id": 1,
"source": "github-branch-protection",
"repo": "jbratton45/omniforgehq",
"title": "Default branch 'main' has no protection rules",
"severity": "high",
"state": "open",
"category": "branch_protection",
"soc2Control": "CC8.1",
"firstSeenAt": "2026-05-23T11:42:00Z",
"url": "https://github.com/jbratton45/omniforgehq/settings/branches"
}
]
}/api/v1/hrrequires scope: hrHR & Payroll overview: employee counts, who's on leave today, pending leave requests, latest payroll run.
curl \ -H "Authorization: Bearer dsk_xxxxxxxxxxxx" \ $BASE_URL/api/v1/hr
{
"asOf": "2026-05-23",
"totalEmployees": 8,
"activeEmployees": 8,
"onLeaveToday": 1,
"pendingLeaveRequests": 2,
"latestPayroll": {
"month": 4,
"year": 2026,
"totalGross": 32500.00,
"totalNet": 24875.00,
"employeeCount": 8,
"status": "paid"
}
}/api/v1/hostingerrequires scope: serversHostinger VPS instances and owned domains. Useful if your infrastructure is split between DigitalOcean (queried via /droplets) and Hostinger.
curl \ -H "Authorization: Bearer dsk_xxxxxxxxxxxx" \ $BASE_URL/api/v1/hostinger
{
"vps": [
{
"id": 4521,
"hostname": "vps-prod-1",
"state": "running",
"publicIp": "203.0.113.42",
"plan": "KVM 4",
"monthlyCost": 19.99,
"cpus": 4,
"memoryGb": 16,
"diskGb": 200
}
],
"domains": [
{
"domain": "example.com",
"expiresAt": "2027-03-15T00:00:00Z",
"autoRenew": true
}
]
}/api/v1/toolsrequires scope: adminTracked tools and subscriptions registry. Admin-scope only β the records include cost data and references to where credentials live (vault entries, 1Password vaults, etc.).
curl \ -H "Authorization: Bearer dsk_xxxxxxxxxxxx" \ $BASE_URL/api/v1/tools
{
"count": 23,
"totalMonthlyEstimate": 487.50,
"tools": [
{
"id": 7,
"name": "GitHub",
"category": "development",
"monthlyCost": 21.00,
"owner": "james@jamesbratton.me",
"url": "https://github.com",
"credentialsHint": "Vault entry #3"
}
]
}