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

# createJourneyRevision

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

## Request

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

Creates a revision: an immutable copy of the complete journey configuration, identified by `revision_id`. Nothing customers receive changes; the revision only becomes the published version when it is published. The payload is complete and is not merged against the journey record or the previous revision. The entity datasource set of the revision is stored separately through the datasources API under the same `revision_id`.

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

## Path parameters

- `id` string, uuid, required

## Request body

- JourneyRevisionRequest: The complete journey configuration a revision is created from, same shape as the `PUT` body. Server-managed attributes of the journey record (`revisions`, `version`, publish metadata) are ignored.
  - `journeyId` string
  - `organizationId` string, required
  - `brandId` string
  - `name` string, required
  - `steps` object[], required
    - `showStepName` boolean, nullable
    - `title` string, nullable
    - `subTitle` string, nullable
    - `showStepSubtitle` boolean, nullable
    - `showStepper` boolean, nullable
    - `showStepperLabels` boolean, nullable
    - `stepperType` 'numbers' | 'progress bar'
    - `hideNextButton` boolean, nullable
    - `guestVisible` boolean, nullable
    - `name` string, required
    - `stepId` string
    - `schema` unknown, required
    - `uischema` unknown, required
    - `maxWidth` 'small' | 'medium' | 'large' | 'extra large'
  - `design` object
    - `logoUrl` string, nullable
    - `theme` object
    - `designTokens` object
  - `rules` object[]
    - `type` 'inject' | 'injectWithKey', required
    - `sourceType` 'journey' | 'step' | 'block', required
    - `source` string, required
    - `target` string, required
  - `logics` object[]
    - `autoGeneratedId` string
    - `conditions` string[], required
    - `actions` string[], required
  - `logicsV4` object
  - `contextSchema` object[]
    - `id` string, uuid: Unique identifier for the context schema item
    - `type` string, required: Type of the parameter. It could be either an entity slug, or a text
    - `paramKey` string, required: Expected key to be received in the context
    - `isRequired` boolean: Indicates if a value is expected to be provided
    - `shouldLoadEntity` boolean: If type is not text, we can instruct the journey to fetch the entity id we receive as value
    - `description` string, nullable: Human-readable note describing the parameter's purpose. Free text; may contain newlines.
  - `journey_type` string: Journey Template
  - `protected` boolean: If true, journey is displayed in read-only mode
  - `protectedEditable` string[]: Whitelist of paths that remain editable when the journey is protected. Supports wildcard patterns (e.g. steps/*/blocks/**).
  - `settings` object
    - `embedOptions` object
      - `mode` 'full-screen' | 'inline'
      - `lang` string
      - `width` string
      - `topBar` boolean
      - `scrollToTop` boolean
      - `button` object
        - `text` string, nullable
        - `align` 'left' | 'center' | 'right'
    - `safeModeAutomation` boolean
    - `canary` boolean: DEPRECATED - This API will return hardcoded value of false. Please note that this field is internal to epilot and should not be used by external clients. If you wish to get the canary flag, please use the /v1/journey/{id}/settings API.
    - `designId` string, required
    - `templateId` string, nullable
    - `entityId` string, nullable
    - `mappingsAutomationId` string
    - `newMappings` boolean: When true, the journey is created without a mapping config or automation; mappings are managed as advanced mappings on a lazily created automation.
    - `targetedCustomer` string
    - `description` string, nullable
    - `organizationSettings` object, nullable
    - `publicToken` string, nullable
    - `runtimeEntities` string[]
    - `filePurposes` string[]
    - `entityTags` string[]
    - `addressSuggestionsFileUrl` string, nullable: @deprecated Use addressSuggestionsFileId instead
    - `addressSuggestionsFileId` string, nullable
    - `addressSuggestionsCountryCode` string, nullable: Country code for address format (e.g. DE, AT, CH, LU)
    - `addressSuggestionsEnableAutoComplete` boolean: Whether address auto-complete is enabled
    - `addressSuggestionsSource` string[]: Sources for address auto-complete (e.g. deutschePostService, customAddressesFile)
    - `addressSuggestionsEnableFreeText` boolean: Whether free text input is allowed when auto-complete is on
    - `useNewDesign` boolean: This property is deprecated and will be removed in a future version
    - `useAustrianLabels` boolean: If true, some journey input labels are in Austrian format
    - `enableDarkMode` boolean: If true, the journey shows an icon to toggle dark mode
    - `accessMode` 'PUBLIC' | 'PRIVATE'
    - `authGate` object: Steps after this step require an authenticated session (auth gate)
      - `stepId` string, required: The step containing the Login & Registration block
    - `isPublished` boolean
    - `status` string
    - `isActive` boolean
    - `savingProgress` object
      - `mode` 'auto' | 'local' | 'remote' | 'none'
      - `supportedRevision` number
    - `thirdPartyCookies` boolean: If false, third-party cookies are disabled to comply with GDPR regulations without asking for consent.
    - `betaFeatures` object: Per-journey opt-ins to beta features. One named boolean per feature (no free-form map), so a mistyped key is rejected with 400 and generated client types stay explicit. Additive: a feature is on when its key is true OR the organization-wide PostHog flag for that feature is on.
      - `modernProducts` boolean: Opt this journey into the modern product presentation (product tiles and details modal). Effective when true OR the organization flag `journey-modern-products` is on.
      - `modernLauncher` boolean: Opt this launcher journey into the modern Journey Launcher (picker, card and hero shells). Launcher journeys only. Effective when true OR the organization flag `journey-modern-launcher` is on.
    - `offline` object, nullable: Offline journeys (ER-5432). Revision-owned like every other setting: effective on publish. The runtime prepares an offline pack for this journey only when the organization flag `journey-offline` is on AND `enabled` is true.
      - `enabled` boolean, required: Prepare this journey for offline use on devices that open it online first.
      - `packTtlHours` integer: How long a prepared pack stays fresh before the next online open refreshes it. Default 24.
  - `validationRules` ValidationRuleRef: References to validation rules organized by blocks and fields. Maps block IDs to either one or more ordered rule IDs (for block-level rules) or rule references (for field-level rules).
  - `_manifest` string[]: Manifest/Blueprint ID used to create/update the entity
  - `blueprint_customization` object: Blueprint field-locking contract (server-managed). Carries the author plane (locks, default level) and the org plane (server-derived overlay). Public writes never persist client-supplied values — the stored contract is authoritative; it is written only by the Blueprints install pipeline.
  - `createdBy` string
  - `updatedBy` string, nullable
  - `__lastModifiedAt` string, nullable: If passed with value of null, the API won't modify the lastModifiedAt field on updating the journey
  - `parent_revision_id` string: The revision the editor started from. When present and not the latest revision the save is rejected with `409`; absent skips the check.
  - `based_on_revision_id` string: Provenance, not configuration: the revision that was loaded into the editor before this save, when it was an older one.
  - `mapping_config_version` number: Version of the entity-mapping config stored alongside this revision. Publishing the revision points the journey's automation at it.
  - `revision_name` string: What this save changed, for the revision history to list. Distinct from `name`, which is the journey's own name. A publish replaces it with the version name.

## Response `201`

Revision created

- JourneyRevisionSummary
  - `revision_id` string, required: Opaque identifier of the revision. Moves on every save.
  - `created_at` string, date-time, required
  - `created_by` string: User id of the author. Absent for revisions recorded from writes without a user, e.g. blueprint installs.
  - `name` string: Set at publish time only, so present if and only if this revision has been published at least once.
  - `description` string
  - `published_at` string, date-time: The last time this revision was published. Not the same question as `is_published`: a revision that was the published version yesterday still carries a `published_at`.
  - `is_published` boolean, required: Whether this revision is the published version right now.
  - `mapping_config_version` number: Version of the entity-mapping config stored alongside this revision.

## Other responses

- `400`: Invalid payload
- `403`: No permission to edit the journey
- `404`: Journey versioning not enabled for the organization, or journey not found
- `409`: `parent_revision_id` is not the latest revision: the journey was saved since the editor loaded it. The body carries the current latest revision.

## Changes

- **2026-10-15** `2f11eabb1f37`: 2 info
  - added the new optional request property `allOf[#/components/schemas/JourneyCreationRequest]/settings/betaFeatures/modernLauncher`
  - added the new optional request property `allOf[#/components/schemas/JourneyCreationRequest]/settings/offline`
- **2026-09-30** `c1595d30cd4f`: 1 info
  - added the new optional request property `allOf[#/components/schemas/JourneyCreationRequest]/blueprint_customization`
- **2026-09-25** `5fae411349a6`: 1 info
  - added the new optional request property `allOf[#/components/schemas/JourneyCreationRequest]/settings/betaFeatures`
- **2026-09-23** `c0ec24473fb0`: 1 info
  - added the new optional request property `allOf[#/components/schemas/JourneyCreationRequest]/steps/items/guestVisible`
- **2026-09-11** `d4e6550e9ce0`: 1 info
  - added the new optional request property `allOf[subschema #2]/revision_name`

[Operation history](https://skmtc.dev/epilot/apis/journey-api/changes/v1/journey/configuration/:id/revisions/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)
