PostHog product_tours API

The product_tours API from PostHog — 7 operation(s) for product_tours.

OpenAPI Specification

posthog-product-tours-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: PostHog actions product_tours API
  version: 1.0.0
  description: ''
tags:
- name: product_tours
paths:
  /api/projects/{project_id}/product_tours/:
    get:
      operationId: product_tours_list
      parameters:
      - name: limit
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - name: offset
        required: false
        in: query
        description: The initial index from which to return the results.
        schema:
          type: integer
      - $ref: '#/components/parameters/ProjectIdPath'
      - name: search
        required: false
        in: query
        description: A search term.
        schema:
          type: string
      tags:
      - product_tours
      security:
      - PersonalAPIKeyAuth:
        - product_tour:read
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedProductTourList'
          description: ''
      x-explicit-tags:
      - product_tours
    post:
      operationId: product_tours_create
      parameters:
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - product_tours
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductTourSerializerCreateUpdateOnly'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/ProductTourSerializerCreateUpdateOnly'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ProductTourSerializerCreateUpdateOnly'
        required: true
      security:
      - PersonalAPIKeyAuth:
        - product_tour:write
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductTourSerializerCreateUpdateOnly'
          description: ''
      x-explicit-tags:
      - product_tours
  /api/projects/{project_id}/product_tours/{id}/:
    get:
      operationId: product_tours_retrieve
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this product tour.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - product_tours
      security:
      - PersonalAPIKeyAuth:
        - product_tour:read
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductTour'
          description: ''
      x-explicit-tags: []
    put:
      operationId: product_tours_update
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this product tour.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - product_tours
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductTour'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/ProductTour'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ProductTour'
        required: true
      security:
      - PersonalAPIKeyAuth:
        - product_tour:write
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductTour'
          description: ''
      x-explicit-tags: []
    patch:
      operationId: product_tours_partial_update
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this product tour.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - product_tours
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchedProductTourSerializerCreateUpdateOnly'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchedProductTourSerializerCreateUpdateOnly'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchedProductTourSerializerCreateUpdateOnly'
      security:
      - PersonalAPIKeyAuth:
        - product_tour:write
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductTourSerializerCreateUpdateOnly'
          description: ''
      x-explicit-tags: []
    delete:
      operationId: product_tours_destroy
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this product tour.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - product_tours
      security:
      - PersonalAPIKeyAuth:
        - product_tour:write
      responses:
        '204':
          description: No response body
      x-explicit-tags: []
  /api/projects/{project_id}/product_tours/{id}/discard_draft/:
    delete:
      operationId: product_tours_discard_draft_destroy
      description: Discard draft content.
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this product tour.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - product_tours
      security:
      - PersonalAPIKeyAuth:
        - product_tour:write
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductTour'
          description: ''
      x-explicit-tags: []
  /api/projects/{project_id}/product_tours/{id}/draft/:
    patch:
      operationId: product_tours_draft_partial_update
      description: Save draft content (server-side merge). No side effects triggered.
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this product tour.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - product_tours
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchedProductTourSerializerCreateUpdateOnly'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchedProductTourSerializerCreateUpdateOnly'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchedProductTourSerializerCreateUpdateOnly'
      security:
      - PersonalAPIKeyAuth:
        - product_tour:write
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductTour'
          description: ''
      x-explicit-tags: []
  /api/projects/{project_id}/product_tours/{id}/draft_status/:
    get:
      operationId: product_tours_draft_status_retrieve
      description: Lightweight polling endpoint for draft change detection.
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this product tour.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - product_tours
      security:
      - PersonalAPIKeyAuth:
        - product_tour:read
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DraftStatusResponse'
          description: ''
      x-explicit-tags: []
  /api/projects/{project_id}/product_tours/{id}/generate/:
    post:
      operationId: product_tours_generate_create
      description: Generate tour step content using AI.
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this product tour.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - product_tours
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/GenerateRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/GenerateRequest'
      security:
      - PersonalAPIKeyAuth:
        - product_tour:write
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerateResponse'
          description: ''
      x-explicit-tags: []
  /api/projects/{project_id}/product_tours/{id}/publish_draft/:
    post:
      operationId: product_tours_publish_draft_create
      description: 'Commit draft to live tour. Runs full validation and triggers side effects.


        Accepts an optional body payload. If provided, merges it into the draft

        before publishing so the caller can save + publish in a single request.'
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this product tour.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - product_tours
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductTourSerializerCreateUpdateOnly'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/ProductTourSerializerCreateUpdateOnly'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ProductTourSerializerCreateUpdateOnly'
        required: true
      security:
      - PersonalAPIKeyAuth:
        - product_tour:write
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductTour'
          description: ''
      x-explicit-tags: []
