diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000..4cbe0750c0 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,32 @@ +# Mintlify Starter Kit + +Click on `Use this template` to copy the Mintlify starter kit. The starter kit contains examples including + +- Guide pages +- Navigation +- Customizations +- API Reference pages +- Use of popular components + +### Development + +Install the [Mintlify CLI](https://www.npmjs.com/package/mintlify) to preview the documentation changes locally. To install, use the following command + +``` +npm i -g mintlify +``` + +Run the following command at the root of your documentation (where mint.json is) + +``` +mintlify dev +``` + +### Publishing Changes + +Install our Github App to auto propagate changes from your repo to your deployment. Changes will be deployed to production automatically after pushing to the default branch. Find the link to install on your dashboard. + +#### Troubleshooting + +- Mintlify dev isn't running - Run `mintlify install` it'll re-install dependencies. +- Page loads as a 404 - Make sure you are running in a folder with `mint.json` diff --git a/docs/api-reference/client-api->-display/create-display.mdx b/docs/api-reference/client-api->-display/create-display.mdx new file mode 100644 index 0000000000..8cccf9b695 --- /dev/null +++ b/docs/api-reference/client-api->-display/create-display.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /api/v1/client/{environmentId}/displays +--- \ No newline at end of file diff --git a/docs/api-reference/client-api->-display/update-display.mdx b/docs/api-reference/client-api->-display/update-display.mdx new file mode 100644 index 0000000000..b44b599237 --- /dev/null +++ b/docs/api-reference/client-api->-display/update-display.mdx @@ -0,0 +1,3 @@ +--- +openapi: put /api/v1/client/{environmentId}/displays/{displayId} +--- \ No newline at end of file diff --git a/docs/api-reference/client-api->-people/create-person.mdx b/docs/api-reference/client-api->-people/create-person.mdx new file mode 100644 index 0000000000..bcbbd5cde4 --- /dev/null +++ b/docs/api-reference/client-api->-people/create-person.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /api/v1/client/{environmentId}/people +--- \ No newline at end of file diff --git a/docs/api-reference/client-api->-people/update-person.mdx b/docs/api-reference/client-api->-people/update-person.mdx new file mode 100644 index 0000000000..7fc45fc7cf --- /dev/null +++ b/docs/api-reference/client-api->-people/update-person.mdx @@ -0,0 +1,3 @@ +--- +openapi: put /api/v1/client/{environmentId}/people/{userId}/attributes +--- \ No newline at end of file diff --git a/docs/api-reference/client-api->-response/create-response.mdx b/docs/api-reference/client-api->-response/create-response.mdx new file mode 100644 index 0000000000..9d2883831d --- /dev/null +++ b/docs/api-reference/client-api->-response/create-response.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /api/v1/client/{environmentId}/responses +--- \ No newline at end of file diff --git a/docs/api-reference/client-api->-response/update-response.mdx b/docs/api-reference/client-api->-response/update-response.mdx new file mode 100644 index 0000000000..1f497c1ebb --- /dev/null +++ b/docs/api-reference/client-api->-response/update-response.mdx @@ -0,0 +1,3 @@ +--- +openapi: put /api/v1/client/responses/{responseId} +--- \ No newline at end of file diff --git a/docs/api-reference/default/health-check.mdx b/docs/api-reference/default/health-check.mdx new file mode 100644 index 0000000000..f27caa880e --- /dev/null +++ b/docs/api-reference/default/health-check.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /health +--- \ No newline at end of file diff --git a/docs/api-reference/introduction.mdx b/docs/api-reference/introduction.mdx new file mode 100644 index 0000000000..4bad907b79 --- /dev/null +++ b/docs/api-reference/introduction.mdx @@ -0,0 +1,14 @@ +--- +title: "API v1.0.0" +icon: "code-compare" +--- + +Formbricks offers two types of APIs: the **Public Client API** and the **Management API**. Each API serves a different purpose, has *different* authentication requirements, and provides access to different data and settings. + +### API Key Setup + +Checkout the [API Key Setup](/development/rest-api) to access the Management APIs with an API Key. + +If you’ve forked the collection and are running it, update the `apiKey` and `environmentId` in the collection variables with your values. We also provide post-run scripts to help auto-assign variables when running scripts. + +Need more help? Visit our [Website](https://formbricks.com/) or join our [Discord](https://formbricks.com/discord)! diff --git a/docs/api-reference/management-api->-action-class/create-action-class.mdx b/docs/api-reference/management-api->-action-class/create-action-class.mdx new file mode 100644 index 0000000000..e5cb02edcd --- /dev/null +++ b/docs/api-reference/management-api->-action-class/create-action-class.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /api/v1/management/action-classes +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-action-class/delete-action-class.mdx b/docs/api-reference/management-api->-action-class/delete-action-class.mdx new file mode 100644 index 0000000000..c497772b10 --- /dev/null +++ b/docs/api-reference/management-api->-action-class/delete-action-class.mdx @@ -0,0 +1,3 @@ +--- +openapi: delete /api/v1/management/action-classes/{actionClassId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-action-class/get-action-class-by-id.mdx b/docs/api-reference/management-api->-action-class/get-action-class-by-id.mdx new file mode 100644 index 0000000000..0a7b1ddc59 --- /dev/null +++ b/docs/api-reference/management-api->-action-class/get-action-class-by-id.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/action-classes/{actionClassId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-action-class/get-all-action-classes.mdx b/docs/api-reference/management-api->-action-class/get-all-action-classes.mdx new file mode 100644 index 0000000000..c0cd661f70 --- /dev/null +++ b/docs/api-reference/management-api->-action-class/get-all-action-classes.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/action-classes +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-attribute-class/create-attribute-class.mdx b/docs/api-reference/management-api->-attribute-class/create-attribute-class.mdx new file mode 100644 index 0000000000..8a5ce3eecb --- /dev/null +++ b/docs/api-reference/management-api->-attribute-class/create-attribute-class.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /api/v1/management/attribute-classes +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-attribute-class/delete-attribute-class.mdx b/docs/api-reference/management-api->-attribute-class/delete-attribute-class.mdx new file mode 100644 index 0000000000..bcc9d7ba24 --- /dev/null +++ b/docs/api-reference/management-api->-attribute-class/delete-attribute-class.mdx @@ -0,0 +1,3 @@ +--- +openapi: delete /api/v1/management/attribute-classes/{attributeClassId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-attribute-class/get-all-attribute-classes.mdx b/docs/api-reference/management-api->-attribute-class/get-all-attribute-classes.mdx new file mode 100644 index 0000000000..223ff39ea5 --- /dev/null +++ b/docs/api-reference/management-api->-attribute-class/get-all-attribute-classes.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/attribute-classes +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-attribute-class/get-attribute-class-by-id.mdx b/docs/api-reference/management-api->-attribute-class/get-attribute-class-by-id.mdx new file mode 100644 index 0000000000..d17af86983 --- /dev/null +++ b/docs/api-reference/management-api->-attribute-class/get-attribute-class-by-id.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/attribute-classes/{attributeClassId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-contact-attribute-keys/get-all-contact-attribute-keys.mdx b/docs/api-reference/management-api->-contact-attribute-keys/get-all-contact-attribute-keys.mdx new file mode 100644 index 0000000000..02aebc3a5b --- /dev/null +++ b/docs/api-reference/management-api->-contact-attribute-keys/get-all-contact-attribute-keys.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/contact-attribute-keys +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-contact-attribute-keys/get-contact-attribute-key-by-id.mdx b/docs/api-reference/management-api->-contact-attribute-keys/get-contact-attribute-key-by-id.mdx new file mode 100644 index 0000000000..d40dea3305 --- /dev/null +++ b/docs/api-reference/management-api->-contact-attribute-keys/get-contact-attribute-key-by-id.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/contact-attribute-keys/{contactAttributeKeyId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-contact-attributes/get-all-contact-attributes.mdx b/docs/api-reference/management-api->-contact-attributes/get-all-contact-attributes.mdx new file mode 100644 index 0000000000..827ae0c732 --- /dev/null +++ b/docs/api-reference/management-api->-contact-attributes/get-all-contact-attributes.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/contact-attributes +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-contacts/get-all-contacts.mdx b/docs/api-reference/management-api->-contacts/get-all-contacts.mdx new file mode 100644 index 0000000000..49aa571bfe --- /dev/null +++ b/docs/api-reference/management-api->-contacts/get-all-contacts.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/contacts +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-contacts/get-contact-by-id.mdx b/docs/api-reference/management-api->-contacts/get-contact-by-id.mdx new file mode 100644 index 0000000000..5b9317c171 --- /dev/null +++ b/docs/api-reference/management-api->-contacts/get-contact-by-id.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/contacts/{contactId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-me/me.mdx b/docs/api-reference/management-api->-me/me.mdx new file mode 100644 index 0000000000..d350ff64e9 --- /dev/null +++ b/docs/api-reference/management-api->-me/me.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/me +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-people/delete-person.mdx b/docs/api-reference/management-api->-people/delete-person.mdx new file mode 100644 index 0000000000..dfef949e5f --- /dev/null +++ b/docs/api-reference/management-api->-people/delete-person.mdx @@ -0,0 +1,3 @@ +--- +openapi: delete /api/v1/management/people/{personId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-people/get-all-persons.mdx b/docs/api-reference/management-api->-people/get-all-persons.mdx new file mode 100644 index 0000000000..d61731d720 --- /dev/null +++ b/docs/api-reference/management-api->-people/get-all-persons.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/people +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-people/get-person-by-id.mdx b/docs/api-reference/management-api->-people/get-person-by-id.mdx new file mode 100644 index 0000000000..ad2654902a --- /dev/null +++ b/docs/api-reference/management-api->-people/get-person-by-id.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/people/{personId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-response/create-response.mdx b/docs/api-reference/management-api->-response/create-response.mdx new file mode 100644 index 0000000000..ecd48d2cb7 --- /dev/null +++ b/docs/api-reference/management-api->-response/create-response.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /api/v1/management/responses +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-response/delete-response.mdx b/docs/api-reference/management-api->-response/delete-response.mdx new file mode 100644 index 0000000000..07448abec4 --- /dev/null +++ b/docs/api-reference/management-api->-response/delete-response.mdx @@ -0,0 +1,3 @@ +--- +openapi: delete /api/v1/management/responses/{responseId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-response/get-response-by-id.mdx b/docs/api-reference/management-api->-response/get-response-by-id.mdx new file mode 100644 index 0000000000..e5edea1bb8 --- /dev/null +++ b/docs/api-reference/management-api->-response/get-response-by-id.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/responses/{responseId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-response/get-survey-responses.mdx b/docs/api-reference/management-api->-response/get-survey-responses.mdx new file mode 100644 index 0000000000..ecb2e3a297 --- /dev/null +++ b/docs/api-reference/management-api->-response/get-survey-responses.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/responses +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-response/update-response.mdx b/docs/api-reference/management-api->-response/update-response.mdx new file mode 100644 index 0000000000..d718ad5ff7 --- /dev/null +++ b/docs/api-reference/management-api->-response/update-response.mdx @@ -0,0 +1,3 @@ +--- +openapi: put /api/v1/management/responses/{responseId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-survey/create-survey.mdx b/docs/api-reference/management-api->-survey/create-survey.mdx new file mode 100644 index 0000000000..de42dbe71b --- /dev/null +++ b/docs/api-reference/management-api->-survey/create-survey.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /api/v1/management/surveys +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-survey/delete-survey.mdx b/docs/api-reference/management-api->-survey/delete-survey.mdx new file mode 100644 index 0000000000..a62a441760 --- /dev/null +++ b/docs/api-reference/management-api->-survey/delete-survey.mdx @@ -0,0 +1,3 @@ +--- +openapi: delete /api/v1/management/surveys/{surveyId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-survey/get-all-surveys.mdx b/docs/api-reference/management-api->-survey/get-all-surveys.mdx new file mode 100644 index 0000000000..db00cffbaf --- /dev/null +++ b/docs/api-reference/management-api->-survey/get-all-surveys.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/surveys +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-survey/get-singleuse-links.mdx b/docs/api-reference/management-api->-survey/get-singleuse-links.mdx new file mode 100644 index 0000000000..8a661c1bf0 --- /dev/null +++ b/docs/api-reference/management-api->-survey/get-singleuse-links.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/surveys/{surveyId}/singleUseIds +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-survey/get-survey-by-id.mdx b/docs/api-reference/management-api->-survey/get-survey-by-id.mdx new file mode 100644 index 0000000000..0851f1652e --- /dev/null +++ b/docs/api-reference/management-api->-survey/get-survey-by-id.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/management/surveys/{surveyId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-survey/update-survey.mdx b/docs/api-reference/management-api->-survey/update-survey.mdx new file mode 100644 index 0000000000..57828e0943 --- /dev/null +++ b/docs/api-reference/management-api->-survey/update-survey.mdx @@ -0,0 +1,3 @@ +--- +openapi: put /api/v1/management/surveys/{surveyId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-webhook/create-webhook.mdx b/docs/api-reference/management-api->-webhook/create-webhook.mdx new file mode 100644 index 0000000000..47314527bc --- /dev/null +++ b/docs/api-reference/management-api->-webhook/create-webhook.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /api/v1/webhooks +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-webhook/delete-webhook.mdx b/docs/api-reference/management-api->-webhook/delete-webhook.mdx new file mode 100644 index 0000000000..c3af97896e --- /dev/null +++ b/docs/api-reference/management-api->-webhook/delete-webhook.mdx @@ -0,0 +1,3 @@ +--- +openapi: delete /api/v1/webhooks/{webhookId} +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-webhook/get-all-webhooks.mdx b/docs/api-reference/management-api->-webhook/get-all-webhooks.mdx new file mode 100644 index 0000000000..aca5c7fce5 --- /dev/null +++ b/docs/api-reference/management-api->-webhook/get-all-webhooks.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/webhooks +--- \ No newline at end of file diff --git a/docs/api-reference/management-api->-webhook/get-webhook.mdx b/docs/api-reference/management-api->-webhook/get-webhook.mdx new file mode 100644 index 0000000000..e584e3abb3 --- /dev/null +++ b/docs/api-reference/management-api->-webhook/get-webhook.mdx @@ -0,0 +1,3 @@ +--- +openapi: get /api/v1/webhooks/{webhookId} +--- \ No newline at end of file diff --git a/docs/api-reference/openapi.json b/docs/api-reference/openapi.json new file mode 100644 index 0000000000..9345c24646 --- /dev/null +++ b/docs/api-reference/openapi.json @@ -0,0 +1,7797 @@ +{ + "info": { + "description": "Formbricks offers two types of APIs: the **Public Client API** and the **Management API**. Each API serves a different purpose, has different authentication requirements, and provides access to different data and settings.\n\nCheckout the [API Key Setup](https://formbricks.com/docs/api/management/api-key-setup) - to access the Management APIs wit an API Key.\n\n> If you have forked the collection & running it, we recommend you to atleast update `apiKey` & `environmentId` the Collection variables as per your values! We also have a lot of post-run scripts written to help you navigate through auto-assigning variables when running scripts. \n \n\nNeed more help, visit our: [Website](https://formbricks.com) or join our [Discord](https://formbricks.com/discord)!", + "title": "API Documentation", + "version": "1.0.0" + }, + "openapi": "3.0.0", + "paths": { + "/api/v1/client/responses/{responseId}": { + "put": { + "description": "Update an existing response for example when you want to mark a response as finished or you want to change an existing response's value.", + "parameters": [ + { + "in": "path", + "name": "responseId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "data": { + "hs8yd14l9h8u353tjmv6rzawqqq": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": true + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": {} + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 08:09:19 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "nonexistentid", + "resource_type": "Response" + }, + "message": "Response not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 08:13:50 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Update Response", + "tags": ["Client API > Response"] + } + }, + "/api/v1/client/{environmentId}/contacts/{userId}/attributes": { + "put": { + "description": "Update a contact's attributes in Formbricks to keep them in sync with your app or when you want to set a custom attribute in Formbricks.", + "parameters": [ + { + "in": "path", + "name": "environmentId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "userId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "attributes": { + "Created From": "API" + } + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "example-0": { + "summary": "Success (New Attributes)", + "value": { + "data": { + "changed": true, + "message": "The person was successfully updated." + } + } + }, + "example-1": { + "summary": "Success (Same Attributes)", + "value": { + "data": { + "changed": false, + "message": "No updates were necessary; the person is already up to date." + } + } + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:42:32 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "500": { + "content": { + "application/json": { + "example": { + "code": "internal_server_error", + "details": {}, + "message": "Unable to complete request: Expected property name or '}' in JSON at position 29" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Internal Server Error", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:43:29 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Update Contact (Attributes)", + "tags": ["Client API > Contacts"] + } + }, + "/api/v1/client/{environmentId}/displays": { + "post": { + "description": "Create a new display for a valid survey ID. If a userId is passed, the display is linked to the user.", + "parameters": [ + { + "in": "path", + "name": "environmentId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "surveyId": "{{surveyId}}", + "userId": "{{userId}} (optional)" + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "id": "clvc1z8200006494jgnds7ort" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:16:55 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "500": { + "content": { + "application/json": { + "example": { + "code": "internal_server_error", + "details": {}, + "message": "\nInvalid `prisma.display.create()` invocation:\n\n\nAn operation failed because it depends on one or more records that were required but not found. No 'Survey' record(s) (needed to inline the relation on 'Display' record(s)) was found for a nested connect on one-to-many relation 'DisplayToSurvey'." + }, + "schema": { + "type": "object" + } + } + }, + "description": "Internal Server Error", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "example": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version", + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "example": "GET,OPTIONS,PATCH,DELETE,POST,PUT", + "type": "string" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:12:51 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Create Display", + "tags": ["Client API > Display"] + } + }, + "/api/v1/client/{environmentId}/displays/{displayId}": { + "put": { + "description": "Update an Display for a user. A use case can be when a user submits a response & you want to link it to an existing display.", + "parameters": [ + { + "in": "path", + "name": "environmentId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "displayId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "responseId": "{{responseId}} (optional)", + "userId": "{{userId}} (optional)" + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": {} + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:26:39 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "500": { + "content": { + "application/json": { + "example": { + "code": "internal_server_error", + "details": {}, + "message": "Person with ID 2 not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Internal Server Error", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:26:06 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Update Display", + "tags": ["Client API > Display"] + } + }, + "/api/v1/client/{environmentId}/environment": { + "get": { + "description": "Retrieves the environment state to be used in Formbricks SDKs", + "parameters": [ + { + "description": "The ID of the environment", + "in": "path", + "name": "environmentId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "properties": { + "actionClasses": { + "example": [ + { + "id": "cm6orqtdd000b19wjec82bpp2", + "key": null, + "name": "New Session", + "noCodeConfig": null, + "type": "automatic" + }, + { + "id": "cm6oryki3000i19wj860utcnn", + "key": "code", + "name": "code action", + "noCodeConfig": null, + "type": "code" + } + ], + "items": { + "properties": { + "id": { + "example": "cm6orqtdd000b19wjec82bpp2", + "type": "string" + }, + "key": { + "example": null, + "nullable": true, + "type": "string" + }, + "name": { + "example": "New Session", + "type": "string" + }, + "noCodeConfig": { + "example": null, + "nullable": true, + "type": "object" + }, + "type": { + "example": "automatic", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "project": { + "properties": { + "clickOutsideClose": { + "example": true, + "type": "boolean" + }, + "darkOverlay": { + "example": false, + "type": "boolean" + }, + "id": { + "example": "cm6orqtcl000319wj9wb7dltl", + "type": "string" + }, + "inAppSurveyBranding": { + "example": true, + "type": "boolean" + }, + "placement": { + "example": "bottomRight", + "type": "string" + }, + "recontactDays": { + "example": 7, + "type": "integer" + }, + "styling": { + "properties": { + "allowStyleOverwrite": { + "example": true, + "type": "boolean" + }, + "brandColor": { + "properties": { + "light": { + "example": "#64748b", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "surveys": { + "description": "List of surveys in the environment", + "items": { + "properties": { + "autoClose": { + "example": null, + "type": "boolean" + }, + "delay": { + "example": 0, + "type": "integer" + }, + "displayLimit": { + "example": 5, + "type": "integer" + }, + "displayOption": { + "example": "respondMultiple", + "type": "string" + }, + "displayPercentage": { + "example": null, + "type": "integer" + }, + "endings": { + "items": { + "properties": { + "buttonLabel": { + "example": "Create your own Survey", + "type": "string" + }, + "buttonLink": { + "example": "https://formbricks.com", + "type": "string" + }, + "headline": { + "example": "Thank you!", + "type": "string" + }, + "id": { + "example": "o729tod5klhix62njmk262dk", + "type": "string" + }, + "subheader": { + "example": "We appreciate your feedback.", + "type": "string" + }, + "type": { + "example": "endScreen", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hiddenFields": { + "properties": { + "enabled": { + "example": true, + "type": "boolean" + }, + "fieldIds": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "id": { + "example": "cm6orr901000g19wjwwa690eo", + "type": "string" + }, + "languages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "example": "Start from scratch", + "type": "string" + }, + "questions": { + "items": { + "properties": { + "buttonLabel": { + "example": "Next", + "type": "string" + }, + "charLimit": { + "example": false, + "type": "boolean" + }, + "headline": { + "example": "What would you like to know?", + "type": "string" + }, + "id": { + "example": "dd5c8w2a4ttkbnjb9nwhtb17", + "type": "string" + }, + "inputType": { + "example": "text", + "type": "string" + }, + "placeholder": { + "example": "Type your answer here...", + "type": "string" + }, + "required": { + "example": true, + "type": "boolean" + }, + "type": { + "example": "openText", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "recontactDays": { + "example": 0, + "type": "integer" + }, + "segment": { + "properties": { + "createdAt": { + "example": "2025-02-03T08:08:33.377Z", + "type": "string" + }, + "description": { + "example": null, + "type": "string" + }, + "filters": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "example": "cm6orr90h000h19wj1lnwoxwg", + "type": "string" + }, + "isPrivate": { + "example": true, + "type": "boolean" + }, + "title": { + "example": "cm6orr901000g19wjwwa690eo", + "type": "string" + }, + "updatedAt": { + "example": "2025-02-03T08:08:33.377Z", + "type": "string" + } + }, + "type": "object" + }, + "showLanguageSwitch": { + "example": null, + "type": "boolean" + }, + "status": { + "example": "inProgress", + "type": "string" + }, + "styling": { + "example": null, + "type": "object" + }, + "triggers": { + "items": { + "properties": { + "actionClass": { + "example": "code action", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "example": "app", + "type": "string" + }, + "variables": { + "items": { + "type": "string" + }, + "type": "array" + }, + "welcomeCard": { + "properties": { + "buttonLabel": { + "example": "Next", + "type": "string" + }, + "enabled": { + "example": false, + "type": "boolean" + }, + "headline": { + "example": "Welcome!", + "type": "string" + }, + "html": { + "example": "Thanks for providing your feedback - let's go!", + "type": "string" + }, + "showResponseCount": { + "example": false, + "type": "boolean" + }, + "timeToFinish": { + "example": false, + "type": "boolean" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + }, + "description": "HTTP Status 200" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "example": "not_found", + "type": "string" + }, + "details": { + "properties": { + "resource_id": { + "example": "tpywklouw2p7tebdu4zv01an", + "type": "string" + }, + "resource_type": { + "example": "environment", + "type": "string" + } + }, + "type": "object" + }, + "message": { + "example": "Environment not found", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Not Found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "example": "internal_server_error", + "type": "string" + }, + "details": { + "type": "object" + }, + "message": { + "example": "Unable to complete request: Expected property name or '}' in JSON at position 29", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Internal Server Error" + } + }, + "summary": "Get Environment State", + "tags": ["Client API > Environment"] + } + }, + "/api/v1/client/{environmentId}/identify/contacts/{userId}": { + "get": { + "description": "Retrieves a contact's state including their segments, displays, responses and other tracking information. If the contact doesn't exist, it will be created.", + "parameters": [ + { + "description": "The ID of the environment", + "in": "path", + "name": "environmentId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The user ID to identify the contact", + "in": "path", + "name": "userId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": { + "displays": [ + { + "createdAt": "2024-04-23T08:59:37.550Z", + "surveyId": "pjogp5a1wyxon6umplmf49b8" + } + ], + "lastDisplayAt": "2024-04-23T08:59:37.550Z", + "responses": ["pjogp5a1wyxon6umplmf49b8"], + "segments": ["fi8f9oekza95wwszrptidivq", "zgwrv8eg7vfavdhzv1s0po1w"], + "userId": "user-123" + }, + "properties": { + "data": { + "properties": { + "displays": { + "description": "List of survey displays for this contact", + "items": { + "properties": { + "createdAt": { + "format": "date-time", + "type": "string" + }, + "surveyId": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "lastDisplayAt": { + "description": "Timestamp of the last survey display", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "responses": { + "description": "List of survey IDs the contact has responded to", + "items": { + "type": "string" + }, + "type": "array" + }, + "segments": { + "description": "List of segment IDs the contact belongs to", + "items": { + "type": "string" + }, + "type": "array" + }, + "userId": { + "description": "The user ID of the contact", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "example": "forbidden", + "type": "string" + }, + "message": { + "example": "User identification is only available for enterprise users.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "example": "not_found", + "type": "string" + }, + "details": { + "properties": { + "resource_id": { + "example": "tpywklouw2p7tebdu4zv01an", + "type": "string" + }, + "resource_type": { + "example": "environment", + "type": "string" + } + }, + "type": "object" + }, + "message": { + "example": "Environment not found", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Not Found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "example": "internal_server_error", + "type": "string" + }, + "details": { + "type": "object" + }, + "message": { + "example": "Unable to complete request: Expected property name or '}' in JSON at position 29", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Internal Server Error" + } + }, + "summary": "Get Contact State", + "tags": ["Client API > Contacts"] + } + }, + "/api/v1/client/{environmentId}/responses": { + "post": { + "description": "Create a response for a survey and it's fields with the user's responses. The userId & meta here is optional", + "parameters": [ + { + "in": "path", + "name": "environmentId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": false, + "meta": { + "action": "test action", + "source": "Postman API", + "url": "https://postman.com" + }, + "surveyId": "{{surveyId}}", + "userId": "{{userId}} (optional)" + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "id": "clvc3aool000p494jzjuukfzu" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:53:50 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "bad_request", + "details": { + "surveyId": "Invalid cuid2" + }, + "message": "Fields are missing or incorrectly formatted" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Bad Request", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:55:50 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "hs8yd14l9h8u353tjmv6rzaw", + "resource_type": "Survey" + }, + "message": "Survey not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:56:29 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Create Response", + "tags": ["Client API > Response"] + } + }, + "/api/v1/client/{environmentId}/user": { + "post": { + "description": "Endpoint for creating or identifying a user within the specified environment. If the user already exists, this will identify them and potentially update user attributes. If they don't exist, it will create a new user.\n", + "parameters": [ + { + "in": "path", + "name": "environmentId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "example": { + "attributes": { + "plan": "free" + }, + "userId": "hello-user" + }, + "schema": { + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "properties": { + "state": { + "properties": { + "data": { + "properties": { + "displays": { + "items": { + "properties": { + "createdAt": { + "example": "2025-02-03T11:23:13.050Z", + "type": "string" + }, + "surveyId": { + "example": "cm6orqtdd000a19wjhnbces5s", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "lastDisplayAt": { + "example": "2025-02-03T11:23:13.050Z", + "type": "string" + }, + "responses": { + "items": { + "example": "cm6orqtdd000a19wjhnbces5s", + "type": "string" + }, + "type": "array" + }, + "segments": { + "items": { + "example": "cm6onrezn000hw2ahcokiz41v", + "type": "string" + }, + "type": "array" + }, + "userId": { + "example": "hello-user", + "type": "string" + } + }, + "type": "object" + }, + "expiresAt": { + "example": "2025-02-03T11:23:13.050Z", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:36:43 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "bad_request", + "message": "userId is required" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Bad Request", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:36:43 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "f16ttdvtkx85k5m4s561ruqj", + "resource_type": "Environment" + }, + "message": "Environment not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:56:29 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "500": { + "content": { + "application/json": { + "example": { + "code": "internal_server_error", + "details": {}, + "message": "An unexpected error occurred" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Internal Server Error", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "example": "true", + "type": "boolean" + } + }, + "Access-Control-Allow-Origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:56:29 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Create or Identify User", + "tags": ["Client API > User"] + } + }, + "/api/v1/management/action-classes": { + "get": { + "description": "Fetches all the action classes available in the environment", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-Api-Key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "createdAt": "2024-04-09T04:53:29.577Z", + "description": "Gets fired when a new session is created", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clurwouax000bzffxv3fqy6mt", + "name": "New Session", + "noCodeConfig": null, + "type": "automatic", + "updatedAt": "2024-04-09T04:53:29.577Z" + }, + { + "createdAt": "2024-04-09T04:53:29.577Z", + "description": "A user on Desktop leaves the website with the cursor.", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clurwouax000czffx4wj0qldi", + "name": "Exit Intent (Desktop)", + "noCodeConfig": null, + "type": "automatic", + "updatedAt": "2024-04-09T04:53:29.577Z" + }, + { + "createdAt": "2024-04-09T04:53:29.577Z", + "description": "A user scrolled 50% of the current page", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clurwouax000dzffx3dfxc91d", + "name": "50% Scroll", + "noCodeConfig": null, + "type": "automatic", + "updatedAt": "2024-04-09T04:53:29.577Z" + }, + { + "createdAt": "2024-04-22T08:59:01.144Z", + "description": "hhehe", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvaq6nx40000mhqfuu74rv92", + "name": "new_action_v2", + "noCodeConfig": null, + "type": "code", + "updatedAt": "2024-04-22T09:03:55.509Z" + }, + { + "createdAt": "2024-04-22T09:04:30.756Z", + "description": null, + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvaqdq8z000bmhqfu0km5rv4", + "name": "new_action_v20", + "noCodeConfig": null, + "type": "code", + "updatedAt": "2024-04-22T09:04:30.756Z" + }, + { + "createdAt": "2024-04-23T07:11:17.032Z", + "description": null, + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc1ryuf0001494jc8oesfwl", + "name": "new_action_v1", + "noCodeConfig": null, + "type": "code", + "updatedAt": "2024-04-23T07:11:17.032Z" + } + ] + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 08:47:03 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "401": { + "content": { + "application/json": { + "example": { + "code": "not_authenticated", + "details": { + "x-Api-Key": "Header not provided or API Key invalid" + }, + "message": "Not authenticated" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Unauthorized", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 08:48:01 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get All Action Classes", + "tags": ["Management API > Action Class"] + }, + "post": { + "description": "Create Action Class from the UI or from the API! You can read more about them [here](https://formbricks.com/docs/in-app-surveys/actions).", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "description": "From API Docs (optional)", + "environmentId": "{{environmentId}}", + "name": "My Action from Postman", + "noCodeConfig": { + "innerHtml": { + "value": "sign-up" + }, + "type": "innerHtml" + }, + "type": "code" + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-04-23T08:58:47.507Z", + "description": null, + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc5m82c000z494jkvnw1gh0", + "name": "My Action from Postman", + "noCodeConfig": null, + "type": "code", + "updatedAt": "2024-04-23T08:58:47.507Z" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 08:58:47 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "bad_request", + "details": {}, + "message": "Database error when creating an action for environment clurwouax000azffxt7n5unn3" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Bad Request", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 08:57:55 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Create Action Class", + "tags": ["Management API > Action Class"] + } + }, + "/api/v1/management/action-classes/{actionClassId}": { + "delete": { + "description": "Deletes an existing action class", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "actionClassId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-04-23T08:58:47.507Z", + "description": null, + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc5m82c000z494jkvnw1gh0", + "name": "My Action from Postman", + "noCodeConfig": null, + "type": "code", + "updatedAt": "2024-04-23T08:58:47.507Z" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 08:59:13 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "bad_request", + "details": {}, + "message": "Automatic action classes cannot be deleted" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Bad Request", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 09:13:05 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "clvc5m82c000z494jkvnw1gh0", + "resource_type": "Action Class" + }, + "message": "Action Class not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 08:59:38 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Delete Action Class", + "tags": ["Management API > Action Class"] + }, + "get": { + "description": "Fetch an Action Class by it's ID", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-Api-Key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "actionClassId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-04-09T04:53:29.577Z", + "description": "Gets fired when a new session is created", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clurwouax000bzffxv3fqy6mt", + "name": "New Session", + "noCodeConfig": null, + "type": "automatic", + "updatedAt": "2024-04-09T04:53:29.577Z" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 09:03:25 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "clvc5m82c000z494jkvnw1gh0", + "resource_type": "Action Class" + }, + "message": "Action Class not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 09:01:09 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get Action Class by ID", + "tags": ["Management API > Action Class"] + } + }, + "/api/v1/management/attribute-classes": { + "get": { + "description": "Fetches all the available attribute classes", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "archived": false, + "createdAt": "2024-04-09T04:53:29.577Z", + "description": "The email of the person", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clurwouax000ezffxs7unemg2", + "name": "email", + "type": "automatic", + "updatedAt": "2024-04-09T04:53:29.577Z" + }, + { + "archived": false, + "createdAt": "2024-04-09T04:53:29.577Z", + "description": "The language used by the person", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clurwouax000fzffxv9rycait", + "name": "language", + "type": "automatic", + "updatedAt": "2024-04-09T04:53:29.577Z" + }, + { + "archived": false, + "createdAt": "2024-04-22T08:59:27.319Z", + "description": null, + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvaq78470004mhqfm0x3kasv", + "name": "Init Attribute 2", + "type": "code", + "updatedAt": "2024-04-22T08:59:27.319Z" + }, + { + "archived": false, + "createdAt": "2024-04-22T08:59:27.348Z", + "description": null, + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvaq78500005mhqfd8z2dnxq", + "name": "Init Attribute 1", + "type": "code", + "updatedAt": "2024-04-22T08:59:27.348Z" + }, + { + "archived": false, + "createdAt": "2024-04-23T07:41:05.917Z", + "description": null, + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2ub5p000l494j1xwrgvqe", + "name": "created_from", + "type": "code", + "updatedAt": "2024-04-23T07:41:05.917Z" + }, + { + "archived": false, + "createdAt": "2024-04-23T07:42:32.659Z", + "description": null, + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2w637000n494j4z3oyye3", + "name": "Created From", + "type": "code", + "updatedAt": "2024-04-23T07:42:32.659Z" + } + ] + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 09:14:46 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get All Attribute Classes", + "tags": ["Management API > Attribute Class"] + }, + "post": { + "description": "Create a new Attribute Class by passing in its type as well as the name! Now just use them in your app and pass this value with a user & it'll be associated with it.", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "environmentId": "{{environmentId}}", + "name": "My new Attribute", + "type": "code" + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "archived": false, + "createdAt": "2024-04-23T11:21:38.155Z", + "description": null, + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvcapx7v0000xz1zskcgf5k0", + "name": "My new Attribute", + "type": "code", + "updatedAt": "2024-04-23T11:21:38.155Z" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:21:38 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "bad_request", + "details": {}, + "message": "\nInvalid `prisma.attributeClass.create()` invocation:\n\n\nUnique constraint failed on the fields: (`name`,`environmentId`)" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Bad Request", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:22:39 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Create Attribute Class", + "tags": ["Management API > Attribute Class"] + } + }, + "/api/v1/management/attribute-classes/{attributeClassId}": { + "delete": { + "description": "Delete an attribute class by its ID. Please note that you currently cannot delete the \"automatic\" type of attributes. Please ignore them if you do not wish to utilise them.", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "attributeClassId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "archived": false, + "createdAt": "2024-04-22T08:59:27.319Z", + "description": null, + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvaq78470004mhqfm0x3kasv", + "name": "Init Attribute 2", + "type": "code", + "updatedAt": "2024-04-22T08:59:27.319Z" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 09:58:24 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "bad_request", + "details": {}, + "message": "Automatic Attribute Classes cannot be deleted" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Bad Request", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 09:57:48 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "clurwouax000ezffxs7unemg2s", + "resource_type": "Attribute Class" + }, + "message": "Attribute Class not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 09:57:29 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Delete Attribute Class", + "tags": ["Management API > Attribute Class"] + }, + "get": { + "description": "Fetches an Attribute Class by its ID", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "attributeClassId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "archived": false, + "createdAt": "2024-04-09T04:53:29.577Z", + "description": "The email of the person", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clurwouax000ezffxs7unemg2", + "name": "email", + "type": "automatic", + "updatedAt": "2024-04-09T04:53:29.577Z" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 09:15:25 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "clurwouax000ezffxs7unemg2s", + "resource_type": "Attribute Class" + }, + "message": "Attribute Class not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 09:15:59 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "500": { + "content": { + "application/json": { + "example": { + "code": "internal_server_error", + "details": {}, + "message": "Some error occurred" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Internal Server Error", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 09:15:37 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get Attribute Class by ID", + "tags": ["Management API > Attribute Class"] + } + }, + "/api/v1/management/contact-attribute-keys": { + "get": { + "description": "Retrieve a list of all contact attribute keys defined in the current environment", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "createdAt": "2024-11-07T12:25:48.589Z", + "description": "The email of the person", + "environmentId": "cm37a748d0008hbwhqvvuba23", + "id": "cm37a748d000ahbwhd5bbwc09", + "isUnique": true, + "key": "email", + "name": "email", + "type": "default", + "updatedAt": "2024-12-03T13:30:28.620Z" + } + ] + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:37:25 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get All Contact Attribute Keys", + "tags": ["Management API > Contact Attribute Keys"] + } + }, + "/api/v1/management/contact-attribute-keys/{contactAttributeKeyId}": { + "get": { + "description": "Retrieve a specific contact attribute key by its ID. This returns detailed information about how a particular attribute is defined in your environment.", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the contact attribute key to retrieve", + "in": "path", + "name": "contactAttributeKeyId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-11-07T12:25:48.589Z", + "description": "The email of the person", + "environmentId": "cm37a748d0008hbwhqvvuba23", + "id": "cm37a748d000ahbwhd5bbwc09", + "isUnique": true, + "key": "email", + "name": "email", + "type": "default", + "updatedAt": "2024-12-03T13:30:28.620Z" + } + }, + "schema": { + "properties": { + "data": { + "properties": { + "createdAt": { + "description": "Timestamp when the attribute key was created", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "Detailed description of what this attribute represents", + "type": "string" + }, + "environmentId": { + "description": "ID of the environment this attribute key belongs to", + "type": "string" + }, + "id": { + "description": "Unique identifier for the attribute key", + "type": "string" + }, + "isUnique": { + "description": "Whether this attribute must have unique values across contacts", + "type": "boolean" + }, + "key": { + "description": "The machine-readable identifier for the attribute", + "type": "string" + }, + "name": { + "description": "Human-readable name for the attribute", + "type": "string" + }, + "type": { + "description": "The type of attribute (e.g., \"default\")", + "type": "string" + }, + "updatedAt": { + "description": "Timestamp when the attribute key was last updated", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "cm37a748d000ahbwhd5bbwc09", + "resource_type": "ContactAttributeKey" + }, + "message": "Contact attribute key not found" + }, + "schema": { + "properties": { + "code": { + "example": "not_found", + "type": "string" + }, + "details": { + "properties": { + "resource_id": { + "type": "string" + }, + "resource_type": { + "example": "ContactAttributeKey", + "type": "string" + } + }, + "type": "object" + }, + "message": { + "example": "Contact attribute key not found", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get Contact Attribute Key by ID", + "tags": ["Management API > Contact Attribute Keys"] + } + }, + "/api/v1/management/contact-attributes": { + "get": { + "description": "Retrieve a list of all contact attributes in the current environment", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "attributeKeyId": "cm4jnsxxh00ukh3aq08gpdafw", + "contactId": "cm4jnsxcd00ufh3aqz1b6zox6", + "createdAt": "2024-12-11T08:59:38.309Z", + "id": "cm4jnsxxh00umh3aq76q08ah1", + "updatedAt": "2024-12-11T08:59:38.309Z", + "value": "eight" + } + ] + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:37:25 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get All Contact Attributes", + "tags": ["Management API > Contact Attributes"] + } + }, + "/api/v1/management/contacts": { + "get": { + "description": "Retrieve a list of all contacts for the current environment", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "createdAt": "2024-12-11T08:59:37.550Z", + "environmentId": "cm37a748d0001hbwhqvvuba23", + "id": "cm4jnsxcd012fh3aqz1b6zox6", + "updatedAt": "2024-12-11T08:59:37.550Z", + "userId": null + }, + { + "createdAt": "2024-12-12T12:09:46.859Z", + "environmentId": "cm37a748d0001hbwhqvvuba23", + "id": "cm4la1bhn12g5cr5qh8p6v874", + "updatedAt": "2024-12-12T12:09:46.859Z", + "userId": null + } + ] + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:37:25 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get All Contacts", + "tags": ["Management API > Contacts"] + } + }, + "/api/v1/management/contacts/{contactId}": { + "get": { + "description": "Retrieve a specific contact by its ID", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the contact to retrieve", + "in": "path", + "name": "contactId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-12-11T08:59:37.550Z", + "environmentId": "cm37a748d0008hbwhqvvuba23", + "id": "cm4jnsxcd00ufh3aqz1b6zox6", + "updatedAt": "2024-12-11T08:59:37.550Z", + "userId": null + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:37:25 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "cm4jnsxcd00ufh3aqz1b6zox6", + "resource_type": "Contact" + }, + "message": "Contact not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get Contact by ID", + "tags": ["Management API > Contacts"] + } + }, + "/api/v1/management/me": { + "get": { + "description": "Fetches the product associated with the passed API key", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "createdAt": "2024-04-09T04:53:29.577Z", + "id": "clurwouax000azffxt7n5unn3", + "product": { + "id": "clurwouaj0003zffx0hu6bonm", + "name": "My Product" + }, + "type": "production", + "updatedAt": "2024-04-09T14:14:49.256Z", + "widgetSetupCompleted": true + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:31:38 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Me", + "tags": ["Management API > Me"] + } + }, + "/api/v1/management/people": { + "get": { + "description": "Get all the identified people from Formbricks", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "attributes": { + "Init Attribute 1": "eight", + "language": "gu" + }, + "createdAt": "2024-04-22T08:59:26.959Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvaq77u70002mhqfih5bnk0i", + "updatedAt": "2024-04-22T08:59:26.959Z", + "userId": "THIS-IS-A-VERY-LONG-USER-ID-FOR-TESTING" + }, + { + "attributes": {}, + "createdAt": "2024-04-23T07:12:44.928Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc1tuo00003494jnz64wd0t", + "updatedAt": "2024-04-23T07:12:44.928Z", + "userId": "1" + }, + { + "attributes": { + "Init Attribute 1": "eight", + "language": "gu" + }, + "createdAt": "2024-04-23T07:30:42.730Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2gyay0009494jbanqhr79", + "updatedAt": "2024-04-23T07:30:42.730Z", + "userId": "SECOND-USER-ID" + }, + { + "attributes": {}, + "createdAt": "2024-04-23T07:35:47.091Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2nh5g000h494jkr6qcxhz", + "updatedAt": "2024-04-23T07:35:47.091Z", + "userId": "Shubham" + }, + { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + } + ] + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:35:32 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get All Persons", + "tags": ["Management API > People"] + } + }, + "/api/v1/management/people/{personId}": { + "delete": { + "description": "Delete an identified person from Formbricks.", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "personId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "success": "Person deleted successfully" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:37:27 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "clvaq77u70002mhqfih5bnk0i", + "resource_type": "Person" + }, + "message": "Person not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:37:37 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Delete Person", + "tags": ["Management API > People"] + }, + "get": { + "description": "Get a person by their internal ID on Formbricks. This internal ID can be found from the Get All Person endpoint.", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "personId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "attributes": { + "Init Attribute 1": "eight", + "language": "gu" + }, + "createdAt": "2024-04-22T08:59:26.959Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvaq77u70002mhqfih5bnk0i", + "updatedAt": "2024-04-22T08:59:26.959Z", + "userId": "THIS-IS-A-VERY-LONG-USER-ID-FOR-TESTING" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:36:41 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get Person by ID", + "tags": ["Management API > People"] + } + }, + "/api/v1/management/responses": { + "get": { + "description": "Pass the surveyId as a Query Parameter & only fetch responses for a specific survey that you have access to.", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "example": "{{surveyId}}", + "in": "query", + "name": "surveyId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "createdAt": "2024-04-23T08:03:32.901Z", + "data": { + "1": "clicked", + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "hs8yd14l9h8u353tjmv6rzawqqq": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?", + "tcgls012312312063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": true, + "id": "clvc3n6hy000u494jn2ypw30r", + "language": null, + "meta": { + "action": "test action", + "source": "Postman API", + "url": "https://postman.com", + "userAgent": {} + }, + "notes": [], + "person": { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + }, + "personAttributes": { + "Created From": "API", + "created_from": "API" + }, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-23T08:14:12.343Z" + }, + { + "createdAt": "2024-04-23T08:00:01.151Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": false, + "id": "clvc3in3z000t494j4wtax1oi", + "language": null, + "meta": { + "userAgent": {} + }, + "notes": [], + "person": { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + }, + "personAttributes": { + "Created From": "API", + "created_from": "API" + }, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-23T08:00:01.151Z" + }, + { + "createdAt": "2024-04-23T07:59:49.759Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": true, + "id": "clvc3iebk000s494j37tq10o3", + "language": null, + "meta": { + "userAgent": {} + }, + "notes": [], + "person": { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + }, + "personAttributes": { + "Created From": "API", + "created_from": "API" + }, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-23T07:59:49.759Z" + }, + { + "createdAt": "2024-04-23T07:57:27.583Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "ho ho ho", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": true, + "id": "clvc3fcm7000r494jgvs99mqa", + "language": null, + "meta": { + "userAgent": {} + }, + "notes": [], + "person": { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + }, + "personAttributes": { + "Created From": "API", + "created_from": "API" + }, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-23T07:57:27.583Z" + }, + { + "createdAt": "2024-04-23T07:56:59.441Z", + "data": { + "hs7yd14l9h8u353tjmv6rzaw": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": true, + "id": "clvc3eqwj000q494jali1xhzq", + "language": null, + "meta": { + "userAgent": {} + }, + "notes": [], + "person": { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + }, + "personAttributes": { + "Created From": "API", + "created_from": "API" + }, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-23T07:56:59.441Z" + }, + { + "createdAt": "2024-04-23T07:53:49.935Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": true, + "id": "clvc3aool000p494jzjuukfzu", + "language": null, + "meta": { + "userAgent": {} + }, + "notes": [], + "person": { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + }, + "personAttributes": { + "Created From": "API", + "created_from": "API" + }, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-23T07:53:49.935Z" + }, + { + "createdAt": "2024-04-12T13:49:47.746Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "inputType": "text", + "tcgls0063n8ri7dtrbnepcmz": "fsef" + }, + "finished": true, + "id": "cluwq6352000klvz6t82e1oyt", + "language": null, + "meta": { + "action": "New Session", + "url": "http://localhost:3002/app?formbricksDebug=true", + "userAgent": { + "browser": "Chrome", + "os": "Linux" + } + }, + "notes": [], + "person": null, + "personAttributes": null, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": { + "_total": 6908, + "hs8yd14l9h8u353tjmv6rzaw": 4094.60000000149, + "tcgls0063n8ri7dtrbnepcmz": 2813.39999999851 + }, + "updatedAt": "2024-04-12T13:53:24.650Z" + }, + { + "createdAt": "2024-04-12T13:09:54.616Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked" + }, + "finished": false, + "id": "cluwoqsl4000ilvz6xmbaf5fl", + "language": null, + "meta": { + "action": "New Session", + "url": "http://localhost:3002/app?formbricksDebug=true", + "userAgent": { + "browser": "Chrome", + "os": "Linux" + } + }, + "notes": [], + "person": null, + "personAttributes": null, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-12T13:09:54.616Z" + }, + { + "createdAt": "2024-04-12T13:09:19.823Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "inputType": "text", + "tcgls0063n8ri7dtrbnepcmz": "aaa" + }, + "finished": true, + "id": "cluwoq1qn000glvz6ntrzf3kc", + "language": null, + "meta": { + "action": "New Session", + "url": "http://localhost:3002/app?formbricksDebug=true", + "userAgent": { + "browser": "Chrome", + "os": "Linux" + } + }, + "notes": [], + "person": null, + "personAttributes": null, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": { + "_total": 4311.599999997765, + "hs8yd14l9h8u353tjmv6rzaw": 2231.199999999255, + "tcgls0063n8ri7dtrbnepcmz": 2080.39999999851 + }, + "updatedAt": "2024-04-12T13:09:23.793Z" + }, + { + "createdAt": "2024-04-12T13:08:58.008Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked" + }, + "finished": false, + "id": "cluwopkwr000dlvz6mxvueqm8", + "language": null, + "meta": { + "action": "New Session", + "url": "http://localhost:3002/app?formbricksDebug=true", + "userAgent": { + "browser": "Chrome", + "os": "Linux" + } + }, + "notes": [], + "person": null, + "personAttributes": null, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-12T13:08:58.008Z" + }, + { + "createdAt": "2024-04-12T13:07:01.174Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked" + }, + "finished": true, + "id": "cluwon2ra000clvz6pwo3b5g3", + "language": null, + "meta": { + "action": "New Session", + "url": "http://localhost:3002/app?formbricksDebug=true", + "userAgent": { + "browser": "Chrome", + "os": "Linux" + } + }, + "notes": [], + "person": null, + "personAttributes": null, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-12T13:07:01.174Z" + } + ] + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:40:24 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get Survey Responses", + "tags": ["Management API > Response"] + }, + "post": { + "description": "Create a user response using the management API", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "createdAt": "2024-09-05T08:44:16.051Z", + "data": { + "hg508afs7lgx8nlni5dtit5u": ["Hello World"] + }, + "finished": false, + "language": "default", + "surveyId": "clwj7hi7r0000vfhpfze6vjdg", + "updatedAt": "2024-09-05T08:44:16.051Z" + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-04-23T12:15:01.680Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "hs8yd14l9h8u353tjmv6rzawqqq": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": true, + "id": "clvccml2p0009xz1zrlk1wbqb", + "language": "en", + "meta": { + "action": "test action", + "source": "Postman API", + "url": "https://postman.com", + "userAgent": {} + }, + "notes": [], + "person": { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + }, + "personAttributes": { + "Created From": "API", + "created_from": "API" + }, + "singleUseId": null, + "surveyId": "clus3omb00009oo10s53e2pa5", + "tags": [], + "ttc": { + "_total": 310, + "hs8yd14l9h8u353tjmv6rzawqqq": 120, + "tcgls0063n8ri7dtrbnepcmz": 190 + }, + "updatedAt": "2024-04-23T12:16:39.774Z" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:16:39 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "401": { + "content": { + "application/json": { + "example": { + "code": "unauthorized", + "details": {}, + "message": "You are not authorized to access this resource" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Unauthorized", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:10:34 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Create Response", + "tags": ["Management API > Response"] + } + }, + "/api/v1/management/responses/{responseId}": { + "delete": { + "description": "Delete a response with its ID", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "responseId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-04-23T08:03:32.901Z", + "data": { + "1": "clicked", + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "hs8yd14l9h8u353tjmv6rzawqqq": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?", + "tcgls012312312063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": true, + "id": "clvc3n6hy000u494jn2ypw30r", + "language": null, + "meta": { + "action": "test action", + "source": "Postman API", + "url": "https://postman.com", + "userAgent": {} + }, + "notes": [], + "person": { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + }, + "personAttributes": { + "Created From": "API", + "created_from": "API" + }, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-23T08:14:12.343Z" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:46:40 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "401": { + "content": { + "application/json": { + "example": { + "code": "unauthorized", + "details": {}, + "message": "You are not authorized to access this resource" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Unauthorized", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:46:49 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Delete Response", + "tags": ["Management API > Response"] + }, + "get": { + "description": "Fetch the entire response object based on its ID", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "responseId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-04-23T08:03:32.901Z", + "data": { + "1": "clicked", + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "hs8yd14l9h8u353tjmv6rzawqqq": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?", + "tcgls012312312063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": true, + "id": "clvc3n6hy000u494jn2ypw30r", + "language": null, + "meta": { + "action": "test action", + "source": "Postman API", + "url": "https://postman.com", + "userAgent": {} + }, + "notes": [], + "person": { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + }, + "personAttributes": { + "Created From": "API", + "created_from": "API" + }, + "singleUseId": null, + "surveyId": "clusgqpml0000135cxet3y8vh", + "tags": [], + "ttc": {}, + "updatedAt": "2024-04-23T08:14:12.343Z" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:46:08 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "401": { + "content": { + "application/json": { + "example": { + "code": "unauthorized", + "details": {}, + "message": "You are not authorized to access this resource" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Unauthorized", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:45:38 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get Response by ID", + "tags": ["Management API > Response"] + }, + "put": { + "description": "Update an existing user response with new data", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "responseId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "data": { + "hs8yd14l9h8u353tjmv6rzawqqq": "clicked", + "language": "en", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?", + "ttc": { + "hs8yd14l9h8u353tjmv6rzawqqq": 120, + "tcgls0063n8ri7dtrbnepcmz": 190 + } + }, + "finished": true + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-04-23T12:15:01.680Z", + "data": { + "hs8yd14l9h8u353tjmv6rzaw": "clicked", + "hs8yd14l9h8u353tjmv6rzawqqq": "clicked", + "tcgls0063n8ri7dtrbnepcmz": "Who? Who? Who?" + }, + "finished": true, + "id": "clvccml2p0009xz1zrlk1wbqb", + "language": "en", + "meta": { + "action": "test action", + "source": "Postman API", + "url": "https://postman.com", + "userAgent": {} + }, + "notes": [], + "person": { + "attributes": { + "Created From": "API", + "created_from": "API" + }, + "createdAt": "2024-04-23T07:39:22.696Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvc2s3ig000k494jltkqkm2u", + "updatedAt": "2024-04-23T07:39:22.696Z", + "userId": "THIS-IS-A-VVERY-LONG-USER-ID-FOR-TESTING" + }, + "personAttributes": { + "Created From": "API", + "created_from": "API" + }, + "singleUseId": null, + "surveyId": "clus3omb00009oo10s53e2pa5", + "tags": [], + "ttc": { + "_total": 310, + "hs8yd14l9h8u353tjmv6rzawqqq": 120, + "tcgls0063n8ri7dtrbnepcmz": 190 + }, + "updatedAt": "2024-04-23T12:16:39.774Z" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:16:39 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "401": { + "content": { + "application/json": { + "example": { + "code": "unauthorized", + "details": {}, + "message": "You are not authorized to access this resource" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Unauthorized", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:10:34 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Update Response", + "tags": ["Management API > Response"] + } + }, + "/api/v1/management/surveys": { + "get": { + "description": "Fetches all existing surveys", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "autoClose": null, + "autoComplete": null, + "closeOnDate": null, + "createdAt": "2024-08-05T11:08:27.042Z", + "createdBy": "clfv1zvij0000ru0gunwpy43a", + "delay": 0, + "displayLimit": null, + "displayOption": "displayOnce", + "displayPercentage": null, + "endings": [ + { + "buttonLabel": { + "default": "Create your own Survey" + }, + "buttonLink": "https://formbricks.com/signup", + "headline": { + "default": "Thank you!" + }, + "id": "p73t62dgwq0cvmtt6ug0hmfc", + "subheader": { + "default": "We appreciate your feedback." + }, + "type": "endScreen" + } + ], + "environmentId": "clygwxsbh01v5aga1sdien2th", + "hiddenFields": { + "enabled": false, + "fieldIds": [] + }, + "id": "clzgw1k4i0001mny1unf8eggn", + "isVerifyEmailEnabled": false, + "languages": [], + "name": "Example Survey", + "pin": null, + "productOverwrites": null, + "questions": [ + { + "headline": { + "default": "What would you like to know?" + }, + "id": "ovpy6va1hab7fl12n913zua0", + "inputType": "text", + "placeholder": { + "default": "Type your answer here..." + }, + "required": true, + "subheader": { + "default": "This is an example survey." + }, + "type": "openText" + }, + { + "choices": [ + { + "id": "xpoxuu3sifk1ee8he67ctf5i", + "label": { + "default": "Sun ☀️" + } + }, + { + "id": "hnsovcdmxtcbly6tig1az3qc", + "label": { + "default": "Ocean 🌊" + } + }, + { + "id": "kcnelzdxknvwo8fq20d3nrr5", + "label": { + "default": "Palms 🌴" + } + } + ], + "headline": { + "default": "What's important on vacay?" + }, + "id": "awkn2llljy7a4oulp5t15yec", + "required": true, + "shuffleOption": "none", + "type": "multipleChoiceMulti" + } + ], + "recontactDays": null, + "redirectUrl": null, + "resultShareKey": null, + "runOnDate": null, + "segment": null, + "showLanguageSwitch": null, + "singleUse": { + "enabled": false, + "isEncrypted": true + }, + "status": "inProgress", + "styling": null, + "surveyClosedMessage": null, + "triggers": [], + "type": "link", + "updatedAt": "2024-08-05T11:09:21.826Z", + "welcomeCard": { + "enabled": true, + "fileUrl": "", + "headline": { + "default": "Welcome!" + }, + "html": { + "default": "

