Version 0.0.0
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.
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.
{"email":"user@example.com","password":"secureP@ss1","displayName":"Jane Doe","invitationToken":"(optional)"}{"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}]}Authenticates a user with email and password. Returns JWT access and refresh tokens. Account is locked for 15 minutes after 5 consecutive failed attempts.
{"email":"user@example.com","password":"secureP@ss1"}{"accessToken":"eyJ...","refreshToken":"eyJ...","user":{...},"memberships":[...]}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.
{"refreshToken":"eyJ..."}{"accessToken":"eyJ...","refreshToken":"eyJ...","user":{...},"memberships":[...]}Confirms the user's email address using a token sent via email. The token is single-use and expires after 24 hours.
{"token":"verification-token-from-email"}{"message":"Email verified successfully"}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).
{"email":"user@example.com"}{"message":"If the email exists, a verification link has been sent"}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.
{"email":"user@example.com"}{"message":"If the email exists, a password reset link has been sent"}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.
{"token":"reset-token-from-email","newPassword":"newSecureP@ss1"}{"message":"Password reset successfully"}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.
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=...&refresh_token=...</code>
| Name | Type | Required | Description |
|---|---|---|---|
| state | string | required | OAuth state parameter (verified against stored state) |
| code | string | required | OAuth authorization code from Google |
Returns the authenticated user's profile and all tenant memberships. Use this to hydrate the session after login or page refresh.
{"user":{"id":"...","email":"...","displayName":"...","emailVerified":true,"isActive":true,"authMethods":[...],"createdAt":"...","updatedAt":"...","lastLoginAt":"..."},"memberships":[{"tenantId":"...","tenantName":"...","tenantSlug":"...","role":"owner","isRoot":false}]}Revokes the current access token. If a refresh token is provided in the body, it is also revoked.
{"refreshToken":"eyJ... (optional)"}{"message":"Logged out successfully"}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.
{"currentPassword":"oldP@ss (required if password exists)","newPassword":"newSecureP@ss1"}{"message":"Password changed successfully"}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.
{"token":"invitation-token-from-email"}{"message":"Invitation accepted","memberships":[{"tenantId":"...","tenantName":"...","tenantSlug":"...","role":"user","isRoot":false}]}Returns all members of the current tenant with their roles and join dates. Any member of the tenant can call this endpoint.
{"members":[{"userId":"...","email":"user@example.com","displayName":"Jane Doe","role":"owner","joinedAt":"2025-01-15T..."}]}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.
{"email":"newuser@example.com","role":"user"}{"message":"Invitation sent"}Removes a member from the tenant. You cannot remove the owner or yourself. Admins can only remove regular users (not other admins).
| Name | Type | Required | Description |
|---|---|---|---|
| userId | ObjectID | required | The user's ID |
{"message":"Member removed"}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.
| Name | Type | Required | Description |
|---|---|---|---|
| userId | ObjectID | required | The target user's ID |
{"role":"admin"}{"message":"Role updated"}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.
| Name | Type | Required | Description |
|---|---|---|---|
| userId | ObjectID | required | The new owner's user ID |
{"message":"Ownership transferred"}Returns all messages for the authenticated user, sorted by creation date (newest first). Messages include system notifications like invitation alerts.
{"messages":[{"id":"...","userId":"...","type":"invitation","title":"...","body":"...","isRead":false,"createdAt":"..."}]}Returns the number of unread messages for the authenticated user. Use this for notification badges.
{"count":3}Marks a specific message as read. Only the message owner can mark it as read.
| Name | Type | Required | Description |
|---|---|---|---|
| messageId | ObjectID | required | The message ID |
{"message":"Marked as read"}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.
{"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}Returns all active credit bundles available for purchase, sorted by sort order.
{"bundles":[{"id":"...","name":"500 Credits","credits":500,"priceCents":4900,"isActive":true,"sortOrder":1}]}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.
{"planId":"ObjectID (or bundleId)","billingInterval":"year"}{"checkoutUrl":"https://checkout.stripe.com/..."}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.
{"portalUrl":"https://billing.stripe.com/..."}Returns paginated billing transactions for the current tenant, sorted by date (newest first).
| Name | Type | Required | Description |
|---|---|---|---|
| page | int | optional | Page number (default: 1) |
| perPage | int | optional | Items per page, 1-100 (default: 20) |
{"transactions":[{"id":"...","tenantId":"...","description":"Pro Plan (Annual)","type":"subscription","amountCents":29900,"currency":"usd","invoiceNumber":"INV-0001","createdAt":"..."}],
"total":15,"page":1,"perPage":20}Returns the full transaction record and tenant name for rendering an invoice view.
| Name | Type | Required | Description |
|---|---|---|---|
| id | ObjectID | required | Transaction ID |
{"transaction":{...},"tenant":{"name":"Acme Corp"}}Generates and returns a PDF invoice for the specified transaction. The response Content-Type is <code>application/pdf</code>.
| Name | Type | Required | Description |
|---|---|---|---|
| id | ObjectID | required | Transaction ID |
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.
{"message":"Subscription will cancel at end of billing period","currentPeriodEnd":"2026-02-15T..."}Returns the Stripe publishable key for initializing Stripe.js on the frontend. Returns an empty string if Stripe is not configured.
{"publishableKey":"pk_live_..."}Returns the current version and copyright information.
{"version":"1.00","copyright":"..."}Returns high-level system metrics including total user count, tenant count, and overall health status with any active issues.
{"users":142,"tenants":38,"health":{"healthy":true,"issues":[]}}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.
| Name | Type | Required | Description |
|---|---|---|---|
| page | int | optional | Page number (default: 1) |
| perPage | int | optional | Items per page, 1-100 (default: 50) |
| severity | string | optional | Filter by severity: critical, high, medium, low, debug |
| userId | ObjectID | optional | Filter by user ID |
| search | string | optional | Full-text search in log messages |
{"logs":[{"id":"...","severity":"high","message":"Webhook created: Test → https://...","userId":"...","createdAt":"..."}],"total":256}Returns all known server nodes and their current status. In a multi-machine deployment, each machine registers as a separate node.
{"nodes":[{"id":"...","hostname":"d892610f630968","region":"iad","lastSeen":"...","isHealthy":true}]}Returns time-series performance metrics (CPU, memory, request rate, latency) for a specific node or aggregated across all nodes.
| Name | Type | Required | Description |
|---|---|---|---|
| node | ObjectID | optional | Node ID (omit for aggregate) |
| range | string | optional | Time range: 1h, 6h, 24h, 7d, 30d (default: 24h) |
{"metrics":[{"timestamp":"...","cpu":23.5,"memoryMB":128,"requestsPerMin":45,"avgLatencyMs":12}],"from":"...","to":"..."}Returns the latest health snapshot for each active node. Use this for real-time monitoring dashboards.
{"metrics":[{"nodeId":"...","cpu":15.2,"memoryMB":96,"requestsPerMin":30,"avgLatencyMs":8}]}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.
{"integrations":[{"name":"mongodb","status":"healthy","lastCheck":"...","calls24h":1520},{"name":"stripe","status":"healthy",...},{"name":"resend","status":"not_configured",...}]}Returns all configuration variables as a map keyed by variable name. Includes system variables (read-only name/type) and user-created variables.
{"configs":{"app.name":{"name":"app.name","type":"string","value":"Deploy","description":"Application name","isSystem":true,"options":""},...}}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).
{"name":"feature.max_uploads","description":"Maximum uploads per user","type":"numeric","value":"100","options":""}{"name":"feature.max_uploads","type":"numeric","value":"100","description":"Maximum uploads per user","isSystem":false,"options":""}Returns a single configuration variable by name.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Config variable name |
{"name":"app.name","type":"string","value":"Deploy","description":"Application name","isSystem":true,"options":""}Updates the value (and optionally description/options) of a configuration variable. System variables only allow value changes. Enum variables validate against the options list.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Config variable name |
{"value":"200","description":"Updated description (optional)"}{"name":"feature.max_uploads","type":"numeric","value":"200",...}Deletes a user-created configuration variable. System variables cannot be deleted.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Config variable name |
{"message":"Config variable deleted"}Returns all tenants with member counts and billing information. Includes the plan name, billing waived status, and credit balances.
{"tenants":[{"id":"...","name":"Acme Corp","slug":"acme-corp","isRoot":false,"isActive":true,"memberCount":5,"planName":"Pro","billingWaived":false,"subscriptionCredits":1000,"purchasedCredits":200,"createdAt":"..."}]}Returns full tenant details including all members with roles and join dates.
| Name | Type | Required | Description |
|---|---|---|---|
| tenantId | ObjectID | required | Tenant ID |
{"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":"..."}]}Updates tenant properties. All fields are optional — only provided fields are changed. Can modify name, billing waived status, and credit balances.
| Name | Type | Required | Description |
|---|---|---|---|
| tenantId | ObjectID | required | Tenant ID |
{"name":"New Name (optional)","billingWaived":true,"subscriptionCredits":5000,"purchasedCredits":100}{"message":"Tenant updated"}Sets a tenant's active status. Deactivated tenants cannot access the application. The root tenant cannot be deactivated.
| Name | Type | Required | Description |
|---|---|---|---|
| tenantId | ObjectID | required | Tenant ID |
{"isActive":false}{"message":"Tenant deactivated"}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.
| Name | Type | Required | Description |
|---|---|---|---|
| tenantId | ObjectID | required | Tenant ID |
{"planId":"ObjectID (optional)","billingWaived":true}{"status":"updated"}Cancels a tenant's Stripe subscription. Set <code>immediate</code> to true to cancel now; otherwise cancels at the end of the billing period.
| Name | Type | Required | Description |
|---|---|---|---|
| tenantId | ObjectID | required | Tenant ID |
{"immediate":false}{"message":"Subscription canceled"}Manually updates subscription metadata such as the current period end date. Use this for correcting billing records.
| Name | Type | Required | Description |
|---|---|---|---|
| tenantId | ObjectID | required | Tenant ID |
{"currentPeriodEnd":"2026-03-15T00:00:00Z"}{"message":"Subscription updated"}Returns all users with summary information including tenant count and last login time.
{"users":[{"id":"...","email":"jane@example.com","displayName":"Jane Doe","emailVerified":true,"isActive":true,"tenantCount":2,"createdAt":"...","lastLoginAt":"..."}]}Returns full user profile including authentication methods and all tenant memberships with billing details for each tenant.
| Name | Type | Required | Description |
|---|---|---|---|
| userId | ObjectID | required | User ID |
{"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}]}Updates a user's email or display name. Both fields are optional — only provided fields are changed.
| Name | Type | Required | Description |
|---|---|---|---|
| userId | ObjectID | required | User ID |
{"email":"new@example.com","displayName":"New Name"}{"message":"User updated"}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.
| Name | Type | Required | Description |
|---|---|---|---|
| userId | ObjectID | required | User ID |
{"isActive":false}{"message":"User deactivated"}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.
| Name | Type | Required | Description |
|---|---|---|---|
| userId | ObjectID | required | User ID |
| tenantId | ObjectID | required | Tenant ID |
{"role":"admin"}{"message":"Role updated"}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.
| Name | Type | Required | Description |
|---|---|---|---|
| userId | ObjectID | required | User ID |
{"canDelete":true,"ownerships":[{"tenantId":"...","tenantName":"Acme Corp","isRoot":false,"otherMembers":[{"userId":"...","email":"bob@acme.com","displayName":"Bob","role":"admin","joinedAt":"..."}]}]}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.
| Name | Type | Required | Description |
|---|---|---|---|
| userId | ObjectID | required | User ID |
{"replacementOwners":{"tenantId":"newOwnerUserId"},"confirmTenantDeletions":["tenantId"]}{"message":"User deleted"}Returns all subscription plans with subscriber counts.
{"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":"..."}]}Returns full details for a single plan.
| Name | Type | Required | Description |
|---|---|---|---|
| planId | ObjectID | required | Plan ID |
{"id":"...","name":"Pro","description":"...","monthlyPriceCents":2900,...}Returns all unique entitlement keys currently in use across all plans, with their types and descriptions.
{"keys":[{"key":"feature_x","type":"bool","description":"Enable feature X"}]}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.
{"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"}}}{"id":"...","name":"Enterprise",...}Updates an existing plan. System plans (Free) cannot be renamed. All fields from the create endpoint are accepted.
| Name | Type | Required | Description |
|---|---|---|---|
| planId | ObjectID | required | Plan ID |
{"name":"Enterprise Plus","monthlyPriceCents":14900,...}{"id":"...","name":"Enterprise Plus",...}Deletes a plan. System plans and plans with active subscribers cannot be deleted. Reassign subscribers first.
| Name | Type | Required | Description |
|---|---|---|---|
| planId | ObjectID | required | Plan ID |
{"status":"deleted"}Returns all credit bundles (active and inactive), sorted by sort order.
{"bundles":[{"id":"...","name":"500 Credits","credits":500,"priceCents":4900,"isActive":true,"sortOrder":1,"createdAt":"..."}]}Creates a new credit bundle for purchase. Bundle names must be unique. Credits and price must be positive values.
{"name":"1000 Credits","credits":1000,"priceCents":8900,"isActive":true,"sortOrder":2}{"id":"...","name":"1000 Credits","credits":1000,...}Updates an existing credit bundle.
| Name | Type | Required | Description |
|---|---|---|---|
| bundleId | ObjectID | required | Bundle ID |
{"name":"1000 Credits","credits":1000,"priceCents":7900,...}{"id":"...","name":"1000 Credits",...}Permanently deletes a credit bundle.
| Name | Type | Required | Description |
|---|---|---|---|
| bundleId | ObjectID | required | Bundle ID |
{"status":"deleted"}Returns paginated billing transactions across all tenants. Supports filtering by tenant and text search across description, invoice number, plan name, and bundle name.
| Name | Type | Required | Description |
|---|---|---|---|
| page | int | optional | Page number (default: 1) |
| perPage | int | optional | Items per page, 1-100 (default: 50) |
| tenantId | ObjectID | optional | Filter by tenant |
| search | string | optional | Search description, invoice number, plan/bundle name |
{"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}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).
| Name | Type | Required | Description |
|---|---|---|---|
| range | string | optional | Time range: 7d, 30d, 1y (default: 30d) |
| metric | string | optional | Metric type: revenue, arr, dau, mau (default: revenue) |
{"data":[{"date":"2026-02-01","value":15000},{"date":"2026-02-02","value":18500},...]}Returns all active API keys with metadata. The key hash is never returned — only the preview (last 8 characters) is shown.
{"apiKeys":[{"id":"...","name":"CI/CD Pipeline","keyPreview":"x7k9m2pq","authority":"admin","createdBy":"...","createdAt":"...","lastUsedAt":"...","isActive":true}]}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.
{"name":"CI/CD Pipeline","authority":"admin"}{"apiKey":{"id":"...","name":"CI/CD Pipeline","keyPreview":"x7k9m2pq","authority":"admin",...},"rawKey":"lsk_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmno"}Soft-deletes an API key. The key immediately stops working for authentication. This cannot be undone.
| Name | Type | Required | Description |
|---|---|---|---|
| keyId | ObjectID | required | API key ID |
{"status":"deleted"}Returns all active webhook configurations sorted by creation date (newest first).
{"webhooks":[{"id":"...","name":"Provisioning","description":"...","url":"https://example.com/webhook","secretPreview":"k9m2pqx7","events":["tenant.created"],"isActive":true,"createdBy":"...","createdAt":"..."}]}Returns all webhook event types that can be subscribed to, with descriptions.
{"eventTypes":[{"type":"tenant.created","description":"Fired when a new tenant is created..."}]}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.
{"name":"Provisioning","description":"Provision new tenants","url":"https://example.com/webhook","events":["tenant.created"]}{"webhook":{"id":"...","name":"Provisioning",...},"secret":"whsec_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef"}Returns full webhook configuration including the signing secret and the 20 most recent delivery attempts with their payloads and response details.
| Name | Type | Required | Description |
|---|---|---|---|
| webhookId | ObjectID | required | Webhook ID |
{"webhook":{"id":"...","name":"Provisioning",...},"secret":"whsec_...","deliveries":[{"id":"...","eventType":"tenant.created","payload":"{...}","responseCode":200,"responseBody":"ok","success":true,"durationMs":120,"createdAt":"..."}]}Updates the webhook's name, description, URL, or subscribed events. The signing secret is not affected.
| Name | Type | Required | Description |
|---|---|---|---|
| webhookId | ObjectID | required | Webhook ID |
{"name":"Updated Name","description":"...","url":"https://new-url.com/webhook","events":["tenant.created"]}{"webhook":{"id":"...","name":"Updated Name",...}}Soft-deletes a webhook. It immediately stops receiving event deliveries.
| Name | Type | Required | Description |
|---|---|---|---|
| webhookId | ObjectID | required | Webhook ID |
{"status":"deleted"}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.
| Name | Type | Required | Description |
|---|---|---|---|
| webhookId | ObjectID | required | Webhook ID |
{"delivery":{"id":"...","eventType":"tenant.created","success":true,"responseCode":200,"durationMs":85,"createdAt":"..."}}Generates a new signing secret for the webhook. The old secret immediately stops working. Returns the new secret and preview.
| Name | Type | Required | Description |
|---|---|---|---|
| webhookId | ObjectID | required | Webhook ID |
{"secret":"whsec_NEWsecretABCDEFGHIJKLMNOPQRSTUV","secretPreview":"QRSTUV12"}Validate a short-lived Domain Connect callback state and resume domain lifecycle polling.
Receive GitHub webhooks.
Receive GitLab push and merge request webhooks (X-Gitlab-Token pre-shared secret).
Receive Bitbucket Cloud push and pull-request webhooks (X-Hub-Signature HMAC-SHA256).
Handle the GitHub App setup callback after installation.
Trigger a deploy hook by token.
| Name | Type | Required | Description |
|---|---|---|---|
| token | string | required | Path parameter |
Receive a server heartbeat from the agent.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Serves the shell script that installs the permanu-agent on a server.
| Name | Type | Required | Description |
|---|---|---|---|
| token | string | required | Path parameter |
Called by the install script to register the server and receive agent credentials.
| Name | Type | Required | Description |
|---|---|---|---|
| token | string | required | Path parameter |
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.
Rotates the agent refresh token. Replayed tokens trigger chain revocation.
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.
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.
| Name | Type | Required | Description |
|---|---|---|---|
| server_id | string | required | Path parameter |
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.
| Name | Type | Required | Description |
|---|---|---|---|
| server_id | string | required | Path parameter |
Returns the last ?lines=N (default 200, capped at 2000) lines from the permanu-agent systemd unit via journalctl.
| Name | Type | Required | Description |
|---|---|---|---|
| server_id | string | required | Path parameter |
Issues a COMMAND_TYPE_AGENT_PING round-trip and returns RTT in milliseconds plus computed clock skew.
| Name | Type | Required | Description |
|---|---|---|---|
| server_id | string | required | Path parameter |
Ingest error events using the Sentry envelope wire protocol. Authenticates via DSN public key.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
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.
List container lifecycle events for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
List container lifecycle events for a server.
| Name | Type | Required | Description |
|---|---|---|---|
| serverId | string | required | Path parameter |
Create a notification channel.
List notification channels.
Get a notification channel by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update a notification channel.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a notification channel.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Send a test notification through a channel.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create an uptime monitor.
List uptime monitors.
Get an uptime monitor by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update an uptime monitor.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete an uptime monitor.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List recent checks for an uptime monitor.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get uptime percentage for a monitor.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create a custom monitoring dashboard.
List dashboards for the org.
Get a dashboard by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update a dashboard.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a dashboard.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Clone a dashboard.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Issue a signed share link for a dashboard (HMAC-SHA256, TTL-based).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Revoke the public share token for a dashboard.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Revoke all HMAC share links for a dashboard by bumping the revocation serial. Returns { revoked: true, serial: N }.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List embed origins allowlisted for this dashboard.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Add an https origin to the dashboard embed allowlist.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Remove an origin from the dashboard embed allowlist. Pass origin as ?origin= query param.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Retrieve a dashboard by its HMAC-signed share token. Returns 401 if token is invalid or expired.
| Name | Type | Required | Description |
|---|---|---|---|
| token | string | required | Path parameter |
Retrieve a dashboard by its public share token.
| Name | Type | Required | Description |
|---|---|---|---|
| token | string | required | Path parameter |
Run a PromQL instant query for a shared dashboard. Metric names must match the dashboard's panel allowlist.
| Name | Type | Required | Description |
|---|---|---|---|
| token | string | required | Path parameter |
Run a PromQL range query for a shared dashboard. Metric names must match the dashboard's panel allowlist.
| Name | Type | Required | Description |
|---|---|---|---|
| token | string | required | Path parameter |
Create a metric-based alert rule.
List alert rules for the org.
Get an alert rule by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update an alert rule.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete an alert rule.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List alert firing history for the org.
Acknowledge an alert firing.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List predefined alert templates for database services.
Create an alert rule from a predefined template.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Create an alert silence (suppresses notifications for a rule or all rules).
List alert silences for the org.
Delete an alert silence.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Ingest an error event using the Deploy-native JSON format.
List error groups for the org.
Get an error group by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update the status of an error group.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Mark an error group as resolved (PM-020).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Mark an error group as ignored (PM-020).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List recent events for an error group.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create an error DSN.
List error DSNs.
Delete an error DSN.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Upload a source map for stack trace deobfuscation. Rate-limited: 1000/s per token.
List source maps for an app.
Delete a source map.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Filter + paginate VL logs for an app. Params: app_id, time_range, level_filter, regex, limit, cursor.
Pre-canned VL stats aggregations. type=count_by_level|count_over_time|top_recurring_errors.
Two-pass orchestration: query anchor events then return all logs within ±window_seconds.
Pre-canned PromQL panel. name=error_rate|latency_p95|rss_per_container|cpu_per_container|request_rate.
List per-user saved query configurations.
Persist a QueryBuilder configuration as a named bookmark.
One-shot context bundle for the named app/host/incident (AI agent entry point).
Diff two deployments: env keys, config, domains, image.
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.
Ingest analytics events (PostHog-compatible). Accepts single-event or batch bodies. Rate-limited to 1000 events/sec per token.
Get deployment analytics.
Get deployment analytics summary.
Get historical server metrics.
| Name | Type | Required | Description |
|---|---|---|---|
| serverId | string | required | Path parameter |
Get resource cost analytics.
List verified domains owned by the authenticated user. Used by the /measure domain picker dropdown.
List tenant-scoped analytics events. Filters: name, appId, from, to (RFC3339), limit (1..1000, default 100).
Returns the top-20 event names by count over the requested window. Defaults: last 7 days.
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).
Compute a multi-step funnel with strict-next ordering. Body: { steps:[2..10], from, to, step_window_hours }. Limit 30 req/min per 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] }.
Return D1/D7/D30 retention % for users who did ANY event in the window. Body: { from, to, periods:[d1,d7,d30] }.
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.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get app metrics.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Resolve an app UUID or slug to tenant-scoped route and container metric matchers.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Resolve an app UUID or slug to app-scoped metric families, query templates, availability diagnostics, and concrete route/container matchers.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Resolve an app UUID or slug to tenant/domain labels and return route metric headlines, series, freshness, and empty-state reasons.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get server metrics.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Resolve a scope_kind/scope_id/range entity into graph neighbors, deployments, incidents, logs, traces, and diagnostic empty reasons.
Return SLO/error-budget state for a scoped app, service, or repo. Missing configuration is returned as a scoped diagnostic empty state.
Returns per service_instance measurements (connections, ops/sec, heap, ...). range=1h|6h|24h|7d (default 24h).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Mint a new api_key for the authenticated tenant. The key authenticates pushes to POST /api/services/:id/metrics.
List push api_keys for the authenticated tenant.
Revoke a push api_key. The deletion is hard — subsequent ingest requests with the key return 401.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Return the declared MetricExposed entries for the service's template with per-instance overrides merged on top.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Upsert a sparse per-instance override (display/unit/thresholds/...) for a template-declared or custom metric.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| metric_name | string | required | Path parameter |
Remove a per-instance override so the response falls back to the template-declared values.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| metric_name | string | required | Path parameter |
Proxy a PromQL instant query to VictoriaMetrics with mandatory tenant isolation.
Proxy a PromQL range query to VictoriaMetrics with mandatory tenant isolation.
Proxy a PromQL instant query to VictoriaMetrics with mandatory tenant isolation and app route/container scoping.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Proxy a PromQL range query to VictoriaMetrics with mandatory tenant isolation and app route/container scoping.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List metric names matching a prefix, scoped to the tenant.
List distinct values for a label on a metric, scoped to the tenant.
Returns scoped public reliability checks for global, server, route, DNS, Dwaar, agent, Docker, and version drift surfaces.
Create a project within the current tenant.
List projects for the current tenant.
Get a single project by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update mutable project fields.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a project and its associations.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List apps that belong to a project.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
Create an app inside a project.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
Link an existing app to a project.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
Link an existing service to a project.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
List services attached to a project.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
List service-instance connections within a project (canvas edges).
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
List project outputs and generated endpoints.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
Create a project-level environment variable.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
List project-level environment variables.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
Update value, is_secret, or stage_bindings for a project env var.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
| envVarId | string | required | Path parameter |
Reveal plaintext value of a project env var (emits audit log).
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
| envVarId | string | required | Path parameter |
Delete a project-level environment variable.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
| key | string | required | Path parameter |
Get the project's backup storage configuration.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
Set the project's backup storage configuration.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
Test the custom S3 connection.
| Name | Type | Required | Description |
|---|---|---|---|
| projectId | string | required | Path parameter |
Create an app in the current tenant.
List apps in the current tenant.
Get app details and status.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update app configuration.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete an app.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List domains assigned to an app.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Open an interactive exec session in the app container.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
List placement rules for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create a placement rule for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a placement rule for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| ruleId | string | required | Path parameter |
Cordon a server — prevent new deployments from targeting it.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Uncordon a server — allow deployments to target it again.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Drain a server — cordon it and mark it as draining.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Undrain a server — clear draining state and allow deployments to target it again.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get server operational status including cordon and drain flags.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create a server pool with label selectors and cost tracking.
List server pools for the current tenant.
Delete a server pool.
| Name | Type | Required | Description |
|---|---|---|---|
| poolId | string | required | Path parameter |
Assign a server to a pool.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get a linear capacity forecast (days-to-exhaustion) for CPU, memory, and disk.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get edge config for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Update edge config for an app (path routing, redirects, IP allowlist, rate limits).
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Purge all Dwaar cache entries for a host (PM-034).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Purge a single path from Dwaar cache (PM-034).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get the rollout policy for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Create a rollout policy for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Update the rollout policy for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Delete the rollout policy for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Get the latest health score for a deployment.
| Name | Type | Required | Description |
|---|---|---|---|
| deploymentId | string | required | Path parameter |
Create an environment for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
List environments for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Update an app environment.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| envId | string | required | Path parameter |
Assign a public hostname to an environment.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| envId | string | required | Path parameter |
Delete an app environment.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| envId | string | required | Path parameter |
Tenant-wide environment DAG: nodes + promotion edges with health overlay and 1h/24h/7d metrics.
List deployments visible to the current tenant.
Get a single deployment by ID, deriving app ownership from the deployment row.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create a deployment for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
List deployments for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Get a deployment by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| id | string | required | Path parameter |
List queued deployment intents for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Get a queued deployment intent.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| intentId | string | required | Path parameter |
Cancel a queued deployment intent.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| intentId | string | required | Path parameter |
Approve a queued deployment intent.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| intentId | string | required | Path parameter |
Reject a queued deployment intent.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| intentId | string | required | Path parameter |
Get app deployment readiness checks.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Get app deployment defaults and auto-deploy policy.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Update app deployment defaults and auto-deploy policy.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Rollback an app to a previous deployment.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Restart an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Stop an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Start an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Stream deployment progress over SSE (auto-resolves to latest in-progress deployment).
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Stream progress for a specific deployment over SSE.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| deploymentId | string | required | Path parameter |
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).
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Stop the preview process for a deployment.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| id | string | required | Path parameter |
Approve a deployment that is waiting for review.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Reject a deployment that is waiting for review.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Cancel a pending deployment.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update approval policy for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Update resource limits for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Create a deployment for an environment.
| Name | Type | Required | Description |
|---|---|---|---|
| envId | string | required | Path parameter |
List deployments for an environment.
| Name | Type | Required | Description |
|---|---|---|---|
| envId | string | required | Path parameter |
Update reverse-proxy route for an app to a different server.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Trigger SSL re-provisioning for a domain assignment.
| Name | Type | Required | Description |
|---|---|---|---|
| domainId | string | required | Path parameter |
Run a live DNS resolution check for a domain assignment.
| Name | Type | Required | Description |
|---|---|---|---|
| domainId | string | required | Path parameter |
Approve a deployment that was gated by an approval policy.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| deploymentId | string | required | Path parameter |
Reject a deployment that was gated by an approval policy. A comment is required.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| deploymentId | string | required | Path parameter |
Get the configured preview domain.
Update the configured preview domain.
Create a deploy hook for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
List deploy hooks for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Delete a deploy hook.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| hookId | string | required | Path parameter |
Create a volume snapshot backup for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
List backups for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Create a restore operation from a backup.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| backupId | string | required | Path parameter |
List restore operations for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Update backup status (agent callback).
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| backupId | string | required | Path parameter |
Create a service backup.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
List service backups.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Restore a service backup.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
| backupId | string | required | Path parameter |
Generate a pre-signed download URL for a backup.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
| backupId | string | required | Path parameter |
Delete a backup.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
| backupId | string | required | Path parameter |
List restore operations for a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Get backup configuration for a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Update backup configuration for a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Test S3 connectivity for BYO-S3 backup storage.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
List preview environments for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Close a preview environment.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| id | string | required | Path parameter |
Create a reusable secret variable template.
List secret templates for the current tenant.
Get a secret template by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a secret template.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List the caller's app-scoped deploy tokens.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Mint a deploy token bound to a single app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Revoke an app-scoped deploy token.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| keyId | string | required | Path parameter |
Create an app-level environment variable.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
List app-level environment variables.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Update an app-level environment variable.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| id | string | required | Path parameter |
Delete an app-level environment variable by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| id | string | required | Path parameter |
Create multiple environment variables at once.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Reveal the plaintext value of an env var (audited).
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| id | string | required | Path parameter |
List recent secret_read audit entries for an env var (admin-only).
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| id | string | required | Path parameter |
List app-level env vars for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Get resolved environment variables for an environment.
| Name | Type | Required | Description |
|---|---|---|---|
| envId | string | required | Path parameter |
Upsert environment-level variable overrides.
| Name | Type | Required | Description |
|---|---|---|---|
| envId | string | required | Path parameter |
Delete an environment-level override.
| Name | Type | Required | Description |
|---|---|---|---|
| envId | string | required | Path parameter |
| key | string | required | Path parameter |
Clone environment variables from another environment.
| Name | Type | Required | Description |
|---|---|---|---|
| envId | string | required | Path parameter |
Create an auto-remediation policy for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
List all remediation policies for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Get a single remediation policy.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| policyId | string | required | Path parameter |
Partially update a remediation policy.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| policyId | string | required | Path parameter |
Delete a remediation policy.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| policyId | string | required | Path parameter |
Trigger immediate execution of a remediation policy. Add ?dry_run=true for dry-run mode.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| policyId | string | required | Path parameter |
List remediation execution history for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Get a single remediation execution.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| execId | string | required | Path parameter |
Approve a pending remediation execution.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| execId | string | required | Path parameter |
Reject a pending remediation execution.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| execId | string | required | Path parameter |
Generate a stateless HMAC install token for agent-based server registration.
Register a new server with the control plane.
List servers visible to the current tenant.
Get server details.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update mutable server metadata.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Replace mutable server labels used for fleet placement and CI runner opt-in.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a server from the tenant.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Reinstall the server agent and bootstrap state.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Reconnect an existing server to the control plane.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Retry cleanup for a server that failed to deprovision.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Force delete a server that cannot be removed cleanly.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Relink all apps and services from one server to another. Used when a new agent replaces a stale one on the same VPS.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List pending orphan cleanup records for a server.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Dismiss an orphan cleanup item — removes it from the sweeper queue.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| orphanId | string | required | Path parameter |
Get latest top processes snapshot for a server.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get command queue depth for a server.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Drain all queued commands for a server.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Force-disconnect a stale gRPC CommandStream.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get install progress steps for a server.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Stream server events over SSE.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get container health alerts for a server.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get uptime stats (24h/7d/30d) for a server.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List per-server ACL grants. Requires admin access on the server.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Grant or update a user's role on the server. Body: {user_id, role}. Requires admin access on the server.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Revoke a user's ACL grant on the server. Requires admin access on the server.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| userId | string | required | Path parameter |
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.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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}.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Returns the latest bounded Dwaar config revision records for the server, including rollback links and applied/error status.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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}.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List root-cause diagnostics for a deployment.
| Name | Type | Required | Description |
|---|---|---|---|
| deployId | string | required | Path parameter |
List diagnostics for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
List resource alerts for a server.
| Name | Type | Required | Description |
|---|---|---|---|
| serverId | string | required | Path parameter |
Parse a Compose file into deploy metadata.
Deploy a service to a server.
| Name | Type | Required | Description |
|---|---|---|---|
| serverId | string | required | Path parameter |
List services on a server.
| Name | Type | Required | Description |
|---|---|---|---|
| serverId | string | required | Path parameter |
List all services owned by the authenticated tenant.
List available service templates.
Get service details.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Get service credentials.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
List resolved runtime env vars for a service (sensitive values masked).
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Get service health status.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Delete a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Start a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Stop a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Restart a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Force delete a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Stream service logs over SSE.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Stream service deployment progress.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Check whether a service has updates available.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Upgrade a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Repopulate service_outputs from the current template definition without restarting the container.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Update the modules enabled for a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Update service metadata (project assignment, etc.).
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
List services that can be linked to a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Get slow query log from pg_stat_statements.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Get internal, tunnel, and direct access routes for a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Get TCP proxy status for a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Enable external TCP proxy access on a database service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Disable external TCP proxy access on a database service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Update IP whitelist for external TCP proxy access on a database service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Link an app to a service.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| serviceId | string | required | Path parameter |
List services linked to an app (linked-services panel).
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Remove an app↔service link.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| linkId | string | required | Path parameter |
List verifications for a backup.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
| backupId | string | required | Path parameter |
Trigger a backup verification run.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
| backupId | string | required | Path parameter |
Get storage growth history for a service.
| Name | Type | Required | Description |
|---|---|---|---|
| serviceId | string | required | Path parameter |
Returns latency (p50/p95/p99), error rate, traffic, saturation time series plus optional SLO status. range=1h|6h|24h|7d (default 24h).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Returns the last 10 incident-kind ops_graph nodes linked to the service, newest-first.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Preflight app, DNS, Cloudflare, agent, and Dwaar readiness before mapping a domain.
Map a hostname to an app through the guided domain workflow.
Create a short-lived Domain Connect authorization session for an app domain.
Create a root domain.
List root domains.
Get root domain details.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a root domain.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Verify a root domain.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Rotate the verification token for an unverified root domain.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create a domain assignment.
List domain assignments.
Get domain assignment details.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Reassign a domain to another target.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a domain assignment.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Retry provisioning for a domain assignment.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Configure managed DNS for a mapped domain assignment.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Return the unified DNS, Dwaar route, certificate, and live lifecycle for an assignment.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
SD-99: Poll DNS propagation for an assignment.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Enable Dwaar DNS-01 wildcard cert provisioning via Cloudflare (PM-035).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Revoke wildcard cert provisioning (PM-035).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
SD-99: Preview CF zone resolution for a hostname.
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}.
| Name | Type | Required | Description |
|---|---|---|---|
| app_id | string | required | Path parameter |
| domain_id | string | required | Path parameter |
Stream app logs over SSE.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Stream runtime logs over SSE.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Search persisted logs for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Get logs for a specific deployment.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| deploymentId | string | required | Path parameter |
Get persisted logs for a deployment.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Polling-fallback alias for /deployments/:id/logs/persisted. Same payload.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Clear the build cache for an app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Stream logs for a specific container.
| Name | Type | Required | Description |
|---|---|---|---|
| serverId | string | required | Path parameter |
| containerName | string | required | Path parameter |
Restart a specific container.
| Name | Type | Required | Description |
|---|---|---|---|
| serverId | string | required | Path parameter |
| containerName | string | required | Path parameter |
Stream build logs as SSE EventEnvelope frames.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create a new notebook for the tenant.
List all notebooks for the tenant.
Get a notebook by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Replace a notebook's full body.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a notebook by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Execute a PromQL or LogQL query with server-side variable substitution.
Compare per-route traffic metrics between two deployments and get a rollback suggestion.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Get commit SHAs, GitHub compare URL, and env var key changes for a deployment.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| deployId | string | required | Path parameter |
Create an on-call rotation schedule.
List on-call schedules for the org.
Get an on-call schedule by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update an on-call schedule.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete an on-call schedule.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get the user currently on-call for a schedule.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create an on-call override for a schedule.
Delete an on-call override.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create an escalation policy.
List escalation policies for the org.
Update an escalation policy.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete an escalation policy.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Streams structured EventEnvelope JSONL over SSE. Query: service, deployment, container.
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.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
Search persisted events (LogsQL-backed via VictoriaLogs). Returns 503 if VICTORIALOGS_URL is not set.
Returns a Jaeger-compatible trace waterfall only when the trace contains envelopes for the requested app.
| Name | Type | Required | Description |
|---|---|---|---|
| appId | string | required | Path parameter |
| trace_id | string | required | Path parameter |
Returns distinct tenant-scoped services with span data from the ring buffer and VictoriaLogs.
Returns Jaeger-compatible tenant-scoped traces. Query: service, operation, limit.
Returns a Jaeger-compatible tenant-scoped trace waterfall. Checks the ring buffer then VictoriaLogs. Returns 404 if nothing matches.
| Name | Type | Required | Description |
|---|---|---|---|
| trace_id | string | required | Path parameter |
Fetch a single clustered incident envelope by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
On-demand GLM AI annotation for a clustered incident. Returns 503 if GLM is not configured. ?force=true re-annotates.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List recent clustered incidents for a service. Query: limit (default 20).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Subscribe to deploy events.
Unsubscribe from deploy events.
Reconnect to the event stream.
Check the event gateway health.
Create a public status page.
List status pages for the org.
Get a status page and its components.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update a status page.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a status page.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Add a component to a status page.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update a status page component.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Remove a component from a status page.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create an incident.
List incidents for the org.
Get an incident with its update history.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List ops_graph ancestors (causes/precedes, depth 3) of the incident node — the operational timeline that led to the incident.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update an incident.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Post an update to an incident.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create a maintenance window.
List maintenance windows for the org.
Delete a maintenance window.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Retrieve a status page and its current status without authentication.
| Name | Type | Required | Description |
|---|---|---|---|
| slug | string | required | Path parameter |
Tenant-scoped keyset-paginated list of BuildManifests, newest-first. Query params: app_id, before (RFC3339 cursor), limit (<=100).
Return the BuildManifest JSON for a build id.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Return a structured framework/deps/base/runtime diff between two builds.
| Name | Type | Required | Description |
|---|---|---|---|
| a | string | required | Path parameter |
| b | string | required | Path parameter |
Return the BuildManifest for a pet-name release (amber-otter-42 …). Tenant-scoped.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Path parameter |
Tag-lookup rollback (no rebuild) to the image pinned by the named release's BuildManifest.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | Path parameter |
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.
| Name | Type | Required | Description |
|---|---|---|---|
| run_id | string | required | Path parameter |
Verifies HMAC-SHA256 signature (params: expires, sig) and streams artifact bytes. Directory artifacts are returned as zip archives.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Returns full pipeline run detail: run metadata + all jobs with steps. RBAC-scoped to the authenticated tenant.
| Name | Type | Required | Description |
|---|---|---|---|
| run_id | string | required | Path parameter |
Paginated list of pipeline runs scoped to a project (app_id). Supports cursor, status, branch and actor filters.
| Name | Type | Required | Description |
|---|---|---|---|
| project_id | string | required | Path parameter |
Paginated list of pipeline runs scoped to an imported repository. Supports cursor, status, branch and actor filters.
| Name | Type | Required | Description |
|---|---|---|---|
| repo_id | string | required | Path parameter |
Parses a supplied workflow YAML document, creates a queued pipeline_run for the project/app, and wakes the scheduler.
| Name | Type | Required | Description |
|---|---|---|---|
| project_id | string | required | Path parameter |
Parses a supplied workflow YAML document, creates a queued repo-scoped pipeline_run, and wakes the scheduler.
| Name | Type | Required | Description |
|---|---|---|---|
| repo_id | string | required | Path parameter |
Cancels a running or queued pipeline run. Delegates to the CI scheduler.
| Name | Type | Required | Description |
|---|---|---|---|
| run_id | string | required | Path parameter |
Creates a new pipeline_run from the same head_sha and workflow AST. Status is set to queued; the scheduler picks it up.
| Name | Type | Required | Description |
|---|---|---|---|
| run_id | string | required | Path parameter |
Creates a new pipeline_run with a trimmed workflow AST containing only the target job. Status is queued; scheduler dispatches only that job.
| Name | Type | Required | Description |
|---|---|---|---|
| job_id | string | required | Path parameter |
Returns append-only, sequence-ordered log events for a pipeline step. Supports after and limit query parameters for efficient polling.
| Name | Type | Required | Description |
|---|---|---|---|
| step_id | string | required | Path parameter |
Returns all pipeline_published_artifact rows (npm, pypi, cargo, docker, github-release) detected for this run.
| Name | Type | Required | Description |
|---|---|---|---|
| run_id | string | required | Path parameter |
Stores an encrypted secret for use in CI pipeline runs. Requires team admin role. Values are never returned by any endpoint.
| Name | Type | Required | Description |
|---|---|---|---|
| team_id | string | required | Path parameter |
Returns secret names only — never values. Any team member may list names.
| Name | Type | Required | Description |
|---|---|---|---|
| team_id | string | required | Path parameter |
Updates the encrypted value for an existing secret. Requires team admin role.
| Name | Type | Required | Description |
|---|---|---|---|
| team_id | string | required | Path parameter |
| id | string | required | Path parameter |
Removes a secret permanently. Requires team admin role.
| Name | Type | Required | Description |
|---|---|---|---|
| team_id | string | required | Path parameter |
| id | string | required | Path parameter |
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.
Returns this tenant's GitHub App installations paired with every repository accessible to each installation.
List GitHub App installations.
List repositories for a GitHub App installation.
| Name | Type | Required | Description |
|---|---|---|---|
| installationId | string | required | Path parameter |
List branches for a repository via GitHub App installation.
| Name | Type | Required | Description |
|---|---|---|---|
| installationId | string | required | Path parameter |
| owner | string | required | Path parameter |
| repo | string | required | Path parameter |
Detect the framework for a repository.
| Name | Type | Required | Description |
|---|---|---|---|
| installationId | string | required | Path parameter |
| owner | string | required | Path parameter |
| repo | string | required | Path parameter |
Create an access policy.
List access policies.
Get an access policy.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update an access policy.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete an access policy.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create or update an approval policy for an environment.
| Name | Type | Required | Description |
|---|---|---|---|
| environment | string | required | Path parameter |
List approval policies.
Get approval policy for an environment.
| Name | Type | Required | Description |
|---|---|---|---|
| environment | string | required | Path parameter |
Delete approval policy for an environment.
| Name | Type | Required | Description |
|---|---|---|---|
| environment | string | required | Path parameter |
List the secret access audit log.
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.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List user deploy webhooks.
List supported deploy webhook event types.
Get a user deploy webhook.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create a user deploy webhook.
Update a user deploy webhook (URL / events / paused).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Delete a user deploy webhook.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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=.
Returns bounded, tenant-scoped topology nodes around node_id. Supports radius, relations, and limit query params.
Accepts a natural-language q + context; returns the answer plus the registered tool list.
Returns one of beginner/intermediate/expert based on implicit behavioural signals.
Returns touched services, predicted P95 delta, downstream dependents, approvals required, and risk flags.
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.
Accepts app/project/deployment scope plus a question, assembles bounded observability context, and returns a cited read-only answer.
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.
Returns provider, model, base URL, and whether BYOK is configured. API keys are never returned.
Updates provider, model, and base URL while preserving the encrypted BYOK secret.
Encrypts and stores the tenant provider API key. Plaintext is accepted once and never returned.
Validates that Sentinel can resolve a configured provider and that its base URL passes outbound safety policy.
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.
Returns cert inventory (domains, expiry, issuer) for the target server. Returns 501 when Dwaar on this host does not yet expose /certs.
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>.
Returns database size plus the top-10 schemas and tables by total_relation_size.
| Name | Type | Required | Description |
|---|---|---|---|
| service_id | string | required | Path parameter |
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.
| Name | Type | Required | Description |
|---|---|---|---|
| service_id | string | required | Path parameter |
State distribution, longest-running active query (keyword only — no parameters), idle-in-transaction count.
| Name | Type | Required | Description |
|---|---|---|---|
| service_id | string | required | Path parameter |
Returns replica rows with lag_seconds derived from reply_time.
| Name | Type | Required | Description |
|---|---|---|---|
| service_id | string | required | Path parameter |
Returns 501 — interactive psql proxying is not implemented yet. CLI surfaces the reason verbatim.
| Name | Type | Required | Description |
|---|---|---|---|
| service_id | string | required | Path parameter |
Manual creation path used by `deploy incidents open`. The unique-open-per-source partial index keeps auto-generated incidents idempotent.
Tenant-scoped. Filters: ?app=<uuid>&status=<csv>&severity=<csv>&since=<dur>&limit=<n>.
Cross-tenant access returns 404.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Body: {"note": "..."} — note is stored in metadata.resolve_note.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
classification ∈ {agent_can_diagnose, agent_can_fix, human_approval_required, paid_action_needed}.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Body: {"incident_ids": [...], "resolution_reason": "..."}. Max 500 IDs per call.
Body: {"server_id": "<uuid>"}. Resolves all open/acknowledged incidents for the server.
Start a new AI operator conversation.
List AI operator conversations for the tenant.
Get a single AI operator conversation with its messages.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Approve a proposed operator action (admin or owner only).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Reject a proposed operator action.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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>.
Returns a single operation by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Returns the step-by-step detail for an operation. Steps may be pruned based on plan retention.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
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.
Returns tenant runbooks sorted by updated_at DESC. Supports ?app=<uuid>, ?tag=<string>, ?q=<free-text> filters.
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.
Returns a single runbook. Cross-tenant IDs return 404.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Partial update. Only fields present in the JSON body are changed; others are preserved.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List repositories imported for the current tenant.
Import a GitHub repository for collaboration without cloning it.
Request an API-only repository sync.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Return scoped repository source metrics, deploy correlations, and diagnostic empty states.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Return scoped repository hotspots, review flow, ownership drift, runtime regression links, and diagnostic empty states.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List optional CI integrations and permission state for an imported repository.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Update one optional CI integration mode for an imported repository.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| integration_id | string | required | Path parameter |
Return a permission-aware GitHub context cache view for agents and teams.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Mark GitHub context resource families dirty and request a cache refresh.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Record an agent-run trigger decision against normalized GitHub context.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Queue an explicit policy-gated outbound GitHub sync command.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Approve a pending outbound GitHub command for execution.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| command_id | string | required | Path parameter |
Reject a pending outbound GitHub command.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| command_id | string | required | Path parameter |
List provider pull requests for an imported repository through the GitHub App.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get one provider pull request and review thread for an imported repository through the GitHub App.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| number | string | required | Path parameter |
List provider issues for an imported repository through the GitHub App.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get one provider issue and comment thread for an imported repository through the GitHub App.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| number | string | required | Path parameter |
List provider releases for an imported repository through the GitHub App.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Create a provider issue from Permanu without hosting Git data locally.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Submit a provider pull-request review from Permanu without cloning the repository.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
| number | string | required | Path parameter |
List repository branches via provider passthrough when wired.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Read a repository tree via provider passthrough when wired.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Read one repository file via provider passthrough when wired.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Read repository license and language metadata via provider passthrough.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
Get an imported repository by ID.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List private collaboration threads anchored to source, deploy, incident, or agent context.
Create a private collaboration thread anchored to operational evidence.
Post an internal comment, mentions, decision tags, and evidence links.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | Path parameter |
List decision records anchored to operational evidence.
List collaboration inbox items for mentions, replies, assignments, approvals, watched updates, and audit projections.
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.
{"version":"1.00"}Returns a simple health status. Used by load balancers and monitoring services to verify the server is running.
{"status":"ok"}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.
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.