This guide explains how to integrate the onboarding experience directly into your application. Use it when you want users to complete onboarding on your own site instead of redirecting them to a Syntage-hosted page.
Include the onboarding script
To get started, add the following script to your application:
<script
id="syntage-onboarding-id"
type="text/javascript"
src="https://onboarding.syntage.com/script.min.js"
data-key="YOUR_COMPANY_SLUG"
async
></script>
Get your slug from the Entity Onboarding configuration page.
Start onboarding
Once the script is added, you can access the available methods via window.syntage.onboarding. To start the onboarding process, use the init() method. Specify which data you want to request from users.
Example of initialization with sat only:
window.syntage.onboarding.init({ sat: true });
Example of initialization with buroDeCredito only:
window.syntage.onboarding.init({ buroDeCredito: true });
To include both parameters:
window.syntage.onboarding.init({ sat: true, buroDeCredito: true });
The option values must be boolean.
Test environment
To use onboarding in sandbox, add the sandbox script to your application. The sandbox script displays a warning that onboarding is in test mode.
<script
id="syntage-onboarding-id"
type="text/javascript"
src="https://onboarding.sandbox.syntage.com/script.min.js"
data-key="YOUR_COMPANY_SLUG"
async
></script>
Event subscriptions
The window.syntage.onboarding object provides a subscribe method to receive onboarding events.
To subscribe to the success event, use the following code:
window.syntage.onboarding.subscribe("syntage.onboarding.success", (_, step) => {
console.info("syntage.onboarding.success", step);
});
The step parameter returns sat or buroDeCredito.
To subscribe to error events, use the following code:
window.syntage.onboarding.subscribe("syntage.onboarding.error", (_, error) => {
console.info("syntage.onboarding.error", error);
});
The returned error object contains a code and a message. Example of an error:
{
"code": "ERROR_CODE",
"step": "sat"
}
Error descriptions
- Credential disabled:
credentialDisabled
- Credential invalid:
credentialInvalid
- Generic error:
error
- Unknown error:
unknownError
Content Security Policies
Content Security Policies (CSP) are delivered as a header to your user’s browser by your web server. They declare which dynamic resources are allowed to load on your page.
If there is a Content Security Policy issue, you will see something similar to the below error:
Refused to load the script 'https://onboarding.syntage.com/script.min.js' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' 'unsafe-inline'" ...
If needed, include Syntage in your CSP configuration:
default-src ... https://*.syntage.com
frame-src ... https://*.syntage.com
Tips
If the script is not yet loaded when executing init(), you can listen for the entityOnboardingLoaded event to ensure proper initialization:
try {
window.syntage.onboarding.init({ ... });
} catch {
window.addEventListener("entityOnboardingLoaded", (e) => {
window.syntage.onboarding.init({ ... });
});
}
Using with TypeScript
type SyntageOnboarding = {
onboarding: {
init(options: { sat: boolean; buroDeCredito: boolean }): void;
destroy(): void;
subscribe<T extends 'syntage.onboarding.success' | 'syntage.onboarding.error'>(
event: T,
callback: T extends 'syntage.onboarding.success'
? (event: T, step: 'sat' | 'buroDeCredito') => void
: (
event: T,
error: {
code: 'credentialDisabled' | 'credentialInvalid' | 'error' | 'unknownError';
step: 'sat' | 'buroDeCredito';
},
) => void,
): void;
};
};
interface Window {
syntage: SyntageOnboarding;
}
Using with React
In Next.js, you can use the script tag to include this script in your application. When using only React, you can use the react-helmet library to manage scripts.
You can also create a custom hook to inject the script into your application:
Use https://onboarding.sandbox.syntage.com/script.min.js when testing onboarding in sandbox.
const useImportWidgetScript = ({ scriptUrl, slug, sandbox }) => {
const scriptRef = useRef(null);
useEffect(() => {
if (!slug || typeof slug !== 'string') {
console.error('Invalid slug provided.');
return;
}
const script = document.createElement('script');
script.async = true;
script.src = scriptUrl;
script.setAttribute('data-key', slug);
if (sandbox) {
script.setAttribute('data-sandbox', sandbox);
}
scriptRef.current = script;
document.body.appendChild(script);
return () => {
if (scriptRef.current) {
document.body.removeChild(scriptRef.current);
scriptRef.current = null;
}
};
}, [scriptUrl, slug, sandbox]);
};
// Usage
useImportWidgetScript({
scriptUrl: "https://onboarding.syntage.com/script.min.js",
slug: "YOUR_COMPANY_SLUG",
sandbox: false,
});