Deploy API Reference

Version 0.0.0

Authentication: Include an access token or API key as Authorization: Bearer <token>. Tenant-scoped routes require an X-Tenant-ID header. Admin keys (authority=admin) auto-resolve the root tenant. User keys require X-Tenant-ID. Admin routes require membership in the root tenant with admin or owner role.
Sections:
AuthenticationTenant MembersMessagesPlans & BillingAdmin — Dashboard & MonitoringAdmin — ConfigurationAdmin — TenantsAdmin — UsersAdmin — PlansAdmin — Credit BundlesAdmin — FinancialAdmin — API KeysAdmin — WebhooksPublicAgentObservabilityAnalyticsMetricsReliabilityProjectsAppsFleetEdgeRolloutEnvironmentsDeploymentsOperatorApprovalsSettingsHooksBackupsPreviewsApp Deploy TokensEnv VarsRemediationServersDiagnosticsServicesData PlaneService HealthDomainsLogsNotebooksIntelligenceOn-CallEventsStatus PagesBuildsCICI SecretsGitHubPoliciesWebhooksActivityOps GraphAISentinelProxyDatabaseIncidentsAI OperatorOperationsRunbooksRepositoriesCollaborationSystemWebhook Events

Authentication

POST/api/auth/registerRegister a new userPublic

Creates a new user account with email and password. If an invitation token is provided, the user is automatically added to the inviting tenant. A personal tenant is always created for the new user. Returns access and refresh tokens plus the user profile and tenant memberships.

Request Body
{"email":"user@example.com","password":"secureP@ss1","displayName":"Jane Doe","invitationToken":"(optional)"}
Response
{"accessToken":"eyJ...","refreshToken":"eyJ...",
 "user":{"id":"...","email":"user@example.com","displayName":"Jane Doe","emailVerified":false,"isActive":true,"authMethods":[{"provider":"password"}],"createdAt":"...","updatedAt":"..."},
 "memberships":[{"tenantId":"...","tenantName":"Jane's Team","tenantSlug":"janes-team","role":"owner","isRoot":false}]}
POST/api/auth/loginAuthenticate and receive tokensPublic

Authenticates a user with email and password. Returns JWT access and refresh tokens. Account is locked for 15 minutes after 5 consecutive failed attempts.

Request Body
{"email":"user@example.com","password":"secureP@ss1"}
Response
{"accessToken":"eyJ...","refreshToken":"eyJ...","user":{...},"memberships":[...]}
POST/api/auth/refreshExchange refresh token for new access tokenPublic

Exchanges a valid refresh token for a new access/refresh token pair. The old refresh token is revoked (rotation). Use this when the access token expires.

Request Body
{"refreshToken":"eyJ..."}
Response
{"accessToken":"eyJ...","refreshToken":"eyJ...","user":{...},"memberships":[...]}
POST/api/auth/verify-emailVerify email addressPublic

Confirms the user's email address using a token sent via email. The token is single-use and expires after 24 hours.

Request Body
{"token":"verification-token-from-email"}
Response
{"message":"Email verified successfully"}
POST/api/auth/resend-verificationResend verification emailPublic

Sends a new verification email to the specified address. Rate-limited to one request per 60 seconds per email. Returns a success message regardless of whether the email exists (prevents enumeration).

Request Body
{"email":"user@example.com"}
Response
{"message":"If the email exists, a verification link has been sent"}
POST/api/auth/forgot-passwordRequest password reset emailPublic

Sends a password reset email to the specified address. Returns a success message regardless of whether the email exists (prevents enumeration). Only works for accounts with password authentication enabled.

Request Body
{"email":"user@example.com"}
Response
{"message":"If the email exists, a password reset link has been sent"}
POST/api/auth/reset-passwordReset password with tokenPublic

Resets the user's password using a token from the reset email. All existing refresh tokens are revoked (logs out all sessions). The token is single-use.

Request Body
{"token":"reset-token-from-email","newPassword":"newSecureP@ss1"}
Response
{"message":"Password reset successfully"}
GET/api/auth/googleInitiate Google OAuth flowPublic

Redirects the user to Google's OAuth consent screen. After authorization, Google redirects back to the callback URL. Only available when Google OAuth is configured.

GET/api/auth/google/callbackGoogle OAuth callbackPublic

Handles the OAuth callback from Google. Links the Google account to an existing user (matched by email) or creates a new account. Redirects to the frontend with tokens in the URL fragment: <code>/auth/callback#access_token=...&amp;refresh_token=...</code>

Parameters
NameTypeRequiredDescription
statestringrequiredOAuth state parameter (verified against stored state)
codestringrequiredOAuth authorization code from Google
GET/api/auth/meGet current user profileBearer

Returns the authenticated user's profile and all tenant memberships. Use this to hydrate the session after login or page refresh.

Response
{"user":{"id":"...","email":"...","displayName":"...","emailVerified":true,"isActive":true,"authMethods":[...],"createdAt":"...","updatedAt":"...","lastLoginAt":"..."},"memberships":[{"tenantId":"...","tenantName":"...","tenantSlug":"...","role":"owner","isRoot":false}]}
POST/api/auth/logoutRevoke session tokensBearer

Revokes the current access token. If a refresh token is provided in the body, it is also revoked.

Request Body
{"refreshToken":"eyJ... (optional)"}
Response
{"message":"Logged out successfully"}
POST/api/auth/change-passwordChange passwordBearer

Changes the authenticated user's password. If the user already has a password, the current password must be provided. For Google-only accounts adding a password for the first time, the current password field can be omitted.

Request Body
{"currentPassword":"oldP@ss (required if password exists)","newPassword":"newSecureP@ss1"}
Response
{"message":"Password changed successfully"}
POST/api/auth/accept-invitationAccept a team invitationBearer

Accepts a pending invitation to join a tenant. The invitation token comes from the invitation email. The user is added to the tenant with the role specified in the invitation. Returns updated memberships.

Request Body
{"token":"invitation-token-from-email"}
Response
{"message":"Invitation accepted","memberships":[{"tenantId":"...","tenantName":"...","tenantSlug":"...","role":"user","isRoot":false}]}

Tenant Members

GET/api/tenant/membersList tenant membersBearer + Tenant

Returns all members of the current tenant with their roles and join dates. Any member of the tenant can call this endpoint.

Response
{"members":[{"userId":"...","email":"user@example.com","displayName":"Jane Doe","role":"owner","joinedAt":"2025-01-15T..."}]}
POST/api/tenant/members/inviteInvite a user by emailAdmin

Sends an invitation email to join the tenant. If the email belongs to an existing user, they receive a join link. If not, they receive a signup-and-join link. Invitations expire after 7 days. Only owners can invite admins; admins can only invite users. Subject to the plan's user limit.

Request Body
{"email":"newuser@example.com","role":"user"}
Response
{"message":"Invitation sent"}
DELETE/api/tenant/members/{userId}Remove a memberAdmin

Removes a member from the tenant. You cannot remove the owner or yourself. Admins can only remove regular users (not other admins).

Parameters
NameTypeRequiredDescription
userIdObjectIDrequiredThe user's ID
Response
{"message":"Member removed"}
PATCH/api/tenant/members/{userId}/roleChange a member's roleOwner

Changes a member's role to admin or user. Only the tenant owner can change roles. To transfer ownership, use the dedicated transfer endpoint instead.

Parameters
NameTypeRequiredDescription
userIdObjectIDrequiredThe target user's ID
Request Body
{"role":"admin"}
Response
{"message":"Role updated"}
POST/api/tenant/members/{userId}/transfer-ownershipTransfer tenant ownershipOwner

Transfers ownership of the tenant to another member. The current owner is demoted to admin. The target user must already be a member of the tenant. This action cannot be undone by the previous owner.

Parameters
NameTypeRequiredDescription
userIdObjectIDrequiredThe new owner's user ID
Response
{"message":"Ownership transferred"}

Messages

GET/api/messagesList messagesBearer

Returns all messages for the authenticated user, sorted by creation date (newest first). Messages include system notifications like invitation alerts.

Response
{"messages":[{"id":"...","userId":"...","type":"invitation","title":"...","body":"...","isRead":false,"createdAt":"..."}]}
GET/api/messages/unread-countGet unread countBearer

Returns the number of unread messages for the authenticated user. Use this for notification badges.

Response
{"count":3}
PATCH/api/messages/{messageId}/readMark as readBearer

Marks a specific message as read. Only the message owner can mark it as read.

Parameters
NameTypeRequiredDescription
messageIdObjectIDrequiredThe message ID
Response
{"message":"Marked as read"}

Plans & Billing

GET/api/plansList available plansBearer

Returns all subscription plans visible to the current user, along with the tenant's current plan, billing status, credits, and subscription interval. Requires the <code>X-Tenant-ID</code> header to determine the tenant's current state.

Response
{"plans":[{"id":"...","name":"Pro","description":"...","monthlyPriceCents":2900,"annualDiscountPct":20,"usageCreditsPerMonth":1000,"creditResetPolicy":"reset","bonusCredits":0,"userLimit":10,"entitlements":{...}}],
 "currentPlanId":"...","billingWaived":false,"tenantSubscriptionCredits":500,"tenantPurchasedCredits":0,
 "billingStatus":"active","billingInterval":"year","currentPeriodEnd":"2026-01-15T...","canceledAt":null}
GET/api/credit-bundlesList credit bundlesBearer

Returns all active credit bundles available for purchase, sorted by sort order.

Response
{"bundles":[{"id":"...","name":"500 Credits","credits":500,"priceCents":4900,"isActive":true,"sortOrder":1}]}
POST/api/billing/checkoutStart a checkout sessionBearer + Tenant

Creates a Stripe Checkout session for a plan subscription or credit bundle purchase. For free plans or billing-waived tenants, the plan is assigned immediately without Stripe. Specify either <code>planId</code> or <code>bundleId</code>, not both.

Request Body
{"planId":"ObjectID (or bundleId)","billingInterval":"year"}
Response
{"checkoutUrl":"https://checkout.stripe.com/..."}
POST/api/billing/portalOpen billing portalBearer + Tenant

Creates a Stripe Billing Portal session URL where the customer can manage payment methods, view invoices, and update billing details. The tenant must have an existing Stripe customer ID.

Response
{"portalUrl":"https://billing.stripe.com/..."}
GET/api/billing/transactionsList billing transactionsBearer + Tenant

Returns paginated billing transactions for the current tenant, sorted by date (newest first).

Parameters
NameTypeRequiredDescription
pageintoptionalPage number (default: 1)
perPageintoptionalItems per page, 1-100 (default: 20)
Response
{"transactions":[{"id":"...","tenantId":"...","description":"Pro Plan (Annual)","type":"subscription","amountCents":29900,"currency":"usd","invoiceNumber":"INV-0001","createdAt":"..."}],
 "total":15,"page":1,"perPage":20}
GET/api/billing/transactions/{id}/invoiceGet invoice detailsBearer + Tenant

Returns the full transaction record and tenant name for rendering an invoice view.

Parameters
NameTypeRequiredDescription
idObjectIDrequiredTransaction ID
Response
{"transaction":{...},"tenant":{"name":"Acme Corp"}}
GET/api/billing/transactions/{id}/invoice/pdfDownload invoice PDFBearer + Tenant

Generates and returns a PDF invoice for the specified transaction. The response Content-Type is <code>application/pdf</code>.

Parameters
NameTypeRequiredDescription
idObjectIDrequiredTransaction ID
POST/api/billing/cancelCancel subscriptionBearer + Tenant

Cancels the tenant's current subscription at the end of the billing period. The tenant retains access until the period ends. Returns the period end date.

Response
{"message":"Subscription will cancel at end of billing period","currentPeriodEnd":"2026-02-15T..."}
GET/api/billing/configGet billing configurationBearer + Tenant

Returns the Stripe publishable key for initializing Stripe.js on the frontend. Returns an empty string if Stripe is not configured.

Response
{"publishableKey":"pk_live_..."}

Admin — Dashboard & Monitoring

GET/api/admin/aboutGet system informationAdmin

Returns the current version and copyright information.

Response
{"version":"1.00","copyright":"..."}
GET/api/admin/dashboardGet dashboard metricsAdmin

Returns high-level system metrics including total user count, tenant count, and overall health status with any active issues.

Response
{"users":142,"tenants":38,"health":{"healthy":true,"issues":[]}}
GET/api/admin/logsList system logsAdmin

Returns paginated system audit logs with optional filtering by severity, user, or text search. Logs record authentication events, configuration changes, billing actions, and other system activity.

Parameters
NameTypeRequiredDescription
pageintoptionalPage number (default: 1)
perPageintoptionalItems per page, 1-100 (default: 50)
severitystringoptionalFilter by severity: critical, high, medium, low, debug
userIdObjectIDoptionalFilter by user ID
searchstringoptionalFull-text search in log messages
Response
{"logs":[{"id":"...","severity":"high","message":"Webhook created: Test → https://...","userId":"...","createdAt":"..."}],"total":256}
GET/api/admin/health/nodesList server nodesAdmin

Returns all known server nodes and their current status. In a multi-machine deployment, each machine registers as a separate node.

Response
{"nodes":[{"id":"...","hostname":"d892610f630968","region":"iad","lastSeen":"...","isHealthy":true}]}
GET/api/admin/health/metricsGet performance metricsAdmin

Returns time-series performance metrics (CPU, memory, request rate, latency) for a specific node or aggregated across all nodes.

Parameters
NameTypeRequiredDescription
nodeObjectIDoptionalNode ID (omit for aggregate)
rangestringoptionalTime range: 1h, 6h, 24h, 7d, 30d (default: 24h)
Response
{"metrics":[{"timestamp":"...","cpu":23.5,"memoryMB":128,"requestsPerMin":45,"avgLatencyMs":12}],"from":"...","to":"..."}
GET/api/admin/health/currentGet current node healthAdmin

Returns the latest health snapshot for each active node. Use this for real-time monitoring dashboards.

