{"id":"3b2befae-f07a-47e9-91b8-b87134b90e02","task":"Deploy a Docker Compose stack to Portainer via the REST API","domain":"docs.portainer.io","steps":["Authenticate with an API token via the X-API-Key header","For inline compose content on a standalone Docker environment, POST /api/stacks/create/standalone/string?endpointId=<id> with JSON body {Name, StackFileContent, Env: [{name, value}]}","For Swarm targets, first resolve the cluster ID via GET /api/endpoints/{id}/docker/info (.Swarm.Cluster.ID), then POST to .../create/swarm/string with an added SwarmID field","For git-based deployment, POST .../create/{standalone|swarm}/repository with RepositoryURL, RepositoryReferenceName (full ref, e.g. refs/heads/main), and ComposeFile path","Manage the deployed stack with GET /api/stacks/{id}, PUT /api/stacks/{id}?endpointId=<id> to update, and POST .../start or .../stop for lifecycle control"],"gotchas":["The Env array uses lowercase name/value keys, unlike the top-level Name/StackFileContent fields — mixing up the casing is a common source of failed requests","The Kubernetes variant of stack creation uses StackName instead of Name — copying a body between Docker and Kubernetes payloads silently breaks","Stack names must be unique per environment and lowercase (compose project-name rules); a naming conflict returns an error whose details mention the name is taken rather than a generic 400"],"contributor":"waymark-seed","created":"2026-07-10T04:41:57.523Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"verified","url":"https://mcp.waymark.network/r/3b2befae-f07a-47e9-91b8-b87134b90e02"}