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

# Update a milestone Slack channel

> Moves the row to another Slack channel in one step: the way to replace a milestone's channel, its only one included. The milestone never counts every channel in between, as it would if the row were deleted first, and never holds two channels, which a plan without multi-channel milestones refuses. The channel must be activated and non-archived and not on another of the milestone's rows; changing a channel of a milestone with more than one needs a plan that includes them. Moving the row to its own channel returns it unchanged.



## OpenAPI

````yaml /openapi-v1.json patch /v1/milestone_slack_channels/{milestone_slack_channel_id}
openapi: 3.1.0
info:
  title: Tightknit Admin API
  version: 1.0.0
  description: Administrative access to a Tightknit community.
servers:
  - url: https://api.tightknit.ai
security:
  - Bearer: []
tags:
  - name: API keys
    description: Inspect the key a request authenticated with.
  - name: Awards
    description: Badges and certificates a community grants its members.
  - name: Events
    description: Read, create, update and delete events on the community calendar.
  - name: Journeys
    description: Read multi-step member programs and their milestones.
  - name: Tags
    description: The labels that classify events and content resources.
  - name: Groups
    description: The segments a community sorts its members into.
  - name: Content
    description: >-
      The collections a community files its content under, and the links and
      events in them.
  - name: Feeds
    description: The Slack channels and site-only spaces a community posts in.
  - name: Files
    description: Images and documents a community has uploaded.
  - name: Messages
    description: What a community has published.
  - name: Members
    description: The people in a community.
  - name: Slack messages
    description: >-
      Messages sent to Slack. Sending is the only operation: they cannot be
      read, edited or deleted here.
  - name: Compositions
    description: >-
      Message Blaster drafts: messages saved in Studio before, and kept after,
      they are sent to Slack channels and members. An API key sees only the
      compositions shared with every Studio user.
  - name: Follows
    description: What a member follows.
  - name: Polls
    description: The questions a community puts to its members in Slack.
  - name: Activity logs
    description: What members did in the community, and when.
  - name: System
    description: Service health.
paths:
  /v1/milestone_slack_channels/{milestone_slack_channel_id}:
    patch:
      tags:
        - Journeys
      summary: Update a milestone Slack channel
      description: >-
        Moves the row to another Slack channel in one step: the way to replace a
        milestone's channel, its only one included. The milestone never counts
        every channel in between, as it would if the row were deleted first, and
        never holds two channels, which a plan without multi-channel milestones
        refuses. The channel must be activated and non-archived and not on
        another of the milestone's rows; changing a channel of a milestone with
        more than one needs a plan that includes them. Moving the row to its own
        channel returns it unchanged.
      operationId: updateMilestoneSlackChannel
      parameters:
        - schema:
            type: string
            pattern: ^mlsc_[a-zA-Z0-9]{12}$
            description: The milestone Slack channel's id.
          required: true
          description: The milestone Slack channel's id.
          name: milestone_slack_channel_id
          in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MilestoneSlackChannelUpdate'
      responses:
        '200':
          description: Success
          headers:
            Request-Id:
              description: Identifier for this request, quote it in support tickets.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MilestoneSlackChannel'
        default:
          description: Error
          headers:
            Request-Id:
              description: Identifier for this request, quote it in support tickets.
              schema:
                type: string
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
      security:
        - Bearer: []
