{
    "componentChunkName": "component---src-templates-article-page-template-js",
    "path": "/concepts/transaction-process/",
    "result": {"data":{"markdownRemark":{"frontmatter":{"title":"Introduction to transaction processes","slug":"transaction-process","updated":"2022-04-06T00:00:00.000Z","category":"concepts-transaction-process","ingress":"This article introduces transaction processes as a concept, their parts, and how they define user interactions and order flows in your marketplace.","skills":null},"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Your marketplace exists to connect supply and demand. You have a unique\nvision of how this connection should happen. Flex makes this custom\nvision possible using its composable transaction process."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"users-interact-through-transactions","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#users-interact-through-transactions","ariaLabel":"users interact through transactions 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":"Users interact through transactions"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Any time users connect with each other on a Flex marketplace, they do it\nthrough a transaction. At its core, a Flex transaction is the\ninteraction between two users—the provider and the customer—from\nbeginning to end. A single transaction might include events such as\nmessages between users, the payment sent from the customer to the\nprovider, and the reviews users leave about their experience."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"You likely want users on your marketplace to transact a certain way. For\ninstance, you may want your providers to accept requests before\nconfirming bookings to ensure that there is no conflict. Or, you might\nprefer requests to confirm automatically because you want to prioritize\nspeed. Perhaps you’d like both options, depending on the nature of the\noffered service."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The guidelines for how you’d like users to transact are established in\nFlex using a transaction process. Your marketplace’s transaction process\ndetermines how your customers and providers move through their\ntransaction. You can have different transaction processes for different\nways of transacting, like renting and buying products, in the same\nmarketplace too."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"A transaction follows the trail established by your transaction process.\nThe transaction process maps the steps your users will complete and the\npossibilities they have upon reaching each step."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Your marketplace can have multiple different transaction processes in\nuse simultaneously. You can see the transaction processes of your\nmarketplace in\n"},{"type":"element","tagName":"a","properties":{"href":"https://flex-console.sharetribe.com/transaction-processes","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Flex Console"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Typically, all transaction processes are different. These differences\ncan be fundamental and change the logic of the order flow, or they can\nbe small and superficial."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"An example of a fundamental difference is choosing whether the users\nbook"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"by night or by day, as when booking a hotel room"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"by seat, as when booking tickets to an event"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"by hour, as when booking a hairdresser"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"or not at all, as when booking is handled outside the marketplace."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"A smaller variation could be, for example, deciding if the provider has\nto always accept the booking before it can be confirmed or if the\nbooking is automatically confirmed as soon as it is made (i.e. instant\nbooking). Another small variation could be a change of wording in a\nnotification email sent to remind the customer of their upcoming\nbooking."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"transaction-process-building-blocks","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#transaction-process-building-blocks","ariaLabel":"transaction process building blocks 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":"Transaction process building blocks"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Each transaction process guides how your users interact in your\nmarketplace. Each process is built with a few building blocks that\ndescribe what is going on. These building blocks are called "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"states"}]},{"type":"text","value":",\n"},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"transitions"}]},{"type":"text","value":", and "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"actions"}]},{"type":"text","value":". Let’s explore a transaction process\nmodeled on AirBnB to learn more about them."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-wrapper"],"style":"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 635px; "},"children":[{"type":"text","value":"\n      "},{"type":"element","tagName":"a","properties":{"className":["gatsby-resp-image-link"],"href":"/docs/legacy/static/fe6c9d128914cd003d70a0804de8f61f/5002e/complete-transaction-process.png","style":"display: block","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-background-image"],"style":"padding-bottom: 130.8176100628931%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAaCAYAAAC3g3x9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAD3klEQVRIx3WV6ZLbNhCE/f5vlr+p2Ov1oXhF8QRxX6Qo6UsAHV65bFahSBBEc6anp/HBhMz7oX16ei7DxQWf1qd35Vm5SC9Uvd/XPvy6+f2zDpllO3M6ncjLyvlywcaMDgkTF6Q2fP/8gphEnT8Bvh9yTiiZ0cYQveO4ncg5sy4ntE0oc/3xLD1fP7aMg7v+qADeo1Euoe5RGks3TEgxoq1jUoaubelfHd3fuo65CfTS8Nenz7yNAhveRRjySlqPxGXDOYcSA7NxqLASlo2YEs5onFiRXcTojPElm8SsHf7GcQUshJcrxsj5cuZ8PiLmidfdHikG1jURYsT5wHpcmY2nmWZ6qUnLSowJH0LluARXI8zrhg8JLzNOJMadoh81SlrsVMBijTzElf7FcPgk6b5q9BzxJfqyNy1XwAeHOjG8Wrp/DMNHh9YZKRLDd0fTTDTNnkkHjE11TetSnIj2uY47/0+yMT4hRUSOAe2KNBJxOZJSxjtbeS7cSRcqWOE+l/WS+nL8CfhezCbeRnkfE9vlTF4yLgTOpxOmT3StQnSe8/HCsi6klLhcLj9l8yTm+9wmRONRTUD3ASU90njaF3Xl8Ium2yt0iMS81m76rbAfgCYx7RzjN8fYOvrWMGrHpB3DbJikoxcGaSM2LlXHf+yUq8auLbacNpb1iLOR0+XC7AKjsQzGko9blUuIieW4/RnwEWVIte2200bKufIkig53kuagyOuRdV1r0bbTuQr9zym7hJwj1mdm7WlHiUtLnU+vjvGjQ44Rn9cnJ3qq8pM13XQpu4AYCl/6QXwxB6Vj/emvxXzW4U0yJdW60SaOp3NNq7ReSblEWe0r/Z6qq2xuRSgpKBnr3MYV6yNLzrUoISW24wlrF4zNqClVadUGeAf6SLm0ThGr6ALdXtL2gmb/xixVNdoil5Ly4Ydk/yb48TIieo+Use69tt6tl8uHqbTQtpFLN8gRpRTKL/WjSVkOo6xWf6djah3eLeRtq3tDPl6rXBar0r1HzxarHCFnDpOiFXONrBlmdoeBURZxW5pBMCpLLA5jLbY60VXgFbBYT2lwX7jrItYkdv/2fPvU0g6qghaAfjK8fZnY/ejpJkn0hpiXClzuVw79TS4uYdNSN+/3E81OMPeBWYaa7n6YK+A8JKbBIYaWWUhMiTLlyvPPKsfM3AWGzxZx8MxzQIwe0XqMS4RULD7XTIQY6dqGTmr6nWX65qqJlIo/DLYK2STkFFHqJptUTr/AErfaes55KMeoVtiQceUM0al6Z+moJ2E//DDdvTA9hF6Ai5GGvNQI9e10ezRCeuef/6f8H1jhxQf/FlabAAAAAElFTkSuQmCC'); background-size: cover; display: block;"},"children":[]},{"type":"text","value":"\n  "},{"type":"element","tagName":"picture","properties":{},"children":[{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/docs/legacy/static/fe6c9d128914cd003d70a0804de8f61f/82e29/complete-transaction-process.webp 159w","/docs/legacy/static/fe6c9d128914cd003d70a0804de8f61f/ef33f/complete-transaction-process.webp 318w","/docs/legacy/static/fe6c9d128914cd003d70a0804de8f61f/f1837/complete-transaction-process.webp 635w","/docs/legacy/static/fe6c9d128914cd003d70a0804de8f61f/5c1ba/complete-transaction-process.webp 832w"],"sizes":"(max-width: 635px) 100vw, 635px","type":"image/webp"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/docs/legacy/static/fe6c9d128914cd003d70a0804de8f61f/8b9b5/complete-transaction-process.png 159w","/docs/legacy/static/fe6c9d128914cd003d70a0804de8f61f/fa108/complete-transaction-process.png 318w","/docs/legacy/static/fe6c9d128914cd003d70a0804de8f61f/53fb6/complete-transaction-process.png 635w","/docs/legacy/static/fe6c9d128914cd003d70a0804de8f61f/5002e/complete-transaction-process.png 832w"],"sizes":"(max-width: 635px) 100vw, 635px","type":"image/png"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"img","properties":{"className":["gatsby-resp-image-image"],"src":"/docs/legacy/static/fe6c9d128914cd003d70a0804de8f61f/53fb6/complete-transaction-process.png","alt":"Default transaction process","title":"Default transaction process","loading":"lazy","decoding":"async","style":"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"},"children":[]},{"type":"text","value":"\n        "}]},{"type":"text","value":"\n  "}]},{"type":"text","value":"\n    "}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In the image above you can see the default transaction process in\nSharetribe Flex called \"flex-default-process\". It is the same process\nthat you will find, albeit with a different layout, within your Console\naccount's\n"},{"type":"element","tagName":"a","properties":{"href":"https://flex-console.sharetribe.com/transaction-processes","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"transaction process page"}]},{"type":"text","value":".\nIt closely mimics how a customer and a provider transact on AirBnB. From\na listing, customers can message a provider or book directly by entering\ntheir payment details and authorizing the charge on their card.\nProviders must then either accept the request, reject the request, or\nlet it expire."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"After an accepted booking is completed, the customer and provider have a\ncertain period of time to review each other. After this, the reviews are\npublished and the transaction is concluded."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The default process is built in to Flex Template for Web. Usually, the\neasiest way to start defining your own transaction process is by editing\nthe default process."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"states","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#states","ariaLabel":"states 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":"States"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The status at any given point in a transaction is called its state. The\nstate describes where the users are in their transaction."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The Flex default process, for example, has a state called preauthorized.\nIt signifies that a customer has requested to book a time from the\nprovider’s calendar, and a charge on their credit card has been\npreauthorized."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"From the "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"preauthorized"}]},{"type":"text","value":" state the provider can reject or accept the\nrequest, in which case the transaction will transition to the "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"declined"}]},{"type":"text","value":"\nor "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"accepted"}]},{"type":"text","value":" state respectively."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"transitions","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#transitions","ariaLabel":"transitions 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":"Transitions"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Transitions move the transaction from one state to another. They are the\nsteps between states."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"A transition is triggered by one type of user or “actor”: the customer,\nthe provider, the operator, or time (this is known as the “system” actor\nin Flex, or as an automatic transition). From the accepted state in the\ntransaction, the transaction will automatically transition to a\ndelivered state at a certain point in time. Or, the operator may cancel\nthe booking."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Transitions describe the possible next steps from a particular state.\nThey also describe who can complete the steps. If there are no possible\ntransitions from a state, the transaction has ended."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Technically, transitions can be considered the main building block of\nFlex transaction process. They define, implicitly or explicitly, all the\nother elements of a transaction process. We will not go to into more\ndetail in this article, but you can find more information\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/references/transaction-process-format/"},"children":[{"type":"text","value":"in the transaction process format reference documentation."}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"actions","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#actions","ariaLabel":"actions 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":"Actions"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Actions describe what happens as part of a transition. For example, the\ntransaction process allows users to transition from accepted state to\ndelivered or cancelled. The transaction may “complete” automatically, or\nthe operator may “cancel” it with the respective transitions. “Complete”\nactions involve creating a payout to the provider via Stripe (Flex’s\npayment gateway). “Cancel” actions, on the other hand, include\ncancelling the booking and issuing a refund."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Possible actions are defined by the capacity of the Flex API. The list\nof all transaction process actions can be found\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/references/transaction-process-actions/"},"children":[{"type":"text","value":"in the transaction process actions reference documentation"}]},{"type":"text","value":".\nCreating custom transaction process actions is not possible in Flex."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"notifications","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#notifications","ariaLabel":"notifications 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":"Notifications"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Notifications specify the content and behavior of emails sent during a\ntransaction.They determine which actor receives them; define what email\ntemplate is used; and schedule the specific sending time. Email\nnotifications are triggered by the completion of a transition. The email\ntemplates used for the notifications are also considered part of the\ntransaction process, and can be fully customised to fit the needs of the\nmarketplace."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In the Flex default process, transitioning from the accepted to the\ndelivered state triggers three email notifications. The provider\nreceives a notification that their money has been paid out and a\nnotification prompting them to review the customer. The customer\nreceives an email notification to review the provider."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"To review what notifications are sent as part of the Flex default\nprocess, visit your "},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/operator-guides/concepts/#console"},"children":[{"type":"text","value":"Flex Console"}]},{"type":"text","value":"\nBuild tab. Each included\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/references/email-templates/#editing-transaction-emails"},"children":[{"type":"text","value":"email notification has a template"}]},{"type":"text","value":"\nthat can be customized using the Flex CLI."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"transactionprocesscomponentscarousel","properties":{"title":"Transaction process components"},"children":[{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"how-users-interact-with-your-transaction-process","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#how-users-interact-with-your-transaction-process","ariaLabel":"how users interact with your transaction process 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":"How users interact with your transaction process?"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"You may be wondering what a graph has to do with your marketplace – a\nvery good question. The graph is simply a visualization of the\ntransaction process information (the states, the transitions, and the\nactions) stored in your marketplace database in Flex. The transaction\nprocess is, in reality, a short set of instructions written in a text\nfile."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"These instructions ultimately play out during transactions in your web\nor mobile marketplace app."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Whenever your users transact, at whichever state they are in that\ninteraction, the transaction process determines "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"what"}]},{"type":"text","value":" they can do\nnext and "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"how"}]},{"type":"text","value":" it happens."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Let’s revisit our Flex default transaction process, this time in\nconjunction with Flex Template for Web, to illustrate this. You’ll see\nhow a transaction process state looks for providers and customers in\nSaunatime, a Flex test marketplace. If you’re not sure what is meant by\nthe “Flex Template”, you can read more about it\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/operator-guides/concepts/#flex-templates-for-web-ftw"},"children":[{"type":"text","value":"here"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"txnprocessuxcarousel","properties":{"title":"Transaction process and user experience"},"children":[{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"what-kind-of-transaction-process-customizations-are-possible","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#what-kind-of-transaction-process-customizations-are-possible","ariaLabel":"what kind of transaction process customizations are possible 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":"What kind of transaction process customizations are possible?"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"As all marketplaces’ have their own characteristics, it is common to\nneed some customization to the default transaction process to make it\nmore suitable to the customers’ needs."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"However, quite often it's helpful to start building your process by\nmaking slight customizations to the default process. Typical minor\ncustomizations for transaction process are adding the possibility for a\ncustomer to cancel a booking or a booking request, changing the\nmarketplace commission percentage or editing the contents of the email\ntemplates used for the notifications."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-wrapper"],"style":"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 635px; "},"children":[{"type":"text","value":"\n      "},{"type":"element","tagName":"a","properties":{"className":["gatsby-resp-image-link"],"href":"/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/33fdf/tx-process-instabook-customer-cancel.png","style":"display: block","target":"_blank","rel":["noopener"]},"children":[{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["gatsby-resp-image-background-image"],"style":"padding-bottom: 140.25157232704404%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEM0lEQVRIx31W2Y7jRgz0//9cHoJN5vbautXq+5RkuRak7BnPZpEBiKHlZoksktU+mJDxaNqn3feJ/VhmlGVli3nmZ3ejc3XXoW6bW2zG4QskfTtMX5pYQH+FQOeZfZPybnFPoHo/4fz8vgOGG+B3SwzEB6YB3lmklBBjghkTpsZD1AFyijA+4+NtwNtTfwNMOHzPKkEOCWOrULct1CRgQkHTtmjaAf0Ph/7Zov/XQpw8tEtopUIj5CcFnKGNGT7NcGmGngT0uL/RxAUuLXBGwVkHo/ZSbSpcNmVEcbGsn/wfiOjr9YqYMi6XDcucMUqFn80AawzW9cLfpZxx2TZokzAqi2kKyHnFuq5Mx7Zt8KngEG6ANnis1wuWdUHX9PioWzinsW4rnA9sy7xifPFoK4Wxcshu4WZZ5zkZBuTSXIYm7l4dhifiyWFqA4Z3D3EMEJXHpDw6YdC+ajQvCs2LRnWUGJRFyMtnDw7Eg1IRmjpYB4wnD9knqCFh+PCQ9KyxEMJhsh6DseiVuf23UC7C5xk2lh2Q0tyuV+Zow4ZymSGkRDMIWG/4WS4zUi5MDTVm0oE5jH5hXpmOdUUqyw54xRUxpz04FgzdiFPTwSjJZNPLYiLir5BjRP0i0R0NvCm4XDfmcFkW5HnBgWaJuBNPHuOzQ/OXwdREuDJDh8Lc9p3BpDWcnqBjgXjzzLVoI6waEWKGu5dMcyXOHv2TxfDq0P9juQk8Z24f1udjjddjBd2feUbf3xvUxxama6GGGtrFr8FmJ972M2dom6B04qGl1SJR8DEjpIK8XDho1A7SBY7TjysbHsThUUH4BVQGNWzb0I8CXT+yb39Xpoe4veQHwEd/6gO0SgihQBna28Dy9afzj+Jy+B3o7pMIEJdqTDieB5w78Q3g87zP/w/4pYW7aMzrBanMPBLzsv7h7Pf4w7e04104E5Nt4y6q3gf4ENi38Utc7+cfy/7s8tQFHh8STmVoZDyPCCkNNcKnjBBnFlgpaEUdpIi8tv8pmfeZxkUliMHg/PETVduhalre0V5aTGYfk7qZcK4E3n+0EL2HMt/L59Ur8742mfiKHs5q+LyyTcbj3I2o+gnSBPiysNFOe1tQ1hW57PG0LayHjsozFkobxJzRSYP3ukU9TixPVS/QDBK9NKiFxEfdoRGKh11rw7HGWv58IFRCT2T0dlkwjAZvfzeof0p0o2EgYT2aWqF6mXD8GNCPEsFIzi7dMqSGMYfqxiOtX99bVB8T2lqxRJGo1qPirNtBQ4wBXafRVieMw8A3pA57/Kc4ULfoJpuqwEQP0qI9KYydg0sZji6j2ypO04ChrTBah/7kMNzUnWSNxGSfQ5sg+wA5BGidYEPh7so+AhsQY0QI5G8wUvB3dPPRatKKUkLa3K+A+1DefxE8rhVfr8TxykY+a+SjkDz8iqA5/AW+JFzem8GcggAAAABJRU5ErkJggg=='); background-size: cover; display: block;"},"children":[]},{"type":"text","value":"\n  "},{"type":"element","tagName":"picture","properties":{},"children":[{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/82e29/tx-process-instabook-customer-cancel.webp 159w","/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/ef33f/tx-process-instabook-customer-cancel.webp 318w","/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/f1837/tx-process-instabook-customer-cancel.webp 635w","/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/29549/tx-process-instabook-customer-cancel.webp 953w","/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/c5420/tx-process-instabook-customer-cancel.webp 1270w","/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/e706f/tx-process-instabook-customer-cancel.webp 1900w"],"sizes":"(max-width: 635px) 100vw, 635px","type":"image/webp"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"source","properties":{"srcSet":["/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/8b9b5/tx-process-instabook-customer-cancel.png 159w","/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/fa108/tx-process-instabook-customer-cancel.png 318w","/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/53fb6/tx-process-instabook-customer-cancel.png 635w","/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/5a426/tx-process-instabook-customer-cancel.png 953w","/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/91155/tx-process-instabook-customer-cancel.png 1270w","/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/33fdf/tx-process-instabook-customer-cancel.png 1900w"],"sizes":"(max-width: 635px) 100vw, 635px","type":"image/png"},"children":[]},{"type":"text","value":"\n          "},{"type":"element","tagName":"img","properties":{"className":["gatsby-resp-image-image"],"src":"/docs/legacy/static/6333ffa3991f249cd8fe4663921f995c/53fb6/tx-process-instabook-customer-cancel.png","alt":"An example transaction process with instant booking and customer cancellation","title":"An example transaction process with instant booking and customer cancellation","loading":"lazy","decoding":"async","style":"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"},"children":[]},{"type":"text","value":"\n        "}]},{"type":"text","value":"\n  "}]},{"type":"text","value":"\n    "}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Another common example is to modify the process so that the provider has\nto manually mark the booking as completed and the rented goods as\nreturned in good condition. This might be useful in rental marketplaces\nwhere the goods that are rented are of high value. In another case, the\nprocess could be modified so that the operator can close down the\ntransaction process in case that there is trouble in the order flow.\nThis could be done for example in cases where a customer has booked a\ntime from a professional, but doesn’t appear in the meeting."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Apart from the order flow, customizations can also affect the money\nflow, storing\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/references/extended-data/#protected-data"},"children":[{"type":"text","value":"protected data"}]},{"type":"text","value":" or sending\nnotifications."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"start-creating-your-own-transaction-process","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#start-creating-your-own-transaction-process","ariaLabel":"start creating your own transaction process 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":"Start creating your own transaction process"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The transaction process determines how your users transact on your\nmarketplace. It maps where your users are in a transaction, what\npossible next steps they have, and how those steps are taken. The\ntransaction process plays out in your marketplace application where your\nusers transact."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Now that you understand more about how the transaction process works,\nit’s time to create your own. Flex provides a few default processes, but\nyou’ll likely want to modify these to capture the unique way your users\nwill transact."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you’re a developer building with Flex, you can build your transaction\nprocess using the Flex CLI. Here are guides for\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/tutorial/create-transaction-process/"},"children":[{"type":"text","value":"creating your own transaction process"}]},{"type":"text","value":"\nand for\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/introduction/getting-started-with-flex-cli/"},"children":[{"type":"text","value":"getting started with Flex CLI"}]},{"type":"text","value":".\nFor more details of the transaction process format, see the\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/references/transaction-process-format/"},"children":[{"type":"text","value":"Transaction process format"}]},{"type":"text","value":"\nreference. To customise the UI of your marketplace to match your process\nchanges, see the\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/how-to/change-transaction-process-in-ftw/"},"children":[{"type":"text","value":"Change transaction process setup in FTW"}]},{"type":"text","value":"\nhow-to guide."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you’re working with a developer, then you need to communicate how you\nwould like transactions to work so your developer can implement the\nnecessary steps, transitions, and actions to build your transaction\nprocess.\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/concepts/change-transaction-process/"},"children":[{"type":"text","value":"Our guide for changing your transaction process"}]},{"type":"text","value":"\nshares a few principles to keep in mind when making changes as a\nnon-developer."}]}],"data":{"quirksMode":false}},"headings":[{"value":"Users interact through transactions","depth":2},{"value":"Transaction process building blocks","depth":2},{"value":"States","depth":3},{"value":"Transitions","depth":3},{"value":"Actions","depth":3},{"value":"Notifications","depth":3},{"value":"How users interact with your transaction process?","depth":2},{"value":"What kind of transaction process customizations are possible?","depth":2},{"value":"Start creating your own transaction process","depth":2}]}},"pageContext":{"slug":"transaction-process","category":"concepts-transaction-process"}},
    "staticQueryHashes": ["3794076007","439097193","717698143"]}