Response
{"metrics":[{"nodeId":"...","cpu":15.2,"memoryMB":96,"requestsPerMin":30,"avgLatencyMs":8}]}
GET/api/admin/health/integrationsCheck integration healthAdmin

Checks the connectivity and status of all external integrations: MongoDB, Stripe, Resend (email), and Google OAuth. Returns the check status and last 24h call count for each.

Response
{"integrations":[{"name":"mongodb","status":"healthy","lastCheck":"...","calls24h":1520},{"name":"stripe","status":"healthy",...},{"name":"resend","status":"not_configured",...}]}

Admin — Configuration

GET/api/admin/configList all config variablesAdmin

Returns all configuration variables as a map keyed by variable name. Includes system variables (read-only name/type) and user-created variables.

Response
{"configs":{"app.name":{"name":"app.name","type":"string","value":"Deploy","description":"Application name","isSystem":true,"options":""},...}}
POST/api/admin/configCreate a config variableAdmin

Creates a new user-defined configuration variable. Variable names must be unique. Types: <code>string</code>, <code>numeric</code>, <code>enum</code> (pipe-separated options), <code>template</code> (supports placeholders).

Request Body
{"name":"feature.max_uploads","description":"Maximum uploads per user","type":"numeric","value":"100","options":""}
Response
{"name":"feature.max_uploads","type":"numeric","value":"100","description":"Maximum uploads per user","isSystem":false,"options":""}
GET/api/admin/config/{name}Get a config variableAdmin

Returns a single configuration variable by name.

Parameters
NameTypeRequiredDescription
namestringrequiredConfig variable name
Response
{"name":"app.name","type":"string","value":"Deploy","description":"Application name","isSystem":true,"options":""}
PUT/api/admin/config/{name}Update a config variableAdmin

Updates the value (and optionally description/options) of a configuration variable. System variables only allow value changes. Enum variables validate against the options list.

Parameters
NameTypeRequiredDescription
namestringrequiredConfig variable name
Request Body
{"value":"200","description":"Updated description (optional)"}
Response
{"name":"feature.max_uploads","type":"numeric","value":"200",...}
DELETE/api/admin/config/{name}Delete a config variableAdmin

Deletes a user-created configuration variable. System variables cannot be deleted.

Parameters
NameTypeRequiredDescription
namestringrequiredConfig variable name
Response
{"message":"Config variable deleted"}

Admin — Tenants

GET/api/admin/tenantsList all tenantsAdmin

Returns all tenants with member counts and billing information. Includes the plan name, billing waived status, and credit balances.

Response
{"tenants":[{"id":"...","name":"Acme Corp","slug":"acme-corp","isRoot":false,"isActive":true,"memberCount":5,"planName":"Pro","billingWaived":false,"subscriptionCredits":1000,"purchasedCredits":200,"createdAt":"..."}]}
GET/api/admin/tenants/{tenantId}Get tenant detailsAdmin

Returns full tenant details including all members with roles and join dates.

Parameters
NameTypeRequiredDescription
tenantIdObjectIDrequiredTenant ID
Response
{"tenant":{"id":"...","name":"Acme Corp","slug":"acme-corp","isRoot":false,"isActive":true,"planId":"...","billingWaived":false,"subscriptionCredits":1000,"purchasedCredits":200,"stripeCustomerId":"cus_...","billingStatus":"active","billingInterval":"year","currentPeriodEnd":"...","createdAt":"...","updatedAt":"..."},
 "members":[{"userId":"...","email":"jane@acme.com","displayName":"Jane Doe","role":"owner","joinedAt":"..."}]}
PUT/api/admin/tenants/{tenantId}Update tenantOwner

Updates tenant properties. All fields are optional — only provided fields are changed. Can modify name, billing waived status, and credit balances.

Parameters
NameTypeRequiredDescription
tenantIdObjectIDrequiredTenant ID
Request Body
{"name":"New Name (optional)","billingWaived":true,"subscriptionCredits":5000,"purchasedCredits":100}
Response
{"message":"Tenant updated"}
PATCH/api/admin/tenants/{tenantId}/statusActivate or deactivate tenantOwner

Sets a tenant's active status. Deactivated tenants cannot access the application. The root tenant cannot be deactivated.

Parameters
NameTypeRequiredDescription
tenantIdObjectIDrequiredTenant ID
Request Body
{"isActive":false}
Response
{"message":"Tenant deactivated"}
PATCH/api/admin/tenants/{tenantId}/planAssign plan to tenantOwner

Directly assigns a plan to a tenant (bypasses Stripe). Can also toggle billing waived status. Send an empty <code>planId</code> or omit it to remove the plan.

Parameters
NameTypeRequiredDescription
tenantIdObjectIDrequiredTenant ID
Request Body
{"planId":"ObjectID (optional)","billingWaived":true}
Response
{"status":"updated"}
POST/api/admin/tenants/{tenantId}/cancel-subscriptionCancel subscription (admin override)Owner

Cancels a tenant's Stripe subscription. Set <code>immediate</code> to true to cancel now; otherwise cancels at the end of the billing period.

Parameters
NameTypeRequiredDescription
tenantIdObjectIDrequiredTenant ID
Request Body
{"immediate":false}
Response
{"message":"Subscription canceled"}
PATCH/api/admin/tenants/{tenantId}/subscriptionUpdate subscription detailsOwner

Manually updates subscription metadata such as the current period end date. Use this for correcting billing records.

Parameters
NameTypeRequiredDescription
tenantIdObjectIDrequiredTenant ID
Request Body
{"currentPeriodEnd":"2026-03-15T00:00:00Z"}
Response
{"message":"Subscription updated"}

Admin — Users

GET/api/admin/usersList all usersOwner

Returns all users with summary information including tenant count and last login time.

Response
{"users":[{"id":"...","email":"jane@example.com","displayName":"Jane Doe","emailVerified":true,"isActive":true,"tenantCount":2,"createdAt":"...","lastLoginAt":"..."}]}
GET/api/admin/users/{userId}Get user detailsOwner

Returns full user profile including authentication methods and all tenant memberships with billing details for each tenant.

Parameters
NameTypeRequiredDescription
userIdObjectIDrequiredUser ID
Response
{"user":{"id":"...","email":"jane@example.com","displayName":"Jane Doe","emailVerified":true,"isActive":true,"authMethods":[{"provider":"password"},{"provider":"google"}],"createdAt":"...","lastLoginAt":"..."},
 "memberships":[{"tenantId":"...","tenantName":"Acme Corp","tenantSlug":"acme-corp","isRoot":false,"role":"owner","joinedAt":"...","planId":"...","planName":"Pro","billingWaived":false,"subscriptionCredits":1000,"purchasedCredits":200}]}
PUT/api/admin/users/{userId}Update userOwner

Updates a user's email or display name. Both fields are optional — only provided fields are changed.

Parameters
NameTypeRequiredDescription
userIdObjectIDrequiredUser ID
Request Body
{"email":"new@example.com","displayName":"New Name"}
Response
{"message":"User updated"}
PATCH/api/admin/users/{userId}/statusActivate or deactivate userOwner

Sets a user's active status. Deactivated users cannot log in. Active sessions are not immediately terminated but will fail on the next API call.

Parameters
NameTypeRequiredDescription
userIdObjectIDrequiredUser ID
Request Body
{"isActive":false}
Response
{"message":"User deactivated"}
PATCH/api/admin/users/{userId}/role/{tenantId}Change user's role in tenantOwner

Changes a user's role within a specific tenant. Can set to owner, admin, or user. When changing to owner, the current owner is demoted to admin.

Parameters
NameTypeRequiredDescription
userIdObjectIDrequiredUser ID
tenantIdObjectIDrequiredTenant ID
Request Body
{"role":"admin"}
Response
{"message":"Role updated"}
GET/api/admin/users/{userId}/preflight-deletePreview delete effectsOwner

Returns a preview of what would happen if the user were deleted. Shows all tenants where the user is the owner and lists other members who could take ownership. Returns <code>canDelete: false</code> if the user is the sole owner of the root tenant.

Parameters
NameTypeRequiredDescription
userIdObjectIDrequiredUser ID
Response
{"canDelete":true,"ownerships":[{"tenantId":"...","tenantName":"Acme Corp","isRoot":false,"otherMembers":[{"userId":"...","email":"bob@acme.com","displayName":"Bob","role":"admin","joinedAt":"..."}]}]}
DELETE/api/admin/users/{userId}Delete userOwner

Permanently deletes a user account. For tenants where the user is the owner, specify a replacement owner or confirm tenant deletion. The request body must resolve all ownership conflicts identified by the preflight endpoint.

Parameters
NameTypeRequiredDescription
userIdObjectIDrequiredUser ID
Request Body
{"replacementOwners":{"tenantId":"newOwnerUserId"},"confirmTenantDeletions":["tenantId"]}
Response
{"message":"User deleted"}

Admin — Plans

GET/api/admin/plansList all plansAdmin

Returns all subscription plans with subscriber counts.

Response
{"plans":[{"id":"...","name":"Pro","description":"...","monthlyPriceCents":2900,"annualDiscountPct":20,"usageCreditsPerMonth":1000,"creditResetPolicy":"reset","bonusCredits":0,"userLimit":10,"entitlements":{"feature_x":{"type":"bool","boolValue":true,"description":"..."}},"isSystem":false,"createdAt":"..."}]}
GET/api/admin/plans/{planId}Get plan detailsAdmin

Returns full details for a single plan.

Parameters
NameTypeRequiredDescription
planIdObjectIDrequiredPlan ID
Response
{"id":"...","name":"Pro","description":"...","monthlyPriceCents":2900,...}
GET/api/admin/entitlement-keysList entitlement keysAdmin

Returns all unique entitlement keys currently in use across all plans, with their types and descriptions.

Response
{"keys":[{"key":"feature_x","type":"bool","description":"Enable feature X"}]}
POST/api/admin/plansCreate a planOwner

Creates a new subscription plan. Plan names must be unique. Credit reset policy can be <code>reset</code> (credits reset each month) or <code>accrue</code> (unused credits roll over). Set <code>userLimit</code> to 0 for unlimited users.

Request Body
{"name":"Enterprise","description":"For large teams","monthlyPriceCents":9900,"annualDiscountPct":25,"usageCreditsPerMonth":5000,"creditResetPolicy":"accrue","bonusCredits":1000,"userLimit":0,"entitlements":{"feature_x":{"type":"bool","boolValue":true,"description":"Enable feature X"}}}
Response
{"id":"...","name":"Enterprise",...}
PUT/api/admin/plans/{planId}Update a planOwner

Updates an existing plan. System plans (Free) cannot be renamed. All fields from the create endpoint are accepted.

Parameters
NameTypeRequiredDescription
planIdObjectIDrequiredPlan ID
Request Body
{"name":"Enterprise Plus","monthlyPriceCents":14900,...}
Response
{"id":"...","name":"Enterprise Plus",...}
DELETE/api/admin/plans/{planId}Delete a planOwner

Deletes a plan. System plans and plans with active subscribers cannot be deleted. Reassign subscribers first.

Parameters
NameTypeRequiredDescription
planIdObjectIDrequiredPlan ID
Response
{"status":"deleted"}

Admin — Credit Bundles

GET/api/admin/credit-bundlesList all credit bundlesAdmin

Returns all credit bundles (active and inactive), sorted by sort order.

Response
{"bundles":[{"id":"...","name":"500 Credits","credits":500,"priceCents":4900,"isActive":true,"sortOrder":1,"createdAt":"..."}]}
POST/api/admin/credit-bundlesCreate a credit bundleOwner

Creates a new credit bundle for purchase. Bundle names must be unique. Credits and price must be positive values.

Request Body
{"name":"1000 Credits","credits":1000,"priceCents":8900,"isActive":true,"sortOrder":2}
Response
{"id":"...","name":"1000 Credits","credits":1000,...}
PUT/api/admin/credit-bundles/{bundleId}Update a credit bundleOwner

Updates an existing credit bundle.

Parameters
NameTypeRequiredDescription
bundleIdObjectIDrequiredBundle ID
Request Body
{"name":"1000 Credits","credits":1000,"priceCents":7900,...}
Response
{"id":"...","name":"1000 Credits",...}
DELETE/api/admin/credit-bundles/{bundleId}Delete a credit bundleOwner

Permanently deletes a credit bundle.

Parameters
NameTypeRequiredDescription
bundleIdObjectIDrequiredBundle ID
Response
{"status":"deleted"}

Admin — Financial

GET/api/admin/financial/transactionsList all transactionsAdmin

Returns paginated billing transactions across all tenants. Supports filtering by tenant and text search across description, invoice number, plan name, and bundle name.

Parameters
NameTypeRequiredDescription
pageintoptionalPage number (default: 1)
perPageintoptionalItems per page, 1-100 (default: 50)
tenantIdObjectIDoptionalFilter by tenant
searchstringoptionalSearch description, invoice number, plan/bundle name
Response
{"transactions":[{"id":"...","tenantId":"...","description":"Pro Plan (Annual)","type":"subscription","amountCents":29900,"currency":"usd","invoiceNumber":"INV-0001","planName":"Pro","createdAt":"..."}],
 "total":150,"page":1,"perPage":50}
GET/api/admin/financial/metricsGet financial metricsAdmin

Returns time-series financial data for charting. Supported metrics: <code>revenue</code> (daily revenue), <code>arr</code> (annualized recurring revenue), <code>dau</code> (daily active users), <code>mau</code> (monthly active users).

Parameters
NameTypeRequiredDescription
rangestringoptionalTime range: 7d, 30d, 1y (default: 30d)
metricstringoptionalMetric type: revenue, arr, dau, mau (default: revenue)
Response
{"data":[{"date":"2026-02-01","value":15000},{"date":"2026-02-02","value":18500},...]}

Admin — API Keys

GET/api/admin/api-keysList active API keysAdmin

Returns all active API keys with metadata. The key hash is never returned — only the preview (last 8 characters) is shown.

