PostHog product_tours API

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

Operations 11

GET /api/projects/{project_id}/product_tours/ #
POST /api/projects/{project_id}/product_tours/ #
GET /api/projects/{project_id}/product_tours/{id}/ #
PUT /api/projects/{project_id}/product_tours/{id}/ #
PATCH /api/projects/{project_id}/product_tours/{id}/ #
DELETE /api/projects/{project_id}/product_tours/{id}/ #
DELETE /api/projects/{project_id}/product_tours/{id}/discard_draft/ #
PATCH /api/projects/{project_id}/product_tours/{id}/draft/ #
GET /api/projects/{project_id}/product_tours/{id}/draft_status/ #
POST /api/projects/{project_id}/product_tours/{id}/generate/ #
POST /api/projects/{project_id}/product_tours/{id}/publish_draft/ #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/posthog-product-tours-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

posthog-product-tours-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: PostHog actions Product Tours API
  version: 1.0.0
  description: ''
servers:
- url: https://app.posthog.com/api
  description: Base URL declared by the provider in apis.yml (roadmap#122).
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:
    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
          - 'null'
          additionalProperties: true
          description: Return the targeting flag filters, excluding the base exclusion properties.
          readOnly: true
        content: {}
        draft_content:
          readOnly: true
        has_draft:
          type: boolean
          readOnly: true
        auto_launch:
          type: boolean
        start_date:
          type:
          - string
          - 'null'
          format: date-time
        end_date:
          type:
          - string
          - 'null'
          format: date-time
        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
    UserBasic:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        uuid:
          type: string
          format: uuid
          readOnly: true
        distinct_id:
          type:
          - string
          - 'null'
          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
          - 'null'
        hedgehog_config:
          type:
          - object
          - 'null'
          additionalProperties: true
          readOnly: true
        role_at_organization:
          oneOf:
          - $ref: '#/components/schemas/RoleAtOrganizationEnum'
          - $ref: '#/components/schemas/BlankEnum'
          - $ref: '#/components/schemas/NullEnum'
      required:
      - email
      - hedgehog_config
      - id
      - uuid
    ProductTourSerializerCreateUpdateOnlyCreationContextEnum:
      enum:
      - app
      - toolbar
      type: string
      description: '* `app` - app

        * `toolbar` - toolbar'
    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
          - 'null'
          writeOnly: true
        targeting_flag_filters:
          writeOnly: true
        content: {}
        auto_launch:
          type: boolean
        start_date:
          type:
          - string
          - 'null'
          format: date-time
        end_date:
          type:
          - string
          - 'null'
          format: date-time
        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
    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
          - 'null'
          writeOnly: true
        targeting_flag_filters:
          writeOnly: true
        content: {}
        auto_launch:
          type: boolean
        start_date:
          type:
          - string
          - 'null'
          format: date-time
        end_date:
          type:
          - string
          - 'null'
          format: date-time
        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'
    GenerateRequest:
      type: object
      properties:
        title:
          type: string
          default: ''
        goal:
          type: string
          default: ''
        steps:
          type: array
          items:
            type: object
            additionalProperties: true
    BlankEnum:
      enum:
      - ''
    NullEnum:
      enum:
      - null
    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
    EvaluationRuntimeEnum:
      enum:
      - server
      - client
      - all
      type: string
      description: '* `server` - Server

        * `client` - Client

        * `all` - All'
    GenerateResponse:
      type: object
      properties:
        steps:
          type: array
          items:
            $ref: '#/components/schemas/GenerateStepResponse'
      required:
      - steps
    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
          - 'null'
        has_encrypted_payloads:
          type:
          - boolean
          - 'null'
        version:
          type:
          - integer
          - 'null'
          maximum: 2147483647
          minimum: -2147483648
        evaluation_runtime:
          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:
          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
    PaginatedProductTourList:
      type: object
      required:
      - count
      - results
      properties:
        count:
          type: integer
          example: 123
        next:
          type:
          - string
          - 'null'
          format: uri
          example: http://api.example.org/accounts/?offset=400&limit=100
        previous:
          type:
          - string
          - 'null'
          format: uri
          example: http://api.example.org/accounts/?offset=200&limit=100
        results:
          type: array
          items:
            $ref: '#/components/schemas/ProductTour'
    GenerateStepResponse:
      type: object
      properties:
        step_id:
          type: string
        title:
          type: string
        description:
          type: string
      required:
      - description
      - step_id
      - title
  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