Thanks for providing your feedback - let's go!

" + }, + "showResponseCount": false, + "timeToFinish": false + } + } + ] + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:48:18 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get All Surveys", + "tags": ["Management API > Survey"] + }, + "post": { + "description": "Create a survey with granular settings, questions, their types, welcomeCard, thankYouCard, languages, etc right from this API. We'd however recommend you to do this via our Formbricks App with the UI for a better visual experience.", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "autoClose": null, + "autoComplete": null, + "closeOnDate": null, + "createdBy": null, + "delay": 0, + "displayLimit": null, + "displayOption": "displayOnce", + "displayPercentage": null, + "endings": [ + { + "buttonLabel": { + "default": "Create your own Survey" + }, + "buttonLink": "https://formbricks.com/signup", + "headline": { + "default": "Thank you!" + }, + "id": "p73t62dgwq0cvmtt6ug0hmfc", + "subheader": { + "default": "We appreciate your feedback." + }, + "type": "endScreen" + } + ], + "environmentId": "{{environmentId}}", + "hiddenFields": { + "enabled": false, + "fieldIds": [] + }, + "isVerifyEmailEnabled": false, + "languages": [], + "name": "Example Survey", + "pin": null, + "productOverwrites": null, + "questions": [ + { + "headline": { + "default": "What would you like to know?" + }, + "id": "ovpy6va1hab7fl12n913zua0", + "inputType": "text", + "placeholder": { + "default": "Type your answer here..." + }, + "required": true, + "subheader": { + "default": "This is an example survey." + }, + "type": "openText" + }, + { + "choices": [ + { + "id": "xpoxuu3sifk1ee8he67ctf5i", + "label": { + "default": "Sun ☀️" + } + }, + { + "id": "hnsovcdmxtcbly6tig1az3qc", + "label": { + "default": "Ocean 🌊" + } + }, + { + "id": "kcnelzdxknvwo8fq20d3nrr5", + "label": { + "default": "Palms 🌴" + } + } + ], + "headline": { + "default": "What's important on vacay?" + }, + "id": "awkn2llljy7a4oulp5t15yec", + "required": true, + "shuffleOption": "none", + "type": "multipleChoiceMulti" + } + ], + "recontactDays": null, + "redirectUrl": null, + "resultShareKey": null, + "runOnDate": null, + "segmentId": null, + "showLanguageSwitch": null, + "singleUse": { + "enabled": false, + "isEncrypted": true + }, + "status": "inProgress", + "styling": null, + "surveyClosedMessage": null, + "triggers": [], + "type": "link", + "welcomeCard": { + "enabled": true, + "fileUrl": "", + "headline": { + "default": "Welcome!" + }, + "html": { + "default": "

Thanks for providing your feedback - let's go!

" + }, + "showResponseCount": false, + "timeToFinish": false + } + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "autoClose": null, + "autoComplete": null, + "closeOnDate": null, + "createdAt": "2024-08-05T11:08:27.042Z", + "createdBy": "clfv1zvij0000ru0gunwpy43a", + "delay": 0, + "displayLimit": null, + "displayOption": "displayOnce", + "displayPercentage": null, + "endings": [ + { + "buttonLabel": { + "default": "Create your own Survey" + }, + "buttonLink": "https://formbricks.com/signup", + "headline": { + "default": "Thank you!" + }, + "id": "p73t62dgwq0cvmtt6ug0hmfc", + "subheader": { + "default": "We appreciate your feedback." + }, + "type": "endScreen" + } + ], + "environmentId": "clygwxsbh01v5aga1sdien2th", + "hiddenFields": { + "enabled": false, + "fieldIds": [] + }, + "id": "clzgw1k4i0001mny1unf8eggn", + "isVerifyEmailEnabled": false, + "languages": [], + "name": "Example Survey", + "pin": null, + "productOverwrites": null, + "questions": [ + { + "headline": { + "default": "What would you like to know?" + }, + "id": "ovpy6va1hab7fl12n913zua0", + "inputType": "text", + "placeholder": { + "default": "Type your answer here..." + }, + "required": true, + "subheader": { + "default": "This is an example survey." + }, + "type": "openText" + }, + { + "choices": [ + { + "id": "xpoxuu3sifk1ee8he67ctf5i", + "label": { + "default": "Sun ☀️" + } + }, + { + "id": "hnsovcdmxtcbly6tig1az3qc", + "label": { + "default": "Ocean 🌊" + } + }, + { + "id": "kcnelzdxknvwo8fq20d3nrr5", + "label": { + "default": "Palms 🌴" + } + } + ], + "headline": { + "default": "What's important on vacay?" + }, + "id": "awkn2llljy7a4oulp5t15yec", + "required": true, + "shuffleOption": "none", + "type": "multipleChoiceMulti" + } + ], + "recontactDays": null, + "redirectUrl": null, + "resultShareKey": null, + "runOnDate": null, + "segment": null, + "showLanguageSwitch": null, + "singleUse": { + "enabled": false, + "isEncrypted": true + }, + "status": "inProgress", + "styling": null, + "surveyClosedMessage": null, + "triggers": [], + "type": "link", + "updatedAt": "2024-08-05T11:09:21.826Z", + "welcomeCard": { + "enabled": true, + "fileUrl": "", + "headline": { + "default": "Welcome!" + }, + "html": { + "default": "

Thanks for providing your feedback - let's go!

" + }, + "showResponseCount": false, + "timeToFinish": false + } + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:29:29 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "bad_request", + "details": { + "hiddenFields.enabled": "Required" + }, + "message": "Fields are missing or incorrectly formatted" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Bad Request", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:29:50 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "access-control-allow-headers": { + "schema": { + "example": "Content-Type, Authorization", + "type": "string" + } + }, + "access-control-allow-methods": { + "schema": { + "example": "GET, POST, PUT, DELETE, OPTIONS", + "type": "string" + } + }, + "access-control-allow-origin": { + "schema": { + "example": "*", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Create Survey", + "tags": ["Management API > Survey"] + } + }, + "/api/v1/management/surveys/{surveyId}": { + "delete": { + "description": "Delete a Survey by its ID. Please use this only when extrememly necessary.", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "surveyId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "autoClose": null, + "autoComplete": null, + "closeOnDate": null, + "createdAt": "2024-08-05T11:08:27.042Z", + "createdBy": "clfv1zvij0000ru0gunwpy43a", + "delay": 0, + "displayLimit": null, + "displayOption": "displayOnce", + "displayPercentage": null, + "endings": [ + { + "buttonLabel": { + "default": "Create your own Survey" + }, + "buttonLink": "https://formbricks.com/signup", + "headline": { + "default": "Thank you!" + }, + "id": "p73t62dgwq0cvmtt6ug0hmfc", + "subheader": { + "default": "We appreciate your feedback." + }, + "type": "endScreen" + } + ], + "environmentId": "clygwxsbh01v5aga1sdien2th", + "hiddenFields": { + "enabled": false, + "fieldIds": [] + }, + "id": "clzgw1k4i0001mny1unf8eggn", + "isVerifyEmailEnabled": false, + "languages": [], + "name": "Example Survey", + "pin": null, + "productOverwrites": null, + "questions": [ + { + "headline": { + "default": "What would you like to know?" + }, + "id": "ovpy6va1hab7fl12n913zua0", + "inputType": "text", + "placeholder": { + "default": "Type your answer here..." + }, + "required": true, + "subheader": { + "default": "This is an example survey." + }, + "type": "openText" + }, + { + "choices": [ + { + "id": "xpoxuu3sifk1ee8he67ctf5i", + "label": { + "default": "Sun ☀️" + } + }, + { + "id": "hnsovcdmxtcbly6tig1az3qc", + "label": { + "default": "Ocean 🌊" + } + }, + { + "id": "kcnelzdxknvwo8fq20d3nrr5", + "label": { + "default": "Palms 🌴" + } + } + ], + "headline": { + "default": "What's important on vacay?" + }, + "id": "awkn2llljy7a4oulp5t15yec", + "required": true, + "shuffleOption": "none", + "type": "multipleChoiceMulti" + } + ], + "recontactDays": null, + "redirectUrl": null, + "resultShareKey": null, + "runOnDate": null, + "segment": null, + "showLanguageSwitch": null, + "singleUse": { + "enabled": false, + "isEncrypted": true + }, + "status": "inProgress", + "styling": null, + "surveyClosedMessage": null, + "triggers": [], + "type": "link", + "updatedAt": "2024-08-05T11:09:21.826Z", + "welcomeCard": { + "enabled": true, + "fileUrl": "", + "headline": { + "default": "Welcome!" + }, + "html": { + "default": "

Thanks for providing your feedback - let's go!

" + }, + "showResponseCount": false, + "timeToFinish": false + } + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:49:26 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "clusgqpml0000135cxet3y8vh", + "resource_type": "Survey" + }, + "message": "Survey not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:49:33 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Delete Survey", + "tags": ["Management API > Survey"] + }, + "get": { + "description": "Fetch a survey object based on its ID", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "surveyId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "autoClose": null, + "autoComplete": null, + "closeOnDate": null, + "createdAt": "2024-08-05T11:08:27.042Z", + "createdBy": "clfv1zvij0000ru0gunwpy43a", + "delay": 0, + "displayLimit": null, + "displayOption": "displayOnce", + "displayPercentage": null, + "endings": [ + { + "buttonLabel": { + "default": "Create your own Survey" + }, + "buttonLink": "https://formbricks.com/signup", + "headline": { + "default": "Thank you!" + }, + "id": "p73t62dgwq0cvmtt6ug0hmfc", + "subheader": { + "default": "We appreciate your feedback." + }, + "type": "endScreen" + } + ], + "environmentId": "clygwxsbh01v5aga1sdien2th", + "hiddenFields": { + "enabled": false, + "fieldIds": [] + }, + "id": "clzgw1k4i0001mny1unf8eggn", + "isVerifyEmailEnabled": false, + "languages": [], + "name": "Example Survey", + "pin": null, + "productOverwrites": null, + "questions": [ + { + "headline": { + "default": "What would you like to know?" + }, + "id": "ovpy6va1hab7fl12n913zua0", + "inputType": "text", + "placeholder": { + "default": "Type your answer here..." + }, + "required": true, + "subheader": { + "default": "This is an example survey." + }, + "type": "openText" + }, + { + "choices": [ + { + "id": "xpoxuu3sifk1ee8he67ctf5i", + "label": { + "default": "Sun ☀️" + } + }, + { + "id": "hnsovcdmxtcbly6tig1az3qc", + "label": { + "default": "Ocean 🌊" + } + }, + { + "id": "kcnelzdxknvwo8fq20d3nrr5", + "label": { + "default": "Palms 🌴" + } + } + ], + "headline": { + "default": "What's important on vacay?" + }, + "id": "awkn2llljy7a4oulp5t15yec", + "required": true, + "shuffleOption": "none", + "type": "multipleChoiceMulti" + } + ], + "recontactDays": null, + "redirectUrl": null, + "resultShareKey": null, + "runOnDate": null, + "segment": null, + "showLanguageSwitch": null, + "singleUse": { + "enabled": false, + "isEncrypted": true + }, + "status": "inProgress", + "styling": null, + "surveyClosedMessage": null, + "triggers": [], + "type": "link", + "updatedAt": "2024-08-05T11:09:21.826Z", + "welcomeCard": { + "enabled": true, + "fileUrl": "", + "headline": { + "default": "Welcome!" + }, + "html": { + "default": "

Thanks for providing your feedback - let's go!

" + }, + "showResponseCount": false, + "timeToFinish": false + } + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 11:49:06 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get Survey by ID", + "tags": ["Management API > Survey"] + }, + "put": { + "description": "Update an existing survey with new properties. This is also what we'd recommend you to do from the UI for a better visual feedback.", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "surveyId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "name": "Example Survey" + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "autoClose": null, + "autoComplete": null, + "closeOnDate": null, + "createdAt": "2024-08-05T11:08:27.042Z", + "createdBy": "clfv1zvij0000ru0gunwpy43a", + "delay": 0, + "displayLimit": null, + "displayOption": "displayOnce", + "displayPercentage": null, + "endings": [ + { + "buttonLabel": { + "default": "Create your own Survey" + }, + "buttonLink": "https://formbricks.com/signup", + "headline": { + "default": "Thank you!" + }, + "id": "p73t62dgwq0cvmtt6ug0hmfc", + "subheader": { + "default": "We appreciate your feedback." + }, + "type": "endScreen" + } + ], + "environmentId": "clygwxsbh01v5aga1sdien2th", + "hiddenFields": { + "enabled": false, + "fieldIds": [] + }, + "id": "clzgw1k4i0001mny1unf8eggn", + "isVerifyEmailEnabled": false, + "languages": [], + "name": "Example Survey", + "pin": null, + "productOverwrites": null, + "questions": [ + { + "headline": { + "default": "What would you like to know?" + }, + "id": "ovpy6va1hab7fl12n913zua0", + "inputType": "text", + "placeholder": { + "default": "Type your answer here..." + }, + "required": true, + "subheader": { + "default": "This is an example survey." + }, + "type": "openText" + }, + { + "choices": [ + { + "id": "xpoxuu3sifk1ee8he67ctf5i", + "label": { + "default": "Sun ☀️" + } + }, + { + "id": "hnsovcdmxtcbly6tig1az3qc", + "label": { + "default": "Ocean 🌊" + } + }, + { + "id": "kcnelzdxknvwo8fq20d3nrr5", + "label": { + "default": "Palms 🌴" + } + } + ], + "headline": { + "default": "What's important on vacay?" + }, + "id": "awkn2llljy7a4oulp5t15yec", + "required": true, + "shuffleOption": "none", + "type": "multipleChoiceMulti" + } + ], + "recontactDays": null, + "redirectUrl": null, + "resultShareKey": null, + "runOnDate": null, + "segment": null, + "showLanguageSwitch": null, + "singleUse": { + "enabled": false, + "isEncrypted": true + }, + "status": "inProgress", + "styling": null, + "surveyClosedMessage": null, + "triggers": [], + "type": "link", + "updatedAt": "2024-08-05T11:09:21.826Z", + "welcomeCard": { + "enabled": true, + "fileUrl": "", + "headline": { + "default": "Welcome!" + }, + "html": { + "default": "

Thanks for providing your feedback - let's go!

" + }, + "showResponseCount": false, + "timeToFinish": false + } + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:34:09 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "bad_request", + "details": {}, + "message": "Survey with ID cls79mi7j0000hq9o4dd60xsk not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Bad Request", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:30:32 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Update Survey", + "tags": ["Management API > Survey"] + } + }, + "/api/v1/management/surveys/{surveyId}/singleUseIds": { + "get": { + "description": "Generates multiple single use survey links for a survey based on its id. Count of links can be controlled using the limit query param(min: 1, max: 5000, default: 10).", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "surveyId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + "https://app.formbricks.com/s/clzqym2l300015ycm88weliq0?suId=ohkj3qx6d0wdo9r3nfpm3bgj", + "https://app.formbricks.com/s/clzqym2l300015ycm88weliq0?suId=ci6la2lzj63pvsp6x3eqbhff", + "https://app.formbricks.com/s/clzqym2l300015ycm88weliq0?suId=ge8xc013ad5elmt144h2gpl4", + "https://app.formbricks.com/s/clzqym2l300015ycm88weliq0?suId=zqh6x0judrawhasr4pmywbkb", + "https://app.formbricks.com/s/clzqym2l300015ycm88weliq0?suId=mpqm14y2ub8utokxci6phr1y", + "https://app.formbricks.com/s/clzqym2l300015ycm88weliq0?suId=g5ej7f8w9tc87xkvefeajoxa", + "https://app.formbricks.com/s/clzqym2l300015ycm88weliq0?suId=av7swj3jlld97ejbw7lymbau", + "https://app.formbricks.com/s/clzqym2l300015ycm88weliq0?suId=sub2yfok3sdsje2dddzf0l5d", + "https://app.formbricks.com/s/clzqym2l300015ycm88weliq0?suId=hbiee77q8qunti3lxmtoq7w9", + "https://app.formbricks.com/s/clzqym2l300015ycm88weliq0?suId=eo5kb2suapyks59j84egijso" + ] + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Mon, 19 Aug 2024 12:55:21 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "X-Content-Type-Options": { + "schema": { + "example": "nosniff", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "bad_request", + "details": {}, + "message": "Single use links are not enabled for this survey" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Bad Request", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Mon, 19 Aug 2024 12:58:34 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "X-Content-Type-Options": { + "schema": { + "example": "nosniff", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get SingleUse Links", + "tags": ["Management API > Survey"] + } + }, + "/api/v1/webhooks": { + "get": { + "description": "Retrieve a list of all webhooks for the current environment", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "createdAt": "2024-04-23T12:35:45.326Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvcdd8oe000nxz1zhz6q9z3l", + "name": null, + "source": "user", + "surveyIds": [], + "triggers": ["responseCreated", "responseUpdated", "responseFinished"], + "updatedAt": "2024-04-23T12:35:45.326Z", + "url": "https://eoy8o887lmsqmhz.m.pipedream.net" + }, + { + "createdAt": "2024-04-23T12:36:07.100Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvcddph9000oxz1zsnjhvllw", + "name": null, + "source": "user", + "surveyIds": [], + "triggers": ["responseCreated", "responseUpdated", "responseFinished"], + "updatedAt": "2024-04-23T12:36:07.100Z", + "url": "https://eoy8o887lmsqmhz.m.pipedream.net" + }, + { + "createdAt": "2024-04-23T12:36:56.507Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvcderln000pxz1z95jqj0qw", + "name": null, + "source": "user", + "surveyIds": [], + "triggers": ["responseCreated", "responseUpdated", "responseFinished"], + "updatedAt": "2024-04-23T12:36:56.507Z", + "url": "https://eoy8o887lmsqmhz.m.pipedream.net" + } + ] + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:37:25 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get All Webhooks", + "tags": ["Management API > Webhook"] + }, + "post": { + "description": "Create a new webhook right from the API and see it active right away!", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "example": { + "triggers": ["responseCreated", "responseUpdated", "responseFinished"], + "url": "https://eoy8o887lmsqmhz.m.pipedream.net" + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-04-23T12:35:45.326Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvcdd8oe000nxz1zhz6q9z3l", + "name": null, + "source": "user", + "surveyIds": [], + "triggers": ["responseCreated", "responseUpdated", "responseFinished"], + "updatedAt": "2024-04-23T12:35:45.326Z", + "url": "https://eoy8o887lmsqmhz.m.pipedream.net" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:35:45 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Create Webhook", + "tags": ["Management API > Webhook"] + } + }, + "/api/v1/webhooks/{webhookId}": { + "delete": { + "description": "Delete an existing webhook by provifding it's ID. It will immediately apply and not trigger again.", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "webhookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-04-23T12:35:45.326Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvcdd8oe000nxz1zhz6q9z3l", + "name": null, + "source": "user", + "surveyIds": [], + "triggers": ["responseCreated", "responseUpdated", "responseFinished"], + "updatedAt": "2024-04-23T12:35:45.326Z", + "url": "https://eoy8o887lmsqmhz.m.pipedream.net" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:38:57 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "example": { + "code": "not_found", + "details": { + "resource_id": "clvcdd8oe000nxz1zhz6q9z3l", + "resource_type": "Webhook" + }, + "message": "Webhook not found" + }, + "schema": { + "type": "object" + } + } + }, + "description": "Not Found", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:39:22 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Delete Webhook", + "tags": ["Management API > Webhook"] + }, + "get": { + "description": "Get a specific webhook object based on its ID", + "parameters": [ + { + "example": "{{apiKey}}", + "in": "header", + "name": "x-api-key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "webhookId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "createdAt": "2024-04-23T12:35:45.326Z", + "environmentId": "clurwouax000azffxt7n5unn3", + "id": "clvcdd8oe000nxz1zhz6q9z3l", + "name": null, + "source": "user", + "surveyIds": [], + "triggers": ["responseCreated", "responseUpdated", "responseFinished"], + "updatedAt": "2024-04-23T12:35:45.326Z", + "url": "https://eoy8o887lmsqmhz.m.pipedream.net" + } + }, + "schema": { + "type": "object" + } + } + }, + "description": "OK", + "headers": { + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 12:38:29 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "cache-control": { + "schema": { + "example": "private, no-store", + "type": "string" + } + }, + "content-type": { + "schema": { + "example": "application/json", + "type": "string" + } + }, + "vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch", + "type": "string" + } + } + } + } + }, + "summary": "Get Webhook", + "tags": ["Management API > Webhook"] + } + }, + "/health": { + "get": { + "description": "Formbricks' Health Check endpoint to make sure the App & the Database are connected with each other & up!", + "responses": { + "200": { + "content": { + "text/plain": { + "example": "\n\n \n \n \n \n \n \n \n \n \n \n \n Formbricks\n \n \n \n \n \n \n \n
\n \n \n \n \n

All systems are up and running

\n
\n \n \n \n \n \n \n \n", + "schema": { + "type": "string" + } + } + }, + "description": "OK", + "headers": { + "Cache-Control": { + "schema": { + "example": "no-store, must-revalidate", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Content-Encoding": { + "schema": { + "example": "gzip", + "type": "string" + } + }, + "Content-Type": { + "schema": { + "example": "text/html; charset=utf-8", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:03:50 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "Vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Accept-Encoding", + "type": "string" + } + }, + "X-Powered-By": { + "schema": { + "example": "Next.js", + "type": "string" + } + } + } + }, + "500": { + "content": { + "text/plain": { + "example": "\n\n \n \n \n \n \n \n \n \n \n Formbricks\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n", + "schema": { + "type": "string" + } + } + }, + "description": "Internal Server Error", + "headers": { + "Cache-Control": { + "schema": { + "example": "no-store, must-revalidate", + "type": "string" + } + }, + "Connection": { + "schema": { + "example": "keep-alive", + "type": "string" + } + }, + "Content-Encoding": { + "schema": { + "example": "gzip", + "type": "string" + } + }, + "Content-Type": { + "schema": { + "example": "text/html; charset=utf-8", + "type": "string" + } + }, + "Date": { + "schema": { + "example": "Tue, 23 Apr 2024 07:05:08 GMT", + "type": "string" + } + }, + "Keep-Alive": { + "schema": { + "example": "timeout=5", + "type": "string" + } + }, + "Transfer-Encoding": { + "schema": { + "example": "chunked", + "type": "string" + } + }, + "Vary": { + "schema": { + "example": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Accept-Encoding", + "type": "string" + } + }, + "X-Powered-By": { + "schema": { + "example": "Next.js", + "type": "string" + } + } + } + } + }, + "summary": "Health Check", + "tags": ["default"] + } + } + }, + "servers": [ + { + "url": "http://{{baseurl}}", + "variables": { + "baseurl": { + "default": "localhost:3000" + } + } + } + ], + "tags": [ + { + "description": "The Public Client API is designed for the JavaScript SDK and does not require authentication. It's primarily used for creating persons, sessions, and responses within the Formbricks platform. This API is ideal for client-side interactions, as it doesn't expose sensitive information.\n- Displays API - Mark Survey as Displayed or Responded for a Person\n- Responses API - Create & update responses for a survey\n- Environment API - Get the environment state to be used in Formbricks SDKs\n- Contacts API - Identify & update contacts (e.g. attributes)\n- User API - Identify & track users based on their attributes, device type, etc.", + "name": "Client API" + }, + { + "description": "Displays are metrics used to measure the number of times a survey was viewed both by unidentified or identified users.", + "name": "Client API > Display" + }, + { + "description": "Responses are captured whenever a user fills in your survey either partially or completely.", + "name": "Client API > Response" + }, + { + "description": "Get the environment state to be used in Formbricks SDKs", + "name": "Client API > Environment" + }, + { + "description": "Contacts are the identified users on Formbricks app that get initated when you pass a userId and have user activation enabled. This now allows you to track & show them targeted surveys based on their attributes, device type, etc.", + "name": "Client API > Contacts" + }, + { + "description": "Users are the identified users on Formbricks app that get initated when you pass a userId and have user activation enabled. This now allows you to track & show them targeted surveys based on their attributes, device type, etc. Currently, this api is only being used in the react-native sdk.", + "name": "Client API > User" + }, + { + "description": "The Management API provides access to all data and settings that are visible in the Formbricks App. This API requires a personal API Key for authentication, which can be generated in the Settings section of the Formbricks App. With the Management API, you can manage your Formbricks account programmatically, accessing and modifying data and settings as needed.\n\n> **For Auth:** we use the `x-api-key` header \n \n\nAPI requests made to the Management API are authorized using a personal API key. This key grants the same rights and access as if you were logged in at formbricks.com. It's essential to keep your API key secure and not share it with others.\n\nTo generate, store, or delete an API key, follow the instructions provided on the following page [API Key](https://formbricks.com/docs/api/management/api-key-setup).", + "name": "Management API" + }, + { + "description": "Action Classes allow you to set behaviour methods such as when a user clicks on a buy now button, or when a user leaves the page, etc. These allow you to trigger specific surveys to these users.\n\nMethods: Get All, Get, Create, Update, and Delete Action Classes", + "name": "Management API > Action Class" + }, + { + "description": "Attribute Classes help you categorize attributes so that you can target users based on specific values of their attributes. They are associated with a Person. Read more [here](https://formbricks.com/docs/in-app-surveys/attributes)", + "name": "Management API > Attribute Class" + }, + { + "description": "The Contacts API allows you to retrieve information about contacts in your environment. Contacts represent users who have interacted with your surveys or forms.", + "name": "Management API > Contacts" + }, + { + "description": "The Contact Attributes API allows you to retrieve information about attributes associated with contacts in your environment. These attributes can include custom properties and values assigned to your contacts.", + "name": "Management API > Contact Attributes" + }, + { + "description": "The Contact Attribute Keys API allows you to retrieve information about the defined attribute keys in your environment. These keys define the structure and properties that can be assigned to contacts, such as email, name, or custom attributes.", + "name": "Management API > Contact Attribute Keys" + }, + { + "description": "Retrieve Account Information", + "name": "Management API > Me" + }, + { + "description": "Enable User Identification in Formbricks to granularly target users to show surveys to without spraying across them. This API will help you utilise Formbricks User Identification to its maximum.\n\nMethods: Get All, Get, and Delete Persons", + "name": "Management API > People" + }, + { + "description": "Responses are what your users fill in as answers to a survey. Use this cautiosly and make sure you handle this data carefully.\n\nMethods allowed: Get All, Get by Survey, Get, Update, and Delete Responses", + "name": "Management API > Response" + }, + { + "description": "Surveys are the core of user data & feedback collection. We have various types of surveys to cater to you:\n\n- In-App Surveys\n \n- Website Surveys\n \n- Link Surveys\n \n\nCreate surveys & then trigger them as per your actions & attribute filterings that you have set to make the most of them.\n\nMethods allowed: Get All, Get, Create, Update, and Delete Surveys", + "name": "Management API > Survey" + }, + { + "description": "Formbricks' Webhook API offers a powerful interface for interacting with webhooks. Webhooks allow you to receive real-time HTTP notifications of changes to specific objects in the Formbricks environment.\n\nThe behavior of the webhooks is determined by their trigger settings. The trigger determines which updates the webhook sends. Current available triggers include:\n\n- \"responseCreated\"\n \n- \"responseUpdated\", and\n \n- \"responseFinished\".\n \n\nThese APIs are designed to facilitate seamless integration of Formbricks with third-party systems. By making use of our webhook API, you can automate the process of sending data to these systems whenever significant events occur within your Formbricks environment.\n\n \n\nMethods allowed: Get All, Get ,Create, and Delete Webhooks", + "name": "Management API > Webhook" + } + ] +} diff --git a/docs/api-reference/rest-api.mdx b/docs/api-reference/rest-api.mdx new file mode 100644 index 0000000000..404099eca0 --- /dev/null +++ b/docs/api-reference/rest-api.mdx @@ -0,0 +1,129 @@ +--- +title: "REST API" +icon: "code" +description: " +Formbricks provides two APIs: the Public Client API for frontend survey interactions and the Management API for backend management tasks." +--- + + + View our [API Documentation](/api-reference) in more than 30 frameworks and languages. + + +## Public Client API + +The **Public Client API** is used by our SDKs and doesn’t require authentication, making it ideal for client-side interactions without exposing sensitive data. + +We currently have the following Client API methods exposed and below is their documentation attached in Postman: + +- [Displays API](/api-reference/client-api->-display/create-display) - Mark a survey as displayed or link a display to a response for a person. + +- [People API](/api-reference/client-api->-people/create-person) - Create & Update a Person (e.g., attributes, email, userId, etc.) + +- [Responses API](/api-reference/client-api->-response/create-response) - Create & Update a Response for a Survey. + +## Management API + +The **Management API** gives full access to all data and settings available in your Formbricks account. It requires a personal API Key for authentication, which you can generate and manage in the Settings section of the Formbricks app. + +We currently have the following Management API methods exposed and below is their documentation attached in Postman: + +- [Action Class API](/api-reference/management-api->-action-class/get-all-action-classes) - Create, List, and Delete Action Classes + +- [Attribute Class API ](/api-reference/management-api->-attribute-class/get-all-attribute-classes)- Create, List, and Delete Attribute Classes + +- [Me API](/api-reference/management-api->-me/me) - Retrieve Account Information + +- [People API](/api-reference/management-api->-people/get-all-persons) - List and Delete People + +- [Response API](/api-reference/management-api->-response/get-survey-responses) - List, List by Survey, Update, and Delete Responses + +- [Survey API](/api-reference/management-api->-survey/get-all-surveys) - List, Create, Update, generate multiple suId, and Delete Surveys + +- [Webhook API](/api-reference/management-api->-webhook/get-all-webhooks) - List, Create, and Delete Webhooks + +## How to Generate an API key + +API requests require a personal API key for authorization. This API key gives you the same rights as if you were logged in at Formbricks UI - **keep it private!** + +- Go to your settings on [Formbricks UI](https://app.formbricks.com). + +- Go to page “API keys” + +![API Keys](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738097810/image_jvhqsd.jpg) + +- Create a key for the development or production environment. + +- Copy the key immediately. You won’t be able to see it again. + +![API Key Label](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738098072/image_zjkvok.jpg) + + + **Store API key safely! Anyone who has your API key has full control over your + account. For security reasons, you cannot view the API key again.** + + +## Test your API Key + +Hit the below request to verify that you are authenticated with your API Key and the server is responding. + +### Get My Profile + +Get the project details and environment type of your account. + +### Mandatory Headers + +| Name | x-Api-Key | +| --------------- | ------------------------ | +| **Type** | string | +| **Description** | Your Formbricks API key. | + +### Request + +```bash cURL +GET - /api/v1/me + +curl --location \ +'https://app.formbricks.com/api/v1/me' \ +--header \ +'x-api-key: ' +``` + +### Response + + + + +```bash 200 (Success) +{ + "id": "cll2m30r70004mx0huqkitgqv", + "createdAt": "2023-08-08T18:04:59.922Z", + "updatedAt": "2023-08-08T18:04:59.922Z", + "type": "production", + "project": { + "id": "cll2m30r60003mx0hnemjfckr", + "name": "My Project" + }, + "appSetupCompleted": false, + "websiteSetupCompleted": false, +} +``` + +```bash 401 (Not Authenticated) +Not authenticated +``` + + + +### Delete a personal API key + +- Go to settings on [app.formbricks.com](https://app.formbricks.com/). + +- Go to the page “API keys”. + +- Find the key you wish to revoke and select “Delete”. + +- Your API key will stop working immediately. + +--- + +**Can’t figure it out?** Get help in [GitHub Discussions](https://github.com/formbricks/formbricks/discussions). \ No newline at end of file diff --git a/docs/development/contribution/contribution.mdx b/docs/development/contribution/contribution.mdx new file mode 100644 index 0000000000..dcac633452 --- /dev/null +++ b/docs/development/contribution/contribution.mdx @@ -0,0 +1,43 @@ +--- +title: "Contributing to Formbricks 🤗" +description: "How to contribute to Formbricks" +icon: "code" +--- + +We’re excited that you want to contribute to Formbricks! There are many ways to help, including reporting issues, fixing bugs, adding new features, or improving documentation. + +#### How to Contribute + +- **Issues:** Found a bug? Facing deployment problems? Have user feedback? Report an issue for the fastest response. + +- **Feature Requests:** Have an idea? Open an issue, tag it as an **Enhancement**, and clearly describe the issue you're solving. + +- **Pull Requests (PRs):** Fork the repo, make your changes, and submit a PR. + + - For small fixes, go ahead! + + - For bigger features, please discuss them with us first to ensure they align with our roadmap. + +#### Talk to Us First + +We highly recommend engaging with us on [**GitHub Discussions**](https://github.com/formbricks/formbricks/discussions) before submitting contributions. +This helps improve the chances of your PR being accepted while avoiding unnecessary work. + +#### Contributor License Agreement (CLA) + +To keep Formbricks sustainable, we require a **CLA** from all contributors. + +Once you open a PR, our **CLA bot** will prompt you to sign the agreement. We can only merge contributions after the CLA is signed. + +#### Setting Up Your Development Environment + +You can set up your environment using: + +- [**Gitpod**](/development/local-setup/gitpod) + +- [**GitHub Codespaces**](/development/local-setup/github-codespaces) + +- [**Local Machine Setup**](/development/local-setup) + +For junior developers, **Gitpod or GitHub Codespaces** are recommended as they allow you to start coding in minutes. + diff --git a/docs/development/local-setup/github-codespaces.mdx b/docs/development/local-setup/github-codespaces.mdx new file mode 100644 index 0000000000..5a25415bcf --- /dev/null +++ b/docs/development/local-setup/github-codespaces.mdx @@ -0,0 +1,55 @@ +--- +title: GitHub Codespaces +description: How to set up Formbricks in a GitHub Codespaces environment +icon: "github" +--- + +### GitHub Codespaces Setup + + + This guide outlines how to set up Formbricks in a **GitHub Codespaces** environment. + + +**Requirements:** + +- A GitHub Codespace that has support for Node.JS, pnpm, and Docker. + +**Steps:** + +1. **Open your repository in GitHub Codespaces. If needed, clone the repository:** + ```bash + git clone https://github.com/formbricks/formbricks && cd formbricks + ``` + +2. **Setup NodeJS with nvm (if not already configured):** + ```bash + nvm install && nvm use + ``` + +3. **Install the dependencies:** + ```bash + pnpm install + ``` + +4. **Create a `.env` file from the template:** + ```bash + cp .env.example .env + ``` + +5. **Generate & set the required secrets:** + ```bash + sed -i '/^ENCRYPTION_KEY=/c\ENCRYPTION_KEY='$(openssl rand -hex 32) .env + sed -i '/^NEXTAUTH_SECRET=/c\NEXTAUTH_SECRET='$(openssl rand -hex 32) .env + sed -i '/^CRON_SECRET=/c\CRON_SECRET='$(openssl rand -hex 32) .env + ``` + +6. **Launch the development setup:** + ```bash + pnpm go + ``` + +Use the Codespaces port forwarding to access Formbricks at [http://localhost:3000](http://localhost:3000). + + + Make sure your Codespaces port configuration is set to allow access to the app. + \ No newline at end of file diff --git a/docs/development/local-setup/gitpod.mdx b/docs/development/local-setup/gitpod.mdx new file mode 100644 index 0000000000..fec0f4fa63 --- /dev/null +++ b/docs/development/local-setup/gitpod.mdx @@ -0,0 +1,55 @@ +--- +title: Gitpod +description: How to set up Formbricks in a Gitpod workspace +icon: "code" +--- + +### Gitpod Setup + + + This guide explains how to set up Formbricks in a **Gitpod** workspace. + + +**Requirements:** + +- A Gitpod workspace with Node.JS, pnpm, and Docker support. + +**Steps:** + +1. **Open the repository in Gitpod. The workspace typically clones the repo automatically. If not:** + ```bash + git clone https://github.com/formbricks/formbricks && cd formbricks + ``` + +2. **Setup NodeJS with nvm:** + ```bash + nvm install && nvm use + ``` + +3. **Install dependencies:** + ```bash + pnpm install + ``` + +4. **Create a `.env` file:** + ```bash + cp .env.example .env + ``` + +5. **Generate & set secret values:** + ```bash + sed -i '/^ENCRYPTION_KEY=/c\ENCRYPTION_KEY='$(openssl rand -hex 32) .env + sed -i '/^NEXTAUTH_SECRET=/c\NEXTAUTH_SECRET='$(openssl rand -hex 32) .env + sed -i '/^CRON_SECRET=/c\CRON_SECRET='$(openssl rand -hex 32) .env + ``` + +6. **Run the development setup:** + ```bash + pnpm go + ``` + +Access the running app via the forwarded port (typically [http://localhost:3000](http://localhost:3000) inside Gitpod). + + + Check your Gitpod settings to ensure Docker is enabled if required. + \ No newline at end of file diff --git a/docs/development/local-setup/linux.mdx b/docs/development/local-setup/linux.mdx new file mode 100644 index 0000000000..5cf559c8ff --- /dev/null +++ b/docs/development/local-setup/linux.mdx @@ -0,0 +1,57 @@ +--- +title: Linux +description: How to set up Formbricks on a Linux machine +icon: "linux" +--- + +### Local Machine Setup - Linux + + + This guide is recommended for advanced users setting up Formbricks on a **Linux** machine. + + +Here are the requirements for setting up Formbricks on Linux: + +- Node.JS (v20 recommended) +- [pnpm](https://pnpm.io/) +- [Docker](https://www.docker.com/) (to run PostgreSQL/MailHog) + +**Steps:** + +1. **Clone the project & move into the directory:** + ```bash + git clone https://github.com/formbricks/formbricks && cd formbricks + ``` + +2. **Setup NodeJS with nvm:** + ```bash + nvm install && nvm use + ``` + +3. **Install NodeJS packages via pnpm:** + ```bash + pnpm install + ``` + +4. **Create a `.env` file based on `.env.example`:** + ```bash + cp .env.example .env + ``` + +5. **Generate & set the secret values:** + ```bash + sed -i '/^ENCRYPTION_KEY=/c\ENCRYPTION_KEY='$(openssl rand -hex 32) .env + sed -i '/^NEXTAUTH_SECRET=/c\NEXTAUTH_SECRET='$(openssl rand -hex 32) .env + sed -i '/^CRON_SECRET=/c\CRON_SECRET='$(openssl rand -hex 32) .env + ``` + +6. **Start the development setup:** + ```bash + pnpm go + ``` + +You can now access Formbricks at [http://localhost:3000](http://localhost:3000). + + + Create a new account on first login as no default account is available. + \ No newline at end of file diff --git a/docs/development/local-setup/mac.mdx b/docs/development/local-setup/mac.mdx new file mode 100644 index 0000000000..8c9e33e382 --- /dev/null +++ b/docs/development/local-setup/mac.mdx @@ -0,0 +1,57 @@ +--- +title: Mac +description: How to set up Formbricks on a Mac machine +icon: "apple" +--- + +### Local Machine Setup - Mac + + + This guide is recommended for advanced users setting up Formbricks on a **Mac** machine. + + +**Requirements:** + +- Node.JS (v20 recommended) +- [pnpm](https://pnpm.io/) +- [Docker](https://www.docker.com/) + +**Steps:** + +1. **Clone the project & change directory:** + ```bash + git clone https://github.com/formbricks/formbricks && cd formbricks + ``` + +2. **Setup NodeJS with nvm:** + ```bash + nvm install && nvm use + ``` + +3. **Install NodeJS packages with pnpm:** + ```bash + pnpm install + ``` + +4. **Create a `.env` file from the example:** + ```bash + cp .env.example .env + ``` + +5. **Generate & set secret values (using BSD sed syntax for macOS):** + ```bash + sed -i '' '/^ENCRYPTION_KEY=/s|.*|ENCRYPTION_KEY='$(openssl rand -hex 32)'|' .env + sed -i '' '/^NEXTAUTH_SECRET=/s|.*|NEXTAUTH_SECRET='$(openssl rand -hex 32)'|' .env + sed -i '' '/^CRON_SECRET=/s|.*|CRON_SECRET='$(openssl rand -hex 32)'|' .env + ``` + +6. **Start the development setup:** + ```bash + pnpm go + ``` + +Visit [http://localhost:3000](http://localhost:3000) to access Formbricks. + + + Ensure you create a new account at first login. + \ No newline at end of file diff --git a/docs/development/local-setup/windows.mdx b/docs/development/local-setup/windows.mdx new file mode 100644 index 0000000000..44b085292c --- /dev/null +++ b/docs/development/local-setup/windows.mdx @@ -0,0 +1,57 @@ +--- +title: Windows +description: How to set up Formbricks on a Windows machine +icon: "windows" +--- + +### Local Machine Setup - Windows + + + This guide is intended for **Windows** users. For the best experience, use **WSL2** since pure Windows is not fully supported. + + +**Requirements:** + +- Node.JS (v20 recommended) via WSL2 +- [pnpm](https://pnpm.io/) +- [Docker](https://www.docker.com/) (ensure Docker Desktop is installed with WSL2 integration enabled) + +**Steps (Using WSL2):** + +1. **Open your WSL2 terminal and clone the project:** + ```bash + git clone https://github.com/formbricks/formbricks && cd formbricks + ``` + +2. **Setup NodeJS with nvm in WSL2:** + ```bash + nvm install && nvm use + ``` + +3. **Install packages using pnpm:** + ```bash + pnpm install + ``` + +4. **Create a `.env` file:** + ```bash + cp .env.example .env + ``` + +5. **Generate & set secret values (Linux commands work in WSL2):** + ```bash + sed -i '/^ENCRYPTION_KEY=/c\ENCRYPTION_KEY='$(openssl rand -hex 32) .env + sed -i '/^NEXTAUTH_SECRET=/c\NEXTAUTH_SECRET='$(openssl rand -hex 32) .env + sed -i '/^CRON_SECRET=/c\CRON_SECRET='$(openssl rand -hex 32) .env + ``` + +6. **Start the development setup:** + ```bash + pnpm go + ``` + +Access Formbricks at [http://localhost:3000](http://localhost:3000). + + + If you run into conflicts, ensure any local services (like PostgreSQL) are stopped. + \ No newline at end of file diff --git a/docs/development/overview.mdx b/docs/development/overview.mdx new file mode 100644 index 0000000000..704b99c44f --- /dev/null +++ b/docs/development/overview.mdx @@ -0,0 +1,16 @@ +--- +title: Development +description: Learn how to setup formbricks locally and develop on it +icon: "code" +--- + +Welcome to the Development section of Formbricks! This guide is designed to help you get started with setting up the project locally, contributing to the Formbricks codebase, and customizing it to suit your needs. + +Whether you're a seasoned developer or just getting started, you'll find valuable information on how to: + +- **Set Up Locally**: Step-by-step instructions to clone the repository, install dependencies, and run Formbricks on your local machine. +- **Contribute**: Guidelines on how to contribute to the project, including coding standards, submitting pull requests, and collaborating with other developers. +- **Customize**: Tips and tricks for customizing Formbricks to better fit your specific use cases, including modifying components and extending functionality. + +Dive in and start building with Formbricks today! + diff --git a/docs/development/support/troubleshooting.mdx b/docs/development/support/troubleshooting.mdx new file mode 100644 index 0000000000..09064108c6 --- /dev/null +++ b/docs/development/support/troubleshooting.mdx @@ -0,0 +1,38 @@ +--- +title: "Troubleshooting" +description: "Here, you'll find help with common issues." +icon: "wrench" +--- + +## "The app doesn't work after Prisma migration" + +If the app doesn’t work after a Prisma migration, clear your browser’s storage and reload the page. This will force the app to fetch data from the server again. ![prisma](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738108186/image_dwm9hp.jpg) + +## "I ran 'pnpm i' but there seems to be an error with the packages" + +If you run `pnpm i` and get an error with the packages, try running `pnpm clean` followed by `pnpm i` again. This often solves the problem. + +## "I get a full-screen error with cryptic strings" + +This usually happens when the Formbricks Widget isn't correctly or completely built. + +```bash +pnpm build --filter=@formbricks/js + +// Run the app again +pnpm dev +``` + +## "My machine struggles with the repository" + +Since we're working with a monorepo structure, the repository can get quite big. If you're having trouble working with the repository, try the following: + +```bash helloWorld.js +pnpm dev --filter=@formbricks/web... +``` + +It’s better to use a single terminal with `pnpm dev` rather than having multiple open (one with the Formbricks app and one with the demo). + +## Error: "Uncaught (in promise) SyntaxError: Unexpected token !DOCTYPE ... is not valid JSON"![Syntax Error](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738109837/image_wbxv8k.jpg) + +If you see this error, it happens when the person connected to the widget is deleted. To fix it, log out of the test person and reload the page.![Reset person](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738110212/image_nvkpku.jpg) diff --git a/docs/images/favicon.svg b/docs/images/favicon.svg new file mode 100644 index 0000000000..84c094c3bc --- /dev/null +++ b/docs/images/favicon.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/logo-dark.svg b/docs/images/logo-dark.svg new file mode 100644 index 0000000000..7f0568ab1a --- /dev/null +++ b/docs/images/logo-dark.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/logo-light.svg b/docs/images/logo-light.svg new file mode 100644 index 0000000000..659385db41 --- /dev/null +++ b/docs/images/logo-light.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/xm-and-surveys/core-features/access-roles/add-member.webp b/docs/images/xm-and-surveys/core-features/access-roles/add-member.webp new file mode 100644 index 0000000000..dba6f062f5 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/access-roles/add-member.webp differ diff --git a/docs/images/xm-and-surveys/core-features/access-roles/bulk-invite.webp b/docs/images/xm-and-surveys/core-features/access-roles/bulk-invite.webp new file mode 100644 index 0000000000..cdd2189d5d Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/access-roles/bulk-invite.webp differ diff --git a/docs/images/xm-and-surveys/core-features/access-roles/individual-invite.webp b/docs/images/xm-and-surveys/core-features/access-roles/individual-invite.webp new file mode 100644 index 0000000000..fd9426ccc3 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/access-roles/individual-invite.webp differ diff --git a/docs/images/xm-and-surveys/core-features/access-roles/organization-settings-menu.webp b/docs/images/xm-and-surveys/core-features/access-roles/organization-settings-menu.webp new file mode 100644 index 0000000000..63794142c6 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/access-roles/organization-settings-menu.webp differ diff --git a/docs/images/xm-and-surveys/core-features/access-roles/team-settings-menu.webp b/docs/images/xm-and-surveys/core-features/access-roles/team-settings-menu.webp new file mode 100644 index 0000000000..63794142c6 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/access-roles/team-settings-menu.webp differ diff --git a/docs/images/xm-and-surveys/core-features/email-customization/email-customization-card.webp b/docs/images/xm-and-surveys/core-features/email-customization/email-customization-card.webp new file mode 100644 index 0000000000..bdc93d051b Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/email-customization/email-customization-card.webp differ diff --git a/docs/images/xm-and-surveys/core-features/email-customization/email-sample.webp b/docs/images/xm-and-surveys/core-features/email-customization/email-sample.webp new file mode 100644 index 0000000000..197cb6f20f Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/email-customization/email-sample.webp differ diff --git a/docs/images/xm-and-surveys/core-features/email-customization/updated-logo.webp b/docs/images/xm-and-surveys/core-features/email-customization/updated-logo.webp new file mode 100644 index 0000000000..12eedafa51 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/email-customization/updated-logo.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/configure-connection.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/configure-connection.webp new file mode 100644 index 0000000000..cd0daa6e95 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/configure-connection.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/create-connection.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/create-connection.webp new file mode 100644 index 0000000000..eec50e6364 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/create-connection.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/create-new-flow.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/create-new-flow.webp new file mode 100644 index 0000000000..ec1efff3da Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/create-new-flow.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/duplicate-survey.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/duplicate-survey.webp new file mode 100644 index 0000000000..842612ca8b Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/duplicate-survey.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/match-data.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/match-data.webp new file mode 100644 index 0000000000..db12224e5c Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/match-data.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/result.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/result.webp new file mode 100644 index 0000000000..5fa6cac881 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/result.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/search-formbricks.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/search-formbricks.webp new file mode 100644 index 0000000000..5a804f56c2 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/search-formbricks.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/select-google-sheet.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/select-google-sheet.webp new file mode 100644 index 0000000000..824e560839 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/select-google-sheet.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/select-gs-sheet.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/select-gs-sheet.webp new file mode 100644 index 0000000000..2b34521238 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/select-gs-sheet.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/select-survey.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/select-survey.webp new file mode 100644 index 0000000000..9547653fdf Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/select-survey.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/success-response.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/success-response.webp new file mode 100644 index 0000000000..dc790dc4fc Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/success-response.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/test-trigger.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/test-trigger.webp new file mode 100644 index 0000000000..e6756823da Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/test-trigger.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/activepieces/update-question-id.webp b/docs/images/xm-and-surveys/core-features/integrations/activepieces/update-question-id.webp new file mode 100644 index 0000000000..b1db9d6140 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/activepieces/update-question-id.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/add-base.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/add-base.webp new file mode 100644 index 0000000000..0e3ae3e1ba Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/add-base.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/airtable-connected.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/airtable-connected.webp new file mode 100644 index 0000000000..143e7d370d Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/airtable-connected.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/connect-with-airtable.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/connect-with-airtable.webp new file mode 100644 index 0000000000..a9ac572dc7 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/connect-with-airtable.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/create-new-integration.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/create-new-integration.webp new file mode 100644 index 0000000000..a55bdc618d Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/create-new-integration.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/delete-integration.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/delete-integration.webp new file mode 100644 index 0000000000..4a80b50a8d Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/delete-integration.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/integrations-tab.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/integrations-tab.webp new file mode 100644 index 0000000000..f0430ecaa2 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/integrations-tab.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/link-survey-with-table.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/link-survey-with-table.webp new file mode 100644 index 0000000000..785363dae6 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/link-survey-with-table.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/link-with-questions.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/link-with-questions.webp new file mode 100644 index 0000000000..57bfba7fb0 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/link-with-questions.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/list-linked-surveys.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/list-linked-surveys.webp new file mode 100644 index 0000000000..3b50cee9e5 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/list-linked-surveys.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/open-developer-hub.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/open-developer-hub.webp new file mode 100644 index 0000000000..648aab6598 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/open-developer-hub.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/register-new-integration.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/register-new-integration.webp new file mode 100644 index 0000000000..331ea78dfd Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/register-new-integration.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/airtable/select-scopes.webp b/docs/images/xm-and-surveys/core-features/integrations/airtable/select-scopes.webp new file mode 100644 index 0000000000..f60e8ca7f4 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/airtable/select-scopes.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/google-sheets/connect-with-google.webp b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/connect-with-google.webp new file mode 100644 index 0000000000..782718a973 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/connect-with-google.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/google-sheets/delete-connection.webp b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/delete-connection.webp new file mode 100644 index 0000000000..d845f2d0a1 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/delete-connection.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/google-sheets/google-connected.webp b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/google-connected.webp new file mode 100644 index 0000000000..30abe13403 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/google-connected.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/google-sheets/integrations-tab.webp b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/integrations-tab.webp new file mode 100644 index 0000000000..79e4cf9b19 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/integrations-tab.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/google-sheets/link-survey-with-sheet.webp b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/link-survey-with-sheet.webp new file mode 100644 index 0000000000..daa7a1ee90 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/link-survey-with-sheet.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/google-sheets/link-with-questions.webp b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/link-with-questions.webp new file mode 100644 index 0000000000..c09b0656d0 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/link-with-questions.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/google-sheets/list-linked-surveys.webp b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/list-linked-surveys.webp new file mode 100644 index 0000000000..cc84c7ca6a Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/google-sheets/list-linked-surveys.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/add-module.webp b/docs/images/xm-and-surveys/core-features/integrations/make/add-module.webp new file mode 100644 index 0000000000..0104803bd4 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/add-module.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/create-new-scenario.webp b/docs/images/xm-and-surveys/core-features/integrations/make/create-new-scenario.webp new file mode 100644 index 0000000000..729e3c3586 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/create-new-scenario.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/create-webhook.webp b/docs/images/xm-and-surveys/core-features/integrations/make/create-webhook.webp new file mode 100644 index 0000000000..c60864c0d0 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/create-webhook.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/duplicate-survey.webp b/docs/images/xm-and-surveys/core-features/integrations/make/duplicate-survey.webp new file mode 100644 index 0000000000..c4c9e4258a Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/duplicate-survey.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/enter-api-key-and-host.webp b/docs/images/xm-and-surveys/core-features/integrations/make/enter-api-key-and-host.webp new file mode 100644 index 0000000000..4d0213aa40 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/enter-api-key-and-host.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/result.webp b/docs/images/xm-and-surveys/core-features/integrations/make/result.webp new file mode 100644 index 0000000000..f775db5f72 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/result.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/search-formbricks.webp b/docs/images/xm-and-surveys/core-features/integrations/make/search-formbricks.webp new file mode 100644 index 0000000000..811bae7839 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/search-formbricks.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/select-action.webp b/docs/images/xm-and-surveys/core-features/integrations/make/select-action.webp new file mode 100644 index 0000000000..0af544befc Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/select-action.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/select-fields.webp b/docs/images/xm-and-surveys/core-features/integrations/make/select-fields.webp new file mode 100644 index 0000000000..ff02fc6fc7 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/select-fields.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/select-survey.webp b/docs/images/xm-and-surveys/core-features/integrations/make/select-survey.webp new file mode 100644 index 0000000000..dd73934522 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/select-survey.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/select-trigger.webp b/docs/images/xm-and-surveys/core-features/integrations/make/select-trigger.webp new file mode 100644 index 0000000000..ba19fd4b58 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/select-trigger.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/submit-test-response.webp b/docs/images/xm-and-surveys/core-features/integrations/make/submit-test-response.webp new file mode 100644 index 0000000000..ff098a5d19 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/submit-test-response.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/make/update-question-id.webp b/docs/images/xm-and-surveys/core-features/integrations/make/update-question-id.webp new file mode 100644 index 0000000000..7e00ff2dea Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/make/update-question-id.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/add-api-key.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/add-api-key.webp new file mode 100644 index 0000000000..d015ff537d Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/add-api-key.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/add-discord.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/add-discord.webp new file mode 100644 index 0000000000..e5f7b5c59a Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/add-discord.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/add-formbricks-trigger.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/add-formbricks-trigger.webp new file mode 100644 index 0000000000..f6219251e3 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/add-formbricks-trigger.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/create-new-credential-btn.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/create-new-credential-btn.webp new file mode 100644 index 0000000000..bfc1a0c7dc Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/create-new-credential-btn.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/discord-response.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/discord-response.webp new file mode 100644 index 0000000000..5d39b9cc91 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/discord-response.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/duplicate-survey.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/duplicate-survey.webp new file mode 100644 index 0000000000..c4c9e4258a Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/duplicate-survey.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/fill-discord-details.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/fill-discord-details.webp new file mode 100644 index 0000000000..56dc5b6ef3 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/fill-discord-details.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/listen-for-event.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/listen-for-event.webp new file mode 100644 index 0000000000..a08211e4b9 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/listen-for-event.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/select-event.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/select-event.webp new file mode 100644 index 0000000000..54c613ed25 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/select-event.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/select-survey.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/select-survey.webp new file mode 100644 index 0000000000..f10c163bcf Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/select-survey.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/selected-surveys.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/selected-surveys.webp new file mode 100644 index 0000000000..a1619783e1 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/selected-surveys.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/submit-test-response.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/submit-test-response.webp new file mode 100644 index 0000000000..735e6eb951 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/submit-test-response.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/success-connection.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/success-connection.webp new file mode 100644 index 0000000000..888369916a Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/success-connection.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/test-response-success.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/test-response-success.webp new file mode 100644 index 0000000000..c25cdf6336 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/test-response-success.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/n8n/update-question-id.webp b/docs/images/xm-and-surveys/core-features/integrations/n8n/update-question-id.webp new file mode 100644 index 0000000000..7e00ff2dea Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/n8n/update-question-id.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/notion/connect-with-notion.webp b/docs/images/xm-and-surveys/core-features/integrations/notion/connect-with-notion.webp new file mode 100644 index 0000000000..ec5d4553e0 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/notion/connect-with-notion.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/notion/delete-connection.webp b/docs/images/xm-and-surveys/core-features/integrations/notion/delete-connection.webp new file mode 100644 index 0000000000..3a857ebe31 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/notion/delete-connection.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/notion/integrations-tab.webp b/docs/images/xm-and-surveys/core-features/integrations/notion/integrations-tab.webp new file mode 100644 index 0000000000..b408f96d9a Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/notion/integrations-tab.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/notion/link-survey-with-database.webp b/docs/images/xm-and-surveys/core-features/integrations/notion/link-survey-with-database.webp new file mode 100644 index 0000000000..8a54a70676 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/notion/link-survey-with-database.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/notion/link-with-databases.webp b/docs/images/xm-and-surveys/core-features/integrations/notion/link-with-databases.webp new file mode 100644 index 0000000000..ca41fb0bf5 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/notion/link-with-databases.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/notion/list-linked-databases.webp b/docs/images/xm-and-surveys/core-features/integrations/notion/list-linked-databases.webp new file mode 100644 index 0000000000..3e5fb7b4ec Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/notion/list-linked-databases.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/notion/notion-connected.webp b/docs/images/xm-and-surveys/core-features/integrations/notion/notion-connected.webp new file mode 100644 index 0000000000..405277e807 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/notion/notion-connected.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-1.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-1.webp new file mode 100644 index 0000000000..6169f86383 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-1.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-2.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-2.webp new file mode 100644 index 0000000000..f17d540c93 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-2.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-3.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-3.webp new file mode 100644 index 0000000000..ea4e6217e4 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-3.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-4.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-4.webp new file mode 100644 index 0000000000..f070e360ac Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/add-slack-bot-4.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/connect-with-slack.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/connect-with-slack.webp new file mode 100644 index 0000000000..6927d8d236 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/connect-with-slack.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/delete-connection.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/delete-connection.webp new file mode 100644 index 0000000000..2f1cbc5122 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/delete-connection.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/integrations-tab.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/integrations-tab.webp new file mode 100644 index 0000000000..c4dc113fcb Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/integrations-tab.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/link-survey-with-channel.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/link-survey-with-channel.webp new file mode 100644 index 0000000000..a12656ecb0 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/link-survey-with-channel.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/link-with-questions.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/link-with-questions.webp new file mode 100644 index 0000000000..caaca0088b Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/link-with-questions.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/list-linked-surveys.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/list-linked-surveys.webp new file mode 100644 index 0000000000..7709179e9f Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/list-linked-surveys.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/slack-auth.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/slack-auth.webp new file mode 100644 index 0000000000..1a7b96fc52 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/slack-auth.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/slack/slack-connected.webp b/docs/images/xm-and-surveys/core-features/integrations/slack/slack-connected.webp new file mode 100644 index 0000000000..5a169935e7 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/slack/slack-connected.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/wordpress/1-wordpress-targeted-survey-on-website-free.webp b/docs/images/xm-and-surveys/core-features/integrations/wordpress/1-wordpress-targeted-survey-on-website-free.webp new file mode 100644 index 0000000000..625fdb825d Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/wordpress/1-wordpress-targeted-survey-on-website-free.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/wordpress/2-run-website-survey-wordpress-targeted-for-free.webp b/docs/images/xm-and-surveys/core-features/integrations/wordpress/2-run-website-survey-wordpress-targeted-for-free.webp new file mode 100644 index 0000000000..fc08053b83 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/wordpress/2-run-website-survey-wordpress-targeted-for-free.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/wordpress/3-wordpress-setup-survey-on-website-targeted-free-open-source.webp b/docs/images/xm-and-surveys/core-features/integrations/wordpress/3-wordpress-setup-survey-on-website-targeted-free-open-source.webp new file mode 100644 index 0000000000..65f850b5df Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/wordpress/3-wordpress-setup-survey-on-website-targeted-free-open-source.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/wordpress/4-wordpress-website-survey-target-visitor-free.webp b/docs/images/xm-and-surveys/core-features/integrations/wordpress/4-wordpress-website-survey-target-visitor-free.webp new file mode 100644 index 0000000000..154b458282 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/wordpress/4-wordpress-website-survey-target-visitor-free.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/wordpress/6-targeted-survey-on-wordpress-website-for-free.webp b/docs/images/xm-and-surveys/core-features/integrations/wordpress/6-targeted-survey-on-wordpress-website-for-free.webp new file mode 100644 index 0000000000..88b965c387 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/wordpress/6-targeted-survey-on-wordpress-website-for-free.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/wordpress/7-wordpress-free-hotjar-survey-open-source-website-survey-hotjar.webp b/docs/images/xm-and-surveys/core-features/integrations/wordpress/7-wordpress-free-hotjar-survey-open-source-website-survey-hotjar.webp new file mode 100644 index 0000000000..bbf59a73b3 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/wordpress/7-wordpress-free-hotjar-survey-open-source-website-survey-hotjar.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/wordpress/step-4-copy-to-wordpress-for-free-targeted-survey.webp b/docs/images/xm-and-surveys/core-features/integrations/wordpress/step-4-copy-to-wordpress-for-free-targeted-survey.webp new file mode 100644 index 0000000000..150bd89743 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/wordpress/step-4-copy-to-wordpress-for-free-targeted-survey.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/add-new-zap.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/add-new-zap.webp new file mode 100644 index 0000000000..4f4ff0cec2 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/add-new-zap.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/choose-event.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/choose-event.webp new file mode 100644 index 0000000000..9eacab449f Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/choose-event.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/connect-with-formbricks-1.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/connect-with-formbricks-1.webp new file mode 100644 index 0000000000..d7b6b8ccde Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/connect-with-formbricks-1.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/connect-with-formbricks-2.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/connect-with-formbricks-2.webp new file mode 100644 index 0000000000..c5b7fa12c1 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/connect-with-formbricks-2.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/duplicate-survey.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/duplicate-survey.webp new file mode 100644 index 0000000000..88ad485c7a Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/duplicate-survey.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/select-survey.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/select-survey.webp new file mode 100644 index 0000000000..880aab8b15 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/select-survey.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/slack-channel-msg.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/slack-channel-msg.webp new file mode 100644 index 0000000000..d06fa628c4 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/slack-channel-msg.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/slack-message.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/slack-message.webp new file mode 100644 index 0000000000..f0cf71b1f1 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/slack-message.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/submit-test-response.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/submit-test-response.webp new file mode 100644 index 0000000000..d294882d09 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/submit-test-response.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/success-connected.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/success-connected.webp new file mode 100644 index 0000000000..987cfaa9d2 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/success-connected.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/test-submission.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/test-submission.webp new file mode 100644 index 0000000000..6a28586b47 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/test-submission.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/update-question-id.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/update-question-id.webp new file mode 100644 index 0000000000..834eb086ea Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/update-question-id.webp differ diff --git a/docs/images/xm-and-surveys/core-features/integrations/zapier/zapier-message.webp b/docs/images/xm-and-surveys/core-features/integrations/zapier/zapier-message.webp new file mode 100644 index 0000000000..425b109860 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/integrations/zapier/zapier-message.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/address.webp b/docs/images/xm-and-surveys/core-features/question-type/address.webp new file mode 100644 index 0000000000..7f9279616f Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/address.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/consent.webp b/docs/images/xm-and-surveys/core-features/question-type/consent.webp new file mode 100644 index 0000000000..60291a402c Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/consent.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/contact-info.webp b/docs/images/xm-and-surveys/core-features/question-type/contact-info.webp new file mode 100644 index 0000000000..ac2ade0722 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/contact-info.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/date.webp b/docs/images/xm-and-surveys/core-features/question-type/date.webp new file mode 100644 index 0000000000..6fa0c564a4 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/date.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/file-upload.webp b/docs/images/xm-and-surveys/core-features/question-type/file-upload.webp new file mode 100644 index 0000000000..dd85a6d161 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/file-upload.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/free-text.webp b/docs/images/xm-and-surveys/core-features/question-type/free-text.webp new file mode 100644 index 0000000000..960d9b4cc1 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/free-text.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/matrix.webp b/docs/images/xm-and-surveys/core-features/question-type/matrix.webp new file mode 100644 index 0000000000..8c3d1c436f Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/matrix.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/multi-select.webp b/docs/images/xm-and-surveys/core-features/question-type/multi-select.webp new file mode 100644 index 0000000000..8c169b6f2e Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/multi-select.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/net-promoter-score.webp b/docs/images/xm-and-surveys/core-features/question-type/net-promoter-score.webp new file mode 100644 index 0000000000..1b30bcc4d4 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/net-promoter-score.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/ranking.webp b/docs/images/xm-and-surveys/core-features/question-type/ranking.webp new file mode 100644 index 0000000000..b057d34f34 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/ranking.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/rating.webp b/docs/images/xm-and-surveys/core-features/question-type/rating.webp new file mode 100644 index 0000000000..9b1000ba1e Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/rating.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/schedule-a-meeting.webp b/docs/images/xm-and-surveys/core-features/question-type/schedule-a-meeting.webp new file mode 100644 index 0000000000..55b291282c Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/schedule-a-meeting.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/select-picture.webp b/docs/images/xm-and-surveys/core-features/question-type/select-picture.webp new file mode 100644 index 0000000000..5c780e5530 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/select-picture.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/select-single.webp b/docs/images/xm-and-surveys/core-features/question-type/select-single.webp new file mode 100644 index 0000000000..8949f4ab5a Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/select-single.webp differ diff --git a/docs/images/xm-and-surveys/core-features/question-type/statement-cta.webp b/docs/images/xm-and-surveys/core-features/question-type/statement-cta.webp new file mode 100644 index 0000000000..c0762f3198 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/question-type/statement-cta.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/allow-overwrite.webp b/docs/images/xm-and-surveys/core-features/styling-theme/allow-overwrite.webp new file mode 100644 index 0000000000..fcadbc68e0 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/allow-overwrite.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/background-settings.webp b/docs/images/xm-and-surveys/core-features/styling-theme/background-settings.webp new file mode 100644 index 0000000000..01fff26e7e Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/background-settings.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/card-settings.webp b/docs/images/xm-and-surveys/core-features/styling-theme/card-settings.webp new file mode 100644 index 0000000000..9ad553b4cc Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/card-settings.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/doggo.webp b/docs/images/xm-and-surveys/core-features/styling-theme/doggo.webp new file mode 100644 index 0000000000..65096ccd59 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/doggo.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/form-settings.webp b/docs/images/xm-and-surveys/core-features/styling-theme/form-settings.webp new file mode 100644 index 0000000000..643cf950ac Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/form-settings.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/hipster-living.webp b/docs/images/xm-and-surveys/core-features/styling-theme/hipster-living.webp new file mode 100644 index 0000000000..c83c00ed3e Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/hipster-living.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/look-and-feel.webp b/docs/images/xm-and-surveys/core-features/styling-theme/look-and-feel.webp new file mode 100644 index 0000000000..b7c8dcfff9 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/look-and-feel.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/mario.webp b/docs/images/xm-and-surveys/core-features/styling-theme/mario.webp new file mode 100644 index 0000000000..62470994b7 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/mario.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/pre-requisite.webp b/docs/images/xm-and-surveys/core-features/styling-theme/pre-requisite.webp new file mode 100644 index 0000000000..1b296658df Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/pre-requisite.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-eight.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-eight.webp new file mode 100644 index 0000000000..5c35789d03 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-eight.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-eleven.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-eleven.webp new file mode 100644 index 0000000000..0cb0b13445 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-eleven.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-five.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-five.webp new file mode 100644 index 0000000000..71daa7e751 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-five.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-four.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-four.webp new file mode 100644 index 0000000000..3ca7dc38d9 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-four.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-nine.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-nine.webp new file mode 100644 index 0000000000..bd8c73fe7e Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-nine.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-one.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-one.webp new file mode 100644 index 0000000000..d8908f7cd7 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-one.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-seven.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-seven.webp new file mode 100644 index 0000000000..bcbabf8315 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-seven.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-six.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-six.webp new file mode 100644 index 0000000000..3ac271b6c8 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-six.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-ten.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-ten.webp new file mode 100644 index 0000000000..092b337eb7 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-ten.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-three.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-three.webp new file mode 100644 index 0000000000..cedee026fe Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-three.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/step-two.webp b/docs/images/xm-and-surveys/core-features/styling-theme/step-two.webp new file mode 100644 index 0000000000..54f3d0e907 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/step-two.webp differ diff --git a/docs/images/xm-and-surveys/core-features/styling-theme/windows-xp.webp b/docs/images/xm-and-surveys/core-features/styling-theme/windows-xp.webp new file mode 100644 index 0000000000..45f588a285 Binary files /dev/null and b/docs/images/xm-and-surveys/core-features/styling-theme/windows-xp.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/add-image-or-video-question/add-image-or-video-to-question-image.webp b/docs/images/xm-and-surveys/surveys/general-features/add-image-or-video-question/add-image-or-video-to-question-image.webp new file mode 100644 index 0000000000..838117dc32 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/add-image-or-video-question/add-image-or-video-to-question-image.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/add-image-or-video-question/add-image-or-video-to-question-video.webp b/docs/images/xm-and-surveys/surveys/general-features/add-image-or-video-question/add-image-or-video-to-question-video.webp new file mode 100644 index 0000000000..cb4b0536bc Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/add-image-or-video-question/add-image-or-video-to-question-video.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/add-image-or-video-question/add-image-or-video-to-question.webp b/docs/images/xm-and-surveys/surveys/general-features/add-image-or-video-question/add-image-or-video-to-question.webp new file mode 100644 index 0000000000..54ea67f3ff Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/add-image-or-video-question/add-image-or-video-to-question.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate-operators.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate-operators.webp new file mode 100644 index 0000000000..c0928693b3 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate-operators.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate-value.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate-value.webp new file mode 100644 index 0000000000..678a56d404 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate-value.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate-variables.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate-variables.webp new file mode 100644 index 0000000000..b33a360a2c Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate-variables.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate.webp new file mode 100644 index 0000000000..fad23ba416 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-calculate.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-jump.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-jump.webp new file mode 100644 index 0000000000..acae8eea84 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-jump.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-options.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-options.webp new file mode 100644 index 0000000000..4635196200 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-options.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-require.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-require.webp new file mode 100644 index 0000000000..652dcbd7dd Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/action-require.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/add-logic.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/add-logic.webp new file mode 100644 index 0000000000..03504d21ca Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/add-logic.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-chaining.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-chaining.webp new file mode 100644 index 0000000000..a5560aced8 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-chaining.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-operators.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-operators.webp new file mode 100644 index 0000000000..8d99b4d44e Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-operators.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-options.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-options.webp new file mode 100644 index 0000000000..c08fbfa2b4 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-options.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-value.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-value.webp new file mode 100644 index 0000000000..4bc2d51218 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/condition-value.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/conditions.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/conditions.webp new file mode 100644 index 0000000000..85bb78d596 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/conditions.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/editor.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/editor.webp new file mode 100644 index 0000000000..bb7dab326c Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/editor.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/question-logic.webp b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/question-logic.webp new file mode 100644 index 0000000000..9d1d48845f Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/conditional-logic/question-logic.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/filled-hidden-fields.webp b/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/filled-hidden-fields.webp new file mode 100644 index 0000000000..1881351586 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/filled-hidden-fields.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/hidden-field-responses.webp b/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/hidden-field-responses.webp new file mode 100644 index 0000000000..0d01d48e74 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/hidden-field-responses.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/hidden-fields.webp b/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/hidden-fields.webp new file mode 100644 index 0000000000..6c4dc4ab8d Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/hidden-fields.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/input-hidden-fields.webp b/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/input-hidden-fields.webp new file mode 100644 index 0000000000..8f3d4e45a9 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/hidden-fields/input-hidden-fields.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/limit-submissions/limit-submissions.webp b/docs/images/xm-and-surveys/surveys/general-features/limit-submissions/limit-submissions.webp new file mode 100644 index 0000000000..4dcbe47395 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/limit-submissions/limit-submissions.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/metadata/filters.webp b/docs/images/xm-and-surveys/surveys/general-features/metadata/filters.webp new file mode 100644 index 0000000000..8c9d2b6f6b Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/metadata/filters.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/metadata/metadata-card.webp b/docs/images/xm-and-surveys/surveys/general-features/metadata/metadata-card.webp new file mode 100644 index 0000000000..16c802f7b2 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/metadata/metadata-card.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/add-language-in-survey.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/add-language-in-survey.webp new file mode 100644 index 0000000000..7e493802ef Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/add-language-in-survey.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/add-languages.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/add-languages.webp new file mode 100644 index 0000000000..081f81d46c Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/add-languages.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/edit-multi-lang.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/edit-multi-lang.webp new file mode 100644 index 0000000000..ef987c81a5 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/edit-multi-lang.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/enable-multi-lang.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/enable-multi-lang.webp new file mode 100644 index 0000000000..ff26f0a190 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/enable-multi-lang.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/home-page.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/home-page.webp new file mode 100644 index 0000000000..9f7392cd52 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/home-page.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/see-survey-in-language.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/see-survey-in-language.webp new file mode 100644 index 0000000000..d117b3cc51 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/see-survey-in-language.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/survey-languages-from-home.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/survey-languages-from-home.webp new file mode 100644 index 0000000000..c280254ad7 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/survey-languages-from-home.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/survey-languague-settings.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/survey-languague-settings.webp new file mode 100644 index 0000000000..c043011028 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/survey-languague-settings.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/survey-sharing.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/survey-sharing.webp new file mode 100644 index 0000000000..da69235865 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/survey-sharing.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/surveys-home.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/surveys-home.webp new file mode 100644 index 0000000000..d3f408e0bd Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/surveys-home.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/translate-as-per-language.webp b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/translate-as-per-language.webp new file mode 100644 index 0000000000..dc6b9b20c6 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/multi-language-surveys/translate-as-per-language.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/doggo.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/doggo.webp new file mode 100644 index 0000000000..65096ccd59 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/doggo.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/hipster-living.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/hipster-living.webp new file mode 100644 index 0000000000..c83c00ed3e Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/hipster-living.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/mario.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/mario.webp new file mode 100644 index 0000000000..62470994b7 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/mario.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/pre-requisite.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/pre-requisite.webp new file mode 100644 index 0000000000..1b296658df Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/pre-requisite.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-eight.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-eight.webp new file mode 100644 index 0000000000..5c35789d03 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-eight.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-eleven.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-eleven.webp new file mode 100644 index 0000000000..0cb0b13445 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-eleven.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-five.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-five.webp new file mode 100644 index 0000000000..71daa7e751 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-five.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-four.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-four.webp new file mode 100644 index 0000000000..3ca7dc38d9 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-four.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-nine.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-nine.webp new file mode 100644 index 0000000000..bd8c73fe7e Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-nine.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-one.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-one.webp new file mode 100644 index 0000000000..d8908f7cd7 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-one.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-seven.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-seven.webp new file mode 100644 index 0000000000..bcbabf8315 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-seven.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-six.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-six.webp new file mode 100644 index 0000000000..3ac271b6c8 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-six.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-ten.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-ten.webp new file mode 100644 index 0000000000..092b337eb7 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-ten.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-three.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-three.webp new file mode 100644 index 0000000000..cedee026fe Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-three.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-two.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-two.webp new file mode 100644 index 0000000000..54f3d0e907 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/step-two.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/windows-xp.webp b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/windows-xp.webp new file mode 100644 index 0000000000..45f588a285 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/overwrite-styling/windows-xp.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/partial-submissions/step-one.webp b/docs/images/xm-and-surveys/surveys/general-features/partial-submissions/step-one.webp new file mode 100644 index 0000000000..89494819fe Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/partial-submissions/step-one.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/recall/step-one.webp b/docs/images/xm-and-surveys/surveys/general-features/recall/step-one.webp new file mode 100644 index 0000000000..42ebcd0fa5 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/recall/step-one.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/recall/step-three.webp b/docs/images/xm-and-surveys/surveys/general-features/recall/step-three.webp new file mode 100644 index 0000000000..dd630ba876 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/recall/step-three.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/recall/step-two.webp b/docs/images/xm-and-surveys/surveys/general-features/recall/step-two.webp new file mode 100644 index 0000000000..98761acc8c Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/recall/step-two.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/schedule-start-end-dates/step-one.webp b/docs/images/xm-and-surveys/surveys/general-features/schedule-start-end-dates/step-one.webp new file mode 100644 index 0000000000..1ceaa74231 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/schedule-start-end-dates/step-one.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/schedule-start-end-dates/step-three.webp b/docs/images/xm-and-surveys/surveys/general-features/schedule-start-end-dates/step-three.webp new file mode 100644 index 0000000000..33f01ed624 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/schedule-start-end-dates/step-three.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/schedule-start-end-dates/step-two.webp b/docs/images/xm-and-surveys/surveys/general-features/schedule-start-end-dates/step-two.webp new file mode 100644 index 0000000000..4dcbe47395 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/schedule-start-end-dates/step-two.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/shareable-dashboards/1-publish-to-web.webp b/docs/images/xm-and-surveys/surveys/general-features/shareable-dashboards/1-publish-to-web.webp new file mode 100644 index 0000000000..3d8996b622 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/shareable-dashboards/1-publish-to-web.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/shareable-dashboards/2-warning-publish.webp b/docs/images/xm-and-surveys/surveys/general-features/shareable-dashboards/2-warning-publish.webp new file mode 100644 index 0000000000..0d8ac85853 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/shareable-dashboards/2-warning-publish.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/shareable-dashboards/3-share-link.webp b/docs/images/xm-and-surveys/surveys/general-features/shareable-dashboards/3-share-link.webp new file mode 100644 index 0000000000..3ae5696f88 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/shareable-dashboards/3-share-link.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/show-survey-to-percent-of-users/step-one.webp b/docs/images/xm-and-surveys/surveys/general-features/show-survey-to-percent-of-users/step-one.webp new file mode 100644 index 0000000000..1a8587a024 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/show-survey-to-percent-of-users/step-one.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/show-survey-to-percent-of-users/step-two.webp b/docs/images/xm-and-surveys/surveys/general-features/show-survey-to-percent-of-users/step-two.webp new file mode 100644 index 0000000000..b37dda4e3f Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/show-survey-to-percent-of-users/step-two.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/variables/created-variables.webp b/docs/images/xm-and-surveys/surveys/general-features/variables/created-variables.webp new file mode 100644 index 0000000000..4567d91598 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/variables/created-variables.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/variables/input-variables.webp b/docs/images/xm-and-surveys/surveys/general-features/variables/input-variables.webp new file mode 100644 index 0000000000..6273bfe5fc Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/variables/input-variables.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/variables/logic-with-variables.webp b/docs/images/xm-and-surveys/surveys/general-features/variables/logic-with-variables.webp new file mode 100644 index 0000000000..24db41a7e3 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/variables/logic-with-variables.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/variables/variables-card.webp b/docs/images/xm-and-surveys/surveys/general-features/variables/variables-card.webp new file mode 100644 index 0000000000..c9f6c781d6 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/variables/variables-card.webp differ diff --git a/docs/images/xm-and-surveys/surveys/general-features/variables/variables-usage.webp b/docs/images/xm-and-surveys/surveys/general-features/variables/variables-usage.webp new file mode 100644 index 0000000000..2ff22da6ad Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/general-features/variables/variables-usage.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/data-prefilling/question-id.webp b/docs/images/xm-and-surveys/surveys/link-surveys/data-prefilling/question-id.webp new file mode 100644 index 0000000000..8dfcb219c5 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/data-prefilling/question-id.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/email-content-with-survey.webp b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/email-content-with-survey.webp new file mode 100644 index 0000000000..6782b534ee Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/email-content-with-survey.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/email-content-without-survey.webp b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/email-content-without-survey.webp new file mode 100644 index 0000000000..d35f1683dd Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/email-content-without-survey.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-disabled.webp b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-disabled.webp new file mode 100644 index 0000000000..5a0532b30a Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-disabled.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-enabled.webp b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-enabled.webp new file mode 100644 index 0000000000..187535b462 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-enabled.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-toggle.webp b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-toggle.webp new file mode 100644 index 0000000000..661e76177b Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-toggle.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/jo-signature.webp b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/jo-signature.webp new file mode 100644 index 0000000000..859260e6d1 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/jo-signature.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/plugin-add-survey.webp b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/plugin-add-survey.webp new file mode 100644 index 0000000000..92d474a09c Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/plugin-add-survey.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/plugin-source-tab.webp b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/plugin-source-tab.webp new file mode 100644 index 0000000000..6b765123e6 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/embed-surveys/plugin-source-tab.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/copy-survey-link.webp b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/copy-survey-link.webp new file mode 100644 index 0000000000..f994d21f67 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/copy-survey-link.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/create-study.webp b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/create-study.webp new file mode 100644 index 0000000000..969bc3616d Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/create-study.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/hidden-fields.webp b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/hidden-fields.webp new file mode 100644 index 0000000000..4c4545ca21 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/hidden-fields.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/preview-complete.webp b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/preview-complete.webp new file mode 100644 index 0000000000..7e7120d926 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/preview-complete.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/preview-study.webp b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/preview-study.webp new file mode 100644 index 0000000000..6b665e8954 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/preview-study.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/redirect-url-formbricks.webp b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/redirect-url-formbricks.webp new file mode 100644 index 0000000000..eda709578c Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/redirect-url-formbricks.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/redirect-url.webp b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/redirect-url.webp new file mode 100644 index 0000000000..3f106f1bf3 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/redirect-url.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/screening-out.webp b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/screening-out.webp new file mode 100644 index 0000000000..7d8dee37f2 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/screening-out.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/url-parameters.webp b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/url-parameters.webp new file mode 100644 index 0000000000..2215eb11f0 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/market-research-panel/url-parameters.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-five.webp b/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-five.webp new file mode 100644 index 0000000000..52c23b53de Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-five.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-four.webp b/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-four.webp new file mode 100644 index 0000000000..b186fde5f4 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-four.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-one.webp b/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-one.webp new file mode 100644 index 0000000000..7d74be7026 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-one.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-three.webp b/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-three.webp new file mode 100644 index 0000000000..c59f807ce8 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-three.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-two.webp b/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-two.webp new file mode 100644 index 0000000000..abe1ae4de4 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-two.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/env-variable.webp b/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/env-variable.webp new file mode 100644 index 0000000000..5ac40484eb Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/env-variable.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/metadata.webp b/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/metadata.webp new file mode 100644 index 0000000000..8b806e0a56 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/metadata.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/share-modal.webp b/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/share-modal.webp new file mode 100644 index 0000000000..82cf5ba31f Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/share-modal.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/single-use-setting.webp b/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/single-use-setting.webp new file mode 100644 index 0000000000..9161968715 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/single-use-setting.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/used-message.webp b/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/used-message.webp new file mode 100644 index 0000000000..f1f5b5f588 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/single-use-links/used-message.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/source-tracking/share-link.webp b/docs/images/xm-and-surveys/surveys/link-surveys/source-tracking/share-link.webp new file mode 100644 index 0000000000..12d9357727 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/source-tracking/share-link.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/source-tracking/view-response.webp b/docs/images/xm-and-surveys/surveys/link-surveys/source-tracking/view-response.webp new file mode 100644 index 0000000000..8b0e9bd7d5 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/source-tracking/view-response.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-five.webp b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-five.webp new file mode 100644 index 0000000000..bce405556c Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-five.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-four.webp b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-four.webp new file mode 100644 index 0000000000..d9ed057e01 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-four.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-one.webp b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-one.webp new file mode 100644 index 0000000000..679f4e9e73 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-one.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-seven.webp b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-seven.webp new file mode 100644 index 0000000000..519720f79b Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-seven.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-six.webp b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-six.webp new file mode 100644 index 0000000000..5ca465d171 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-six.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-three.webp b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-three.webp new file mode 100644 index 0000000000..b4e20a69b2 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-three.webp differ diff --git a/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-two.webp b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-two.webp new file mode 100644 index 0000000000..a3d871c668 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-two.webp differ diff --git a/docs/images/xm-and-surveys/surveys/website-app-surveys/actions/i1.webp b/docs/images/xm-and-surveys/surveys/website-app-surveys/actions/i1.webp new file mode 100644 index 0000000000..88c128dc54 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/website-app-surveys/actions/i1.webp differ diff --git a/docs/images/xm-and-surveys/surveys/website-app-surveys/actions/i2.webp b/docs/images/xm-and-surveys/surveys/website-app-surveys/actions/i2.webp new file mode 100644 index 0000000000..0e12783e67 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/website-app-surveys/actions/i2.webp differ diff --git a/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/app-survey.webp b/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/app-survey.webp new file mode 100644 index 0000000000..467e536c8a Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/app-survey.webp differ diff --git a/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/global-wait-time.webp b/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/global-wait-time.webp new file mode 100644 index 0000000000..6208dfa66b Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/global-wait-time.webp differ diff --git a/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/ignore-wait-time.webp b/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/ignore-wait-time.webp new file mode 100644 index 0000000000..97809d77c2 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/ignore-wait-time.webp differ diff --git a/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/survey-recontact.webp b/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/survey-recontact.webp new file mode 100644 index 0000000000..552871ab31 Binary files /dev/null and b/docs/images/xm-and-surveys/surveys/website-app-surveys/recontact/survey-recontact.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/change-text.webp b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/change-text.webp new file mode 100644 index 0000000000..6ff799b492 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/change-text.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/create-cancel-flow.webp b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/create-cancel-flow.webp new file mode 100644 index 0000000000..6d88d33e02 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/create-cancel-flow.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/publish-survey.webp b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/publish-survey.webp new file mode 100644 index 0000000000..1452de30d6 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/publish-survey.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/recontact-options.webp b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/recontact-options.webp new file mode 100644 index 0000000000..3597c60e5f Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/recontact-options.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/select-action.webp b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/select-action.webp new file mode 100644 index 0000000000..a120c5770d Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/select-action.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-css-selector.webp b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-css-selector.webp new file mode 100644 index 0000000000..404802b219 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-css-selector.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-inner-text.webp b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-inner-text.webp new file mode 100644 index 0000000000..bae93a23cd Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-inner-text.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-page-url.webp b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-page-url.webp new file mode 100644 index 0000000000..71f03ec7d5 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-page-url.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/contact-form/add-question.webp b/docs/images/xm-and-surveys/xm/best-practices/contact-form/add-question.webp new file mode 100644 index 0000000000..2e5fd8b6a1 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/contact-form/add-question.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/contact-form/email-field.webp b/docs/images/xm-and-surveys/xm/best-practices/contact-form/email-field.webp new file mode 100644 index 0000000000..9ccd33683e Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/contact-form/email-field.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/contact-form/embed.webp b/docs/images/xm-and-surveys/xm/best-practices/contact-form/embed.webp new file mode 100644 index 0000000000..1be2dae3e1 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/contact-form/embed.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/contact-form/message-field.webp b/docs/images/xm-and-surveys/xm/best-practices/contact-form/message-field.webp new file mode 100644 index 0000000000..a96d778c4b Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/contact-form/message-field.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/contact-form/name-field.webp b/docs/images/xm-and-surveys/xm/best-practices/contact-form/name-field.webp new file mode 100644 index 0000000000..ce60346972 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/contact-form/name-field.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/contact-form/query-form.webp b/docs/images/xm-and-surveys/xm/best-practices/contact-form/query-form.webp new file mode 100644 index 0000000000..206e6fe5f9 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/contact-form/query-form.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/contact-form/single-select-questionare.webp b/docs/images/xm-and-surveys/xm/best-practices/contact-form/single-select-questionare.webp new file mode 100644 index 0000000000..f273729ab9 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/contact-form/single-select-questionare.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/contact-form/welcome1.webp b/docs/images/xm-and-surveys/xm/best-practices/contact-form/welcome1.webp new file mode 100644 index 0000000000..6dee4dbeaf Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/contact-form/welcome1.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/add-action.webp b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/add-action.webp new file mode 100644 index 0000000000..04ccbf56ac Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/add-action.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/change-id.webp b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/change-id.webp new file mode 100644 index 0000000000..92b914ce15 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/change-id.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/copy-ids.webp b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/copy-ids.webp new file mode 100644 index 0000000000..6a3ac7b7e4 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/copy-ids.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/docs-navi.webp b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/docs-navi.webp new file mode 100644 index 0000000000..527244613b Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/docs-navi.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/docs-template.webp b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/docs-template.webp new file mode 100644 index 0000000000..0cc8fab9d3 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/docs-template.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/select-action.webp b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/select-action.webp new file mode 100644 index 0000000000..74babbaf43 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/select-action.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/survey-trigger.webp b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/survey-trigger.webp new file mode 100644 index 0000000000..0fb2129e91 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/survey-trigger.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/switch-to-dev.webp b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/switch-to-dev.webp new file mode 100644 index 0000000000..1fcb17b72a Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/docs-feedback/switch-to-dev.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/action-css.webp b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/action-css.webp new file mode 100644 index 0000000000..576e22a234 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/action-css.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/action-innertext.webp b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/action-innertext.webp new file mode 100644 index 0000000000..374dbdaada Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/action-innertext.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/change-text.webp b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/change-text.webp new file mode 100644 index 0000000000..65eb73d10a Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/change-text.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/create-survey.webp b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/create-survey.webp new file mode 100644 index 0000000000..50dc09c357 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/create-survey.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/publish.webp b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/publish.webp new file mode 100644 index 0000000000..8f6e4af4df Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/publish.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/recontact-options.webp b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/recontact-options.webp new file mode 100644 index 0000000000..c57c97419c Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/recontact-options.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/select-action.webp b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/select-action.webp new file mode 100644 index 0000000000..e04a636ff6 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feature-chaser/select-action.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feedback-box/action-css.webp b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/action-css.webp new file mode 100644 index 0000000000..a3ca09f44f Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/action-css.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feedback-box/action-innertext.webp b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/action-innertext.webp new file mode 100644 index 0000000000..f425951656 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/action-innertext.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feedback-box/add-action.webp b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/add-action.webp new file mode 100644 index 0000000000..94d2172b26 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/add-action.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feedback-box/change-text-content.webp b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/change-text-content.webp new file mode 100644 index 0000000000..acd382b68f Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/change-text-content.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feedback-box/create-feedback-box-by-template.webp b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/create-feedback-box-by-template.webp new file mode 100644 index 0000000000..afc81da214 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/create-feedback-box-by-template.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feedback-box/publish-survey.webp b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/publish-survey.webp new file mode 100644 index 0000000000..43f12de8db Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/publish-survey.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feedback-box/select-action.webp b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/select-action.webp new file mode 100644 index 0000000000..918979d664 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/select-action.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/feedback-box/set-recontact-options.webp b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/set-recontact-options.webp new file mode 100644 index 0000000000..2127b80254 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/feedback-box/set-recontact-options.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/choose-survey-type.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/choose-survey-type.webp new file mode 100644 index 0000000000..a1a76256eb Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/choose-survey-type.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/embed-survey-code-in-your-email.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/embed-survey-code-in-your-email.webp new file mode 100644 index 0000000000..32fe64525c Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/embed-survey-code-in-your-email.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/embed-survey-prompt.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/embed-survey-prompt.webp new file mode 100644 index 0000000000..b00b0c8f92 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/embed-survey-prompt.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/improve-newsletter-content-editor-formbricks.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/improve-newsletter-content-editor-formbricks.webp new file mode 100644 index 0000000000..b51669114c Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/improve-newsletter-content-editor-formbricks.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/improve-newsletter-content-survey-location.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/improve-newsletter-content-survey-location.webp new file mode 100644 index 0000000000..f8666dc3ae Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-email-content/improve-newsletter-content-survey-location.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/action-innertext.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/action-innertext.webp new file mode 100644 index 0000000000..168f2988c6 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/action-innertext.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/action-pageurl.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/action-pageurl.webp new file mode 100644 index 0000000000..542d7c1388 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/action-pageurl.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/change-text.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/change-text.webp new file mode 100644 index 0000000000..37e716fb59 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/change-text.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/create-survey.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/create-survey.webp new file mode 100644 index 0000000000..b9cdc4130c Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/create-survey.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/publish.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/publish.webp new file mode 100644 index 0000000000..2f41668cce Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/publish.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/recontact-options.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/recontact-options.webp new file mode 100644 index 0000000000..fabdb5830e Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/recontact-options.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/select-action.webp b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/select-action.webp new file mode 100644 index 0000000000..4ec617c631 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/improve-trial-cr/select-action.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/action-css.webp b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/action-css.webp new file mode 100644 index 0000000000..4b562cdedb Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/action-css.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/action-innertext.webp b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/action-innertext.webp new file mode 100644 index 0000000000..0a3e6ed9a6 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/action-innertext.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/action-pageurl.webp b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/action-pageurl.webp new file mode 100644 index 0000000000..6bdbb0f742 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/action-pageurl.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/add-action.webp b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/add-action.webp new file mode 100644 index 0000000000..a24c2af56d Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/add-action.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/change-text.webp b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/change-text.webp new file mode 100644 index 0000000000..774edc27a8 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/change-text.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/create-prompt.webp b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/create-prompt.webp new file mode 100644 index 0000000000..614b02f1d8 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/create-prompt.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/interview-example.webp b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/interview-example.webp new file mode 100644 index 0000000000..d53cd7c048 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/interview-example.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/publish-survey.webp b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/publish-survey.webp new file mode 100644 index 0000000000..8bec9cf609 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/publish-survey.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/recontact-options.webp b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/recontact-options.webp new file mode 100644 index 0000000000..c38fb671f4 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/recontact-options.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/select-action.webp b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/select-action.webp new file mode 100644 index 0000000000..e04a636ff6 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/interview-prompt/select-action.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/action-css.webp b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/action-css.webp new file mode 100644 index 0000000000..d5429698fb Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/action-css.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/action-pageurl.webp b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/action-pageurl.webp new file mode 100644 index 0000000000..ec4f21a81a Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/action-pageurl.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/change-text.webp b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/change-text.webp new file mode 100644 index 0000000000..9aaeddef5f Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/change-text.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/create-survey.webp b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/create-survey.webp new file mode 100644 index 0000000000..d4fed2ebc6 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/create-survey.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/publish.webp b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/publish.webp new file mode 100644 index 0000000000..f5d3ed77ab Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/publish.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/recontact-options.webp b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/recontact-options.webp new file mode 100644 index 0000000000..c38fb671f4 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/recontact-options.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/select-action.webp b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/select-action.webp new file mode 100644 index 0000000000..e04a636ff6 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/pmf-survey/select-action.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/quiz-time/conditional-logic.webp b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/conditional-logic.webp new file mode 100644 index 0000000000..a773c59b1f Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/conditional-logic.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/quiz-time/ending-logic.webp b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/ending-logic.webp new file mode 100644 index 0000000000..a7dc105503 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/ending-logic.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/quiz-time/pass-fail.webp b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/pass-fail.webp new file mode 100644 index 0000000000..979b19e98c Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/pass-fail.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/quiz-time/quiz.webp b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/quiz.webp new file mode 100644 index 0000000000..9ef9797e1e Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/quiz.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/quiz-time/score.webp b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/score.webp new file mode 100644 index 0000000000..9b77cb2a8b Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/score.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/quiz-time/single-select.webp b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/single-select.webp new file mode 100644 index 0000000000..39131bfd62 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/single-select.webp differ diff --git a/docs/images/xm-and-surveys/xm/best-practices/quiz-time/when-then.webp b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/when-then.webp new file mode 100644 index 0000000000..8dad1ab4a7 Binary files /dev/null and b/docs/images/xm-and-surveys/xm/best-practices/quiz-time/when-then.webp differ diff --git a/docs/mint.json b/docs/mint.json new file mode 100644 index 0000000000..0959f7f0f7 --- /dev/null +++ b/docs/mint.json @@ -0,0 +1,279 @@ +{ + "$schema": "https://mintlify.com/schema.json", + "colors": { + "anchors": { + "from": "#0D9373", + "to": "#07C983" + }, + "dark": "#00C4B8", + "light": "#00C4B8", + "primary": "#00C4B8" + }, + "favicon": "/images/favicon.svg", + "footerSocials": { + "github": "https://github.com/formbricks/formbricks", + "linkedin": "https://linkedin.com/company/formbricks", + "x": "https://x.com/formbricks" + }, + "logo": { + "dark": "/images/logo-dark.svg", + "light": "/images/logo-light.svg" + }, + "name": "Documentation - Formbricks", + "navigation": [ + { + "group": "", + "pages": ["overview/introduction", "overview/what-is-formbricks", "overview/open-source"] + }, + { + "group": "", + "pages": ["xm-and-surveys/overview"] + }, + { + "group": "Surveys", + "pages": [ + { + "group": "General Features", + "icon": "wrench", + "pages": [ + "xm-and-surveys/surveys/general-features/add-image-or-video-question", + "xm-and-surveys/surveys/general-features/conditional-logic", + "xm-and-surveys/surveys/general-features/overwrite-styling", + "xm-and-surveys/surveys/general-features/hidden-fields", + "xm-and-surveys/surveys/general-features/limit-submissions", + "xm-and-surveys/surveys/general-features/multi-language-surveys", + "xm-and-surveys/surveys/general-features/partial-submissions", + "xm-and-surveys/surveys/general-features/recall", + "xm-and-surveys/surveys/general-features/shareable-dashboards", + "xm-and-surveys/surveys/general-features/schedule-start-end-dates", + "xm-and-surveys/surveys/general-features/metadata", + "xm-and-surveys/surveys/general-features/variables", + "xm-and-surveys/surveys/general-features/show-survey-to-percent-of-users" + ] + }, + { + "group": "Link Surveys", + "icon": "link", + "pages": [ + "xm-and-surveys/surveys/link-surveys/quickstart", + { + "group": "Features", + "icon": "wrench", + "pages": [ + "xm-and-surveys/surveys/link-surveys/data-prefilling", + "xm-and-surveys/surveys/link-surveys/embed-surveys", + "xm-and-surveys/surveys/link-surveys/market-research-panel", + "xm-and-surveys/surveys/link-surveys/pin-protected-surveys", + "xm-and-surveys/surveys/link-surveys/single-use-links", + "xm-and-surveys/surveys/link-surveys/source-tracking", + "xm-and-surveys/surveys/link-surveys/start-at-question", + "xm-and-surveys/surveys/link-surveys/verify-email-before-survey" + ] + } + ] + }, + { + "group": "Website & App Surveys", + "icon": "mobile", + "pages": [ + "xm-and-surveys/surveys/website-app-surveys/quickstart", + "xm-and-surveys/surveys/website-app-surveys/framework-guides", + { + "group": "Features", + "icon": "wrench", + "pages": [ + "xm-and-surveys/surveys/website-app-surveys/actions", + "xm-and-surveys/surveys/website-app-surveys/advanced-targeting", + "xm-and-surveys/surveys/website-app-surveys/user-identification", + "xm-and-surveys/surveys/website-app-surveys/recontact" + ] + } + ] + } + ] + }, + + { + "group": "Core Features", + "pages": [ + { + "group": "Question Types", + "icon": "question", + "pages": [ + "xm-and-surveys/core-features/question-type/address", + "xm-and-surveys/core-features/question-type/consent", + "xm-and-surveys/core-features/question-type/contact-info", + "xm-and-surveys/core-features/question-type/date", + "xm-and-surveys/core-features/question-type/file-upload", + "xm-and-surveys/core-features/question-type/free-text", + "xm-and-surveys/core-features/question-type/matrix", + "xm-and-surveys/core-features/question-type/net-promoter-score", + "xm-and-surveys/core-features/question-type/ranking", + "xm-and-surveys/core-features/question-type/rating", + "xm-and-surveys/core-features/question-type/schedule-a-meeting", + "xm-and-surveys/core-features/question-type/select-multiple", + "xm-and-surveys/core-features/question-type/select-picture", + "xm-and-surveys/core-features/question-type/select-single", + "xm-and-surveys/core-features/question-type/statement-cta" + ] + }, + { + "group": "Integrations", + "icon": "bridge", + "pages": [ + "xm-and-surveys/core-features/integrations/overview", + "xm-and-surveys/core-features/integrations/activepieces", + "xm-and-surveys/core-features/integrations/airtable", + "xm-and-surveys/core-features/integrations/google-sheets", + "xm-and-surveys/core-features/integrations/make", + "xm-and-surveys/core-features/integrations/n8n", + "xm-and-surveys/core-features/integrations/notion", + "xm-and-surveys/core-features/integrations/slack", + "xm-and-surveys/core-features/integrations/wordpress", + "xm-and-surveys/core-features/integrations/zapier", + "xm-and-surveys/core-features/integrations/webhooks" + ] + }, + "xm-and-surveys/core-features/user-management", + "xm-and-surveys/core-features/styling-theme", + "xm-and-surveys/core-features/email-customization" + ] + }, + { + "group": "XM", + "pages": [ + { + "group": "Best Practices", + "icon": "lightbulb", + "pages": [ + "xm-and-surveys/xm/best-practices/contact-form", + "xm-and-surveys/xm/best-practices/docs-feedback", + "xm-and-surveys/xm/best-practices/feature-chaser", + "xm-and-surveys/xm/best-practices/feedback-box", + "xm-and-surveys/xm/best-practices/improve-email-content", + "xm-and-surveys/xm/best-practices/interview-prompt", + "xm-and-surveys/xm/best-practices/cancel-subscription", + "xm-and-surveys/xm/best-practices/pmf-survey", + "xm-and-surveys/xm/best-practices/quiz-time", + "xm-and-surveys/xm/best-practices/improve-trial-cr" + ] + } + ] + }, + { + "group": "", + "pages": ["development/overview"] + }, + { + "group": "Local Setup", + "pages": [ + "development/local-setup/linux", + "development/local-setup/mac", + "development/local-setup/windows", + "development/local-setup/gitpod", + "development/local-setup/github-codespaces" + ] + }, + { + "group": "Contribution", + "pages": ["development/contribution/contribution"] + }, + { + "group": "Support", + "pages": ["development/support/troubleshooting"] + }, + { + "group": "", + "pages": ["self-hosting/overview"] + }, + { + "group": "Setup", + "pages": [ + "self-hosting/setup/one-click", + "self-hosting/setup/docker", + "self-hosting/setup/cluster-setup" + ] + }, + { + "group": "Configuration", + "pages": [ + "self-hosting/configuration/custom-ssl", + "self-hosting/configuration/environment-variables", + "self-hosting/configuration/oauth", + { + "group": "Integrations", + "icon": "bridge", + "pages": [ + "self-hosting/configuration/airtable", + "self-hosting/configuration/google-sheets", + "self-hosting/configuration/n8n", + "self-hosting/configuration/notion", + "self-hosting/configuration/slack", + "self-hosting/configuration/zapier" + ] + } + ] + }, + { + "group": "Advanced", + "pages": [ + "self-hosting/advanced/migration", + "self-hosting/advanced/license", + "self-hosting/advanced/rate-limiting" + ] + }, + { + "group": "API Documentation", + "pages": ["api-reference/introduction", "api-reference/rest-api"] + } + ], + "redirects": [ + { + "destination": "/docs/overview/what-is-formbricks", + "permanent": true, + "source": "/docs/introduction/what-is-formbricks" + }, + { + "destination": "/docs/overview/open-source", + "permanent": true, + "source": "/docs/introduction/why-open-source" + }, + { + "destination": "/docs/xm-and-surveys/overview", + "source": "/docs/introduction/how-it-works" + } + ], + "tabs": [ + { + "name": "Overview", + "url": "overview" + }, + { + "name": "XM & Surveys", + "url": "xm-and-surveys" + }, + { + "name": "Self Hosting", + "url": "self-hosting" + }, + { + "name": "API Reference", + "openapi": "/api-reference/openapi.json", + "url": "api-reference" + }, + { + "name": "Development", + "url": "development" + } + ], + "topbarCtaButton": { + "name": "Go to app", + "url": "https://app.formbricks.com" + }, + "topbarLinks": [ + { + "name": "Support", + "url": "https://github.com/formbricks/formbricks/discussions" + } + ] +} diff --git a/docs/overview/images/analytics.webp b/docs/overview/images/analytics.webp new file mode 100644 index 0000000000..5161cc3240 Binary files /dev/null and b/docs/overview/images/analytics.webp differ diff --git a/docs/overview/images/form-builder.webp b/docs/overview/images/form-builder.webp new file mode 100644 index 0000000000..c94bdbc8be Binary files /dev/null and b/docs/overview/images/form-builder.webp differ diff --git a/docs/overview/images/integrations.webp b/docs/overview/images/integrations.webp new file mode 100644 index 0000000000..d94c009b40 Binary files /dev/null and b/docs/overview/images/integrations.webp differ diff --git a/docs/overview/images/targeting.webp b/docs/overview/images/targeting.webp new file mode 100644 index 0000000000..7ca18df49b Binary files /dev/null and b/docs/overview/images/targeting.webp differ diff --git a/docs/overview/images/trigger.webp b/docs/overview/images/trigger.webp new file mode 100644 index 0000000000..62b2c8c20b Binary files /dev/null and b/docs/overview/images/trigger.webp differ diff --git a/docs/overview/introduction.mdx b/docs/overview/introduction.mdx new file mode 100644 index 0000000000..0dfc614209 --- /dev/null +++ b/docs/overview/introduction.mdx @@ -0,0 +1,32 @@ +--- +title: "Introduction" +description: "Welcome to the Formbricks Documentation!" +icon: "presentation-screen" +--- + +## Welcome to the Formbricks Documentation! + +Formbricks is a versatile open-source platform for collecting and analyzing feedback from customers, users, and employees through targeted surveys. Whether you need simple forms or complex experience management solutions, Formbricks scales with your needs. + +This guide covers everything you need to set up, use, and develop with Formbricks. You'll find step-by-step instructions, feature explanations, and best practices. It also includes advanced docs on extending Formbricks using its self-hosted option, APIs, and SDKs. + + + + + + Learn how to use Formbricks' XM & Surveys to collect feedback from your customers, users, and employees. + + + Learn how to self-host Formbricks on your infrastructure. + + + + Learn how to use Formbricks' API to CRUD various resources programmatically. + + + + Warm up with the Formbricks code base to make changes to the platform. + + + + diff --git a/docs/overview/open-source.mdx b/docs/overview/open-source.mdx new file mode 100644 index 0000000000..5f1d9d792d --- /dev/null +++ b/docs/overview/open-source.mdx @@ -0,0 +1,22 @@ +--- +title: "Open-Source" +icon: "osi" +--- + +The open core of the Formbricks software is available under the AGPLv3 license. This means you can use, modify, and distribute the software as long as you adhere to the [terms of the license.](https://www.tldrlegal.com/license/gnu-affero-general-public-license-v3-agpl-3-0) The open-source version of Formbricks is free to use, even for commercial purposes. Over time, all survey features will remain part of the free Community Edition. + +Formbricks also offers a more advanced Enterprise Edition with additional features and support. + +| Advantage | Open Source Software | Proprietary Software | +| --------------------- | ------------------------------------------------------------ | ---------------------------------------------------------------- | +| **Data Privacy** | Self-host for maximum control over data | Dependent on third party data processor. | +| **Cost** | Often free or significantly lower cost. | Typically, requires a purchase or subscription. | +| **Customizability** | Code can be modified to meet specific needs. | Limited customization, restricted to developer's features. | +| **Security** | Frequent community reviews identify vulnerabilities quickly. | Security updates depend on vendor's schedule and interest. | +| **Flexibility** | Supports a wide range of applications and integrations. | Designed for specific environments and integrations. | +| **Community Support** | Large, active communities offer free support and resources. | Paid customer support with limited community help. | +| **Innovation** | Fosters rapid innovation through community contributions. | Innovations depend on vendor's vision and development team. | +| **Licensing** | Permissive licenses allow broad usage and modification. | Strict licensing with limited redistribution rights. | +| **Independence** | Not dependent on a single vendor or developer. | Vendor lock-in can limit future choices. | +| **Transparency** | Full visibility into the code base and development. | Closed-source, code is hidden from users. | +| **Interoperability** | Supports open standards, ensuring interoperability. | Often requires additional software or plugins for compatibility. | \ No newline at end of file diff --git a/docs/overview/what-is-formbricks.mdx b/docs/overview/what-is-formbricks.mdx new file mode 100644 index 0000000000..8213a3f1c5 --- /dev/null +++ b/docs/overview/what-is-formbricks.mdx @@ -0,0 +1,34 @@ +--- +title: "What is Formbricks?" +description: "Get to know Formbricks and its capabilities." +icon: "laptop-mobile" +--- + +Formbricks is an open-source (AGPLv3) survey platform built to collect feedback from anyone—users, customers, or employees—on any platform. + +With Formbricks, you can replace many existing survey tools: + +- **Standalone surveys (share via link):** Replace Google Forms, Typeform or any other link survey tool [with Formbricks Form Builder](https://formbricks.com/open-source-form-builder). Use lots of question types and comprehensive customizations. + +- **Scalable website surveys:** Even if you have millions of website visitors, Formbricks lets you run well-timed and anonymously targeted [surveys on any public website.](https://formbricks.com/website-survey) + +- **Highly targeted app surveys:** Identify known users with Formbricks and enrich their profiles with attributes and specific actions. Build cohorts for [highly targeted in-app surveys.](https://formbricks.com/in-app-survey) + +The survey platform is **mostly free, even for commercial use**. Over time, all survey features will stay part of the free Community Edition. + +### Formbricks – The Experience Management (XM) Suite + +To support the development of our open-source platform, we’ve created a premium offering: the **Formbricks XM Suite**. + +- **What is XM?** + Experience Management (XM) involves collecting, analysing, and reporting feedback from stakeholders (like customers or employees) to understand and improve their experience with your organisation. + +- **Why XM Matters** + Helping businesses, governments, and nonprofits understand their users' experiences leads to better services and happier people. Formbricks XM provides the data needed to make decisions that put people first. + +- **How XM Works in Formbricks** + Formbricks XM simplifies experience management. It focuses only on what’s needed to measure specific experiences, with easy-to-use templates, reports, and best practices. + +We have spent a lot of time and energy building out the open-source survey platform which powers the above. Stick around to see how Formbricks XM Apps will empower everyone to think and work human-centric. + +[Try Formbricks Cloud ☁️ ](https://app.formbricks.com/) diff --git a/docs/self-hosting/advanced/license.mdx b/docs/self-hosting/advanced/license.mdx new file mode 100644 index 0000000000..f6a68f755f --- /dev/null +++ b/docs/self-hosting/advanced/license.mdx @@ -0,0 +1,107 @@ +--- +title: 'License' +description: "License for Formbricks" +icon: "file-certificate" +--- + +The Formbricks core source code is licensed under AGPLv3 and available on GitHub. Additionally, we offer features for bigger organisations & enterprises under a separate, paid Enterprise License. This assures the long-term sustainability of the open source project. All free features are listed [below](#what-features-are-free). + + + Want to get your hands on the Enterprise Edition? Request a free 30-day Enterprise Edition trial by [filling out the form below.](#30-day-trial-license-request) No call needed or strings attached 🤙 + + +## Enterprise Edition + +Additional to the AGPLv3 licensed Formbricks core, the Formbricks repository contains code licensed under our [Enterprise License](https://github.com/formbricks/formbricks/blob/main/apps/web/modules/ee/LICENSE). This additional functionality is not part of the AGPLv3 licensed Formbricks core and is designed to meet the needs of larger teams and enterprises. This advanced functionality is already included in the Docker images, but you need an **Enterprise License Key** to unlock it. For the pricing, please refer to [Formbricks Pricing](https://formbricks.com/pricing) or [get in touch](https://cal.com/johannes/license). + +## When do I need an Enterprise License? + +| | Community Edition | Enterprise License | +| ------------------------------------------------------------- | ----------------- | ------------------ | +| Self-host for commercial purposes | ✅ | No license needed | +| Fork codebase, make changes, release under AGPLv3 | ✅ | No license needed | +| Fork codebase, make changes, **keep private** | ❌ | ✅ | +| Unlimited responses | ✅ | No license needed | +| Unlimited surveys | ✅ | No license needed | +| Unlimited users | ✅ | No license needed | +| Projects | 3 | Unlimited | +| Use any of the other [free features](#what-features-are-free) | ✅ | No license needed | +| Remove branding ⚠️ Changed with 3.0 ⚠️ | ❌ | ✅ | +| SSO ⚠️ Changed with 3.0 ⚠️ | ❌ | ✅ | +| Contacts & Targeting ⚠️ Changed with 3.0 ⚠️ | ❌ | ✅ | +| Teams & access roles | ❌ | ✅ | +| Cluster support | ❌ | ✅ | +| Use any of the [paid features](#what-features-are-free) | ❌ | ✅ | + +Ready to get started with the Enterprise Edition? Fill out our form below and we'll reach out to you. + +## 30-day Trial License Request + +Many organisations want to do an internal test run with the Enterprise Edition. To make that really easy, we offer a 30-day trial license. Just fill out the form below and we'll send you a license key within 24 hours (business days): + +
+ +
+``` + +## Iframe Events + +The iframe fires a **formbricksSurveyCompleted** event when a user finishes a survey within the embedded iframe. This event can be captured through a message listener in your webpage's JavaScript + +### How to Use it? + +1. Embed the Formbricks survey on your webpage using the iframe method as described above. + +2. Add an event listener to your webpage’s JavaScript that listens for `message` events from the iframe. + +3. Check if the received message indicates that the survey is completed by comparing the `event.data` with the value `formbricksSurveyCompleted`. + + + It is important to verify the origin of the message to ensure it comes from + the iframe containing your survey, enhancing the security of your event + handling. + + +4. Implement your custom actions within the callback function based on the survey completion. + +### Example of Handling Survey Completion Events + +```javascript Example Code for Event Listener +window.addEventListener("message", (event) => { + // Replace 'https://app.formbricks.com' with the actual web app url + if ( + event.origin === "https://app.formbricks.com" && + event.data === "formbricksSurveyCompleted" + ) { + console.log("Survey completed!"); + // Implement your custom actions here + } +}); +``` + +## Emebd Mode + +Embed your survey with a minimalist design, disregarding padding and background. + +### How to enable it? + +It can be enabled by simply appending **?embed=true** to your survey link or from UI + +1. Open Embed survey tab in survey share modal + +2. Toggle **Embed mode** + +![Toggle embed mode](/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-toggle.webp) + +### With Embed mode enabled + +![Toggle embed mode](/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-enabled.webp) + +### With Embed mode disabled + +![Toggle embed mode](/images/xm-and-surveys/surveys/link-surveys/embed-surveys/embed-mode-disabled.webp) + + +## Embedding Surveys in Emails + +Embedding Formbricks surveys directly into your emails allows you to collect valuable feedback from your users at every touchpoint. Seamlessly integrate interactive surveys into your email campaigns to gather insights and improve user experience. + +## Generate an Embed Code + +To embed a Formbricks survey in an email, first, create a survey and publish it. Follow these steps to generate the embed code: + +1. **Create and Publish a Survey**: Start by creating a link survey and publish it once ready. +2. **Access the Share Options**: Go to the survey summary page and click the Share button (see below). +3. **Get the Embed Code**: Click on Embed Survey at the bottom of the share modal, navigate to the `Embed in an Email` tab, and click `Copy Code`. +4. **Preview and Test**: Before sending it to your users, click on Send Preview to receive a test email. This helps ensure the survey appears correctly. + + + +## Embedding the Survey in Emails + +Different email clients have different support for HTML and CSS. We recommend testing the email in different email clients to ensure the survey looks good in all of them. + +Below are some of the methods and services that we know that allows HTML embedding and how you can use them: + + + Please use the below methods at your own discretion. We do not officially + endorse any of the services mentioned below. + + +### 1. Gmail + +Gmail does not support HTML embedding natively. It's a WYSIWYG (What You See Is What You Get) editor. However, you can use a free plugin like [HTML Editor for Gmail by cloudHQ](https://chromewebstore.google.com/detail/free-html-editor-for-gmai/ioinaaeeacahcmbgfmeaaofhfkijpdeb) to embed HTML in your emails. + +- Install the plugin from the Chrome Web Store. +- Open Gmail and compose a new email. +- Write your email content after which you want to embed the survey. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/embed-surveys/email-content-without-survey.webp) + +- Right next to the Send button you will see a new button called **HTML Editor**. Click on it. +- This will open a new window with the **Design** tab active. Switch to the **Source** tab. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/embed-surveys/plugin-source-tab.webp) + + +- Now paste the copied HTML code from Formbricks into this window. On the right, you will see a preview of how the email will look. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/embed-surveys/plugin-add-survey.webp) + +- Click on the **Close Editor** button to save the changes & close the editor. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/embed-surveys/email-content-with-survey.webp) + + +- Voila! You have successfully embedded the survey in your email. + +### 2. Sendgrid + +Sendgrid supports HTML content in emails directly: + +- Compose Your Email: Use Sendgrid's email composition tools to embed the HTML directly into your email body. +- Reference: For detailed steps, refer to Sendgrid's official documentation [here](https://sendgrid.com/en-us/solutions/email-marketing/email-design) or API docs [here](https://sendgrid.com/docs/for-developers/sending-email/api-getting-started/) + +### 3. Mailchimp + +Available in their Standard plan and above, Mailchimp allows HTML content embedding: + +- Use the Code Block: Drag a code block into your email template and paste the HTML code for the survey. +- Reference: Check out Mailchimp's guide on pasting in custom HTML [here](https://mailchimp.com/help/paste-in-html-to-create-an-email/) + +### 4. Notemailer + +Nodemailer is a Node.js module that allows you to send emails with HTML content. + +- If you use Node.js to send emails, just attach the `html` parameter in your email message. +- Reference: Take a look at Nodemailer's official message documentation [here](https://nodemailer.com/message/) + + + Please note that the above methods are not exhaustive and there are many other + ways to embed HTML in emails. + + +## Example: Email Footer Survey + +Embed a survey link in your email signature to collect feedback subtly yet effectively. Here’s how: + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/embed-surveys/jo-signature.webp) + +1. Create a Survey: Adjust an existing survey or create a new one. +2. Scroll down & enable the **Hidden Fields** option. +3. Add a new hidden field with the name **helpful**. +4. Now Publish the survey as a Link Survey & copy the link. +5. Embed in Your Signature: Add this HTML snippet to your email signature in your email client settings. + +```html Embed this in your Email +Was our conversation helpful? +Yes 👍 | +No 👎 +``` + +Replace `YOUR_SURVEY_LINK` with the actual survey link. + +PS: If you do not see any signature settings, just use one of the methods we've mentioned above to embed the HTML code in your email. + +--- + +**Can’t figure it out?**: [Get help in Github Discussions](https://github.com/formbricks/formbricks/discussions) diff --git a/docs/xm-and-surveys/surveys/link-surveys/market-research-panel.mdx b/docs/xm-and-surveys/surveys/link-surveys/market-research-panel.mdx new file mode 100644 index 0000000000..6ec3ee3924 --- /dev/null +++ b/docs/xm-and-surveys/surveys/link-surveys/market-research-panel.mdx @@ -0,0 +1,95 @@ +--- +title: "Market Research Panel" +description: + "Formbricks surveys can be integrated with Prolifics participant panel easily. This tutorial walks you through the steps on how to access a pool of over 200.000 participants for your research." +icon: "users" +--- + +# Creating a Research Panel with Prolific + +You need a lot of research participants that match your target audience fast? + +Formbricks integrates well with Prolific. Prolific provides a pool of over 200.000 research participants you can choose from. Run market research with Formbricks within hours, not days. + + + Prolific is a paid service. You need to fund your account to access the pool + of participants. The cost depends on the number of participants you want to + reach and the demographics you're targeting. You can get an estimate of the + cost with the [Prolific price calculator](https://www.prolific.com/calculator) + + +## Purpose + +External research panels are useful when: + +- You don't have access to enough people who match your target audience +- You want to reach a specific demographic +- You want to reach a large number of people quickly + +## Steps to Follow + +### Step 1: Add hidden fields to the Formbricks survey + +To be able to attribute a completed answer to a research participant, you need to add hidden fields to your Formbricks survey. To do so, edit your survey and scroll down to the Hidden Fields card. + +Add three fields with the IDs `PROLIFIC_PID`, `STUDY_ID`, and `SESSION_ID`. + +![Hidden fields added](/images/xm-and-surveys/surveys/link-surveys/market-research-panel/hidden-fields.webp) + +### Step 2: Create an account on Prolific + +Go to [Prolific](https://app.prolific.co/) and create an account. + +### Step 3: Create a study on Prolific + +Once you're logged in to Prolific, create a new study. + +![Create a study on Prolific](/images/xm-and-surveys/surveys/link-surveys/market-research-panel/create-study.webp) + +### Step 4: Copy the Formbricks survey link to the Prolific study + +We connect the Formbricks survey with the Prolific study by copying the survey link from Formbricks and pasting it into the Prolific study: + +![Copy the survey link](/images/xm-and-surveys/surveys/link-surveys/market-research-panel/copy-survey-link.webp) + + +### Step 5: Choose URL parameters for attribution + +To attribute responses to the correct participant, you need to add URL parameters to the Formbricks survey link. The parameters are `PROLIFIC_PID`, `STUDY_ID`, and `SESSION_ID`, exactly like the hidden fields you added. + +![Adding URL parameters to the survey](/images/xm-and-surveys/surveys/link-surveys/market-research-panel/url-parameters.webp) + +### Step 6: Update the Formbricks Redirect URL + +To ensure that participants are redirected back to Prolific after completing the survey, add the redirect URL provided in the Prolific study setup (e.g. `https://app.prolific.co/submissions/complete?cc=I2PWSFRG`) + +Copy from Prolific: + +![Copy redirect URL](/images/xm-and-surveys/surveys/link-surveys/market-research-panel/redirect-url.webp) + +Set it up as Redirect URL in the Response Options in Formbricks: + +![Add redirect URL to Formbricks](/images/xm-and-surveys/surveys/link-surveys/market-research-panel/redirect-url-formbricks.webp) + +### Step 7: Preview the study + +Preview the study using Prolific's [Preview-functionality](https://researcher-help.prolific.com/hc/en-gb/articles/360009222853-Previewing-your-study) + +![Preview study](/images/xm-and-surveys/surveys/link-surveys/market-research-panel/preview-study.webp) + +Got to the success screen? Then you're ready to publish your study! + +![Preview complete](/images/xm-and-surveys/surveys/link-surveys/market-research-panel/preview-complete.webp) + +### Step 8: Publish the study + +After you've published the study, you'll get the first responses within a few hours. + + + Prolific is a paid service. You need to fund your account to publish your + study. + + +### That's it! 🎉 + +Once you've published the survey, you can sit back and watch the responses come in. Prolific will take care of the rest. diff --git a/docs/xm-and-surveys/surveys/link-surveys/pin-protected-surveys.mdx b/docs/xm-and-surveys/surveys/link-surveys/pin-protected-surveys.mdx new file mode 100644 index 0000000000..43dd5c057f --- /dev/null +++ b/docs/xm-and-surveys/surveys/link-surveys/pin-protected-surveys.mdx @@ -0,0 +1,68 @@ +--- +title: "PIN Protected Surveys" +description: + "Enhance the security and exclusivity of your surveys by requiring respondents to enter a secure 4 digit PIN to access your survey. Learn how to enable PIN protection and the benefits it offers." +icon: "lock" +--- + +## **Enabling PIN Protection** + +PIN protection can be applied to your surveys easily through the survey editor. This setup allows you to control access effectively, ensuring that only authorized users can participate. + +### **Steps to Set Up PIN Protection** + +1. **Open Settings in Survey Editor**: Navigate to your survey in the survey editor where you wish to enable PIN protection & click on Settings Tab. + +2. **Select Response Options**: Find and select **`Response Options`** to access settings related to survey responses. + +![Select Response Options](/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-one.webp) + +1. **Enable PIN Protection**: Find the option for "Protect Survey with a PIN" and + activate it. You will be prompted to enter a PIN that respondents must use to access + the survey. + +### **Setting the PIN** + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-two.webp) + +Enter the PIN you wish to use for your survey. Once set, this PIN will need to be +entered by participants to access the survey. Note that this can be changed anytime +from here in the future. + +### **User Experience Upon Accessing the Survey** + +When a respondent attempts to access the survey, they are prompted to enter the PIN: + +- **PIN Entry Prompt**: A screen will appear asking the respondent to enter the PIN to proceed. This acts as the first gatekeeping step before survey access is granted. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-three.webp) + +- **Incorrect PIN Handling**: If an incorrect PIN is entered, the respondent will be informed and asked to try again, ensuring secure access to the survey. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-four.webp) + +- **Correct PIN**: On entering the correct PIN, the user access the survey & can fill it accordingly. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/pin-protected-surveys/step-five.webp) + +### **Benefits of PIN Protection** + +- **Enhanced Security**: Protects the survey from unauthorized access, ensuring that only participants with the PIN can enter. + +- **Controlled Participation**: Enables you to restrict survey participation to a specific group, such as during a closed testing phase or confidential feedback gathering. + +- **Prevents Unwanted Access**: Deters casual browsing and unauthorized attempts to view or complete the survey. + +## **Use Cases** + +PIN protection is particularly useful in situations where: + +- Confidential surveys are being conducted, such as internal company feedback or sensitive research studies. + +- Surveys are designed for a specific event or group, and access needs to be controlled. + +- You want to limit survey responses to participants who have been explicitly invited or have registered in advance. + +## **Conclusion** + +Setting up PIN protection for your Formbricks surveys is a straightforward and effective way to ensure that only authorized respondents can access and complete your surveys. This feature adds an additional layer of security and control, making it ideal for managing access to sensitive or exclusive surveys. diff --git a/docs/xm-and-surveys/surveys/link-surveys/quickstart.mdx b/docs/xm-and-surveys/surveys/link-surveys/quickstart.mdx new file mode 100644 index 0000000000..c1e689523d --- /dev/null +++ b/docs/xm-and-surveys/surveys/link-surveys/quickstart.mdx @@ -0,0 +1,45 @@ +--- +title: "Quickstart" +description: "Create your first link survey in under 5 minutes." +icon: "rocket" +--- + +Link Surveys make it easy for your users to give you feedback. They are a great way to get feedback from your users, without interrupting their workflow. This quickstart guide will show you how to create your first link survey in under 5 minutes. + +## Create a free Formbricks Cloud account + +While you can [self-host](/self-hosting/overview) Formbricks, the quickest and easiest way to get started is with the free Cloud plan. Just [sign up here](https://app.formbricks.com/auth/signup) and click through the onboarding. + +Choose one of the pre-created templates to get started. We’ll choose the **Product Market Fit** template for this quickstart guide. + +## Create your first survey + +When you click the template, you'll be taken to the survey editor. Here, you can edit the survey questions and settings. To keep it simple, we'll leave the questions as they are and go to the survey settings. + +Click on the **Settings** tab to edit the survey settings. + +## Configure your survey settings + +Formbricks packs a lot of useful functionality out of the box. You can: + +- Close the survey on a specidic date + +- After a number of response + +- Redirect users to a URL after they completed the survey + +- Protect survey with a Pin + +- ... and much more! + +## Style your survey + +Style your survey to your need. You can keep it simplistic or use animated backgrounds. You can change the main color and soon you'll be able to fully control the appearance of the survey. + +## Publish your survey + +Once you’re happy with the survey settings, hit **Publish** and you’ll be forwarded to the Summary Page. This is where you’ll find the responses to this survey. + +## Share your survey + +Congratulations! Your survey is now published and ready to be shared with your users. You can share the survey link via email, SMS, or any other channel. diff --git a/docs/xm-and-surveys/surveys/link-surveys/single-use-links.mdx b/docs/xm-and-surveys/surveys/link-surveys/single-use-links.mdx new file mode 100644 index 0000000000..b37fefde57 --- /dev/null +++ b/docs/xm-and-surveys/surveys/link-surveys/single-use-links.mdx @@ -0,0 +1,53 @@ +--- +title: "Single Use Links" +description: + "Make sure that each respondent only replies once with single use links." +icon: "link" +--- + +This guide will help you understand how to generate and use single-use links within our application. + +## Purpose + +- Single-use links (or one-time / disposable links) are URLs that grant access to a survey only once. + +- The primary purpose of single-use links is to assure that no respondent submits a survey twice. + + + Want to create up to 5,000 single-use links? Use our [API endpoint for + that.](https://documenter.getpostman.com/view/11026000/2sA3Bq5XEh#c49ef758-a78a-4ef4-a282-262621151f08) + + +## Using Single-Use Links with Formbricks + +Using single-use links with Formbricks is quite straight-forward: + +1. In the survey settings, toggle "Single Use Link" on: + +![Single use survey settings](/images/xm-and-surveys/surveys/link-surveys/single-use-links/single-use-setting.webp) + + +2. When you publish your survey, the following modal will open: + +![Share modal with 7 single use links which can be regenerated](/images/xm-and-surveys/surveys/link-surveys/single-use-links/share-modal.webp) + +Here, you can copy and generate as many single-use links as you need. + +## URL Encryption + +You can encrypt single use URLs to assure information to be protected. To enable it, you have to set the correct environment variable: + +![Set the right env var to be able to enable encryption.](/images/xm-and-surveys/surveys/link-surveys/single-use-links/env-variable.webp) + +## Check suId of a submission + +You can find the suId of each submission in the submission meta data. To view it, simple hover over the Avatar: + +![View suId in the submission meta data.](/images/xm-and-surveys/surveys/link-surveys/single-use-links/metadata.webp) + + +### 'Link used' message + +You can customize the 'link used' messaging in the Survey Editor settings: + +![Adjust the message shown to people if a link was already used.](/images/xm-and-surveys/surveys/link-surveys/single-use-links/used-message.webp) diff --git a/docs/xm-and-surveys/surveys/link-surveys/source-tracking.mdx b/docs/xm-and-surveys/surveys/link-surveys/source-tracking.mdx new file mode 100644 index 0000000000..324428b5ba --- /dev/null +++ b/docs/xm-and-surveys/surveys/link-surveys/source-tracking.mdx @@ -0,0 +1,46 @@ +--- +title: "Source Tracking" +description: "Track the source of your users in an easy & compliant way!" +icon: "display-chart-up" +--- + +Understand the source a survey respondent comes from when responding to your survey – all while keeping data privacy standards high! + +Check out this video to learn more about source tracking in link surveys: + + + + +## Purpose + +Source tracking for link surveys is essential when you: + +- Want to analyze the origin of your survey respondents. +- Aim to ensure compliance with tracking and data collection regulations. + +## Code Example + +```sh Example Source as Google +https://formbricks.com/clin3dxja02k8l80hpwmx4bjy?source=Google +``` + +## How it Works + +To track the source of users in your link surveys effectively, follow these steps: + +1. **Generate Survey URL**: Create a Link Survey and get the sharable link. Append `?source=YourSouce` to the link to reference it with your campaigns and sources. + +```sh Example Source as Google +https://formbricks.com/clin3dxja02k8l80hpwmx4bjy?source=Google +``` + +2. **Collect Data**: When users access the survey through these links, the URL parameters will capture the source information from which they were shared. + +3. **View Responses**: Use the collected source data to analyze where your survey respondents are coming from. You can hover over the user icon in the responses tab to see the source of the user. + +![View Source in Response](/images/xm-and-surveys/surveys/link-surveys/source-tracking/view-response.webp) + + +4. **Analyse Data**: Download all the responses as a CSV/Excel and get access to the source information. This can provide valuable insights into your audience. + +Source tracking allows you to make informed decisions based on the origin of your survey participants, helping you tailor your surveys and marketing strategies accordingly. diff --git a/docs/xm-and-surveys/surveys/link-surveys/start-at-question.mdx b/docs/xm-and-surveys/surveys/link-surveys/start-at-question.mdx new file mode 100644 index 0000000000..5044b9882d --- /dev/null +++ b/docs/xm-and-surveys/surveys/link-surveys/start-at-question.mdx @@ -0,0 +1,36 @@ +--- +title: "Start At Specific Question" +description: + "Start a survey at a specific question using the URL to skip the initial questions." +icon: "arrow-right" +--- + +You can start a survey at a specific question from the survey using the URL to skip the initial questions. This is useful when you want to link to a specific question from an external source or want to use the same survey in different parts of the user journey. + +## How to Use it? + +1. In the Survey Editor, open the Questions Tab and ensure the survey is set as a **Link Survey**. + +2. Find the question you want to start at, click on **Show Advanced Settings**, and copy the **Question ID**. + + + Each question has a unique Question ID, which is used to identify it in the + survey. You can use different Question IDs for multiple **startAt** points in + the URL. + + +3. Append `?startAt=question_id` to your survey's URL, replacing `question_id` with the copied Question ID. + +4. Share this modified URL with your users to start the survey at the specified question. + +### Sample Link Survey URL with `startAt` + +```sh Example Link Survey URL with startAt configured +https://formbricks.com/clny997dj087ho30fdzyf4nkl?startAt=bqd29m94l9k0hnc3azbrexl8 +``` + +## Use Cases + +- **Link to a specific question from an external source:** Use this feature to direct users to a specific question in your survey from emails, chatbots, or web pages, providing a seamless experience. +- **Use the same survey in different parts of the user journey:** Employ the same survey at various stages of the user journey, starting at different questions to gather comprehensive insights. +- **Create a personalized survey experience:** Tailor the survey experience by starting at a particular question based on the user's past interactions or preferences, enhancing engagement. diff --git a/docs/xm-and-surveys/surveys/link-surveys/verify-email-before-survey.mdx b/docs/xm-and-surveys/surveys/link-surveys/verify-email-before-survey.mdx new file mode 100644 index 0000000000..2a7747431d --- /dev/null +++ b/docs/xm-and-surveys/surveys/link-surveys/verify-email-before-survey.mdx @@ -0,0 +1,70 @@ +--- +title: "Verify Email" +description: + "Verify email before accessing surveys" +icon: "envelope" +--- + +To ensure the credibility of your survey participants and maintain high-quality data, you can require respondents to verify their email before they can view and respond to your Formbricks link surveys. This verification process helps confirm that only participants with valid email addresses can access the survey, enhancing data integrity. + +## **Enabling Email Verification** + +This feature, designed for link surveys, can be enabled or disabled directly from the survey editor. Here’s how to activate it: + +### **Steps to Enable Email Verification** + +1. **Open Survey Editor**: Navigate to your link survey in the survey editor where you wish to enable email verification. +2. **Access Settings**: Click on the **`Settings`** tab next to the Questions & Styling tab. +3. **Select Response Options**: Find and select **`Response Options`** to access settings related to survey responses. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-one.webp) + +4. **Activate Email Verification**: Find the "Verify Email Before Accessing Survey" option and use the toggle to activate email verification. Specify what details should be visible to the public when they access the survey. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-two.webp) + + +### **User Experience Upon Accessing the Survey** + +When email verification is enabled, the following process unfolds for the user: + +1. **Email Entry Prompt**: Upon accessing the survey link, the user is prompted to verify their email before they can proceed. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-three.webp) + +2. **Preview Option**: A "Preview survey questions" option is available for those who are just browsing or curious about the survey content without completing it. This allows a non-interactive view of the survey. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-four.webp) + +3. **Verification Process**: After entering their email, respondents receive an email containing a survey link, which they can use to access the survey. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-five.webp) + + +**4. Survey Access**: After verifying their email, respondents can access and respond to the survey. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-six.webp) + +### **Benefits of Email Verification** + +- **Authenticity of Respondents**: Ensures that each respondent is verified, adding an extra layer of authenticity to your data collection. +- **Reduction in Spam and Fraudulent Responses**: Helps reduce unwanted or spam entries by confirming the legitimacy of each respondent’s email address. +- **Enhanced Data Quality**: Increases the reliability and quality of the data collected by confirming the identity of participants. + +### **Visibility of Verified Emails** + +In the Formbricks dashboard, the survey response card displays the verified email along with the responses attached to it, ensuring traceability and authenticity of the data collected. + +![Choose a link survey template](/images/xm-and-surveys/surveys/link-surveys/verify-email-before-survey/step-seven.webp) + +## **Use Cases** + +Email verification is particularly beneficial in scenarios where: + +- Market research requires verified responses from specific demographics. +- Surveys are intended for a selected audience with gated content. +- Academic or professional studies necessitate authenticated data for accuracy. + +## **Conclusion** + +Implementing the Email Verification feature is an effective strategy to ensure the authenticity of your survey respondents. By requiring email verification before survey access, you safeguard the integrity of your survey data and ensure that only verified individuals can contribute responses. diff --git a/docs/xm-and-surveys/surveys/website-app-surveys/actions.mdx b/docs/xm-and-surveys/surveys/website-app-surveys/actions.mdx new file mode 100644 index 0000000000..d5a76f8cc1 --- /dev/null +++ b/docs/xm-and-surveys/surveys/website-app-surveys/actions.mdx @@ -0,0 +1,96 @@ +--- +title: "Actions" +description: "Actions are predefined events within your app that prompt Formbricks to display a survey when triggered. These are detected by the Formbricks widget, which then presents the appropriate survey based on your predefined settings." +icon: "code" +--- + +## **How Do Actions Work?** + +Actions in Formbricks App Surveys are deeply integrated with user activities within your app. When a user performs a specified action, the Formbricks widget detects this activity and can present a survey to that specific user if the trigger conditions match for that survey. This capability ensures that surveys are triggered at the right time. You can set up these actions through a user-friendly No-Code interface within the Formbricks dashboard. + +## **Why Are Actions Useful?** + +Actions are invaluable for enhancing survey relevance and effectiveness: + +- **Personalized Engagement**: Surveys triggered by user actions ensure content is highly relevant and engaging, matching each user’s current context. + +- **User Attributes**: By tying surveys to specific user attributes, such as activity levels or feature usage, you can customize the survey experience to reflect individual user profiles. + +- **User Targeting**: Precise targeting based on user attributes ensures that surveys are shown only to users who meet certain criteria, enhancing the relevance and effectiveness of each survey. + +## **Setting Up No-Code Actions** + +Formbricks offers an intuitive No-Code interface that allows you to configure actions without needing to write any code. + +To add a No-Code Action: + +1. Visit the Formbricks Dashboard & switch to the Actions tab: + +![setup checklist ui of survey popup for app surveys](/images/xm-and-surveys/surveys/website-app-surveys/actions/i1.webp) + +1. Now click on “Add Action” + +![add action](/images/xm-and-surveys/surveys/website-app-surveys/actions/i2.webp) + +Here are four types of No-Code actions you can set up: + +### **1. Click Action** + +Click Action is triggered when a user clicks on a specific element within your application. You can define the element's inner text or CSS selector to trigger the survey. + +- **Inner Text**: Checks if the innerText of a clicked HTML element, like a button label, matches a specific text. This action allows you to display a survey based on text interactions within your application. + +- **CSS Selector**: Verifies if a clicked HTML element matches a provided CSS selector, such as a class, ID, or any other CSS selector used in your website. It enables survey triggers based on element interactions. + +### **2. Page view Action** + +This action is triggered when a user visits a page within your application. + +### **3. Exit Intent Action** + +This action is triggered when a user is about to leave your application. It helps capture user feedback before they exit, providing valuable insights into user experiences and potential improvements. + +### **4. 50% Scroll Action** + +This action is triggered when a user scrolls through 50% of a page within your application. It helps capture user feedback at a specific point in their journey, enabling you to gather insights based on user interactions. + +This action is triggered when a user visits a specific page within your application. You can define the URL match conditions as follows: + +You can combine the url filters with any of the no-code actions to trigger the survey based on the URL match conditions. + +### **URL Match Conditions** + +- **exactMatch**: Triggers the action when the URL exactly matches the specified string. + +- **contains**: Activates when the URL contains the specified substring. + +- **startsWith**: Fires when the URL starts with the specified string. + +- **endsWith**: Executes when the URL ends with the specified string. + +- **notMatch**: Triggers when the URL does not match the specified condition. + +- **notContains**: Activates when the URL does not contain the specified substring. + +## **Setting Up Code Actions** + +For more granular control, you can implement actions directly in your codebase: + +1. **Configure the Action**: First, add the action via the Formbricks web interface to make it available for survey configuration. + After that you can fire an action using `formbricks.track()` + +2. **Track an Action**: Use formbricks.track() to send an action event to Formbricks. + +```javascript Track an action formbricks.track("Action Name"); + +``` + +Here is an example of how to fire an action when a user clicks a button: + +```javascript Track Button Click +const handleClick = () => { + formbricks.track("Button Clicked"); +}; + +return ; +``` diff --git a/docs/xm-and-surveys/surveys/website-app-surveys/advanced-targeting.mdx b/docs/xm-and-surveys/surveys/website-app-surveys/advanced-targeting.mdx new file mode 100644 index 0000000000..46d6c35766 --- /dev/null +++ b/docs/xm-and-surveys/surveys/website-app-surveys/advanced-targeting.mdx @@ -0,0 +1,28 @@ +--- +title: "Advanced Targeting" +description: "Advanced Targeting allows you to show surveys to the right group of people. You can target surveys based on user attributes, device type, and more instead of spraying and praying. This helps you get more relevant feedback and make data-driven decisions. All of this without writing a single line of code." +icon: "bullseye" +--- + + +## How to setup Advanced Targeting + + + Advanced Targeting is only available on the Pro plan! + + +* On the Formbricks dashboard, click on **People** tab from the top navigation bar. + +* Switch to the **Segments** tab & click on **Create Segment**. + +* Give your segment a title & a description to help you remember what this segment is about. + +* Now click on the **Add Filter** button to add a filter. You can filter based on user attributes, other segments, devices, and more. + +* To group a set of filters together, click on the Three Dots icon on the right side of the filter and click on **Create Group**. + +* Try playing around with different filters & conditions that we have provided to see how the segment size changes. + +* Once you are happy with the segment, click on **Save Segment**. + +* Now, when you create a survey, you can select this segment to target your survey to. \ No newline at end of file diff --git a/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx b/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx new file mode 100644 index 0000000000..d08e0753b5 --- /dev/null +++ b/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx @@ -0,0 +1,378 @@ +--- +title: "Framework Guides" +icon: "book" +--- + +Integrate the **Formbricks App Survey SDK** into your app using multiple options. Explore the available choices below. If you need something else, open a [**GitHub Discussion**](https://github.com/formbricks/formbricks/discussions), and we’ll be happy to help! + + + + [All you need to do is add three lines of code to your HTML script, and that's it!](https://formbricks.com/docs/app-surveys/framework-guides#html) + + + + [Load our JavaScript library with your environment ID, and you're ready to + go!](https://formbricks.com/docs/app-surveys/framework-guides#react-js) + + + + [Natively add us to your Next.js project, with support for both App and Pages + project + structure.](https://formbricks.com/docs/app-surveys/framework-guides#next-js) + + + + Learn how to use Formbricks' React Native SDK to integrate your surveys into + React Native applications. + + + + [Easily integrate our SDK with your React Native app for seamless survey support.](https://formbricks.com/docs/app-surveys/framework-guides#react-native) + + + +## Prerequisites + +Before getting started, make sure you have: + +- A running web application with user authentication in your chosen framework. + +- A Formbricks account with your **environment ID** and **API host**, available in the **Setup Checklist** under **Settings**. + +## HTML + +All you need to do is copy a ` + +``` + +### Required Customizations + +| Name | Type | Description | +| -------------- | ------ | -------------------------------------- | +| environment-id | string | Formbricks Environment ID. | +| api-host | string | URL of the hosted Formbricks instance. | + +Now, visit the [Validate Your Setup](#validate-your-setup) section to verify your setup! + +## React.js + +Install the Formbricks SDK using one of the following package managers: `npm`, `pnpm`, or `yarn`. +Note that **`zod`** is required as a peer dependency and must also be installed in your project. + +```javascript npm +npm install @formbricks/js zod +``` + +```bash pnpm +pnpm add @formbricks/js zod +``` + +```bash yarn +yarn add @formbricks/js zod +``` + +Update your `App.js/ts` file to initialize Formbricks. + +```javascript src/App.js +// other imports +import formbricks from "@formbricks/js"; + +if (typeof window !== "undefined") { + formbricks.init({ + environmentId: "", + apiHost: "", + userId: "", //optional + }); +} + +function App() { + // your own app +} + +export default App; +``` + +## Required Customizations + +| Name | Type | Description | +| -------------- | ------ | -------------------------------------- | +| environment-id | string | Formbricks Environment ID. | +| api-host | string | URL of the hosted Formbricks instance. | + +Now, visit the [Validate Your Setup](#validate-your-setup) section to verify your setup! + +## Next.js + +Next.js projects use either the **App Directory** or the **Pages Directory**. Since the Formbricks SDK runs on the client side, follow these steps based on your setup: + +- **App Directory**: Create a new component in `app/formbricks.tsx` and call it in `app/layout.tsx`. + +- **Pages Directory**: Initialize Formbricks directly in `_app.tsx`. + +Code snippets for the integration for both conventions are provided to further assist you. + +```bash npm +npm install @formbricks/js zod +``` + +```bash pnpm +pnpm add @formbricks/js zod +``` + +```bash yarn +yarn add @formbricks/js zod +``` + +### App directory + +```typescript app/formbricks.tsx +"use client"; + +import { usePathname, useSearchParams } from "next/navigation"; +import { useEffect } from "react"; +import formbricks from "@formbricks/js"; + +export default function FormbricksProvider() { + const pathname = usePathname(); + const searchParams = useSearchParams(); + + useEffect(() => { + formbricks.init({ + environmentId: "", + apiHost: "", + userId: "", //optional + }); + }, []); + + useEffect(() => { + formbricks?.registerRouteChange(); + }, [pathname, searchParams]); + + return null; +} +``` + +```typescript app/layout.tsx +// other imports +import FormbricksProvider from "./formbricks"; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + {children} + + ); +} +``` + +### Pages directory + +```javascript src/pages/_app.tsx +// other import +import { useRouter } from "next/router"; +import { useEffect } from "react"; +import formbricks from "@formbricks/js"; + +if (typeof window !== "undefined") { + formbricks.init({ + environmentId: "", + apiHost: "", + userId: "", //optional + }); +} + +export default function App({ Component, pageProps }: AppProps) { + const router = useRouter(); + + useEffect(() => { + // Connect next.js router to Formbricks + const handleRouteChange = formbricks?.registerRouteChange; + router.events.on("routeChangeComplete", handleRouteChange); + + return () => { + router.events.off("routeChangeComplete", handleRouteChange); + }; + }, []); + return ; +} +``` + +### Required Customizations + +| Name | Type | Description | +| -------------- | ------ | -------------------------------------- | +| environment-id | string | Formbricks Environment ID. | +| api-host | string | URL of the hosted Formbricks instance. | + +First, initialize the Formbricks SDK to run only on the client side. To track page changes, register the route change event with the Next.js router. + +Next, go to the [**Validate Your Setup**](#validate-your-setup) section to verify your setup! + +## Vue.js + +Integrating the Formbricks SDK with Vue.js is easy. We’ll ensure the SDK is only loaded and used on the client side, as it’s not meant for server-side use. + +```bash npm +npm install @formbricks/js +``` + +```bash pnpm +pnpm add @formbricks/js +``` + +```bash yarn +yarn add @formbricks/js +``` + +```javascript src/formbricks.js +import formbricks from "@formbricks/js"; + +if (typeof window !== "undefined") { + formbricks.init({ + environmentId: "", + apiHost: "", + userId: "", //optional + }); +} + +export default formbricks; +``` + +```javascript src/main.js +// other imports +import formbricks from "@/formbricks"; + +const app = createApp(App); + +app.use(router); + +app.mount("#app"); + +router.afterEach((to, from) => { + if (typeof formbricks !== "undefined") { + formbricks.registerRouteChange(); + } +}); +``` + +### Required Customizations + +| Name | Type | Description | +| -------------- | ------ | -------------------------------------- | +| environment-id | string | Formbricks Environment ID. | +| api-host | string | URL of the hosted Formbricks instance. | + +Now, visit the [Validate Your Setup](#validate-your-setup) section to verify your setup! + +## React Native + +Install the Formbricks React Native SDK using one of the package managers, i.e., npm, pnpm, or yarn. + +```bash npm +npm install @formbricks/react-native +``` + +```bash pnpm +pnpm add @formbricks/react-native +``` + +```bash yarn +yarn add @formbricks/react-native +``` + +Now, update your `App.js/App.tsx` file to initialize Formbricks: + +```javascript src/App.js +// other imports +import Formbricks from "@formbricks/react-native"; + +const config = { + environmentId: "", + apiHost: "", + userId: "", // optional +}; + +export default function App() { + return ( + <> + {/* Your app content */} + + + ); +} +``` + +## Required Customizations + +| Name | Type | Description | +| -------------- | ------ | -------------------------------------- | +| environment-id | string | Formbricks Environment ID. | +| api-host | string | URL of the hosted Formbricks instance. | + +## Validate your setup + +Once you’ve completed the steps above, validate your setup by checking the Setup Checklist in the Settings. The widget status indicator should change from this: + +![first validate](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738122589/image_ecaovs.jpg) +To this: + +![second validate](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738122750/image_ymaenn.jpg) + +## Debugging Formbricks Integration + +Enabling debug mode in your browser can help troubleshoot issues with Formbricks. Here’s how to activate it and what to look for in the logs. + +### Activate Debug Mode + +To enable debug mode, add `?formbricksDebug=true` to your app’s URL (e.g., [`https://example.com?formbricksDebug=true)`](). + +#### View Debug Logs + +1. Open your browser’s developer tools: + +- **Google Chrome/Edge**: Press `F12` or right-click and select "**Inspect" > "Console**". + +- **Firefox**: Press `F12` or right-click and select "**Inspect Element" > "Console**". + +- **Safari**: Press `Option + Command + C` to open developer tools and go to the "**Console**" tab. + +#### Common Use Cases + +Debug mode is helpful for: + +- Verifying Formbricks initialization. + +- Identifying issues with survey triggers. + +- Troubleshooting unexpected behavior. + +#### Debug Log Messages + +Logs provide insights into: + +- API calls and responses. + +- Survey triggers and form interactions. + +- Initialization errors. + +If you're stuck, visit [**GitHub Discussions**](https://github.com/formbricks/formbricks/discussions) for assistance. + +``` + +``` diff --git a/docs/xm-and-surveys/surveys/website-app-surveys/quickstart.mdx b/docs/xm-and-surveys/surveys/website-app-surveys/quickstart.mdx new file mode 100644 index 0000000000..09ba407551 --- /dev/null +++ b/docs/xm-and-surveys/surveys/website-app-surveys/quickstart.mdx @@ -0,0 +1,46 @@ +--- +title: "Quickstart" +description: "App surveys deliver 6–10x higher conversion rates compared to email surveys. If you are new to Formbricks, follow the steps in this guide to launch a survey in your web or mobile app (React Native) within 10–15 minutes." +icon: "rocket" +--- + +* **Create a Formbricks Cloud Account**: While you can [self-host](/self-hosting) Formbricks, the fastest and easiest way to get started is with the free Cloud plan. Simply [sign up](https://app.formbricks.com/auth/signup) here, follow the onboarding steps, and choose the "Formbricks Surveys” option.![what are you here for](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738113228/image_d11uiy.png) + +* **Choose your project channel**: Select the channel where you want to create your project. You can create both app and link surveys from any channel, but for onboarding, select between app surveys or the public website option. Once selected, you'll be prompted to connect your app/website to Formbricks. + +![three options](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738113543/image_ndinwq.png) + +* **Connect your App/Website**: During onboarding, you'll be prompted to connect your app or website. You'll receive a code snippet for HTML and an npm package to embed in your app. + +![connect product to formbricks](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738114328/image_tv0jmj.png) + +* Paste the code snippet in your app and reload the page. You should now see a message being displayed that your app or website is now connected with Formbricks. + +![congrats](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738114793/image_lij7kw.png) +Onboarding is complete! Now let’s create our first survey as you should see templates to choose from after clicking on **Next**: + +![first survey](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738115025/image_yyuuzn.jpg) + +* **Create your first survey**: To be able to see a survey in your app, you need to create one. We’ll choose one of the templates and head over to the survey settings: + +Pick the Survey Type as **App Survey**. + +![app survey](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738115200/image_zxi8lw.png) + +* **Set Trigger for the Survey**: Scroll to **Survey Trigger**, click **+ Add Action**, and select **New Session**. This ensures the survey appears when the Formbricks Widget detects a new user session. + +![add action](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738115544/image_hj6hbf.jpg) + +* **Set Recontact Options for Debugging**: Adjust the **Recontact Options** to test the survey more easily. By default, surveys appear only once per user to prevent fatigue. + + + Please change this setting after testing your survey to avoid user fatigue. + + +![debugging](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738115751/image_rizwle.jpg) + +* Click **Publish** to proceed to the **Summary Page**, where you can view survey responses. + +![published](https://res.cloudinary.com/dwdb9tvii/image/upload/v1738116264/image_ktcgl7.jpg)We offer framework guides for various frontend technologies. Check out the [**App Survey Framework Guides**](/xm-and-surveys/surveys/website-app-surveys/framework-guides) to set up your app survey. + +Need help? Join us in [**GitHub Discussions**](https://github.com/formbricks/formbricks/discussions), and we’ll be happy to assist! \ No newline at end of file diff --git a/docs/xm-and-surveys/surveys/website-app-surveys/recontact.mdx b/docs/xm-and-surveys/surveys/website-app-surveys/recontact.mdx new file mode 100644 index 0000000000..197a6ac495 --- /dev/null +++ b/docs/xm-and-surveys/surveys/website-app-surveys/recontact.mdx @@ -0,0 +1,91 @@ +--- +title: "Recontact Options" +description: "Recontact options in Formbricks enable you to manage how often and under what conditions a survey is shown to a user. This feature is crucial for balancing effective feedback collection with a positive user experience by preventing survey fatigue." +icon: "user-check" +--- + +## When do Recontact Options come into play? + +Recontact options are the last layer of the logic that determines if a survey is shown to the current user. The logic goes as follows: + +1. Targeting: Does the current user targeted to fill out this survey? If yes... + +2. Trigger: Is the survey triggered? If yes... + +3. **Recontact Options:** Should the survey be shown (again) to this user? That's dependent on: + +- Did the user see any survey recently (meaning, has Global Waiting Time passed)? + +- Did the user see this specific survey already? + +- How many times did the user see this specific survey already? + +- Has the user already responded to this survey? + +As you can see, there are a lot of different cases to cover. Let's have a closer look 👇 + +## Recontact Options + +By default, a survey is shown to each user only once. + +You can adjust the default behavior by modifying the Recontact Options for each survey in the settings: + +1. Open the Survey Editor for the survey you want to see & modify the Recontact Options for. + +2. Select the Settings Tab. + +3. Ensure your Survey type is set to **App Survey**. + +![Choose Survey Type as App Survey](/images/xm-and-surveys/surveys/website-app-surveys/recontact/app-survey.webp) + +1. Scroll down to the Recontact Options section. + +Available Recontact Options include: + +- **Show only once**: (default) Displays the survey a single time, regardless of whether it was completed. + +- **Until they Submit a Response**: If tareting matches and trigger fires, Formbricks keeps showing the survey until the user submits a response. + +- **Keep Showing while Conditions Match**: Always shows the survey while specific conditions are met. Useful for continuous feedback collection, such as in [Docs Feedback Survey](/xm-and-surveys/xm/best-practices/docs-feedback) or the [Feedback Box](/xm-and-surveys/xm/best-practices/feedback-box). + +![Choose Recontanct Options for the Survey](/images/xm-and-surveys/surveys/website-app-surveys/recontact/survey-recontact.webp) + +## Project-wide Global Waiting Time + +The Global Waiting Time is a universal blocker to make sure that no user sees too many surveys. This is particularly helpful when several teams of large organisations use Formbricks at the same time. + +The default Global Waiting Time is set to 7 days. + +To adjust the Global Waiting Time: + +1. Visit Formbricks Settings + +2. Go to Project Settings + +3. Find the **Recontact Waiting Time** section + +4. Modify the interval (in days) as needed. + +![Formbricks Project-Wide Wait Time](/images/xm-and-surveys/surveys/website-app-surveys/recontact/global-wait-time.webp) + +## Overriding Global Waiting Time for a Specific Survey + +For specific surveys, you may need to override the default waiting time. Below is how you can do that: + +1. In the Survey Editor, access the Settings Tab. + +2. Find the Ignore Waiting Time between Surveys toggle under Recontact Options. + +3. Enable this toggle to bypass the global setting. + +4. Set a custom recontact period: + + - **Always Show Survey**: Displays the survey whenever triggered, ignoring the waiting time. + + - **Wait `X` days before showing this survey again**: Sets a specific interval before the survey can be shown again. + +![Ignore Global Waiting Time for a Specific Survey](/images/xm-and-surveys/surveys/website-app-surveys/recontact/ignore-wait-time.webp) + +--- + +Still struggling or is something not working as expected? [Join us in Github Discussions](https://github.com/formbricks/formbricks/discussions) and we'd be glad to assist you! diff --git a/docs/xm-and-surveys/surveys/website-app-surveys/user-identification.mdx b/docs/xm-and-surveys/surveys/website-app-surveys/user-identification.mdx new file mode 100644 index 0000000000..7c6bc0898f --- /dev/null +++ b/docs/xm-and-surveys/surveys/website-app-surveys/user-identification.mdx @@ -0,0 +1,83 @@ +--- +title: "User Identification" +description: "User Identification helps you to not only segment your users but also to see more information about the user who responded to a survey. This helps you to target surveys to specific user segments and see more information about the user who responded to a survey." +icon: "user" +--- + +### Understanding Identified vs Unidentified Users + +In Formbricks, understanding the difference between identified and unidentified users is crucial for effective survey segmentation and targeted feedback collection. + +| Feature | Unidentified Users | Identified Users | +| -------------------------------------------------------- | ------------------ | ---------------- | +| Show surveys based on **trigger** actions | ✅ | ✅ | +| Set **recontact details** to avoid survey fatique | ✅ | ✅ | +| Target a subset of users using **attributes & segments** | ❌ | ✅ | +| Collect **user information** in Formbricks | ❌ | ✅ | +| Track **custom attributes** | ❌ | ✅ | +| Counts towards your **monthly tacked user (MTU)** limit | ❌ | ✅ | +| Recommended for **public-facing websites** | ✅ | ❌ | +| Recommended for **web apps after login** | ❌ | ✅ | + +## Identified Users + +Identified users are those for whom specific information has been set, notably the userId. This identification allows for more precise targeting of surveys and a deeper understanding of the feedback provided. When enabled, all information specified by you and all actions are sent to Formbricks. + +This method is recommended for applications where users are required to log in and will often return. + +### Setting User ID + +To enable user identification, set the `userId` in the `init()` call of Formbricks. The user will show up in the Formbricks dashboard only if the `userId` is set. Use a unique string, like a database ID or a unique email address. You can also anonymize the identifier, as long as it is unique for each user. + +```javascript +formbricks.init({ + environmentId: "", + apiHost: "", + userId: "", +}); +``` + +### Enhanced Initialization with User Attributes + +Set user attributes in Formbricks during initialization along with the `userId`. + + ```javascript Enhanced Initialization with User Attributes + formbricks.init({ + environmentId: "", + apiHost: "", + userId: "", + attributes: { + // your custom attributes + Plan: "premium", + }, + }); + ``` + +## Setting Custom User Attributes + +Use the `setAttribute` function to set custom attributes for the user (e.g., name, plan). + + + **Note**: the number of different attribute classes (e.g., "Plan," + "First Name," etc.) is currently limited to 150 attributes per environment. + + +```javascript Setting Custom Attributes +formbricks.setAttribute("Plan","free"); + ``` + +The `setAttribute` function works like this: + + +```javascript Setting Custom Attributes +formbricks.setAttribute("attribute_key", "attribute_value"); +``` + + +### Logging Out Users + +When a user logs out of your webpage, also log them out of Formbricks to prevent activity from being linked to the wrong user. Use the logout function: + +```javascript Logging out User +formbricks.logout(); +``` diff --git a/docs/xm-and-surveys/xm/best-practices/cancel-subscription.mdx b/docs/xm-and-surveys/xm/best-practices/cancel-subscription.mdx new file mode 100644 index 0000000000..ee14d3aa7b --- /dev/null +++ b/docs/xm-and-surveys/xm/best-practices/cancel-subscription.mdx @@ -0,0 +1,112 @@ +--- +title: "Learn from Churn" +description: "Mastering Churn Surveys with Formbricks | Essential Tips & Steps" +icon: "chart-line-down" +--- + +Churn is hard, but can teach you a lot. Whenever a user decides that your product isn’t worth it anymore, you have a unique opportunity to get deep insights. These insights are pure gold to reduce churn. + +## Purpose + +The Churn Survey is among the most effective ways to identify weaknesses in your offering. People were willing to pay but now are not anymore: What changed? Let’s find out! + +## Formbricks Approach + +* Ask at exactly the right point in time + +* Follow-up to prevent bad reviews + +* Coming soon: Make survey mandatory + +## Overview + +To run the Churn Survey in your app you want to proceed as follows: + +1. Create new Churn Survey at [app.formbricks.com](https://app.formbricks.com/) + +2. Set up the user action to display survey at right point in time + +3. Choose correct recontact options to never miss a feedback + +4. Prevent that churn! + + + ### Formbricks Widget running? We assume that you have already installed the + + Formbricks Widget in your web app. It’s required to display messages and + surveys in your app. If not, please follow the [Quick Start Guide (takes + 15mins max.)](/app-surveys/quickstart) + + +### 1. Create new Churn Survey + +If you don't have an account yet, create one at [app.formbricks.com](https://app.formbricks.com/auth/signup) + +Click on "Create Survey" and choose the template “Churn Survey”: + +![Create churn survey by template](/images/xm-and-surveys/xm/best-practices/cancel-subscription/create-cancel-flow.webp) + +### 2. Update questions (if you like) + +You’re free to update the question and answer options. However, based on our experience, we suggest giving the provided template a go 😊 + +![Change text content](/images/xm-and-surveys/xm/best-practices/cancel-subscription/change-text.webp) + +*Want to change the button color? You can do so in the project settings.* + +Save, and move over to the “Audience” tab. + +### 3. Pre-segment your audience + +In this case, you don’t really need to pre-segment your audience. You likely want to ask everyone who hits the “Cancel subscription” button. + +### 4. Set up a trigger + +To create the trigger for your Churn Survey, you have three options to choose from: + +* **Trigger by Inner Text:** You likely have a “Cancel Subscription” button in your app. You can setup a user Action with the according `Inner Text` to trigger the survey, like so: + +![Set the trigger by inner Text](/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-inner-text.webp) + +* **Trigger by CSS Selector:** In case you have more than one button saying “Cancel Subscription” in your app and only want to display the survey when one of them is clicked, you want to be more specific. The best way to do that is to give this button the HTML `id=“cancel-subscription”` and set your user action up like so: + +![Set the trigger by CSS Selector](/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-css-selector.webp) + +* **Trigger by page view filters:** Lastly, you could also display your survey on a subpage “/subscription-cancelled” where you forward users once they cancelled the trial subscription. You can then create a user Action with the type `Page View` and add select `Limit to specific pages` to add url filters, with the following settings: + +![Set the trigger by page URL](/images/xm-and-surveys/xm/best-practices/cancel-subscription/trigger-page-url.webp) + +Whenever a user visits this page, matches the filter conditions above and the recontact options (below) the survey will be displayed ✅ + +Here is our complete [Actions manual](/app-surveys/actions/) covering [No-Code](/app-surveys/actions#setting-up-no-code-actions) and [Code](/app-surveys/actions#setting-up-code-actions) Actions. + + + Pre-churn flow coming soon We’re currently building full-screen survey + pop-ups. You’ll be able to prevent users from closing the survey unless they + respond to it. It’s certainly debatable if you want that but you could force + them to click through the survey before letting them cancel 🤷 + + +### 5. Select Action in the “When to ask” card + +![Select feedback button action](/images/xm-and-surveys/xm/best-practices/cancel-subscription/select-action.webp) + +### 6. Last step: Set Recontact Options correctly + +Lastly, scroll down to “Recontact Options”. Here you have to choose the correct settings to make sure you milk these super valuable insights. You want to make sure that this survey is always displayed, no matter if the user has already seen a survey in the past days: + +![Set recontact options](/images/xm-and-surveys/xm/best-practices/cancel-subscription/recontact-options.webp) + +These settings make sure the survey is always displayed, when a user wants to Cancel their subscription. + +### 7. Congrats! You’re ready to publish your survey 💃 + +![Publish survey](/images/xm-and-surveys/xm/best-practices/cancel-subscription/publish-survey.webp) + + + Formbricks Widget running? You need to have the Formbricks Widget installed + to display the Churn Survey in your app. Please follow [this tutorial (Step 4 + onwards)](/xm-and-surveys/surveys/website-app-surveys/quickstart) to install the widget. + + +### **Get those insights! 🎉** \ No newline at end of file diff --git a/docs/xm-and-surveys/xm/best-practices/contact-form.mdx b/docs/xm-and-surveys/xm/best-practices/contact-form.mdx new file mode 100644 index 0000000000..88e8f5953a --- /dev/null +++ b/docs/xm-and-surveys/xm/best-practices/contact-form.mdx @@ -0,0 +1,157 @@ +--- +title: "Contact form" +icon: "address-book" +description: "A step-by-step guide to creating a contact form using Formbricks." +--- + +Welcome to this comprehensive guide on creating a contact form using Formbricks. Whether you're just starting out or you're a seasoned developer, this tutorial will walk you through every step of building an engaging and effective contact form. + +## What We’ll Build + +By the end of this tutorial, you'll have created a simple contact form featuring: + +- A welcoming introduction. + +- Fields for collecting the user's name and email. + +- A question to find out why they’re contacting you. + +- A message field for users to share their queries. + +### Setting Up Your Form + +First, let's lay the groundwork for your form: + +- Head to the Surveys page and click on **New Survey**. + +- Select **Start from Scratch** to create a new form. + +- In the form editor, click the three dots next to a question, then select **Change Question Type** and choose **Statement (Call to Action)**. + +![Toggle button for Statement (Call to Action)](/images/xm-and-surveys/xm/best-practices/contact-form/welcome1.webp) + +- Add a welcoming statement to greet your users and explain the form's purpose. + +- Personalize the greeting to make it inviting and encourage engagement. + + + A warm welcome sets the tone for your form. Make it friendly to encourage + users to participate. + + +### Adding the Name Field + +Next, let's capture the user's name: + +- Click **Add Question**. + +![Adding a question in Formbricks](/images/xm-and-surveys/xm/best-practices/contact-form/add-question.webp) + +- Enter the prompts for the name field. + +- Turn off the **Long Answer** option at the bottom right. + +- Adjust any **settings**, such as making the field required. + +![Name field configuration](/images/xm-and-surveys/xm/best-practices/contact-form/name-field.webp) + +### Adding the Email Field + +Now, let’s add a field to collect the user's email address: + +- Click **Add Question** again. + +- Select Email as the input type. + +- Enter a prompt for the email field. + +![Email field configuration](/images/xm-and-surveys/xm/best-practices/contact-form/email-field.webp) + +### Adding a Reason for Contact + +Let’s now understand why the user is contacting you: + +- Click **Add Question** once again. + +- Select **Change Question** Type and choose **Single Select**. + +- Add the question "Why are you contacting us today?" + +![Single Select question configuration](/images/xm-and-surveys/xm/best-practices/contact-form/single-select-questionare.webp) + + + Predefined options help categorize inquiries, making it easier for you to + respond appropriately. + + +- Add options like "General Inquiry," "Support," and "Feedback." + +![Single Select question configuration](/images/xm-and-surveys/xm/best-practices/contact-form/query-form.webp) + +### Adding a Message Field + +Finally, let’s provide a space for the user’s message: + +- Click **Add Question** for the last time. + +- Add the question: "Your Message." + +- Set the placeholder text to something like "Please write your message here." + +![Message field configuration](/images/xm-and-surveys/xm/best-practices/contact-form/message-field.webp) + +- Consider setting a minimum character count to ensure detailed messages. + +### Finalizing Your Form + +Once your form is complete, follow these final steps: + +- Review and rearrange the questions if necessary. + +- Test the form by filling it out as a user. + +- Customize the **Thank You** message for submissions. + +- Publish the form to get a shareable link. + +- Enable submission notifications: + + * Go to your Formbricks account settings. + + * Verify your email address. + + * Ensure that **Survey** notifications are enabled. + +### Integrating the Contact Form into Your Website + +After publishing the form, follow these steps to integrate it into your site: + +- **Copy the Shareable Link** + +![Embed Image configuration](/images/xm-and-surveys/xm/best-practices/contact-form/embed.webp) + + * Find your form in the Formbricks dashboard, and click Share. + + * Select Embed in a Web Page. + +- **Embed the Code** + + * Copy the provided code and paste it into your website where you want the form to appear. + + + Note: There is an options toggle button called "Embed Mode." When enabled, it + updates the `src` to `"?embed=true"` and displays your survey in a minimalist + design, removing padding and background for a cleaner look. + + +- **Test the Integration** + + * Check if the form displays correctly on your site. + + * Submit a test entry to ensure everything works and notifications are received. + +## Conclusion + +Congratulations! You’ve successfully created and integrated a professional contact form using Formbricks. This form will help you collect valuable information from your visitors in an efficient, user-friendly way. + +A great contact form strikes the balance between collecting necessary details and being simple enough to encourage submissions. **You’ve achieved just that!** \ No newline at end of file diff --git a/docs/xm-and-surveys/xm/best-practices/docs-feedback.mdx b/docs/xm-and-surveys/xm/best-practices/docs-feedback.mdx new file mode 100644 index 0000000000..2f83c615d8 --- /dev/null +++ b/docs/xm-and-surveys/xm/best-practices/docs-feedback.mdx @@ -0,0 +1,378 @@ +--- +title: "Docs Feedback" +icon: "comment" +description: "A step-by-step guide to getting feedback on your Documentation with Formbricks" +--- + + +Docs Feedback allows you to measure how clear your documentation is. + +## Purpose + +Your users don’t spend as much time thinking about your product as you do. To fight the "Curse of Knowledge" you have to measure how clear your docs are. + +## Installation + +To get this running, you'll need a bit of time. Here are the steps we're going through: + +- Set up Formbricks Cloud + +- Build the frontend + +- Connect to API + +- Test + +## 1. Setting up Formbricks Cloud + +- Create a [Formbricks Cloud](https://app.formbricks.com/auth/signup) account. + +- In the top-right menu, you can switch between “Development” and “Production” environments. These are separate, so your test data won’t affect real insights. Switch to “Development”: + +![switch to dev environment](/images/xm-and-surveys/xm/best-practices/docs-feedback/switch-to-dev.webp) + +- Then, create a survey using the template “Docs Feedback”: + +![select docs template](/images/xm-and-surveys/xm/best-practices/docs-feedback/docs-template.webp) + +- Change the Internal Question ID of the first question to **“isHelpful”** to make your life easier 😉 + +![change id](/images/xm-and-surveys/xm/best-practices/docs-feedback/change-id.webp) + +- Similarly, you can change the Internal Question ID of the *Please elaborate* question to **“additionalFeedback”** and the one of the *Page URL* question to **“pageUrl”**. + + + The answers must be identical. If you want different options than "Yes 👍" and "No 👎", you need to update the choices accordingly. They must match the frontend we’re building in the next step. + + +- Click on “Continue to Settings or select the audience tab manually. Scroll down to “Survey Trigger” and create a new Action: + +![set up when to ask card](/images/xm-and-surveys/xm/best-practices/docs-feedback/survey-trigger.webp) + +- Our goal is to create an event that never triggers. This might seem odd, but it's a necessary workaround. Fill out the action as shown in the screenshot: + +![add action](/images/xm-and-surveys/xm/best-practices/docs-feedback/add-action.webp) + +- Select the Non-Event in the dropdown. Now you see that the “Publish survey” button is active. Publish your survey 🤝 + +![select nonevent](/images/xm-and-surveys/xm/best-practices/docs-feedback/select-action.webp) + +**You’re all setup in Formbricks Cloud for now 👍** + +## 2. Build the frontend + + + Your frontend might work differently Your frontend likely looks and works + differently. This is an example specific to our tech stack. We want to + illustrate what you should consider building yours. + + +Before we start, lets talk about the widget. It works like this: + +* Once the user selects yes/no, a partial response is sent to the Formbricks API. It includes the feedback and the current page url. + +* Then the user is presented with an additional open text field to further explain their choice. Once it's submitted, the previous response is updated with the additional feedback. + +This allows us to capture and analyze partial feedback where the user is not willing to provide additional information. + +**Let's do this 👇** + +- Open the code editor where you handle your docs page. + +- Likely, you have a template file or similar which renders the navigation at the bottom of the page: + +![doc navigation](/images/xm-and-surveys/xm/best-practices/docs-feedback/docs-navi.webp) + +Locate that file. We are using the [Tailwind Template “Syntax”](https://tailwindui.com/templates/syntax) in this case. + +- Write the frontend code for the widget. Here is the full component (we break it down right below): + +```tsx Entire Widget +import { Button } from "@/modules/ui/components/Button"; +import { Popover, PopoverContent, PopoverTrigger } from "@/modules/ui/popover"; +import { useRouter } from "next/router"; +import { useState } from "react"; +import { + handleFeedbackSubmit, + updateFeedback, +} from "../../lib/handleFeedbackSubmit"; + +export const DocsFeedback = () => { + const router = useRouter(); + const [isOpen, setIsOpen] = useState(false); + const [sharedFeedback, setSharedFeedback] = useState(false); + const [responseId, setResponseId] = useState(null); + const [freeText, setFreeText] = useState(""); + + if ( + !process.env.NEXT_PUBLIC_FORMBRICKS_COM_DOCS_FEEDBACK_SURVEY_ID || + !process.env.NEXT_PUBLIC_FORMBRICKS_COM_API_HOST || + !process.env.NEXT_PUBLIC_FORMBRICKS_COM_ENVIRONMENT_ID + ) { + return null; + } + + return ( +
+ {!sharedFeedback ? ( +
+ Was this page helpful? + +
+ {["Yes 👍", " No 👎"].map((option) => ( + { + const id = await handleFeedbackSubmit( + option, + router.asPath + ); + setResponseId(id); + }} + > + {option} + + ))} +
+ +
+