Response
{"apiKeys":[{"id":"...","name":"CI/CD Pipeline","keyPreview":"x7k9m2pq","authority":"admin","createdBy":"...","createdAt":"...","lastUsedAt":"...","isActive":true}]}
POST/api/admin/api-keysCreate an API keyAdmin

Creates a new API key and returns the raw key value. <strong>The raw key is only returned once</strong> — it is stored as a SHA-256 hash and cannot be retrieved later. Authority levels: <code>admin</code> keys auto-resolve the root tenant and get admin-level access; <code>user</code> keys require an <code>X-Tenant-ID</code> header.

Request Body
{"name":"CI/CD Pipeline","authority":"admin"}
Response
{"apiKey":{"id":"...","name":"CI/CD Pipeline","keyPreview":"x7k9m2pq","authority":"admin",...},"rawKey":"lsk_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmno"}
DELETE/api/admin/api-keys/{keyId}Revoke an API keyAdmin

Soft-deletes an API key. The key immediately stops working for authentication. This cannot be undone.

Parameters
NameTypeRequiredDescription
keyIdObjectIDrequiredAPI key ID
Response
{"status":"deleted"}

Admin — Webhooks

GET/api/admin/webhooksList active webhooksAdmin

Returns all active webhook configurations sorted by creation date (newest first).

Response
{"webhooks":[{"id":"...","name":"Provisioning","description":"...","url":"https://example.com/webhook","secretPreview":"k9m2pqx7","events":["tenant.created"],"isActive":true,"createdBy":"...","createdAt":"..."}]}
GET/api/admin/webhooks/event-typesList available event typesAdmin

Returns all webhook event types that can be subscribed to, with descriptions.

Response
{"eventTypes":[{"type":"tenant.created","description":"Fired when a new tenant is created..."}]}
POST/api/admin/webhooksCreate a webhookAdmin

Creates a new webhook with an auto-generated signing secret (prefixed <code>whsec_</code>). The full secret is returned in the response — you can also retrieve it later from the detail endpoint. All deliveries include an <code>X-Webhook-Signature</code> header containing the HMAC-SHA256 signature of the payload.

Request Body
{"name":"Provisioning","description":"Provision new tenants","url":"https://example.com/webhook","events":["tenant.created"]}
Response
{"webhook":{"id":"...","name":"Provisioning",...},"secret":"whsec_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef"}
GET/api/admin/webhooks/{webhookId}Get webhook detailsAdmin

Returns full webhook configuration including the signing secret and the 20 most recent delivery attempts with their payloads and response details.

Parameters
NameTypeRequiredDescription
webhookIdObjectIDrequiredWebhook ID
Response
{"webhook":{"id":"...","name":"Provisioning",...},"secret":"whsec_...","deliveries":[{"id":"...","eventType":"tenant.created","payload":"{...}","responseCode":200,"responseBody":"ok","success":true,"durationMs":120,"createdAt":"..."}]}
PUT/api/admin/webhooks/{webhookId}Update webhookAdmin

Updates the webhook's name, description, URL, or subscribed events. The signing secret is not affected.

Parameters
NameTypeRequiredDescription
webhookIdObjectIDrequiredWebhook ID
Request Body
{"name":"Updated Name","description":"...","url":"https://new-url.com/webhook","events":["tenant.created"]}
Response
{"webhook":{"id":"...","name":"Updated Name",...}}
DELETE/api/admin/webhooks/{webhookId}Delete webhookAdmin

Soft-deletes a webhook. It immediately stops receiving event deliveries.

Parameters
NameTypeRequiredDescription
webhookIdObjectIDrequiredWebhook ID
Response
{"status":"deleted"}
POST/api/admin/webhooks/{webhookId}/testSend test eventAdmin

Delivers a test <code>tenant.created</code> event with sample data to the webhook URL. The delivery includes an <code>X-Webhook-Test: true</code> header so your handler can distinguish test deliveries. Returns the delivery result.

Parameters
NameTypeRequiredDescription
webhookIdObjectIDrequiredWebhook ID
Response
{"delivery":{"id":"...","eventType":"tenant.created","success":true,"responseCode":200,"durationMs":85,"createdAt":"..."}}
POST/api/admin/webhooks/{webhookId}/regenerate-secretRegenerate signing secretAdmin

Generates a new signing secret for the webhook. The old secret immediately stops working. Returns the new secret and preview.

Parameters
NameTypeRequiredDescription
webhookIdObjectIDrequiredWebhook ID
Response
{"secret":"whsec_NEWsecretABCDEFGHIJKLMNOPQRSTUV","secretPreview":"QRSTUV12"}

Public

GET/api/domains/domain-connect/callbackReceive Domain Connect callbackstate

Validate a short-lived Domain Connect callback state and resume domain lifecycle polling.

POST/api/webhooks/githubReceive GitHub webhookPublic

Receive GitHub webhooks.

POST/api/webhooks/gitlabReceive GitLab webhookPublic

Receive GitLab push and merge request webhooks (X-Gitlab-Token pre-shared secret).

POST/api/webhooks/bitbucketReceive Bitbucket webhookPublic

Receive Bitbucket Cloud push and pull-request webhooks (X-Hub-Signature HMAC-SHA256).

GET/api/github/app/setupGitHub app setup callbackPublic

Handle the GitHub App setup callback after installation.

POST/api/hooks/:tokenTrigger deploy hookPublic

Trigger a deploy hook by token.

Parameters
NameTypeRequiredDescription
tokenstringrequiredPath parameter
POST/api/servers/:id/heartbeatReceive server heartbeatPublic

Receive a server heartbeat from the agent.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/install/:tokenServe agent install scriptnone (HMAC token)

Serves the shell script that installs the permanu-agent on a server.

Parameters
NameTypeRequiredDescription
tokenstringrequiredPath parameter
POST/api/install/:token/registerRegister server via install tokennone (HMAC token)

Called by the install script to register the server and receive agent credentials.

Parameters
NameTypeRequiredDescription
tokenstringrequiredPath parameter

Agent

POST/api/agent/refresh-install-tokenRefresh expired install tokennone (HMAC previous token in body — EX-005)

Issues a fresh install token when presented with an HMAC-signed predecessor token (expired or not). Rate-limited to 10 refreshes per 24 h per operator. Enables G-A3 install retry without operator re-minting.

POST/api/agent/token/refreshExchange refresh token for new access + refresh pairnone (refresh token in body)

Rotates the agent refresh token. Replayed tokens trigger chain revocation.

POST/api/agent/rebootstrapRe-pair orphaned agent using bootstrap keynone (bcrypt bootstrap key in body — EX-004)

Issues fresh credentials (server_id, agent_secret, tokens) for an agent that has lost its identity. Bootstrap key is one-shot rotated on use. Rate-limited to 5/hour/machine_id.

GET/api/agent/:server_id/statusGet agent statusBearer + Tenant

Merges DB-side heartbeat state with a live AGENT_STATUS gRPC probe — agent version, uptime, docker reachable, disk/memory free, clock skew. Tolerates an unreachable agent: DB view is still returned with live_probe_error populated.

Parameters
NameTypeRequiredDescription
server_idstringrequiredPath parameter
GET/api/agent/:server_id/commandsList recent agent commandsBearer + Tenant

Returns the last N command dispatches (pending/inflight/failed/completed). Currently 501 — control plane does not yet persist per-server command history; follow-up migration pending.

Parameters
NameTypeRequiredDescription
server_idstringrequiredPath parameter
GET/api/agent/:server_id/logsTail agent journald logsBearer + Tenant

Returns the last ?lines=N (default 200, capped at 2000) lines from the permanu-agent systemd unit via journalctl.

Parameters
NameTypeRequiredDescription
server_idstringrequiredPath parameter
POST/api/agent/:server_id/pingPing agentBearer + Tenant

Issues a COMMAND_TYPE_AGENT_PING round-trip and returns RTT in milliseconds plus computed clock skew.

Parameters
NameTypeRequiredDescription
server_idstringrequiredPath parameter

Observability

POST/api/:projectId/envelope/Sentry envelope ingestiondsn

Ingest error events using the Sentry envelope wire protocol. Authenticates via DSN public key.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
POST/api/v1/otlp/tracesOTLP trace ingestbearer-dsn

Accept OpenTelemetry OTLP exports (protobuf or JSON). Exception span events are translated to permanu.error/v1 and stored in the error-tracking pipeline. Auth: Authorization: Bearer <dsn-key>. Rate-limited: 1000/s per token.

GET/api/apps/:appId/container-eventsGet container eventBearer + Tenant

List container lifecycle events for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/servers/:serverId/container-eventsGet container eventBearer + Tenant

List container lifecycle events for a server.

Parameters
NameTypeRequiredDescription
serverIdstringrequiredPath parameter
POST/api/notification-channelsCreate notification channelBearer + Tenant

Create a notification channel.

GET/api/notification-channelsList notification channelsBearer + Tenant

List notification channels.

GET/api/notification-channels/:idGet notification channelBearer + Tenant

Get a notification channel by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/notification-channels/:idUpdate notification channelBearer + Tenant

Update a notification channel.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/notification-channels/:idDelete notification channelBearer + Tenant

Delete a notification channel.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/notification-channels/:id/testCreate testBearer + Tenant

Send a test notification through a channel.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/monitorsCreate monitorBearer + Tenant

Create an uptime monitor.

GET/api/monitorsList monitorsBearer + Tenant

List uptime monitors.

GET/api/monitors/:idGet monitorBearer + Tenant

Get an uptime monitor by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/monitors/:idUpdate monitorBearer + Tenant

Update an uptime monitor.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/monitors/:idDelete monitorBearer + Tenant

Delete an uptime monitor.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/monitors/:id/checksGet checkBearer + Tenant

List recent checks for an uptime monitor.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/monitors/:id/uptimeGet uptimeBearer + Tenant

Get uptime percentage for a monitor.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/dashboardsCreate dashboardBearer + Tenant

Create a custom monitoring dashboard.

GET/api/dashboardsList dashboardsBearer + Tenant

List dashboards for the org.

GET/api/dashboards/:idGet dashboardBearer + Tenant

Get a dashboard by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/dashboards/:idUpdate dashboardBearer + Tenant

Update a dashboard.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/dashboards/:idDelete dashboardBearer + Tenant

Delete a dashboard.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/dashboards/:id/cloneClone dashboardBearer + Tenant

Clone a dashboard.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/dashboards/:id/shareCreate shareBearer + Tenant

Issue a signed share link for a dashboard (HMAC-SHA256, TTL-based).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/dashboards/:id/shareDelete shareBearer + Tenant

Revoke the public share token for a dashboard.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/dashboards/:id/share/revoke-allCreate revoke allBearer + Tenant

Revoke all HMAC share links for a dashboard by bumping the revocation serial. Returns { revoked: true, serial: N }.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/dashboards/:id/embed/allowlistGet allowlistBearer + Tenant

List embed origins allowlisted for this dashboard.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/dashboards/:id/embed/allowlistCreate allowlistBearer + Tenant

Add an https origin to the dashboard embed allowlist.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/dashboards/:id/embed/allowlistDelete allowlistBearer + Tenant

Remove an origin from the dashboard embed allowlist. Pass origin as ?origin= query param.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/dashboards/share/:tokenGet shared dashboard by HMAC tokenPublic

Retrieve a dashboard by its HMAC-signed share token. Returns 401 if token is invalid or expired.

Parameters
NameTypeRequiredDescription
tokenstringrequiredPath parameter
GET/api/shared/dashboards/:tokenGet shared dashboardPublic

Retrieve a dashboard by its public share token.

Parameters
NameTypeRequiredDescription
tokenstringrequiredPath parameter
GET/api/shared/dashboards/:token/queryShared dashboard instant queryPublic

Run a PromQL instant query for a shared dashboard. Metric names must match the dashboard's panel allowlist.

Parameters
NameTypeRequiredDescription
tokenstringrequiredPath parameter
GET/api/shared/dashboards/:token/query_rangeShared dashboard range queryPublic

Run a PromQL range query for a shared dashboard. Metric names must match the dashboard's panel allowlist.

Parameters
NameTypeRequiredDescription
tokenstringrequiredPath parameter
POST/api/alert-rulesCreate alert ruleBearer + Tenant

Create a metric-based alert rule.

GET/api/alert-rulesList alert rulesBearer + Tenant

List alert rules for the org.

GET/api/alert-rules/:idGet alert ruleBearer + Tenant

Get an alert rule by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/alert-rules/:idUpdate alert ruleBearer + Tenant

Update an alert rule.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/alert-rules/:idDelete alert ruleBearer + Tenant

Delete an alert rule.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/alert-firingsList alert firingsBearer + Tenant

List alert firing history for the org.

POST/api/alert-firings/:id/ackCreate ackBearer + Tenant

Acknowledge an alert firing.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/alert-templatesList alert templatesBearer + Tenant

List predefined alert templates for database services.

POST/api/services/:serviceId/alert-rules/from-templateCreate from templateBearer + Tenant

Create an alert rule from a predefined template.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/alert-silencesCreate alert silenceBearer + Tenant

Create an alert silence (suppresses notifications for a rule or all rules).

GET/api/alert-silencesList alert silencesBearer + Tenant

List alert silences for the org.

DELETE/api/alert-silences/:idDelete alert silenceBearer + Tenant

Delete an alert silence.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/errorsCreate errorBearer + Tenant

Ingest an error event using the Deploy-native JSON format.

GET/api/error-groupsList error groupsBearer + Tenant

List error groups for the org.

GET/api/error-groups/:idGet error groupBearer + Tenant

Get an error group by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/error-groups/:idUpdate error groupBearer + Tenant

Update the status of an error group.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/error-groups/:id/resolveCreate resolveBearer + Tenant

Mark an error group as resolved (PM-020).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/error-groups/:id/ignoreCreate ignoreBearer + Tenant

Mark an error group as ignored (PM-020).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/error-groups/:id/eventsGet eventBearer + Tenant

List recent events for an error group.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/error-dsnsCreate error dsnBearer + Tenant

Create an error DSN.