components:
  schemas:
    PaginatedProductTourList:
      type: object
      required:
      - count
      - results
      properties:
        count:
          type: integer
          example: 123
        next:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?offset=400&limit=100
        previous:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?offset=200&limit=100
        results:
          type: array
          items:
            $ref: '#/components/schemas/ProductTour'
    EvaluationRuntimeEnum:
      enum:
      - server
      - client
      - all
      type: string
      description: '* `server` - Server

        * `client` - Client

        * `all` - All'
    ProductTourSerializerCreateUpdateOnlyCreationContextEnum:
      enum:
      - app
      - toolbar
      type: string
      description: '* `app` - app

        * `toolbar` - toolbar'
    GenerateResponse:
      type: object
      properties:
        steps:
          type: array
          items:
            $ref: '#/components/schemas/GenerateStepResponse'
      required:
      - steps
    BlankEnum:
      enum:
      - ''
    PatchedProductTourSerializerCreateUpdateOnly:
      type: object
      description: Serializer for creating and updating ProductTour.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
          maxLength: 400
        description:
          type: string
        internal_targeting_flag:
          allOf:
          - $ref: '#/components/schemas/MinimalFeatureFlag'
          readOnly: true
        linked_flag:
          allOf:
          - $ref: '#/components/schemas/MinimalFeatureFlag'
          readOnly: true
        linked_flag_id:
          type: integer
          writeOnly: true
          nullable: true
        targeting_flag_filters:
          writeOnly: true
          nullable: true
        content: {}
        auto_launch:
          type: boolean
        start_date:
          type: string
          format: date-time
          nullable: true
        end_date:
          type: string
          format: date-time
          nullable: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        created_by:
          allOf:
          - $ref: '#/components/schemas/UserBasic'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        archived:
          type: boolean
        creation_context:
          allOf:
          - $ref: '#/components/schemas/ProductTourSerializerCreateUpdateOnlyCreationContextEnum'
          writeOnly: true
          default: app
          description: 'Where the tour was created/updated from


            * `app` - app

            * `toolbar` - toolbar'
    GenerateStepResponse:
      type: object
      properties:
        step_id:
          type: string
        title:
          type: string
        description:
          type: string
      required:
      - description
      - step_id
      - title
    NullEnum:
      enum:
      - null
    MinimalFeatureFlag:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        team_id:
          type: integer
          readOnly: true
        name:
          type: string
        key:
          type: string
          maxLength: 400
        filters:
          type: object
          additionalProperties: true
        deleted:
          type: boolean
        active:
          type: boolean
        ensure_experience_continuity:
          type: boolean
          nullable: true
        has_encrypted_payloads:
          type: boolean
          nullable: true
        version:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          nullable: true
        evaluation_runtime:
          nullable: true
          description: 'Specifies where this feature flag should be evaluated


            * `server` - Server

            * `client` - Client

            * `all` - All'
          oneOf:
          - $ref: '#/components/schemas/EvaluationRuntimeEnum'
          - $ref: '#/components/schemas/BlankEnum'
          - $ref: '#/components/schemas/NullEnum'
        bucketing_identifier:
          nullable: true
          description: 'Identifier used for bucketing users into rollout and variants


            * `distinct_id` - User ID (default)

            * `device_id` - Device ID'
          oneOf:
          - $ref: '#/components/schemas/BucketingIdentifierEnum'
          - $ref: '#/components/schemas/BlankEnum'
          - $ref: '#/components/schemas/NullEnum'
        evaluation_contexts:
          type: array
          items:
            type: string
          readOnly: true
      required:
      - evaluation_contexts
      - id
      - key
      - team_id
    UserBasic:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        uuid:
          type: string
          format: uuid
          readOnly: true
        distinct_id:
          type: string
          nullable: true
          maxLength: 200
        first_name:
          type: string
          maxLength: 150
        last_name:
          type: string
          maxLength: 150
        email:
          type: string
          format: email
          title: Email address
          maxLength: 254
        is_email_verified:
          type: boolean
          nullable: true
        hedgehog_config:
          type: object
          additionalProperties: true
          nullable: true
          readOnly: true
        role_at_organization:
          nullable: true
          oneOf:
          - $ref: '#/components/schemas/RoleAtOrganizationEnum'
          - $ref: '#/components/schemas/BlankEnum'
          - $ref: '#/components/schemas/NullEnum'
      required:
      - email
      - hedgehog_config
      - id
      - uuid
    BucketingIdentifierEnum:
      enum:
      - distinct_id
      - device_id
      type: string
      description: '* `distinct_id` - User ID (default)

        * `device_id` - Device ID'
    RoleAtOrganizationEnum:
      enum:
      - engineering
      - data
      - product
      - founder
      - leadership
      - marketing
      - sales
      - other
      type: string
      description: '* `engineering` - Engineering

        * `data` - Data

        * `product` - Product Management

        * `founder` - Founder

        * `leadership` - Leadership

        * `marketing` - Marketing

        * `sales` - Sales / Success

        * `other` - Other'
    DraftStatusResponse:
      type: object
      properties:
        updated_at:
          type: string
          format: date-time
        has_draft:
          type: boolean
      required:
      - has_draft
      - updated_at
    ProductTour:
      type: object
      description: Read-only serializer for ProductTour.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
          maxLength: 400
        description:
          type: string
        internal_targeting_flag:
          allOf:
          - $ref: '#/components/schemas/MinimalFeatureFlag'
          readOnly: true
        linked_flag:
          allOf:
          - $ref: '#/components/schemas/MinimalFeatureFlag'
          readOnly: true
        targeting_flag_filters:
          type: object
          additionalProperties: true
          nullable: true
          description: Return the targeting flag filters, excluding the base exclusion properties.
          readOnly: true
        content: {}
        draft_content:
          readOnly: true
          nullable: true
        has_draft:
          type: boolean
          readOnly: true
        auto_launch:
          type: boolean
        start_date:
          type: string
          format: date-time
          nullable: true
        end_date:
          type: string
          format: date-time
          nullable: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        created_by:
          allOf:
          - $ref: '#/components/schemas/UserBasic'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        archived:
          type: boolean
      required:
      - created_at
      - created_by
      - draft_content
      - has_draft
      - id
      - internal_targeting_flag
      - linked_flag
      - name
      - targeting_flag_filters
      - updated_at
    ProductTourSerializerCreateUpdateOnly:
      type: object
      description: Serializer for creating and updating ProductTour.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
          maxLength: 400
        description:
          type: string
        internal_targeting_flag:
          allOf:
          - $ref: '#/components/schemas/MinimalFeatureFlag'
          readOnly: true
        linked_flag:
          allOf:
          - $ref: '#/components/schemas/MinimalFeatureFlag'
          readOnly: true
        linked_flag_id:
          type: integer
          writeOnly: true
          nullable: true
        targeting_flag_filters:
          writeOnly: true
          nullable: true
        content: {}
        auto_launch:
          type: boolean
        start_date:
          type: string
          format: date-time
          nullable: true
        end_date:
          type: string
          format: date-time
          nullable: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        created_by:
          allOf:
          - $ref: '#/components/schemas/UserBasic'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        archived:
          type: boolean
        creation_context:
          allOf:
          - $ref: '#/components/schemas/ProductTourSerializerCreateUpdateOnlyCreationContextEnum'
          writeOnly: true
          default: app
          description: 'Where the tour was created/updated from


            * `app` - app

            * `toolbar` - toolbar'
      required:
      - created_at
      - created_by
      - id
      - internal_targeting_flag
      - linked_flag
      - name
      - updated_at
    GenerateRequest:
      type: object
      properties:
        title:
          type: string
          default: ''
        goal:
          type: string
          default: ''
        steps:
          type: array
          items:
            type: object
            additionalProperties: true
  parameters:
    ProjectIdPath:
      in: path
      name: project_id
      required: true
      schema:
        type: string
      description: Project ID of the project you're trying to access. To find the ID of the project, make a call to /api/projects/.
  securitySchemes:
    PersonalAPIKeyAuth:
      type: http
      scheme: bearer
