> For the complete documentation index, see [llms.txt](https://docs.nected.ai/nected-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nected.ai/nected-docs/management-api/workflow/publish-workflow.md).

# Publish Workflow

Publish a workflow so the current draft becomes the active published version. You can optionally provide a `title` and `description` for the version changelog.

The request body is the same regardless of the workflow's graph structure — you only need the current `checksum` and optional version metadata.

You can obtain the latest `checksum` from:

* **Create workflow** response (`data.checksum`), or
* **Update workflow** response (`data.checksum`), or
* **Get workflow by id** (`data.checksum`) — most reliable; always reflects server state.

## Publish workflow

> Publish a workflow — promotes the current draft to an active published version.\
> \
> \*\*Prerequisites:\*\*\
> \- The workflow must have been tested at least once after the last update (\`testedAt\` must be non-null).\
> \- \`checksum\` must match the server's current value. Get it from: Create response, Update response, or \`GET /dev/v1/workflow/{entity-id}\` → \`data.checksum\`.\
> \
> \*\*\`title\`\*\* and \*\*\`description\`\*\* are optional version changelog fields — use them to label releases (e.g. \`v1.0\`, \`Hotfix-2026-05\`).\
> \
> To retrieve a specific published version's graph later, call \`GET /dev/v1/workflow/{entity-id}?version=v1\`.\
> \
> \*\*Canonical response file:\*\* \`examples/publish\_workflow\_200.json\`

```json
{"openapi":"3.0.3","info":{"title":"Nected Workflow API (Dev V1)","version":"1.0"},"tags":[{"name":"Workflow","description":"List, create, read, update, test, and publish workflows."}],"servers":[{"url":"https://api.nected.ai","description":"Production"}],"security":[{"DevAuth":[]}],"components":{"securitySchemes":{"DevAuth":{"type":"apiKey","in":"header","name":"Nected-API-Key","description":"Your Nected API key. Obtain from your workspace settings."}},"schemas":{"PublishEntityRequest":{"type":"object","description":"Request body for the publish endpoint","properties":{"checksum":{"type":"string","description":"Current checksum of the workflow — must match server state"},"title":{"type":"string","description":"Short title for this published version (e.g. `v1.0`)"},"description":{"type":"string","description":"Changelog / description for this version"}}},"Response":{"type":"object","description":"Standard API response wrapper","properties":{"code":{"type":"string"},"data":{"description":"Response payload — shape varies by endpoint"},"message":{"type":"string"},"pageNo":{"type":"integer"},"pageSize":{"type":"integer"},"totalCount":{"type":"integer"},"totalPages":{"type":"integer"},"paginationInfo":{"$ref":"#/components/schemas/PaginationInfo"}}},"PaginationInfo":{"type":"object","description":"Pagination metadata returned on list endpoints","properties":{"perPage":{"type":"integer","description":"Items per page"},"totalPage":{"type":"integer","description":"Total number of pages"},"currentPage":{"type":"integer","description":"Current page number (1-based)"},"totalRecord":{"type":"integer","description":"Total number of records across all pages"}}},"ErrorResponse":{"type":"object","description":"Error response wrapper","properties":{"code":{"type":"string"},"message":{"type":"string","description":"Human-readable error message"},"data":{"nullable":true}}}}},"paths":{"/dev/v1/workflow/{entity-id}/publish":{"post":{"operationId":"publishWorkflow","tags":["Workflow"],"summary":"Publish workflow","description":"Publish a workflow — promotes the current draft to an active published version.\n\n**Prerequisites:**\n- The workflow must have been tested at least once after the last update (`testedAt` must be non-null).\n- `checksum` must match the server's current value. Get it from: Create response, Update response, or `GET /dev/v1/workflow/{entity-id}` → `data.checksum`.\n\n**`title`** and **`description`** are optional version changelog fields — use them to label releases (e.g. `v1.0`, `Hotfix-2026-05`).\n\nTo retrieve a specific published version's graph later, call `GET /dev/v1/workflow/{entity-id}?version=v1`.\n\n**Canonical response file:** `examples/publish_workflow_200.json`","parameters":[{"name":"Nected-Branch","in":"header","required":false,"description":"Branch name (optional)","schema":{"type":"string"}},{"name":"entity-id","in":"path","required":true,"description":"The workflow entity ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishEntityRequest"}}}},"responses":{"200":{"description":"OK — workflow published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Response"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

### Copy-paste JSON example

```json
{
  "checksum": "7f3d2a1b9c8e4f6a0d5b2c7e1a9f3d8c",
  "title": "v1.0",
  "description": "Initial production release."
}
```
