> ## Documentation Index
> Fetch the complete documentation index at: https://help.getvero.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create localized content

> Creates localized journey message content by cloning the message's default content.
`locale` is required. Fields you provide will override the cloned default. The `content` field must be exactly one of `mjml` (email), `html` (email), `text` (email and SMS), or `payload` (push).
Unlike broadcasts, a journey does not need to be a draft to create localized content. A live or paused journey is editable. Archived and locked journeys are rejected with `409 Conflict`, as are duplicate locales.


<Warning>
  This feature only works when editing journeys created in Vero 1.0 (known as workflows) at the present time. You can add content to journeys created in Vero 2.0 but this feature is not yet supported in the Vero 2.0 UI.
</Warning>


## OpenAPI

````yaml /api-reference/campaigns-v2/campaigns-v2.yaml post /journeys/{journey_id}/messages/{message_id}/contents
openapi: 3.0.3
info:
  title: Vero Open API v2
  version: 2.0.0
  description: >
    OpenAPI description for the API key-authenticated `api/v2` campaign and

    broadcast endpoints.


    Authentication uses the `Authorization` header. Both of these forms are
    accepted:


    - `Authorization: sk_valid_123`

    - `Authorization: Bearer sk_valid_123`

    - `revision: 2026-03-01`


    Campaign read endpoints require the `campaign:read` permission, and campaign

    write endpoints require the `campaign:write` permission.


    Broadcast read endpoints require the `broadcast:read` permission. A
    broadcast

    is a one-off or recurring message sent to an audience.
servers:
  - url: https://api.getvero.com/api/v2
security:
  - ApiKeyAuth: []
tags:
  - name: Broadcasts
  - name: Broadcast Messages
  - name: Broadcast Message Contents
  - name: Journeys
  - name: Journey Messages
  - name: Journey Message Contents
  - name: Campaigns
  - name: Campaign Messages
  - name: Campaign Message Contents
paths:
  /journeys/{journey_id}/messages/{message_id}/contents:
    post:
      tags:
        - Journey Message Contents
      summary: Create localized content
      description: >
        Creates localized journey message content by cloning the message's
        default content.

        `locale` is required. Fields you provide will override the cloned
        default. The `content` field must be exactly one of `mjml` (email),
        `html` (email), `text` (email and SMS), or `payload` (push).

        Unlike broadcasts, a journey does not need to be a draft to create
        localized content. A live or paused journey is editable. Archived and
        locked journeys are rejected with `409 Conflict`, as are duplicate
        locales.
      operationId: createJourneyContent
      parameters:
        - name: journey_id
          in: path
          required: true
          description: Journey ID.
          schema:
            type: integer
        - name: message_id
          in: path
          required: true
          description: Message ID.
          schema:
            type: integer
        - name: revision
          in: header
          required: false
          description: >-
            Optional dated API revision for the request. Must use `YYYY-MM-DD`
            format.
          schema:
            type: string
            pattern: ^\d{4}-\d{2}-\d{2}$
            example: '2026-03-01'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - locale
              properties:
                locale:
                  type: string
                  maxLength: 255
                  description: >-
                    Locale for the new content. Required, and must not already
                    exist on this message.
                subject:
                  type: string
                  nullable: true
                  description: Subject line. Omit to inherit the default content's.
                preheader_text:
                  type: string
                  nullable: true
                  description: Preheader text. Omit to inherit the default content's.
                content:
                  type: object
                  description: >-
                    Channel content body — exactly one of `mjml`, `html`,
                    `text`, or `payload`.
                  properties:
                    mjml:
                      type: string
                    html:
                      type: string
                    text:
                      type: string
                    payload:
                      type: object
            examples:
              htmlContent:
                summary: HTML content
                value:
                  locale: fr-FR
                  subject: Bonjour
                  content:
                    html: <p>Bonjour</p>
        required: true
      responses:
        '201':
          description: Journey content created.
          content:
            application/json:
              examples:
                default:
                  value:
                    id: 202
                    locale: fr-FR
                    is_default: false
                    subject: Bonjour
                    preheader_text: Ravi de vous voir
                    content:
                      html: <p>Bonjour</p>
              schema:
                type: object
                required:
                  - id
                  - locale
                  - is_default
                  - subject
                  - preheader_text
                  - content
                properties:
                  id:
                    type: integer
                  locale:
                    type: string
                    nullable: true
                  is_default:
                    type: boolean
                  subject:
                    type: string
                    nullable: true
                  preheader_text:
                    type: string
                    nullable: true
                  content:
                    type: object
                    description: >-
                      Channel content body — exactly one of `mjml`, `html`,
                      `text`, or `payload`.
                    properties:
                      mjml:
                        type: string
                      html:
                        type: string
                      text:
                        type: string
                      payload:
                        type: object
        '409':
          description: Duplicate locale is rejected.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorList'
        '422':
          description: Missing locale is rejected.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorList'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    ErrorList:
      type: object
      required:
        - errors
      properties:
        errors:
          type: array
          items:
            type: object
            required:
              - message
            properties:
              message:
                type: string
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: Accepts either a raw API key or `Bearer <key>`.

````