Produktly docs
Product tours

Create a product tour

POST
/product-tours

Creates the tour as a draft. Pass active: true to publish immediately — the tour must have at least one step and targeting set, otherwise it stays a draft and the response note explains why. The response includes a dashboardUrl for reviewing the tour in the builder.

Authorization

BearerAuth
AuthorizationBearer <token>

Use an API key from the Produktly dashboard → Settings → API keys.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/product-tours" \  -H "Content-Type: application/json" \  -d '{    "name": "Onboarding tour",    "steps": [      {        "type": "welcome",        "title": "Welcome to Acme",        "content": "Here is a two minute tour of the basics."      },      {        "type": "highlight",        "domQuery": "[data-tour=\'inbox\']",        "title": "Your inbox",        "content": "New messages land here.",        "direction": "bottom"      }    ],    "targeting": {      "showOnAllPages": true    },    "settings": {      "tourStart": "immediate",      "trigger": "once"    },    "active": true  }'
{  "id": 0,  "name": "string",  "active": true,  "createdAt": "2019-08-24T14:15:22Z",  "updatedAt": "2019-08-24T14:15:22Z",  "folderId": 0,  "themeId": 0,  "steps": [    {      "type": "highlight",      "id": "string"    }  ],  "settings": {    "tourStart": "minified",    "startDelay": 0,    "trigger": "once",    "saveProgress": true,    "hideBeacon": true,    "beaconPosition": "bottom-right",    "multiPageEnabled": true,    "timeout": 1,    "allowClosingTour": true,    "closeOnOutsideClick": true,    "themeColor": "string",    "textColor": "string",    "nextBtnText": "string",    "backBtnText": "string",    "finishBtnText": "string",    "startTourBtnText": "string",    "continueTourBtnText": "string",    "filterType": "string"  },  "rules": [    {      "type": "string",      "comparisonOperator": "string",      "value": null,      "userSegmentId": 0    }  ],  "ruleLogicalOperator": "string",  "dashboardUrl": "string",  "note": "string"}