{
    "componentChunkName": "component---src-templates-article-page-template-js",
    "path": "/concepts/integrations-introduction/",
    "result": {"data":{"markdownRemark":{"frontmatter":{"title":"Introduction to integrations in Flex","slug":"integrations-introduction","updated":"2022-10-11T00:00:00.000Z","category":"concepts-integrations","ingress":"Flex allows integrations with a vast range of third party tools and solutions. These tools can be integrated with Flex by using Zapier, the Flex Integration API, or the client application.","skills":null},"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Integrations in Flex refer to third-party solutions and tools that\ncommunicate with the Flex marketplace to either retrieve information and\ntake action outside Flex, or trigger actions within Flex. A lot of\nfeatures that are not natively available in Flex can be integrated with\nyour marketplace solution with varying degrees of complexity."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"flex-integration-tools","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#flex-integration-tools","ariaLabel":"flex integration tools permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Flex integration tools"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"There are several ways to approach integrating third party tools with\nyour Flex marketplace. Your integration options within Flex depend on\nthe requirements of the third party tool you are integrating, and on the\ncomplexity of the integration you are looking to create."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"client-application","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#client-application","ariaLabel":"client application permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Client application"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The simplest integration tool is your client application. Since you have\nfull control over your marketplace client app, you can add analytics and\ntracking tools such as "},{"type":"element","tagName":"a","properties":{"href":"#hotjar-analytics"},"children":[{"type":"text","value":"Hotjar"}]},{"type":"text","value":" or\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/ftw/how-to-set-up-analytics-for-ftw/#configure-google-analytics"},"children":[{"type":"text","value":"Goole Analytics"}]},{"type":"text","value":",\nor messaging tools such as "},{"type":"element","tagName":"a","properties":{"href":"#sendbird-user-to-user-chat-app"},"children":[{"type":"text","value":"Sendbird"}]},{"type":"text","value":"\nor\n"},{"type":"element","tagName":"a","properties":{"href":"https://www.intercom.com/help/en/articles/168-install-intercom-on-your-website-to-support-and-onboard-logged-in-users","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Intercom"}]},{"type":"text","value":",\ndirectly into your client app code."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The FTW templates include a Node.js/Express server by default. Some\nthird party integrations may require a secure context, such as\n"},{"type":"element","tagName":"a","properties":{"href":"#voucherify-discount-coupons"},"children":[{"type":"text","value":"Voucherify"}]},{"type":"text","value":" or other promotion\nintegrations. For these types of integrations, you can use the FTW\nserver to create endpoints or other logic in a secure way."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"integration-api","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#integration-api","ariaLabel":"integration api permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Integration API"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you want to create an integration where the third party solution\nlistens to – or takes action on – your Flex marketplace, you will likely\nneed to use the\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/introduction/getting-started-with-integration-api/"},"children":[{"type":"text","value":"Integration API"}]},{"type":"text","value":".\nWhere the\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/concepts/marketplace-api-integration-api/#when-to-use-the-marketplace-api"},"children":[{"type":"text","value":"Marketplace API"}]},{"type":"text","value":"\nis meant for everyday marketplace interactions, the Integration API\ngives operators powerful access to all marketplace data and activity.\nThrough the Integration API, operators can enable third party tools to\nmanage users, listings, transactions, bookings, stock reservations, and\nmore."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Due to its powerful nature, the Integration API should "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"only ever be\nused from a secure context"}]},{"type":"text","value":", such as your client application server or\na separate backend application. Here, too, the FTW server is an\nexcellent place to build your Integration API logic without revealing\nsensitive information to the public web in your browser client code."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"events","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#events","ariaLabel":"events permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Events"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In addition to direct endpoints to marketplace resources, Integration\nAPI also exposes events. The majority of activity on your marketplace\ntriggers events – users and listings created and updated, transactions\ntransitioned, and so forth. You can review\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/references/events/#supported-event-types"},"children":[{"type":"text","value":"the full list of supported event types"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"By listening to events, you can build flows where third party solutions\ntake action either in Flex or within the solutions themselves. You can\nread more about\n"},{"type":"element","tagName":"a","properties":{"href":"https://www.sharetribe.com/docs/how-to/reacting-to-events/","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"reacting to events in Flex"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"zapier","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#zapier","ariaLabel":"zapier permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Zapier"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Sharetribe has also built a\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/how-to/set-up-and-use-zapier/"},"children":[{"type":"text","value":"Zapier integration"}]},{"type":"text","value":" to facilitate\nintegrating third-party tools with Flex. The Zapier integration works by\nharnessing a subset of Flex events and allowing operators to connect any\nof the other "},{"type":"element","tagName":"a","properties":{"href":"https://zapier.com/apps/","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"5000+ tools and solutions"}]},{"type":"text","value":" in\nthe Zapier ecosystem."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The Flex Zapier integration makes it easier to take action in your\nfavorite business tools, such as\n"},{"type":"element","tagName":"a","properties":{"href":"https://zapier.com/apps/hubspot/integrations/","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Hubspot"}]},{"type":"text","value":",\n"},{"type":"element","tagName":"a","properties":{"href":"https://zapier.com/apps/mailchimp/integrations/","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"MailChimp"}]},{"type":"text","value":" and others,\nbased on your Flex marketplace activity. However, Zapier cannot\ncurrently perform operations within Flex. In other words, if you need to\ntake action in Flex based on activity in other solutions, you will need\nto use the Integration API directly."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"levels-of-integration","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#levels-of-integration","ariaLabel":"levels of integration permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Levels of integration"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The complexity of a Flex integration with a third party tool can range\nfrom very simple to highly complex. One aspect determining the\ncomplexity is how intertwined the two tools need to be. On the simple\nend, adding a script to the client application for a tracking tool is a\ntrivial change, and on the complex end a full third party payment\ngateway integration will likely take several weeks to implement."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The full complexity of the feature also depends on the different use\ncases you need to cover on each side of the integration. For instance,\nif you want to integrate your Flex marketplace with Shopify and\nsynchronize listing stock between the two platforms, you will need to\ncover several use cases on both sides, such as adding, updating and\nremoving listings, as well as handling purchases, returns and disputes."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"For illustration, here are some examples of types of integrations with\ndifferent levels of complexity:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Simple integrations:"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Calling third party APIs and SDKs from your client application"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"use cases: uploading files to external storage, adding a messaging\ntool"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Adding a third-party script to your client application"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"use cases: integrating analytics providers"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Adding a custom endpoint in your client app server that calls a third\nparty API and then updates information in Flex using the Marketplace\nAPI or the Integration API"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"use cases: enabling downloadable content in listings"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Listening to Flex events using Zapier and taking action in another\nZapier-connected application"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"use cases: sending a text message of a new booking to providers\nusing Twilio"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"More complex integrations"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Listening to Flex events using your own polling tool and taking action\nwithin Flex"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"use cases: partial or complete payment gateway integrations"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Synchronizing Flex and a parallel system to update each other when any\nchanges happen in either solution"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"use cases: calendar integration, Shopify"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"examples-of-specific-integrations","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#examples-of-specific-integrations","ariaLabel":"examples of specific integrations permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Examples of specific integrations"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"hotjar-analytics","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#hotjar-analytics","ariaLabel":"hotjar analytics permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Hotjar analytics"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"https://www.hotjar.com/","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Hotjar"}]},{"type":"text","value":" is an analytics tool for websites that\nallows you to collect user activity heatmaps, feedback, and user\nbehavior recordings, among other features."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Add a\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/ftw/how-to-set-up-analytics-for-ftw/#custom-analytics-libraries"},"children":[{"type":"text","value":"tracking script to the client application"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Add custom CSP directives to\n"},{"type":"element","tagName":"a","properties":{"href":"https://github.com/sharetribe/ftw-daily/blob/master/server/csp.js","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"/server/csp.js"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"mailchimp-email-list","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#mailchimp-email-list","ariaLabel":"mailchimp email list permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Mailchimp email list"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"https://mailchimp.com/","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Mailchimp"}]},{"type":"text","value":" is an email marketing and\nautomations tool that you can use to communicate directly with your\nmarketplace users. Since Mailchimp uses Zapier, integrating Flex and\nMailchimp is straightforward:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Use the\n"},{"type":"element","tagName":"a","properties":{"href":"https://zapier.com/shared/add-a-new-user-in-your-marketplace-to-a-mailchimp-audience/412d7744a23855ce00941567a619c7ffb7652335","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"sample Zapier template"}]},{"type":"text","value":"\nfor adding new users to your Mailchimp mailing lists."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"twilio-sms","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#twilio-sms","ariaLabel":"twilio sms permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Twilio SMS"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"https://www.twilio.com/","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Twilio"}]},{"type":"text","value":" is a communications platform that\noffers multiple channels of communicating with your marketplace users,\nincluding SMS and WhatsApp messages, calls and video. Twilio has a\nZapier integration, so you can use Zapier to trigger actions in Twilio\ntools with no coding."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Follow the\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/how-to/set-up-and-use-zapier/#how-to-build-a-text-message-integration-in-sharetribe-flex-using-twilio-and-zapier"},"children":[{"type":"text","value":"Flex video guide"}]},{"type":"text","value":"\nto send providers a SMS message whenever their listing gets booked."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"sendbird-user-to-user-chat-app","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#sendbird-user-to-user-chat-app","ariaLabel":"sendbird user to user chat app permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Sendbird user-to-user chat app"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In Flex, messages between users are always related to transactions. If\nyou want to allow more complex messaging flows between users, you can\nintegrate a user-to-user chat tool such as\n"},{"type":"element","tagName":"a","properties":{"href":"https://sendbird.com/","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Sendbird"}]},{"type":"text","value":". The initial integration is fairly\nstraightforward to implement, and the eventual complexity depends on the\nuse cases you want to cover."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Create an account in Sendbird."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Add the Sendbird\n"},{"type":"element","tagName":"a","properties":{"href":"https://sendbird.com/docs/uikit/v3/react/overview","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"UI kit"}]},{"type":"text","value":" and\n"},{"type":"element","tagName":"a","properties":{"href":"https://sendbird.com/docs/chat/v4/javascript/overview","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"SDK"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Implement and stylise a UI chat component."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Initialise a Sendbird user id for the user when they sign up to Flex,\nand save it in the user's private data so it can be used whenever they\nlog in."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"voucherify-discount-coupons","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#voucherify-discount-coupons","ariaLabel":"voucherify discount coupons permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Voucherify discount coupons"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"https://www.voucherify.io/","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Voucherify"}]},{"type":"text","value":" is a promotions tool that\nallows you to create, validate and redeem discount coupons, gift cards,\nautomatic discounts and other promotional offers. The initial\nintegration has a number of steps but is still fairly straightforward to\nimplement, and the eventual complexity depends on the use cases you want\nto cover."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Create an account in Voucherify and create your own codes or use the\nsample codes."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Add "},{"type":"element","tagName":"a","properties":{"href":"https://docs.voucherify.io/docs/sdks","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Voucherify SDK"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Create a helper file in the server that contains functions to validate\nand redeem a code using the Voucherify SDK."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Add an input element to the order panel for the discount code."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Pass the discount code to the line item calculation and to\nCheckoutPage (in a similar way to\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/tutorial/customize-pricing-tutorial/"},"children":[{"type":"text","value":"this pricing tutorial"}]},{"type":"text","value":")."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Validate the code in endpoints for "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"transaction-line-items"}]},{"type":"text","value":",\n"},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"initiate-privileged"}]},{"type":"text","value":" and "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"transition-privileged"}]},{"type":"text","value":", and pass the\nvalidation result to "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"server/api-util/lineItems.js"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Add a logic to "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"server/api-util/lineItems.js"}]},{"type":"text","value":" that adds a discount\nline item with the correct percentage or amount if the code is valid.\nYou will need to decide whether the discount line item is included\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"for both customer and provider, in which case the provider receives\na decreased payout,"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"or only for the customer, in which case the marketplace receives a\ndecreased commission – in this case, the discount cannot be greater\nthan the marketplace commission."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Only redeem the code once i.e. when actually initiating or\ntransitioning the transaction with Marketplace API."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"google-calendar-synchronised-with-flex-availability-calendar","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#google-calendar-synchronised-with-flex-availability-calendar","ariaLabel":"google calendar synchronised with flex availability calendar permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Google Calendar synchronised with Flex availability calendar"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you run a booking marketplace, you may want to allow providers to\nsynchronize their own\n"},{"type":"element","tagName":"a","properties":{"href":"https://developers.google.com/calendar","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Google Calendar"}]},{"type":"text","value":" to their\nlisting's Flex availability calendar. That way, providers do not need to\nadd availability exceptions manually to Flex, and they will be able to\nsee any bookings in their own calendar without needing to visit the\nmarketplace. Like all two-way integrations, this is a complex one, and\nyou will need to specify the use cases you want to cover to determine\nthe full complexity of the integration."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Google provides\n"},{"type":"element","tagName":"a","properties":{"href":"https://developers.google.com/calendar/api","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Calendar API"}]},{"type":"text","value":" to modify\ncalendar events."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"You can set up\n"},{"type":"element","tagName":"a","properties":{"href":"https://developers.google.com/calendar/api/guides/push","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"push notifications"}]},{"type":"text","value":"\nto track changes on the Google side."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Authenticate your Flex app to get information and make changes on\nbehalf of the user in Google Calendar."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Whenever a booking gets created or updated in Flex, update the\nprovider's Google Calendar accordingly. You can do this either by\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"creating custom endpoints in your client app server that call the\nFlex APIs as well as the Calendar APIs,"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"or you can listen to Flex events and call the Calendar APIs on\nrelevant events."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"You can\n"},{"type":"element","tagName":"a","properties":{"href":"https://developers.google.com/calendar/api/v3/reference/events/watch","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"watch the provider's Google Calendar"}]},{"type":"text","value":",\nand whenever a new event is created or an existing one is removed,\ncreate or remove an\n"},{"type":"element","tagName":"a","properties":{"href":"https://www.sharetribe.com/api-reference/integration.html#availability-exceptions","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"availability exception"}]},{"type":"text","value":"\nin Flex to prevent other customers from booking that specific time\nslot."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"payment-gateway-integration","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#payment-gateway-integration","ariaLabel":"payment gateway integration permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Payment gateway integration"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Integrating a third-party payment gateway, such as\n"},{"type":"element","tagName":"a","properties":{"href":"https://www.paypal.com/us/business/platforms-and-marketplaces","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Paypal Commerce Platform"}]},{"type":"text","value":"\nor "},{"type":"element","tagName":"a","properties":{"href":"https://stripe.com/en-gb/billing","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Stripe Billing"}]},{"type":"text","value":", is a complex and\nextensive integration. Even when you follow our high-level guide on\nintegrating a payment gateway, you will need to do a lot of your own\ninvestigating and testing, as well as collaborate closely with the\nsupport team of the payment gateway provider you have chosen."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Contact the support team of the payment gateway tool you intend to\nuse, and make sure you are eligible for their service. Some providers\nmay have limitations regarding platform size or geography."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Get familiar with our how-to article on\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/how-to/how-to-integrate-3rd-party-payment-gateway/"},"children":[{"type":"text","value":"integrating a third-party payment gateway to Flex"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"}]}],"data":{"quirksMode":false}},"headings":[{"value":"Flex integration tools","depth":2},{"value":"Client application","depth":3},{"value":"Integration API","depth":3},{"value":"Events","depth":3},{"value":"Zapier","depth":3},{"value":"Levels of integration","depth":2},{"value":"Examples of specific integrations","depth":2},{"value":"Hotjar analytics","depth":3},{"value":"Mailchimp email list","depth":3},{"value":"Twilio SMS","depth":3},{"value":"Sendbird user-to-user chat app","depth":3},{"value":"Voucherify discount coupons","depth":3},{"value":"Google Calendar synchronised with Flex availability calendar","depth":3},{"value":"Payment gateway integration","depth":3}]}},"pageContext":{"slug":"integrations-introduction","category":"concepts-integrations"}},
    "staticQueryHashes": ["3794076007","439097193","717698143"]}