> ## 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.

# Retrieve a milestone

> Returns one milestone by its id.



## OpenAPI

````yaml /openapi-v1.json get /v1/milestones/{milestone_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/milestones/{milestone_id}:
    get:
      tags:
        - Journeys
      summary: Retrieve a milestone
      description: Returns one milestone by its id.
      operationId: getMilestone
      parameters:
        - schema:
            type: string
            pattern: ^mile_[a-zA-Z0-9]{12}$
            description: The milestone's id.
          required: true
          description: The milestone's id.
          name: milestone_id
          in: path
        - schema:
            anyOf:
              - type: string
                enum:
                  - created_by
              - type: array
                items:
                  type: string
                  enum:
                    - created_by
                maxItems: 1
            description: >-
              Repeatable. Returns the named relation inline. One of:
              `created_by`.
          required: false
          description: 'Repeatable. Returns the named relation inline. One of: `created_by`.'
          name: expand
          in: query
          style: form
          explode: true
      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/Milestone'
        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:
    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
    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
    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
    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

- [Retrieve a milestone achievement](https://docs.tightknit.ai/v1/api-reference/journeys/retrieve-a-milestone-achievement.md)
- [Retrieve a milestone Slack channel](https://docs.tightknit.ai/v1/api-reference/journeys/retrieve-a-milestone-slack-channel.md)
- [Retrieve an award assignment](https://docs.tightknit.ai/v1/api-reference/awards/retrieve-an-award-assignment.md)
- [Retrieve a journey](https://docs.tightknit.ai/v1/api-reference/journeys/retrieve-a-journey.md)
- [List milestones](https://docs.tightknit.ai/v1/api-reference/journeys/list-milestones.md)


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