> ## Documentation Index
> Fetch the complete documentation index at: https://botpress-charmenta-pr-655.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Loops

> Add a bot to Loops using the official integration.

export const OpenInHub = ({integration}) => {
  const {version, id} = integration || ({});
  const basePath = 'https://studio.botpress.cloud/home?exploreHub=1&hubItemId=';
  const url = `${basePath}${id}`;
  return <>
            <a className="button rounded-xl" href={url}>
                <span>
                Open in Hub
                </span>
            </a>
            <i style={{
    margin: "0",
    fontStyle: "normal",
    color: "#666",
    fontSize: "0.85rem",
    padding: '.5rem'
  }}>
                v{version}
            </i>
        </>;
};

export const integrationVersions = {
  "accelo": {
    "version": "2.0.0",
    "id": "intver_01JFAQHPVKP4XTKMNXC2RZKZ88"
  },
  "activecampaign": {
    "version": "2.0.0",
    "id": "intver_01JFAQHVA0Z25PFC7H13EQ41FR"
  },
  "acumatica": {
    "version": "2.0.0",
    "id": "intver_01JFAQHZTNGNHPPS9CKD35Q6EY"
  },
  "airtable": {
    "version": "3.0.0",
    "id": "intver_01KQYW202230PVRW9RVA68VRYR"
  },
  "alchemer": {
    "version": "2.0.0",
    "id": "intver_01JFAQQZRS9ZQ7WBWHCF1MKGCM"
  },
  "anthropic": {
    "version": "18.0.1",
    "id": "intver_01KQYW62BM57D669VPPSAKXGHG"
  },
  "anydesk": {
    "version": "2.0.0",
    "id": "intver_01JFAQR4048H4976FCKT2YHD2X"
  },
  "apollo": {
    "version": "3.0.2",
    "id": "intver_01K6BJFKR5WZV44VNENAN6XBT1"
  },
  "asana": {
    "version": "0.3.13",
    "id": "intver_01KMZACD2E15B0RZB8RJ2XN2JX"
  },
  "attio": {
    "version": "1.0.3",
    "id": "intver_01KMZACN5Z3VJK0W280ED7G4Y0"
  },
  "avoma": {
    "version": "2.0.0",
    "id": "intver_01JFAQRC955G4CXN8QTFHXAPXZ"
  },
  "bamboohr": {
    "version": "2.1.2",
    "id": "intver_01KMZACXWM0GDNQF5PS3QBPQDN"
  },
  "beehiiv": {
    "version": "2.0.0",
    "id": "intver_01JFAQRGRRB95YC5YKWB1BFHZH"
  },
  "bigcommerce": {
    "version": "3.2.4",
    "id": "intver_01KMZAD5GM0P6BGFJHKE2QDDR8"
  },
  "bigin": {
    "version": "2.0.0",
    "id": "intver_01JFAQRS4Q0AY8CEAGYTDMPEPV"
  },
  "bolt": {
    "version": "2.0.0",
    "id": "intver_01JFAQRXGEVSFY1PYM195NAWQ6"
  },
  "box": {
    "version": "2.0.0",
    "id": "intver_01JFAQS1NBSGECDYX5MTTFN7RK"
  },
  "braze": {
    "version": "2.0.0",
    "id": "intver_01JFAQS5V6T5HF7MRJ46NMP42B"
  },
  "brevo": {
    "version": "2.0.0",
    "id": "intver_01JFAQSA1R5F1JGJZS55VTC1RP"
  },
  "britive": {
    "version": "2.0.0",
    "id": "intver_01JFAQSE7EMRGQE8EQD2CB6AZR"
  },
  "browser": {
    "version": "0.8.8",
    "id": "intver_01KPBEHKBJD4MZ0ZDWEBMHX74D"
  },
  "bynder": {
    "version": "2.0.0",
    "id": "intver_01JFAQSJT5N0Q2J2K7KGG12QQ5"
  },
  "calcom": {
    "version": "0.4.2",
    "id": "intver_01KMZADKWGWXARSDEH5VES64JY"
  },
  "calendly": {
    "version": "0.0.5",
    "id": "intver_01KMZADVPKFVFATR33S36R2NQ8"
  },
  "canny": {
    "version": "0.2.3",
    "id": "intver_01KMZAE3W37N658H69Y6ZPSREQ"
  },
  "capsule-crm": {
    "version": "2.0.0",
    "id": "intver_01JFAQSQ6CJJ6G9FK7PAACKE6X"
  },
  "cerebras": {
    "version": "9.0.0",
    "id": "intver_01KNRZZPBTBA0FAHVDVGAJNBJ1"
  },
  "charts": {
    "version": "0.2.8",
    "id": "intver_01KMZAEJVYBMNRMP01816TVEBH"
  },
  "chat": {
    "version": "1.0.0",
    "id": "intver_01KNSDHSSEHCX633DGB62V2ZB8"
  },
  "checkout": {
    "version": "2.0.0",
    "id": "intver_01JFAQSVA80GG51V7QKTARFG0E"
  },
  "clari": {
    "version": "2.0.0",
    "id": "intver_01JFAQSZVXNWXV8371M8ACEPFV"
  },
  "clay": {
    "version": "2.0.0",
    "id": "intver_01JFAQT424E25GR5K1Q8PZC4SC"
  },
  "clickup": {
    "version": "0.0.3",
    "id": "intver_01KMZAF5TCYZNN80SFM4MCASB5"
  },
  "close": {
    "version": "2.0.0",
    "id": "intver_01JFAQT8BMZG66DNJM1DBZ2EQ3"
  },
  "cognism": {
    "version": "2.0.0",
    "id": "intver_01JFAQTCC9XR5N28RA4SNZ8KYJ"
  },
  "comeet": {
    "version": "2.0.0",
    "id": "intver_01JFAQTGMDYR086FC0VEQ95VGC"
  },
  "confluence": {
    "version": "3.3.4",
    "id": "intver_01KMZAFH0Z4679X7P0SSY18DPV"
  },
  "copper": {
    "version": "2.0.0",
    "id": "intver_01JFAQTS5YQTVNMSRMTH12X4YC"
  },
  "creatio": {
    "version": "2.0.0",
    "id": "intver_01JFAQTXY9Z4S1XDWSBT4J4KJJ"
  },
  "crmone": {
    "version": "2.0.0",
    "id": "intver_01JFAQV28DCXF7SV71N9Q5BJC8"
  },
  "dalle": {
    "version": "0.3.8",
    "id": "intver_01KMZAFVDB02KE332TQ930T76J"
  },
  "databricks": {
    "version": "0.0.4",
    "id": "intver_01JBMK24H270H1ZTH2E8P34V4J"
  },
  "demandbase": {
    "version": "2.0.0",
    "id": "intver_01JFAQV9ZZ9MHH2ENEQ1ERMY2G"
  },
  "desk": {
    "version": "1.0.0",
    "id": "intver_01KGQ972H97YAN3D3KY9425JYN"
  },
  "discord": {
    "version": "1.2.1",
    "id": "intver_01KREWJHF8AZMBHH3JC5XFSFTB"
  },
  "docusign": {
    "version": "2.0.0",
    "id": "intver_01JFAQVKFW4F7BBRSDD7EEZE6Z"
  },
  "dropbox": {
    "version": "2.0.1",
    "id": "intver_01KMZAG63Y41V6CJGWD858VKQN"
  },
  "email": {
    "version": "0.1.4",
    "id": "intver_01KMZAGF70MCA75BCVVY3DGHXD"
  },
  "enchant": {
    "version": "2.0.0",
    "id": "intver_01JFAQVQQ60DZV01V3D1GA29YG"
  },
  "engagebay": {
    "version": "2.0.0",
    "id": "intver_01JFAQVVW42J4KNWCEZ6VQ3ZSJ"
  },
  "fathom": {
    "version": "2.0.0",
    "id": "intver_01JFAQW0QPEJS7M4EPVN9GJJDK"
  },
  "feature-base": {
    "version": "1.0.3",
    "id": "intver_01KMZAGPXHR49811P7S89CWN35"
  },
  "fireworks-ai": {
    "version": "11.0.0",
    "id": "intver_01KNS0091R8GPT9C088F3F3PE0"
  },
  "fivetran": {
    "version": "2.0.0",
    "id": "intver_01JFAQW55482FWTDSPCYT53DWE"
  },
  "flodesk": {
    "version": "2.0.0",
    "id": "intver_01JFAQW9APE7Z8E81T2F58VDM7"
  },
  "folk": {
    "version": "2.0.0",
    "id": "intver_01JFAQWDVG2DVFYKJRD8DMHVPZ"
  },
  "freshchat": {
    "version": "1.5.5",
    "id": "intver_01KMZAH6YY639ZNJTGDMTH25GT"
  },
  "freshsales": {
    "version": "2.0.0",
    "id": "intver_01JFAQWJ3CC3DJ5KG0W6XP33FD"
  },
  "fullstory": {
    "version": "2.0.0",
    "id": "intver_01JFAQWPM0T9EH5SAGDQ3Z14ZC"
  },
  "gainsight": {
    "version": "2.0.0",
    "id": "intver_01JFAQWTPKB13Y7619A6GEN5HQ"
  },
  "getaccept": {
    "version": "2.0.0",
    "id": "intver_01JFAQWZ0SAMDJVQNNA86RG21M"
  },
  "getresponse": {
    "version": "2.0.0",
    "id": "intver_01JFAQX34P2PBW0EM9NC6ZGFT5"
  },
  "github": {
    "version": "1.2.1",
    "id": "intver_01KMZAHF5WMDMTT9H6V3DQ8T50"
  },
  "gladly": {
    "version": "2.0.0",
    "id": "intver_01JFAQX7B29WE85VA8N5BCST16"
  },
  "gmail": {
    "version": "1.0.7",
    "id": "intver_01KMZAHQQ8YSB2DRVR1B6YXNCN"
  },
  "google-ai": {
    "version": "8.0.0",
    "id": "intver_01KNS00R1R8P4N2J4SVN6HHX4P"
  },
  "google-analytics": {
    "version": "1.0.0",
    "id": "intver_01KPRHR42CF02FMDDGSF0TG0DB"
  },
  "googlecalendar": {
    "version": "2.0.9",
    "id": "intver_01KMZAJAKBEZKGH0ZPQJBR1VAE"
  },
  "googledrive": {
    "version": "0.4.2",
    "id": "intver_01KMZAJJE94ZYG631DQM93B9RN"
  },
  "groq": {
    "version": "16.0.0",
    "id": "intver_01KNS015P14BRMA1C0CJG239M4"
  },
  "gsheets": {
    "version": "2.1.9",
    "id": "intver_01KP5Z7BRNQNGVY406742M7BBE"
  },
  "gusto": {
    "version": "2.0.0",
    "id": "intver_01JFAR75Y17N5EWS6P0PC93RHQ"
  },
  "happyfox": {
    "version": "2.0.0",
    "id": "intver_01JFAQXFNYWCXX819GTBHJ470W"
  },
  "help-scout": {
    "version": "2.0.0",
    "id": "intver_01JFAQXKX61YWJMMHYK3YDFZ0K"
  },
  "hitl": {
    "version": "2.0.2",
    "id": "intver_01K0SV5HZAT9FSVVEB7S91SH4F"
  },
  "honeybook": {
    "version": "2.0.0",
    "id": "intver_01JFAQXRQ8TADY78EBPBKSXFPC"
  },
  "hubspot": {
    "version": "6.0.5",
    "id": "intver_01KRPJKZ1ER9XBZQC5QTXBRGND"
  },
  "hunter": {
    "version": "1.0.2",
    "id": "intver_01KMZAKV7RM16T6375G0JXDYHH"
  },
  "instagram": {
    "version": "4.1.9",
    "id": "intver_01KRC18D2WGRKT0G2SRZQ5VE3Z"
  },
  "instantly": {
    "version": "2.0.0",
    "id": "intver_01JFAQXWNN3ZM0DAQBE7N2BP54"
  },
  "intercom": {
    "version": "2.0.4",
    "id": "intver_01KMZAMCN5KTKK60239ADVZGCP"
  },
  "keap": {
    "version": "2.0.0",
    "id": "intver_01JFAQY1A6AQGSZRPKRJ11649R"
  },
  "kit": {
    "version": "2.0.0",
    "id": "intver_01JFAQYAZCH51RNSK7XT8ZKFZC"
  },
  "klaviyo": {
    "version": "3.0.2",
    "id": "intver_01K6BFXSKB0G4KMVGJPTR1X835"
  },
  "knack": {
    "version": "2.0.0",
    "id": "intver_01JFAQYKKW7JQJYH5GQW95AXFJ"
  },
  "kommo": {
    "version": "0.1.0",
    "id": "intver_01KN89QSX1YDM04NFRHK0WKZMG"
  },
  "kustomer": {
    "version": "2.0.0",
    "id": "intver_01JFAQYR6A4M0527JHDSNXN4TY"
  },
  "kylas": {
    "version": "2.0.0",
    "id": "intver_01JFAQYWG9PSP9076S99BE546R"
  },
  "leadsquared": {
    "version": "2.0.0",
    "id": "intver_01JFAQZ0PFZ7W5AJN0MZQJHGW7"
  },
  "leandata": {
    "version": "2.0.0",
    "id": "intver_01JFAQZ54J1MYP5D4WXZ1Z7KK7"
  },
  "less-annoying-crm": {
    "version": "2.0.0",
    "id": "intver_01JFAQZ99G8ZWD4847189A4EGS"
  },
  "line": {
    "version": "2.0.6",
    "id": "intver_01KMZAMNQDY2BZAW86RZ58VSQY"
  },
  "linear": {
    "version": "2.5.0",
    "id": "intver_01KRHWEFJX783DXZG4XZ7B6ER8"
  },
  "linkedin": {
    "version": "0.1.3",
    "id": "intver_01KN89RB1CBCP1MGAYEBHMCT5Q"
  },
  "localiq": {
    "version": "2.0.0",
    "id": "intver_01JFAQZDKZQV3J44CJF074YHXZ"
  },
  "loops": {
    "version": "0.1.5",
    "id": "intver_01KMZANASVEZEW761JG63F1RM0"
  },
  "mailchimp": {
    "version": "0.3.12",
    "id": "intver_01KMZANJGYPESPJHZJ7NPEE7C6"
  },
  "mailerlite": {
    "version": "3.0.2",
    "id": "intver_01K6BFZTMA8A1Z3KV1QXGWB61S"
  },
  "make": {
    "version": "0.3.9",
    "id": "intver_01KMZANTJE8DN94EE6K74ETJ0Z"
  },
  "mcp-client": {
    "version": "0.1.0",
    "id": "intver_01KQWWKVJFV3DD65PR233GRHMH"
  },
  "messenger": {
    "version": "5.1.8",
    "id": "intver_01KPDRM4RJN85JM6DRP43W48PX"
  },
  "mindtickle": {
    "version": "2.0.0",
    "id": "intver_01JFAQZNRAZMBAEZ943WY44EXD"
  },
  "mintlify": {
    "version": "1.0.1",
    "id": "intver_01KMZAPEVTD6HZ9BPRHVK09DC5"
  },
  "mistral-ai": {
    "version": "1.0.0",
    "id": "intver_01KNS021C2ZFXWGAXC5TFAXBA9"
  },
  "monday": {
    "version": "1.0.2",
    "id": "intver_01KMZAQ1357YEQBMVPHQ8QYSAF"
  },
  "mural": {
    "version": "2.0.0",
    "id": "intver_01JFAQZT1R0PR8C59Z1MHWMG83"
  },
  "notion": {
    "version": "3.0.5",
    "id": "intver_01KN89RW8Z2ZK98F8JM8X66RXS"
  },
  "nutshell": {
    "version": "2.0.0",
    "id": "intver_01JFAQZYAY7HCM2VTWTZK0GHZ6"
  },
  "odoo": {
    "version": "0.1.0",
    "id": "intver_01KRC19AE1XTHSSW6D0FZPJZ1H"
  },
  "okta": {
    "version": "2.0.0",
    "id": "intver_01JFAR02JMED7RK95YXCDRVNXX"
  },
  "openai": {
    "version": "20.0.0",
    "id": "intver_01KNS02E7FF0WQAYXWJDM3ZZNQ"
  },
  "outreach": {
    "version": "2.0.0",
    "id": "intver_01JFAR0717CX7YJNEX0FXRR8TN"
  },
  "pandadoc": {
    "version": "2.0.0",
    "id": "intver_01JFAR0BBGR1EGMRR2PRGHRABB"
  },
  "pdf-generator": {
    "version": "0.0.7",
    "id": "intver_01KMZAQP6WG231KVJSEY88KG2J"
  },
  "pimcore": {
    "version": "2.0.0",
    "id": "intver_01JFAR0FRDMZNK1B1EYKTHKANP"
  },
  "pipedrive": {
    "version": "5.0.1",
    "id": "intver_01K6BG0EMJ1FQ0E5DCZZEN9301"
  },
  "pipeliner": {
    "version": "2.0.0",
    "id": "intver_01JFAR0R7XHB7VYX0Q0ETV9B3F"
  },
  "plaid": {
    "version": "2.0.0",
    "id": "intver_01JFAR0WH09T4MRTTQHRAH2ESD"
  },
  "planhat": {
    "version": "2.0.0",
    "id": "intver_01JFAR10SHDPEPXTJN6RRB9H6S"
  },
  "plus/apify": {
    "version": "1.0.4",
    "id": "intver_01KH6R8P2ZYNACH8KQED02E9YC"
  },
  "plus/brevo-hitl": {
    "version": "2.0.0",
    "id": "intver_01K392AS04342HT6Z2HZZ60A2D"
  },
  "plus/chatwoot": {
    "version": "1.0.4",
    "id": "intver_01KD3BFCBTV2PNJ80V3VYFBC4M"
  },
  "plus/email-notifier": {
    "version": "1.1.1",
    "id": "intver_01KB0YDR2AQ5A8H0GBZ35J51MQ"
  },
  "plus/go-high-level": {
    "version": "1.0.4",
    "id": "intver_01K6BDMWTZ7FNKTGD4N8YDPH1H"
  },
  "plus/google-analytics": {
    "version": "0.2.4",
    "id": "intver_01HXS7S3FCANEG2EN5FKKWH722"
  },
  "plus/google-chat-spaces": {
    "version": "1.0.3",
    "id": "intver_01K6BDNG0ZNW5JXRA5RDQJQCWN"
  },
  "plus/google-sheets": {
    "version": "1.2.5",
    "id": "intver_01K6BDP63K6Y5HFVJ84R7EKP0Y"
  },
  "plus/hitl-api": {
    "version": "0.2.0",
    "id": "intver_01J804C5W78Y5FWHHNVWMR5VM3"
  },
  "plus/hubspot-help-desk-hitl": {
    "version": "3.1.1",
    "id": "intver_01KC2AWT9BDMTHV36AJRVEF4DN"
  },
  "plus/hubspot-hitl": {
    "version": "5.0.4",
    "id": "intver_01K6BF9Q6D3M6T3J3V541ZJC8Z"
  },
  "plus/huggingface": {
    "version": "0.0.1",
    "id": "intver_01J6FP62B7KEHH4NC4R7NBBTW5"
  },
  "plus/intercom-hitl": {
    "version": "2.0.5",
    "id": "intver_01KEWH6D0NF81Q1WB8W8V225A8"
  },
  "plus/jira": {
    "version": "0.2.4",
    "id": "intver_01KCVM0T96KA8YK723W3N8P494"
  },
  "plus/livechat-hitl": {
    "version": "3.0.2",
    "id": "intver_01K6BFYE44DVXKVFXBHKZED8P9"
  },
  "plus/magento2": {
    "version": "2.0.4",
    "id": "intver_01K6BKG43JX1R6ZEB4CXJ6R65D"
  },
  "plus/messaging": {
    "version": "0.2.3",
    "id": "intver_01HVM0R2R0QXWNH3BEZPYFK6ZJ"
  },
  "plus/mixpanel": {
    "version": "0.2.3",
    "id": "intver_01HXABTRSS5J9K0G1S1MPCX8J9"
  },
  "plus/persat": {
    "version": "1.0.0",
    "id": "intver_01K75D7C0JTQ5FY058T1187G32"
  },
  "plus/salesforce": {
    "version": "1.0.2",
    "id": "intver_01JRTXEF3N4CG8D668ANNW40DS"
  },
  "plus/segment": {
    "version": "0.2.4",
    "id": "intver_01HX7R8GHK3BKX2RHER1KYV0VT"
  },
  "plus/sharepoint": {
    "version": "4.1.0",
    "id": "intver_01K8XWKTBHY5AX8JTBV4T0D4V6"
  },
  "plus/sharepoint-excel": {
    "version": "2.2.1",
    "id": "intver_01K6BKHB4TQ5RFVA6W1VKAREFB"
  },
  "plus/shopify-products-sync": {
    "version": "3.0.2",
    "id": "intver_01K8VDHZ8FM3ZDMTYA8Y7EDXTT"
  },
  "plus/twiliovoice": {
    "version": "0.2.3",
    "id": "intver_01K6BKKDTZ1X8ECNS52N96M8AM"
  },
  "plus/zoho": {
    "version": "3.0.0",
    "id": "intver_01JNRREVZ0BA8VKEKMPMRF0DW5"
  },
  "plus/zohosalesiq": {
    "version": "2.0.0",
    "id": "intver_01JP37YJSERZGZQQW369F7W27C"
  },
  "plus/zoho-sales-iq-hitl": {
    "version": "3.0.0",
    "id": "intver_01K397TXPTA9982A829WV7XNX5"
  },
  "plus/zoom": {
    "version": "3.1.1",
    "id": "intver_01KAEBBGJ327TGZ0AZW31H6S19"
  },
  "posthog": {
    "version": "2.0.0",
    "id": "intver_01JFAR153DTQEGNZXMA4PAAV7D"
  },
  "postman": {
    "version": "2.0.0",
    "id": "intver_01JFAR19F7PZWCD9CBKAB30540"
  },
  "postmark": {
    "version": "0.1.0",
    "id": "intver_01KQ01G3YEPEXVNP2SFH49079G"
  },
  "quickbooks": {
    "version": "2.0.0",
    "id": "intver_01JFAR1E05TRXX8ZHQ52QMG2KJ"
  },
  "reachdesk": {
    "version": "2.0.0",
    "id": "intver_01JFAR1JD70W5VTGDEDGFQXKEB"
  },
  "resend": {
    "version": "0.1.10",
    "id": "intver_01KMZAQXVC4KP20TFCJNGY8PKV"
  },
  "revenuehero": {
    "version": "2.0.0",
    "id": "intver_01JFAR1PDG5ZQHDAT4PX3J67N5"
  },
  "rippling": {
    "version": "0.0.4",
    "id": "intver_01JBMK2M3NWMH63ZTQBSQSEXHB"
  },
  "sage": {
    "version": "2.0.0",
    "id": "intver_01JFAR8RTCW2P6C8VWSMN7FQFS"
  },
  "salesflare": {
    "version": "2.0.0",
    "id": "intver_01JFAR2316BGX6S5NS812P3K1Z"
  },
  "salesforce": {
    "version": "1.0.0",
    "id": "intver_01KN5FRKT6KRAB6RM9T34J70M2"
  },
  "salesloft": {
    "version": "2.0.0",
    "id": "intver_01JFAR27CFAGF2479ER2FSSDF7"
  },
  "sap": {
    "version": "2.0.0",
    "id": "intver_01JFAR2BP4TDJTAGWN841KBC1S"
  },
  "seismic": {
    "version": "2.0.0",
    "id": "intver_01JFAR2G7J0GAC6J69K8TN3429"
  },
  "sendgrid": {
    "version": "0.1.10",
    "id": "intver_01KMZAR5KN275G2NPSSFZ9WTSE"
  },
  "showpad": {
    "version": "2.0.0",
    "id": "intver_01JFAR2MD45546TPY7V2CPBAMD"
  },
  "sisense": {
    "version": "2.0.0",
    "id": "intver_01JFAR2RSBXRYQ5YX9JNTP4A9C"
  },
  "slack": {
    "version": "5.0.2",
    "id": "intver_01KQF3XKNH2W5EPAXK6G4CMW96"
  },
  "smartsheet": {
    "version": "2.0.0",
    "id": "intver_01JFAR2WXTE6FV2C2HP7V0WBTE"
  },
  "splunk": {
    "version": "0.0.4",
    "id": "intver_01JBMK2Y874WV5BGHXYN07HKHE"
  },
  "square": {
    "version": "2.0.0",
    "id": "intver_01JFARACGK6NT3YTKC5KVXVKX6"
  },
  "stripe": {
    "version": "0.5.6",
    "id": "intver_01KMZARNC46Y0CJTQNR5AA8AKD"
  },
  "sunco": {
    "version": "2.0.1",
    "id": "intver_01KMZARX5E90SJEDCQ6GKZ4ZBV"
  },
  "surveymonkey": {
    "version": "2.0.0",
    "id": "intver_01JFAR3A2K8BEMP4XHQ7F5R47R"
  },
  "tableau": {
    "version": "2.0.0",
    "id": "intver_01JFAR3E9K4XXVYFE7SSGT1C9E"
  },
  "tally": {
    "version": "0.1.2",
    "id": "intver_01KMZAS4KR8F34JNE9VP1HJXT9"
  },
  "teamleader": {
    "version": "2.0.0",
    "id": "intver_01JFAR3JKE5HAGV6TBCW7SV4QM"
  },
  "teams": {
    "version": "2.0.4",
    "id": "intver_01KMZASBVV28FFKB2227618RRM"
  },
  "teamviewer": {
    "version": "2.0.0",
    "id": "intver_01JFAR3PY3EBMYYBKQTZAHESXP"
  },
  "telegram": {
    "version": "1.0.7",
    "id": "intver_01KQYYDZKSAHXH5DRK1ES6CKNS"
  },
  "thryv": {
    "version": "2.0.0",
    "id": "intver_01JFAR3VQXXNJTR85472MM0RDY"
  },
  "todoist": {
    "version": "1.0.5",
    "id": "intver_01KMZASWGQHERWV5WESYJR1W1R"
  },
  "trello": {
    "version": "2.1.3",
    "id": "intver_01KMZAT7K4J1JWT5VCV838TFRN"
  },
  "twilio": {
    "version": "1.3.2",
    "id": "intver_01KMZATFC2J1KF4J3T93HPFKGF"
  },
  "vcita": {
    "version": "2.0.0",
    "id": "intver_01JFAR3ZXVBWKYYJ53W7C4E4VB"
  },
  "vercel": {
    "version": "2.0.0",
    "id": "intver_01JFAR44YN7JA1Z86S8CACVG5C"
  },
  "viber": {
    "version": "1.0.5",
    "id": "intver_01KMZATNKPMTPMYBQNZN6744N4"
  },
  "vonage": {
    "version": "1.0.4",
    "id": "intver_01KMZATWVPMNCXAF3XB72FNHKS"
  },
  "webchat": {
    "version": "0.3.0",
    "id": "intver_01JBVV0VQW8XN3Z5V9K8DB1M3B"
  },
  "webflow": {
    "version": "3.1.4",
    "id": "intver_01KMZAV5CCPAJKR8S1M36266M8"
  },
  "webhook": {
    "version": "1.1.5",
    "id": "intver_01KMZAVBMNBFJBA9SM7ATDS5R8"
  },
  "wechat": {
    "version": "0.1.1",
    "id": "intver_01KMZAVJTKWA8CQ8A7KFRDYR5X"
  },
  "whatsapp": {
    "version": "4.15.0",
    "id": "intver_01KRC1AEDCE4P5HTZP5G41495H"
  },
  "workable": {
    "version": "0.1.2",
    "id": "intver_01KMZAWAMH776SVXW1R98ABBHP"
  },
  "workday": {
    "version": "2.0.0",
    "id": "intver_01JFARBCCKWG9BS7DT2RBW9D7B"
  },
  "wrike": {
    "version": "2.0.0",
    "id": "intver_01JFAR4H5WXG78YBE7MEG967MW"
  },
  "zapier": {
    "version": "0.3.10",
    "id": "intver_01KMZAWN77ZX053EB5VJH7C9B9"
  },
  "zendesk": {
    "version": "3.0.6",
    "id": "intver_01KFGPZM7JH7PMSEBRSSM5C4H8"
  },
  "zendesk-messaging-hitl": {
    "version": "1.1.0",
    "id": "intver_01KPRHTAYTB64Z5QEDC1XZCSYH"
  },
  "zendesk-sell": {
    "version": "2.0.0",
    "id": "intver_01JFAR4NP3JGG1BPV4MFJ2HBC3"
  },
  "zoho": {
    "version": "3.1.4",
    "id": "intver_01KMZAX48A0JA4Q0CD3B7REDT0"
  },
  "zoom": {
    "version": "0.1.0",
    "id": "intver_01KNSQZR3F06SRHJY3BCN20JH9"
  }
};

