# Friendly Captcha Developer Hub > Documentation and tutorials for integrating Friendly Captcha — widget SDK, server-side validation, risk intelligence, and enterprise features. ## docs ### v2 Friendly Captcha is a service that protects websites from bots and abuse in a privacy-friendly and accessible way. To learn more about the company or service, you can visit the Friendly Captcha website. - [Introduction](/docs/v2.md): Friendly Captcha is a service that protects websites from bots and abuse in a privacy-friendly and accessible way. To learn more about the company or service, you can visit the Friendly Captcha website. - [Server-side Validation](/docs/v2/api.md): Authentication - [Authentication](/docs/v2/api/authentication.md): To make requests to the Friendly Captcha API you need to prove who you are. You do this by passing an API key in a header. - [/api/v2/captcha/siteverify](/docs/v2/api/siteverify.md): The siteverify endpoint is used to verify captcha responses. A captcha response is the value that is embedded in your form by the captcha widget when the challenge has been completed. - [Customizing the Widget Banner Link](/docs/v2/customizing-widget-banner-link.md): While the widget's banner link color cannot be customized through the dashboard's theme settings, you can easily modify it using CSS on your webpage. - [Enterprise](/docs/v2/enterprise.md): Friendly Captcha is a service that protects websites from bots and abuse in a privacy-friendly and accessible way. - [Compliance+ Add-On](/docs/v2/enterprise/compliance-plus-add-on.md): The Friendly Captcha Compliance+ Add-On is an optional extra on the Enterprise plan. It is tailor-made to help you reduce compliance effort and risk. - [Audit Logs](/docs/v2/enterprise/compliance-plus-add-on/audit-logs.md): The Audit Logs feature is part of the Compliance+ Add-On. - [Enhanced Access Control](/docs/v2/enterprise/compliance-plus-add-on/enhanced-access-control.md): The Enhanced Access Control feature is part of the Compliance+ Add-On. - [Single Sign-On (SSO)](/docs/v2/enterprise/compliance-plus-add-on/single-sign-on.md): The Single Sign-On feature is part of the Compliance+ Add-On. - [Getting Started](/docs/v2/getting-started.md): Friendly Captcha is a service that protects your websites and applications from automated abuse. - [Install the widget](/docs/v2/getting-started/install.md): Option A: HTML Scripts - [Create a sitekey](/docs/v2/getting-started/setup.md): Log in to your Friendly Captcha account and head to the Applications page. - [Verify the response](/docs/v2/getting-started/verify.md): When the captcha challenge is completed by the user, the user's browser receives a piece of text that proves that they completed the challenge. This proof is called the response. - [Guides](/docs/v2/guides.md): Advanced - [Automated Testing](/docs/v2/guides/automated-testing.md): Testing can be at odds with a captcha you add to your website or app. Perhaps you use automated testing tools like Cypress, Selenium, or Puppeteer. - [Browser Support](/docs/v2/guides/browser-support.md): All modern browsers are supported, on both mobile and desktop, all releases up to at least 8 years old. - [Content Security Policy (CSP)](/docs/v2/guides/csp.md): Content Security Policy is a way to secure your website from cross-site scripting (XSS). - [Dedicated EU Endpoint](/docs/v2/guides/eu-endpoint.md): By default the FriendlyCaptcha widget talks to our global service served from all over the world to retrieve CAPTCHA challenges. Depending on your user's geography, this request may be served from outside the EU. - [Invisible CAPTCHA](/docs/v2/guides/invisible-captcha.md): To create a fully invisible user experience, it is possible to hide the Friendly Captcha widget on your site. Before doing so, there are some considerations to make. This guide will explain the considerations and then show how to safely hide the widget. - [Language Detection](/docs/v2/guides/localization.md): If your website is in German it makes sense to have the widget in German too. - [Migrating from hCaptcha](/docs/v2/guides/migrating-from-hcaptcha.md): Switching from hCaptcha to Friendly Captcha is straightforward. - [Migrating from reCAPTCHA](/docs/v2/guides/migrating-from-recaptcha.md): Switching from Google's reCAPTCHA (v2) to Friendly Captcha is straightforward. - [Risk-Based Authentication using Risk Intelligence](/docs/v2/guides/risk-based-authentication-using-risk-intelligence.md): This guide shows how to build a simple risk-based authentication flow using Risk Intelligence. Risk-based authentication means using signals from the browsing session to make logging in more difficult (or easier) depending on the perceived risk level. In this particular example, we will use Risk Intelligence data to require an additional confirmation when the user is logging in from an unrecognized browser. - [Self-Hosted Endpoint](/docs/v2/guides/self-hosted-endpoint.md): The Self-Hosted Endpoint feature is only available for Friendly Captcha v2. - [Upgrading from v1 to v2](/docs/v2/guides/upgrading-from-v1.md): This guide describes how to upgrade from v1 to v2 of Friendly Captcha. - [Backend Integration](/docs/v2/guides/upgrading-from-v1/backend-integration.md): 1. Change the field name in your forms - [Client (JavaScript API)](/docs/v2/guides/upgrading-from-v1/javascript-api.md): 1. Install the new SDK - [Client (CDN script)](/docs/v2/guides/upgrading-from-v1/script.md): This guide runs you through the changes you will have to make when switching from version 1 to version 2 of the Friendly Captcha widget if you are using the script tags. - [Captcha Warning](/docs/v2/guides/widget-warning.md): Friendly Captcha may display a warning message that indicates billing problems or other misconfigurations. This page explains what each warning means and how to resolve it. - [Risk Intelligence](/docs/v2/risk-intelligence.md): Risk Intelligence helps make decisions about the trustworthiness of users interacting with your services. - [Format](/docs/v2/risk-intelligence/format.md): Risk Intelligence data is returned in a structured JSON format that includes various risk signals and scores. The exact structure of the data may vary depending on which modules you have enabled on your account (as of writing, all modules are included by default). - [Getting Started with Risk Intelligence](/docs/v2/risk-intelligence/getting-started.md): There are two parts to getting Risk Intelligence data. First, you generate a Risk Intelligence token**_ in your project's front-end. Second, you use that token to retrieve Risk Intelligence data_ from the Friendly Captcha API via your project's back-end. - [Generate a Risk Intelligence token](/docs/v2/risk-intelligence/getting-started/generate.md): You can generate a token directly using JavaScript, or you can use an HTML element to automatically generate a token and embed it in a `` element. - [Retrieve Risk Intelligence data](/docs/v2/risk-intelligence/getting-started/retrieve.md): To retrieve Risk Intelligence data using a token, you need to send a request containing the token authenticated by the Friendly Captcha API key you created in the first step. - [Create a sitekey and API key](/docs/v2/risk-intelligence/getting-started/setup.md): Sitekey - [Risk Intelligence On Captcha Challenge](/docs/v2/risk-intelligence/on-captcha-challenge.md): As a paid add-on we offer Risk Intelligence data when verifying any Friendly Captcha v2 challenge. This feature simplifies your integration by allowing you to get risk scores and signals about the user who solved the captcha challenge without needing to make a separate API call to our Risk Intelligence API or change your frontend integration. - [Use Cases](/docs/v2/risk-intelligence/use-cases.md): Risk Intelligence data can be used in various ways to enhance the security and fraud detection capabilities of your applications. Here we describe some common use cases for Risk Intelligence data. - [Widget SDK](/docs/v2/sdk.md): The SDK is the code you add to your website to display captcha widgets on your website. - [Configuration](/docs/v2/sdk/configuration.md): There are two ways you can configure the behavior of the widget. - [Events](/docs/v2/sdk/events.md): The captcha widget emits DOM events which allow you to write code that reacts to changes in the widget. - [Lifecycle](/docs/v2/sdk/lifecycle.md): The widget has a fixed set of states it can be in. - [API](/docs/v2/sdk/reference.md): Home - [sdk](/docs/v2/sdk/reference/sdk.md): @friendlycaptcha/sdk - [APIEndpoint](/docs/v2/sdk/reference/sdk.apiendpoint.md): @friendlycaptcha/sdk > APIEndpoint - [CreateWidgetOptions](/docs/v2/sdk/reference/sdk.createwidgetoptions.md): @friendlycaptcha/sdk > CreateWidgetOptions - [CreateWidgetOptions.apiEndpoint](/docs/v2/sdk/reference/sdk.createwidgetoptions.apiendpoint.md): @friendlycaptcha/sdk > CreateWidgetOptions > apiEndpoint - [CreateWidgetOptions.element](/docs/v2/sdk/reference/sdk.createwidgetoptions.element.md): @friendlycaptcha/sdk > CreateWidgetOptions > element - [CreateWidgetOptions.formFieldName](/docs/v2/sdk/reference/sdk.createwidgetoptions.formfieldname.md): @friendlycaptcha/sdk > CreateWidgetOptions > formFieldName - [CreateWidgetOptions.language](/docs/v2/sdk/reference/sdk.createwidgetoptions.language.md): @friendlycaptcha/sdk > CreateWidgetOptions > language - [CreateWidgetOptions.sitekey](/docs/v2/sdk/reference/sdk.createwidgetoptions.sitekey.md): @friendlycaptcha/sdk > CreateWidgetOptions > sitekey - [CreateWidgetOptions.startMode](/docs/v2/sdk/reference/sdk.createwidgetoptions.startmode.md): @friendlycaptcha/sdk > CreateWidgetOptions > startMode - [CreateWidgetOptions.theme](/docs/v2/sdk/reference/sdk.createwidgetoptions.theme.md): @friendlycaptcha/sdk > CreateWidgetOptions > theme - [FRCEventData](/docs/v2/sdk/reference/sdk.frceventdata.md): @friendlycaptcha/sdk > FRCEventData - [FRCEventMap](/docs/v2/sdk/reference/sdk.frceventmap.md): @friendlycaptcha/sdk > FRCEventMap - [FRCEventMap."frc:riskintelligence.complete"](/docs/v2/sdk/reference/sdk.frceventmap._frc_riskintelligence.complete_.md): @friendlycaptcha/sdk > FRCEventMap > "frc:riskintelligence.complete" - [FRCEventMap."frc:riskintelligence.error"](/docs/v2/sdk/reference/sdk.frceventmap._frc_riskintelligence.error_.md): @friendlycaptcha/sdk > FRCEventMap > "frc:riskintelligence.error" - [FRCEventMap."frc:riskintelligence.expire"](/docs/v2/sdk/reference/sdk.frceventmap._frc_riskintelligence.expire_.md): @friendlycaptcha/sdk > FRCEventMap > "frc:riskintelligence.expire" - [FRCEventMap."frc:widget.complete"](/docs/v2/sdk/reference/sdk.frceventmap._frc_widget.complete_.md): @friendlycaptcha/sdk > FRCEventMap > "frc:widget.complete" - [FRCEventMap."frc:widget.error"](/docs/v2/sdk/reference/sdk.frceventmap._frc_widget.error_.md): @friendlycaptcha/sdk > FRCEventMap > "frc:widget.error" - [FRCEventMap."frc:widget.expire"](/docs/v2/sdk/reference/sdk.frceventmap._frc_widget.expire_.md): @friendlycaptcha/sdk > FRCEventMap > "frc:widget.expire" - [FRCEventMap."frc:widget.reset"](/docs/v2/sdk/reference/sdk.frceventmap._frc_widget.reset_.md): @friendlycaptcha/sdk > FRCEventMap > "frc:widget.reset" - [FRCEventMap."frc:widget.statechange"](/docs/v2/sdk/reference/sdk.frceventmap._frc_widget.statechange_.md): @friendlycaptcha/sdk > FRCEventMap > "frc:widget.statechange" - [FRCEventName](/docs/v2/sdk/reference/sdk.frceventname.md): @friendlycaptcha/sdk > FRCEventName - [FRCRiskIntelligenceCompleteEvent](/docs/v2/sdk/reference/sdk.frcriskintelligencecompleteevent.md): @friendlycaptcha/sdk > FRCRiskIntelligenceCompleteEvent - [FRCRiskIntelligenceCompleteEventData](/docs/v2/sdk/reference/sdk.frcriskintelligencecompleteeventdata.md): @friendlycaptcha/sdk > FRCRiskIntelligenceCompleteEventData - [FRCRiskIntelligenceCompleteEventData.expiresAt](/docs/v2/sdk/reference/sdk.frcriskintelligencecompleteeventdata.expiresat.md): @friendlycaptcha/sdk > FRCRiskIntelligenceCompleteEventData > expiresAt - [FRCRiskIntelligenceCompleteEventData.name](/docs/v2/sdk/reference/sdk.frcriskintelligencecompleteeventdata.name.md): @friendlycaptcha/sdk > FRCRiskIntelligenceCompleteEventData > name - [FRCRiskIntelligenceCompleteEventData.token](/docs/v2/sdk/reference/sdk.frcriskintelligencecompleteeventdata.token.md): @friendlycaptcha/sdk > FRCRiskIntelligenceCompleteEventData > token - [FRCRiskIntelligenceCompleteEventName](/docs/v2/sdk/reference/sdk.frcriskintelligencecompleteeventname.md): @friendlycaptcha/sdk > FRCRiskIntelligenceCompleteEventName - [FRCRiskIntelligenceErrorEvent](/docs/v2/sdk/reference/sdk.frcriskintelligenceerrorevent.md): @friendlycaptcha/sdk > FRCRiskIntelligenceErrorEvent - [FRCRiskIntelligenceErrorEventData](/docs/v2/sdk/reference/sdk.frcriskintelligenceerroreventdata.md): @friendlycaptcha/sdk > FRCRiskIntelligenceErrorEventData - [FRCRiskIntelligenceErrorEventData.error](/docs/v2/sdk/reference/sdk.frcriskintelligenceerroreventdata.error.md): @friendlycaptcha/sdk > FRCRiskIntelligenceErrorEventData > error - [FRCRiskIntelligenceErrorEventData.name](/docs/v2/sdk/reference/sdk.frcriskintelligenceerroreventdata.name.md): @friendlycaptcha/sdk > FRCRiskIntelligenceErrorEventData > name - [FRCRiskIntelligenceErrorEventName](/docs/v2/sdk/reference/sdk.frcriskintelligenceerroreventname.md): @friendlycaptcha/sdk > FRCRiskIntelligenceErrorEventName - [FRCRiskIntelligenceExpireEvent](/docs/v2/sdk/reference/sdk.frcriskintelligenceexpireevent.md): @friendlycaptcha/sdk > FRCRiskIntelligenceExpireEvent - [FRCRiskIntelligenceExpireEventData](/docs/v2/sdk/reference/sdk.frcriskintelligenceexpireeventdata.md): @friendlycaptcha/sdk > FRCRiskIntelligenceExpireEventData - [FRCRiskIntelligenceExpireEventData.name](/docs/v2/sdk/reference/sdk.frcriskintelligenceexpireeventdata.name.md): @friendlycaptcha/sdk > FRCRiskIntelligenceExpireEventData > name - [FRCRiskIntelligenceExpireEventName](/docs/v2/sdk/reference/sdk.frcriskintelligenceexpireeventname.md): @friendlycaptcha/sdk > FRCRiskIntelligenceExpireEventName - [FRCWidgetCompleteEvent](/docs/v2/sdk/reference/sdk.frcwidgetcompleteevent.md): @friendlycaptcha/sdk > FRCWidgetCompleteEvent - [FRCWidgetCompleteEventData](/docs/v2/sdk/reference/sdk.frcwidgetcompleteeventdata.md): @friendlycaptcha/sdk > FRCWidgetCompleteEventData - [FRCWidgetCompleteEventData.id](/docs/v2/sdk/reference/sdk.frcwidgetcompleteeventdata.id.md): @friendlycaptcha/sdk > FRCWidgetCompleteEventData > id - [FRCWidgetCompleteEventData.name](/docs/v2/sdk/reference/sdk.frcwidgetcompleteeventdata.name.md): @friendlycaptcha/sdk > FRCWidgetCompleteEventData > name - [FRCWidgetCompleteEventData.response](/docs/v2/sdk/reference/sdk.frcwidgetcompleteeventdata.response.md): @friendlycaptcha/sdk > FRCWidgetCompleteEventData > response - [FRCWidgetCompleteEventData.state](/docs/v2/sdk/reference/sdk.frcwidgetcompleteeventdata.state.md): @friendlycaptcha/sdk > FRCWidgetCompleteEventData > state - [FRCWidgetCompleteEventName](/docs/v2/sdk/reference/sdk.frcwidgetcompleteeventname.md): @friendlycaptcha/sdk > FRCWidgetCompleteEventName - [FRCWidgetErrorEventData](/docs/v2/sdk/reference/sdk.frcwidgeterroreventdata.md): @friendlycaptcha/sdk > FRCWidgetErrorEventData - [FRCWidgetErrorEventData.error](/docs/v2/sdk/reference/sdk.frcwidgeterroreventdata.error.md): @friendlycaptcha/sdk > FRCWidgetErrorEventData > error - [FRCWidgetErrorEventData.id](/docs/v2/sdk/reference/sdk.frcwidgeterroreventdata.id.md): @friendlycaptcha/sdk > FRCWidgetErrorEventData > id - [FRCWidgetErrorEventData.name](/docs/v2/sdk/reference/sdk.frcwidgeterroreventdata.name.md): @friendlycaptcha/sdk > FRCWidgetErrorEventData > name - [FRCWidgetErrorEventData.response](/docs/v2/sdk/reference/sdk.frcwidgeterroreventdata.response.md): @friendlycaptcha/sdk > FRCWidgetErrorEventData > response - [FRCWidgetErrorEventData.state](/docs/v2/sdk/reference/sdk.frcwidgeterroreventdata.state.md): @friendlycaptcha/sdk > FRCWidgetErrorEventData > state - [FRCWidgetErrorEventName](/docs/v2/sdk/reference/sdk.frcwidgeterroreventname.md): @friendlycaptcha/sdk > FRCWidgetErrorEventName - [FRCWidgetExpireEventData](/docs/v2/sdk/reference/sdk.frcwidgetexpireeventdata.md): @friendlycaptcha/sdk > FRCWidgetExpireEventData - [FRCWidgetExpireEventData.id](/docs/v2/sdk/reference/sdk.frcwidgetexpireeventdata.id.md): @friendlycaptcha/sdk > FRCWidgetExpireEventData > id - [FRCWidgetExpireEventData.name](/docs/v2/sdk/reference/sdk.frcwidgetexpireeventdata.name.md): @friendlycaptcha/sdk > FRCWidgetExpireEventData > name - [FRCWidgetExpireEventData.response](/docs/v2/sdk/reference/sdk.frcwidgetexpireeventdata.response.md): @friendlycaptcha/sdk > FRCWidgetExpireEventData > response - [FRCWidgetExpireEventData.state](/docs/v2/sdk/reference/sdk.frcwidgetexpireeventdata.state.md): @friendlycaptcha/sdk > FRCWidgetExpireEventData > state - [FRCWidgetExpireEventName](/docs/v2/sdk/reference/sdk.frcwidgetexpireeventname.md): @friendlycaptcha/sdk > FRCWidgetExpireEventName - [FRCWidgetResetEventData](/docs/v2/sdk/reference/sdk.frcwidgetreseteventdata.md): @friendlycaptcha/sdk > FRCWidgetResetEventData - [FRCWidgetResetEventData.id](/docs/v2/sdk/reference/sdk.frcwidgetreseteventdata.id.md): @friendlycaptcha/sdk > FRCWidgetResetEventData > id - [FRCWidgetResetEventData.name](/docs/v2/sdk/reference/sdk.frcwidgetreseteventdata.name.md): @friendlycaptcha/sdk > FRCWidgetResetEventData > name - [FRCWidgetResetEventData.response](/docs/v2/sdk/reference/sdk.frcwidgetreseteventdata.response.md): @friendlycaptcha/sdk > FRCWidgetResetEventData > response - [FRCWidgetResetEventData.state](/docs/v2/sdk/reference/sdk.frcwidgetreseteventdata.state.md): @friendlycaptcha/sdk > FRCWidgetResetEventData > state - [FRCWidgetResetEventData.trigger](/docs/v2/sdk/reference/sdk.frcwidgetreseteventdata.trigger.md): @friendlycaptcha/sdk > FRCWidgetResetEventData > trigger - [FRCWidgetResetEventName](/docs/v2/sdk/reference/sdk.frcwidgetreseteventname.md): @friendlycaptcha/sdk > FRCWidgetResetEventName - [FRCWidgetStateChangeEvent](/docs/v2/sdk/reference/sdk.frcwidgetstatechangeevent.md): @friendlycaptcha/sdk > FRCWidgetStateChangeEvent - [FRCWidgetStateChangeEventData](/docs/v2/sdk/reference/sdk.frcwidgetstatechangeeventdata.md): @friendlycaptcha/sdk > FRCWidgetStateChangeEventData - [FRCWidgetStateChangeEventData.error](/docs/v2/sdk/reference/sdk.frcwidgetstatechangeeventdata.error.md): @friendlycaptcha/sdk > FRCWidgetStateChangeEventData > error - [FRCWidgetStateChangeEventData.id](/docs/v2/sdk/reference/sdk.frcwidgetstatechangeeventdata.id.md): @friendlycaptcha/sdk > FRCWidgetStateChangeEventData > id - [FRCWidgetStateChangeEventData.mode](/docs/v2/sdk/reference/sdk.frcwidgetstatechangeeventdata.mode.md): @friendlycaptcha/sdk > FRCWidgetStateChangeEventData > mode - [FRCWidgetStateChangeEventData.name](/docs/v2/sdk/reference/sdk.frcwidgetstatechangeeventdata.name.md): @friendlycaptcha/sdk > FRCWidgetStateChangeEventData > name - [FRCWidgetStateChangeEventData.response](/docs/v2/sdk/reference/sdk.frcwidgetstatechangeeventdata.response.md): @friendlycaptcha/sdk > FRCWidgetStateChangeEventData > response - [FRCWidgetStateChangeEventData.state](/docs/v2/sdk/reference/sdk.frcwidgetstatechangeeventdata.state.md): @friendlycaptcha/sdk > FRCWidgetStateChangeEventData > state - [FRCWidgetStateChangeEventName](/docs/v2/sdk/reference/sdk.frcwidgetstatechangeeventname.md): @friendlycaptcha/sdk > FRCWidgetStateChangeEventName - [FRCWidgetWidgetErrorEvent](/docs/v2/sdk/reference/sdk.frcwidgetwidgeterrorevent.md): @friendlycaptcha/sdk > FRCWidgetWidgetErrorEvent - [FRCWidgetWidgetExpireEvent](/docs/v2/sdk/reference/sdk.frcwidgetwidgetexpireevent.md): @friendlycaptcha/sdk > FRCWidgetWidgetExpireEvent - [FRCWidgetWidgetResetEvent](/docs/v2/sdk/reference/sdk.frcwidgetwidgetresetevent.md): @friendlycaptcha/sdk > FRCWidgetWidgetResetEvent - [FriendlyCaptchaSDK](/docs/v2/sdk/reference/sdk.friendlycaptchasdk.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK - [FriendlyCaptchaSDK.(constructor)](/docs/v2/sdk/reference/sdk.friendlycaptchasdk._constructor_.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK > (constructor) - [FriendlyCaptchaSDK.attach()](/docs/v2/sdk/reference/sdk.friendlycaptchasdk.attach.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK > attach - [FriendlyCaptchaSDK.attached](/docs/v2/sdk/reference/sdk.friendlycaptchasdk.attached.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK > attached - [FriendlyCaptchaSDK.clear()](/docs/v2/sdk/reference/sdk.friendlycaptchasdk.clear.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK > clear - [FriendlyCaptchaSDK.clearRiskIntelligence()](/docs/v2/sdk/reference/sdk.friendlycaptchasdk.clearriskintelligence.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK > clearRiskIntelligence - [FriendlyCaptchaSDK.createWidget()](/docs/v2/sdk/reference/sdk.friendlycaptchasdk.createwidget.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK > createWidget - [FriendlyCaptchaSDK.getAllRiskIntelligenceHandles()](/docs/v2/sdk/reference/sdk.friendlycaptchasdk.getallriskintelligencehandles.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK > getAllRiskIntelligenceHandles - [FriendlyCaptchaSDK.getAllWidgets()](/docs/v2/sdk/reference/sdk.friendlycaptchasdk.getallwidgets.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK > getAllWidgets - [FriendlyCaptchaSDK.getWidgetById()](/docs/v2/sdk/reference/sdk.friendlycaptchasdk.getwidgetbyid.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK > getWidgetById - [FriendlyCaptchaSDK.riskIntelligence()](/docs/v2/sdk/reference/sdk.friendlycaptchasdk.riskintelligence.md): @friendlycaptcha/sdk > FriendlyCaptchaSDK > riskIntelligence - [FriendlyCaptchaSDKOptions](/docs/v2/sdk/reference/sdk.friendlycaptchasdkoptions.md): @friendlycaptcha/sdk > FriendlyCaptchaSDKOptions - [FriendlyCaptchaSDKOptions.apiEndpoint](/docs/v2/sdk/reference/sdk.friendlycaptchasdkoptions.apiendpoint.md): @friendlycaptcha/sdk > FriendlyCaptchaSDKOptions > apiEndpoint - [FriendlyCaptchaSDKOptions.disableEvalPatching](/docs/v2/sdk/reference/sdk.friendlycaptchasdkoptions.disableevalpatching.md): @friendlycaptcha/sdk > FriendlyCaptchaSDKOptions > disableEvalPatching - [FriendlyCaptchaSDKOptions.startAgent](/docs/v2/sdk/reference/sdk.friendlycaptchasdkoptions.startagent.md): @friendlycaptcha/sdk > FriendlyCaptchaSDKOptions > startAgent - [RiskIntelligenceClearOptions](/docs/v2/sdk/reference/sdk.riskintelligenceclearoptions.md): @friendlycaptcha/sdk > RiskIntelligenceClearOptions - [RiskIntelligenceClearOptions.apiEndpoint](/docs/v2/sdk/reference/sdk.riskintelligenceclearoptions.apiendpoint.md): @friendlycaptcha/sdk > RiskIntelligenceClearOptions > apiEndpoint - [RiskIntelligenceClearOptions.sitekey](/docs/v2/sdk/reference/sdk.riskintelligenceclearoptions.sitekey.md): @friendlycaptcha/sdk > RiskIntelligenceClearOptions > sitekey - [RiskIntelligenceErrorCode](/docs/v2/sdk/reference/sdk.riskintelligenceerrorcode.md): @friendlycaptcha/sdk > RiskIntelligenceErrorCode - [RiskIntelligenceErrorData](/docs/v2/sdk/reference/sdk.riskintelligenceerrordata.md): @friendlycaptcha/sdk > RiskIntelligenceErrorData - [RiskIntelligenceErrorData.code](/docs/v2/sdk/reference/sdk.riskintelligenceerrordata.code.md): @friendlycaptcha/sdk > RiskIntelligenceErrorData > code - [RiskIntelligenceErrorData.detail](/docs/v2/sdk/reference/sdk.riskintelligenceerrordata.detail.md): @friendlycaptcha/sdk > RiskIntelligenceErrorData > detail - [RiskIntelligenceGenerateData](/docs/v2/sdk/reference/sdk.riskintelligencegeneratedata.md): @friendlycaptcha/sdk > RiskIntelligenceGenerateData - [RiskIntelligenceGenerateData.expiresAt](/docs/v2/sdk/reference/sdk.riskintelligencegeneratedata.expiresat.md): @friendlycaptcha/sdk > RiskIntelligenceGenerateData > expiresAt - [RiskIntelligenceGenerateData.token](/docs/v2/sdk/reference/sdk.riskintelligencegeneratedata.token.md): @friendlycaptcha/sdk > RiskIntelligenceGenerateData > token - [RiskIntelligenceHandle](/docs/v2/sdk/reference/sdk.riskintelligencehandle.md): @friendlycaptcha/sdk > RiskIntelligenceHandle - [RiskIntelligenceHandle.addEventListener()](/docs/v2/sdk/reference/sdk.riskintelligencehandle.addeventlistener.md): @friendlycaptcha/sdk > RiskIntelligenceHandle > addEventListener - [RiskIntelligenceHandle.getData()](/docs/v2/sdk/reference/sdk.riskintelligencehandle.getdata.md): @friendlycaptcha/sdk > RiskIntelligenceHandle > getData - [RiskIntelligenceHandle.getElement()](/docs/v2/sdk/reference/sdk.riskintelligencehandle.getelement.md): @friendlycaptcha/sdk > RiskIntelligenceHandle > getElement - [RiskIntelligenceHandle.removeEventListener()](/docs/v2/sdk/reference/sdk.riskintelligencehandle.removeeventlistener.md): @friendlycaptcha/sdk > RiskIntelligenceHandle > removeEventListener - [RiskIntelligenceOptions](/docs/v2/sdk/reference/sdk.riskintelligenceoptions.md): @friendlycaptcha/sdk > RiskIntelligenceOptions - [RiskIntelligenceOptions.apiEndpoint](/docs/v2/sdk/reference/sdk.riskintelligenceoptions.apiendpoint.md): @friendlycaptcha/sdk > RiskIntelligenceOptions > apiEndpoint - [RiskIntelligenceOptions.bypassCache](/docs/v2/sdk/reference/sdk.riskintelligenceoptions.bypasscache.md): @friendlycaptcha/sdk > RiskIntelligenceOptions > bypassCache - [RiskIntelligenceOptions.sitekey](/docs/v2/sdk/reference/sdk.riskintelligenceoptions.sitekey.md): @friendlycaptcha/sdk > RiskIntelligenceOptions > sitekey - [SentinelResponse](/docs/v2/sdk/reference/sdk.sentinelresponse.md): @friendlycaptcha/sdk > SentinelResponse - [StartMode](/docs/v2/sdk/reference/sdk.startmode.md): @friendlycaptcha/sdk > StartMode - [WidgetErrorCode](/docs/v2/sdk/reference/sdk.widgeterrorcode.md): @friendlycaptcha/sdk > WidgetErrorCode - [WidgetErrorData](/docs/v2/sdk/reference/sdk.widgeterrordata.md): @friendlycaptcha/sdk > WidgetErrorData - [WidgetErrorData.code](/docs/v2/sdk/reference/sdk.widgeterrordata.code.md): @friendlycaptcha/sdk > WidgetErrorData > code - [WidgetErrorData.detail](/docs/v2/sdk/reference/sdk.widgeterrordata.detail.md): @friendlycaptcha/sdk > WidgetErrorData > detail - [WidgetErrorData.title](/docs/v2/sdk/reference/sdk.widgeterrordata.title.md): @friendlycaptcha/sdk > WidgetErrorData > title - [WidgetHandle](/docs/v2/sdk/reference/sdk.widgethandle.md): @friendlycaptcha/sdk > WidgetHandle - [WidgetHandle.addEventListener()](/docs/v2/sdk/reference/sdk.widgethandle.addeventlistener.md): @friendlycaptcha/sdk > WidgetHandle > addEventListener - [WidgetHandle.destroy()](/docs/v2/sdk/reference/sdk.widgethandle.destroy.md): @friendlycaptcha/sdk > WidgetHandle > destroy - [WidgetHandle.getElement()](/docs/v2/sdk/reference/sdk.widgethandle.getelement.md): @friendlycaptcha/sdk > WidgetHandle > getElement - [WidgetHandle.getResponse()](/docs/v2/sdk/reference/sdk.widgethandle.getresponse.md): @friendlycaptcha/sdk > WidgetHandle > getResponse - [WidgetHandle.getState()](/docs/v2/sdk/reference/sdk.widgethandle.getstate.md): @friendlycaptcha/sdk > WidgetHandle > getState - [WidgetHandle.id](/docs/v2/sdk/reference/sdk.widgethandle.id.md): @friendlycaptcha/sdk > WidgetHandle > id - [WidgetHandle.isDestroyed](/docs/v2/sdk/reference/sdk.widgethandle.isdestroyed.md): @friendlycaptcha/sdk > WidgetHandle > isDestroyed - [WidgetHandle.removeEventListener()](/docs/v2/sdk/reference/sdk.widgethandle.removeeventlistener.md): @friendlycaptcha/sdk > WidgetHandle > removeEventListener - [WidgetHandle.reset()](/docs/v2/sdk/reference/sdk.widgethandle.reset.md): @friendlycaptcha/sdk > WidgetHandle > reset - [WidgetHandle.sitekey](/docs/v2/sdk/reference/sdk.widgethandle.sitekey.md): @friendlycaptcha/sdk > WidgetHandle > sitekey - [WidgetHandle.start()](/docs/v2/sdk/reference/sdk.widgethandle.start.md): @friendlycaptcha/sdk > WidgetHandle > start - [WidgetHandle.startMode](/docs/v2/sdk/reference/sdk.widgethandle.startmode.md): @friendlycaptcha/sdk > WidgetHandle > startMode - [WidgetMode](/docs/v2/sdk/reference/sdk.widgetmode.md): @friendlycaptcha/sdk > WidgetMode - [WidgetResetOptions](/docs/v2/sdk/reference/sdk.widgetresetoptions.md): @friendlycaptcha/sdk > WidgetResetOptions - [WidgetResetTrigger](/docs/v2/sdk/reference/sdk.widgetresettrigger.md): @friendlycaptcha/sdk > WidgetResetTrigger - [WidgetState](/docs/v2/sdk/reference/sdk.widgetstate.md): @friendlycaptcha/sdk > WidgetState - [Use Cases](/docs/v2/use-cases.md): A collection of articles on various uses for Friendly Captcha. - [Account Takeover](/docs/v2/use-cases/account-takeover.md): Account takeover (ATO) is a type of identity theft where an attacker gains unauthorized access to a user's account. - [API Protection](/docs/v2/use-cases/api-protection.md): Your websites and apps likely rely on APIs to function. These APIs are vulnerable to abuse and attacks, which can lead to data breaches, service disruptions, and other security issues. - [Brute Force Attacks](/docs/v2/use-cases/brute-force-attacks.md): A brute force attack, also known as brute forcing, is an attempt to guess a web user’s credentials by trying every possible combination of characters. For websites and applications, the end goal of a brute force attack is account takeover (ATO), where the attacker gains unauthorized access to a different user's account. - [Credential Stuffing](/docs/v2/use-cases/credential-stuffing.md): Credential stuffing is a cyberattack technique where attackers use automated tools to try large numbers of username and password combinations, often obtained from previous data breaches, to gain unauthorized access to user accounts. The goal is to exploit the fact that many people reuse passwords across multiple sites, allowing attackers to compromise accounts on various platforms using the same credentials. - [Fake Accounts](/docs/v2/use-cases/fake-accounts.md): Fake accounts are a common problem on platforms, and they can be used for a variety of malicious purposes, such as spreading misinformation, harassing other users, engaging in fraudulent activities, or abusing your service otherwise. These accounts are often created using automated bots, which can quickly generate large numbers of fake accounts to overwhelm a platform. - [Payment Fraud](/docs/v2/use-cases/payment-fraud.md): Payment fraud is a significant concern for businesses and consumers alike. It involves unauthorized transactions, identity theft, and various schemes that can lead to financial losses. To combat payment fraud, organizations can implement several strategies: - [Spam Protection](/docs/v2/use-cases/spam-protection.md): Spam is a common problem for websites and apps that allow user-generated content or have a public-facing form. Spammers can use automated bots to flood your site with unwanted content, which can degrade the user experience, damage your reputation, and even lead to security issues. - [v1 and v2](/docs/v2/versions.md): There are two versions of the Friendly Captcha service, called v1 and v2. The second version contains technical and non-technical enhancements that come from state-of-the-art improvements and learnings from v1.