Extole has an event-based architecture. In order to understand how the architecture works as a whole, we need to understand its building blocks, which include people, events, actions, content, rewards, and rules. When these building blocks are stacked together, they constitute larger concepts like programs, audiences, and data. Let’s take a look at each of the building blocks and key concepts in more depth.
Every person is assigned a profile as soon as they are encountered, whether through your website, mobile app, or API, regardless of whether or not they interact with a campaign. Profiles at Extole give us the ability to determine the participant eligibility in programs, track relationships and issue rewards.For the order Extole uses to choose which profile an incoming event or file row updates, and what happens when two people share one identifier, see How Extole Matches an Event to a Profile.In a person’s profile, we store the following information:
Basic user info, such as email, names, phone number.
The data collected for a person falls into one of three scopes: Public, Private, and Client. Several profile attributes are set to public by default, while all other attributes default to private. All private attributes can be configured to fall in either the public or client categories.To set a profile attribute from an event you send, see Set Person Profile Data from an Event.
Scope
Description
API Access
Public
Profile data that is public can be seen by anyone. Public profile data can be edited by the person at any time. By default, public attributes include the following:
First name
Social media handles
Preferred locale
Recent activity (events that are configured as public)
Customer and Admin API
Private
Profile data that is visible only to the verified person and your company. Private profile data can be updated by the person through their interactions with a program. Generally speaking, profile attributes are private by default. Private profile data often includes information like the following:
Address
Mobile phone number
Opt in/out preference
Admin API
Client
Profile data that is only visible to your company. Client data typically includes information that even the verified person cannot edit and/or that your company may not want the person to be able to see. Client data attributes may include the following:
Campaigns contain pages, emails, and promotions, which can be customized in the My Extole Campaign Editor. Each piece of content has a set of variables that allows you to configure its appearance and behavior. There are also global or overview-level variables that cover the more ubiquitous aspects of your campaign, such as branded colors, terms and conditions copy, and logos.
Zones are predefined regions on your website or mobile app that request content from Extole. The content that is returned from a zone request can be configured in the Campaign Editor of your My Extole account. Zones are most often called using lightweight JavaScript tags on your website and via mobile SDKs. For example, a marketing tag, such as global_header, correlates to promotional content in the header region of your website or in your app.
Extole is an event-based system, meaning all program designs and customer journeys boil down to events. Every web interaction, bulk upload, or third-party system integration gets transformed into a common event model. Based on these events, we can implement rules and actions that fit the goals of your program.Let’s consider an account opening event. In this case, a user creates an account, which fires an event to Extole. This event must meet certain conditions or rules. For example, it may be required that the account be the user’s first account. If the conditions are met, then subsequent actions may occur, such as sending a reward via email.
Required EventsWe strongly recommend sending all rewardable events—conversions, account openings, subscriptions, and so on—to Extole. Our objective is to maximize the number of participants in your program and their activity levels. Selectively passing these events to Extole has been demonstrated to lead to significant underrecognition of participation and requires more work on your part to set up.
All events can contain data. Let’s take another look at the account opening event. This event can include data such as first and last name, email address, account ID, and so on.Event data falls into one of the following three scopes: Public, Private, and Client. By default, all events and data have their scopes set to private. During the program design process, Extole Support will assist you in defining your data scopes according to our best practices.
Scope
Description
Public
Event data that is visible to everyone. Examples include:
Review comment
Public nomination
Blog post
Private
Event data that is visible to the person who performed the event and your company. Examples include:
Order ID
Account number
Cart value
Client
Event data that is visible only to your company. Examples include:
Rules are used to made decisions about how events take action. In general when an event occurs, Extole applies rules to determine if the event meets all of the terms of the campaign. Extole marks an event as suspicious if any rule fails and marks an event passing if all rules succeed. There are also rules that must be configured when you add a reward to an event to define the conditions that must be met in order for a reward to be issued.
Actions are tied to events. When an event fires and its rules are met a subsequent action may occur, like delivering a reward email, sending a webhook to third-party system, scheduling a future action, or displaying content. Actions can also be taken in cases where conditions are not met.
Each campaign has its own rewards configured to incentivize your customers to share, refer, create an account, and so on. Extole supports a variety of reward types, including coupon codes, account credits, gift cards, charitable donations, and more. We can easily support reward tiers and have options for delivering rewards to customers participating in international programs.
Our advocation and engagement programs are the heart of our product. Beyond Refer A Friend, we offer a variety of other program types including Influencer, Friends & Family, Drop A Hint, Nomination, Sweepstakes, and more. Within a program, you will have one or multiple campaigns. For example, you may want to test two different rewards in your Refer A Friend program or run seasonal campaigns for a limited time period before resuming your typical offer.Every campaign is comprised of the people, content, events, rules, actions, and rewards described above.The journey starts when a person views the content of a campaign, whether it’s an on-site or in-app CTA or a promotional email. That interaction and all subsequent interactions fire events into Extole. Certain events, like a purchase, trigger actions like displaying an overlay on the order confirmation page encouraging the person to share. Other events, like opening and funding a checking account, have rules and rewards applied to them in addition to actions. In this case, a rule may ensure that only accounts created by new customers are rewarded. Events that pass these rules then trigger actions, such as sending a reward email to the customer or a webhook to the bank notifying them that a reward should be deposited into the account.
Extole Audiences are groups of your potential and/or existing customers that can be segmented based on similar behaviors, user data, and so on. All Extole programs and campaigns are targeted toward Audiences, making them an essential part of our system. These groups of participants are useful for creating more effective programs and incentives, as well as for increasing outbound marketing via email promotion and ad platform audience buying.While Extole does create and maintain audiences of people who have participated in a program, you’re also welcome to upload your own audiences or segments and market to them, even if—or maybe especially if—they haven’t yet participated in a program.
In addition to the robust program and campaign-level dashboards found in your My Extole account, all of the data collected through your Extole programs—including the person and event data described above—can be accessed through My Extole Reports. We offer standard report templates to assess performance, audiences, customer activities, and rewards. You can also create custom reports and save them as templates for later use. All reports can be run once or on a configurable schedule and can be downloaded manually or delivered directly to you via API or SFTP.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Extole Documentation","description":"Guides, product documentation, and API reference for the Extole platform.","colors":{"primary":"#ee0049","light":"#ee0049","dark":"#ee0049"},"logo":{"light":"https://mintcdn.com/extole/qEcOgc0BuXrP2LAU/extole-logo.png?fit=max\u0026auto=format\u0026n=qEcOgc0BuXrP2LAU\u0026q=85\u0026s=d7152863dcc1c598d4fac27f91b3658e","dark":"https://mintcdn.com/extole/qEcOgc0BuXrP2LAU/extole-logo.png?fit=max\u0026auto=format\u0026n=qEcOgc0BuXrP2LAU\u0026q=85\u0026s=d7152863dcc1c598d4fac27f91b3658e","href":"/"},"favicon":{"light":"https://mintcdn.com/extole/qEcOgc0BuXrP2LAU/Extole-icon-bug.svg?fit=max\u0026auto=format\u0026n=qEcOgc0BuXrP2LAU\u0026q=85\u0026s=963cb7a87707b61559c35c47c8d7fd14","dark":"https://mintcdn.com/extole/qEcOgc0BuXrP2LAU/Extole-icon-bug.svg?fit=max\u0026auto=format\u0026n=qEcOgc0BuXrP2LAU\u0026q=85\u0026s=963cb7a87707b61559c35c47c8d7fd14"},"api":{"url":"full"},"navbar":{"links":[{"href":"https://github.com/extole","label":"GitHub"},{"href":"https://my.extole.com","label":"My Extole"},{"href":"#request-sandbox","label":"Request Sandbox"}]},"footer":{"socials":{"github":"https://github.com/extole"}},"integrations":{"ga4":{"measurementId":"G-7QCR5R4J61"}},"contextual":{"options":["copy","assistant","download-spec","chatgpt","claude","cursor"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"extole","hasAudioNarration":false,"actualSubdomain":"extole","customDomains":["docs.extole.com"],"gitSource":{"type":"github","owner":"extole","repo":"product-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"agentFeedback":true,"thumbs":true,"issues":true,"edits":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af238b8df0682813ec0c847","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"API Reference","count":447},{"language":"default","tag":"Management API","count":310},{"language":"default","tag":"Guides","count":253},{"language":"default","tag":"Technical Docs","count":130},{"language":"default","tag":"Server to Extole API","count":72},{"language":"default","tag":"Programs \u0026 Campaigns","count":58},{"language":"default","tag":"Dashboards and Reporting","count":57},{"language":"default","tag":"Product Docs","count":56},{"language":"default","tag":"Components","count":49},{"language":"default","tag":"Product Overview","count":40}],"searchSettings":{"maxResults":20,"showContentSnippets":true,"isFiltersEnabled":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"public/style.css","content":":root{--extole-coral: #ee0049;--extole-navy: #0b123d;--extole-primary-fill: #ee0049;--extole-icon-navy-bg: #0b123d;--extole-slate: #7d90a4;--extole-ink: #151a2d;--extole-muted: #4f5c6d;--extole-page-bg: #faf9f7;--extole-card-bg: #faf9f7;--extole-surface: #ffffff;--extole-surface-muted: rgba(255, 255, 255, 0.45);--extole-logo-bg: #ffffff;--extole-secondary-bg: #ffffff;--extole-border: #e2e2e0;--extole-border-strong: #d0dae6;--extole-shadow: 0 16px 44px rgba(11, 18, 61, 0.08);--extole-hero-shadow: 0 10px 32px rgba(11, 18, 61, 0.06);--extole-radius: 16px;--extole-heading-font: \"PaperMono\", \"Space Mono\", \"SFMono-Regular\", Menlo, Monaco, Consolas, monospace}html,body{background:var(--extole-page-bg)}html:not(.dark):not([data-theme=\"dark\"]):not([data-color-mode=\"dark\"]) #background-color{background-color:var(--extole-page-bg)!important}body{color:var(--extole-ink);font-family:\"Inter\", \"Poppins\", \"Montserrat\", \"Segoe UI\", sans-serif}.dark body,html.dark body,body.dark,:root[data-theme=\"dark\"] body,[data-theme=\"dark\"] body,[data-color-mode=\"dark\"] body{background:#0f1526}.nav-logo{height:24px!important;max-width:84px!important;object-fit:contain}.extole-home{color:var(--extole-ink);color-scheme:light;max-width:1440px;margin:0 auto;padding:16px 16px 96px;width:100%}.dark .extole-home,html.dark .extole-home,body.dark .extole-home,:root[data-theme=\"dark\"] .extole-home,[data-theme=\"dark\"] .extole-home,[data-color-mode=\"dark\"] .extole-home,body[data-theme=\"dark\"] .extole-home,html[data-theme=\"dark\"] .extole-home{--extole-coral: #ee0049;--extole-navy: #f3f6ff;--extole-primary-fill: #ee0049;--extole-icon-navy-bg: #263455;--extole-slate: #9cacbf;--extole-ink: #e5ebf7;--extole-muted: #b4bfd2;--extole-card-bg: #151c31;--extole-surface: #1d263d;--extole-surface-muted: rgba(255, 255, 255, 0.06);--extole-logo-bg: rgba(248, 250, 255, 0.96);--extole-secondary-bg: rgba(255, 255, 255, 0.03);--extole-border: rgba(178, 191, 216, 0.16);--extole-border-strong: rgba(205, 218, 242, 0.28);--extole-shadow: 0 20px 48px rgba(0, 0, 0, 0.36);--extole-hero-shadow: 0 16px 36px rgba(0, 0, 0, 0.28);color-scheme:dark}.extole-hero{display:grid;grid-template-columns:minmax(0, 1.12fr) minmax(420px, 0.88fr);gap:28px;align-items:stretch}.extole-hero-copy,.extole-code-panel{border:1px solid var(--extole-border);border-radius:24px;box-shadow:var(--extole-hero-shadow)}.extole-hero-copy{min-height:0;padding:46px 43px;background:var(--extole-card-bg)}.extole-kicker,.extole-code-kicker{margin:0 0 18px;color:var(--extole-coral);font-size:13px;font-weight:700;letter-spacing:0.12em;text-transform:uppercase}.extole-hero h1,.extole-section h2{color:var(--extole-navy);font-family:var(--extole-heading-font);font-weight:700;letter-spacing:-0.01em}.extole-hero h1{max-width:720px;margin:0 0 17px;font-size:clamp(1.9rem, 3vw, 2.7rem);line-height:1.15}.extole-lede{max-width:58ch;margin:0;color:var(--extole-muted);font-size:1.04rem;line-height:1.65}.extole-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:31px}.extole-btn{display:inline-flex;min-height:48px;min-width:178px;align-items:center;justify-content:center;border-radius:12px;padding:0 20px;font-family:var(--extole-heading-font);font-size:15px;font-weight:600;text-decoration:none!important;transition:transform 160ms ease, box-shadow 160ms ease, border-color 160ms ease}.extole-btn:hover{transform:translateY(-1px)}.extole-btn-primary{background:var(--extole-primary-fill);color:#ffffff!important;box-shadow:0 10px 22px rgba(11, 18, 61, 0.22)}.extole-btn-secondary{border:1px solid var(--extole-border-strong);background:var(--extole-secondary-bg);color:var(--extole-navy)!important}.extole-sandbox{margin-top:30px;color:var(--extole-muted);font-size:0.92rem}.extole-sandbox a{color:var(--extole-navy);font-weight:600}.extole-code-panel{max-height:500px;min-width:0;overflow:hidden;padding:30px 26px;background:radial-gradient(circle at 90% 0%, rgba(224, 0, 73, 0.36), transparent 38%),\n linear-gradient(160deg, #131a47 0%, #0b123d 56%, #070c28 100%);color:#ffffff}.extole-code-kicker{color:#93a4d2}.extole-code-panel [class*=\"codeblock\"],.extole-code-panel pre,.extole-code-panel code{font-family:\"PaperMono\", \"SFMono-Regular\", Consolas, monospace!important}.extole-code-panel pre{background:transparent!important;color:#d4d4d4;font-size:0.84rem;line-height:1.65;margin:0;max-height:365px;overflow-x:hidden;overflow-y:auto;scrollbar-color:rgba(160, 173, 205, 0.3) rgba(8, 14, 39, 0.28);scrollbar-width:thin;text-align:left;white-space:pre;word-break:normal}.extole-code-panel .line{display:block;min-height:1.65em}.extole-code-panel .tok-comment{color:#6a9955}.extole-code-panel .tok-keyword,.extole-code-panel .tok-tag{color:#569cd6}.extole-code-panel .tok-attr,.extole-code-panel .tok-property,.extole-code-panel .tok-variable{color:#9cdcfe}.extole-code-panel .tok-string{color:#ce9178}.extole-code-panel .tok-function{color:#dcdcaa}.extole-code-panel .tok-number{color:#b5cea8}.extole-code-panel .tok-type{color:#4ec9b0}.extole-code-panel pre::-webkit-scrollbar{width:8px}.extole-code-panel pre::-webkit-scrollbar-track{background:rgba(8, 14, 39, 0.28);border-radius:10px}.extole-code-panel pre::-webkit-scrollbar-thumb{background:rgba(160, 173, 205, 0.3);border-radius:10px}.extole-code-tabs{display:flex;gap:18px;margin-bottom:18px;border-bottom:1px solid rgba(138, 156, 201, 0.24)}.extole-code-tab{display:inline-flex;padding-bottom:10px;color:#9fb0dd;cursor:pointer;font-family:var(--extole-heading-font);font-size:0.78rem}.extole-tab-radio{block-size:1px;inline-size:1px;margin:0;opacity:0;overflow:hidden;pointer-events:none;position:absolute}.extole-code-block{display:none}#extole-code-tab-js:checked~.extole-code-tabs .extole-code-tab[for=\"extole-code-tab-js\"],#extole-code-tab-react-native:checked~.extole-code-tabs .extole-code-tab[for=\"extole-code-tab-react-native\"],#extole-code-tab-ios:checked~.extole-code-tabs .extole-code-tab[for=\"extole-code-tab-ios\"],#extole-code-tab-android:checked~.extole-code-tabs .extole-code-tab[for=\"extole-code-tab-android\"]{border-bottom:2px solid #f5e7a5;color:#f4f8ff}#extole-code-tab-js:checked~.extole-code-block-js,#extole-code-tab-react-native:checked~.extole-code-block-react-native,#extole-code-tab-ios:checked~.extole-code-block-ios,#extole-code-tab-android:checked~.extole-code-block-android{display:block}.extole-link-strip{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));margin-top:42px;overflow:hidden;border:1px solid var(--extole-border);border-radius:24px;background:var(--extole-card-bg)}.extole-link-strip a{display:flex;min-height:78px;align-items:center;gap:14px;padding:18px 24px;color:var(--extole-ink);text-decoration:none!important}.extole-link-strip a+a{border-left:1px solid var(--extole-border)}.extole-link-strip strong{font-family:\"PaperMono\", \"SFMono-Regular\", Consolas, monospace;font-family:var(--extole-heading-font);font-size:15px;letter-spacing:0}.extole-icon{display:inline-flex;width:38px;height:38px;flex:0 0 38px;align-items:center;justify-content:center;border-radius:11px;color:#fff;font-size:13px;font-weight:800}.extole-icon svg,.extole-support-icon svg{display:block;height:22px;width:22px;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8}.extole-icon span{line-height:1}.extole-icon-navy{background:var(--extole-icon-navy-bg)}.extole-icon-gray{background:#7c8191}.extole-icon-pink{background:var(--extole-coral)}.extole-icon-blue{background:#a7d8eb}.extole-icon-yellow{background:#fee64b;color:var(--extole-ink)}.extole-icon-react{background:#0b1748;color:#61dafb}.extole-icon-black{background:#171717}.extole-icon-green{background:#9fcb4a}.extole-section{margin-top:50px;padding:50px 0}.extole-section h2{margin:0;font-size:clamp(1.35rem, 2vw, 1.9rem);line-height:1.2}.extole-section>p:not(.extole-kicker){max-width:720px;margin:16px 0 28px;color:var(--extole-muted);font-size:17px}.extole-pattern-grid{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:18px}.extole-stack-layout{display:grid;gap:14px}.extole-stack-pattern{background:var(--extole-card-bg);border:1px solid var(--extole-border);border-radius:var(--extole-radius);display:grid;gap:20px;grid-template-columns:minmax(0, 30%) minmax(0, 70%);padding:24px}.extole-stack-pattern-head h3{color:var(--extole-navy);font-family:var(--extole-heading-font);margin:0 0 10px}.extole-stack-pattern-head p{color:var(--extole-muted);font-size:0.9rem;line-height:1.55;margin:0}.extole-stack-pattern-groups{display:grid;gap:12px;grid-template-columns:repeat(2, minmax(0, 1fr))}.extole-stack-group{background:var(--extole-surface);border:1px solid var(--extole-border);border-radius:12px;padding:12px 14px}.extole-stack-group-title{color:var(--extole-muted);font-family:var(--extole-heading-font);font-size:0.68rem;font-weight:600;letter-spacing:0.08em;line-height:1.2;margin:0 0 9px;text-transform:uppercase}.extole-stack-group ul{list-style:none!important;margin:0;padding:0!important}.extole-stack-group li+li{border-top:1px solid var(--extole-border);margin-top:7px;padding-top:7px}.extole-stack-group a,.extole-devhub a:not(.extole-btn):not(.extole-partner-item):not(.extole-pattern-card){color:var(--extole-navy);font-weight:600;text-decoration:underline;text-decoration-color:rgba(11, 18, 61, 0.35);text-decoration-thickness:1px;text-underline-offset:2px}.extole-stack-group a:hover,.extole-devhub a:not(.extole-btn):not(.extole-partner-item):not(.extole-pattern-card):hover{color:var(--extole-coral);text-decoration-color:rgba(238, 0, 73, 0.65)}.extole-partner-filter-layout{align-items:start;display:grid;gap:20px;grid-template-columns:minmax(220px, 260px) minmax(0, 1fr)}.extole-partner-filter-panel{display:grid;gap:10px}.extole-partner-filter-title{color:var(--extole-navy);font-family:var(--extole-heading-font);font-size:0.9rem;margin:0}.extole-partner-filter-copy{color:var(--extole-muted);font-size:0.86rem;line-height:1.45;margin:-2px 0 4px}.extole-partner-filter-option{align-items:self-end;color:var(--extole-muted);column-gap:10px;cursor:pointer;display:grid;grid-template-columns:16px minmax(0, 1fr);line-height:1.35}.extole-partner-filter-option span{font-family:var(--extole-heading-font);font-size:0.74rem;line-height:1.25}.extole-partner-filter-input{accent-color:var(--extole-coral);height:16px;margin:2px 0 0;width:16px}.extole-partner-filter-option:has(.extole-partner-filter-input:checked){color:var(--extole-navy);font-weight:600}.extole-partner-surface{background:var(--extole-card-bg);border:1px solid var(--extole-border);border-radius:var(--extole-radius);padding:4px}.extole-partner-grid{display:grid;gap:8px;grid-template-columns:repeat(4, minmax(0, 1fr))}.extole-partner-item{border-radius:12px;color:var(--extole-navy);display:block;min-height:178px;padding:14px 16px;text-decoration:none!important;transition:background-color 0.2s ease, box-shadow 0.2s ease}.extole-partner-item:hover{background:var(--extole-surface-muted);box-shadow:0 8px 18px rgba(11, 18, 61, 0.08)}.extole-partner-logo{align-items:center;background:var(--extole-logo-bg);border:1px solid var(--extole-border);border-radius:10px;display:inline-flex;height:44px;justify-content:center;margin:0 0 12px;padding:8px 12px}.extole-partner-logo img{display:block;height:100%;max-width:120px;object-fit:contain;width:auto}.extole-partner-item h3{color:var(--extole-navy);font-family:var(--extole-heading-font);font-size:0.94rem;line-height:1.35;margin:0 0 8px}.extole-partner-item p{color:var(--extole-muted);font-size:0.82rem;line-height:1.45;margin:0}.extole-partner-filter-layout:has(#partner-filter-cep:checked) .extole-partner-item:not(.partner-cat-cep),.extole-partner-filter-layout:has(#partner-filter-ecommerce:checked) .extole-partner-item:not(.partner-cat-ecommerce),.extole-partner-filter-layout:has(#partner-filter-banking:checked) .extole-partner-item:not(.partner-cat-banking),.extole-partner-filter-layout:has(#partner-filter-cdp:checked) .extole-partner-item:not(.partner-cat-cdp),.extole-partner-filter-layout:has(#partner-filter-crm:checked) .extole-partner-item:not(.partner-cat-crm),.extole-partner-filter-layout:has(#partner-filter-rewards:checked) .extole-partner-item:not(.partner-cat-rewards),.extole-partner-filter-layout:has(#partner-filter-analytics:checked) .extole-partner-item:not(.partner-cat-analytics),.extole-partner-filter-layout:has(#partner-filter-tag:checked) .extole-partner-item:not(.partner-cat-tag),.extole-partner-filter-layout:has(#partner-filter-automation:checked) .extole-partner-item:not(.partner-cat-automation){display:none}.extole-support-grid{background:var(--extole-card-bg);border:1px solid var(--extole-border);border-radius:var(--extole-radius);display:grid;gap:18px;grid-template-columns:repeat(3, minmax(0, 1fr));margin-top:28px;padding:24px}.extole-pattern-card{display:block;min-height:100%;padding:24px;border:1px solid var(--extole-border);border-radius:var(--extole-radius);background:var(--extole-card-bg);box-shadow:0 8px 24px rgba(11, 18, 61, 0.05);color:var(--extole-ink);text-decoration:none!important}.extole-support-icon{align-items:center;border-radius:14px;color:#ffffff;display:inline-flex;height:44px;justify-content:center;margin-bottom:18px;width:44px}.extole-support-icon-help{background:var(--extole-coral)}.extole-support-icon-ticket{background:#3c4260}.extole-support-icon-status{background:#47b881}.extole-pattern-card h3{margin:0 0 12px;color:var(--extole-navy);font-family:var(--extole-heading-font);font-size:1.02rem}.extole-pattern-card p{margin:0;color:var(--extole-muted);font-size:0.93rem;line-height:1.6}.extole-card-cta{display:inline-flex;margin-top:16px;color:var(--extole-navy);font-family:var(--extole-heading-font);font-size:0.88rem;font-weight:600;text-decoration:underline;text-decoration-color:rgba(11, 18, 61, 0.35);text-decoration-thickness:1px;text-underline-offset:2px}@media (max-width: 1100px){.extole-hero{grid-template-columns:1fr}.extole-hero-copy{min-height:auto}}@media (max-width: 1024px){.extole-partner-grid{grid-template-columns:repeat(3, minmax(0, 1fr))}.extole-partner-filter-layout{grid-template-columns:minmax(190px, 230px) minmax(0, 1fr)}.extole-stack-pattern{gap:14px;grid-template-columns:1fr}}@media (max-width: 900px){.extole-stack-pattern-groups{grid-template-columns:1fr}.extole-partner-filter-layout{gap:14px;grid-template-columns:1fr}.extole-partner-filter-panel{grid-template-columns:repeat(2, minmax(0, 1fr))}.extole-partner-filter-title,.extole-partner-filter-copy{grid-column:1 / -1}}@media (max-width: 820px){.extole-home{padding:12px 14px 64px}.extole-hero-copy,.extole-code-panel{border-radius:18px;padding:28px 22px}.extole-link-strip,.extole-pattern-grid,.extole-support-grid{grid-template-columns:1fr}.extole-link-strip a+a{border-left:0;border-top:1px solid var(--extole-border)}}@media (max-width: 640px){.extole-section{margin-top:20px;padding:20px 0}.extole-partner-surface{padding:0}.extole-partner-grid{grid-template-columns:1fr}.extole-partner-filter-panel{display:none}.extole-partner-filter-layout{grid-template-columns:1fr}.extole-stack-pattern{padding:20px}.extole-stack-group{padding:11px 12px}.extole-btn{min-width:100%;width:100%}.extole-actions{flex-direction:column}}"},{"filePath":"style.css","content":".object-param-field [data-component-part=\"tabs-list\"]{display:none!important}[role=\"dialog\"] [data-component-part=\"tabs-list\"]:has([data-component-part=\"tab\"]:nth-child(2)),[role=\"dialog\"] [data-component-part=\"tabs-list\"]:has([role=\"tab\"]:nth-child(2)){position:absolute!important;left:0!important;top:0!important;width:1px!important;min-width:0!important;max-width:1px!important;height:1px!important;min-height:0!important;max-height:1px!important;padding:0!important;margin:0!important;overflow:hidden!important;clip:rect(0, 0, 0, 0)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important;opacity:0!important;pointer-events:none!important}[role=\"dialog\"] [data-testid=\"api-input-type\"].extole-type-field-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0, 0, 0, 0)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important;opacity:0!important;pointer-events:none!important}.extole-type-combo{display:flex;flex-wrap:wrap;gap:0.5rem;align-items:center;margin:0 0 0.75rem}.extole-type-combo label{font-size:0.75rem;font-weight:600;color:#78716c}html.dark .extole-type-combo label,html.dark .extole-type-combo-meta,html.dark .extole-type-combo-empty{color:#a8a29e}.extole-type-combo-wrap{position:relative;flex:1 1 16rem;min-width:16rem;cursor:pointer}.extole-type-combo-wrap input{box-sizing:border-box;width:100%;min-width:16rem;margin:0;padding:0.5rem 2rem 0.5rem 0.75rem;border:1px solid #d6d3d1;border-radius:0.5rem;background:#fff;color:inherit;font:inherit;font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:0.8125rem;line-height:1.25rem;cursor:pointer}.extole-type-combo-wrap input:focus{cursor:text;outline:2px solid rgb(238 0 73 / 0.35);outline-offset:1px}html.dark .extole-type-combo-wrap input{border-color:#44403c;background:#1c1917}.extole-type-combo-wrap::after{content:\"\";position:absolute;top:50%;right:0.85rem;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid #78716c;transform:translateY(-50%);pointer-events:none}.extole-type-combo-menu{position:absolute;z-index:40;top:calc(100% + 0.25rem);left:0;right:0;max-height:18rem;overflow:auto;border:1px solid #d6d3d1;border-radius:0.5rem;background:#fff;box-shadow:0 10px 30px rgb(0 0 0 / 0.12)}html.dark .extole-type-combo-menu{border-color:#44403c;background:#1c1917}.extole-type-combo-menu button{display:block;width:100%;margin:0;padding:0.5rem 0.75rem;border:0;background:transparent;color:inherit;font:inherit;font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:0.75rem;text-align:left;cursor:pointer}.extole-type-combo-menu button:hover,.extole-type-combo-menu button[aria-selected=\"true\"]{background:rgb(28 25 23 / 0.06);color:var(--api-ink)}html.dark .extole-type-combo-menu button:hover,html.dark .extole-type-combo-menu button[aria-selected=\"true\"]{background:rgb(255 255 255 / 0.08);color:var(--api-ink)}.extole-type-combo-empty{padding:0.75rem;font-size:0.75rem;color:#78716c}.extole-type-combo-meta{font-size:0.75rem;color:#78716c;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:12ch}.extole-eval-combo{display:flex;flex-wrap:wrap;gap:0.5rem;align-items:center;margin:0 0 0.75rem}.extole-eval-combo-wrap{position:relative;flex:1 1 16rem;min-width:16rem}.extole-eval-combo-select{box-sizing:border-box;width:100%;min-width:16rem;margin:0;padding:0.5rem 2rem 0.5rem 0.75rem;border:1px solid #d6d3d1;border-radius:0.5rem;background:#fff;color:inherit;font:inherit;font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:0.8125rem;line-height:1.25rem;appearance:none;cursor:pointer}.extole-eval-combo-select:focus{outline:2px solid rgb(238 0 73 / 0.35);outline-offset:1px}html.dark .extole-eval-combo-select{border-color:#44403c;background:#1c1917}.extole-eval-combo-wrap::after{content:\"\";position:absolute;top:50%;right:0.85rem;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid #78716c;transform:translateY(-50%);pointer-events:none}.extole-eval-map{margin:0.35rem 0 0.5rem}.extole-eval-map-list{display:flex;flex-direction:column;gap:0.5rem}.extole-eval-map-row{display:flex;flex-wrap:wrap;gap:0.4rem;align-items:center}.extole-eval-map-key,.extole-eval-map-type,.extole-eval-map-input{box-sizing:border-box;margin:0;padding:0.45rem 0.7rem;border:1px solid #d6d3d1;border-radius:0.5rem;background:#fff;color:inherit;font:inherit;font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:0.8125rem;line-height:1.25rem}.extole-eval-map-key{width:7.5rem}.extole-eval-map-type{width:13.5rem;padding-right:1.6rem;appearance:auto;cursor:pointer}.extole-eval-map-val{display:flex;flex:1 1 12rem;min-width:10rem;align-items:center;border:1px solid #d6d3d1;border-radius:0.5rem;background:#fff}.extole-eval-map-val.is-invalid{border-color:#ee0049}.extole-eval-map-prefix{flex:0 0 auto;padding:0 0 0 0.65rem;color:#78716c;font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:0.7rem;white-space:nowrap}.extole-eval-map-val .extole-eval-map-input{flex:1 1 auto;min-width:0;border:0;background:transparent}html.dark .extole-eval-map-key,html.dark .extole-eval-map-type,html.dark .extole-eval-map-val,html.dark .extole-eval-map-input{border-color:#44403c;background:#1c1917}html.dark .extole-eval-map-val .extole-eval-map-input{background:transparent}html.dark .extole-eval-map-remove{border-color:#44403c;color:#a8a29e}.extole-eval-map-key:focus,.extole-eval-map-type:focus,.extole-eval-map-val:focus-within{outline:2px solid rgb(238 0 73 / 0.35);outline-offset:1px}.extole-eval-map-hint{flex:1 0 100%;margin:0;font-size:0.75rem;color:#ee0049}.extole-eval-map-remove{width:2rem;height:2rem;padding:0;border:1px solid #d6d3d1;border-radius:0.5rem;background:transparent;color:#78716c;cursor:pointer;font-size:1rem;line-height:1}.extole-eval-map-add{margin:0.15rem 0 0;padding:0;border:0;background:transparent;color:#ee0049;font-size:0.8125rem;cursor:pointer}[data-testid=\"api-input-values\"].extole-eval-map-on>.grid{display:none!important}html[data-extole-driving] [role=\"menu\"]{display:none!important}select.extole-eval-native-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0, 0, 0, 0)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important;opacity:0!important;pointer-events:none!important}:root{--api-ink: #1c1917;--api-body: #44403c;--api-meta: #57534e;--api-faint: #a8a29e;--api-accent: #b3003a;--api-warn: #b45309;--api-rule: #ded9d1;--api-rule-soft: #ebe7e1;--api-panel: transparent;--api-row: transparent;--api-wash: rgb(179 0 58 / 0.07);--api-row-pad: 0.625rem;--api-gap: 0.375rem}html.dark{--api-ink: #f5f3f1;--api-body: #d6d3d1;--api-meta: #a8a29e;--api-faint: #78716c;--api-accent: #ff7096;--api-warn: #fcd34d;--api-rule: #46403d;--api-rule-soft: #2f2a28;--api-panel: rgb(255 255 255 / 0.04);--api-row: rgb(255 255 255 / 0.022);--api-wash: rgb(255 112 150 / 0.10)}.primitive-param-field>.py-6,.object-param-field>.py-6,.array-param-field>.py-6{padding-block:var(--api-row-pad)}@supports selector(:has(*)){div:has(>.param-head){padding-block:var(--api-row-pad)}}.param-head>div{padding-block:0;margin-right:0}.param-head>div>div{row-gap:0.125rem;column-gap:0.5rem}.param-head [data-component-part=\"field-meta\"]>div{line-height:20px}.param-head~div:not(:empty){margin-top:var(--api-gap)}.param-head~div:not(:empty)>*{margin-top:0}.param-head~div:not(:empty)>*+*{margin-top:var(--api-gap)}.primitive-param-field,.object-param-field,.array-param-field{border-color:var(--api-rule-soft)}.api-section-heading>div{border-bottom:0}@supports selector(:has(*)){div:has(>.method-pill){border:0}}@supports selector(:has(*)){.object-param-field:not(:has(>.py-6)):has(.param-head){margin-block:var(--api-gap);border:1px solid var(--api-rule);border-radius:0.5rem;padding:0.5rem;background:var(--api-panel)}}@supports selector(:has(*)){.primitive-param-field:has(>.py-6),.array-param-field:has(>.py-6),.object-param-field:has(>.py-6){margin-block:var(--api-gap);border:1px solid var(--api-rule);border-radius:0.375rem;padding-inline:0.75rem;background:var(--api-row)}}.param-head [data-component-part=\"field-name\"]{color:var(--api-ink);font-weight:600;letter-spacing:-0.006em}.param-head{word-break:normal;overflow-wrap:anywhere}.param-head [data-component-part=\"field-required-pill\"]{padding:0;border:0;border-radius:0;background:none;color:var(--api-meta);font-weight:500}.param-head [data-component-part=\"field-info-pill\"]+[data-component-part=\"field-required-pill\"]::before{content:\"\\00B7\";margin-right:0.35em;color:var(--api-faint)}.param-head[id^=\"response-\"] [data-component-part=\"field-required-pill\"]{display:none}.param-head [data-component-part=\"field-info-pill\"]{padding:0;border-radius:0;background:none;color:var(--api-meta);font-weight:500}.param-head [data-component-part=\"field-info-pill\"]+[data-component-part=\"field-info-pill\"]::before{content:\"\\00B7\";margin-right:0.35em;color:var(--api-faint)}.param-head [data-component-part=\"field-meta\"]>:last-child{margin-right:0}.param-head [data-component-part=\"field-meta-pre\"],.param-head [data-component-part=\"field-meta-post\"]{font-weight:400}.param-head [data-component-part=\"field-deprecated-pill\"]{padding:0;border-radius:0;background:none;color:var(--api-warn);font-size:0.6875rem;font-weight:500}.param-head~div .prose{color:var(--api-body)}.param-head~div .prose p{margin:0;font-size:0.875rem;line-height:1.55}.param-head~div .prose>*+*{margin-top:0.5rem}.param-head~div .prose code{color:var(--api-ink)}.param-head~div .prose-sm:not(.prose){color:var(--api-meta);font-size:0.75rem;line-height:1.45}.param-head~div .prose-sm:not(.prose) code{color:var(--api-body)}@supports selector(:has(*)){.primitive-param-field:not(:has(.param-head)) .prose-sm:not(.prose),.object-param-field:not(:has(.param-head)) .prose-sm:not(.prose),.array-param-field:not(:has(.param-head)) .prose-sm:not(.prose){margin-top:var(--api-gap)}}.param-head~div [data-component-part=\"expandable\"]{margin-top:0.5rem;border:0;border-radius:0}.param-head~div [data-component-part=\"expandable-button\"]{width:auto;padding:0.125rem 0;border-radius:0;color:var(--api-meta);font-size:0.75rem;font-weight:500}.param-head~div [data-component-part=\"expandable-button\"]:hover{background:none;color:var(--api-ink)}.param-head~div [data-component-part=\"expandable-content\"]{margin:0.25rem 0 0;padding:0 0 0 0.875rem;border-top:0;border-left:1px solid var(--api-rule)}.api-section-heading{gap:0.5rem}.api-section-heading-title{color:var(--api-meta);font-size:0.6875rem;font-weight:600;letter-spacing:0.08em;text-transform:uppercase}@supports selector(:has(*)){div:has(>.api-section){margin-bottom:2rem}}@supports selector(:has(*)){div:has(>.param-head:target){border-radius:2px;background:var(--api-wash);box-shadow:10px 0 0 var(--api-wash), -10px 0 0 var(--api-wash)}}.newsletter-container .lead{max-width:60ch;color:var(--api-body)}.nl-grid{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5rem;margin-top:1.5rem}.nl-head h2{margin:0 0 0.75rem;padding-bottom:0.5rem;border-bottom:1px solid var(--api-rule);font-size:1.125rem}.nl-list{margin:0;padding:0;list-style:none!important}.nl-list>li::before{content:none!important;display:none!important}.nl-item{margin-bottom:0.75rem;padding:0.875rem;border:1px solid var(--api-rule);border-radius:0.5rem;background:var(--api-panel)}.nl-item__head{display:flex;gap:0.75rem;align-items:flex-start;justify-content:space-between}.nl-month{margin:0;color:var(--api-ink);font-size:0.9375rem;font-weight:600;line-height:1.4}.nl-item .actions{flex:0 0 auto}.nl-item .btn{display:inline-flex;align-items:center;padding:0.25rem 0.75rem;border:1px solid var(--api-rule);border-radius:0.375rem;color:var(--api-ink)!important;font-size:0.75rem;font-weight:600;text-decoration:none!important;white-space:nowrap}.nl-item .btn:hover{border-color:var(--api-meta)}.nl-item [data-component-part=\"accordion\"]{margin-top:0.625rem}.nl-item [data-component-part=\"accordion-content\"] ul{margin:0;color:var(--api-body);font-size:0.8125rem;line-height:1.55}@media (max-width: 820px){.nl-grid{grid-template-columns:1fr}}a[href=\"#request-sandbox\"]{align-items:center;background:#000!important;border-radius:999px;color:#fff!important;display:inline-flex;font-family:\"Poppins\", \"Inter\", sans-serif;font-size:0.8125rem;font-weight:600;justify-content:center;line-height:1;min-height:2.25rem;padding:0.625rem 0.875rem;text-decoration:none!important;transition:background-color 160ms ease, transform 160ms ease}a[href=\"#request-sandbox\"]:hover{background:#27272a!important;transform:translateY(-1px)}a[href=\"#request-sandbox\"]:focus-visible,.extole-sandbox-modal button:focus-visible{outline:3px solid #ee0049;outline-offset:3px}.extole-sandbox-open{overflow:hidden}.extole-sandbox-modal{align-items:center;background:rgb(11 18 61 / 0.64);display:flex;inset:0;justify-content:center;padding:1.5rem;position:fixed;z-index:10000}.extole-sandbox-modal[hidden]{display:none}.extole-sandbox-dialog{background:#fff;border-radius:1.25rem;box-shadow:0 24px 64px rgb(11 18 61 / 0.3);color:#151a2d;max-height:calc(100vh - 3rem);max-width:36rem;overflow:auto;padding:2rem;position:relative;width:100%}.extole-sandbox-dialog h2{color:#151a2d;font-family:\"Poppins\", \"Inter\", sans-serif;font-size:1.75rem;line-height:1.15;margin:0 2.5rem 0.5rem 0}.extole-sandbox-dialog p{color:#4f5c6d;font-family:\"Poppins\", \"Inter\", sans-serif;line-height:1.5;margin:0}.extole-sandbox-close{align-items:center;background:transparent;border:0;border-radius:999px;color:#151a2d;cursor:pointer;display:inline-flex;font-size:1.5rem;height:2.25rem;justify-content:center;padding:0;position:absolute;right:1.25rem;top:1.25rem;width:2.25rem}.extole-sandbox-close:hover{background:#f1f1f1}.extole-sandbox-form{display:grid;gap:1rem;grid-template-columns:repeat(2, minmax(0, 1fr));margin-top:1.5rem}.extole-sandbox-field{display:grid;gap:0.5rem}.extole-sandbox-field-full{grid-column:1 / -1}.extole-sandbox-privacy{color:#383848;font-family:\"Poppins\", \"Inter\", sans-serif;font-size:0.8em;grid-column:1 / -1;line-height:1.5;margin:0}.extole-sandbox-privacy a{color:#151a2d;font-size:inherit;font-weight:600;text-decoration:underline;text-underline-offset:0.125em}.extole-sandbox-captcha{grid-column:1 / -1}.extole-sandbox-error{color:#9f1239;font-size:0.875rem;grid-column:1 / -1;margin:0}.extole-sandbox-field label{color:#383848;font-family:\"Poppins\", \"Inter\", sans-serif;font-size:0.875rem;font-weight:600}.extole-sandbox-field input,.extole-sandbox-field textarea{background:#fff;border:1px solid #c7c7c7;border-radius:0.25rem;box-sizing:border-box;color:#000;font-family:\"Poppins\", \"Inter\", sans-serif;font-size:1rem;min-height:2.75rem;padding:0.5rem 0.75rem;width:100%}.extole-sandbox-field input:focus-visible,.extole-sandbox-field textarea:focus-visible{border-color:#ee0049;outline:0}.extole-sandbox-field textarea{min-height:7.5rem;resize:vertical}.extole-sandbox-field input::placeholder,.extole-sandbox-field textarea::placeholder{color:#777}.extole-sandbox-submit{background:#383848;border:0;border-radius:999px;color:#fff;cursor:pointer;font-family:\"Poppins\", \"Inter\", sans-serif;font-size:0.875rem;font-weight:600;grid-column:1 / -1;justify-self:start;margin-top:0.5rem;padding:0.75rem 1.25rem}.extole-sandbox-submit:hover{background:#000}.extole-sandbox-submit:disabled{cursor:wait;opacity:0.7}.extole-sandbox-success{display:grid;gap:1.25rem;margin-top:1.5rem}.extole-sandbox-success-icon{align-items:center;background:#e8f5ed;border-radius:999px;color:#187344;display:inline-flex;font-size:1.25rem;font-weight:700;height:2.75rem;justify-content:center;width:2.75rem}.extole-sandbox-success-copy{display:grid;gap:0.5rem}.extole-sandbox-success h3{color:#151a2d;font-family:\"Poppins\", \"Inter\", sans-serif;font-size:1rem;margin:0}.extole-sandbox-success[hidden],.extole-sandbox-form[hidden]{display:none}@media (max-width: 40rem){.extole-sandbox-dialog{border-radius:1rem;padding:1.5rem}.extole-sandbox-form{grid-template-columns:1fr}.extole-sandbox-submit{width:100%}}"}],"page":{"pagePath":"technical/integration-overview/key-concepts","slug":"/technical/integration-overview/key-concepts","pageMetadata":{"title":"Key Concepts","description":"Understand Extole from the bottom up by reading about our platform's core elements.","href":"/technical/integration-overview/key-concepts"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Understand Extole from the bottom up by reading about our platform’s core elements.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Info}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`Extole has an event-based architecture. In order to understand how the architecture works as a whole, we need to understand its building blocks, which include people, events, actions, content, rewards, and rules. When these building blocks are stacked together, they constitute larger concepts like programs, audiences, and data. Let’s take a look at each of the building blocks and key concepts in more depth.`}),`\n`,_jsx(Heading,{level:`2`,id:`building-blocks`,children:`Building Blocks`}),`\n`,_jsx(Heading,{level:`3`,id:`people`,children:`People`}),`\n`,_jsx(_components.p,{children:`Every person is assigned a profile as soon as they are encountered, whether through your website, mobile app, or API, regardless of whether or not they interact with a campaign. Profiles at Extole give us the ability to determine the participant eligibility in programs, track relationships and issue rewards.`}),`\n`,_jsxs(_components.p,{children:[`For the order Extole uses to choose which profile an incoming event or file row updates, and what happens when two people share one identifier, see `,_jsx(_components.a,{href:`/technical/integration-overview/how-extole-matches-an-event-to-a-profile`,children:`How Extole Matches an Event to a Profile`}),`.`]}),`\n`,_jsx(_components.p,{children:`In a person’s profile, we store the following information:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Basic user info, such as email, names, phone number.`}),`\n`,_jsx(_components.li,{children:`Event history and data`}),`\n`,_jsx(_components.li,{children:`Relationships among participants`}),`\n`,_jsx(_components.li,{children:`User Keys and Access control information`}),`\n`,_jsx(_components.li,{children:`Audiences, such as “ambassador” or “employee”`}),`\n`,_jsx(_components.li,{children:`Reward history and redemption status`}),`\n`,_jsx(_components.li,{children:`Other custom data`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`profile-data`,children:`Profile Data`}),`\n`,_jsx(_components.p,{children:`The data collected for a person falls into one of three scopes: Public, Private, and Client. Several profile attributes are set to public by default, while all other attributes default to private. All private attributes can be configured to fall in either the public or client categories.`}),`\n`,_jsxs(_components.p,{children:[`To set a profile attribute from an event you send, see `,_jsx(_components.a,{href:`/technical/integration-overview/set-person-profile-data-from-an-event`,children:`Set Person Profile Data from an Event`}),`.`]}),`\n`,_jsxs(`table`,{children:[_jsx(`thead`,{children:_jsxs(`tr`,{children:[_jsx(`th`,{children:_jsx(_components.p,{children:`Scope`})}),_jsx(`th`,{children:_jsx(_components.p,{children:`Description`})}),_jsx(`th`,{children:_jsx(_components.p,{children:`API Access`})})]})}),_jsxs(`tbody`,{children:[_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(_components.p,{children:`Public`})}),_jsxs(`td`,{children:[_jsx(_components.p,{children:`Profile data that is public can be seen by anyone. Public profile data can be edited by the person at any time. By default, public attributes include the following:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`First name`}),`\n`,_jsx(_components.li,{children:`Social media handles`}),`\n`,_jsx(_components.li,{children:`Preferred locale`}),`\n`,_jsx(_components.li,{children:`Recent activity (events that are configured as public)`}),`\n`]})]}),_jsx(`td`,{children:_jsx(_components.p,{children:`Customer and Admin API`})})]}),_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(_components.p,{children:`Private`})}),_jsxs(`td`,{children:[_jsx(_components.p,{children:`Profile data that is visible only to the verified person and your company. Private profile data can be updated by the person through their interactions with a program. Generally speaking, profile attributes are private by default. Private profile data often includes information like the following:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Address`}),`\n`,_jsx(_components.li,{children:`Mobile phone number`}),`\n`,_jsx(_components.li,{children:`Opt in/out preference`}),`\n`]})]}),_jsx(`td`,{children:_jsx(_components.p,{children:`Admin API`})})]}),_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(_components.p,{children:`Client`})}),_jsxs(`td`,{children:[_jsx(_components.p,{children:`Profile data that is only visible to your company. Client data typically includes information that even the verified person cannot edit and/or that your company may not want the person to be able to see. Client data attributes may include the following:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Blocked status`}),`\n`,_jsx(_components.li,{children:`Event quality`}),`\n`,_jsx(_components.li,{children:`Reward tier`}),`\n`]})]}),_jsx(`td`,{children:_jsx(_components.p,{children:`Admin API`})})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`content`,children:`Content`}),`\n`,_jsx(_components.p,{children:`Campaigns contain pages, emails, and promotions, which can be customized in the My Extole Campaign Editor. Each piece of content has a set of variables that allows you to configure its appearance and behavior. There are also global or overview-level variables that cover the more ubiquitous aspects of your campaign, such as branded colors, terms and conditions copy, and logos.`}),`\n`,_jsx(Heading,{level:`4`,id:`zones`,children:`Zones`}),`\n`,_jsxs(_components.p,{children:[`Zones are predefined regions on your website or mobile app that request content from Extole. The content that is returned from a zone request can be configured in the Campaign Editor of your My Extole account. Zones are most often called using lightweight JavaScript tags on your website and via mobile SDKs. For example, a marketing tag, such as `,_jsx(_components.code,{children:`global_header`}),`, correlates to promotional content in the header region of your website or in your app.`]}),`\n`,_jsx(Heading,{level:`3`,id:`events`,children:`Events`}),`\n`,_jsx(_components.p,{children:`Extole is an event-based system, meaning all program designs and customer journeys boil down to events. Every web interaction, bulk upload, or third-party system integration gets transformed into a common event model. Based on these events, we can implement rules and actions that fit the goals of your program.`}),`\n`,_jsxs(_components.p,{children:[`Let’s consider an account opening event. In this case, a user creates an account, which fires an event to Extole. This event must meet certain conditions or `,_jsx(_components.a,{href:`###Rules`,children:`rules`}),`. For example, it may be required that the account be the user’s first account. If the conditions are met, then subsequent `,_jsx(_components.a,{href:`###Actions`,children:`actions`}),` may occur, such as sending a reward via email.`]}),`\n`,_jsxs(Info,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Required Events`})}),_jsxs(_components.p,{children:[`We `,_jsx(_components.strong,{children:`strongly recommend`}),` sending all rewardable events—conversions, account openings, subscriptions, and so on—to Extole. Our objective is to maximize the number of participants in your program and their activity levels. Selectively passing these events to Extole has been demonstrated to lead to significant underrecognition of participation and requires more work on your part to set up.`]})]}),`\n`,_jsx(Heading,{level:`4`,id:`event-data`,children:`Event Data`}),`\n`,_jsx(_components.p,{children:`All events can contain data. Let’s take another look at the account opening event. This event can include data such as first and last name, email address, account ID, and so on.`}),`\n`,_jsx(_components.p,{children:`Event data falls into one of the following three scopes: Public, Private, and Client. By default, all events and data have their scopes set to private. During the program design process, Extole Support will assist you in defining your data scopes according to our best practices.`}),`\n`,_jsxs(`table`,{children:[_jsx(`thead`,{children:_jsxs(`tr`,{children:[_jsx(`th`,{children:_jsx(_components.p,{children:`Scope`})}),_jsx(`th`,{children:_jsx(_components.p,{children:`Description`})})]})}),_jsxs(`tbody`,{children:[_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(_components.p,{children:`Public`})}),_jsxs(`td`,{children:[_jsx(_components.p,{children:`Event data that is visible to everyone. Examples include:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Review comment`}),`\n`,_jsx(_components.li,{children:`Public nomination`}),`\n`,_jsx(_components.li,{children:`Blog post`}),`\n`]})]})]}),_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(_components.p,{children:`Private`})}),_jsxs(`td`,{children:[_jsx(_components.p,{children:`Event data that is visible to the person who performed the event and your company. Examples include:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Order ID`}),`\n`,_jsx(_components.li,{children:`Account number`}),`\n`,_jsx(_components.li,{children:`Cart value`}),`\n`]})]})]}),_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(_components.p,{children:`Client`})}),_jsxs(`td`,{children:[_jsx(_components.p,{children:`Event data that is visible only to your company. Examples include:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Event quality`}),`\n`,_jsx(_components.li,{children:`Blocked user flag`}),`\n`,_jsx(_components.li,{children:`Order margin`}),`\n`]})]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`rules`,children:`Rules`}),`\n`,_jsx(_components.p,{children:`Rules are used to made decisions about how events take action. In general when an event occurs, Extole applies rules to determine if the event meets all of the terms of the campaign. Extole marks an event as suspicious if any rule fails and marks an event passing if all rules succeed. There are also rules that must be configured when you add a reward to an event to define the conditions that must be met in order for a reward to be issued.`}),`\n`,_jsx(Heading,{level:`3`,id:`actions`,children:`Actions`}),`\n`,_jsx(_components.p,{children:`Actions are tied to events. When an event fires and its rules are met a subsequent action may occur, like delivering a reward email, sending a webhook to third-party system, scheduling a future action, or displaying content. Actions can also be taken in cases where conditions are not met.`}),`\n`,_jsx(Heading,{level:`3`,id:`rewards`,children:`Rewards`}),`\n`,_jsx(_components.p,{children:`Each campaign has its own rewards configured to incentivize your customers to share, refer, create an account, and so on. Extole supports a variety of reward types, including coupon codes, account credits, gift cards, charitable donations, and more. We can easily support reward tiers and have options for delivering rewards to customers participating in international programs.`}),`\n`,_jsx(Heading,{level:`2`,id:`key-concepts`,children:`Key Concepts`}),`\n`,_jsx(Heading,{level:`3`,id:`programs-\u0026-campaigns`,children:`Programs \u0026 Campaigns`}),`\n`,_jsx(_components.p,{children:`Our advocation and engagement programs are the heart of our product. Beyond Refer A Friend, we offer a variety of other program types including Influencer, Friends \u0026 Family, Drop A Hint, Nomination, Sweepstakes, and more. Within a program, you will have one or multiple campaigns. For example, you may want to test two different rewards in your Refer A Friend program or run seasonal campaigns for a limited time period before resuming your typical offer.`}),`\n`,_jsx(_components.p,{children:`Every campaign is comprised of the people, content, events, rules, actions, and rewards described above.`}),`\n`,_jsx(_components.p,{children:`The journey starts when a person views the content of a campaign, whether it’s an on-site or in-app CTA or a promotional email. That interaction and all subsequent interactions fire events into Extole. Certain events, like a purchase, trigger actions like displaying an overlay on the order confirmation page encouraging the person to share. Other events, like opening and funding a checking account, have rules and rewards applied to them in addition to actions. In this case, a rule may ensure that only accounts created by new customers are rewarded. Events that pass these rules then trigger actions, such as sending a reward email to the customer or a webhook to the bank notifying them that a reward should be deposited into the account.`}),`\n`,_jsx(Heading,{level:`3`,id:`audiences`,children:`Audiences`}),`\n`,_jsx(_components.p,{children:`Extole Audiences are groups of your potential and/or existing customers that can be segmented based on similar behaviors, user data, and so on. All Extole programs and campaigns are targeted toward Audiences, making them an essential part of our system. These groups of participants are useful for creating more effective programs and incentives, as well as for increasing outbound marketing via email promotion and ad platform audience buying.`}),`\n`,_jsx(_components.p,{children:`While Extole does create and maintain audiences of people who have participated in a program, you’re also welcome to upload your own audiences or segments and market to them, even if—or maybe especially if—they haven’t yet participated in a program.`}),`\n`,_jsx(Heading,{level:`3`,id:`data`,children:`Data`}),`\n`,_jsx(_components.p,{children:`In addition to the robust program and campaign-level dashboards found in your My Extole account, all of the data collected through your Extole programs—including the person and event data described above—can be accessed through My Extole Reports. We offer standard report templates to assess performance, audiences, customer activities, and rewards. You can also create custom reports and save them as templates for later use. All reports can be run once or on a configurable schedule and can be downloaded manually or delivered directly to you via API or SFTP.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Key Concepts","description":"Understand Extole from the bottom up by reading about our platform's core elements.","href":"/technical/integration-overview/key-concepts"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Building Blocks","slug":"building-blocks","depth":2,"children":[{"title":"People","slug":"people","depth":3,"children":[]},{"title":"Profile Data","slug":"profile-data","depth":4,"children":[]},{"title":"Content","slug":"content","depth":3,"children":[]},{"title":"Zones","slug":"zones","depth":4,"children":[]},{"title":"Events","slug":"events","depth":3,"children":[]},{"title":"Event Data","slug":"event-data","depth":4,"children":[]},{"title":"Rules","slug":"rules","depth":3,"children":[]},{"title":"Actions","slug":"actions","depth":3,"children":[]},{"title":"Rewards","slug":"rewards","depth":3,"children":[]}]},{"title":"Key Concepts","slug":"key-concepts","depth":2,"children":[{"title":"Programs \u0026 Campaigns","slug":"programs-\u0026-campaigns","depth":3,"children":[]},{"title":"Audiences","slug":"audiences","depth":3,"children":[]},{"title":"Data","slug":"data","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/extole/f41fea9c3aac4d55/type-combobox.js","/_mintlify/custom/extole/83546dbecca8dd1c/evaluatable-map.js","/_mintlify/custom/extole/8a8483f8fc226986/evaluatable-selector.js","/_mintlify/custom/extole/83812e823faa6683/request-sandbox.js"],"subdomain":"extole","siteName":"Extole Documentation","title":"Key Concepts - Extole Documentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-09T18:06:29.217Z","originalFileLocation":"technical/integration-overview/key-concepts.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Understand Extole from the bottom up by reading about our platform\u0026#x27;s core elements.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Extole Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/extole/fqJbsSkQuI9X8tIY/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/extole/fqJbsSkQuI9X8tIY/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/extole/fqJbsSkQuI9X8tIY/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/extole/fqJbsSkQuI9X8tIY/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/extole/fqJbsSkQuI9X8tIY/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/extole/fqJbsSkQuI9X8tIY/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/extole/fqJbsSkQuI9X8tIY/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/extole/fqJbsSkQuI9X8tIY/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/extole/fqJbsSkQuI9X8tIY/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Key Concepts - Extole Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Understand Extole from the bottom up by reading about our platform\u0026#x27;s core elements.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Extole Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.extole.com/technical/integration-overview/key-concepts\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://extole.mintlify.site/_mintlify/api/og/v2?division=Integration+Overview\u0026amp;title=Key+Concepts\u0026amp;description=Understand+Extole+from+the+bottom+up+by+reading+about+our+platform%27s+core+elements.\u0026amp;theme=1484b4628d2fbfb7ddbdf997\u0026amp;signature=dfd8bf3d780e3a8d88e7d199330d5d99588d1efc4ebbf76109bed90c3df125b1\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Key Concepts - Extole Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Understand Extole from the bottom up by reading about our platform\u0026#x27;s core elements.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://extole.mintlify.site/_mintlify/api/og/v2?division=Integration+Overview\u0026amp;title=Key+Concepts\u0026amp;description=Understand+Extole+from+the+bottom+up+by+reading+about+our+platform%27s+core+elements.\u0026amp;theme=1484b4628d2fbfb7ddbdf997\u0026amp;signature=dfd8bf3d780e3a8d88e7d199330d5d99588d1efc4ebbf76109bed90c3df125b1\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/extole/fqJbsSkQuI9X8tIY/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Extole Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ee0049\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.extole.com/technical/integration-overview/key-concepts\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/technical/integration-overview/key-concepts.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.extole.com/#organization\",\"name\":\"Extole Documentation\",\"url\":\"https://docs.extole.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/extole/qEcOgc0BuXrP2LAU/extole-logo.png?fit=max\u0026auto=format\u0026n=qEcOgc0BuXrP2LAU\u0026q=85\u0026s=d7152863dcc1c598d4fac27f91b3658e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.extole.com#website\",\"name\":\"Extole Documentation\",\"url\":\"https://docs.extole.com\",\"publisher\":{\"@id\":\"https://docs.extole.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.extole.com/technical/integration-overview/key-concepts#webpage\",\"url\":\"https://docs.extole.com/technical/integration-overview/key-concepts\",\"name\":\"Key Concepts\",\"description\":\"Understand Extole from the bottom up by reading about our platform's core elements.\",\"dateModified\":\"2026-10-09T18:06:29.217Z\",\"isPartOf\":{\"@id\":\"https://docs.extole.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.extole.com/technical/integration-overview/key-concepts#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.extole.com/technical/integration-overview/key-concepts#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integration Overview\",\"item\":\"https://docs.extole.com/technical/integration-overview/integrating-with-extole\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Key Concepts\",\"item\":\"https://docs.extole.com/technical/integration-overview/key-concepts\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.extole.com/technical/integration-overview/key-concepts#article\",\"headline\":\"Key Concepts\",\"name\":\"Key Concepts\",\"description\":\"Understand Extole from the bottom up by reading about our platform's core elements.\",\"url\":\"https://docs.extole.com/technical/integration-overview/key-concepts\",\"mainEntityOfPage\":{\"@id\":\"https://docs.extole.com/technical/integration-overview/key-concepts#webpage\"},\"dateModified\":\"2026-10-09T18:06:29.217Z\",\"publisher\":{\"@id\":\"https://docs.extole.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.extole.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Extole Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Extole Documentation","nav":{"global":null,"tabs":[{"tab":"Product Docs","pages":[{"title":"Product Docs","href":"/product/extole-overview/what-is-extole"}]},{"tab":"Technical Docs","groups":[{"group":"Integration Overview","pages":[{"title":"Integrating with Extole","description":"Get an introduction to our various integration methods for both web and mobile.","href":"/technical/integration-overview/integrating-with-extole"},{"title":"Key Concepts","href":"/technical/integration-overview/key-concepts"},{"title":"How Extole Matches an Event to a Profile","description":"The order Extole uses to decide which profile an event or uploaded file row updates, and what happens when two people share one identifier.","href":"/technical/integration-overview/how-extole-matches-an-event-to-a-profile"},{"title":"Set Person Profile Data from an Event","href":"/technical/integration-overview/set-person-profile-data-from-an-event"},{"title":"Where a Share Link Preview Comes From","href":"/technical/integration-overview/where-a-share-link-preview-comes-from"}]},{"group":"Extole AI Tools","pages":[{"title":"Extole AI Tools","sidebarTitle":"Overview","href":"/technical/extole-ai-tools/index"},{"group":"Extole MCP Server","root":{"title":"Extole MCP Server","href":"/technical/extole-ai-tools/extole-mcp-server/index"},"pages":[{"title":"MCP Authentication","href":"/technical/extole-ai-tools/extole-mcp-server/mcp-authentication"},{"title":"Claude Desktop","href":"/technical/extole-ai-tools/extole-mcp-server/setup-claude"},{"title":"Claude Code","href":"/technical/extole-ai-tools/extole-mcp-server/setup-claude-code"},{"title":"ChatGPT","href":"/technical/extole-ai-tools/extole-mcp-server/setup-chatgpt"},{"title":"Cursor","href":"/technical/extole-ai-tools/extole-mcp-server/setup-cursor"},{"title":"Codex","href":"/technical/extole-ai-tools/extole-mcp-server/setup-codex"},{"title":"Microsoft Copilot","href":"/technical/extole-ai-tools/extole-mcp-server/setup-copilot-studio"},{"title":"Glean","href":"/technical/extole-ai-tools/extole-mcp-server/setup-glean"},{"title":"Gemini Enterprise","href":"/technical/extole-ai-tools/extole-mcp-server/setup-gemini"}]},{"group":"Extole CLI","root":{"title":"Extole CLI","href":"/technical/extole-ai-tools/extole-cli/index"},"pages":[{"title":"Claude Desktop","href":"/technical/extole-ai-tools/extole-cli/extole-cli-claude-desktop"},{"title":"Claude Code","href":"/technical/extole-ai-tools/extole-cli/extole-cli-claude-code"}]}]},{"group":"Platform Integrations","pages":[{"group":"JavaScript SDK","root":{"title":"JavaScript SDK","href":"/technical/platform-integrations/javascript-sdk/index"},"pages":[{"title":"Advanced Concepts","href":"/technical/platform-integrations/javascript-sdk/advanced-concepts"},{"title":"FAQs","href":"/technical/platform-integrations/javascript-sdk/faqs"}]},{"group":"Mobile SDKs","root":{"title":"Mobile SDKs","href":"/technical/platform-integrations/mobile-sdks/index"},"pages":[{"title":"Android SDK","href":"/technical/platform-integrations/mobile-sdks/android-sdk"},{"title":"iOS SDK","href":"/technical/platform-integrations/mobile-sdks/ios-sdk"},{"title":"React Native SDK","href":"/technical/platform-integrations/mobile-sdks/react-native-sdk"},{"title":"Deep Link Integrations","href":"/technical/platform-integrations/mobile-sdks/deep-link-integrations"}]},{"group":"REST APIs","root":{"title":"REST APIs","href":"/technical/platform-integrations/rest-apis/index"},"pages":[{"title":"Headless and Mobile API","href":"/technical/platform-integrations/rest-apis/mobile-api"},{"title":"Errors","href":"/technical/platform-integrations/rest-apis/errors"},{"title":"API References","href":"/technical/platform-integrations/rest-apis/api-references"},{"title":"Asynchronous Reporting API","href":"/technical/platform-integrations/rest-apis/asynchronous-reporting-api"},{"title":"Paging and Filtering List Endpoints","href":"/technical/platform-integrations/rest-apis/paging-and-filtering-list-endpoints"},{"title":"Campaign States Over REST","href":"/technical/platform-integrations/rest-apis/campaign-states-over-rest"},{"title":"Component Settings Over REST","href":"/technical/platform-integrations/rest-apis/component-settings-over-rest"},{"title":"Gift Card Rewards Over REST","href":"/technical/platform-integrations/rest-apis/gift-card-rewards-over-rest"},{"title":"Account Media Library","href":"/technical/platform-integrations/rest-apis/account-media-library"}]},{"group":"Files","root":{"title":"Files","href":"/technical/platform-integrations/files/index"},"pages":[{"title":"Extole SFTP Server","href":"/technical/platform-integrations/files/extoles-sftp-server"},{"title":"External SFTP Servers","href":"/technical/platform-integrations/files/external-sftp-servers"},{"title":"General File Uploads","href":"/technical/platform-integrations/files/general-file-uploads"},{"title":"File-based Events","href":"/technical/platform-integrations/files/file-based-events"},{"title":"Audience Files","href":"/technical/platform-integrations/files/audience-files"},{"title":"Troubleshooting Audience File Processing","href":"/technical/platform-integrations/files/troubleshooting-audience-file-processing"}]},{"group":"Webhooks","root":{"title":"Webhooks","href":"/technical/platform-integrations/webhooks/index"},"pages":[{"title":"Webhook Creation","href":"/technical/platform-integrations/webhooks/webhook-creation"},{"title":"Reward Webhooks","href":"/technical/platform-integrations/webhooks/reward-webhooks"},{"title":"Webhook Alerts and the Live View","href":"/technical/platform-integrations/webhooks/webhook-alerts"}]},{"title":"Data Analysis \u0026 Visualization","href":"/technical/platform-integrations/data-analysis-visualization"},{"group":"Extensions","root":{"title":"Extensions","href":"/technical/platform-integrations/extensions/index"},"pages":[{"title":"Campaign Monitors","href":"/technical/platform-integrations/extensions/campaign-monitors"},{"title":"File Integration — Beta","href":"/technical/platform-integrations/extensions/file-integration"},{"title":"Javascript SDK and Mobile SDK Extensions","href":"/technical/platform-integrations/extensions/javascript-sdk-and-mobile-sdk-extensions"},{"group":"Reward Bank","root":{"title":"Reward Bank","href":"/technical/platform-integrations/extensions/reward-bank"},"pages":[{"title":"Build a Loyalty Program","href":"/technical/platform-integrations/extensions/reward-bank/loyalty-program-guide"},{"title":"Reward Bank Configuration Guide","href":"/technical/platform-integrations/extensions/reward-bank/reward-bank-configuration-guide"},{"title":"Points and Balances","href":"/technical/platform-integrations/extensions/reward-bank/points-and-balances"},{"title":"Tiers and Member Status","href":"/technical/platform-integrations/extensions/reward-bank/tiers-and-status"}]},{"group":"Event Streams Overview","root":{"title":"Event Streams Overview","href":"/technical/platform-integrations/extensions/event-streams-overview"},"pages":[{"title":"Event Stream Query Language","href":"/technical/platform-integrations/extensions/event-streams-overview/event-stream-query-language"}]},{"title":"Create Share Link on an Event","href":"/technical/platform-integrations/extensions/create-share-link-on-an-event"}]}]},{"group":"Partners","pages":[{"group":"Account Opening","pages":[{"title":"Clutch","href":"/technical/partners/account-opening/withclutch"},{"title":"MANTL","href":"/technical/partners/account-opening/mantl"}]},{"group":"Appointment Management","pages":[{"title":"Boulevard (BLVD)","href":"/technical/partners/appointment-management/boulevard-blvd"}]},{"group":"Automations","pages":[{"title":"Zapier","href":"/technical/partners/automations/zapier"}]},{"group":"Core Banking","pages":[{"title":"Fiserv DNA","href":"/technical/partners/core-banking/fiserv-dna"}]},{"group":"Customer Data","pages":[{"title":"Amplitude","href":"/technical/partners/customer-data/amplitude"},{"title":"Segment","href":"/technical/partners/customer-data/segment"}]},{"group":"CRM","pages":[{"title":"Salesforce CRM","href":"/technical/partners/crm/extole-to-salesforce-crm"},{"title":"HubSpot","href":"/technical/partners/crm/hubspot"},{"title":"ServiceTitan","href":"/technical/partners/crm/service-titan"},{"group":"Salesforce CRM Apex and Flows","hidden":true,"pages":[{"title":"Salesforce CRM to Extole (Apex and Flows)","href":"/technical/partners/crm/salesforce-sales-cloud-apex-and-flows"}]}]},{"group":"Digital Banking","pages":[{"title":"Alkami","href":"/technical/partners/digital-banking/alkami"},{"title":"Banno (Jack Henry)","href":"/technical/partners/digital-banking/banno-jack-henry"},{"title":"Candescent (Digital Insight)","href":"/technical/partners/digital-banking/ncr"},{"group":"Q2","root":{"title":"Q2","href":"/technical/partners/digital-banking/q2/index"},"pages":[{"title":"Extole + Q2: Refer a Friend Marketing Kit","href":"/technical/partners/digital-banking/q2/q2-marketing-guide"}]}]},{"group":"eCommerce","pages":[{"title":"BigCommerce","href":"/technical/partners/ecommerce/bigcommerce"},{"title":"Salesforce Commerce Cloud (SFRA)","href":"/technical/partners/ecommerce/salesforce-commerce-cloud-sfra"},{"title":"Salesforce Commerce Cloud (Site Genesis)","href":"/technical/partners/ecommerce/salesforce-commerce-cloud-site-genesis"},{"title":"Shopify Hydrogen","href":"/technical/partners/ecommerce/shopify-hydrogen"},{"title":"Shopify Plus","href":"/technical/partners/ecommerce/shopify"},{"title":"OpenCart","href":"/technical/partners/ecommerce/opencart"}]},{"group":"Experimentation","pages":[{"title":"Optimizely","href":"/technical/partners/experimentation/optimizely"}]},{"group":"Loyalty","pages":[{"title":"SessionM","href":"/technical/partners/loyalty/sessionm-loyalty-solution-guide"}]},{"group":"Marketing Automation","pages":[{"title":"Adobe Marketo Engage","href":"/technical/partners/marketing-automation/adobe-marketo-engage"},{"title":"Attentive","href":"/technical/partners/marketing-automation/attentive"},{"title":"Braze","href":"/technical/partners/marketing-automation/braze"},{"title":"Cordial","href":"/technical/partners/marketing-automation/cordial"},{"title":"Iterable","href":"/technical/partners/marketing-automation/iterable"},{"title":"Klaviyo","href":"/technical/partners/marketing-automation/klaviyo"},{"title":"Listrak","href":"/technical/partners/marketing-automation/listrak"},{"title":"Optimove","href":"/technical/partners/marketing-automation/optimove"},{"title":"Salesforce Marketing Cloud","href":"/technical/partners/marketing-automation/salesforce-marketing-cloud-opt-ins"}]},{"group":"OTT Platform","pages":[{"title":"Vimeo OTT + Zapier","href":"/technical/partners/ott-platform/vimeo-ott-zapier"}]},{"group":"Rewards and Payments","pages":[{"title":"BHN (Blackhawk Network)","href":"/technical/partners/rewards-and-payments/bhn"},{"title":"Stripe","sidebarTitle":"Stripe","href":"/technical/partners/rewards-and-payments/stripe"},{"title":"Tremendous","href":"/technical/partners/rewards-and-payments/tremendous"}]},{"group":"Tag Management","pages":[{"title":"Ensighten","href":"/technical/partners/tag-management/ensighten"},{"title":"Google Tag Manager","href":"/technical/partners/tag-management/google-tag-manager"},{"title":"Tealium","href":"/technical/partners/tag-management/tealium"}]}]},{"group":"Building Partner Integrations","pages":[{"group":"Integration Lifecycle","pages":[{"title":"Build a Partner Integration with the Management API","href":"/technical/building-partner-integrations/integration-lifecycle/management-api-integration"},{"title":"Create the Integration Campaign and Component Model","href":"/technical/building-partner-integrations/integration-lifecycle/integration-component-model"},{"title":"Add the Activity and Event Views","href":"/technical/building-partner-integrations/integration-lifecycle/integration-activity-views"},{"title":"Validate and Publish an Integration","href":"/technical/building-partner-integrations/integration-lifecycle/integration-validation"}]},{"group":"Integration Types","pages":[{"title":"Integration Categories","href":"/technical/building-partner-integrations/integration-types/integration-categories"},{"group":"Sending Partner Events to Extole","root":{"title":"Sending Partner Events to Extole","href":"/technical/building-partner-integrations/integration-types/partner-events-to-extole"},"pages":[{"title":"Send Events from the Partner Platform","href":"/technical/building-partner-integrations/integration-types/partner-events-send-from-platform"},{"title":"Normalize Partner Events with a Prehandler","href":"/technical/building-partner-integrations/integration-types/partner-events-prehandlers"},{"title":"Map Partner Events to Business Events","href":"/technical/building-partner-integrations/integration-types/partner-events-map-to-business-events"},{"title":"Receive Audience Membership from a Partner","href":"/technical/building-partner-integrations/integration-types/partner-events-audience-membership"}]},{"title":"Build an Extole to Partner Integration","href":"/technical/building-partner-integrations/integration-types/integration-build-extole-to-partner"},{"title":"Build a Reward Fulfillment Integration","href":"/technical/building-partner-integrations/integration-types/integration-build-reward-fulfillment"}]}]},{"group":"Solutions","pages":[{"group":"Extole Solution Guides","root":{"title":"Extole Solution Guides","href":"/technical/solutions/extole-solution-guides/index"},"pages":[{"group":"Financial Services","pages":[{"title":"Financial Services","href":"/technical/solutions/extole-solution-guides/financial-services/index"}]},{"title":"Lead Generation","href":"/technical/solutions/extole-solution-guides/lead-generation"},{"title":"Membership","href":"/technical/solutions/extole-solution-guides/membership-loyalty"},{"title":"Banking / Credit Unions","href":"/technical/solutions/extole-solution-guides/quick-banking"},{"title":"Retail","href":"/technical/solutions/extole-solution-guides/retail"},{"title":"Subscription","href":"/technical/solutions/extole-solution-guides/subscription"}]},{"title":"Go Extole Field Team App","href":"/technical/solutions/go-extole-technical-docs"}]},{"group":"Operational Tasks","pages":[{"group":"Security \u0026 Compliance","pages":[{"title":"Data Erasure Requests","href":"/technical/operational-tasks/security-and-compliance/data-erasure-requests"},{"title":"Right to Access Requests","href":"/technical/operational-tasks/security-and-compliance/right-to-access-requests"},{"title":"Manage Your SSL Certificate","href":"/technical/operational-tasks/security-and-compliance/manage-your-ssl-certificate"},{"title":"Verifying Consumers","href":"/technical/operational-tasks/security-and-compliance/verifying-consumers"}]},{"group":"Account Configuration","pages":[{"title":"Develop Behind Your Firewall","href":"/technical/operational-tasks/account-configuration/develop-behind-your-firewall"},{"title":"Extole DNS Requirements","href":"/technical/operational-tasks/account-configuration/extole-dns-requirements"},{"title":"Generate Long-lived Access Tokens","href":"/technical/operational-tasks/account-configuration/generate-long-lived-access-tokens"},{"title":"My Extole Single Sign On","href":"/technical/operational-tasks/account-configuration/my-extole-single-sign-on"},{"title":"Opt-out List Management","href":"/technical/operational-tasks/account-configuration/opt-out-list-management"},{"title":"Recent Customer Purchase Upload","href":"/technical/operational-tasks/account-configuration/recent-customer-purchase-upload"}]},{"group":"Program Testing","pages":[{"title":"Exclude Test Data from Analytics","href":"/technical/operational-tasks/program-testing/exclude-test-data-from-analytics"},{"title":"A/B Test Your Offer","href":"/technical/operational-tasks/program-testing/ab-test-your-offer"},{"title":"A/B Test Your Program","href":"/technical/operational-tasks/program-testing/set-up-ab-tests"}]}]},{"group":"Troubleshooting","pages":[{"title":"Debug an Inbound Integration","href":"/technical/troubleshooting/debug-an-inbound-integration"},{"title":"Why a CTA Opens a Different Program's Share Experience","href":"/technical/troubleshooting/why-a-cta-opens-a-different-programs-share-experience"},{"title":"Why a Zone Shows on Your Website but Not in Your App","href":"/technical/troubleshooting/why-a-zone-shows-on-your-website-but-not-in-your-app"},{"title":"Why Your Site Requests a Zone Named blank","href":"/technical/troubleshooting/why-your-site-requests-a-zone-named-blank"},{"title":"Campaign Build Failed When Publishing","href":"/technical/troubleshooting/campaign-build-failed-when-publishing"},{"title":"Traffic Changed After a Campaign Upgrade","href":"/technical/troubleshooting/traffic-changed-after-a-campaign-upgrade"},{"title":"Duplicate Action Alerts and Unique Event Keys","href":"/technical/troubleshooting/duplicate-action-alerts-and-unique-event-keys"},{"title":"Gift Card Reward Fails With a Partner Error","href":"/technical/troubleshooting/gift-card-reward-fails-with-a-partner-error"},{"title":"Scheduled Report Is Empty or Missing a Period","href":"/technical/troubleshooting/scheduled-report-is-empty-or-missing-a-period"},{"title":"Coupon Upload Rejects Codes","href":"/technical/troubleshooting/coupon-upload-rejects-codes"}]},{"group":"Functional Review Runbooks","hidden":true,"pages":[{"title":"Functional Review: Overview","href":"/runbooks/functional-review/overview"},{"title":"Functional Review: Report Execution + Runtime Checks","href":"/runbooks/functional-review/report-execution-runtime-checks"},{"title":"Functional Review: Input / Runtime Event Validation","href":"/runbooks/functional-review/input-runtime-event-validation"},{"title":"Functional Review: Event Data Rule Alignment","href":"/runbooks/functional-review/event-data-rule-alignment"},{"title":"Functional Review: Conversion \u0026 Reward Validation","href":"/runbooks/functional-review/conversion-reward-validation"},{"title":"Functional Review: Email / Webhook / Side-Effect Validation","href":"/runbooks/functional-review/email-webhook-side-effect-validation"},{"title":"Functional Review: Terms, Rewards, and Configuration Alignment","href":"/runbooks/functional-review/terms-rewards-and-configuration-alignment"}]},{"group":"Triggered By Runbooks","hidden":true,"pages":[{"title":"Triggered By: In-Campaign Trigger Event Missing","href":"/runbooks/triggered-by/in-campaign-trigger-event-missing"}]},{"group":"People Runbooks","hidden":true,"pages":[{"title":"Separating Two People Who Share One Profile","href":"/runbooks/people/separating-two-people-who-share-one-profile"}]}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/platform-overview/extole-chat/troubleshooting"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/getting-started/api-overview"}]},{"tab":"News","pages":[{"title":"News","href":"/news/recent-releases"}]}]},"basePath":"","title":"Key Concepts - Extole Documentation","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":[],"chunks":[]}