{/* vale on */}

<OpenInHub integration={integrationVersions.loops} />

The official Loops integration allows your bot to send emails to your customers via Loops.

## Setup

<Info>
  You will need:

  * A [published bot](https://botpress.com/docs/get-started/quickstart)
  * A [Loops account](https://app.loops.so/)
</Info>

### Step 1: Install the integration in Botpress

First, install the integration in Botpress:

<Steps>
  <Step>In Botpress Studio, select **Explore Hub** in the upper-right corner.</Step>
  <Step>Search for the **Loops** integration, then select **Install Integration**.</Step>
  <Step>In the **Configuration** menu, you should see two fields: **API Key** and **Webhook Signing Secret**. Leave these blank for now—you'll come back to them after configuring the integration in Loops.</Step>
  <Step>Copy the webhook URL.</Step>
</Steps>

### Step 2: Configure the webhook in Loops

Next, configure your Botpress webhook in Loops:

<Steps>
  <Step>
    Log in to your Loops account.
  </Step>

  <Step>
    Go to **Settings** > **Webhook**.
  </Step>

  <Step>
    Paste your integration's webhook URL into the **Endpoint URL** field, then select **Update URL**.
  </Step>

  <Step>
    Copy the generated **Signing Secret**.
  </Step>

  <Step>
    Paste it into the integration's **Webhook Signing Secret** field in Botpress.
  </Step>
</Steps>

### Step 3: Create a Loops API key

Then, create your Loops API key:

<Steps>
  <Step>
    In your Loops account, go to **Settings** > **API**.
  </Step>

  <Step>
    Select **Generate key**.
  </Step>

  <Step>
    Copy the generated key, then paste it into the integration's **API Key** field in Botpress.
  </Step>
</Steps>

<Check>
  Your Loops integration is ready. You can use the integration's [Cards](#cards) and [Triggers](#triggers) to interact with your customer emails.
</Check>

***

## Cards

{/* vale off */}

Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:

### Send Transactional Email

<span>
  {"Send a transactional email to a client"}
</span>

<ResponseField name="input" type="object">
  <Expandable>
    <ResponseField name="email" type="string" required>
      <span>
        {"The email address of the recipient."}
      </span>
    </ResponseField>

    <ResponseField name="transactionalId" type="string" required>
      <span>
        {"The ID of the transactional email to send."}
      </span>
    </ResponseField>

    <ResponseField name="dataVariables" type="array" required>
      <span>
        {"An object containing data as defined by the data variables added to the transactional email template."}
      </span>

      <Expandable title="array item properties">
        <ResponseField name="key" type="string" required>
          <span>
            {"The key of the data variable"}
          </span>
        </ResponseField>

        <ResponseField name="value" type="string" required>
          <span>
            {"The value of the data variable"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="addToAudience" type="boolean">
      <span>
        {"If true, a contact will be created in your audience using the email value (if a matching contact doesn’t already exist)."}
      </span>
    </ResponseField>

    <ResponseField name="idempotencyKey" type="string">
      <span>
        {"Optionally send an idempotency key to avoid duplicate requests. The value should be a string of up to 100 characters and should be unique for each request. We recommend using V4 UUIDs or some other method with enough guaranteed entropy to avoid collisions during a 24 hour window. The endpoint will return a 409 Conflict response if the idempotency key has been used in the previous 24 hours."}
      </span>
    </ResponseField>

    <ResponseField name="fileIds" type="array">
      <span>
        {"The Botpress client-generated IDs of the files to be attached to the email. They must have already been uploaded to your bot via the Files API. The name of the file will be used as the filename of the attachment. Use this for a list of templates the user can choose from."}
      </span>
    </ResponseField>

    <ResponseField name="fileData" type="array">
      <span>
        {"The name, base64-encoded data, and MIME content type of custom files to be attached to the email."}
      </span>

      <Expandable title="array item properties">
        <ResponseField name="filename" type="string" required>
          <span>
            {"The name of the file"}
          </span>
        </ResponseField>

        <ResponseField name="contentType" type="string" required>
          <span>
            {"The MIME content type of the file"}
          </span>
        </ResponseField>

        <ResponseField name="data" type="string" required>
          <span>
            {"The base64-encoded data of the file"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="output" type="object">
  This Card has no output.
</ResponseField>

## Triggers

{/* vale off */}

Here's a reference for all [Triggers](/studio/concepts/triggers/) available with the integration:

<Tip>
  You can access data returned from any of these Triggers by reading `event.payload` after the Trigger fires.
</Tip>

### Email Clicked

<span>
  {"Sent when a link in a campaign or loop email is clicked. This event is not available for transactional emails because link clicks are not tracked in transactional emails."}
</span>

<ResponseField name="payload" type="object">
  <Expandable>
    <ResponseField name="eventName" type="string" required>
      <span>
        {"The type of event as defined by Loops"}
      </span>
    </ResponseField>

    <ResponseField name="webhookSchemaVersion" type="string" required>
      <span>
        {"Will be 1.0.0 for all events"}
      </span>
    </ResponseField>

    <ResponseField name="eventTime" type="number" required>
      <span>
        {"The Unix timestamp of the time the event occurred"}
      </span>
    </ResponseField>

    <ResponseField name="contactIdentity" type="object" required>
      <span>
        {"The identifiers of the contact. Includes the contact ID, email address, and user ID"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the contact assigned by Loops"}
          </span>
        </ResponseField>

        <ResponseField name="email" type="string" required>
          <span>
            {"The email address of the contact"}
          </span>
        </ResponseField>

        <ResponseField name="userId" type="string | null" required>
          <span>
            {"The unique user ID created by the contact. May be null"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="email" type="object" required>
      <span>
        {"The details about an individual email sent to a recipient. Includes the email ID, the ID of the sent version, and the subject"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the email"}
          </span>
        </ResponseField>

        <ResponseField name="emailMessageId" type="string" required>
          <span>
            {"The ID of the sent version of the email"}
          </span>
        </ResponseField>

        <ResponseField name="subject" type="string" required>
          <span>
            {"The subject of the sent version of the email"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="sourceType" type="enum<string>" required>
      <span>
        {"The type of email that triggered the event. One of campaign or loop"}
      </span>

      Available options: `campaign`, `loop`
    </ResponseField>

    <ResponseField name="campaignId" type="string">
      <span>
        {"The ID of the campaign email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="loopId" type="string">
      <span>
        {"The ID of the loop email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>
  </Expandable>
</ResponseField>

### Email Delivered

<span>
  {"Sent when an email is delivered to its recipient."}
</span>

<ResponseField name="payload" type="object">
  <Expandable>
    <ResponseField name="eventName" type="string" required>
      <span>
        {"The type of event as defined by Loops"}
      </span>
    </ResponseField>

    <ResponseField name="webhookSchemaVersion" type="string" required>
      <span>
        {"Will be 1.0.0 for all events"}
      </span>
    </ResponseField>

    <ResponseField name="eventTime" type="number" required>
      <span>
        {"The Unix timestamp of the time the event occurred"}
      </span>
    </ResponseField>

    <ResponseField name="contactIdentity" type="object" required>
      <span>
        {"The identifiers of the contact. Includes the contact ID, email address, and user ID"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the contact assigned by Loops"}
          </span>
        </ResponseField>

        <ResponseField name="email" type="string" required>
          <span>
            {"The email address of the contact"}
          </span>
        </ResponseField>

        <ResponseField name="userId" type="string | null" required>
          <span>
            {"The unique user ID created by the contact. May be null"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="email" type="object" required>
      <span>
        {"The details about an individual email sent to a recipient. Includes the email ID, the ID of the sent version, and the subject"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the email"}
          </span>
        </ResponseField>

        <ResponseField name="emailMessageId" type="string" required>
          <span>
            {"The ID of the sent version of the email"}
          </span>
        </ResponseField>

        <ResponseField name="subject" type="string" required>
          <span>
            {"The subject of the sent version of the email"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="sourceType" type="enum<string>" required>
      <span>
        {"The type of email that triggered the event. One of campaign, loop, or transactional"}
      </span>

      Available options: `campaign`, `loop`, `transactional`
    </ResponseField>

    <ResponseField name="campaignId" type="string">
      <span>
        {"The ID of the campaign email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="loopId" type="string">
      <span>
        {"The ID of the loop email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="transactionalId" type="string">
      <span>
        {"The ID of the transactional email. Only one of Campaign ID, Loop ID, or Transactional ID must exist."}
      </span>
    </ResponseField>
  </Expandable>
</ResponseField>

### Email Hard Bounced

<span>
  {"Sent when an email hard bounces. Hard bounces are persistent email delivery failures, for example a mailbox that doesn't exist. The email will not be delivered."}
</span>

<ResponseField name="payload" type="object">
  <Expandable>
    <ResponseField name="eventName" type="string" required>
      <span>
        {"The type of event as defined by Loops"}
      </span>
    </ResponseField>

    <ResponseField name="webhookSchemaVersion" type="string" required>
      <span>
        {"Will be 1.0.0 for all events"}
      </span>
    </ResponseField>

    <ResponseField name="eventTime" type="number" required>
      <span>
        {"The Unix timestamp of the time the event occurred"}
      </span>
    </ResponseField>

    <ResponseField name="contactIdentity" type="object" required>
      <span>
        {"The identifiers of the contact. Includes the contact ID, email address, and user ID"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the contact assigned by Loops"}
          </span>
        </ResponseField>

        <ResponseField name="email" type="string" required>
          <span>
            {"The email address of the contact"}
          </span>
        </ResponseField>

        <ResponseField name="userId" type="string | null" required>
          <span>
            {"The unique user ID created by the contact. May be null"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="email" type="object" required>
      <span>
        {"The details about an individual email sent to a recipient. Includes the email ID, the ID of the sent version, and the subject"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the email"}
          </span>
        </ResponseField>

        <ResponseField name="emailMessageId" type="string" required>
          <span>
            {"The ID of the sent version of the email"}
          </span>
        </ResponseField>

        <ResponseField name="subject" type="string" required>
          <span>
            {"The subject of the sent version of the email"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="sourceType" type="enum<string>" required>
      <span>
        {"The type of email that triggered the event. One of campaign, loop, or transactional"}
      </span>

      Available options: `campaign`, `loop`, `transactional`
    </ResponseField>

    <ResponseField name="campaignId" type="string">
      <span>
        {"The ID of the campaign email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="loopId" type="string">
      <span>
        {"The ID of the loop email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="transactionalId" type="string">
      <span>
        {"The ID of the transactional email. Only one of Campaign ID, Loop ID, or Transactional ID must exist."}
      </span>
    </ResponseField>
  </Expandable>
</ResponseField>

### Email Opened

<span>
  {"Sent when a campaign or loop email is opened. This event is not available for transactional emails because email opens are not tracked for transactional emails."}
</span>

<ResponseField name="payload" type="object">
  <Expandable>
    <ResponseField name="eventName" type="string" required>
      <span>
        {"The type of event as defined by Loops"}
      </span>
    </ResponseField>

    <ResponseField name="webhookSchemaVersion" type="string" required>
      <span>
        {"Will be 1.0.0 for all events"}
      </span>
    </ResponseField>

    <ResponseField name="eventTime" type="number" required>
      <span>
        {"The Unix timestamp of the time the event occurred"}
      </span>
    </ResponseField>

    <ResponseField name="contactIdentity" type="object" required>
      <span>
        {"The identifiers of the contact. Includes the contact ID, email address, and user ID"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the contact assigned by Loops"}
          </span>
        </ResponseField>

        <ResponseField name="email" type="string" required>
          <span>
            {"The email address of the contact"}
          </span>
        </ResponseField>

        <ResponseField name="userId" type="string | null" required>
          <span>
            {"The unique user ID created by the contact. May be null"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="email" type="object" required>
      <span>
        {"The details about an individual email sent to a recipient. Includes the email ID, the ID of the sent version, and the subject"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the email"}
          </span>
        </ResponseField>

        <ResponseField name="emailMessageId" type="string" required>
          <span>
            {"The ID of the sent version of the email"}
          </span>
        </ResponseField>

        <ResponseField name="subject" type="string" required>
          <span>
            {"The subject of the sent version of the email"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="sourceType" type="enum<string>" required>
      <span>
        {"The type of email that triggered the event. One of campaign or loop"}
      </span>

      Available options: `campaign`, `loop`
    </ResponseField>

    <ResponseField name="campaignId" type="string">
      <span>
        {"The ID of the campaign email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="loopId" type="string">
      <span>
        {"The ID of the loop email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>
  </Expandable>
</ResponseField>

### Email Soft Bounced

<span>
  {"Sent when an email soft bounces. Soft bounces are temporary email delivery failures, for example a connection timing out. Soft bounces are retried multiple times and some times the email is delivered."}
</span>

<ResponseField name="payload" type="object">
  <Expandable>
    <ResponseField name="eventName" type="string" required>
      <span>
        {"The type of event as defined by Loops"}
      </span>
    </ResponseField>

    <ResponseField name="webhookSchemaVersion" type="string" required>
      <span>
        {"Will be 1.0.0 for all events"}
      </span>
    </ResponseField>

    <ResponseField name="eventTime" type="number" required>
      <span>
        {"The Unix timestamp of the time the event occurred"}
      </span>
    </ResponseField>

    <ResponseField name="contactIdentity" type="object" required>
      <span>
        {"The identifiers of the contact. Includes the contact ID, email address, and user ID"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the contact assigned by Loops"}
          </span>
        </ResponseField>

        <ResponseField name="email" type="string" required>
          <span>
            {"The email address of the contact"}
          </span>
        </ResponseField>

        <ResponseField name="userId" type="string | null" required>
          <span>
            {"The unique user ID created by the contact. May be null"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="email" type="object" required>
      <span>
        {"The details about an individual email sent to a recipient. Includes the email ID, the ID of the sent version, and the subject"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the email"}
          </span>
        </ResponseField>

        <ResponseField name="emailMessageId" type="string" required>
          <span>
            {"The ID of the sent version of the email"}
          </span>
        </ResponseField>

        <ResponseField name="subject" type="string" required>
          <span>
            {"The subject of the sent version of the email"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="sourceType" type="enum<string>" required>
      <span>
        {"The type of email that triggered the event. One of campaign, loop, or transactional"}
      </span>

      Available options: `campaign`, `loop`, `transactional`
    </ResponseField>

    <ResponseField name="campaignId" type="string">
      <span>
        {"The ID of the campaign email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="loopId" type="string">
      <span>
        {"The ID of the loop email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="transactionalId" type="string">
      <span>
        {"The ID of the transactional email. Only one of Campaign ID, Loop ID, or Transactional ID must exist."}
      </span>
    </ResponseField>
  </Expandable>
</ResponseField>

### Email Spam Reported

<span>
  {"Sent when a recipient reports your email as spam."}
</span>

<ResponseField name="payload" type="object">
  <Expandable>
    <ResponseField name="eventName" type="string" required>
      <span>
        {"The type of event as defined by Loops"}
      </span>
    </ResponseField>

    <ResponseField name="webhookSchemaVersion" type="string" required>
      <span>
        {"Will be 1.0.0 for all events"}
      </span>
    </ResponseField>

    <ResponseField name="eventTime" type="number" required>
      <span>
        {"The Unix timestamp of the time the event occurred"}
      </span>
    </ResponseField>

    <ResponseField name="contactIdentity" type="object" required>
      <span>
        {"The identifiers of the contact. Includes the contact ID, email address, and user ID"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the contact assigned by Loops"}
          </span>
        </ResponseField>

        <ResponseField name="email" type="string" required>
          <span>
            {"The email address of the contact"}
          </span>
        </ResponseField>

        <ResponseField name="userId" type="string | null" required>
          <span>
            {"The unique user ID created by the contact. May be null"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="email" type="object" required>
      <span>
        {"The details about an individual email sent to a recipient. Includes the email ID, the ID of the sent version, and the subject"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the email"}
          </span>
        </ResponseField>

        <ResponseField name="emailMessageId" type="string" required>
          <span>
            {"The ID of the sent version of the email"}
          </span>
        </ResponseField>

        <ResponseField name="subject" type="string" required>
          <span>
            {"The subject of the sent version of the email"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="sourceType" type="enum<string>" required>
      <span>
        {"The type of email that triggered the event. One of campaign, loop, or transactional"}
      </span>

      Available options: `campaign`, `loop`, `transactional`
    </ResponseField>

    <ResponseField name="campaignId" type="string">
      <span>
        {"The ID of the campaign email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="loopId" type="string">
      <span>
        {"The ID of the loop email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="transactionalId" type="string">
      <span>
        {"The ID of the transactional email. Only one of Campaign ID, Loop ID, or Transactional ID must exist."}
      </span>
    </ResponseField>
  </Expandable>
</ResponseField>

### Email Unsubscribed

<span>
  {"Sent when a recipient unsubscribes via the unsubscribe link in an email. This event is not available for transactional emails because unsubscribe links are not included or required for transactional emails."}
</span>

<ResponseField name="payload" type="object">
  <Expandable>
    <ResponseField name="eventName" type="string" required>
      <span>
        {"The type of event as defined by Loops"}
      </span>
    </ResponseField>

    <ResponseField name="webhookSchemaVersion" type="string" required>
      <span>
        {"Will be 1.0.0 for all events"}
      </span>
    </ResponseField>

    <ResponseField name="eventTime" type="number" required>
      <span>
        {"The Unix timestamp of the time the event occurred"}
      </span>
    </ResponseField>

    <ResponseField name="contactIdentity" type="object" required>
      <span>
        {"The identifiers of the contact. Includes the contact ID, email address, and user ID"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the contact assigned by Loops"}
          </span>
        </ResponseField>

        <ResponseField name="email" type="string" required>
          <span>
            {"The email address of the contact"}
          </span>
        </ResponseField>

        <ResponseField name="userId" type="string | null" required>
          <span>
            {"The unique user ID created by the contact. May be null"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="email" type="object" required>
      <span>
        {"The details about an individual email sent to a recipient. Includes the email ID, the ID of the sent version, and the subject"}
      </span>

      <Expandable>
        <ResponseField name="id" type="string" required>
          <span>
            {"The ID of the email"}
          </span>
        </ResponseField>

        <ResponseField name="emailMessageId" type="string" required>
          <span>
            {"The ID of the sent version of the email"}
          </span>
        </ResponseField>

        <ResponseField name="subject" type="string" required>
          <span>
            {"The subject of the sent version of the email"}
          </span>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="sourceType" type="enum<string>" required>
      <span>
        {"The type of email that triggered the event. One of campaign or loop"}
      </span>

      Available options: `campaign`, `loop`
    </ResponseField>

    <ResponseField name="campaignId" type="string">
      <span>
        {"The ID of the campaign email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>

    <ResponseField name="loopId" type="string">
      <span>
        {"The ID of the loop email. Only one of Campaign ID or Loop ID must exist."}
      </span>
    </ResponseField>
  </Expandable>
</ResponseField>