GET/api/error-dsnsList error dsnsBearer + Tenant

List error DSNs.

DELETE/api/error-dsns/:idDelete error dsnBearer + Tenant

Delete an error DSN.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/error-sourcemapsCreate error sourcemapBearer + Tenant

Upload a source map for stack trace deobfuscation. Rate-limited: 1000/s per token.

GET/api/error-sourcemapsList error sourcemapsBearer + Tenant

List source maps for an app.

DELETE/api/error-sourcemaps/:idDelete error sourcemapBearer + Tenant

Delete a source map.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/observe/logs/searchSearch logsBearer + Tenant

Filter + paginate VL logs for an app. Params: app_id, time_range, level_filter, regex, limit, cursor.

GET/api/observe/logs/statsLog statsBearer + Tenant

Pre-canned VL stats aggregations. type=count_by_level|count_over_time|top_recurring_errors.

POST/api/observe/logs/correlateCorrelate logs near errorsBearer + Tenant

Two-pass orchestration: query anchor events then return all logs within ±window_seconds.

GET/api/observe/metrics/panelNamed metrics panelBearer + Tenant

Pre-canned PromQL panel. name=error_rate|latency_p95|rss_per_container|cpu_per_container|request_rate.

GET/api/observe/saved-queriesList saved queriesBearer + Tenant

List per-user saved query configurations.

POST/api/observe/saved-queriesSave a queryBearer + Tenant

Persist a QueryBuilder configuration as a named bookmark.

GET/api/observe/contextGet contextBearer + Tenant

One-shot context bundle for the named app/host/incident (AI agent entry point).

GET/api/observe/diffGet diffBearer + Tenant

Diff two deployments: env keys, config, domains, image.

GET/api/observe/changesTail unified tenant mutationsBearer + Tenant

Returns a unified, newest-first slice of mutations across deployments, apps, env_vars, env_var_leases, domain_assignments, and server state transitions. Accepts ?app=<idOrSlugOrName>, ?since=<dur> (default 24h, max 30d), ?limit=<n> (default 100, max 500), ?types=<csv> (deploy|app.update|env.set|env.rotate|env.remove|domain.add|domain.remove|server.state). Tenant-scoped; never emits env var values.

Analytics

POST/api/v1/eventsIngest analytics eventsapi_key

Ingest analytics events (PostHog-compatible). Accepts single-event or batch bodies. Rate-limited to 1000 events/sec per token.

GET/api/analytics/deploymentsList deploymentsBearer + Tenant

Get deployment analytics.

GET/api/analytics/deployments/summaryGet summaryBearer + Tenant

Get deployment analytics summary.

GET/api/analytics/servers/:serverId/metricsGet metricBearer + Tenant

Get historical server metrics.

Parameters
NameTypeRequiredDescription
serverIdstringrequiredPath parameter
GET/api/analytics/costsList costsBearer + Tenant

Get resource cost analytics.

GET/api/analytics/my-domainsList my domainsBearer + Tenant

List verified domains owned by the authenticated user. Used by the /measure domain picker dropdown.

GET/api/eventsList analytics eventsBearer + Tenant

List tenant-scoped analytics events. Filters: name, appId, from, to (RFC3339), limit (1..1000, default 100).

GET/api/events/countsTop-N analytics event countsBearer + Tenant

Returns the top-20 event names by count over the requested window. Defaults: last 7 days.

GET/api/events/tailLive tail of analytics eventsBearer + Tenant

SSE stream of new tenant-scoped events. Filters: name, appId. Cursor: ?since=<RFC3339> or Last-Event-ID. Polls events table on a 1s tick (no LISTEN/NOTIFY).

POST/api/events/funnels/computeCompute funnelBearer + Tenant

Compute a multi-step funnel with strict-next ordering. Body: { steps:[2..10], from, to, step_window_hours }. Limit 30 req/min per tenant.

POST/api/events/cohorts/computeCompute cohort retentionBearer + Tenant

Bucket users by first cohort_event occurrence (day|week|month) and compute retention-per-period. Body: { cohort_event, cohort_period, return_event, periods:[1..52] }.

POST/api/events/retention/computeCompute aggregate retentionBearer + Tenant

Return D1/D7/D30 retention % for users who did ANY event in the window. Body: { from, to, periods:[d1,d7,d30] }.

Metrics

POST/api/services/:id/metricsPush service metricsapi_key

Push per-service measurements from any tool (not just the agent). Accepts single or batch bodies with an optional RFC3339 timestamp. Rate-limited to 1000 req/sec per service_instance.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/apps/:id/metricsGet app metricsBearer + Tenant

Get app metrics.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/apps/:id/observability/labelsGet app observability labelsBearer + Tenant

Resolve an app UUID or slug to tenant-scoped route and container metric matchers.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/apps/:id/metrics/catalogGet app metrics catalogBearer + Tenant

Resolve an app UUID or slug to app-scoped metric families, query templates, availability diagnostics, and concrete route/container matchers.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/apps/:id/metrics/summaryGet app metrics summaryBearer + Tenant

Resolve an app UUID or slug to tenant/domain labels and return route metric headlines, series, freshness, and empty-state reasons.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/metricsGet server metricsBearer + Tenant

Get server metrics.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/observability/graphGet scoped observability graphBearer + Tenant

Resolve a scope_kind/scope_id/range entity into graph neighbors, deployments, incidents, logs, traces, and diagnostic empty reasons.

GET/api/observability/sloGet scoped SLO summaryBearer + Tenant

Return SLO/error-budget state for a scoped app, service, or repo. Missing configuration is returned as a scoped diagnostic empty state.

GET/api/services/:id/metricsGet service metricsBearer + Tenant

Returns per service_instance measurements (connections, ops/sec, heap, ...). range=1h|6h|24h|7d (default 24h).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/service-metric-keysMint service-metric push keyBearer + Tenant

Mint a new api_key for the authenticated tenant. The key authenticates pushes to POST /api/services/:id/metrics.

GET/api/service-metric-keysList service-metric push keysBearer + Tenant

List push api_keys for the authenticated tenant.

DELETE/api/service-metric-keys/:idRevoke service-metric push keyBearer + Tenant

Revoke a push api_key. The deletion is hard — subsequent ingest requests with the key return 401.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/services/:id/metric-defsGet service metric definitionsBearer + Tenant

Return the declared MetricExposed entries for the service's template with per-instance overrides merged on top.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/services/:id/metric-defs/:metric_nameUpsert a service metric definition overrideBearer + Tenant

Upsert a sparse per-instance override (display/unit/thresholds/...) for a template-declared or custom metric.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
metric_namestringrequiredPath parameter
DELETE/api/services/:id/metric-defs/:metric_nameDelete a service metric definition overrideBearer + Tenant

Remove a per-instance override so the response falls back to the template-declared values.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
metric_namestringrequiredPath parameter
GET/api/metrics/queryInstant PromQL queryBearer + Tenant

Proxy a PromQL instant query to VictoriaMetrics with mandatory tenant isolation.

GET/api/metrics/query_rangeRange PromQL queryBearer + Tenant

Proxy a PromQL range query to VictoriaMetrics with mandatory tenant isolation.

GET/api/apps/:id/metrics/queryInstant app-scoped PromQL queryBearer + Tenant

Proxy a PromQL instant query to VictoriaMetrics with mandatory tenant isolation and app route/container scoping.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/apps/:id/metrics/query_rangeRange app-scoped PromQL queryBearer + Tenant

Proxy a PromQL range query to VictoriaMetrics with mandatory tenant isolation and app route/container scoping.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/metrics/labelsList metric namesBearer + Tenant

List metric names matching a prefix, scoped to the tenant.

GET/api/metrics/seriesList label valuesBearer + Tenant

List distinct values for a label on a metric, scoped to the tenant.

Reliability

GET/api/reliability/statusGet public reliability statusBearer + Tenant

Returns scoped public reliability checks for global, server, route, DNS, Dwaar, agent, Docker, and version drift surfaces.

Projects

POST/api/projectsCreate projectBearer + Tenant

Create a project within the current tenant.

GET/api/projectsList projectsBearer + Tenant

List projects for the current tenant.

GET/api/projects/:idGet projectBearer + Tenant

Get a single project by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/projects/:idUpdate projectBearer + Tenant

Update mutable project fields.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/projects/:idDelete projectBearer + Tenant

Delete a project and its associations.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/projects/:projectId/appsGet appBearer + Tenant

List apps that belong to a project.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
POST/api/projects/:projectId/appsCreate appBearer + Tenant

Create an app inside a project.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
POST/api/projects/:projectId/link-appCreate link appBearer + Tenant

Link an existing app to a project.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
POST/api/projects/:projectId/link-serviceCreate link serviceBearer + Tenant

Link an existing service to a project.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
GET/api/projects/:projectId/servicesGet serviceBearer + Tenant

List services attached to a project.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
GET/api/projects/:projectId/services/connectionsGet connectionBearer + Tenant

List service-instance connections within a project (canvas edges).

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
GET/api/projects/:projectId/outputsGet outputBearer + Tenant

List project outputs and generated endpoints.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
POST/api/projects/:projectId/envCreate envBearer + Tenant

Create a project-level environment variable.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
GET/api/projects/:projectId/envGet envBearer + Tenant

List project-level environment variables.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
PATCH/api/projects/:projectId/env/:envVarIdUpdate envBearer + Tenant

Update value, is_secret, or stage_bindings for a project env var.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
envVarIdstringrequiredPath parameter
POST/api/projects/:projectId/env/:envVarId/revealCreate revealBearer + Tenant

Reveal plaintext value of a project env var (emits audit log).

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
envVarIdstringrequiredPath parameter
DELETE/api/projects/:projectId/env/:keyDelete envBearer + Tenant

Delete a project-level environment variable.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
keystringrequiredPath parameter
GET/api/projects/:projectId/backup-storageGet backup storageBearer + Tenant

Get the project's backup storage configuration.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
PUT/api/projects/:projectId/backup-storageUpdate backup storageBearer + Tenant

Set the project's backup storage configuration.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter
POST/api/projects/:projectId/backup-storage/testCreate testBearer + Tenant

Test the custom S3 connection.

Parameters
NameTypeRequiredDescription
projectIdstringrequiredPath parameter

Apps

POST/api/appsCreate appBearer + Tenant

Create an app in the current tenant.

GET/api/appsList appsBearer + Tenant

List apps in the current tenant.

GET/api/apps/:idGet appBearer + Tenant

Get app details and status.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/apps/:idUpdate appBearer + Tenant

Update app configuration.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/apps/:idDelete appBearer + Tenant

Delete an app.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/apps/:id/domainsGet domainBearer + Tenant

List domains assigned to an app.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/apps/:appId/execOpen exec sessionBearer + Tenant

Open an interactive exec session in the app container.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter

Fleet

GET/api/apps/:id/placement-rulesGet placement ruleBearer + Tenant

List placement rules for an app.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/apps/:id/placement-rulesCreate placement ruleBearer + Tenant

Create a placement rule for an app.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/apps/:id/placement-rules/:ruleIdDelete placement ruleBearer + Tenant

Delete a placement rule for an app.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
ruleIdstringrequiredPath parameter
POST/api/servers/:id/cordonCreate cordonBearer + Tenant

Cordon a server — prevent new deployments from targeting it.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/uncordonCreate uncordonBearer + Tenant

Uncordon a server — allow deployments to target it again.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/drainCreate drainBearer + Tenant

Drain a server — cordon it and mark it as draining.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/undrainCreate undrainBearer + Tenant

Undrain a server — clear draining state and allow deployments to target it again.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/statusGet statuBearer + Tenant

Get server operational status including cordon and drain flags.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/server-poolsCreate server poolBearer + Tenant

Create a server pool with label selectors and cost tracking.

GET/api/server-poolsList server poolsBearer + Tenant

List server pools for the current tenant.

DELETE/api/server-pools/:poolIdDelete server poolBearer + Tenant

Delete a server pool.

Parameters
NameTypeRequiredDescription
poolIdstringrequiredPath parameter
POST/api/servers/:id/assign-poolCreate assign poolBearer + Tenant

Assign a server to a pool.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/capacity-forecastGet capacity forecastBearer + Tenant

Get a linear capacity forecast (days-to-exhaustion) for CPU, memory, and disk.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Edge

GET/api/apps/:appId/edge-rulesGet edge ruleBearer + Tenant

Get edge config for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
PATCH/api/apps/:appId/edge-rulesUpdate edge ruleBearer + Tenant

Update edge config for an app (path routing, redirects, IP allowlist, rate limits).

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:id/cache/purgeCreate purgeBearer + Tenant

Purge all Dwaar cache entries for a host (PM-034).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/apps/:id/cache/purge-pathCreate purge pathBearer + Tenant

Purge a single path from Dwaar cache (PM-034).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Rollout

GET/api/apps/:appId/rollout-policyGet rollout policyBearer + Tenant

Get the rollout policy for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:appId/rollout-policyCreate rollout policyBearer + Tenant

Create a rollout policy for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
PUT/api/apps/:appId/rollout-policyUpdate rollout policyBearer + Tenant

Update the rollout policy for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
DELETE/api/apps/:appId/rollout-policyDelete rollout policyBearer + Tenant

Delete the rollout policy for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/deployments/:deploymentId/health-scoreGet health scoreBearer + Tenant

Get the latest health score for a deployment.

Parameters
NameTypeRequiredDescription
deploymentIdstringrequiredPath parameter

Environments

POST/api/apps/:appId/environmentsCreate environmentBearer + Tenant

Create an environment for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/environmentsGet environmentBearer + Tenant

List environments for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
PATCH/api/apps/:appId/environments/:envIdUpdate environmentBearer + Tenant

Update an app environment.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
envIdstringrequiredPath parameter
PUT/api/apps/:appId/environments/:envId/domainUpdate domainBearer + Tenant

Assign a public hostname to an environment.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
envIdstringrequiredPath parameter
DELETE/api/apps/:appId/environments/:envIdDelete environmentBearer + Tenant

