API
Référence API Chaque endpoint, paramètre et corps de requête, généré depuis l’API elle-même.
Toutes les routes des deux API, générées depuis le code qui les sert. Deux documents : l’API DockBoard , le panneau que vous installez, et l’API de licence , qui émet et valide les clés.
Les endpoints portant un scope comme project:apps:deploy sont accessibles avec une clé API . Les autres sont réservés aux sessions : ils exigent un navigateur connecté, et une clé y est refusée quels que soient ses scopes.
Ce document est généré et versionné, puis reconstruit quand l’API change — il n’est pas récupéré depuis un serveur en ligne. Une référence exigeant une API joignable serait vide précisément quand vous cherchez pourquoi la vôtre ne l’est pas. L’URL de base est votre propre installation ; il n’existe pas d’API hébergée partagée.
Les formes de réponse ne sont pas documentées ici. Les endpoints du panneau déclarent ce qu’ils acceptent, pas ce qu’ils renvoient : publier des schémas de réponse inventés serait pire que de n’en publier aucun — vous coderiez contre une forme que personne n’a vérifiée. Appelez un endpoint une fois sur votre installation et lisez la réponse ; c’est elle qui fait foi.
Les chemins sont affichés avec le préfixe /api qu’ils portent en production. Tout est en JSON à l’aller comme au retour ; voir authentification pour les en-têtes et erreurs pour les codes de statut.
DockBoard API DockBoard Licensing API
v0.1.0 · 470 ENDPOINTS · 62 ACCESSIBLES AVEC UNE CLÉ API
ADMIN POST /api/admin/agents/update Dispatch UPDATE_AGENT task to one or all online remote agents GET /api/admin/audit-logs Recent audit log entries GET /api/admin/audit-logs/actions Distinct action names present in the trail GET /api/admin/capacity Reserved vs capacity per server (fleet placement view) GET /api/admin/config Public snapshot of runtime config (secrets masked) PATCH /api/admin/config Update runtime config (SMTP, URLs, retention, etc.) POST /api/admin/config/test-smtp Send a test email using current SMTP config GET /api/admin/health Platform health counters (what is broken right now) GET /api/admin/license Get current license status (token + online validation) POST /api/admin/license Set / update the Pro license key POST /api/admin/license/remove Remove the current license key (reverts to free tier) POST /api/admin/license/revalidate Force an immediate online re-validation (no key change) GET /api/admin/overview Platform overview (stats + recent signups) GET /api/admin/permissions/catalog Platform permission catalog + presets (for the sub-admin editor) GET /api/admin/permissions/me My effective platform permissions GET /api/admin/projects List ALL projects across the platform (admin) POST /api/admin/reaper/reap Delete every orphan flagged by /reaper/scan; ?pruneBuildCache=true also frees the BuildKit cache, ?truncateLogs=true also truncates oversized container logs GET /api/admin/reaper/scan Dry-run: list orphan docker artefacts (containers / images / volumes / networks / dangling) GET /api/admin/roles List reusable admin roles (SUPERADMIN only) POST /api/admin/roles Create an admin role (SUPERADMIN only) DELETE /api/admin/roles/{roleId} Delete an admin role (SUPERADMIN only) PATCH /api/admin/roles/{roleId} Update an admin role (SUPERADMIN only) GET /api/admin/settings List all system settings PATCH /api/admin/settings/{key} Update a system setting GET /api/admin/teams List every team on the instance DELETE /api/admin/teams/{id} Delete any team — detaches it from every project GET /api/admin/teams/{id} Team detail: members + project attachments PATCH /api/admin/teams/{id} Rename / recolour any team POST /api/admin/teams/{id}/members Add a user to any team by email or id DELETE /api/admin/teams/{id}/members/{memberUserId} Remove a user from any team GET /api/admin/users List users POST /api/admin/users Create a user (admin only) DELETE /api/admin/users/{id} Delete a user GET /api/admin/users/{id} Get a single user PATCH /api/admin/users/{id}/admin-permissions Set a sub-admin's scoped permission grid (SUPERADMIN only) PATCH /api/admin/users/{id}/admin-role Assign or clear a user's admin role (SUPERADMIN only) DELETE /api/admin/users/{id}/avatar Remove another user’s photo POST /api/admin/users/{id}/avatar Set another user’s photo (raw octet-stream) PATCH /api/admin/users/{id}/profile Update another user’s directory profile POST /api/admin/users/{id}/reset-password Reset a user password PATCH /api/admin/users/{id}/role Change a user role PATCH /api/admin/users/{id}/status Reactivate a user (assist) / suspend / ban (users:manage) AGENT GET /api/agent/binary Download the dockboard-agent binary for a given arch (linux/amd64|arm64) POST /api/agent/heartbeat Send heartbeat GET /api/agent/install.sh Install script for a brand-new server POST /api/agent/poll Poll for tasks (long-poll when waitMs is sent) POST /api/agent/register Agent claims a server slot with an install token GET /api/agent/tasks/{id} Get task status (payload redacted for non-admins) POST /api/agent/tasks/{id}/progress Stream partial deploy logs for a running task (live build view) POST /api/agent/tasks/{id}/result Report task result (requires server id + agent token) GET /api/agent/transfers/{taskId}/download Agent downloads a transfer file (raw octet-stream) POST /api/agent/transfers/{taskId}/upload Agent uploads a transfer file (raw octet-stream body) API-KEYS GET /api/admin/api-keys Every API key on the install, or one user's. Secrets are never returned. DELETE /api/admin/api-keys/{id} Delete anyone's key outright. Revoking is usually what you want. POST /api/admin/api-keys/{id}/revoke Revoke anyone's key, keeping its row for the audit trail GET /api/api-keys Your API keys. Secrets are never returned. POST /api/api-keys Mint a key. The secret is in this response and nowhere else. DELETE /api/api-keys/{id} Delete a key outright. Revoking is usually what you want. POST /api/api-keys/{id}/revoke Stop this key working, keeping its row for the audit trail GET /api/api-keys/scopes Every scope a key may be granted, for the picker APP PROTECTION GET /api/applications/{id}/protection This app's protection settings + live counters PATCH /api/applications/{id}/protection Update this app's protection settings POST /api/applications/{id}/protection/allowlist-me Add the caller's current IP to this app's allow-list DELETE /api/applications/{id}/protection/bans/{ip} Lift one ban on this app APPGUARD POST /api/ddos/app-challenge APPLICATIONS GET /api/applications List applications (scope=mine|all; add page+pageSize for paginated response) project:apps:view POST /api/applications Create application project:apps:create DELETE /api/applications/{id} Delete application project:apps:delete GET /api/applications/{id} Get application project:apps:view PATCH /api/applications/{id} Update application project:apps:create PATCH /api/applications/{id}/auto-deploy Toggle auto-deploy on push PATCH /api/applications/{id}/bind-ip Pin the app to one of its server's IPs (publish on ip:port instead of 0.0.0.0). null/"" clears it. GET /api/applications/{id}/branches List repo branches via the linked git provider GET /api/applications/{id}/databases List managed databases attached to this app DELETE /api/applications/{id}/databases/{databaseId} Detach a managed database + strip its DB_* env vars, then redeploy POST /api/applications/{id}/databases/{databaseId} Attach a managed database + inject DB_* env vars, then redeploy GET /api/applications/{id}/deployments List deployments of this application (paginated) GET /api/applications/{id}/deployments/{depId} Get one deployment (with live logs) POST /api/applications/{id}/deployments/{depId}/cancel Cancel an in-progress deployment POST /api/applications/{id}/duplicate Duplicate application (config copy: source, env, limits, cron — no domains/ports; copyData snapshots volumes too) GET /api/applications/{id}/env Read application env vars project:apps:env PATCH /api/applications/{id}/env Update application env vars project:apps:env GET /api/applications/{id}/env-sets List env sets for an application POST /api/applications/{id}/env-sets Create a new env set DELETE /api/applications/{id}/env-sets/{setId} Delete an env set (cannot delete the active set) GET /api/applications/{id}/env-sets/{setId} Get env set with decrypted vars PATCH /api/applications/{id}/env-sets/{setId} Update env set name or vars POST /api/applications/{id}/env-sets/{setId}/activate Activate an env set (used at next deploy) POST /api/applications/{id}/exec Execute command in container GET /api/applications/{id}/files/compose Read docker-compose.yml of the app PATCH /api/applications/{id}/files/compose Update docker-compose.yml of the app GET /api/applications/{id}/files/dockerfile Read Dockerfile of the app PATCH /api/applications/{id}/files/dockerfile Update Dockerfile of the app POST /api/applications/{id}/host-ports Add a direct IP:port access point for this app DELETE /api/applications/{id}/host-ports/{portId} Remove a direct IP:port access point GET /api/applications/{id}/logs Get application logs project:apps:logs GET /api/applications/{id}/logs/stream Stream application logs via SSE (?sseToken= for EventSource, Bearer for curl) POST /api/applications/{id}/move-server Move this app to another server (transferVolumes=true ships docker volumes, local→remote only) PATCH /api/applications/{id}/outbound-ip Pin the app's egress source IP to one of its server's IPs (SNAT, remote agent server only). null/"" clears it. POST /api/applications/{id}/path-bindings Bind this app to <domain><pathPrefix> (path-based routing, e.g. /api) POST /api/applications/{id}/port-bindings Bind this app to <domain>:<port> (co-hosted with other apps) GET /api/applications/{id}/ports List exposed ports parsed from compose/Dockerfile PATCH /api/applications/{id}/ports Remap host ports for the compose stack GET /api/applications/{id}/previews List preview environments (one per open pull request) PATCH /api/applications/{id}/previews Enable/disable per-PR preview environments and set the wildcard base domain POST /api/applications/{id}/redeploy Redeploy application (pull + rebuild) project:apps:deploy POST /api/applications/{id}/restart Restart application project:apps:restart POST /api/applications/{id}/rollback Roll back to the commit of an earlier successful deployment project:apps:deploy GET /api/applications/{id}/scale Scale settings + why scaling may be refused POST /api/applications/{id}/start Start application project:apps:restart GET /api/applications/{id}/stats/live Live per-container resource usage (CPU/mem/net/block IO) POST /api/applications/{id}/stop Stop application project:apps:restart POST /api/applications/{id}/transfer-project Transfer this app to a different project (ADMIN on source, DEVELOPER+apps:create on target) PATCH /api/applications/{id}/url-mode Toggle clean URL (Caddy on 443) vs port URL (https://domain:port) GET /api/applications/{id}/webhook Get webhook URL + secret for git auto-deploy POST /api/applications/{id}/webhook/install 1-click: register the push webhook on the provider + enable auto-deploy POST /api/applications/{id}/webhook/rotate Rotate webhook secret GET /api/applications/next-free-port/{projectId} Suggest the next free host port for a project's server DELETE /api/applications/path-bindings/{bindingId} Remove a path binding (detach app from <domain><pathPrefix>) DELETE /api/applications/port-bindings/{bindingId} Remove a port binding (detach app from <domain>:<port>) DELETE /api/applications/previews/{previewId} Destroy a preview environment (deletes its app + domain) AUTH POST /api/auth/2fa/disable Disable 2FA (requires password + current TOTP code) POST /api/auth/2fa/enable Confirm enrollment with a TOTP code and receive backup codes POST /api/auth/2fa/setup Generate a TOTP secret + otpauth URI for enrollment POST /api/auth/change-password Change own password (current → new) POST /api/auth/forgot-password Request a password reset link by email POST /api/auth/login Login (TOTP code required when 2FA is enabled) POST /api/auth/logout Logout (revokes the refresh-token family) GET /api/auth/me Current user GET /api/auth/me/onboarding Whether the current user has completed first-run onboarding POST /api/auth/me/onboarding/complete Mark first-run onboarding as completed for the current user PATCH /api/auth/profile Update the current user’s profile DELETE /api/auth/profile/avatar Remove the current user’s photo POST /api/auth/profile/avatar Upload the current user’s photo (raw octet-stream) POST /api/auth/refresh Refresh tokens (httpOnly cookie preferred, body fallback) POST /api/auth/register Register a new account POST /api/auth/resend-verification Re-send verification email (always returns generic success) POST /api/auth/reset-password Reset password using a one-time token DELETE /api/auth/sessions Log out everywhere else (revoke all sessions except current) GET /api/auth/sessions List the caller’s active/pending sessions DELETE /api/auth/sessions/{id} Revoke a single session (revokes all OTHERS if it is the current one) GET /api/auth/setup-status Whether the first SUPERADMIN still needs to be created POST /api/auth/sse-token Issue a short-lived single-use token for SSE endpoints POST /api/auth/verify-email Verify email with a one-time token and receive a token pair BACKUPS GET /api/backups List backups (scope=mine|all; add page+pageSize for paginated response) project:backups:view POST /api/backups Create backup (scoped to caller projects) project:backups:create DELETE /api/backups/{id} Delete backup project:backups:delete GET /api/backups/{id} Get backup project:backups:view PATCH /api/backups/{id} Edit a backup definition (schedule/target/scope/name) — realized backups are not affected project:backups:create POST /api/backups/{id}/export Download a portable, passphrase-encrypted copy of a realized backup (.dcbak) project:backups:restore GET /api/backups/{id}/manifest Get manifest for a COMPLETED backup (fast-path from DB; falls back to archive extraction) project:backups:view POST /api/backups/{id}/restore Restore backup (must be COMPLETED); optionally scope to specific apps/databases/volumes project:backups:restore POST /api/backups/{id}/run Run a fresh backup now from an existing backup's config (manual on-demand run) project:backups:create POST /api/backups/{id}/verify Non-destructive test-restore: replay each DB dump into a throwaway scratch container to prove the backup is restorable (never touches live data) project:backups:restore GET /api/backups/control-plane List on-disk dumps of the platform database itself GET /api/backups/control-plane/{filename} Download a control-plane dump (encrypted with the backup key) POST /api/backups/control-plane/run Dump the platform database now (also runs daily on its own) POST /api/backups/import Import a backup archive and restore it (raw octet-stream body; OVERWRITES data). Accepts a portable .dcbak (x-backup-passphrase required), or — for disaster recovery onto a rebuilt install — a raw at-rest <id>.tar.gz decryptable with this install's own key. project:backups:create GET /api/backups/pitr Point-in-time recovery status: is WAL archiving on, and is there a base backup to replay onto (both are required — either alone recovers nothing) GET /api/backups/pitr/base List on-disk physical base backups of the platform cluster POST /api/backups/pitr/base/run Take a base backup now (also runs weekly when WAL archiving is on) DELETE /api/backups/projects/{projectId}/storage Remove a project's remote backup storage (project ADMIN) GET /api/backups/projects/{projectId}/storage Read a project's remote backup storage config (no secret) project:backups:view PUT /api/backups/projects/{projectId}/storage Set a project's remote backup storage (project ADMIN) POST /api/backups/projects/{projectId}/storage/test Validate a project's stored S3 credentials by listing the bucket GET /api/backups/servers Servers this caller may actually run a backup on (same gate as create) project:backups:view GET /api/backups/targets Available backup targets + whether S3 storage is configured (optionally for a project) project:backups:view CONTAINER REGISTRIES GET /api/registries List registries (yours, plus a project’s when projectId is given) POST /api/registries Add credentials for an external registry, or provision a self-hosted one DELETE /api/registries/{id} Remove the registry row (any container on the server is left running) PATCH /api/registries/{id} Rename, replace credentials, or rotate a self-hosted password POST /api/registries/{id}/test Verify the stored credentials with a docker login CRON GET /api/cron-jobs List cron jobs (scope=mine|all; all requires projects:view) POST /api/cron-jobs Create a cron job on an application DELETE /api/cron-jobs/{id} Delete a cron job PATCH /api/cron-jobs/{id} Update a cron job POST /api/cron-jobs/{id}/run Run a cron job now (manual trigger) DATABASES GET /api/databases List databases (scope=mine|all; add page+pageSize for paginated response) project:databases:view POST /api/databases Create database project:databases:create DELETE /api/databases/{id} Delete database project:databases:delete GET /api/databases/{id} Get database project:databases:view GET /api/databases/{id}/connection Full connection info (host/port/user/password/url, public + in-network) project:databases:manage GET /api/databases/{id}/export Export (download) a logical dump of the database project:databases:manage POST /api/databases/{id}/import Import (upload + restore) a dump into the database — OVERWRITES its data (raw octet-stream body) project:databases:manage POST /api/databases/{id}/move-server Move standalone database to another server (transferVolumes=true ships docker volumes) PATCH /api/databases/{id}/parent Re-link a database to a project / application PATCH /api/databases/{id}/reassign-app Move database to another app in the same project (or detach) POST /api/databases/{id}/reset-password Reset the database user's password (applies in-container + refreshes linked app) project:databases:manage POST /api/databases/{id}/restart Restart database project:databases:manage POST /api/databases/{id}/start Start database project:databases:manage POST /api/databases/{id}/stop Stop database project:databases:manage PATCH /api/databases/{id}/username Rename the database user (applies in-container + refreshes linked app) project:databases:manage DEPLOYMENTS GET /api/deployments List deployments (scope=mine|all; all requires projects:view) project:deployments:view POST /api/deployments Trigger deployment project:apps:deploy GET /api/deployments/{id} Get deployment project:deployments:view DNS-PROVIDERS GET /api/dns-providers List DNS providers (scope=mine|all; add page+pageSize for a paginated response) POST /api/dns-providers Create and test a DNS provider connection DELETE /api/dns-providers/{id} Remove a DNS provider POST /api/dns-providers/{id}/test Re-test a provider connection GET /api/dns-providers/{id}/zones List zones visible via the provider API POST /api/dns-providers/{id}/zones Attach a zone to this provider DELETE /api/dns-providers/{id}/zones/{zoneId} Detach a zone from this provider DELETE /api/dns-providers/{id}/zones/{zoneId}/records Delete a DNS record from an attached zone (?recordId=) GET /api/dns-providers/{id}/zones/{zoneId}/records List all DNS records of an attached zone POST /api/dns-providers/{id}/zones/{zoneId}/records Create or update a DNS record in an attached zone POST /api/dns-providers/{id}/zones/{zoneId}/sync Sync DNS records for a zone POST /api/dns-providers/powerdns/expose53 Restart PowerDNS with port 53 exposed publicly (platform ADMIN + servers:manage) GET /api/dns-providers/powerdns/status Get PowerDNS container status + port53 flag DOCKER GET /api/docker/servers/{serverId}/containers List containers POST /api/docker/servers/{serverId}/containers/action Container action (start/stop/restart/remove/kill) GET /api/docker/servers/{serverId}/images List images DELETE /api/docker/servers/{serverId}/images/{imageId} Remove an image (refuses platform images) GET /api/docker/servers/{serverId}/networks List networks DELETE /api/docker/servers/{serverId}/networks/{id} Remove a network (refuses system/platform networks) POST /api/docker/servers/{serverId}/prune Prune dangling images / unused networks / build cache GET /api/docker/servers/{serverId}/volumes List volumes DELETE /api/docker/servers/{serverId}/volumes/{name} Remove a volume (refuses platform volumes) DOMAINS GET /api/domains List domains (scope=mine|all; add page+pageSize for paginated response) project:domains:view POST /api/domains Add domain project:domains:manage DELETE /api/domains/{id} Delete domain project:domains:delete GET /api/domains/{id} Get domain project:domains:view PATCH /api/domains/{id} Update domain project:domains:manage GET /api/domains/{id}/health Live DNS health check (A / CNAME / mail flag) project:domains:view GET /api/domains/{id}/records Full DNS records dump + reconciliation project:domains:view POST /api/domains/{id}/sync-dns Push DNS records for this domain to its attached provider project:domains:manage POST /api/domains/{id}/transfer Transfer a domain to another project GET /api/domains/{id}/verification Get the DNS TXT record proving ownership of this domain project:domains:view POST /api/domains/{id}/verify Check the published TXT record and mark the domain verified project:domains:manage EMAIL GET /api/email/aliases List aliases for a domain (add page+pageSize for a paginated response) POST /api/email/aliases Create an alias / forwarder DELETE /api/email/aliases/{id} Delete an alias GET /api/email/dns/{domainId} DNS records hints for email hosting GET /api/email/dns/{domainId}/health Live DNS health check (MX/A/PTR/SPF/DKIM/DMARC) POST /api/email/dns/{domainId}/ptr Set the mail host IP reverse DNS (PTR) via a capable DNS provider GET /api/email/mailboxes List mailboxes (scope=mine|all; add page+pageSize for a paginated response) POST /api/email/mailboxes Create a mailbox DELETE /api/email/mailboxes/{id} Delete a mailbox GET /api/email/mailboxes/{id} Get a mailbox PATCH /api/email/mailboxes/{id} Update a mailbox GET /api/email/overview Cross-domain email overview (scope=mine|all; all requires projects:view) DELETE /api/email/server/{domainId} Remove the mail server (containers + data) GET /api/email/server/{domainId} Status of the mail server for a domain GET /api/email/server/{domainId}/antispam Current antispam config (greylisting/antivirus/threshold/lists) PUT /api/email/server/{domainId}/antispam Update antispam config + re-apply (redeploys the mail server) GET /api/email/server/{domainId}/bans List currently banned IPs (fail2ban) POST /api/email/server/{domainId}/deploy Deploy or redeploy the mail server (Postfix+Dovecot+rspamd) GET /api/email/server/{domainId}/logs Tail Postfix/Dovecot/rspamd/fail2ban logs POST /api/email/server/{domainId}/stop Stop the mail server POST /api/email/server/{domainId}/test Send a test email from a mailbox to any address POST /api/email/server/{domainId}/unban Unban an IP in the mail server fail2ban jails POST /api/email/server/{domainId}/webmail Install a Roundcube webmail (choose subdomain / existing domain / IP:port) EVENTS GET /api/events/stream Live platform change feed (?sseToken= for EventSource, Bearer for curl) FILES GET /api/files/{scope}/{scopeId} List directory contents PATCH /api/files/{scope}/{scopeId}/chmod Change permissions (chmod) of a file/dir PATCH /api/files/{scope}/{scopeId}/chown Change owner (chown) of a file/dir POST /api/files/{scope}/{scopeId}/compress Compress selected files/dirs and download as .zip / .tar.gz GET /api/files/{scope}/{scopeId}/download Download a file DELETE /api/files/{scope}/{scopeId}/entry Delete a file or directory POST /api/files/{scope}/{scopeId}/extract Extract a .zip archive in place GET /api/files/{scope}/{scopeId}/file Read a text file PATCH /api/files/{scope}/{scopeId}/file Write/overwrite a text file POST /api/files/{scope}/{scopeId}/fix-permissions Fix permissions of a directory tree (dirs→775, files→664) POST /api/files/{scope}/{scopeId}/mkdir Create a directory PATCH /api/files/{scope}/{scopeId}/rename Rename / move a file or directory POST /api/files/{scope}/{scopeId}/upload Upload a file (raw octet-stream) GET /api/files/project/{projectId}/usage Storage usage + quota for a project (bytes) GET /api/files/scopes List projects/apps/dbs the user can access (scope=mine|all; all requires projects:view) GIT GET /api/git/providers List git providers GIT PROVIDERS GET /api/git-providers List connected git providers (add page+pageSize for a paginated response) POST /api/git-providers Connect a git provider DELETE /api/git-providers/{id} Disconnect a git provider GET /api/git-providers/{id}/detect Detect framework and config from a repo GET /api/git-providers/{id}/file Fetch raw content of a file from a repo (compose/Dockerfile preview) GET /api/git-providers/{id}/repos List repositories from a git provider GET /api/git-providers/{id}/scan-monorepo Detect deployable sub-projects in a monorepo (for bulk import) GET /api/git-providers/{id}/tree List all file paths in a repo/branch (recursive) GET /api/git-providers/oauth/gitea/callback Gitea/Forgejo OAuth redirect callback (browser-facing, public) POST /api/git-providers/oauth/gitea/start Begin Gitea OAuth → returns the authorize URL to open GET /api/git-providers/oauth/gitea/status Whether a Gitea/Forgejo OAuth app is configured on this install POST /api/git-providers/oauth/github/device/poll Poll GitHub for the access token — call repeatedly until state=authorized POST /api/git-providers/oauth/github/device/start Start GitHub device-flow → returns the user_code to display GET /api/git-providers/oauth/github/status Whether GitHub OAuth is configured on this install POST /api/git-providers/scan-monorepo-url Detect sub-projects in a PUBLIC monorepo by clone URL (no connected provider) HEALTH GET /api/health Liveness probe (no auth, no DB) GET /api/health/ready Readiness probe (no auth) — verifies the DB is reachable INSTANCES GET /api/instances List instances (scope=mine|all; add page+pageSize for a paginated response) POST /api/instances Create a Linux instance (agent servers only) DELETE /api/instances/{id} Delete the instance and purge its volumes GET /api/instances/{id} Get an instance (root password only for instances:manage) DELETE /api/instances/{id}/keys Revoke an SSH public key POST /api/instances/{id}/keys Authorize an SSH public key PATCH /api/instances/{id}/limits Change the RAM/CPU ceiling GET /api/instances/{id}/logs Container logs (sshd output) POST /api/instances/{id}/ports Publish another guest port on the host DELETE /api/instances/{id}/ports/{portId} Unpublish a port POST /api/instances/{id}/reset-access Rotate the root password and re-seed authorized_keys in the live box POST /api/instances/{id}/restart Restart instance POST /api/instances/{id}/start Start instance GET /api/instances/{id}/stats Live CPU/RAM sample for this instance POST /api/instances/{id}/stop Stop instance GET /api/instances/catalogue OS images and isolation tiers available under this license MARKETPLACE GET /api/marketplace List marketplace apps GET /api/marketplace/{slug} Get app details GET /api/marketplace/apps List marketplace apps (alias) GET /api/marketplace/docker-hub Search Docker Hub images (server-side proxy) GET /api/marketplace/docker-hub/tags Fetch tags for a Docker Hub image POST /api/marketplace/install Install app POST /api/marketplace/install-custom Deploy any Docker image (no template required) MONITORING GET /api/monitoring/alert-rules List alert rules scoped to accessible servers POST /api/monitoring/alert-rules Create alert rule (admin only) DELETE /api/monitoring/alert-rules/{id} Delete alert rule (admin only) PATCH /api/monitoring/alert-rules/{id} Update alert rule (admin only) GET /api/monitoring/applications/{appId}/metrics Per-container resource history for an app (project access required) GET /api/monitoring/containers/overview Latest resource usage per container across accessible servers GET /api/monitoring/servers/{serverId}/metrics Get server metrics (must have project access on this server) NOTIFICATIONS DELETE /api/notifications Delete all my notifications GET /api/notifications List my notifications (newest first) DELETE /api/notifications/{id} Delete one of my notifications POST /api/notifications/{id}/read Mark one of my notifications as read POST /api/notifications/read-all Mark all my notifications as read GET /api/notifications/unread-count Count my unread notifications PROJECT ENVIRONMENTS GET /api/projects/{id}/environments List environments for a project POST /api/projects/{id}/environments Create an environment in a project DELETE /api/projects/{id}/environments/{envId} Delete an environment (must be empty) PATCH /api/projects/{id}/environments/{envId} Update an environment POST /api/projects/{id}/environments/{envId}/promote-to/{dstEnvId} Promote apps from one environment to another PROJECT SHARED ENV GET /api/projects/{id}/shared-env List shared env vars for a project PUT /api/projects/{id}/shared-env Set shared env vars (project-wide or per environment) DELETE /api/projects/{id}/shared-env/{rowId} Delete a shared env scope GET /api/projects/{id}/shared-env/stale Apps whose running env no longer matches the saved one PROJECT-TRANSFER POST /api/projects/{id}/export Export a project to an encrypted .dockboardproj (OWNER only) POST /api/projects/transfer/apply Apply a parsed import — recreate the project on this install GET /api/projects/transfer/download/{token} Stream a prepared .dockboardproj once, then delete it POST /api/projects/transfer/parse Upload a .dockboardproj (raw octet-stream) + passphrase → review PROJECTS GET /api/projects List projects (scope=mine|all; add page+pageSize for paginated response) platform:projects:view POST /api/projects Create a new project platform:projects:manage DELETE /api/projects/{id} Delete project GET /api/projects/{id} Get project by ID platform:projects:view PATCH /api/projects/{id} Update project platform:projects:manage POST /api/projects/{id}/claim-ownership Platform admin seizes ownership, demoting the former owner (projects:manage) POST /api/projects/{id}/duplicate Duplicate project (apps + standalone DBs + custom roles; no members/domains). copyData snapshots compose apps' volumes. Requires ADMIN on the source. GET /api/projects/{id}/members List project members platform:projects:view POST /api/projects/{id}/members Add (or upsert) a member by email or userId, with a custom role DELETE /api/projects/{id}/members/{memberId} Remove a member PATCH /api/projects/{id}/members/{memberId} Change a member role PATCH /api/projects/{id}/members/{memberId}/custom-role Assign or clear a member's custom role (ADMIN+) GET /api/projects/{id}/members/{memberId}/grants List a member's override grants PUT /api/projects/{id}/members/{memberId}/grants Replace a member's override grants (ADMIN+) DELETE /api/projects/{id}/members/me Leave the project (remove your own membership) GET /api/projects/{id}/mesh Service mesh: internal hostnames + env var suggestions platform:projects:view POST /api/projects/{id}/migrate Migrate all apps + DBs to another server GET /api/projects/{id}/my-permissions My effective fine-grained permissions on this project GET /api/projects/{id}/my-role Get my role on this project PATCH /api/projects/{id}/quota Set per-project storage quota (platform ADMIN + quotas:manage) GET /api/projects/{id}/roles List the project's custom roles platform:projects:view POST /api/projects/{id}/roles Create a custom role (ADMIN+) DELETE /api/projects/{id}/roles/{roleId} Delete a custom role (ADMIN+) PATCH /api/projects/{id}/roles/{roleId} Update a custom role (ADMIN+) GET /api/projects/{id}/roles/{roleId}/grants List a custom role's fine-grained grants PUT /api/projects/{id}/roles/{roleId}/grants Replace a custom role's fine-grained grants (ADMIN+) POST /api/projects/{id}/transfer-ownership Transfer OWNER role to another existing member GET /api/projects/{id}/usage Current resource usage: project totals + per-app breakdown platform:projects:view GET /api/projects/{id}/usage/history Historical project-wide CPU + memory consumption platform:projects:view GET /api/projects/rbac-catalog Permission catalog (resources + actions) for custom roles platform:projects:view PUBLIC SETTINGS GET /api/settings/public Public-facing settings (used by login/signup pages) QUOTAS GET /api/admin/quotas/defaults Global quota defaults PATCH /api/admin/quotas/defaults Set global quota defaults GET /api/admin/quotas/servers/{id} Effective capacity + reserved usage for a server PATCH /api/admin/quotas/servers/{id} Set a server capacity quota (platform quotas:manage) GET /api/admin/quotas/users/{id} Effective quota + usage for a user (platform quotas:view) PATCH /api/admin/quotas/users/{id} Set a user global quota (platform quotas:manage) GET /api/projects/{id}/resource-quota Effective resource quota + reserved usage for a project PATCH /api/projects/{id}/resource-quota Set a project resource quota (quotas:manage) REVERSE PROXY POST /api/reverse-proxy/start Start (or re-create) the Caddy container GET /api/reverse-proxy/status Caddy container status POST /api/reverse-proxy/stop Stop the Caddy container POST /api/reverse-proxy/sync Regenerate the Caddyfile and reload Caddy POST /api/reverse-proxy/sync-ssl Force-sync Domain.sslStatus from Caddy cert store SCHEDULED DEPLOYMENTS GET /api/scheduled-deploys List scheduled deployments (scope=mine|all; all requires projects:view) POST /api/scheduled-deploys Schedule a redeploy — recurring (schedule) or one-shot (runAt) DELETE /api/scheduled-deploys/{id} Delete a scheduled deployment PATCH /api/scheduled-deploys/{id} Update a scheduled deployment POST /api/scheduled-deploys/{id}/run Trigger the redeploy now (does not consume a one-shot) SECURITY (ANTI-DDOS) GET /api/admin/security/bans POST /api/admin/security/bans DELETE /api/admin/security/bans/{ip} GET /api/admin/security/cloudflare POST /api/admin/security/cloudflare/level GET /api/admin/security/overview Anti-DDoS telemetry + config snapshot GET /api/admin/security/rules POST /api/admin/security/rules DELETE /api/admin/security/rules/{id} POST /api/admin/security/rules/allowlist-me Add the caller’s current IP to the allow-list POST /api/admin/security/servers/{id}/harden Apply/clear kernel hardening on a remote agent server POST /api/admin/security/under-attack Toggle Under Attack mode (local L3 + optional Cloudflare) SERVERS GET /api/servers List servers — the whole fleet for a platform viewer, own machines otherwise POST /api/servers Create a new (pending) server and return install command DELETE /api/servers/{id} Delete an empty server (refused while apps/DBs/backups/mail servers remain) GET /api/servers/{id} Get server by ID (platform viewer, or the user who added it) PATCH /api/servers/{id} Update server GET /api/servers/{id}/access List the access rules on a server (empty = open to everyone) POST /api/servers/{id}/access Grant a user or a team access to this server DELETE /api/servers/{id}/access/{ruleId} Revoke an access rule (removing the last one re-opens the server) PATCH /api/servers/{id}/access/{ruleId} Change an access rule level (USE / MANAGE) GET /api/servers/{id}/install-command Mint a fresh install command for a not-yet-online server POST /api/servers/{id}/regen-token Force-regenerate the install token POST /api/servers/{id}/reset Reset a server back to PENDING_INSTALL GET /api/servers/local Get the local server (admin — includes credentials) GET /api/servers/local-public Sanitized local server info (any authenticated user). No tokens, no IPs of remote servers. POST /api/servers/local/install-agent Install (or repair) the DockBoard agent on the platform host itself POST /api/servers/local/setup Setup local server with system info GET /api/servers/local/stats Get detailed live server stats GET /api/servers/mine List servers the caller can reach via project membership (sanitized) GET /api/servers/my-allowance How many servers the caller may add themselves, and how many they already added SFTP GET /api/sftp List SFTP accounts for an app or project POST /api/sftp Create a new SFTP account DELETE /api/sftp/{id} Delete an SFTP account PATCH /api/sftp/{id} Update an SFTP account (toggle disable, permission, keys, expiry) POST /api/sftp/{id}/rotate Rotate the password — returns the new plaintext once SSL GET /api/ssl/certificates List certificates (scope=mine|all; all requires projects:view) GET /api/ssl/diagnose/{domainId} Explain why a domain’s certificate is/ isn’t issued (DNS / ports / cert) POST /api/ssl/issue Issue SSL certificate (project member only) GET /api/ssl/logs/{domainId} Recent Caddy/ACME log lines for a domain (the real issuance error) POST /api/ssl/renew/{id} Renew (re-issue) SSL certificate for a domain — :id is the domain id SSO GET /api/sso/{provider}/callback SSO redirect callback (browser-facing, public) POST /api/sso/{provider}/link Start linking an external identity to my account GET /api/sso/{provider}/start Begin an SSO sign-in (redirects to the provider) GET /api/sso/identities The external identities linked to my account DELETE /api/sso/identities/{id} Unlink an external identity GET /api/sso/providers Which SSO providers are configured (public, for the login page) SWARM GET /api/swarm List the Swarm clusters the caller may administer POST /api/swarm Form a cluster (docker swarm init on the chosen manager) DELETE /api/swarm/{id} Dissolve the cluster — every node leaves the Swarm GET /api/swarm/{id} Get one cluster (never returns join tokens) GET /api/swarm/{id}/nodes Live node list read from the manager's own daemon POST /api/swarm/{id}/nodes Enroll a server into the cluster as a worker DELETE /api/swarm/{id}/nodes/{serverId} Remove a worker from the cluster POST /api/swarm/{id}/registry (Re)provision the cluster's image registry and push its CA to every node SYSTEM GET /api/system/updates Current update state (poll-based) POST /api/system/updates/apply Force an update run (bypasses the SHA check) POST /api/system/updates/check Force an immediate poll (instead of waiting for the 60s tick) GET /api/system/updates/log In-memory log of the last update.sh run TEAMS GET /api/projects/{id}/teams Teams attached to this project (requires members:manage) POST /api/projects/{id}/teams Attach a team to this project with a role (requires members:manage) DELETE /api/projects/{id}/teams/{teamId} Detach a team from this project (requires members:manage) GET /api/teams List the teams you own or belong to POST /api/teams Create a team (you become its owner and first member) DELETE /api/teams/{id} Delete a team — detaches it from every project (owner only) GET /api/teams/{id} Team detail: members + project attachments PATCH /api/teams/{id} Rename / recolour a team (owner only) POST /api/teams/{id}/members Add a user to the team by email or id (owner only) DELETE /api/teams/{id}/members/{memberUserId} Remove a user from the team (owner only) USERS GET /api/users List all users (admin only; add page+pageSize for a paginated response) DELETE /api/users/{id} Delete user (admin only — hierarchy enforced) GET /api/users/{id} Get user by ID (admin only) PATCH /api/users/{id} Update user (admin only — ADMIN cannot modify other ADMIN/SUPERADMIN) GET /api/users/{id}/avatar Profile photo bytes (any authenticated user) GET /api/users/me Get current user profile PATCH /api/users/me Update own profile DELETE /api/users/me/discord/channel Disconnect Discord channel webhook POST /api/users/me/discord/connect Start Discord OAuth — mode=channel (webhook) or mode=dm (bot DM) DELETE /api/users/me/discord/dm Disconnect Discord DM (remove Discord user ID) GET /api/users/me/discord/oauth-status Whether Discord OAuth (and bot DM) is configured on this install GET /api/users/me/discord/status Discord connection status for the current user POST /api/users/me/discord/test-dm Send a test DM — returns ok + error detail on failure GET /api/users/me/notification-preferences Get own notification preferences PUT /api/users/me/notification-preferences Replace own notification preferences WEBHOOKS POST /api/webhooks/applications/{id} Git push webhook — auto-redeploy PRÉCÉDENT
Erreurs et limites de débit
SUIVANT
API de licence