x-tagGroups:
- name: All endpoints
  tags:
  - LLM Analytics
  - actions
  - activity_log
  - activity_logs
  - advanced_activity_logs
  - alerts
  - annotations
  - approval_policies
  - batch_exports
  - cdp
  - change_requests
  - code
  - code-invites
  - cohorts
  - comments
  - conversations
  - core
  - customer_analytics
  - customer_journeys
  - customer_profile_configs
  - dashboard_templates
  - dashboards
  - data_color_themes
  - data_modeling_jobs
  - data_warehouse
  - dataset_items
  - datasets
  - desktop_recordings
  - domains
  - early_access_feature
  - early_access_features
  - elements
  - endpoints
  - environments
  - error_tracking
  - evaluation_runs
  - evaluations
  - event_definitions
  - event_filter
  - event_schemas
  - events
  - experiment_holdouts
  - experiment_saved_metrics
  - experiments
  - exports
  - external_data_schemas
  - external_data_sources
  - feature_flags
  - file_system
  - file_system_shortcut
  - flag_value
  - groups
  - groups_types
  - health_issues
  - heatmap_screenshots
  - heatmaps
  - hog_flows
  - hog_function_templates
  - hog_functions
  - insight_variables
  - insights
  - integrations
  - invites
  - js-snippet
  - legal_documents
  - lineage
  - live_debugger_breakpoints
  - llm_analytics
  - llm_prompts
  - llm_skills
  - logs
  - managed_viewsets
  - max
  - max_tools
  - mcp_server_installations
  - mcp_servers
  - mcp_store
  - mcp_tools
  - members
  - notebooks
  - oauth_applications
  - object_media_previews
  - organizations
  - persisted_folder
  - persons
  - platform_features
  - plugin_configs
  - product_analytics
  - product_tours
  - project_secret_api_keys
  - projects
  - property_definitions
  - proxy_records
  - public_hog_function_templates
  - query
  - replay
  - reverse_proxy
  - role_external_references
  - roles
  - sandbox-environments
  - sandbox_environments
  - saved
  - schema_property_groups
  - sdk_doctor
  - session_group_summaries
  - session_recording_playlists
  - session_recordings
  - session_summaries
  - sessions
  - signals
  - subscriptions
  - surveys
  - taggers
  - task-automations
  - task-runs
  - task_automations
  - tasks
  - uploaded_media
  - user_home_settings
  - user_interviews
  - users
  - visual_review
  - warehouse_dag
  - warehouse_model_paths
  - warehouse_saved_queries
  - warehouse_saved_query_folders
  - warehouse_tables
  - warehouse_view_link
  - warehouse_view_links
  - web_analytics
  - web_experiments
  - web_vitals
  - welcome
  - workflows