Delete an app environment.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
envIdstringrequiredPath parameter
GET/api/environments/graphGet graphBearer + Tenant

Tenant-wide environment DAG: nodes + promotion edges with health overlay and 1h/24h/7d metrics.

Deployments

GET/api/deploymentsList deploymentsBearer + Tenant

List deployments visible to the current tenant.

GET/api/deployments/:idGet deploymentBearer + Tenant

Get a single deployment by ID, deriving app ownership from the deployment row.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/apps/:appId/deploymentsCreate deploymentBearer + Tenant

Create a deployment for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/deploymentsGet deploymentBearer + Tenant

List deployments for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/deployments/:idGet deploymentBearer + Tenant

Get a deployment by ID.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
idstringrequiredPath parameter
GET/api/apps/:appId/deploy-intentsGet deploy intentBearer + Tenant

List queued deployment intents for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/deploy-intents/:intentIdGet deploy intentBearer + Tenant

Get a queued deployment intent.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
intentIdstringrequiredPath parameter
POST/api/apps/:appId/deploy-intents/:intentId/cancelCancel deploy intentBearer + Tenant

Cancel a queued deployment intent.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
intentIdstringrequiredPath parameter
POST/api/apps/:appId/deploy-intents/:intentId/approveApprove deploy intentBearer + Tenant

Approve a queued deployment intent.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
intentIdstringrequiredPath parameter
POST/api/apps/:appId/deploy-intents/:intentId/rejectReject deploy intentBearer + Tenant

Reject a queued deployment intent.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
intentIdstringrequiredPath parameter
GET/api/apps/:appId/deploy-readinessGet deploy readinesBearer + Tenant

Get app deployment readiness checks.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/deploy-settingsGet deploy settingBearer + Tenant

Get app deployment defaults and auto-deploy policy.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
PATCH/api/apps/:appId/deploy-settingsUpdate deploy settingBearer + Tenant

Update app deployment defaults and auto-deploy policy.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:appId/rollbackCreate rollbackBearer + Tenant

Rollback an app to a previous deployment.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:appId/restartCreate restartBearer + Tenant

Restart an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:appId/stopCreate stopBearer + Tenant

Stop an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:appId/startCreate startBearer + Tenant

Start an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/deploy-progressGet deploy progresBearer + Tenant

Stream deployment progress over SSE (auto-resolves to latest in-progress deployment).

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/deployments/:deploymentId/progressGet progresBearer + Tenant

Stream progress for a specific deployment over SSE.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
deploymentIdstringrequiredPath parameter
GET/api/apps/:appId/deploy-progress/replayGet replayBearer + Tenant

Replay buffered deploy-progress events from the NATS event log. Use after SSE reconnect to recover missed events. Query params: from_ts (Unix ms, required, max 24h lookback), limit (1–2000, default 500).

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:appId/deployments/:id/stop-previewStop preview deploymentBearer + Tenant

Stop the preview process for a deployment.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
idstringrequiredPath parameter
POST/api/deployments/:id/approveApprove deploymentBearer + Tenant

Approve a deployment that is waiting for review.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/deployments/:id/rejectReject deploymentBearer + Tenant

Reject a deployment that is waiting for review.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/deployments/:id/cancelCancel deploymentBearer + Tenant

Cancel a pending deployment.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/apps/:appId/approval-settingsUpdate approval settingBearer + Tenant

Update approval policy for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
PATCH/api/apps/:appId/resourcesUpdate resourceBearer + Tenant

Update resource limits for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/environments/:envId/deploymentsCreate deploymentBearer + Tenant

Create a deployment for an environment.

Parameters
NameTypeRequiredDescription
envIdstringrequiredPath parameter
GET/api/environments/:envId/deploymentsGet deploymentBearer + Tenant

List deployments for an environment.

Parameters
NameTypeRequiredDescription
envIdstringrequiredPath parameter

Operator

POST/api/apps/:appId/rerouteReroute app trafficBearer + Tenant

Update reverse-proxy route for an app to a different server.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/domains/:domainId/repair-certRepair SSL certificateBearer + Tenant

Trigger SSL re-provisioning for a domain assignment.

Parameters
NameTypeRequiredDescription
domainIdstringrequiredPath parameter
POST/api/domains/:domainId/verify-dnsVerify DNSBearer + Tenant

Run a live DNS resolution check for a domain assignment.

Parameters
NameTypeRequiredDescription
domainIdstringrequiredPath parameter

Approvals

POST/api/apps/:appId/deployments/:deploymentId/approveApprove deploymentBearer + Tenant

Approve a deployment that was gated by an approval policy.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
deploymentIdstringrequiredPath parameter
POST/api/apps/:appId/deployments/:deploymentId/rejectReject deploymentBearer + Tenant

Reject a deployment that was gated by an approval policy. A comment is required.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
deploymentIdstringrequiredPath parameter

Settings

GET/api/settings/preview-domainGet preview domainOwner

Get the configured preview domain.

PATCH/api/settings/preview-domainUpdate preview domainOwner

Update the configured preview domain.

Hooks

POST/api/apps/:appId/hooksCreate hookBearer + Tenant

Create a deploy hook for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/hooksGet hookBearer + Tenant

List deploy hooks for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
DELETE/api/apps/:appId/hooks/:hookIdDelete hookBearer + Tenant

Delete a deploy hook.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
hookIdstringrequiredPath parameter

Backups

POST/api/apps/:appId/backupsCreate backupBearer + Tenant

Create a volume snapshot backup for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/backupsGet backupBearer + Tenant

List backups for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:appId/backups/:backupId/restoreCreate restoreBearer + Tenant

Create a restore operation from a backup.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
backupIdstringrequiredPath parameter
GET/api/apps/:appId/restoresGet restoreBearer + Tenant

List restore operations for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
PATCH/api/apps/:appId/backups/:backupId/statusUpdate statuBearer + Tenant

Update backup status (agent callback).

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
backupIdstringrequiredPath parameter
POST/api/services/:serviceId/backupsCreate backupBearer + Tenant

Create a service backup.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/backupsGet backupBearer + Tenant

List service backups.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/services/:serviceId/backups/:backupId/restoreCreate restoreBearer + Tenant

Restore a service backup.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
backupIdstringrequiredPath parameter
GET/api/services/:serviceId/backups/:backupId/downloadGet downloadBearer + Tenant

Generate a pre-signed download URL for a backup.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
backupIdstringrequiredPath parameter
DELETE/api/services/:serviceId/backups/:backupIdDelete backupBearer + Tenant

Delete a backup.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
backupIdstringrequiredPath parameter
GET/api/services/:serviceId/restoresGet restoreBearer + Tenant

List restore operations for a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/backup-configGet backup configBearer + Tenant

Get backup configuration for a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
PUT/api/services/:serviceId/backup-configUpdate backup configBearer + Tenant

Update backup configuration for a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/services/:serviceId/backup-config/test-s3Create test s3Bearer + Tenant

Test S3 connectivity for BYO-S3 backup storage.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter

Previews

GET/api/apps/:appId/previewsGet previewBearer + Tenant

List preview environments for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:appId/previews/:id/closeCreate closeBearer + Tenant

Close a preview environment.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
idstringrequiredPath parameter
POST/api/secret-templatesCreate secret templateBearer + Tenant

Create a reusable secret variable template.

GET/api/secret-templatesList secret templatesBearer + Tenant

List secret templates for the current tenant.

GET/api/secret-templates/:idGet secret templateBearer + Tenant

Get a secret template by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/secret-templates/:idDelete secret templateBearer + Tenant

Delete a secret template.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

App Deploy Tokens

GET/api/apps/:appId/api-keysGet api keyjwt+tenant+tokens:read

List the caller's app-scoped deploy tokens.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:appId/api-keysCreate api keyjwt+tenant+tokens:write

Mint a deploy token bound to a single app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
DELETE/api/apps/:appId/api-keys/:keyIdDelete api keyjwt+tenant+tokens:write

Revoke an app-scoped deploy token.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
keyIdstringrequiredPath parameter

Env Vars

POST/api/apps/:appId/envCreate envBearer + Tenant

Create an app-level environment variable.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/envGet envBearer + Tenant

List app-level environment variables.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
PATCH/api/apps/:appId/env/:idUpdate envBearer + Tenant

Update an app-level environment variable.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
idstringrequiredPath parameter
DELETE/api/apps/:appId/env/:idDelete envBearer + Tenant

Delete an app-level environment variable by ID.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
idstringrequiredPath parameter
POST/api/apps/:appId/env/bulkCreate bulkBearer + Tenant

Create multiple environment variables at once.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
POST/api/apps/:appId/env/:id/revealCreate revealBearer + Tenant

Reveal the plaintext value of an env var (audited).

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
idstringrequiredPath parameter
GET/api/apps/:appId/env/:id/auditGet auditjwt+tenant+admin

List recent secret_read audit entries for an env var (admin-only).

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
idstringrequiredPath parameter
GET/api/apps/:appId/env-varsGet env varBearer + Tenant

List app-level env vars for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/environments/:envId/env-varsGet env varBearer + Tenant

Get resolved environment variables for an environment.

Parameters
NameTypeRequiredDescription
envIdstringrequiredPath parameter
PUT/api/environments/:envId/env-varsUpdate env varBearer + Tenant

Upsert environment-level variable overrides.

Parameters
NameTypeRequiredDescription
envIdstringrequiredPath parameter
DELETE/api/environments/:envId/env-vars/:keyDelete env varBearer + Tenant

Delete an environment-level override.

Parameters
NameTypeRequiredDescription
envIdstringrequiredPath parameter
keystringrequiredPath parameter
POST/api/environments/:envId/env-vars/cloneClone env varBearer + Tenant

Clone environment variables from another environment.

Parameters
NameTypeRequiredDescription
envIdstringrequiredPath parameter

Remediation

POST/api/apps/:appId/remediation/policiesCreate remediation policyBearer + Tenant

Create an auto-remediation policy for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/remediation/policiesList remediation policiesBearer + Tenant

List all remediation policies for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/remediation/policies/:policyIdGet remediation policyBearer + Tenant

Get a single remediation policy.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
policyIdstringrequiredPath parameter
PATCH/api/apps/:appId/remediation/policies/:policyIdUpdate remediation policyBearer + Tenant

Partially update a remediation policy.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
policyIdstringrequiredPath parameter
DELETE/api/apps/:appId/remediation/policies/:policyIdDelete remediation policyBearer + Tenant

Delete a remediation policy.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
policyIdstringrequiredPath parameter
POST/api/apps/:appId/remediation/policies/:policyId/executeExecute remediation policyBearer + Tenant

Trigger immediate execution of a remediation policy. Add ?dry_run=true for dry-run mode.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
policyIdstringrequiredPath parameter
GET/api/apps/:appId/remediation/executionsList remediation executionsBearer + Tenant

List remediation execution history for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/remediation/executions/:execIdGet remediation executionBearer + Tenant

Get a single remediation execution.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
execIdstringrequiredPath parameter
POST/api/apps/:appId/remediation/executions/:execId/approveApprove remediation executionBearer + Tenant

Approve a pending remediation execution.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
execIdstringrequiredPath parameter
POST/api/apps/:appId/remediation/executions/:execId/rejectReject remediation executionBearer + Tenant

Reject a pending remediation execution.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
execIdstringrequiredPath parameter

Servers

POST/api/servers/install-tokenCreate install tokenBearer + Tenant

Generate a stateless HMAC install token for agent-based server registration.

POST/api/serversCreate serverBearer + Tenant

Register a new server with the control plane.

GET/api/serversList serversBearer + Tenant

List servers visible to the current tenant.

GET/api/servers/:idGet serverBearer + Tenant

Get server details.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/servers/:idUpdate serverBearer + Tenant

Update mutable server metadata.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/servers/:id/labelsUpdate labelBearer + Tenant

Replace mutable server labels used for fleet placement and CI runner opt-in.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/servers/:idDelete serverBearer + Tenant

Delete a server from the tenant.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/reinstallReinstall serverBearer + Tenant

Reinstall the server agent and bootstrap state.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/reconnectReconnect serverBearer + Tenant

Reconnect an existing server to the control plane.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/retry-cleanupRetry cleanup serverBearer + Tenant

Retry cleanup for a server that failed to deprovision.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/force-deleteForce delete serverBearer + Tenant

Force delete a server that cannot be removed cleanly.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/relinkCreate relinkBearer + Tenant

Relink all apps and services from one server to another. Used when a new agent replaces a stale one on the same VPS.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/orphan-cleanupsGet orphan cleanupBearer + Tenant

List pending orphan cleanup records for a server.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/servers/:id/orphan-cleanups/:orphanIdDelete orphan cleanupBearer + Tenant

Dismiss an orphan cleanup item — removes it from the sweeper queue.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
orphanIdstringrequiredPath parameter
GET/api/servers/:id/top-processesGet top processeBearer + Tenant

Get latest top processes snapshot for a server.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/queueGet queueBearer + Tenant

Get command queue depth for a server.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/servers/:id/queueDelete queueBearer + Tenant

Drain all queued commands for a server.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/disconnectDisconnect serverBearer + Tenant

Force-disconnect a stale gRPC CommandStream.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/install-progressGet install progresBearer + Tenant

Get install progress steps for a server.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/eventsGet eventBearer + Tenant

Stream server events over SSE.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/alertsGet alertBearer + Tenant

Get container health alerts for a server.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/uptimeGet uptimeBearer + Tenant

Get uptime stats (24h/7d/30d) for a server.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/networkContainer network inspectBearer + Tenant

Returns the deploy-net Docker network membership table from the target server's agent: every container with its IP, MAC, mapped app (if any), and unexpected_on_deploy_net flag. Polls every 10 s in the UI. Returns 422 when the agent is offline.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/agent/revoke-tokensRevoke agent credentialsBearer + Tenant

Revokes all active agent tokens for the server and force-disconnects the live gRPC stream. Use after a credential leak. After revocation, click Re-enroll to issue fresh credentials.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/aclGet aclBearer + Tenant

