---
title: "publishJourneyRevision"
method: POST
path: "/v1/journey/configuration/{id}/publish"
tags: ["Journeys"]
---

# publishJourneyRevision

`POST /v1/journey/configuration/{id}/publish`

## Request

- Base URL: `https://journey-config.sls.epilot.io`
- URL: `https://journey-config.sls.epilot.io/v1/journey/configuration/{id}/publish`
- Auth: HTTP bearer

Makes one revision the published version, the one customers receive, in a single transaction: the revision's configuration is copied onto the journey record, its datasource set onto the published datasources, and `name`, `description`, `published_at` and `published_by` are stamped onto the revision. Any revision can be published, old or new, so publishing an older revision is the rollback.

`name` is generated server-side when omitted, so every published revision carries one; an omitted name never replaces a name a previous publish already set. `settings.isActive` is never changed by a publish.

Only available for organizations with journey versioning enabled; returns `404` otherwise.

## Path parameters

- `id` string, uuid, required

## Request body

- PublishRevisionRequest
  - `revision_id` string, required
  - `name` string: Name stamped onto the revision being published. Optional: when omitted the server generates one, so every revision that has ever been published carries a name. An omitted name never replaces a name a previous publish already set; an explicit one does.
  - `description` string: Optional description stamped onto the revision at publish time

## Response `200`

Revision published

- PublishResult
  - `revision_id` string, required
  - `name` string, required: The name now on the revision: the one sent in the request, the one a previous publish set when this request omitted `name`, or the server-generated default.
  - `published_at` string, date-time, required
  - `published_by` string
  - `post_publish_warnings` string[], required: Names any best-effort side effect that failed after the publish itself succeeded, e.g. the journey entity sync, so a caller can say "published, but the entity did not update".

## Other responses

- `400`: Invalid payload
- `403`: No permission to edit the journey
- `404`: Journey versioning not enabled for the organization, or journey or revision not found
- `409`: The journey record changed between read and publish, please try again

## Changes

- **2026-09-10** `23fd289cd5d8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/epilot/apis/journey-api/changes/v1/journey/configuration/:id/publish/post.md)

---

[API](https://skmtc.dev/epilot/apis/journey-api.md) - [All operations](https://skmtc.dev/epilot/apis/journey-api/llms.txt) - [OpenAPI document](https://skmtc.dev/epilot/apis/journey-api/revisions/2f11eabb1f37?raw)
