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

# Update sequence

> Replace the entire sequence with a new set of steps. Creates a new version; previous versions are preserved for historical reference. The server assigns step IDs and ranks from array order. Message steps can use variables — see [Create column](#tag/campaigns/POST/campaigns/{campaignId}/columns) to set up custom variables.



## OpenAPI

````yaml put /campaigns/{campaignId}/sequence
openapi: 3.1.1
info:
  title: Inbox API
  version: 1.0.0
  description: >+

    The Inbox API gives you full access to manage the following entities in your
    team:

    - **Threads**: DM conversations on X

    - **Account links**: X accounts connected to your team

    - **Members**: users who can access the team

    - **Prospects**: external profiles on X

    - **Tags**: labels for prospects

    - **Statuses**: pipeline statuses for prospects

    - **Lists**: collections of leads with custom columns and import jobs

    - **Campaigns**: automated multi-step DM sequences


    ## A quick note on IDs

    Inbox stores two types of IDs for objects that relate to X:

    - `id` — The Inbox ID, which is the ID of the Inbox object

    - `platformId` — The original X 'platform' ID, which is the ID of the X
    user, conversation, etc.


    Throughout the API, you'll see instances where multiple IDs are present.
    `platformId` is always the original X ID.


    ## Helpful X URLs


    You can use platform IDs to construct direct links to X:


    - **User profile**: `https://x.com/i/user/{platformId}` — This is the most
    reliable way to link to a user since it uses their immutable ID rather than
    their username, which can change.

    - **User by username**: `https://x.com/{username}` — Note that usernames can
    change, so this link may break if the user updates their handle.

    - **Tweet/Post**: `https://x.com/anyusername/status/{tweetId}` — The
    username in the URL is ignored by X; only the tweet ID matters. You can use
    any string in place of the username and the link will still work.

    - **DM conversation**: `https://x.com/i/chat/{conversationPlatformId}` — The
    conversation ID is formatted as `{smallerUserId}:{largerUserId}`, where the
    two participant user IDs are sorted numerically (smaller ID first).


    ## Encoding objects and arrays in query params


    Inbox's API uses bracket notation to denote objects and arrays.


    ### Objects

    For an endpoint that accepts a `cursor` parameter for instance, with the
    cursor object being

    ```json

    {
      id: "l44e15irdq4db30i77cgphhx",
      timestamp: "2025-11-10T18:03:16.000Z"
    }

    ```


    The URL search params would be encoded as:

    ```txt

    ?cursor[id]=l44e15irdq4db30i77cgphhx&cursor[timestamp]=2025-11-10T18:03:16.000Z

    ```


    ### Arrays

    For an endpoint that accepts an `ids` parameter for instance, with the value
    being

    ```json

    ["1", "2", "3"]

    ```


    there are three options:

    1. Repeat the parameter for each value:

    ```txt

    ?ids=1&ids=2&ids=3

    ```

    2. Append `[]` to explicitly denote an array (useful if there's only one
    value):

    ```txt

    ?ids[]=1&ids[]=2&ids[]=3

    ```

    3. Append `[number]` to denote the array index. This option is the most
    flexible and allows for reordering and skipping values:

    ```txt

    ?ids[0]=1&ids[1]=2&ids[2]=3

    ```

  summary: >-
    The Inbox API gives you full access to manage the following entities in your
    team.
servers:
  - url: https://inboxapp.com/api/v1
security: []
tags:
  - name: Teams
    description: >-
      Teams are shared workspace for members to view and manage account links,
      tags, statuses, campaigns, conversations, and more.
  - name: Threads
    description: >-

      Threads represent conversations between an account linked to your team and
      a prospect on Twitter.
                  
  - name: Messages
    description: |-

      Messages are the individual messages sent in a thread.
                  
  - name: Account Links
    description: |-

      Account links represent X accounts connected to your team.
                  
  - name: Members
    description: |-

      Members are Inbox users who can access the team.
                  
  - name: Prospects
    description: |-

      Prospects represent external profiles on X.
                  
  - name: Tags
    description: |-

      Tags are labels for prospects.
                  
  - name: Statuses
    description: >-

      Statuses are used to track the deal stage or any fixed state for a
      prospect.
                  
  - name: Colors
    description: >-

      Get predefined color options that can be used when creating or updating
      tags and statuses.
                  
  - name: Lists
    description: >-
      Lists are collections of leads that you can organize, filter, and use as
      targeting sources for campaigns.
  - name: List columns
    description: >-
      Custom columns defined on a list. Each column stores a text value per lead
      and can be used as merge variables in campaign messages.
  - name: Leads
    description: >-
      Leads are prospects that belong to a list. Each lead has the full prospect
      profile, CRM context (tags, status, notes), and list-specific custom
      column data.
  - name: Import jobs
    description: >-
      Import jobs populate lists from various sources including CSV files, X
      followers, tweet engagements, and X lists. Poll the job status endpoint to
      track progress.
  - name: Campaigns
    description: >-
      Campaigns are automated multi-step DM sequences sent to leads via your
      linked X accounts.


      A campaign pulls its leads from your existing lists using **lead rules** —
      attach lists to automatically sync leads into the campaign, and optionally
      exclude lists (e.g. a "Do Not Contact" list) to avoid messaging certain
      people. Leads can also be added directly or imported in bulk.


      Each campaign has a **sequence** of steps — messages, delays, and tweet
      interactions — that run for every lead. Messages support variables for
      personalization: use the built-in `first-name` variable or create **custom
      columns** on the campaign to store per-lead data like company name or
      role.


      **Automations** let you trigger actions when certain events occur, such as
      applying a tag or setting a status when a prospect replies.


      Configure a sending schedule and hourly message rate, then enable the
      campaign to start sending.
paths:
  /campaigns/{campaignId}/sequence:
    put:
      tags:
        - Campaigns
      summary: Update sequence
      description: >-
        Replace the entire sequence with a new set of steps. Creates a new
        version; previous versions are preserved for historical reference. The
        server assigns step IDs and ranks from array order. Message steps can
        use variables — see [Create
        column](#tag/campaigns/POST/campaigns/{campaignId}/columns) to set up
        custom variables.
      operationId: campaigns.campaign.sequence.updateSequence
      parameters:
        - name: campaignId
          in: path
          required: true
          schema:
            type: string
            pattern: ^[0-9a-z]+$
            description: The ID of the campaign.
            examples:
              - usdjpdql3f90seqk13rwuo7z
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                steps:
                  type: array
                  items:
                    anyOf:
                      - type: object
                        properties:
                          type:
                            const: message
                          data:
                            type: object
                            properties:
                              segments:
                                type: array
                                items:
                                  anyOf:
                                    - type: object
                                      properties:
                                        type:
                                          const: static
                                        text:
                                          type: string
                                          description: >-
                                            The literal text to insert. Use static
                                            segments for fixed content and
                                            whitespace between other segments. If
                                            you want to randomize phrasing, use a
                                            variation segment instead.
                                      required:
                                        - type
                                        - text
                                      title: Static text
                                    - type: object
                                      properties:
                                        type:
                                          const: variable
                                        name:
                                          type: string
                                          description: >-
                                            The variable name to substitute. Use
                                            'first-name' to insert the prospect's
                                            first name, which is automatically
                                            extracted from their profile using AI.
                                            For any other variables, create a custom
                                            column on the campaign and use its
                                            column ID here (e.g.
                                            'custom_q5cktl47a6pqa74eu06fz89v'). The
                                            column must already exist on the
                                            campaign.
                                          examples:
                                            - first-name
                                        fallback:
                                          type: string
                                          description: >-
                                            Fallback text used when the variable has
                                            no value for a given prospect. If
                                            omitted and the value is empty, nothing
                                            is inserted and any trailing whitespace
                                            from the preceding segment is trimmed.
                                            For example, [{ type: "static", text:
                                            "Hey " }, { type: "variable", name:
                                            "first-name" }, { type: "static", text:
                                            "," }] with no value and no fallback
                                            produces "Hey," — the trailing space in
                                            "Hey " is removed.
                                          examples:
                                            - there
                                      required:
                                        - type
                                        - name
                                      title: Variable
                                    - type: object
                                      properties:
                                        type:
                                          const: variation
                                        options:
                                          type: array
                                          items:
                                            type: string
                                          description: >-
                                            A list of variants to insert into the
                                            message. One option is chosen at random
                                            every time the message is constructed.
                                          examples:
                                            - - Hey
                                              - Hello
                                              - How's it going
                                      required:
                                        - type
                                        - options
                                      title: Variation
                                description: >-
                                  Ordered array of segments that are
                                  concatenated directly without any whitespace
                                  or separators. To include spaces between
                                  segments, use a static segment with a space
                                  character (e.g. { type: 'static', text: ' '
                                  }).
                            required:
                              - segments
                        required:
                          - type
                          - data
                        title: Message step
                      - type: object
                        properties:
                          type:
                            const: delay
                          data:
                            type: object
                            properties:
                              delaySeconds:
                                type: number
                                description: >-
                                  The exact number of seconds to wait before
                                  proceeding to the next step. This is the
                                  actual delay used by the system. For example,
                                  86400 = 1 day, 604800 = 7 days.
                                examples:
                                  - 604800
                              unit:
                                enum:
                                  - minutes
                                  - hours
                                  - days
                                description: >-
                                  Display hint for the UI only. Does not affect
                                  the actual delay, which is always determined
                                  by delaySeconds. The unit simply controls how
                                  the delay is presented to users in the
                                  dashboard.
                            required:
                              - delaySeconds
                              - unit
                        required:
                          - type
                          - data
                        title: Delay step
                      - type: object
                        properties:
                          type:
                            const: likeTweet
                          data:
                            type: object
                            properties:
                              maxTweets:
                                type: integer
                                minimum: 1
                                maximum: 5
                                default: 1
                                description: >-
                                  Maximum number of the prospect's recent tweets
                                  to like. Only tweets that haven't already been
                                  liked by the sender account are considered. If
                                  fewer unliked tweets are available than
                                  requested, only those are liked and the step
                                  continues normally. For example, if a prospect
                                  has 3 tweets total and a previous step already
                                  liked 1, requesting 4 here will only like the
                                  remaining 2.
                                examples:
                                  - 3
                        required:
                          - type
                          - data
                        title: Like tweet step
                  description: >-
                    Ordered list of steps for the new sequence. Step IDs and
                    ranks are assigned by the server based on array position.
                  examples:
                    - - type: message
                        data:
                          segments:
                            - type: variation
                              options:
                                - Hey
                                - Hi
                                - What's up
                            - type: static
                              text: ' '
                            - type: variable
                              name: first-name
                              fallback: there
                            - type: static
                              text: ', saw your work at '
                            - type: variable
                              name: custom_q5cktl47a6pqa74eu06fz89v
                              fallback: your company
                            - type: static
                              text: ' — would love to connect. Open to a quick chat?'
                      - type: delay
                        data:
                          delaySeconds: 86400
                          unit: days
                      - type: message
                        data:
                          segments:
                            - type: static
                              text: >-
                                Hey, just following up — would love to hear your
                                thoughts!
              required:
                - steps
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  version:
                    type: number
                    description: The newly created version number.
                    examples:
                      - 4
                  steps:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: Unique identifier for this step within the sequence.
                          examples:
                            - w3x4y5z6a7b8c9d0e1f2g3h4
                        rank:
                          type: number
                          description: Zero-based position of this step in the sequence.
                          examples:
                            - 0
                        type:
                          enum:
                            - message
                            - delay
                            - likeTweet
                          description: The type of step.
                          examples:
                            - message
                        data:
                          anyOf:
                            - type: object
                              properties:
                                segments:
                                  type: array
                                  items:
                                    anyOf:
                                      - type: object
                                        properties:
                                          type:
                                            const: static
                                          text:
                                            type: string
                                            description: >-
                                              The literal text to insert. Use static
                                              segments for fixed content and
                                              whitespace between other segments. If
                                              you want to randomize phrasing, use a
                                              variation segment instead.
                                        required:
                                          - type
                                          - text
                                        title: Static text
                                      - type: object
                                        properties:
                                          type:
                                            const: variable
                                          name:
                                            type: string
                                            description: >-
                                              The variable name to substitute. Use
                                              'first-name' to insert the prospect's
                                              first name, which is automatically
                                              extracted from their profile using AI.
                                              For any other variables, create a custom
                                              column on the campaign and use its
                                              column ID here (e.g.
                                              'custom_q5cktl47a6pqa74eu06fz89v'). The
                                              column must already exist on the
                                              campaign.
                                            examples:
                                              - first-name
                                          fallback:
                                            type: string
                                            description: >-
                                              Fallback text used when the variable has
                                              no value for a given prospect. If
                                              omitted and the value is empty, nothing
                                              is inserted and any trailing whitespace
                                              from the preceding segment is trimmed.
                                              For example, [{ type: "static", text:
                                              "Hey " }, { type: "variable", name:
                                              "first-name" }, { type: "static", text:
                                              "," }] with no value and no fallback
                                              produces "Hey," — the trailing space in
                                              "Hey " is removed.
                                            examples:
                                              - there
                                        required:
                                          - type
                                          - name
                                        title: Variable
                                      - type: object
                                        properties:
                                          type:
                                            const: variation
                                          options:
                                            type: array
                                            items:
                                              type: string
                                            description: >-
                                              A list of variants to insert into the
                                              message. One option is chosen at random
                                              every time the message is constructed.
                                            examples:
                                              - - Hey
                                                - Hello
                                                - How's it going
                                        required:
                                          - type
                                          - options
                                        title: Variation
                                  description: >-
                                    Ordered array of segments that are
                                    concatenated directly without any whitespace
                                    or separators. To include spaces between
                                    segments, use a static segment with a space
                                    character (e.g. { type: 'static', text: ' '
                                    }).
                              required:
                                - segments
                            - type: object
                              properties:
                                delaySeconds:
                                  type: number
                                  description: >-
                                    The exact number of seconds to wait before
                                    proceeding to the next step. This is the
                                    actual delay used by the system. For
                                    example, 86400 = 1 day, 604800 = 7 days.
                                  examples:
                                    - 604800
                                unit:
                                  enum:
                                    - minutes
                                    - hours
                                    - days
                                  description: >-
                                    Display hint for the UI only. Does not
                                    affect the actual delay, which is always
                                    determined by delaySeconds. The unit simply
                                    controls how the delay is presented to users
                                    in the dashboard.
                              required:
                                - delaySeconds
                                - unit
                            - type: object
                              properties:
                                maxTweets:
                                  type: integer
                                  minimum: 1
                                  maximum: 5
                                  default: 1
                                  description: >-
                                    Maximum number of the prospect's recent
                                    tweets to like. Only tweets that haven't
                                    already been liked by the sender account are
                                    considered. If fewer unliked tweets are
                                    available than requested, only those are
                                    liked and the step continues normally. For
                                    example, if a prospect has 3 tweets total
                                    and a previous step already liked 1,
                                    requesting 4 here will only like the
                                    remaining 2.
                                  examples:
                                    - 3
                          description: >-
                            Step configuration data. Structure depends on the
                            step type.
                      required:
                        - id
                        - rank
                        - type
                        - data
                    description: The steps as stored, with server-assigned IDs and ranks.
                required:
                  - version
                  - steps

````