List per-server ACL grants. Requires admin access on the server.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/aclCreate aclBearer + Tenant

Grant or update a user's role on the server. Body: {user_id, role}. Requires admin access on the server.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/servers/:id/acl/:userIdDelete aclBearer + Tenant

Revoke a user's ACL grant on the server. Requires admin access on the server.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
userIdstringrequiredPath parameter
POST/api/servers/:id/agent/restartRestart agent on serverBearer + Tenant

Issues COMMAND_TYPE_RESTART_SELF to the agent. Agent acks then exits after 1 s; systemd Restart=always reconnects it within ~5 s. Returns {queued:true, command_id, estimated_reconnect_seconds:5}. 409 if a restart was already issued within 30 s (double-click guard). 422 if the agent is offline.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/agent/reenrollForce re-enroll server agentBearer + Tenant

Mints a one-shot install token and issues COMMAND_TYPE_REENROLL. Online path: agent downloads and runs the idempotent installer, rotates credentials, and restarts — returns {queued:true, online:true, command_id, install_url, expires_at}. Offline path: returns {online:false, paste_command, install_url} so the operator can copy-paste into a recovery shell. 409 if a re-enrollment is already in-flight (5-min guard). EX-004.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/dwaar-configPatch a Dwaarfile block on the target serverBearer + Tenant

Issues COMMAND_TYPE_DWAAR_CONFIG_PATCH to the agent. Body: {block: "analytics"|"log_level"|"rate_limit_default", action: "upsert"|"remove", value: string}. The agent rewrites /etc/dwaar/Dwaarfile (atomic + backup, last 5 retained), restarts dwaar, and the control plane records a config revision. Returns {block, action, prev, new, restart_ok, revision_id}.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/dwaar-config/revisionsList Dwaarfile config revision historyBearer + Tenant

Returns the latest bounded Dwaar config revision records for the server, including rollback links and applied/error status.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/dwaar-config/rollbackRollback a prior Dwaarfile config revisionBearer + Tenant

Looks up an applied Dwaar config revision for the server and issues the inverse COMMAND_TYPE_DWAAR_CONFIG_PATCH. Body: {revision_id}. Returns the agent reply plus {revision_id, rollback_of}.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/servers/:id/dwaar/reconcileForce Dwaar route reconcileBearer + Tenant

Issues a COMMAND_TYPE_DWAAR_RECONCILE to the agent on the target server. The agent fetches the canonical route set from the backend and upserts any route that is missing from Dwaar. Returns {queued:true, command_id} immediately; the agent processes the command asynchronously.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/servers/:id/dwaar/routesLive Dwaar route table with diffBearer + Tenant

Issues COMMAND_TYPE_ROUTE_LIST to the agent, joins the result against the backend DB canonical set, and returns a per-route diff column: in_sync | missing_in_dwaar | unexpected_in_dwaar.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Diagnostics

GET/api/deployments/:deployId/diagnosticsGet diagnosticBearer + Tenant

List root-cause diagnostics for a deployment.

Parameters
NameTypeRequiredDescription
deployIdstringrequiredPath parameter
GET/api/apps/:appId/diagnosticsGet diagnosticBearer + Tenant

List diagnostics for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/servers/:serverId/alertsGet alertBearer + Tenant

List resource alerts for a server.

Parameters
NameTypeRequiredDescription
serverIdstringrequiredPath parameter

Services

POST/api/deploy/compose/parseParse Compose fileBearer + Tenant

Parse a Compose file into deploy metadata.

POST/api/servers/:serverId/servicesCreate serviceBearer + Tenant

Deploy a service to a server.

Parameters
NameTypeRequiredDescription
serverIdstringrequiredPath parameter
GET/api/servers/:serverId/servicesGet serviceBearer + Tenant

List services on a server.

Parameters
NameTypeRequiredDescription
serverIdstringrequiredPath parameter
GET/api/servicesList servicesBearer + Tenant

List all services owned by the authenticated tenant.

GET/api/services/templatesList templatesBearer + Tenant

List available service templates.

GET/api/services/:serviceIdGet serviceBearer + Tenant

Get service details.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/credentialsGet credentialBearer + Tenant

Get service credentials.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/env-varsGet env varBearer + Tenant

List resolved runtime env vars for a service (sensitive values masked).

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/healthGet healthBearer + Tenant

Get service health status.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
DELETE/api/services/:serviceIdDelete serviceBearer + Tenant

Delete a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/services/:serviceId/startCreate startBearer + Tenant

Start a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/services/:serviceId/stopCreate stopBearer + Tenant

Stop a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/services/:serviceId/restartCreate restartBearer + Tenant

Restart a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/services/:serviceId/force-deleteForce delete serviceBearer + Tenant

Force delete a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/logsGet logBearer + Tenant

Stream service logs over SSE.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/deploy-progressGet deploy progresBearer + Tenant

Stream service deployment progress.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/updatesGet updateBearer + Tenant

Check whether a service has updates available.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/services/:serviceId/upgradeUpgrade serviceBearer + Tenant

Upgrade a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/services/:serviceId/refresh-outputsCreate refresh outputBearer + Tenant

Repopulate service_outputs from the current template definition without restarting the container.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
PATCH/api/services/:serviceId/modulesUpdate moduleBearer + Tenant

Update the modules enabled for a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
PATCH/api/services/:serviceId/settingsUpdate settingBearer + Tenant

Update service metadata (project assignment, etc.).

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/assignable-servicesGet assignable serviceBearer + Tenant

List services that can be linked to a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/slow-queriesGet slow querieBearer + Tenant

Get slow query log from pg_stat_statements.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/accessGet accesBearer + Tenant

Get internal, tunnel, and direct access routes for a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
GET/api/services/:serviceId/tcp-proxyGet tcp proxyBearer + Tenant

Get TCP proxy status for a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/services/:serviceId/tcp-proxyCreate tcp proxyBearer + Tenant

Enable external TCP proxy access on a database service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
DELETE/api/services/:serviceId/tcp-proxyDelete tcp proxyBearer + Tenant

Disable external TCP proxy access on a database service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
PATCH/api/services/:serviceId/tcp-proxy/whitelistUpdate whitelistBearer + Tenant

Update IP whitelist for external TCP proxy access on a database service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
POST/api/apps/:appId/services/:serviceId/linkCreate linkBearer + Tenant

Link an app to a service.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
serviceIdstringrequiredPath parameter
GET/api/apps/:appId/servicesGet serviceBearer + Tenant

List services linked to an app (linked-services panel).

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
DELETE/api/apps/:appId/services/:linkIdDelete serviceBearer + Tenant

Remove an app↔service link.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
linkIdstringrequiredPath parameter

Data Plane

GET/api/services/:serviceId/backups/:backupId/verificationsGet verificationBearer + Tenant

List verifications for a backup.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
backupIdstringrequiredPath parameter
POST/api/services/:serviceId/backups/:backupId/verificationsCreate verificationBearer + Tenant

Trigger a backup verification run.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter
backupIdstringrequiredPath parameter
GET/api/services/:serviceId/storage-growthGet storage growthBearer + Tenant

Get storage growth history for a service.

Parameters
NameTypeRequiredDescription
serviceIdstringrequiredPath parameter

Service Health

GET/api/services/:id/golden-signalsService golden signalsBearer + Tenant

Returns latency (p50/p95/p99), error rate, traffic, saturation time series plus optional SLO status. range=1h|6h|24h|7d (default 24h).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/services/:id/related-incidentsIncidents linked to a serviceBearer + Tenant

Returns the last 10 incident-kind ops_graph nodes linked to the service, newest-first.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Domains

POST/api/domains/map/preflightCreate preflightBearer + Tenant

Preflight app, DNS, Cloudflare, agent, and Dwaar readiness before mapping a domain.

POST/api/domains/mapCreate mapBearer + Tenant

Map a hostname to an app through the guided domain workflow.

POST/api/domains/domain-connect/startCreate startBearer + Tenant

Create a short-lived Domain Connect authorization session for an app domain.

POST/api/domains/rootsCreate rootBearer + Tenant

Create a root domain.

GET/api/domains/rootsList rootsBearer + Tenant

List root domains.

GET/api/domains/roots/:idGet rootBearer + Tenant

Get root domain details.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/domains/roots/:idDelete rootBearer + Tenant

Delete a root domain.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/domains/roots/:id/verifyVerify rootBearer + Tenant

Verify a root domain.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/domains/roots/:id/rotate-tokenCreate rotate tokenBearer + Tenant

Rotate the verification token for an unverified root domain.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/domains/assignmentsCreate assignmentBearer + Tenant

Create a domain assignment.

GET/api/domains/assignmentsList assignmentsBearer + Tenant

List domain assignments.

GET/api/domains/assignments/:idGet assignmentBearer + Tenant

Get domain assignment details.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PUT/api/domains/assignments/:idUpdate assignmentBearer + Tenant

Reassign a domain to another target.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/domains/assignments/:idDelete assignmentBearer + Tenant

Delete a domain assignment.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/domains/assignments/:id/retryCreate retryBearer + Tenant

Retry provisioning for a domain assignment.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/domains/assignments/:id/configure-dnsCreate configure dnBearer + Tenant

Configure managed DNS for a mapped domain assignment.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/domains/assignments/:id/lifecycleGet lifecycleBearer + Tenant

Return the unified DNS, Dwaar route, certificate, and live lifecycle for an assignment.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/domains/assignments/:id/dns-checkGet dns checkBearer + Tenant

SD-99: Poll DNS propagation for an assignment.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/domains/assignments/:id/enable-wildcardCreate enable wildcardBearer + Tenant

Enable Dwaar DNS-01 wildcard cert provisioning via Cloudflare (PM-035).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/domains/assignments/:id/wildcardDelete wildcardBearer + Tenant

Revoke wildcard cert provisioning (PM-035).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/domains/preview-zoneCreate preview zoneBearer + Tenant

SD-99: Preview CF zone resolution for a hostname.

PATCH/api/apps/:app_id/domains/:domain_id/analyticsToggle Dwaar analytics for a domainBearer + Tenant

Sets domain_assignments.analytics_enabled and enqueues COMMAND_TYPE_DWAAR_RECONCILE on the app's server so the agent re-renders the snippet (which emits an `analytics on` directive when enabled). Body: {"enabled": bool}.

Parameters
NameTypeRequiredDescription
app_idstringrequiredPath parameter
domain_idstringrequiredPath parameter

Logs

GET/api/apps/:appId/logsStream app logsBearer + Tenant

Stream app logs over SSE.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/logs/runtimeStream runtime logsBearer + Tenant

Stream runtime logs over SSE.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/logs/searchSearch app logsBearer + Tenant

Search persisted logs for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/deployments/:deploymentId/logsGet deployment logsBearer + Tenant

Get logs for a specific deployment.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
deploymentIdstringrequiredPath parameter
GET/api/deployments/:id/logs/persistedGet persisted deployment logsBearer + Tenant

Get persisted logs for a deployment.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/deployments/:id/logsGet deployment logs (polling fallback)Bearer + Tenant

Polling-fallback alias for /deployments/:id/logs/persisted. Same payload.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/apps/:appId/clear-cacheClear app cacheBearer + Tenant

Clear the build cache for an app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/servers/:serverId/containers/:containerName/logsStream container logsBearer + Tenant

Stream logs for a specific container.

Parameters
NameTypeRequiredDescription
serverIdstringrequiredPath parameter
containerNamestringrequiredPath parameter
POST/api/servers/:serverId/containers/:containerName/restartRestart containerBearer + Tenant

Restart a specific container.

Parameters
NameTypeRequiredDescription
serverIdstringrequiredPath parameter
containerNamestringrequiredPath parameter
GET/api/builds/:id/logsStream build logsBearer + Tenant

Stream build logs as SSE EventEnvelope frames.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Notebooks

POST/api/notebooksCreate notebookBearer + Tenant

Create a new notebook for the tenant.

GET/api/notebooksList notebooksBearer + Tenant

List all notebooks for the tenant.

GET/api/notebooks/:idGet notebookBearer + Tenant

Get a notebook by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PUT/api/notebooks/:idUpdate notebookBearer + Tenant

Replace a notebook's full body.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/notebooks/:idDelete notebookBearer + Tenant

Delete a notebook by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/notebooks/runExecute notebook queryBearer + Tenant

Execute a PromQL or LogQL query with server-side variable substitution.

Intelligence

GET/api/apps/:appId/deploy-compareCompare deploymentsBearer + Tenant

Compare per-route traffic metrics between two deployments and get a rollback suggestion.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/apps/:appId/deployments/:deployId/changesGet deployment diffBearer + Tenant

Get commit SHAs, GitHub compare URL, and env var key changes for a deployment.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
deployIdstringrequiredPath parameter

On-Call

POST/api/oncall/schedulesCreate scheduleBearer + Tenant

Create an on-call rotation schedule.

GET/api/oncall/schedulesList schedulesBearer + Tenant

List on-call schedules for the org.

GET/api/oncall/schedules/:idGet scheduleBearer + Tenant

Get an on-call schedule by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/oncall/schedules/:idUpdate scheduleBearer + Tenant

Update an on-call schedule.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/oncall/schedules/:idDelete scheduleBearer + Tenant

Delete an on-call schedule.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/oncall/schedules/:id/currentGet currentBearer + Tenant

Get the user currently on-call for a schedule.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/oncall/overridesCreate overrideBearer + Tenant

Create an on-call override for a schedule.

DELETE/api/oncall/overrides/:idDelete overrideBearer + Tenant

Delete an on-call override.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/escalation-policiesCreate escalation policieBearer + Tenant

Create an escalation policy.

GET/api/escalation-policiesList escalation policiesBearer + Tenant

List escalation policies for the org.

PATCH/api/escalation-policies/:idUpdate escalation policieBearer + Tenant

Update an escalation policy.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/escalation-policies/:idDelete escalation policieBearer + Tenant

Delete an escalation policy.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Events

GET/api/events/streamUnified event streamBearer + Tenant

