Error handling in the Encore React Native SDK: errors as values, not rejections
In 2.0 the SDK reports failures as values, not rejected promises. show() never rejects, and the bridge methods resolve with { success: false } rather than throwing, so a missing catch can no longer wedge an integration.
type is the stable identifier string. The two native EncoreError hierarchies differ in shape, so the bridge sends the identifier rather than reconstructing a JavaScript class from it.
type
Cause
not_configured
A method was called before configure()
invalid_api_key
Empty or malformed API key
invalid_url
Internal URL construction failure
http_error
Non-2xx HTTP response
api_error
The API returned a structured error
decoding_error
A response failed to decode
network_error
Connectivity issue: timeout, DNS, and so on
persistence_error
Local storage read or write failure
domain_error
A business rule was violated
bridge_error
The native bridge did not return a result. React Native only
A failure that stopped the sheet appearing lands on the PresentationResult as not_presented with reason.type === 'error':
const result = await Encore.placement('cancel_flow').show();if (result.status === 'not_presented') { if (result.reason.type === 'error') { console.warn('Encore:', result.reason.error.type, result.reason.error.message); } proceedWithCancellation(); // run your fallback either way}
Do not gate your fallback on the error branch. not_presented also covers no_offer_available, experiment_control, and use_case_unavailable, none of which are failures, and all of which still need your original flow to continue.
A claim that errored after the sheet appeared surfaces on the advertiser axis instead, as advertiser: { type: 'failed', error }. The user never saw it.
Throwing from your purchase controller records publisher: 'failed' with your error message, and the flow continues. Return 'cancelled' for a user cancellation and 'pending' for a deferred purchase rather than throwing either.
Every bridge method is wrapped: a native call that fails logs a [Encore] warning and resolves with a fallback rather than rejecting, so a bridge fault can never crash the host app.
const { success } = await Encore.setPurchaseController(replacementController);if (!success) { // configure() ran without a purchase path, so there is no controller to // replace, or the native module rejected the call.}
For show(), that fallback is a not_presented result carrying error.type === 'bridge_error'.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Encore","colors":{"primary":"#3B82F6","light":"#60A5FA","dark":"#2563EB"},"favicon":"https://mintcdn.com/encore-5242061e/Q9j45w34T3HE6gEF/favicon.ico?fit=max\u0026auto=format\u0026n=Q9j45w34T3HE6gEF\u0026q=85\u0026s=f4a721bc5092e5517ad5bb0e80acd195","appearance":{"default":"dark"},"navbar":{"links":[{"href":"mailto:admin@encorekit.com","label":"Support"}]},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"My Dashboard","icon":"gauge","href":"https://dashboard.encorekit.com"},{"anchor":"Support","icon":"envelope","href":"mailto:admin@encorekit.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"encore-5242061e","hasAudioNarration":false,"actualSubdomain":"encore-5242061e","customDomains":["docs.encorekit.com"],"gitSource":{"type":"github","owner":"encorekit","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae35bdbf2e535e50ffb71b3","collectionId":"5d728e92-86e5-4bf8-8968-c8c2e364113a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae35bdbf2e535e50ffb71b3"},"entitlements":{},"buildId":"6ae35bdbf2e535e50ffb71b3","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Publishers","count":166},{"language":"default","tag":"SDKs","count":146},{"language":"default","tag":"SDK Reference","count":76},{"language":"default","tag":"Bridges","count":44},{"language":"default","tag":"iOS","count":43},{"language":"default","tag":"Web","count":34},{"language":"default","tag":"Integration Guides","count":26},{"language":"default","tag":"Android","count":25},{"language":"default","tag":"Quickstart","count":23},{"language":"default","tag":"Flutter","count":23}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"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":"per-site-search-delta","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":"editor-private-page-search","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"publishers/react-native/sdk-reference/errors","slug":"/publishers/react-native/sdk-reference/errors","pageMetadata":{"title":"Errors","description":"Error handling in the Encore React Native SDK: errors as values, not rejections","href":"/publishers/react-native/sdk-reference/errors"},"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: \"Error handling in the Encore React Native SDK: errors as values, not rejections\"\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`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`In 2.0 the SDK reports failures as `,_jsx(_components.strong,{children:`values`}),`, not rejected promises. `,_jsx(_components.code,{children:`show()`}),` never rejects, and the bridge methods resolve with `,_jsx(_components.code,{children:`{ success: false }`}),` rather than throwing, so a missing `,_jsx(_components.code,{children:`catch`}),` can no longer wedge an integration.`]}),`\n`,_jsx(Heading,{level:`2`,id:`encoreerrorinfo`,children:`EncoreErrorInfo`}),`\n`,_jsx(_components.p,{children:`A native failure, flattened for the bridge.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`tsx`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`tsx`,children:_jsxs(_components.code,{language:`tsx`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`interface`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` EncoreErrorInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// frozen error-type vocabulary`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` message`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// human-readable description`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`type`}),` is the stable identifier string. The two native `,_jsx(_components.code,{children:`EncoreError`}),` hierarchies differ in shape, so the bridge sends the identifier rather than reconstructing a JavaScript class from it.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.code,{children:`type`})}),_jsx(_components.th,{children:`Cause`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`not_configured`})}),_jsxs(_components.td,{children:[`A method was called before `,_jsx(_components.code,{children:`configure()`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_api_key`})}),_jsx(_components.td,{children:`Empty or malformed API key`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_url`})}),_jsx(_components.td,{children:`Internal URL construction failure`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`http_error`})}),_jsx(_components.td,{children:`Non-2xx HTTP response`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`api_error`})}),_jsx(_components.td,{children:`The API returned a structured error`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`decoding_error`})}),_jsx(_components.td,{children:`A response failed to decode`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`network_error`})}),_jsx(_components.td,{children:`Connectivity issue: timeout, DNS, and so on`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`persistence_error`})}),_jsx(_components.td,{children:`Local storage read or write failure`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`domain_error`})}),_jsx(_components.td,{children:`A business rule was violated`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`bridge_error`})}),_jsx(_components.td,{children:`The native bridge did not return a result. React Native only`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`where-errors-arrive`,children:`Where errors arrive`}),`\n`,_jsx(Heading,{level:`3`,id:`presentation-failures`,children:`Presentation failures`}),`\n`,_jsxs(_components.p,{children:[`A failure that stopped the sheet appearing lands on the `,_jsx(_components.a,{href:`/publishers/react-native/sdk-reference/presentation-result`,children:_jsx(_components.code,{children:`PresentationResult`})}),` as `,_jsx(_components.code,{children:`not_presented`}),` with `,_jsx(_components.code,{children:`reason.type === 'error'`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`tsx`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`tsx`,children:_jsxs(_components.code,{language:`tsx`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` result`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Encore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`placement`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cancel_flow'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`show`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'not_presented'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`reason`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'error'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`warn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Encore:'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`reason`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`reason`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` proceedWithCancellation`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// run your fallback either way`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Do not gate your fallback on the error branch. `,_jsx(_components.code,{children:`not_presented`}),` also covers `,_jsx(_components.code,{children:`no_offer_available`}),`, `,_jsx(_components.code,{children:`experiment_control`}),`, and `,_jsx(_components.code,{children:`use_case_unavailable`}),`, none of which are failures, and all of which still need your original flow to continue.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`claim-failures`,children:`Claim failures`}),`\n`,_jsxs(_components.p,{children:[`A claim that errored `,_jsx(_components.em,{children:`after`}),` the sheet appeared surfaces on the advertiser axis instead, as `,_jsx(_components.code,{children:`advertiser: { type: 'failed', error }`}),`. The user never saw it.`]}),`\n`,_jsx(Heading,{level:`3`,id:`purchase-failures`,children:`Purchase failures`}),`\n`,_jsxs(_components.p,{children:[`Throwing from your `,_jsx(_components.a,{href:`/publishers/react-native/sdk-reference/purchase-controller`,children:`purchase controller`}),` records `,_jsx(_components.code,{children:`publisher: 'failed'`}),` with your error message, and the flow continues. Return `,_jsx(_components.code,{children:`'cancelled'`}),` for a user cancellation and `,_jsx(_components.code,{children:`'pending'`}),` for a deferred purchase rather than throwing either.`]}),`\n`,_jsx(Heading,{level:`2`,id:`bridge-level-failures`,children:`Bridge-level failures`}),`\n`,_jsxs(_components.p,{children:[`Every bridge method is wrapped: a native call that fails logs a `,_jsx(_components.code,{children:`[Encore]`}),` warning and resolves with a fallback rather than rejecting, so a bridge fault can never crash the host app.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`tsx`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`tsx`,children:_jsxs(_components.code,{language:`tsx`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`success`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Encore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setPurchaseController`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`replacementController`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`success`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // configure() ran without a purchase path, so there is no controller to`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // replace, or the native module rejected the call.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For `,_jsx(_components.code,{children:`show()`}),`, that fallback is a `,_jsx(_components.code,{children:`not_presented`}),` result carrying `,_jsx(_components.code,{children:`error.type === 'bridge_error'`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/publishers/react-native/sdk-reference/presentation-result`,children:`PresentationResult`}),`, where presentation and claim failures land.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/publishers/react-native/sdk-reference/purchase-controller`,children:`PurchaseController`}),` for purchase-side failures.`]}),`\n`,_jsxs(_components.li,{children:[`Platform detail: `,_jsx(_components.a,{href:`/publishers/ios/sdk-reference/errors`,children:`iOS errors`}),` and `,_jsx(_components.a,{href:`/publishers/android/sdk-reference/errors`,children:`Android errors`}),`.`]}),`\n`]})]})}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":"Errors","description":"Error handling in the Encore React Native SDK: errors as values, not rejections","href":"/publishers/react-native/sdk-reference/errors"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"EncoreErrorInfo","slug":"encoreerrorinfo","depth":2,"children":[]},{"title":"Where errors arrive","slug":"where-errors-arrive","depth":2,"children":[{"title":"Presentation failures","slug":"presentation-failures","depth":3,"children":[]},{"title":"Claim failures","slug":"claim-failures","depth":3,"children":[]},{"title":"Purchase failures","slug":"purchase-failures","depth":3,"children":[]}]},{"title":"Bridge-level failures","slug":"bridge-level-failures","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"encore-5242061e","siteName":"Encore","title":"Errors - Encore","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-13T01:52:59.685Z","originalFileLocation":"publishers/react-native/sdk-reference/errors.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=\"dark\"}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=\"Error handling in the Encore React Native SDK: errors as values, not rejections\">\u003cmeta data-mint-head name=\"application-name\" content=\"Encore\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/encore-5242061e/xhPViPNw21djssdp/_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/encore-5242061e/xhPViPNw21djssdp/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/encore-5242061e/xhPViPNw21djssdp/_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/encore-5242061e/xhPViPNw21djssdp/_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/encore-5242061e/xhPViPNw21djssdp/_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/encore-5242061e/xhPViPNw21djssdp/_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/encore-5242061e/xhPViPNw21djssdp/_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/encore-5242061e/xhPViPNw21djssdp/_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/encore-5242061e/xhPViPNw21djssdp/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Errors - Encore\">\u003cmeta data-mint-head property=\"og:description\" content=\"Error handling in the Encore React Native SDK: errors as values, not rejections\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Encore\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.encorekit.com/publishers/react-native/sdk-reference/errors\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://encore-5242061e.mintlify.app/_mintlify/api/og/v2?division=SDK+Reference\u0026amp;title=Errors\u0026amp;description=Error+handling+in+the+Encore+React+Native+SDK%3A+errors+as+values%2C+not+rejections\u0026amp;theme=222d1621abf39a0a97558941\u0026amp;signature=8df0db218fc5a6036915c744f17a919e3991732aff1ffc5965dc719ea02cba17\">\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=\"Errors - Encore\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Error handling in the Encore React Native SDK: errors as values, not rejections\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://encore-5242061e.mintlify.app/_mintlify/api/og/v2?division=SDK+Reference\u0026amp;title=Errors\u0026amp;description=Error+handling+in+the+Encore+React+Native+SDK%3A+errors+as+values%2C+not+rejections\u0026amp;theme=222d1621abf39a0a97558941\u0026amp;signature=8df0db218fc5a6036915c744f17a919e3991732aff1ffc5965dc719ea02cba17\">\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/encore-5242061e/xhPViPNw21djssdp/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Encore\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3B82F6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.encorekit.com/publishers/react-native/sdk-reference/errors\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/publishers/react-native/sdk-reference/errors.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.encorekit.com/#organization\",\"name\":\"Encore\",\"url\":\"https://docs.encorekit.com\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.encorekit.com#website\",\"name\":\"Encore\",\"url\":\"https://docs.encorekit.com\",\"publisher\":{\"@id\":\"https://docs.encorekit.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.encorekit.com/publishers/react-native/sdk-reference/errors#webpage\",\"url\":\"https://docs.encorekit.com/publishers/react-native/sdk-reference/errors\",\"name\":\"Errors\",\"description\":\"Error handling in the Encore React Native SDK: errors as values, not rejections\",\"dateModified\":\"2026-08-13T01:52:59.685Z\",\"isPartOf\":{\"@id\":\"https://docs.encorekit.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.encorekit.com/publishers/react-native/sdk-reference/errors#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.encorekit.com/publishers/react-native/sdk-reference/errors#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Bridges\",\"item\":\"https://docs.encorekit.com/publishers/react-native/quickstart/install\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React Native\",\"item\":\"https://docs.encorekit.com/publishers/react-native/quickstart/install\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"SDK Reference\",\"item\":\"https://docs.encorekit.com/publishers/react-native/sdk-reference/configure\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Errors\",\"item\":\"https://docs.encorekit.com/publishers/react-native/sdk-reference/errors\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.encorekit.com/publishers/react-native/sdk-reference/errors#article\",\"headline\":\"Errors\",\"name\":\"Errors\",\"description\":\"Error handling in the Encore React Native SDK: errors as values, not rejections\",\"url\":\"https://docs.encorekit.com/publishers/react-native/sdk-reference/errors\",\"mainEntityOfPage\":{\"@id\":\"https://docs.encorekit.com/publishers/react-native/sdk-reference/errors#webpage\"},\"dateModified\":\"2026-08-13T01:52:59.685Z\",\"publisher\":{\"@id\":\"https://docs.encorekit.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.encorekit.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Encore\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Encore","nav":{"global":{"anchors":[{"anchor":"My Dashboard","icon":"gauge","href":"https://dashboard.encorekit.com"},{"anchor":"Support","icon":"envelope","href":"mailto:admin@encorekit.com"}]},"products":[{"product":"Publishers","icon":"code","tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":""}]},{"tab":"SDKs","icon":"cubes","groups":[{"group":"iOS","pages":[{"group":"Quickstart","pages":[{"title":"Install the SDK","href":"/publishers/ios/quickstart/install"},{"title":"Configure the SDK","href":"/publishers/ios/quickstart/configure"},{"title":"User Management","href":"/publishers/ios/quickstart/user-management"},{"title":"Presenting Offers","href":"/publishers/ios/quickstart/present-offers"},{"title":"Configure Analytics","href":"/publishers/ios/quickstart/configure-analytics"}]},{"group":"Platform Integration","pages":[{"title":"App Store Subscription Product","href":"/publishers/ios/platform-setup/subscription-product"},{"title":"App Store Server Notifications","href":"/publishers/ios/platform-setup/server-notifications"},{"title":"Create a Promotional Offer","href":"/publishers/ios/platform-setup/create-promotional-offer"}]},{"group":"Integration Guides","pages":[{"title":"Integration Patterns","href":"/publishers/ios/guides/integration-patterns"},{"group":"Reduce Churn","pages":[{"title":"Add Subscription Product","href":"/publishers/ios/guides/add-subscription-product"}]},{"group":"3rd Party Subscription Managers","pages":[{"group":"Superwall","pages":[{"title":"Present Offers with Superwall","sidebarTitle":"Present Offers","href":"/publishers/ios/guides/managers/superwall/present-offers"},{"title":"Add Subscription Product with Superwall","sidebarTitle":"Add Subscription Product","href":"/publishers/ios/guides/managers/superwall/add-subscription-product"},{"title":"Configure Analytics with Superwall","sidebarTitle":"Configure Analytics","href":"/publishers/ios/guides/managers/superwall/configure-analytics"}]},{"group":"RevenueCat","pages":[{"title":"Present Offers with RevenueCat","sidebarTitle":"Present Offers","href":"/publishers/ios/guides/managers/revenuecat/present-offers"},{"title":"Add Subscription Product with RevenueCat","sidebarTitle":"Add Subscription Product","href":"/publishers/ios/guides/managers/revenuecat/add-subscription-product"},{"title":"Configure Analytics with RevenueCat","sidebarTitle":"Configure Analytics","href":"/publishers/ios/guides/managers/revenuecat/configure-analytics"}]},{"group":"Adapty","pages":[{"title":"Add Subscription Product with Adapty","sidebarTitle":"Add Subscription Product","href":"/publishers/ios/guides/managers/adapty/add-subscription-product"},{"title":"Configure Analytics with Adapty","sidebarTitle":"Configure Analytics","href":"/publishers/ios/guides/managers/adapty/configure-analytics"}]},{"group":"Qonversion","pages":[{"title":"Add Subscription Product with Qonversion","sidebarTitle":"Add Subscription Product","href":"/publishers/ios/guides/managers/qonversion/add-subscription-product"},{"title":"Configure Analytics with Qonversion","sidebarTitle":"Configure Analytics","href":"/publishers/ios/guides/managers/qonversion/configure-analytics"}]},{"title":"Using Multiple Managers","sidebarTitle":"Multiple Managers","href":"/publishers/ios/guides/managers/multiple-managers"}]}]},{"group":"Updating the SDK","pages":[{"title":"Routine updates","href":"/publishers/ios/guides/updating-sdk"},{"title":"Updating to 2.x","href":"/publishers/ios/guides/updating-to-2-x"}]},{"group":"SDK Reference","pages":[{"title":"Overview","href":"/publishers/ios/sdk-reference/overview"},{"title":"configure()","href":"/publishers/ios/sdk-reference/configure"},{"title":"identify()","href":"/publishers/ios/sdk-reference/identify"},{"title":"setUserAttributes()","href":"/publishers/ios/sdk-reference/set-user-attributes"},{"title":"setLanguage()","href":"/publishers/ios/sdk-reference/set-language"},{"title":"clearLanguage()","href":"/publishers/ios/sdk-reference/clear-language"},{"title":"reset()","href":"/publishers/ios/sdk-reference/reset"},{"title":"isActive()","href":"/publishers/ios/sdk-reference/is-active"},{"title":"isActivePublisher()","href":"/publishers/ios/sdk-reference/is-active-publisher"},{"title":"placement()","href":"/publishers/ios/sdk-reference/placement"},{"title":"EncorePurchaseController","href":"/publishers/ios/sdk-reference/purchase-controller"},{"title":"outcomes","href":"/publishers/ios/sdk-reference/outcomes"},{"title":"isClaimEnabled","href":"/publishers/ios/sdk-reference/is-claim-enabled"},{"title":"revokeEntitlements()","href":"/publishers/ios/sdk-reference/revoke-entitlements"},{"title":"UserAttributes","href":"/publishers/ios/sdk-reference/user-attributes"},{"title":"PresentationResult","href":"/publishers/ios/sdk-reference/presentation-result"},{"title":"Entitlements","href":"/publishers/ios/sdk-reference/entitlements"},{"title":"EntitlementScope","href":"/publishers/ios/sdk-reference/entitlement-scope"},{"title":"DismissReason","href":"/publishers/ios/sdk-reference/dismiss-reason"},{"title":"Errors","href":"/publishers/ios/sdk-reference/errors"}]}]},{"group":"Android","pages":[{"group":"Quickstart","pages":[{"title":"Install the SDK","href":"/publishers/android/quickstart/install"},{"title":"Configure the SDK","href":"/publishers/android/quickstart/configure"},{"title":"User Management","href":"/publishers/android/quickstart/user-management"},{"title":"Presenting Offers","href":"/publishers/android/quickstart/present-offers"},{"title":"Configure Analytics","href":"/publishers/android/quickstart/configure-analytics"}]},{"group":"Platform Integration","pages":[{"title":"Google Play Subscription Product","href":"/publishers/android/platform-setup/subscription-product"},{"title":"Real-Time Developer Notifications","href":"/publishers/android/platform-setup/server-notifications"}]},{"group":"Integration Guides","pages":[{"title":"Integration Patterns","href":"/publishers/android/guides/integration-patterns"},{"group":"Reduce Churn","pages":[{"title":"Add Subscription Product","href":"/publishers/android/guides/add-subscription-product"}]}]},{"group":"Updating the SDK","pages":[{"title":"Routine updates","href":"/publishers/android/guides/updating-sdk"},{"title":"Updating to 2.x","href":"/publishers/android/guides/updating-to-2-x"}]},{"group":"SDK Reference","pages":[{"title":"Overview","href":"/publishers/android/sdk-reference/overview"},{"title":"configure()","href":"/publishers/android/sdk-reference/configure"},{"title":"identify()","href":"/publishers/android/sdk-reference/identify"},{"title":"setUserAttributes()","href":"/publishers/android/sdk-reference/set-user-attributes"},{"title":"setLanguage()","href":"/publishers/android/sdk-reference/set-language"},{"title":"clearLanguage()","href":"/publishers/android/sdk-reference/clear-language"},{"title":"reset()","href":"/publishers/android/sdk-reference/reset"},{"title":"EncorePurchaseController","href":"/publishers/android/sdk-reference/purchase-controller"},{"title":"placement()","href":"/publishers/android/sdk-reference/placement"},{"title":"PresentationResult","href":"/publishers/android/sdk-reference/presentation-result"},{"title":"DismissReason","href":"/publishers/android/sdk-reference/dismiss-reason"},{"title":"Encore.outcomes","href":"/publishers/android/sdk-reference/outcomes"},{"title":"UserAttributes","href":"/publishers/android/sdk-reference/user-attributes"},{"title":"EncoreError","href":"/publishers/android/sdk-reference/errors"}]}]},{"group":"Web","pages":[{"group":"Quickstart","pages":[{"title":"Install the SDK","href":"/publishers/web/quickstart/install"},{"title":"Configure the SDK","href":"/publishers/web/quickstart/configure"},{"title":"User Management","href":"/publishers/web/quickstart/user-management"},{"title":"Present Offers","href":"/publishers/web/quickstart/present-offers"},{"title":"Configure Analytics","href":"/publishers/web/quickstart/configure-analytics"}]},{"group":"Integration Guides","pages":[{"title":"Web Integration Patterns","href":"/publishers/web/guides/integration-patterns"},{"title":"Hosted Offer Page (No SDK)","sidebarTitle":"Hosted Offer Page","href":"/publishers/web/guides/hosted-offer-page"},{"group":"Frameworks","pages":[{"title":"React","href":"/publishers/web/frameworks/react"},{"title":"Vue","href":"/publishers/web/frameworks/vue"},{"title":"Svelte","href":"/publishers/web/frameworks/svelte"},{"title":"Angular","href":"/publishers/web/frameworks/angular"},{"title":"Vanilla JavaScript","href":"/publishers/web/frameworks/vanilla-js"}]},{"group":"Reward Users","pages":[{"title":"Post-Purchase Placements","href":"/publishers/web/guides/post-purchase-placements"}]},{"group":"Reduce Churn","pages":[{"title":"Reduce Churn at the Paywall","sidebarTitle":"At the Paywall","href":"/publishers/web/guides/intercept-paywall-abandonment"}]},{"group":"3rd Party Subscription Managers","pages":[{"title":"Using RevenueCat","sidebarTitle":"RevenueCat","href":"/publishers/web/guides/managers/revenuecat"}]},{"title":"Advanced UI","href":"/publishers/web/guides/advanced-ui"}]},{"group":"Updating the SDK","pages":[{"title":"Routine updates","href":"/publishers/web/guides/updating-sdk"},{"title":"Updating to 2.x","href":"/publishers/web/guides/updating-to-2-x"}]},{"group":"Concepts","pages":[{"title":"The Claim Flow","href":"/publishers/web/concepts/claim-flow"},{"title":"Sheet Variants","href":"/publishers/web/concepts/sheet-variants"}]},{"group":"SDK Reference","pages":[{"title":"Overview","href":"/publishers/web/sdk-reference/overview"},{"title":"configure()","href":"/publishers/web/sdk-reference/configure"},{"title":"identify()","href":"/publishers/web/sdk-reference/identify"},{"title":"setUserAttributes()","href":"/publishers/web/sdk-reference/set-user-attributes"},{"title":"setLanguage()","href":"/publishers/web/sdk-reference/set-language"},{"title":"clearLanguage()","href":"/publishers/web/sdk-reference/clear-language"},{"title":"reset()","href":"/publishers/web/sdk-reference/reset"},{"title":"show()","href":"/publishers/web/sdk-reference/show"},{"title":"redeem()","href":"/publishers/web/sdk-reference/redeem"},{"title":"placement()","href":"/publishers/web/sdk-reference/placement"},{"title":"isClaimEnabled","href":"/publishers/web/sdk-reference/is-claim-enabled"},{"title":"onStrictUnlockVerified()","href":"/publishers/web/sdk-reference/on-strict-unlock-verified"},{"title":"Error Handling","href":"/publishers/web/sdk-reference/errors"},{"title":"Webhook Ingestion","href":"/publishers/web/sdk-reference/webhook-ingestion"}]}]},{"group":"Bridges","pages":[{"group":"React Native","pages":[{"group":"Quickstart","pages":[{"title":"Install the SDK","href":"/publishers/react-native/quickstart/install"},{"title":"Configure the SDK","href":"/publishers/react-native/quickstart/configure"},{"title":"User Management","href":"/publishers/react-native/quickstart/user-management"},{"title":"Presenting Offers","href":"/publishers/react-native/quickstart/present-offers"}]},{"group":"Guides","pages":[{"title":"React Native Integration Patterns","href":"/publishers/react-native/guides/integration-patterns"},{"group":"Reduce Churn","pages":[{"title":"Add Subscription Product","href":"/publishers/react-native/guides/add-subscription-product"}]}]},{"group":"Updating the SDK","pages":[{"title":"Routine updates","href":"/publishers/react-native/guides/updating-sdk"},{"title":"Updating to 2.x","href":"/publishers/react-native/guides/updating-to-2-x"}]},{"group":"SDK Reference","pages":[{"title":"configure()","href":"/publishers/react-native/sdk-reference/configure"},{"title":"identify()","href":"/publishers/react-native/sdk-reference/identify"},{"title":"setUserAttributes()","href":"/publishers/react-native/sdk-reference/set-user-attributes"},{"title":"setLanguage()","href":"/publishers/react-native/sdk-reference/set-language"},{"title":"clearLanguage()","href":"/publishers/react-native/sdk-reference/clear-language"},{"title":"reset()","href":"/publishers/react-native/sdk-reference/reset"},{"title":"placement()","href":"/publishers/react-native/sdk-reference/placement"},{"title":"PurchaseController","href":"/publishers/react-native/sdk-reference/purchase-controller"},{"title":"onOutcome()","href":"/publishers/react-native/sdk-reference/outcomes"},{"title":"setClaimEnabled()","href":"/publishers/react-native/sdk-reference/set-claim-enabled"},{"title":"UserAttributes","href":"/publishers/react-native/sdk-reference/user-attributes"},{"title":"PresentationResult","description":"The factual record of a placement presentation: two independent funnels plus how the sheet ended","href":"/publishers/react-native/sdk-reference/presentation-result"},{"title":"Errors","href":"/publishers/react-native/sdk-reference/errors"}]}]},{"group":"Flutter","pages":[{"group":"Quickstart","pages":[{"title":"Install the SDK","description":"Add the Encore Flutter SDK to your project. The plugin bridges to the native iOS and Android SDKs via platform channels.","href":"/publishers/flutter/quickstart/install"},{"title":"Configure the SDK","href":"/publishers/flutter/quickstart/configure"},{"title":"User Management","href":"/publishers/flutter/quickstart/user-management"},{"title":"Presenting Offers","href":"/publishers/flutter/quickstart/present-offers"}]},{"group":"Guides","pages":[{"title":"Flutter Integration Patterns","href":"/publishers/flutter/guides/integration-patterns"},{"group":"Reduce Churn","pages":[{"title":"Add Subscription Product","href":"/publishers/flutter/guides/add-subscription-product"}]}]},{"group":"Updating the SDK","pages":[{"title":"Routine updates","href":"/publishers/flutter/guides/updating-sdk"},{"title":"Updating to 2.x","href":"/publishers/flutter/guides/updating-to-2-x"}]},{"group":"SDK Reference","pages":[{"title":"Overview","href":"/publishers/flutter/sdk-reference/overview"},{"title":"configure()","href":"/publishers/flutter/sdk-reference/configure"},{"title":"identify()","href":"/publishers/flutter/sdk-reference/identify"},{"title":"setUserAttributes()","href":"/publishers/flutter/sdk-reference/set-user-attributes"},{"title":"setLanguage()","href":"/publishers/flutter/sdk-reference/set-language"},{"title":"clearLanguage()","href":"/publishers/flutter/sdk-reference/clear-language"},{"title":"reset()","href":"/publishers/flutter/sdk-reference/reset"},{"title":"placement()","href":"/publishers/flutter/sdk-reference/placement"},{"title":"EncorePurchaseController","href":"/publishers/flutter/sdk-reference/purchase-controller"},{"title":"outcomes","href":"/publishers/flutter/sdk-reference/outcomes"},{"title":"setClaimEnabled()","href":"/publishers/flutter/sdk-reference/set-claim-enabled"},{"title":"EncoreUserAttributes","href":"/publishers/flutter/sdk-reference/user-attributes"},{"title":"EncorePresentationResult","href":"/publishers/flutter/sdk-reference/presentation-result"},{"title":"EncoreDismissReason","href":"/publishers/flutter/sdk-reference/dismiss-reason"},{"title":"Errors","href":"/publishers/flutter/sdk-reference/errors"}]}]}]}]},{"tab":"Server API","icon":"server","pages":[{"title":"Server API","href":"/publishers/offers-api/guides/receive-completion-events"}]}]},{"product":"Advertisers","icon":"bullhorn","pages":[{"title":"Advertisers","href":"/advertisers/integration"}]}]},"title":"Errors - Encore","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}