PostHog Product Tours API
The product_tours API from PostHog — 7 operation(s) for product_tours.
The product_tours API from PostHog — 7 operation(s) for product_tours.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/posthog-product-tours-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: PostHog 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
summary: Product tours list
x-summary-source: derived
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
summary: Product tours create
x-summary-source: derived
/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: []
summary: Product tours retrieve
x-summary-source: derived
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: []
summary: Product tours update
x-summary-source: derived
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: []
summary: Product tours partial update
x-summary-source: derived
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: []
summary: Product tours destroy
x-summary-source: derived
/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: []
summary: Product tours discard draft destroy
x-summary-source: derived
/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: []
summary: Product tours draft partial update
x-summary-source: derived
/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: []
summary: Product tours draft status retrieve
x-summary-source: derived
/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: []
summary: Product tours generate create
x-summary-source: derived
/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: []
summary: Product tours publish draft create
x-summary-source: derived
components:
schemas:
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'
NullEnum:
enum:
- null
BucketingIdentifierEnum:
enum:
- distinct_id
- device_id
type: string
description: '* `distinct_id` - User ID (default)
* `device_id` - Device ID'
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
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
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'
BlankEnum:
enum:
- ''
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
GenerateStepResponse:
type: object
properties:
step_id:
type: string
title:
type: string
description:
type: string
required:
- description
- step_id
- title
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
DraftStatusResponse:
type: object
properties:
updated_at:
type: string
format: date-time
has_draft:
type: boolean
required:
- has_draft
- updated_at
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'
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
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