Streams structured EventEnvelope JSONL over SSE. Query: service, deployment, container.

GET/api/apps/:appId/traces/searchSearch app trace spansBearer + Tenant

Search persisted span events scoped to a single app. Equivalent to /events/search with app_id from the path and kind=span from the query.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
GET/api/events/searchHistorical event searchBearer + Tenant

Search persisted events (LogsQL-backed via VictoriaLogs). Returns 503 if VICTORIALOGS_URL is not set.

GET/api/apps/:appId/traces/:trace_idGet app-scoped traceBearer + Tenant

Returns a Jaeger-compatible trace waterfall only when the trace contains envelopes for the requested app.

Parameters
NameTypeRequiredDescription
appIdstringrequiredPath parameter
trace_idstringrequiredPath parameter
GET/api/traces/servicesList trace servicesBearer + Tenant

Returns distinct tenant-scoped services with span data from the ring buffer and VictoriaLogs.

GET/api/tracesList tracesBearer + Tenant

Returns Jaeger-compatible tenant-scoped traces. Query: service, operation, limit.

GET/api/traces/:trace_idGet traceBearer + Tenant

Returns a Jaeger-compatible tenant-scoped trace waterfall. Checks the ring buffer then VictoriaLogs. Returns 404 if nothing matches.

Parameters
NameTypeRequiredDescription
trace_idstringrequiredPath parameter
GET/api/event-incidents/:idGet event incidentBearer + Tenant

Fetch a single clustered incident envelope by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/event-incidents/:id/annotateAnnotate event incidentBearer + Tenant

On-demand GLM AI annotation for a clustered incident. Returns 503 if GLM is not configured. ?force=true re-annotates.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/services/:id/event-incidentsList service event incidentsBearer + Tenant

List recent clustered incidents for a service. Query: limit (default 20).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/events/subscribeSubscribe to deploy eventsBearer + Tenant

Subscribe to deploy events.

DELETE/api/events/subscribeUnsubscribe from deploy eventsBearer + Tenant

Unsubscribe from deploy events.

POST/api/events/reconnectReconnect eventBearer + Tenant

Reconnect to the event stream.

GET/api/events/healthGet healthBearer + Tenant

Check the event gateway health.

Status Pages

POST/api/status-pagesCreate status pageBearer + Tenant

Create a public status page.

GET/api/status-pagesList status pagesBearer + Tenant

List status pages for the org.

GET/api/status-pages/:idGet status pageBearer + Tenant

Get a status page and its components.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/status-pages/:idUpdate status pageBearer + Tenant

Update a status page.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/status-pages/:idDelete status pageBearer + Tenant

Delete a status page.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/status-pages/:id/componentsCreate componentBearer + Tenant

Add a component to a status page.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/status-pages/components/:idUpdate componentBearer + Tenant

Update a status page component.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/status-pages/components/:idDelete componentBearer + Tenant

Remove a component from a status page.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/incidentsCreate incidentBearer + Tenant

Create an incident.

GET/api/incidentsList incidentsBearer + Tenant

List incidents for the org.

GET/api/incidents/:idGet incidentBearer + Tenant

Get an incident with its update history.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/incidents/:id/related-eventsGet related eventBearer + Tenant

List ops_graph ancestors (causes/precedes, depth 3) of the incident node — the operational timeline that led to the incident.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/incidents/:idUpdate incidentBearer + Tenant

Update an incident.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/incidents/:id/updatesCreate updateBearer + Tenant

Post an update to an incident.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/maintenanceCreate maintenanceBearer + Tenant

Create a maintenance window.

GET/api/maintenanceGet maintenanceBearer + Tenant

List maintenance windows for the org.

DELETE/api/maintenance/:idDelete maintenanceBearer + Tenant

Delete a maintenance window.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/status/:slugGet public status pagePublic

Retrieve a status page and its current status without authentication.

Parameters
NameTypeRequiredDescription
slugstringrequiredPath parameter

Builds

GET/api/buildsList build manifestsBearer + Tenant

Tenant-scoped keyset-paginated list of BuildManifests, newest-first. Query params: app_id, before (RFC3339 cursor), limit (<=100).

GET/api/builds/:id/manifestGet build manifestBearer + Tenant

Return the BuildManifest JSON for a build id.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/builds/:a/diff/:bDiff two build manifestsBearer + Tenant

Return a structured framework/deps/base/runtime diff between two builds.

Parameters
NameTypeRequiredDescription
astringrequiredPath parameter
bstringrequiredPath parameter
GET/api/builds/by-release-name/:nameGet build manifest by release nameBearer + Tenant

Return the BuildManifest for a pet-name release (amber-otter-42 …). Tenant-scoped.

Parameters
NameTypeRequiredDescription
namestringrequiredPath parameter
POST/api/builds/by-release-name/:name/rollbackRoll back to release by nameBearer + Tenant

Tag-lookup rollback (no rebuild) to the image pinned by the named release's BuildManifest.

Parameters
NameTypeRequiredDescription
namestringrequiredPath parameter

CI

GET/api/runs/:run_id/artifactsList pipeline run artifactsBearer + Tenant

Returns all non-expired artifacts uploaded by actions/upload-artifact@v4 for a pipeline run. Includes presigned download URLs (1-hour TTL) when CI_ARTIFACT_SIGNING_SECRET is set.

Parameters
NameTypeRequiredDescription
run_idstringrequiredPath parameter
GET/api/artifacts/:id/downloadDownload a pipeline artifactpresigned

Verifies HMAC-SHA256 signature (params: expires, sig) and streams artifact bytes. Directory artifacts are returned as zip archives.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/runs/:run_idGet pipeline run detailBearer + Tenant

Returns full pipeline run detail: run metadata + all jobs with steps. RBAC-scoped to the authenticated tenant.

Parameters
NameTypeRequiredDescription
run_idstringrequiredPath parameter
GET/api/projects/:project_id/runsList pipeline runs for a projectBearer + Tenant

Paginated list of pipeline runs scoped to a project (app_id). Supports cursor, status, branch and actor filters.

Parameters
NameTypeRequiredDescription
project_idstringrequiredPath parameter
GET/api/repos/:repo_id/runsList pipeline runs for an imported repositoryBearer + Tenant

Paginated list of pipeline runs scoped to an imported repository. Supports cursor, status, branch and actor filters.

Parameters
NameTypeRequiredDescription
repo_idstringrequiredPath parameter
POST/api/projects/:project_id/runsQueue a manual pipeline runBearer + Tenant

Parses a supplied workflow YAML document, creates a queued pipeline_run for the project/app, and wakes the scheduler.

Parameters
NameTypeRequiredDescription
project_idstringrequiredPath parameter
POST/api/repos/:repo_id/runsQueue a manual repository pipeline runBearer + Tenant

Parses a supplied workflow YAML document, creates a queued repo-scoped pipeline_run, and wakes the scheduler.

Parameters
NameTypeRequiredDescription
repo_idstringrequiredPath parameter
POST/api/runs/:run_id/cancelCancel a pipeline runBearer + Tenant

Cancels a running or queued pipeline run. Delegates to the CI scheduler.

Parameters
NameTypeRequiredDescription
run_idstringrequiredPath parameter
POST/api/runs/:run_id/rerunRe-run a pipeline runBearer + Tenant

Creates a new pipeline_run from the same head_sha and workflow AST. Status is set to queued; the scheduler picks it up.

Parameters
NameTypeRequiredDescription
run_idstringrequiredPath parameter
POST/api/jobs/:job_id/rerunRe-run a single jobBearer + Tenant

Creates a new pipeline_run with a trimmed workflow AST containing only the target job. Status is queued; scheduler dispatches only that job.

Parameters
NameTypeRequiredDescription
job_idstringrequiredPath parameter
GET/api/steps/:step_id/logsList pipeline step log eventsBearer + Tenant

Returns append-only, sequence-ordered log events for a pipeline step. Supports after and limit query parameters for efficient polling.

Parameters
NameTypeRequiredDescription
step_idstringrequiredPath parameter
GET/api/runs/:run_id/published-artifactsList published artifacts for a pipeline runBearer + Tenant

Returns all pipeline_published_artifact rows (npm, pypi, cargo, docker, github-release) detected for this run.

Parameters
NameTypeRequiredDescription
run_idstringrequiredPath parameter

CI Secrets

POST/api/teams/:team_id/secretsCreate or replace a CI secretjwt+tenant+admin

Stores an encrypted secret for use in CI pipeline runs. Requires team admin role. Values are never returned by any endpoint.

Parameters
NameTypeRequiredDescription
team_idstringrequiredPath parameter
GET/api/teams/:team_id/secretsList CI secret namesBearer + Tenant

Returns secret names only — never values. Any team member may list names.

Parameters
NameTypeRequiredDescription
team_idstringrequiredPath parameter
PATCH/api/teams/:team_id/secrets/:idRotate a CI secret valuejwt+tenant+admin

Updates the encrypted value for an existing secret. Requires team admin role.

Parameters
NameTypeRequiredDescription
team_idstringrequiredPath parameter
idstringrequiredPath parameter
DELETE/api/teams/:team_id/secrets/:idDelete a CI secretjwt+tenant+admin

Removes a secret permanently. Requires team admin role.

Parameters
NameTypeRequiredDescription
team_idstringrequiredPath parameter
idstringrequiredPath parameter

GitHub

GET/api/github/app-install-urlGet the GitHub App installation URLBearer + Tenant

Returns the public URL to install/manage the GitHub App. Accepts an optional ?repo=owner/name hint; when the owner already has an installation owned by this tenant, the resolved installationId is returned alongside the URL.

GET/api/github/installationsList tenant installations with repositoriesBearer + Tenant

Returns this tenant's GitHub App installations paired with every repository accessible to each installation.

GET/api/github/app/installationsList installationsBearer + Tenant

List GitHub App installations.

GET/api/github/app/installations/:installationId/reposGet repoBearer + Tenant

List repositories for a GitHub App installation.

Parameters
NameTypeRequiredDescription
installationIdstringrequiredPath parameter
GET/api/github/app/installations/:installationId/repos/:owner/:repo/branchesGet brancheBearer + Tenant

List branches for a repository via GitHub App installation.

Parameters
NameTypeRequiredDescription
installationIdstringrequiredPath parameter
ownerstringrequiredPath parameter
repostringrequiredPath parameter
GET/api/github/app/installations/:installationId/repos/:owner/:repo/detectGet detectBearer + Tenant

Detect the framework for a repository.

Parameters
NameTypeRequiredDescription
installationIdstringrequiredPath parameter
ownerstringrequiredPath parameter
repostringrequiredPath parameter

Policies

POST/api/policies/accessCreate accesBearer + Tenant

Create an access policy.

GET/api/policies/accessList accessBearer + Tenant

List access policies.

GET/api/policies/access/:idGet accesBearer + Tenant

Get an access policy.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PUT/api/policies/access/:idUpdate accesBearer + Tenant

Update an access policy.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/policies/access/:idDelete accesBearer + Tenant

Delete an access policy.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PUT/api/policies/approval/:environmentUpdate approvalBearer + Tenant

Create or update an approval policy for an environment.

Parameters
NameTypeRequiredDescription
environmentstringrequiredPath parameter
GET/api/policies/approvalGet approvalBearer + Tenant

List approval policies.

GET/api/policies/approval/:environmentGet approvalBearer + Tenant

Get approval policy for an environment.

Parameters
NameTypeRequiredDescription
environmentstringrequiredPath parameter
DELETE/api/policies/approval/:environmentDelete approvalBearer + Tenant

Delete approval policy for an environment.

Parameters
NameTypeRequiredDescription
environmentstringrequiredPath parameter
GET/api/policies/secret-logGet secret logBearer + Tenant

List the secret access audit log.

POST/api/policies/:id/evaluateDry-run evaluate an approval policyBearer + Tenant

Evaluate an approval policy's conditions against a caller-supplied EvalContext. Returns per-condition match/reason so the admin UI can preview gating decisions without triggering a real deploy.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Webhooks

GET/api/user-webhooksList user webhooksBearer + Tenant

List user deploy webhooks.

GET/api/user-webhooks/event-typesList event typesBearer + Tenant

List supported deploy webhook event types.

GET/api/user-webhooks/:idGet user webhookBearer + Tenant

Get a user deploy webhook.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/user-webhooksCreate user webhookjwt+tenant+webhooks:write

Create a user deploy webhook.

PUT/api/user-webhooks/:idUpdate user webhookjwt+tenant+webhooks:write

Update a user deploy webhook (URL / events / paused).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/user-webhooks/:idDelete user webhookjwt+tenant+webhooks:write

Delete a user deploy webhook.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Activity

GET/api/activityList recent tenant activityBearer + Tenant

Returns a paginated, newest-first feed of deploys/builds/incidents/alerts/approvals/user-actions for the authenticated tenant. Supports kind multi-filter, text search, and observed_at keyset pagination via ?before=.

Ops Graph

GET/api/ops-graph/neighborhoodGet an ops graph neighborhoodBearer + Tenant

Returns bounded, tenant-scoped topology nodes around node_id. Supports radius, relations, and limit query params.

AI

POST/api/ai/queryRun an MCP-grounded AI queryBearer + Tenant

Accepts a natural-language q + context; returns the answer plus the registered tool list.

GET/api/ai/personaGet the user's adaptive personaBearer + Tenant

Returns one of beginner/intermediate/expert based on implicit behavioural signals.

POST/api/ai/preview-deployPreview deploy blast radiusBearer + Tenant

Returns touched services, predicted P95 delta, downstream dependents, approvals required, and risk flags.

POST/api/ai/predict-deployPredict deploy impact from historyBearer + Tenant

Scores the proposed build manifest against the app's last 20 builds. Returns a similarity-weighted P95 delta, confidence band, the top similar past deploys with their similarity reasons, and the historical P95 sparkline series.

POST/api/ai/cockpit/queryRun read-only Agent Cockpit queryBearer + Tenant

Accepts app/project/deployment scope plus a question, assembles bounded observability context, and returns a cited read-only answer.