components:
  schemas:
    MilestoneSlackChannelUpdate:
      type: object
      properties:
        integrations:
          type: object
          properties:
            slack:
              type: object
              properties:
                channel_id:
                  type: string
                  minLength: 1
                  description: >-
                    Slack’s id for an activated, non-archived channel of this
                    community.
                  example: C01ABC123
              required:
                - channel_id
              additionalProperties: false
              description: The Slack channel to scope the milestone to.
          required:
            - slack
          additionalProperties: false
          description: Where the milestone connects to other platforms.
      required:
        - integrations
      additionalProperties: false
    MilestoneSlackChannel:
      type: object
      properties:
        object:
          type: string
          enum:
            - milestone_slack_channel
          description: Always `milestone_slack_channel`.
        id:
          type: string
          description: Unique identifier for the object.
          example: mlsc_3h7k2m9p4xqz
        created_at:
          type: string
          format: date-time
          description: When the object was created.
        milestone_id:
          type: string
          description: The id of the milestone the channel scopes.
          example: mile_5v8b1c6d2fgh
        milestone:
          anyOf:
            - $ref: '#/components/schemas/Milestone'
            - type: 'null'
          description: The milestone. Present only when `milestone` is expanded.
        created_by_id:
          type:
            - string
            - 'null'
          description: >-
            The id of the profile that added the channel. Null when an API key
            added it.
        created_by:
          anyOf:
            - $ref: '#/components/schemas/Profile'
            - type: 'null'
          description: >-
            The profile that added the channel. Present only when `created_by`
            is expanded.
        integrations:
          type: object
          properties:
            slack:
              type: object
              properties:
                channel_id:
                  type: string
                  description: >-
                    Slack’s id for a channel whose activity counts toward the
                    milestone.
                  example: C01ABC123
                channel:
                  anyOf:
                    - $ref: '#/components/schemas/SlackChannel'
                    - type: 'null'
                  description: >-
                    The Slack channel. Present only when `slack_channel` is
                    expanded.
              required:
                - channel_id
              description: The Slack channel this row scopes the milestone to.
          required:
            - slack
          description: Where the milestone connects to other platforms.
      required:
        - object
        - id
        - created_at
        - milestone_id
        - created_by_id
        - integrations
      description: >-
        One Slack channel a milestone is scoped to. Its channel is the one field
        an update changes: to replace a milestone’s channel, move its row to the
        new one.
    Problem:
      type: object
      properties:
        type:
          type: string
          description: A URI naming the problem type. Always `about:blank`.
          example: about:blank
        title:
          type: string
          description: A short summary of the HTTP status.
          example: Not found
        status:
          type: integer
          description: The HTTP status code.
          example: 404
        detail:
          type: string
          description: What went wrong with this request, when there is more to say.
        code:
          type: string
          description: >-
            A stable, machine-readable error code to branch on, unlike `title`
            and `detail`.
          example: not_found
        param:
          type: string
          description: The request field or parameter the error is about, when one is.
        request_id:
          type: string
          description: >-
            The id of the request, also sent as the `Request-Id` header. Quote
            it in support tickets.
          example: req_9f2b8c1d4e5a6b7c8d9e0f1a2b3c4d5e
      required:
        - type
        - title
        - status
        - code
    Milestone:
      type: object
      properties:
        object:
          type: string
          enum:
            - milestone
          description: Always `milestone`.
        id:
          type: string
          description: Unique identifier for the object.
          example: mile_5v8b1c6d2fgh
        created_at:
          type: string
          format: date-time
          description: When the object was created.
        updated_at:
          type: string
          format: date-time
          description: When the object was last changed.
        label:
          type: string
          description: The milestone’s name, as members see it.
        action:
          type: string
          enum:
            - join_workspace
            - register_for_event
            - num_reactions_given_not_to_self
            - num_reactions_received_not_from_self
            - send_post_in_channel
            - send_reply_in_channel_not_to_self
            - num_msgs_reacted_to_not_to_self
            - num_msgs_that_received_react_not_from_self
            - send_message_in_channel_not_to_self
            - num_polls_voted_in
            - log_in_to_forums_site
            - update_slack_profile_photo
            - num_replies_selected_as_answer_not_from_self
            - join_slack_channel
          description: >-
            What a member does to make progress on the milestone. One of:

            - `join_workspace`: the member joins the Slack workspace.

            - `register_for_event`: the member registers for an event, counted
            once per event.

            - `num_reactions_given_not_to_self`: the member reacts to another
            member’s message, counted per reaction.

            - `num_reactions_received_not_from_self`: the member receives a
            reaction from another member on their message, counted per reaction.

            - `send_post_in_channel`: the member sends a top-level message in a
            channel.

            - `send_reply_in_channel_not_to_self`: the member replies in a
            thread on another member’s message, counted once per thread.

            - `num_msgs_reacted_to_not_to_self`: the member reacts to another
            member’s message, counted once per message.

            - `num_msgs_that_received_react_not_from_self`: the member has a
            message receive a reaction from another member, counted once per
            message.

            - `send_message_in_channel_not_to_self`: the member sends a
            top-level message, or a reply to another member’s message, in a
            channel.

            - `num_polls_voted_in`: the member votes in a poll that is not
            anonymous, counted once per poll.

            - `log_in_to_forums_site`: the member signs in to the community
            site, counted per sign-in.

            - `update_slack_profile_photo`: the member sets a custom Slack
            profile photo in place of the default avatar.

            - `num_replies_selected_as_answer_not_from_self`: the member has a
            reply marked as an answer by someone else, counted once per reply.

            - `join_slack_channel`: the member joins one of the Slack channels
            the milestone names.
        sort_order:
          type: integer
          description: >-
            Where the milestone sits in its journey, lowest first. A journey’s
            `milestones` expansion comes in this order; a list of milestones
            comes newest first.
        multiplier:
          type:
            - integer
            - 'null'
          description: >-
            How many times the action must be done to complete the milestone.
            Null for a once-only action, and on older milestones saved without
            one, which cannot be completed.
        scoped_to_emoji_name:
          type:
            - string
            - 'null'
          description: >-
            The emoji a reaction must use to count, by its Slack name without
            colons or skin tone. A reaction with any skin tone of it counts.
            Null when any emoji counts.
        achievements_count:
          type: integer
          minimum: 0
          description: How many members have completed the milestone.
        journey_id:
          type: string
          description: The id of the journey the milestone belongs to.
        created_by_id:
          type:
            - string
            - 'null'
          description: >-
            The id of the profile that created the milestone. Null when no
            member is recorded as its creator.
        created_by:
          anyOf:
            - $ref: '#/components/schemas/Profile'
            - type: 'null'
          description: >-
            The profile that created the milestone. Present only when
            `created_by` is expanded.
        integrations:
          type: object
          properties:
            slack:
              type:
                - object
                - 'null'
              properties:
                channel_ids:
                  type: array
                  items:
                    type: string
                  description: >-
                    The ids of the Slack channels the action must happen in. Any
                    one of them counts. Empty when every channel the milestone
                    was limited to is gone, so no activity counts toward it
                    until an admin picks channels again.
              required:
                - channel_ids
              description: >-
                The Slack channels the milestone is limited to. Null when the
                action counts in any channel.
          required:
            - slack
          description: The milestone’s settings in connected platforms.
      required:
        - object
        - id
        - created_at
        - updated_at
        - label
        - action
        - sort_order
        - multiplier
        - scoped_to_emoji_name
        - achievements_count
        - journey_id
        - created_by_id
        - integrations
    Profile:
      type: object
      properties:
        object:
          type: string
          enum:
            - profile
          description: Always `profile`.
        id:
          type: string
          description: Unique identifier for the object.
          example: prof_9f2b8c1d4e5a
        created_at:
          type: string
          format: date-time
          description: When the object was created.
        updated_at:
          type: string
          format: date-time
          description: When the object was last changed.
        name:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The name the community shows for the member. With a linked Slack
            profile it follows the community’s name preference, or reads
            `🔒[private profile]` when `opt_out_of_public_profile` is true;
            without one it is `display_name`, falling back to `full_name`.
          example: Ada Lovelace
        full_name:
          type: string
          description: The member’s full name. Always set.
          example: Ada Lovelace
        display_name:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The shorter name the member goes by, when they set one. Null
            otherwise.
        first_name:
          anyOf:
            - type: string
            - type: 'null'
          description: The member’s first name, when known.
        last_name:
          anyOf:
            - type: string
            - type: 'null'
          description: The member’s last name, when known.
        avatar_url:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The URL of the member’s avatar, from their Slack profile when one is
            linked. Null when they have none, or when a member with a linked
            Slack profile has `opt_out_of_public_profile` on.
        email:
          anyOf:
            - type: string
            - type: 'null'
          description: The member’s email address. Null when it is not known.
          example: ada@example.com
        email_domain:
          anyOf:
            - type: string
            - type: 'null'
          description: The lowercased domain of `email`, maintained by the database.
          example: example.com
        locale:
          anyOf:
            - type: string
            - type: 'null'
          description: The member’s language and region, such as `en-US`, when known.
        is_team_member:
          type: boolean
          description: >-
            Whether the member is staff of the community rather than one of its
            people.
        is_deactivated:
          type: boolean
          description: Whether the member has been deactivated in the community.
        opt_out_of_public_profile:
          type: boolean
          description: >-
            Whether the member asked to be left out of the public member
            directory.
        member_since:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          description: >-
            When the member joined the community: their first site sign-in or
            Slack join. Null while they are invited and have not joined yet.
        invited_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          description: >-
            When an admin added the member before they joined (Studio, Admin
            API, MCP or CSV import), whether or not an invitation was sent. Kept
            after they join; null for members never added this way.
        signed_up_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          description: >-
            When the member first signed in to the community site. Unlike
            `member_since`, a Slack join never sets it. Null for members who
            have never signed in.
        source:
          type: string
          enum:
            - slack_sync
            - import
            - api
            - studio_signin
            - sso_signin
            - legacy
            - unknown
          description: >-
            How the profile was created. A Slack invitee who had not joined yet
            takes `api` or `import` when an admin then adds them. One of:

            - `slack_sync`: from Slack, through the member roster sync or the
            member joining or acting in the workspace.

            - `import`: from an admin’s bulk member import.

            - `api`: from the Admin API, Studio’s add-member form or the MCP
            server.

            - `studio_signin`: on an admin’s first Studio sign-in.

            - `sso_signin`: on a member’s first single sign-on (SSO) sign-in,
            where the site creates accounts automatically.

            - `legacy`: created before the origin was recorded.

            - `unknown`: created before the origin was recorded and before its
            Slack link, with no way left to tell how.
          example: slack_sync
        has_account:
          type: boolean
          description: >-
            Whether the member has a sign-in account. False for a Slack identity
            nobody has claimed.
        flair_group_id:
          anyOf:
            - type: string
            - type: 'null'
          description: The group whose flair the member shows beside their name.
          example: grup_7m3x9k4t8plz
        slack_profile_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Slack’s id for the member’s linked Slack profile. Null when the
            member has no Slack identity.
          example: U0BRY4S6LNQ
        integrations:
          type: object
          properties:
            slack:
              type: object
              properties:
                profile:
                  anyOf:
                    - $ref: '#/components/schemas/SlackProfile'
                    - type: 'null'
                  description: The linked Slack profile, or null when the member has none.
              required:
                - profile
              description: The member’s Slack identity.
          required:
            - slack
          description: >-
            Where the member connects to other platforms. Present only when
            `slack_profile` is expanded.
      required:
        - object
        - id
        - created_at
        - updated_at
        - name
        - full_name
        - display_name
        - first_name
        - last_name
        - avatar_url
        - email
        - email_domain
        - locale
        - is_team_member
        - is_deactivated
        - opt_out_of_public_profile
        - member_since
        - invited_at
        - signed_up_at
        - source
        - has_account
        - flair_group_id
        - slack_profile_id
    SlackChannel:
      type: object
      properties:
        object:
          type: string
          enum:
            - slack_channel
          description: Always `slack_channel`.
        id:
          type: string
          description: Slack’s id for the channel.
          example: C01ABC123
        name:
          type:
            - string
            - 'null'
          description: >-
            The channel’s name in Slack, without the `#`. Null when it is not
            known.
        is_private:
          type:
            - boolean
            - 'null'
          description: Whether the channel is private in Slack. Null when it is not known.
        is_archived:
          type:
            - boolean
            - 'null'
          description: Whether the channel is archived in Slack. Null when it is not known.
      required:
        - object
        - id
        - name
        - is_private
        - is_archived
    SlackProfile:
      type: object
      properties:
        object:
          type: string
          enum:
            - slack_profile
          description: Always `slack_profile`.
        id:
          type: string
          description: Slack’s id for the member.
          example: U0BRY4S6LNQ
        created_at:
          type: string
          format: date-time
          description: When the object was created.
        updated_at:
          type: string
          format: date-time
          description: When the object was last changed.
        workspace_id:
          type: string
          description: Slack’s id for the workspace the member belongs to.
          example: T01ABC123
        display_name:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The display name the member set in Slack. Empty or null when they
            set none.
        real_name:
          anyOf:
            - type: string
            - type: 'null'
          description: The member’s full name in Slack. Null when Slack has none.
        email:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The email address on the Slack account. Null when Slack does not
            share it, as for bots.
          example: ada@example.com
        pronouns:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The pronouns the member set in Slack. Empty or null when they set
            none.
        avatar_url:
          anyOf:
            - type: string
            - type: 'null'
          description: The URL of the member’s Slack avatar. Null when Slack has none.
        locale:
          anyOf:
            - type: string
            - type: 'null'
          description: The member’s Slack language and region, such as `en-US`, when known.
        tz:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The member’s time zone in Slack, as an IANA name such as
            `America/New_York`, when known.
        is_bot:
          type: boolean
          description: Whether the account is a bot rather than a person.
        is_app_user:
          type: boolean
          description: >-
            Whether Slack reports the member as an authorized user of the
            Tightknit app.
        is_workflow_bot:
          type: boolean
          description: Whether the account is the bot behind a Slack workflow.
        is_admin:
          type: boolean
          description: Whether the member is an admin of the Slack workspace.
        is_owner:
          type: boolean
          description: Whether the member is an owner of the Slack workspace.
        is_restricted:
          type: boolean
          description: >-
            Whether the member is a Slack guest, limited to the channels they
            were invited to.
        is_invited_user:
          type: boolean
          description: Whether the member holds nothing but a still-open Slack invitation.
        is_deleted:
          type: boolean
          description: Whether Slack deactivated the account.
      required:
        - object
        - id
        - created_at
        - updated_at
        - workspace_id
        - display_name
        - real_name
        - email
        - pronouns
        - avatar_url
        - locale
        - tz
        - is_bot
        - is_app_user
        - is_workflow_bot
        - is_admin
        - is_owner
        - is_restricted
        - is_invited_user
        - is_deleted
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: Tightknit API key
      description: 'A Tightknit admin API key, sent as `Authorization: Bearer <key>`.'

````

## Related topics

- [Delete a milestone Slack channel](https://docs.tightknit.ai/v1/api-reference/journeys/delete-a-milestone-slack-channel.md)
- [List milestone Slack channels](https://docs.tightknit.ai/v1/api-reference/journeys/list-milestone-slack-channels.md)
- [Retrieve a milestone Slack channel](https://docs.tightknit.ai/v1/api-reference/journeys/retrieve-a-milestone-slack-channel.md)
- [Create a milestone Slack channel](https://docs.tightknit.ai/v1/api-reference/journeys/create-a-milestone-slack-channel.md)
- [Retrieve a milestone](https://docs.tightknit.ai/v1/api-reference/journeys/retrieve-a-milestone.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.