Sentinel

POST/api/sentinel/turnRun a read-only Sentinel SRE turnjwt+tenant+sentinel:use

Streams Sentinel status and final answer over SSE. Context is assembled server-side from tenant-scoped server metadata and metrics. V1 exposes only read-only tools and recommendation actions.

GET/api/tenant/sentinel/configGet Sentinel provider configuration statejwt+tenant+sentinel:read

Returns provider, model, base URL, and whether BYOK is configured. API keys are never returned.

PUT/api/tenant/sentinel/configUpdate Sentinel provider settingsjwt+tenant+sentinel:write

Updates provider, model, and base URL while preserving the encrypted BYOK secret.

POST/api/tenant/sentinel/byokStore Sentinel BYOK provider keyjwt+tenant+sentinel:write

Encrypts and stores the tenant provider API key. Plaintext is accepted once and never returned.

POST/api/tenant/sentinel/testValidate Sentinel provider settingsjwt+tenant+sentinel:write

Validates that Sentinel can resolve a configured provider and that its base URL passes outbound safety policy.

Proxy

GET/api/proxy/routesList Dwaar routes on a serverBearer + Tenant

Fetches the current route table from the Dwaar Admin socket on the target server via the agent. Accepts ?server=<id-or-name>; if the tenant has a single registered server the flag is optional.

GET/api/proxy/certsList TLS certificates Dwaar is managingBearer + Tenant

Returns cert inventory (domains, expiry, issuer) for the target server. Returns 501 when Dwaar on this host does not yet expose /certs.

GET/api/proxy/trafficPer-host traffic snapshotBearer + Tenant

Returns request count, latency percentiles, and status-code histogram for the target host since the agent's last heartbeat flush. Accepts ?host=<fqdn> and ?lookback=<dur>.

Database

GET/api/db/:service_id/sizeManaged Postgres size + top schemas/tablesBearer + Tenant

Returns database size plus the top-10 schemas and tables by total_relation_size.

Parameters
NameTypeRequiredDescription
service_idstringrequiredPath parameter
GET/api/db/:service_id/slow-queriespg_stat_statements top offendersBearer + Tenant

Returns the top queries by total_exec_time (default 20, max 200). When pg_stat_statements is not installed, returns 200 with {available:false,reason:...} rather than 500.

Parameters
NameTypeRequiredDescription
service_idstringrequiredPath parameter
GET/api/db/:service_id/connectionspg_stat_activity summaryBearer + Tenant

State distribution, longest-running active query (keyword only — no parameters), idle-in-transaction count.

Parameters
NameTypeRequiredDescription
service_idstringrequiredPath parameter
GET/api/db/:service_id/replicationpg_stat_replication lagBearer + Tenant

Returns replica rows with lag_seconds derived from reply_time.

Parameters
NameTypeRequiredDescription
service_idstringrequiredPath parameter
POST/api/db/:service_id/psql-sessionInteractive psql session (stub)Bearer + Tenant

Returns 501 — interactive psql proxying is not implemented yet. CLI surfaces the reason verbatim.

Parameters
NameTypeRequiredDescription
service_idstringrequiredPath parameter

Incidents

POST/api/ops-incidentsCreate an operational incidentBearer + Tenant

Manual creation path used by `deploy incidents open`. The unique-open-per-source partial index keeps auto-generated incidents idempotent.

GET/api/ops-incidentsList operational incidentsBearer + Tenant

Tenant-scoped. Filters: ?app=<uuid>&status=<csv>&severity=<csv>&since=<dur>&limit=<n>.

GET/api/ops-incidents/:idGet a single incidentBearer + Tenant

Cross-tenant access returns 404.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/ops-incidents/:id/contextFLAGSHIP agent context bundleBearer + Tenant

Returns ≤128KB bundle: incident row, triggering event, recent logs placeholder, last 5 deployments, env diff (keys only — values are never exposed), adjacent incidents within ±2h. On overflow, the handler trims logs → triggeringEvent → adjacentIncidents and sets truncated:true.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/ops-incidents/:id/acknowledgeAcknowledge an incidentBearer + Tenant

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/ops-incidents/:id/resolveResolve an incidentBearer + Tenant

Body: {"note": "..."} — note is stored in metadata.resolve_note.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/ops-incidents/:id/classificationUpdate incident classificationBearer + Tenant

classification ∈ {agent_can_diagnose, agent_can_fix, human_approval_required, paid_action_needed}.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/incidents/bulk-resolveBulk-resolve incidentsBearer + Tenant

Body: {"incident_ids": [...], "resolution_reason": "..."}. Max 500 IDs per call.

POST/api/incidents/dismiss-all-for-serverDismiss all open incidents for a serverBearer + Tenant

Body: {"server_id": "<uuid>"}. Resolves all open/acknowledged incidents for the server.

AI Operator

POST/api/operator/conversationsCreate operator conversationBearer + Tenant

Start a new AI operator conversation.

GET/api/operator/conversationsList operator conversationsBearer + Tenant

List AI operator conversations for the tenant.

GET/api/operator/conversations/:idGet operator conversationBearer + Tenant

Get a single AI operator conversation with its messages.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/operator/actions/:id/approveApprove proposed actionjwt+tenant+admin

Approve a proposed operator action (admin or owner only).

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/operator/actions/:id/rejectReject proposed actionBearer + Tenant

Reject a proposed operator action.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Operations

GET/api/operationsList operationsBearer + Tenant

Returns a paginated list of operations (service create/delete, deploy, backup, etc.). Supports ?entity_type=<string>, ?entity_id=<uuid>, ?reference_id=<uuid>, ?limit=<int>, ?offset=<int>.

GET/api/operations/:idGet operation detailsBearer + Tenant

Returns a single operation by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/operations/:id/stepsGet operation stepsBearer + Tenant

Returns the step-by-step detail for an operation. Steps may be pruned based on plan retention.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Runbooks

POST/api/runbooksCreate a runbookBearer + Tenant

Attach a human-written playbook to an app OR service instance. Body is free-form markdown; symptomTags are matched by the /runbooks/match lookup at incident time.

GET/api/runbooksList runbooksBearer + Tenant

Returns tenant runbooks sorted by updated_at DESC. Supports ?app=<uuid>, ?tag=<string>, ?q=<free-text> filters.

GET/api/runbooks/matchMatch runbooks by symptomBearer + Tenant

Agent entry point. Given ?app=<uuid> and one or more ?symptom=<tag>, returns up to ?limit=N runbooks ordered by tag-overlap DESC then most-recently-updated. Default limit 5, cap 25.

GET/api/runbooks/:idGet runbookBearer + Tenant

Returns a single runbook. Cross-tenant IDs return 404.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PUT/api/runbooks/:idUpdate runbookBearer + Tenant

Partial update. Only fields present in the JSON body are changed; others are preserved.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
DELETE/api/runbooks/:idDelete runbookBearer + Tenant

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Repositories

GET/api/reposList reposBearer + Tenant

List repositories imported for the current tenant.

POST/api/repos/importCreate importBearer + Tenant

Import a GitHub repository for collaboration without cloning it.

POST/api/repos/:id/syncSync repoBearer + Tenant

Request an API-only repository sync.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/repos/:id/metricsGet metricBearer + Tenant

Return scoped repository source metrics, deploy correlations, and diagnostic empty states.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/repos/:id/insightsGet insightBearer + Tenant

Return scoped repository hotspots, review flow, ownership drift, runtime regression links, and diagnostic empty states.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/repos/:id/ci-integrationsGet ci integrationBearer + Tenant

List optional CI integrations and permission state for an imported repository.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
PATCH/api/repos/:id/ci-integrations/:integration_idUpdate ci integrationBearer + Tenant

Update one optional CI integration mode for an imported repository.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
integration_idstringrequiredPath parameter
GET/api/github-context/repositories/:idGet repositorieBearer + Tenant

Return a permission-aware GitHub context cache view for agents and teams.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/github-context/repositories/:id/refreshCreate refreshBearer + Tenant

Mark GitHub context resource families dirty and request a cache refresh.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/github-context/repositories/:id/agent-runsCreate agent runBearer + Tenant

Record an agent-run trigger decision against normalized GitHub context.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/github-context/repositories/:id/outbound-commandsCreate outbound commandBearer + Tenant

Queue an explicit policy-gated outbound GitHub sync command.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/github-context/repositories/:id/outbound-commands/:command_id/approveApprove outbound commandBearer + Tenant

Approve a pending outbound GitHub command for execution.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
command_idstringrequiredPath parameter
POST/api/github-context/repositories/:id/outbound-commands/:command_id/rejectReject outbound commandBearer + Tenant

Reject a pending outbound GitHub command.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
command_idstringrequiredPath parameter
GET/api/repos/:id/pullsGet pullBearer + Tenant

List provider pull requests for an imported repository through the GitHub App.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/repos/:id/pulls/:numberGet pullBearer + Tenant

Get one provider pull request and review thread for an imported repository through the GitHub App.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
numberstringrequiredPath parameter
GET/api/repos/:id/issuesGet issueBearer + Tenant

List provider issues for an imported repository through the GitHub App.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/repos/:id/issues/:numberGet issueBearer + Tenant

Get one provider issue and comment thread for an imported repository through the GitHub App.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
numberstringrequiredPath parameter
GET/api/repos/:id/releasesGet releaseBearer + Tenant

List provider releases for an imported repository through the GitHub App.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/repos/:id/issuesCreate issueBearer + Tenant

Create a provider issue from Permanu without hosting Git data locally.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
POST/api/repos/:id/pulls/:number/reviewsCreate reviewBearer + Tenant

Submit a provider pull-request review from Permanu without cloning the repository.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
numberstringrequiredPath parameter
GET/api/repos/:id/branchesGet brancheBearer + Tenant

List repository branches via provider passthrough when wired.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/repos/:id/treeGet treeBearer + Tenant

Read a repository tree via provider passthrough when wired.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/repos/:id/fileGet fileBearer + Tenant

Read one repository file via provider passthrough when wired.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/repos/:id/metadataGet metadataBearer + Tenant

Read repository license and language metadata via provider passthrough.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/repos/:idGet repoBearer + Tenant

Get an imported repository by ID.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter

Collaboration

GET/api/collaboration/threadsList threadsBearer + Tenant

List private collaboration threads anchored to source, deploy, incident, or agent context.

POST/api/collaboration/threadsCreate threadBearer + Tenant

Create a private collaboration thread anchored to operational evidence.

POST/api/collaboration/threads/:id/commentsCreate commentBearer + Tenant

Post an internal comment, mentions, decision tags, and evidence links.

Parameters
NameTypeRequiredDescription
idstringrequiredPath parameter
GET/api/collaboration/decisionsList decisionsBearer + Tenant

List decision records anchored to operational evidence.

GET/api/notifications/inboxGet inboxBearer + Tenant

List collaboration inbox items for mentions, replies, assignments, approvals, watched updates, and audit projections.

System

GET/api/versionGet API versionPublic

Returns the current application version. All API responses also include the version in the <code>X-API-Version</code> response header and a unique <code>X-Request-ID</code> header for tracing.

Response
{"version":"1.00"}
GET/healthHealth checkPublic

Returns a simple health status. Used by load balancers and monitoring services to verify the server is running.

Response
{"status":"ok"}
POST/api/billing/webhookStripe webhookStripe

Receives and processes Stripe webhook events. Authenticated via Stripe's webhook signature verification — not accessible with API keys or JWT tokens. Handles checkout completion, subscription updates, cancellations, and invoice events.

Webhook Events

Events that can be subscribed to via webhook. Each delivery includes an X-Webhook-Signature header containing the HMAC-SHA256 hex digest of the JSON payload, computed with your webhook's signing secret.

subscription.activated
Fired when a subscription is activated after a successful checkout. Payload includes tenantId, planId, planName, billingInterval, and amountCents.
subscription.canceled
Fired when a subscription is canceled (by user, admin, or Stripe). Payload includes tenantId, tenantName, and reason (user_initiated, cancel_at_period_end, or subscription_ended).
payment.received
Fired when a recurring subscription payment succeeds (excludes the first payment which triggers subscription.activated). Payload includes tenantId, amountCents, currency, and planName.
payment.failed
Fired when a subscription payment fails. The tenant is moved to past_due status. Payload includes tenantId and tenantName.
member.invited
Fired when a team member is invited. Payload includes tenantId, tenantName, email, role, and invitedBy.
member.joined
Fired when a user joins a tenant by accepting an invitation. Payload includes tenantId, tenantName, userId, and role.
member.removed
Fired when a member is removed from a tenant by an admin. Payload includes tenantId, tenantName, userId, and removedBy.
member.role_changed
Fired when a member's role is changed within a tenant. Payload includes tenantId, tenantName, userId, oldRole, and newRole.
ownership.transferred
Fired when tenant ownership is transferred to another member. Payload includes tenantId, tenantName, fromUserId, and toUserId.
user.registered
Fired when a new user registers. Payload includes userId, email, and displayName.
user.verified
Fired when a user verifies their email address. Payload includes userId and email.
user.deactivated
Fired when an admin deactivates a user account. Payload includes userId.
credits.purchased
Fired when a credit bundle is purchased. Payload includes tenantId, bundleId, bundleName, credits, and amountCents.
plan.changed
Fired when a tenant's plan changes (upgrade, downgrade, or subscription end). Payload includes tenantId, planId, and planName.
tenant.created
Fired when a new tenant is created during registration. Payload includes tenantId, tenantName, tenantSlug, and userId.
tenant.deactivated
Fired when an admin deactivates a tenant. Payload includes tenantId and tenantName.
user.deleted
Fired when an admin deletes a user account. Payload includes userId and email.
tenant.deleted
Fired when a tenant is deleted (e.g. sole owner deleted). Payload includes tenantId, tenantName, and reason.
api_key.created
Fired when a new API key is created. Payload includes keyId, name, authority, and createdBy.
api_key.revoked
Fired when an API key is revoked/deleted. Payload includes keyId and revokedBy.