; }',
'-keep,allowobfuscation interface <1>',
'-keep,allowobfuscation,allowshrinking interface retrofit2.Call',
'-keep,allowobfuscation,allowshrinking class retrofit2.Response',
'-keep class com.google.gson.** { *; }',
'-keep public class * implements com.bumptech.glide.module.GlideModule',
'-dontwarn okhttp3.**',
'-dontwarn okio.**',
].join('\n'),
}
```
Bare CLI projects add the same rules to `android/app/proguard-rules.pro` instead.
### Troubleshooting EAS builds
The `DojahWidget` pod is fetched from a Git branch, and EAS caches it between builds. Force a fresh checkout:
```bash Terminal theme={null}
eas build --platform ios --profile development --clear-cache
```
The error mentions compiling against API 36 or needing AGP 8.9.1+. Make sure `"dojah-kyc-sdk-react-expo"` is listed in your `plugins` array — the plugin raises those versions during prebuild. If you keep native folders in the repo, re-run `npx expo prebuild --clean` and commit.
The native SDK requires iOS 14 or later. Set `ios.deploymentTarget` in the `expo-build-properties` plugin config (`"15.1"` is a safe value for recent Expo SDKs) and rebuild.
A usage description is missing. Every permission your flow touches needs an `infoPlist` entry in `app.json` — iOS terminates the app when one is absent.
Almost always R8 stripping the SDK. Add the ProGuard rules above. To confirm the cause quickly, temporarily disable shrinking and rebuild.
## WebView fallback
If you need a UI the native launcher doesn’t provide, render the hosted flow in a WebView:
```jsx Verify.jsx theme={null}
```
You can prefill the flow with query parameters such as `user_data[first_name]`, `user_data[email]`, `user_data[dob]`, and `metadata[user_id]`.
## Resources
**React Native CLI**
* [npm — dojah-kyc-sdk-react\_native](https://www.npmjs.com/package/dojah-kyc-sdk-react_native)
* [GitHub — dojah-inc/dojah-react-native-sdk](https://github.com/dojah-inc/dojah-react-native-sdk) (example app)
**Expo**
* [npm — dojah-kyc-sdk-react-expo](https://www.npmjs.com/package/dojah-kyc-sdk-react-expo)
* [GitHub — dojah-inc/dojah\_kyc\_sdk\_rn\_expo](https://github.com/dojah-inc/dojah_kyc_sdk_rn_expo) (example app)
* [Expo — EAS Build documentation](https://docs.expo.dev/build/introduction/) · [eas.json reference](https://docs.expo.dev/eas/json/)
**Underlying native SDKs**
* [GitHub — dojah-inc/sdk-swift](https://github.com/dojah-inc/sdk-swift) · [releases](https://github.com/dojah-inc/sdk-swift/releases)
* [GitHub — dojah-inc/sdk-kotlin](https://github.com/dojah-inc/sdk-kotlin) · [JitPack](https://jitpack.io/#dojah-inc/sdk-kotlin)
# Theming in EasyOnboard
Source: https://docs.dojah.io/api-reference/widget-sdks/theming-in-easyonboard
# Web (JavaScript)
Source: https://docs.dojah.io/api-reference/widget-sdks/web-javascript
Drop Dojah's hosted verification flow into any web page with the Connect widget — a single script tag, no framework required.
Drop Dojah’s hosted verification flow into any web page with the `Connect` widget — a single script, no framework required.
This is a **widget SDK** — it renders Dojah’s UI with your **public** key. Shared options & response events live in [Choosing an SDK](/api-reference/widget-sdks/choosing-an-sdk).
## Install
Add the widget script to your page. Don’t use `async`/`defer` — the inline code may run before the library loads.
```html index.html theme={null}
```
## Initialize
Create a `Connect` instance with your credentials and callbacks, then open it on a click:
```js app.js theme={null}
const options = {
app_id: "your_app_id",
p_key: "your_public_key",
type: "custom",
config: { widget_id: "your_widget_id" },
metadata: { user_id: "121" },
onSuccess: function (response) { console.log("Success", response) },
onError: function (err) { console.log("Error", err) },
onClose: function () { console.log("Widget closed") },
}
const connect = new Connect(options)
document.querySelector("#button-connect").addEventListener("click", function () {
connect.setup()
connect.open()
})
```
`type` can be `custom`, `verification`, `identification`, or `liveness`. See [Configuration options](/api-reference/widget-sdks/choosing-an-sdk#configuration-options) and [Handling the response](/api-reference/widget-sdks/choosing-an-sdk#handling-the-response) for the full set.
## TypeScript
`Connect` is attached to `window` at runtime, so declare it to keep TypeScript happy. Add a `types/index.d.ts` file and point `compilerOptions.typeRoots` at that folder:
```ts types/index.d.ts theme={null}
export {}
declare global {
interface Window {
Connect: any
}
}
```
Then instantiate it from `window`:
```ts app.ts theme={null}
const connect = new window.Connect(options)
```
## Resources
* [Widget script — widget.dojah.io/widget.js](https://widget.dojah.io/widget.js)
* [Hosted flow — identity.dojah.io](https://identity.dojah.io) · [EasyOnboard](/dashboard-guide/workflows/easyonboard)
* Framework wrappers: [React](/api-reference/widget-sdks/react) · [React Native](/api-reference/widget-sdks/react-native) · [Flutter](/api-reference/widget-sdks/flutter)
# Changelog — 2023
Source: https://docs.dojah.io/changelog/2023
Dojah product updates shipped in 2023.
## 2023
### Dec
New
Enhancement
Business Email Authentication & dashboard improvements
Business Email Authentication lets you control onboarding emails with a disposable-email toggle and a free-provider option. This release also added an on-site verification demo, downloadable AML lookup results, refreshed login screens with marketing updates, and a Glasses On upgrade allowing human review of glasses-on verifications.
### Nov
Developer
EasyOnboard JavaScript integration
Integrating the verification widget got easier: save your EasyOnboard flow, choose the "websdk" option in the integration section, then copy the generated JavaScript and paste it into your application to embed the ID verification widget.
### Oct
Enhancement
Fix
EasyOnboard improvements & verification customization
EasyOnboard improvements prevent duplicate flow titles, add a table delete button, and warn about unsaved changes, alongside various bug fixes. Advanced identity verification customization also arrived, letting businesses detect users by device brightness level and choose whether to verify with or without glasses from the Fraud Check settings.
# Changelog — 2024
Source: https://docs.dojah.io/changelog/2024
Dojah product updates shipped in 2024.
## 2024
### Aug
New
Compliance
Custom Questions & Verification Analytics
Custom Questions let you gather compliance information and assess user risk with single-select, multi-select, or open-answer fields added directly to EasyOnboard verification pages. Verification Analytics launched with status metrics, geographical distribution, conversion rate, average completion time, and flexible timeframe filtering for data-driven decisions.
### Apr
New
Multi-channel OTP verification
A more flexible OTP process lets you choose how users receive one-time passcodes — via SMS or WhatsApp — or send to both channels simultaneously for users on unreliable networks so codes always get through.
### Mar
Enhancement
New
Widget enhancements, Global Business Search & sidebar revamp
The ID widget gained Email OTP for BVN Advanced, file-upload controls, camera-flip on capture screens, consolidated EasyOnboard configuration, and multi-device screen control. Global Business Search added worldwide company lookup with reliable data sources, and the dashboard sidebar was revamped for clearer navigation and re-categorized products.
### Feb
New
Enhancement
Lookup overhaul, Business AML screening & Document Analysis
Easy Lookup was reworked to separate individual and business lookups and to support batch lookups across multiple users. AML screening expanded to cover business screening in one unified feature, and the no-code Document Analysis tool launched with a drag-and-drop interface, multi-document support, instant feedback, and detailed validity results.
# Changelog — 2025
Source: https://docs.dojah.io/changelog/2025
Dojah product updates shipped in 2025.
## 2025
### Dec
Fix
Dashboard navigation & UI fixes
Fixed navigation issues and UI inconsistencies on the dashboard, and corrected error handling for failed verifications to provide clearer feedback.
### Nov
Improvement
Compliance
Duplicate ID separation, cookie management & team roles
Duplicate ID and Resume Verification are now fully separated across the pipeline for independent configuration. A cookie management interface lets users manage preferences by category, and a default team role ensures consistent access permissions for newly created companies.
### Oct
New
Compliance
Digital Address Verification & Compliance Register
Comprehensive Digital Address Verification validates addresses through live geolocation tracking (50-meter radius), utility bill validation, and proof-of-address capture, with automated cross-checks and fraud controls for mismatched data. The Compliance Register launched covering Fintech, Logistics, Real Estate, Crypto, and E-commerce with requirements, deadlines, and status tracking.
### Sep
Enhancement
Security
Liveness & Image Match scoring, Trust Page
Fine-tune EasyOnboard fraud checks with customizable threshold sliders for Liveness and Image Match (0–24 Failed, 25–64 Pending, 65–100 Successful). Updated User Data Match requires at least two of three names to match official records, a new Trust Page communicates security and compliance, and confirmation pages can now be customized per outcome.
### Aug
UX
Widget UI enhancements
A cleaner, more intuitive widget interface streamlines verification — reducing drop-offs during onboarding and ID verification, with smoother step transitions and improved clarity at each stage.
### Jul
New
Developer
Email notifications & API documentation revamp
Multiple team members can now receive email alerts for balance depletion and system updates via Settings → Email Notifications. The API documentation was restructured for a better developer experience — clearer endpoint descriptions, improved navigation, and detailed integration examples.
### Jun
Compliance
New
AML case management & Easy Authentication
AML screening evolved from simple watchlist checks into a full case management system — search, auto-generated results, case assignment, status updates, risk levels, ongoing monitoring, comments, audit trail, and PDF download. Easy Authentication also launched for liveness-based fast re-authentication of returning users.
### May
Fix
Bug fixes
Fixed navigation issues and UI inconsistencies on the dashboard, and corrected error handling for failed verifications.
### Apr
New
Compliance
Reverification
Reverification enables identity record updates to keep information valid and compliant. Triggered from the Verification Dashboard, the previous verification is marked invalid and the new attempt becomes active — with or without a reference ID, plus SDK integration via reference\_id or email parameters.
### Mar
Enhancement
Automated country detection & low-balance alerts
Geo-IP-based detection auto-selects the user's country at the start of verification, reducing friction and ID-type errors. A low-balance notification system adds real-time wallet monitoring and threshold alerts across Government Lookup, EasyOnboard, and Document Analysis to prevent failed verifications.
### Feb
UX
New
Widget enhancements & invoice downloads
The QR Code screen was redesigned for clearer multi-device verification, and the Government Data page was restructured to reduce confusion. ID upload instructions were clarified, a Sandbox Government Data page was added, and invoice downloads arrived in Billings → Transaction History with automatic generation.
### Jan
Enhancement
UX
Signature canvas & roles cleanup
The signature page now lets users draw an actual signature via a canvas instead of text entry only. The Roles & Permissions page received a cleaner design with expandable dropdowns for easier viewing and management of permission details.
# Changelog — 2026
Source: https://docs.dojah.io/changelog/2026
Dojah product updates shipped in 2026.
## 2026
### Jul
New
Security
Enhancement
Feature enhancements
We are excited to share a few updates added to the dashboard to enhance experiences on the Dojah platform.
Table Refresh Button
We've added dedicated Refresh buttons to the most frequently used tables across the application.
This enhancement allows users to refresh individual tables without reloading the entire page, making it faster and more convenient to view the latest data while improving the overall user experience.
The refresh buttons are present on the
- Verify Individual table
- Verify Business table
- EasyOnboard Verification table
- EasyDetect Profiles table
- EasyDetect Cases table
- EasyDetect Events table
- API Usage table
Authorized Signatory Compliance Enhancement
We've enhanced the compliance flow to capture the name and job title of the authorized signatory directly from the Master Service Agreement (MSA).
This enhancement ensures the details of the individual who signed the agreement are recorded, improving compliance records, auditability, and documentation accuracy.
New: IP Whitelisting for Secure API Access
Developers can now secure their Dojah integrations with IP Whitelisting. This feature allows teams to define a trusted list of IP addresses that are permitted to access their APIs.
By restricting API requests to approved servers or networks, organizations can prevent unauthorized access, strengthen production security, and reduce the risk of compromised API credentials being used from untrusted environments. IP Whitelisting is available from the Developers section of the dashboard and can be updated as your infrastructure evolves.
How to Add an IP Address to the Whitelist
- From the side menu, navigate to Developers.
- Click Developers to open the developer tab.
- Select the IP Whitelist tab from the available options.
- Click Add IP Address.
- Enter a name for the IP address in the Name field.
- Enter the IP address you want to whitelist in the Address field.
- Click on “Add IP Address” to save the IP address to your whitelist.
Allowed Origins for Verification Widgets
We've introduced an Allowed Origins setting for verification widgets, giving developers greater control over where their verification flows can be embedded and launched.
When enabled, only approved domains can access the widget, helping prevent unauthorized usage, strengthen security, and ensure verification flows are only available on trusted websites. This setting also supports wildcard domains for organizations managing multiple subdomains.
How to Configure Allowed Origins
- Navigate to EasyOnboard from the side menu.
- Create a flow and navigate to the settings tab of the flow
- Scroll to the Allowed Origin section.
- Toggle on the Restrict allowed origins to limit access to specific domains.
-
In the Add an origin field, enter the domain you want to allow.
- Click Add to add the domain to the allowed list.
- Repeat the process to add additional domains if needed.
- To allow verification flows to launch from any domain, disable Restrict allowed origins.
### Jun
Enhancement
New
Sign-up entry point, Compliance updates & Dojah Learning
A new sign-up option on the login page lets users create an account faster. The Compliance module adds Company Type and Job Title fields plus a Compliance Requirements modal, EasyOnboard gains Region & City distribution analytics, liveness checks can now use the device's back camera for assisted onboarding, and a new in-app Dojah Learning hub offers guides and tutorials. Usage analytics can be exported to PDF, alongside customer-table, CAC, and government-lookup navigation fixes.
### May
Enhancement
UI/UX
UserApp redesign & Compliance feature launch
A redesigned UserApp brings a cleaner interface, simplified navigation, and verification services consolidated under “Individual and Business Verify.” The EasyOnboard workflow moved from an accordion to a tab-based design with customizable fonts and button radius, a new Compliance feature centralizes onboarding processes, and light/dark mode now ships with an in-app toggle.
### Apr
Security
Liveness verification engine upgrade
An upgraded liveness detection engine improves real-time accuracy in confirming live captures and reduces spoofing and AI-generated image attacks. Users complete real-time actions — positioning the face in the oval frame, blinking, smiling, opening the mouth, and turning the head — with better stability and faster response times.
### Mar
Fix
Dashboard bug fixes
Fixed navigation issues on the dashboard, resolved UI inconsistencies, and corrected error handling for failed verifications to provide clearer user feedback.
### Feb
New
Auto Top-Up & Dojah AI Support
Auto Top-Up automatically replenishes your wallet when the balance drops below a configurable threshold, preventing service interruptions. Dojah AI Support adds an in-dashboard assistant for instant answers to feature questions, documentation guidance, and troubleshooting — with the option to escalate to a human.
### Jan
Fraud prevention
New
Duplicate image detection, PDF export & analytics
Automated duplicate image detection flags repeated images across verification attempts to prevent fraud. Verification PDF downloads make record-keeping and compliance reporting easy, analytics now track abandoned steps to surface drop-off points, and EasyOnboard flows were integrated into Easy Authentication for reusable liveness verification.
# Changelog
Source: https://docs.dojah.io/changelog/all_updates
What's new across the Dojah API, SDKs, and dashboard.
## 2026
### Jul
New
Security
Enhancement
Feature enhancements
We are excited to share a few updates added to the dashboard to enhance experiences on the Dojah platform.
Table Refresh Button
We've added dedicated Refresh buttons to the most frequently used tables across the application.
This enhancement allows users to refresh individual tables without reloading the entire page, making it faster and more convenient to view the latest data while improving the overall user experience.
The refresh buttons are present on the
- Verify Individual table
- Verify Business table
- EasyOnboard Verification table
- EasyDetect Profiles table
- EasyDetect Cases table
- EasyDetect Events table
- API Usage table
Authorized Signatory Compliance Enhancement
We've enhanced the compliance flow to capture the name and job title of the authorized signatory directly from the Master Service Agreement (MSA).
This enhancement ensures the details of the individual who signed the agreement are recorded, improving compliance records, auditability, and documentation accuracy.
New: IP Whitelisting for Secure API Access
Developers can now secure their Dojah integrations with IP Whitelisting. This feature allows teams to define a trusted list of IP addresses that are permitted to access their APIs.
By restricting API requests to approved servers or networks, organizations can prevent unauthorized access, strengthen production security, and reduce the risk of compromised API credentials being used from untrusted environments. IP Whitelisting is available from the Developers section of the dashboard and can be updated as your infrastructure evolves.
How to Add an IP Address to the Whitelist
- From the side menu, navigate to Developers.
- Click Developers to open the developer tab.
- Select the IP Whitelist tab from the available options.
- Click Add IP Address.
- Enter a name for the IP address in the Name field.
- Enter the IP address you want to whitelist in the Address field.
- Click on “Add IP Address” to save the IP address to your whitelist.
Allowed Origins for Verification Widgets
We've introduced an Allowed Origins setting for verification widgets, giving developers greater control over where their verification flows can be embedded and launched.
When enabled, only approved domains can access the widget, helping prevent unauthorized usage, strengthen security, and ensure verification flows are only available on trusted websites. This setting also supports wildcard domains for organizations managing multiple subdomains.
How to Configure Allowed Origins
- Navigate to EasyOnboard from the side menu.
- Create a flow and navigate to the settings tab of the flow
- Scroll to the Allowed Origin section.
- Toggle on the Restrict allowed origins to limit access to specific domains.
-
In the Add an origin field, enter the domain you want to allow.
- Click Add to add the domain to the allowed list.
- Repeat the process to add additional domains if needed.
- To allow verification flows to launch from any domain, disable Restrict allowed origins.
### Jun
Enhancement
New
Sign-up entry point, Compliance updates & Dojah Learning
A new sign-up option on the login page lets users create an account faster. The Compliance module adds Company Type and Job Title fields plus a Compliance Requirements modal, EasyOnboard gains Region & City distribution analytics, liveness checks can now use the device's back camera for assisted onboarding, and a new in-app Dojah Learning hub offers guides and tutorials. Usage analytics can be exported to PDF, alongside customer-table, CAC, and government-lookup navigation fixes.
### May
Enhancement
UI/UX
UserApp redesign & Compliance feature launch
A redesigned UserApp brings a cleaner interface, simplified navigation, and verification services consolidated under “Individual and Business Verify.” The EasyOnboard workflow moved from an accordion to a tab-based design with customizable fonts and button radius, a new Compliance feature centralizes onboarding processes, and light/dark mode now ships with an in-app toggle.
### Apr
Security
Liveness verification engine upgrade
An upgraded liveness detection engine improves real-time accuracy in confirming live captures and reduces spoofing and AI-generated image attacks. Users complete real-time actions — positioning the face in the oval frame, blinking, smiling, opening the mouth, and turning the head — with better stability and faster response times.
### Mar
Fix
Dashboard bug fixes
Fixed navigation issues on the dashboard, resolved UI inconsistencies, and corrected error handling for failed verifications to provide clearer user feedback.
### Feb
New
Auto Top-Up & Dojah AI Support
Auto Top-Up automatically replenishes your wallet when the balance drops below a configurable threshold, preventing service interruptions. Dojah AI Support adds an in-dashboard assistant for instant answers to feature questions, documentation guidance, and troubleshooting — with the option to escalate to a human.
### Jan
Fraud prevention
New
Duplicate image detection, PDF export & analytics
Automated duplicate image detection flags repeated images across verification attempts to prevent fraud. Verification PDF downloads make record-keeping and compliance reporting easy, analytics now track abandoned steps to surface drop-off points, and EasyOnboard flows were integrated into Easy Authentication for reusable liveness verification.
## 2025
### Dec
Fix
Dashboard navigation & UI fixes
Fixed navigation issues and UI inconsistencies on the dashboard, and corrected error handling for failed verifications to provide clearer feedback.
### Nov
Improvement
Compliance
Duplicate ID separation, cookie management & team roles
Duplicate ID and Resume Verification are now fully separated across the pipeline for independent configuration. A cookie management interface lets users manage preferences by category, and a default team role ensures consistent access permissions for newly created companies.
### Oct
New
Compliance
Digital Address Verification & Compliance Register
Comprehensive Digital Address Verification validates addresses through live geolocation tracking (50-meter radius), utility bill validation, and proof-of-address capture, with automated cross-checks and fraud controls for mismatched data. The Compliance Register launched covering Fintech, Logistics, Real Estate, Crypto, and E-commerce with requirements, deadlines, and status tracking.
### Sep
Enhancement
Security
Liveness & Image Match scoring, Trust Page
Fine-tune EasyOnboard fraud checks with customizable threshold sliders for Liveness and Image Match (0–24 Failed, 25–64 Pending, 65–100 Successful). Updated User Data Match requires at least two of three names to match official records, a new Trust Page communicates security and compliance, and confirmation pages can now be customized per outcome.
### Aug
UX
Widget UI enhancements
A cleaner, more intuitive widget interface streamlines verification — reducing drop-offs during onboarding and ID verification, with smoother step transitions and improved clarity at each stage.
### Jul
New
Developer
Email notifications & API documentation revamp
Multiple team members can now receive email alerts for balance depletion and system updates via Settings → Email Notifications. The API documentation was restructured for a better developer experience — clearer endpoint descriptions, improved navigation, and detailed integration examples.
### Jun
Compliance
New
AML case management & Easy Authentication
AML screening evolved from simple watchlist checks into a full case management system — search, auto-generated results, case assignment, status updates, risk levels, ongoing monitoring, comments, audit trail, and PDF download. Easy Authentication also launched for liveness-based fast re-authentication of returning users.
### May
Fix
Bug fixes
Fixed navigation issues and UI inconsistencies on the dashboard, and corrected error handling for failed verifications.
### Apr
New
Compliance
Reverification
Reverification enables identity record updates to keep information valid and compliant. Triggered from the Verification Dashboard, the previous verification is marked invalid and the new attempt becomes active — with or without a reference ID, plus SDK integration via reference\_id or email parameters.
### Mar
Enhancement
Automated country detection & low-balance alerts
Geo-IP-based detection auto-selects the user's country at the start of verification, reducing friction and ID-type errors. A low-balance notification system adds real-time wallet monitoring and threshold alerts across Government Lookup, EasyOnboard, and Document Analysis to prevent failed verifications.
### Feb
UX
New
Widget enhancements & invoice downloads
The QR Code screen was redesigned for clearer multi-device verification, and the Government Data page was restructured to reduce confusion. ID upload instructions were clarified, a Sandbox Government Data page was added, and invoice downloads arrived in Billings → Transaction History with automatic generation.
### Jan
Enhancement
UX
Signature canvas & roles cleanup
The signature page now lets users draw an actual signature via a canvas instead of text entry only. The Roles & Permissions page received a cleaner design with expandable dropdowns for easier viewing and management of permission details.
## 2024
### Aug
New
Compliance
Custom Questions & Verification Analytics
Custom Questions let you gather compliance information and assess user risk with single-select, multi-select, or open-answer fields added directly to EasyOnboard verification pages. Verification Analytics launched with status metrics, geographical distribution, conversion rate, average completion time, and flexible timeframe filtering for data-driven decisions.
### Apr
New
Multi-channel OTP verification
A more flexible OTP process lets you choose how users receive one-time passcodes — via SMS or WhatsApp — or send to both channels simultaneously for users on unreliable networks so codes always get through.
### Mar
Enhancement
New
Widget enhancements, Global Business Search & sidebar revamp
The ID widget gained Email OTP for BVN Advanced, file-upload controls, camera-flip on capture screens, consolidated EasyOnboard configuration, and multi-device screen control. Global Business Search added worldwide company lookup with reliable data sources, and the dashboard sidebar was revamped for clearer navigation and re-categorized products.
### Feb
New
Enhancement
Lookup overhaul, Business AML screening & Document Analysis
Easy Lookup was reworked to separate individual and business lookups and to support batch lookups across multiple users. AML screening expanded to cover business screening in one unified feature, and the no-code Document Analysis tool launched with a drag-and-drop interface, multi-document support, instant feedback, and detailed validity results.
## 2023
### Dec
New
Enhancement
Business Email Authentication & dashboard improvements
Business Email Authentication lets you control onboarding emails with a disposable-email toggle and a free-provider option. This release also added an on-site verification demo, downloadable AML lookup results, refreshed login screens with marketing updates, and a Glasses On upgrade allowing human review of glasses-on verifications.
### Nov
Developer
EasyOnboard JavaScript integration
Integrating the verification widget got easier: save your EasyOnboard flow, choose the "websdk" option in the integration section, then copy the generated JavaScript and paste it into your application to embed the ID verification widget.
### Oct
Enhancement
Fix
EasyOnboard improvements & verification customization
EasyOnboard improvements prevent duplicate flow titles, add a table delete button, and warn about unsaved changes, alongside various bug fixes. Advanced identity verification customization also arrived, letting businesses detect users by device brightness level and choose whether to verify with or without glasses from the Fraud Check settings.
# Status page
Source: https://docs.dojah.io/changelog/status
Check the real-time operational status of Dojah's services.
Dojah publishes live uptime and incident history for its APIs and services on a dedicated status page. Use it to confirm whether an issue is on Dojah's side and subscribe to updates during incidents.
View real-time uptime, current incidents, and historical availability for Dojah's APIs and dashboard. Opens in a new tab.
# Billings
Source: https://docs.dojah.io/dashboard-guide/account/billings
Everything money-related in one place — your wallet, payments, receipts, and transaction history all in one place.
The **Billings** page (under **Account**) shows your **wallet balance** with **Top up wallet**, your **payment threshold**, and **Auto Top-Up** across the top, and your full **transaction history** below. Adding funds and turning on auto top-up are covered in [Fund your wallet](/dashboard-guide/getting-started/fund-your-wallet) — this page focuses on the records and settings.
## Transaction history
Every wallet top-up is listed here. **Search** by reference number, **filter** by date, status, or payment type, and **export** the list for your records.
| Column | What it shows |
| ---------------- | --------------------------------------------- |
| Amount | The amount you topped up, before VAT. |
| VAT | VAT applied to the top-up (7.5%). |
| Total Amount | Amount plus VAT — what you actually paid. |
| Reference Number | The unique reference for the transaction. |
| Status | **Successful**, **Initiated**, or **Failed**. |
| Payment Type | Paystack or Bank Transfer. |
| Date Created | When the top-up was made. |
### Invoices & receipts
Open a transaction’s actions menu (the **⋮** at the end of the row) to **Download Invoice** or **Download Receipt** — handy for accounting and reconciliation.
## Payment settings
The controls above the table manage how you pay:
| Setting | What it does |
| ----------------- | ---------------------------------------------------------------------------- |
| Payment threshold | The balance that triggers Auto Top-Up. Set it under **Manage threshold**. |
| Auto Top-Up | Turn automatic funding on or off; **Configure** sets the top-up amount. |
| Saved card | The card used for payments and auto top-up — update it with **Change Card**. |
## Frequently asked questions
Open **Billings** in the dashboard. The **Transaction history** table lists every charge and top-up, so you can track exactly what your wallet was spent on.
Each transaction has an **Invoices & receipts** entry you can download for accounting and reconciliation.
Use **Change Card** in the payment settings above the transaction table. The saved card is used for both manual payments and Auto Top-Up.
The payment threshold is the balance that triggers **Auto Top-Up**. Set it under **Manage threshold** so your wallet refills before live verifications stop.
# Settings
Source: https://docs.dojah.io/dashboard-guide/account/settings
Manage your organization — your profile, your team and their access, security, notifications, and your activity records.
**Settings** is organized into sub-sections down the left: [Profile](/dashboard-guide/account/settings/profile), [Email Notifications](/dashboard-guide/account/settings/email-notifications), [Team](/dashboard-guide/account/settings/team), [Audit](/dashboard-guide/account/settings/audit), [Exports](/dashboard-guide/account/settings/exports), and [Messaging](/dashboard-guide/account/settings/messaging).
Your details, password, and 2FA.
Which alerts your team receives.
Members, roles, and permissions.
Every action taken in your account.
Request and download data exports.
Your SMS and WhatsApp message log.
## Frequently asked questions
Two built-in roles — **Admin** (full access to all modules and settings) and **Developer Support** (developer tools and verification modules, with limited account access) — plus any **custom roles** you create with Create Role.
They’re three cumulative levels set per module. **View** is read-only; **Manage** adds creating, editing, and running actions; **Delete** adds removing records. Granting Delete includes Manage and View.
Go to **Settings → Team** and select **Invite Member**. Enter their email and assign a role; they’ll receive an invitation and appear in the list as **Pending** until they accept.
Yes. Open **Roles & Permissions** and select **Create Role**, then set the permission level (View, Manage, or Delete) for each module to match exactly what that role should be able to do.
From **Settings → Team**, select **Transfer Ownership** and choose the member to hand the Owner role to. There is one Owner per organization at a time.
# Audit
Source: https://docs.dojah.io/dashboard-guide/account/settings/audit
A record of every action taken in your account — who did what and when — filterable and exportable for reviews.
The **Audit Trail** records every action taken in your account — who did what and when (for example inviting a team member, regenerating an API key, changing a role, or updating billing). Filter the trail and **Export** it for compliance and security reviews.
# Email Notifications
Source: https://docs.dojah.io/dashboard-guide/account/settings/email-notifications
Choose which email alerts you and your team receive, so the right people stay informed without inbox noise.
Choose which email alerts you and your team receive — such as low wallet balance, system updates, weekly reports, new team members, and API alerts — so the right people stay informed without inbox noise.
# Exports
Source: https://docs.dojah.io/dashboard-guide/account/settings/exports
Request and download data exports — your lookup history, address verification records, and more.
Request and download **data exports** — for example your individual lookup history or address verification records. Each export shows its **source** and **status** (Initiated or Completed); once it’s complete, you can **Download** the file.
# Messaging
Source: https://docs.dojah.io/dashboard-guide/account/settings/messaging
A log of every SMS and WhatsApp message sent through Dojah, with its delivery status.
A log of every message sent through Dojah — **SMS** and **WhatsApp** OTPs and alerts. See totals for messages sent and not sent, and a row for each message with its sender, recipient, type, ID, and delivery **status**. Filter and **Export** as needed.
# Profile
Source: https://docs.dojah.io/dashboard-guide/account/settings/profile
Your personal account details and security — name, email, phone, password, and two-factor authentication.
Your personal account details and security. Update your **name**, **email**, and **phone number**, and under **Security** you can **change your password** and enable **Two-Factor Authentication (2FA)** for an extra layer of protection.
## Two-Factor Authentication (2FA)
2FA adds a second step at sign-in: after your password, you enter a one-time code from an authenticator app, so a stolen password alone can’t get into your account. You manage it from **Profile → Security**.
**Set up an authenticator app**
In **Profile → Security**, switch on **Two-Factor Authentication (2FA)**. A **Setup 2FA** dialog opens with a QR code.
Open an authenticator app — **Google Authenticator**, **Authy**, or similar — and scan the QR code to add your Dojah account.
Your app begins generating 6-digit codes. Confirm to finish enabling 2FA. From then on, you’ll enter a current code from the app each time you sign in.
**Disabling 2FA.** To turn it off, switch the **Two-Factor Authentication** toggle back off in **Profile → Security**; your account will then sign in with just your password. For security, we recommend keeping 2FA enabled.
# Team
Source: https://docs.dojah.io/dashboard-guide/account/settings/team
Manage who has access to your organization — invite members, assign roles, and set per-module permissions.
Manage who has access to your organization. The **Team Members** list shows each person’s **role**, **status** (Active, Pending, or Expired), and when they were added. From here you can **Invite Member** (by email, with a role), edit or remove a member, and **Transfer Ownership** of the account.
## Roles & permissions
Select **Roles & Permissions** to define exactly what each role can access. Dojah ships with two built-in roles, and you can build your own with **Create Role**.
| Role | Access |
| ----------------- | ----------------------------------------------------------------------------------------------- |
| Admin | Full access to all modules and settings — the highest level of access. |
| Developer Support | Access to developer tools and verification modules, with limited account-level access. |
| Custom role | Create your own with **Create Role** and set the permission level for each module individually. |
Access is set **per module** (Verify Individual, Verify Business, EasyOnboard, EasyAuthentication, Business Registrations, EasyDetect, Custom Lists, Developers, API Status, Compliance, Billings, Settings, and Logs). For each module, a role is granted one of three permission levels — and each level builds on the one before it:
| Permission | What it grants |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| View | See the module and its data — read-only. The member can open and review, but not make changes. |
| Manage | Everything in **View**, plus create, edit, and run actions in the module — for example running a verification or publishing a flow. |
| Delete | Everything in **Manage**, plus the ability to **delete** records in the module — the highest level of access. |
Because the levels are cumulative, granting **Delete** implies **Manage** and **View**; granting **Manage** implies **View**. Set the level for each module on a role, then save.
# Support
Source: https://docs.dojah.io/dashboard-guide/account/support
Reach the Dojah team without leaving your dashboard — start a chat, attach what you need, and your conversation is waiting when you come back.
The **Support** page opens a live chat with the Dojah team. Describe your issue, and a support agent replies in the same thread. Your conversation history stays on the page, so you can pick up where you left off.
**Where to find it.** Open **Support** under **Account** in the sidebar. It’s the fastest way to reach the team — no email thread or ticket number to track.
## The support chat
The page is a single conversation with **Dojah Support**. Your messages line up on the right; replies from the team appear on the left, each labelled with the agent’s name. Date stamps mark when each message was sent.
| Element | What it is |
| ------------- | ----------------------------------------------------------------------------------- |
| Dojah Support | The header at the top of the thread — you’re always talking to the Dojah team here. |
| Your messages | Right-aligned, in blue. Everything you send. |
| Team replies | Left-aligned, in white, labelled with the support agent’s name. |
| Date | Sits under each group of messages, so you can see when a conversation happened. |
| Composer | The message box at the bottom, with an attachment button and a send button. |
## Sending a message
Type into the composer at the bottom and press **Enter** to send. To add a new line without sending, use **Shift + Enter**. The send button lights up once there’s something to send.
**Attach a file.** Select the **paperclip** in the composer to add a screenshot or document. A picture of the error or the response you got helps the team resolve things faster.
## Replies from the team
A support agent answers in the same thread, with their name above their reply. When the same person sends several messages in a row, they’re grouped together under one name to keep the conversation easy to read. Because the history lives on the page, you can reopen **Support** any time to revisit an earlier exchange.
## Frequently asked questions
Open **Support** under **Account** in the dashboard sidebar. Type your message in the composer and press **Enter** — a support agent replies in the same chat. There’s no separate ticket to raise.
Yes. Select the **paperclip** in the composer to attach a file. Sharing a screenshot of the error or the response you received usually helps the team get to an answer faster.
Your full history stays on the **Support** page. Reopen it and scroll up to see earlier messages and the team’s replies, each with its date.
Press **Shift + Enter** to drop to a new line within the same message. **Enter** on its own sends what you’ve typed.
# Usage
Source: https://docs.dojah.io/dashboard-guide/account/usage
Track every API call you make — volumes, success rates, costs, and where your traffic comes from.
The **Usage** page logs every API call across your apps, so you can monitor activity, spot failures, and understand your usage patterns. It has two views: the [Usage log](#usage-log) and [Usage Analytics](#usage-analytics). Use **Filters** to narrow by app, service, status, or date, and **Export** to download the data.
**Usage vs. Billings.** Usage tracks the calls you’ve *made* — volume, outcome, and cost per call. [Billings](/dashboard-guide/account/billings) tracks money *in* — your top-ups, receipts, and invoices.
## Usage log
The default view opens with three headline counts — **Total API Calls**, **Successful**, and **Failed** — above a row-by-row log of every call.
**What counts as successful?** A call is counted as **Successful** whenever Dojah returns a response — including a **404**, which means the lookup ran but found no matching record. Every other outcome is counted as **Failed**.
| Column | What it shows |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| App Name | The app that made the call. |
| Mode | How the call was made — **API** (direct integration), **Widget** (the hosted verification widget), or **Portal Lookup** (run directly from the dashboard). |
| Services | The check that ran, e.g. BVN Basic, CAC Name Check, or NIN Verification. |
| Cost | What that call cost (₦0.00 for calls that aren’t billed). |
| Date/Time | When the call was made. |
| Status | The response code paired with the outcome — e.g. **200 · Success**, **404 · Success**, or **400 · Failed**. |
Not sure what a code means? The **“What do these codes mean?”** link opens a reference for every response code.
## Usage Analytics
Select **Analytics** to switch from the raw log to an overview of your usage patterns, verification categories, and geographic distribution.
* **Status Distribution** — the share of successful vs. failed calls.
* **Country Distribution** — where your verifications come from (for example Nigeria, Ghana, Kenya, South Africa).
* **Top Services** — your most-used checks, by call count and share.
## Frequently asked questions
**Usage** tracks the API calls you’ve made — how many, their outcome, and the cost of each. [Billings](/dashboard-guide/account/billings) tracks money into your wallet — top-ups, receipts, and invoices. Usage is the activity side; Billings is the money side.
No. A call counts as **Successful** whenever Dojah returns a response — and that includes a **404**, which simply means the lookup ran but found no matching record. Only outcomes where no valid response is returned are counted as **Failed**. The Status column always shows the exact response code; use **“What do these codes mean?”** for the full reference.
Yes. Select **Export** to download your usage — apply Filters first (by app, service, status, or date) to export just the records you need.
Open **Usage Analytics** and check **Top Services**, which ranks your checks by call volume and share — handy for understanding cost drivers and planning capacity.
# EasyDetect
Source: https://docs.dojah.io/dashboard-guide/fraud-risk/easydetect
Real-time fraud detection and risk scoring — build detection flows, score every event as it happens, review the ones that look risky, and watch risk build up per customer.
**EasyDetect** scores the things your users do — transactions, logins, sign-ups — against rules you define, and returns a decision in real time. You build the logic once as a [flow](/dashboard-guide/fraud-risk/easydetect/flows), send [events](/dashboard-guide/fraud-risk/easydetect/events) to Dojah’s API, and EasyDetect decides whether to **Allow**, **Flag**, or **Block** each one. Anything flagged becomes a [case](/dashboard-guide/fraud-risk/easydetect/cases) to review, and risk accumulates into a [profile](/dashboard-guide/fraud-risk/easydetect/profiles) for each customer.
Group detection rules for a kind of event (a transaction, a login) and set the score thresholds for each decision.
Pass user events to EasyDetect through the API as they happen.
Each event is scored and returned as Allow, Flag, or Block — instantly.
Flagged events open as cases your team works, with help from AI.
Risk rolls up per customer so repeat offenders rise to the top.
Your fraud dashboard at a glance.
Aggregated risk per customer.
Flagged events awaiting review.
Every scored action and its decision.
Rules, scores, and thresholds.
Entity details and risk tiers.
Compliance-ready PDF reports.
## Frequently asked questions
EasyDetect is Dojah’s real-time fraud-detection product. You define detection **flows** (sets of rules), send user **events** to the API, and EasyDetect scores each one and returns a decision — Allow, Flag, or Block. It lives under **Fraud & Risk** in the dashboard.
An **event** is a single scored action (a transaction, login, or onboarding). A **case** is an event that was flagged and needs a human to review and resolve. A **profile** is one customer’s aggregated risk — a score and tier built from all of their events.
Open a **flow** and select **Manage Rules** to open the Rule Builder. Add a rule with a name, a **score** and **weight**, a severity **type**, and one or more **conditions** (field, operator, value). The rule’s score is added to an event whenever its conditions match.
Each rule that fires adds its **score × weight** to the event’s total. That total is compared to the flow’s **Decision Output** thresholds to Allow, Flag, or Block the event. A customer’s scores roll up into their profile, and the **Risk Tier Configuration** in Configuration sets the boundaries between the Low, Medium, High, and Very High tiers.
Yes. In the Rule Builder, the **AI Rule Assistant** takes a plain-language description of what you want to catch and proposes rules to add, edit, or remove. You review each proposal and accept or reject it before the flow is published.
# Cases
Source: https://docs.dojah.io/dashboard-guide/fraud-risk/easydetect/cases
Events flagged for human review — work them with AI assistance or resolve them manually.
A **case** is an event that was flagged for a human to review. The headline cards count **Total**, **Pending**, and **Resolved** cases; the table shows each case’s ID, the profile it belongs to, its risk score, who it’s assigned to, and its status.
Open a case to see the transaction, user, and risk indicators, then resolve it two ways: **Review with AI** gives a recommended decision with a confidence score, and **Manual Review** lets you choose **Allow** or **Block**, add a reason, and select **Resolve Case**.
# Configuration
Source: https://docs.dojah.io/dashboard-guide/fraud-risk/easydetect/configuration
Global fraud-detection settings — your reporting entity details and the boundaries between risk tiers.
**Configuration** holds the global settings for fraud detection. Under **Entity Details** you set your reporting entity name, branch ID, and code (used in regulatory reports). Under **Risk Tier Configuration** you drag the boundaries that separate the **Low**, **Medium**, **High**, and **Very High** tiers — the same tiers used on profiles.
**Changing tiers re-scores everyone.** Adjusting the risk-tier boundaries reclassifies *all* existing profiles against the new ranges, so review the impact before saving.
# Events
Source: https://docs.dojah.io/dashboard-guide/fraud-risk/easydetect/events
Every action you sent to EasyDetect, with the score it received, the rules that fired, and the decision returned.
An **event** is a single thing you sent to EasyDetect — a transaction, a login, or an onboarding — together with the score and decision it received. The headline cards count **Total**, **Blocked**, **Flagged**, and **Allowed** events.
| Column | What it shows |
| ---------- | ------------------------------------------------------------------- |
| Event ID | The unique reference for the event. |
| Profile ID | The customer the event belongs to — click through to their profile. |
| Risk Score | The score the flow assigned (0–100), coloured by severity. |
| Event Type | **Transaction**, **Login**, or **Onboarding**. |
| Flow Name | The flow that evaluated the event. |
| Decision | The outcome — **Blocked**, **Flagged**, or **Allowed**. |
Open an event to see which rules fired and how the score was built — the detail view breaks down the **Evaluation Result**, an **Event Analysis**, and the exact **Event Alerts** (rules triggered, with the points each added).
# Flows
Source: https://docs.dojah.io/dashboard-guide/fraud-risk/easydetect/flows
Reusable sets of rules applied to a kind of event, built in a visual Rule Builder with score thresholds you control.
A **flow** is a reusable set of rules applied to a kind of event. Flows are either **Published** (live) or **Draft**. The list shows each flow’s use case, status, rule count, and creation date; **+ Create Flow** starts a new one — from a pre-built **template** or from scratch.
## The Rule Builder
Open a flow and select **Manage Rules** to open the **Rule Builder** — a visual pipeline that runs an incoming event through each rule, adds up a score, then compares it to your decision thresholds.
| On a rule | What it means |
| ------------------ | ------------------------------------------------------------------------------------------ |
| Name & Description | What the rule detects, e.g. *Velocity Limit* or *New Device + Large Txn*. |
| Score | Points added to the event’s risk score when the rule triggers. |
| Weight | A multiplier on the score — higher weight means more impact. |
| Type | Severity for filtering and reporting — **High**, **Medium**, or **Low**. |
| Conditions | The field/operator/value tests (grouped with AND / OR) that decide whether the rule fires. |
At the bottom, the **Decision Output** turns the total score into an outcome using a slider — **Allow**, **Review** (flag), and **Block** bands you can drag to make the flow more or less strict. Save your work as a **Draft** and **Publish** it when you’re ready to go live.
**AI Rule Assistant.** Describe what you want to catch in plain language and EasyDetect proposes rules — adding, editing, or removing them. Review each suggestion and accept or reject it before publishing.
# Overview
Source: https://docs.dojah.io/dashboard-guide/fraud-risk/easydetect/overview
Your fraud dashboard — total events, active cases, blocked events, pass rate, and the rules firing most often.
The **Overview** is your fraud dashboard. Headline cards show **Total Events**, **Active Cases**, **Blocked Events**, and your **Pass Rate**, with charts for alerts over time, risk distribution, and the rules firing most often — plus a list of recent cases. Quick links jump to **Manage Flows** and **Pending Cases**.
# Profiles
Source: https://docs.dojah.io/dashboard-guide/fraud-risk/easydetect/profiles
One customer’s aggregated risk — a score and tier built up from every event they’ve generated.
A **profile** is one customer’s aggregated risk. Each carries a **risk score** (0–100) and a **risk tier** — **Low**, **Medium**, **High**, or **Very High** — built up from every event they’ve generated. The headline cards count profiles in each tier.
Open a profile for the full picture — a risk gauge and an AI overview, plus tabs for **Customer Information**, **Financial Activity**, **Behavioral & Device**, **Network Analysis**, and **Geographic Activity**. Search by name or profile ID, filter by tier, and export.
# Reporting
Source: https://docs.dojah.io/dashboard-guide/fraud-risk/easydetect/reporting
Compliance-ready PDF reports built from your events, profiles, and cases — for internal audits and regulatory filings.
EasyDetect includes built-in reporting for internal data audits, corporate governance, and external regulatory compliance. It compiles data from your events, user profiles, and flagged cases into structured, compliance-ready **PDF** reports you can use internally or submit directly to financial-oversight authorities.
## Report types
Three report classifications are available, depending on the module you’re working in — all generated as PDF:
| Report | Purpose | Available in |
| --------------------------------------------- | ----------------------------------------------------------------------------------------------- | -------------- |
| **Profile Summary Report** | Internal security auditing and individual risk-footprint tracking. | Profiles |
| **Suspicious Transaction Report** (STR / SAR) | Documenting suspicious actions, potential fraud, or compliance breaches for regulatory filings. | Cases & Events |
| **Cash Transaction Report** (CTR) | Documenting high-volume currency movements that match regulatory thresholds. | Events |
## Where reports live
Reporting is distributed across three modules, so your compliance team can pull targeted documentation at each stage of an investigation:
* **Profile reports** — from the [Profile Details](/dashboard-guide/fraud-risk/easydetect/profiles) view. Aggregates a customer’s complete historical risk footprint: baseline biodata, linked accounts, risk scores, tier changes, and transaction metrics. Used for internal investigations and team reviews.
* **Case reports** — from the [Case Details](/dashboard-guide/fraud-risk/easydetect/cases) workspace, for transactions that entered a **Pending** state and were manually reviewed. Compiles the full audit trail — device data, behavioural assessments, and the administrator’s written reason for the decision — and generates the official **STR / SAR** for financial-intelligence filings.
* **Event reports** — from the [Events Log](/dashboard-guide/fraud-risk/easydetect/events) detail panel, for real-time event auditing. Offers standalone downloads of the **CTR** (when a cash transaction is detected) and **STR / SAR** documents.
**Set your entity details first.** Report headers are built from your corporate metadata in [Configuration](/dashboard-guide/fraud-risk/easydetect/configuration) — **Reporting Entity Name**, **Branch ID**, and **Reporting Entity Code**. Leaving these blank renders empty header fields on customer-facing files, so have an administrator verify them before generating reports.
## Generating & filing a report
1. **Locate the data.** Open **Profiles**, **Cases**, or **Events** and select the row or ID you need to export.
2. **Trigger the download.** Click the report button for the document you need — *Download STR Report*, *Download CTR Report*, or *Download Profile Report*.
3. **Save the PDF.** EasyDetect builds and exports a structured PDF straight to your workstation.
4. **File with your regulator.** Log into your state submission portal — for example the Central Bank of Nigeria (CBN) platform or the Nigerian Financial Intelligence Unit (NFIU) registry — and upload the PDF to fulfil your filing obligations.
# Compliance
Source: https://docs.dojah.io/dashboard-guide/getting-started/compliance
Submit your business details so Dojah can approve your account to go live. It’s the first thing to do once you’re inside the dashboard.
**Compliance** is the first item in the sidebar — marked with a red dot until it’s complete. It’s where you tell Dojah who your business is. Until your submission is approved, your account stays in **sandbox**; once it’s approved, you can switch to **live mode**.
Compliance is a guided, four-step form shown down the left of the page: **Business Details**, **Business Documents**, **Directors’ Details**, and the **MSA**. Each step validates before you can continue, and you can jump back to any completed step from the stepper. Every step also has a **Compliance Requirement** link that opens detailed guidance on exactly what’s expected.
**The form adapts to your country.** Dojah verifies businesses across Africa, so the exact fields depend on where your company is registered. Each step below describes the general requirement, with the country-specific details called out. *(Screenshots show the Nigerian flow as an example.)*
## Step 1 — Business Details
Identify your company. Provide your registration details, registered business address, website, and a short description of what you do and how you’ll use Dojah. Your country of incorporation is filled in automatically from your account region.
| Field | Required | What it’s for |
| --------------------------- | -------- | ----------------------------------------------------------------------------- |
| Company registration | Yes | Your official company registration number, so Dojah can confirm the business. |
| Registered Business Address | Yes | Your company’s registered address. |
| Country of Incorporation | Yes | Auto-filled from your account region. |
| Website Link | Yes | A live, publicly accessible company website, e.g. `https://yourcompany.com`. |
| Business Description | Yes | What your business does and how you intend to use Dojah’s services. |
🇳🇬
Nigeria
Enter your **RC number** and select **Verify** — Dojah resolves it against CAC, confirms your **Company Name**, and sets the **Company Type** (Business Name, Incorporated Trustees, or Limited Partnership).
🌍
Other countries
Enter your **business incorporation number**. The company name and type aren’t auto-resolved — you enter your details directly.
## Step 2 — Business Documents
Upload the documents that prove your registration and address. Each upload accepts a single file — drag and drop, or click to browse. You can attach additional supporting documents with **“+ Add another document”** (licenses, regulatory approvals, or partnership agreements) — these are required if you offer a regulated service.
🇳🇬
Nigeria
**CAC Certificate** (Business ID), **MEMART** (Memorandum & Articles of Association), **Status Report**, and a **Utility Bill** dated within the last 3 months.
🌍
Other countries
Your **Certificate of Incorporation**, plus any supporting documents that apply to your business.
**File requirements.** Each document can be a **PDF, JPG, or PNG**, up to **5 MB**. Make sure scans are clear, the whole document is visible, and the company name matches your registration.
## Step 3 — Directors’ Details
Link a director to the business. Provide their job title and a government-issued ID, then upload it.
| Field | Required | What it’s for |
| -------------------- | -------- | --------------------------------------------------------------------------------------- |
| Job Title | Yes | The director’s role, e.g. Chief Executive Officer. |
| Government-Issued ID | Yes | Choose the ID type (passport, driver’s licence, national ID…) then upload a clear copy. |
🇳🇬
Nigeria
Also enter the director’s 11-digit **BVN** and verify it — Dojah confirms their identity and fills in their name. The uploaded ID **must match the name on the BVN**.
🌍
Other countries
No BVN step — provide the director’s name and job title alongside their government-issued ID.
## Step 4 — Master Service Agreement
The final step is the **MSA**. Read through the full Master Service Agreement (`Dojah_MSA_v2.1.pdf` — you can download a copy). Then add your **signature**: switch to **Draw** to sign in the box, or **Upload** to attach an image of your signature. Finally, select **Submit for Review** to send your application to Dojah. If your application was previously returned, this button reads **Resubmit**.
## After you submit
Your application moves through three states:
Under review
Rejected
Approved
| Status | What it means |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Under review | Dojah’s team is checking your details. You can keep building and testing in sandbox while you wait. |
| Rejected | Something needs fixing. The application comes back with a reason — update the relevant step and **Resubmit**. |
| Approved | Your account is approved for **live mode**. The Compliance item disappears from the sidebar and you can switch to **Live** from the top bar. |
**Don’t wait to integrate.** Approval is only required for live traffic. You can build your entire integration and test it end-to-end in sandbox while your compliance review is in progress.
## Frequently asked questions
Nigerian companies provide a **CAC Certificate**, **MEMART** (Memorandum & Articles of Association), a **Status Report**, and a recent **utility bill** (dated within the last 3 months), along with an RC number and a director’s BVN. Companies registered outside Nigeria provide a **Certificate of Incorporation** and a government-issued ID. Every file can be a PDF, JPG, or PNG up to 5 MB.
Yes. Every new account starts in **sandbox**, which runs on test data and is never billed, so you can build and test your entire integration first. You only need to complete compliance to run **live** verifications against real records — and you can keep working in sandbox while your application is under review.
Once you submit, your application goes into **review** by Dojah’s team. If anything needs fixing it comes back as **rejected** with a reason, so you can update the relevant step and resubmit. When it’s approved, your account is switched on for live mode and the Compliance item drops off your sidebar.
Dojah resolves your **RC number** against the CAC registry to confirm your company. If it fails, check that the number is entered correctly and matches your registered business name. Once it resolves, your Company Name and Company Type are filled in automatically.
No. The **BVN** step is specific to Nigerian directors. If your business is registered elsewhere, you provide the director’s name, job title, and a government-issued ID instead — no BVN required.
# Create your account
Source: https://docs.dojah.io/dashboard-guide/getting-started/create-your-account
Signing up takes a couple of minutes. Fill in a short form, confirm your email, set a password — and you’re in the dashboard, ready to explore.
Account creation starts on the Dojah website, not the dashboard. Once you’ve set your password you’ll land in the dashboard in **sandbox mode**, where you can try every feature before going live.
Go to [dojah.io](https://dojah.io) and select **Get Started** to open the sign-up form.
A short form asks for a few details about you, your company, and how you plan to use Dojah. Use a work email you can access — the next step is sent there.
Dojah emails you a link to complete registration and set your password.
You land in the dashboard in **sandbox mode**, ready to explore.
## Sandbox vs. live
Every new account starts in **sandbox**. It’s a full copy of the product running on test data, so you can build and try your integration end-to-end without any risk or cost.
* **Sandbox** — results are simulated, nothing is billed, and no real records are touched. Ideal for development and testing.
* **Live** — verifications run against real records and your wallet is charged. Live access is unlocked once you complete compliance.
You can switch between the two with the **Live / Sandbox** toggle in the top bar at any time.
**Next: go live.** Your first task inside the dashboard is [compliance](/dashboard-guide/getting-started/compliance) — submitting your business details so Dojah can approve your account to switch from sandbox to live mode.
## Frequently asked questions
Go to [dojah.io](https://dojah.io) and select **Get Started**, fill in the short sign-up form, then open the email link to set your password. Once that’s done you’re signed in to the dashboard, starting in sandbox mode.
Yes. Every account starts in **sandbox**, a full copy of the product running on test data that’s never billed. You only pay for **live** verifications once you’ve completed compliance.
Sandbox is a safe testing environment — results are simulated, no real records are touched, and nothing is charged to your wallet. It’s ideal for building and testing your integration end-to-end before going live.
Complete [compliance](/dashboard-guide/getting-started/compliance) to get your account approved, then use the **Live / Sandbox** toggle in the top bar.
# Fund your wallet
Source: https://docs.dojah.io/dashboard-guide/getting-started/fund-your-wallet
Live verifications are charged to your Dojah wallet. Add funds to keep them running, and turn on auto top-up so you never run dry.
Your **wallet** holds the balance every live request draws from. Each verification is billed per call, so a funded wallet is what keeps live traffic flowing. You can manage it from [Account → Billings](/dashboard-guide/account/billings), where you’ll see your balance, top up, and review your transaction history.
**Sandbox is free.** You only need a funded wallet for **live** verifications. Testing in sandbox never touches your balance.
## Top up your wallet
Select **Top up wallet** from the [Billings page](/dashboard-guide/account/billings) (or the dashboard) and follow the steps:
Type how much you’d like to add — the minimum is **₦50,000**. Before you pay, the modal shows a breakdown of your amount, VAT, and the total.
**Paystack** to pay instantly by card, or **Bank Transfer** to send the total to Dojah’s account details shown in the modal.
Complete the payment. Your balance updates as soon as the payment succeeds, and the top-up appears in your transaction history.
## Auto Top-Up
Rather than topping up by hand, turn on **Auto Top-Up** to add funds automatically whenever your balance runs low — so live verifications never stop for an empty wallet.
| Setting | What it does |
| ------------------ | ---------------------------------------------------------------------- |
| Auto Top-Up toggle | Turns automatic funding on or off. |
| Threshold | The balance that triggers a top-up. Set it under **Manage threshold**. |
| Configure | Set the top-up amount and the saved card used for automatic payments. |
**Tip.** Auto Top-Up needs a saved card on file. Once it’s set, top-ups happen in the background and show up in your transaction history like any other payment.
## Transaction history
Every top-up is recorded under [Billings](/dashboard-guide/account/billings) with its amount, VAT, total, reference number, payment type, and status (**Successful**, **Initiated**, or **Failed**). You can search, filter, and export the list. The full billing breakdown is covered later under [Account → Billings](/dashboard-guide/account/billings).
## Frequently asked questions
The minimum top-up is **₦50,000**. The modal shows your amount, VAT, and total before you pay.
Yes — **7.5% VAT** is applied to each top-up. You’ll see the amount, VAT, and total broken down before you confirm payment.
Pay instantly by card with **Paystack**, or use **Bank Transfer** to send the total to Dojah’s account details shown in the modal.
Auto Top-Up automatically adds funds when your balance drops below a threshold you set, so live verifications never stop for an empty wallet. It uses a saved card on file.
No. Sandbox is free, so you can build and test without any balance. You only need to fund your wallet to run live verifications.
# Getting around the dashboard
Source: https://docs.dojah.io/dashboard-guide/getting-started/getting-around-the-dashboard
A quick tour of the two things that are always on screen — the top bar you’ll use everywhere, and the sidebar that organizes every feature.
## The top bar
The top bar is where you switch context and get help. From left to right:
| Control | What it does |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Company switcher | Switch between the companies you belong to. The active company carries a blue dot. |
| Live / Sandbox | Flip between live and sandbox. You can switch to **Live** only after compliance is approved — until then, you’re prompted to complete it. |
| Theme | Switch between light and dark mode. |
| Profile | Your avatar opens the account menu, including **sign out**. |
### Switching company
If you belong to more than one company, select the company name in the top bar to switch between them. Each company has its own data, wallet, and settings — including a dedicated **Sandbox Env** for testing.
### Learn on dojah
The **Learn on dojah** button in the top bar opens Dojah’s learning hub — guides, tutorials, and product walkthroughs — in a new tab.
[Open Learn on dojah ↗](https://dojah.io/learn)
## The sidebar
The sidebar groups every feature so related tools sit together. The groups are:
| Group | What’s inside |
| ------------ | ----------------------------------------------------------------------------------------------------------- |
| Top level | **Compliance** (shown with a red dot until approved), **Dashboard**, **Fraud Signals**, and **Customers**. |
| Verify | **Individual** and **Business** — run one-off verifications. |
| Workflows | **EasyOnboard** (no-code verification flows) and **EasyAuthentication** (fast re-auth for returning users). |
| Fraud & Risk | **EasyDetect** — real-time transaction and fraud monitoring. |
| Integrations | **Developers**, **API Status**, and **Custom Lists**. |
| Account | **Support**, **Usage**, **Billings**, and **Settings**. |
**Tip.** Once compliance is approved, the Compliance item drops off the sidebar — so the nav reflects exactly what your account can do.
## Frequently asked questions
Select the company name in the top bar to open the company switcher. Each company you belong to has its own data, wallet, and settings, including a dedicated sandbox environment.
The **Learn on dojah** button in the top bar opens Dojah’s learning hub at dojah.io/learn in a new tab.
Sandbox runs on test data and is free; Live runs real verifications against actual records and charges your wallet. Switch between them with the toggle in the top bar — Live unlocks once you complete compliance.
# Customers
Source: https://docs.dojah.io/dashboard-guide/home/customers
A directory of everyone you’ve verified, in one searchable place.
The **Customers** page collects all the people profiled across your verifications into a single directory. Every verified individual becomes a customer profile, so you can look anyone up by ID or name, see which app verified them, and open their full record. The **Total Customers** count at the top tracks how many you’ve built up.
## The customer list
Each row is one customer profile:
| Column | What it shows |
| ------------ | ----------------------------------------------- |
| Customer ID | The unique identifier for the customer profile. |
| Name | The customer’s full name. |
| Gender | The customer’s gender, where available. |
| App Name | The app the customer was verified through. |
| Countries | The countries associated with the customer. |
| Status | The profile’s validity, e.g. **Valid**. |
| Date Updated | When the profile was last updated. |
Select the view icon at the end of a row to open that customer’s full profile.
## Viewing a customer
Opening a customer shows their full profile — a consolidated view of everything Dojah knows about them, gathered from every verification you’ve run.
The profile is made up of:
* **Header** — the customer’s name, verified status, number of verifications, and country, plus actions to **Lookup Another ID** (run a further check on them), **Download Report**, or start a **New Lookup**.
* **Customer Overview** — the consolidated identity record (first/middle/last name, gender, date of birth, country, and created/updated dates), with a green seal on each verified field.
* **Tabs** — each data source appears as its own tab (e.g. **Phone Number**, **AML Screening**). The tab shows the data returned for that check — personal data, photo, and more.
* **Team Comments** — leave notes on the customer so your team can collaborate on a case.
## Finding a customer
**Search** by ID or name to jump to a specific person, and narrow the list with the **Date** and **Apps** filters — handy when you run verifications across more than one app.
**Profiles build automatically.** You don’t add customers by hand — each one is created as you run verifications, so the directory grows alongside your activity.
## Frequently asked questions
Profiles are built automatically as you run verifications — you don’t add customers by hand. Each verified individual becomes a customer profile, so the directory grows alongside your activity.
Yes. Search by ID or name to find a specific person, and narrow the list with the **Date** and **Apps** filters — useful when you verify across more than one app.
A **Customer Overview** with the consolidated identity record (verified fields carry a green seal), tabs for each data source (such as Phone Number and AML Screening), team comments, and actions to look up another ID or download a report.
# Dashboard
Source: https://docs.dojah.io/dashboard-guide/home/dashboard
Your home screen — a snapshot of your account, with quick links to everything else.
The **Dashboard** is where you land when you sign in. New accounts see a setup checklist; from then on it’s an at-a-glance view of your wallet, usage, recent verifications, and fraud signals. The date filter in the top-right sets the period for the metrics.
## Getting started checklist
On a new account, **“Welcome to Dojah”** walks you through the steps to get going, with a progress bar tracking how far you are:
| Step | What it does |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------- |
| Account created | Done as soon as you sign up. |
| Complete compliance | **Start** opens [Compliance](/dashboard-guide/getting-started/compliance) to submit your business details. |
| Top up your wallet | **Top up** opens the wallet so you can [add funds](/dashboard-guide/getting-started/fund-your-wallet). |
| Make your first verification | **Try it** sends you to run your first check. |
## Quick Actions
Shortcuts to the things you do most often:
* **Verify Individual** — run a one-off individual verification.
* **Verify Business** — run a one-off business verification.
* **Create Verify Link** — generate a shareable verification link.
* **View Docs** — jump to the documentation.
## Wallet & usage at a glance
Two cards give you the numbers that matter:
* **Wallet Balance** — your current balance, with a **Top Up** shortcut.
* **Usage Snapshot** — your success rate plus **Total Calls**, **Successful**, and **Failed** counts for the selected period.
## Recent Verifications
A live list of your latest checks, split into **Individuals** and **Businesses** tabs. Each row shows who was verified, the check type (NIN, BVN, AML, Document, Address…), its status (**Verified**, **Pending**, or **Failed**), and when it ran. **View all** opens the full list.
## Fraud Overview
A summary of fraud signals across your account — **Total**, **Critical**, and **High** counts, plus **Insights** (notable patterns) and **Recommendations** (suggested actions). **View all** opens **Fraud Signals**.
## Explore More
Cards introducing other products you can add — **EasyDetect**, **EasyOnboard**, **EasyAuthentication**, and **AML & Watchlist** — each with a **Learn More** link.
## Frequently asked questions
The dashboard is your home screen — a snapshot of your account with a setup checklist, wallet balance, usage snapshot, recent verifications, and a fraud overview, plus quick links to everything else.
On a new account, the **Welcome to Dojah** checklist walks you through account creation, completing compliance, topping up your wallet, and making your first verification, with a progress bar.
Yes. Use the date filter in the top-right to set the period — the usage snapshot and metrics update to match.
# Fraud Signals
Source: https://docs.dojah.io/dashboard-guide/home/fraud-signals
See how the people you verify compare across the wider Dojah network — advisory signals that help you spot risk.
**Fraud Signals** surfaces suspicious patterns around the people you verify. It has two views, shown in the sidebar: [Dojah Intelligence](/dashboard-guide/home/fraud-signals/dojah-intelligence) (network signals) and [My Signals](/dashboard-guide/home/fraud-signals/my-signals) (your own account).
How the identities you’ve checked compare across the wider Dojah network.
The fraud signals raised by your own verifications and workflows.
## Frequently asked questions
No. Fraud Signals are **advisory** — they show how an identity compares across the Dojah network to inform your decision. Dojah never auto-rejects anyone; you choose whether to confirm fraud or dismiss a signal.
**Dojah Intelligence** shows network signals — how the identities you’ve checked compare across the wider Dojah network. **My Signals** shows the fraud signals raised by your own verifications and workflows.
Open the flagged identity in the **review queue**, then record your own decision — confirm fraud or dismiss it. The network signal stays advisory, so nothing is rejected automatically.
# Dojah Intelligence
Source: https://docs.dojah.io/dashboard-guide/home/fraud-signals/dojah-intelligence
Network signals — how the identities you verify compare across the wider Dojah network.
Compares the identities you’ve checked against the **Dojah network** to reveal patterns you couldn’t see from your own data alone — an identity used by multiple people, a phone in an account cluster, a face under several IDs.
**Signals are advisory.** Use them to *inform*, not replace, your own checks. Dojah does not auto-reject anyone based on a signal.
## Network overview
The top of the view summarizes what the network found:
| Metric | What it shows |
| ------------------------- | --------------------------------------------------------------------- |
| Identities checked | How many of your verifications were compared against the network. |
| Network matches | How many matched something in the network (with the share of checks). |
| High-risk | Matches that warrant review. |
| Confirmed-fraud proximity | Identities linked to known fraud. |
Below that, **Risk level distribution** breaks matches into High, Medium, and Low, and **Signals by type** shows what the network is flagging most — for example *ID used by multiple people*, *Phone in account cluster*, *Document seen elsewhere*, *Face under multiple IDs*, and *Linked to confirmed fraud*.
## Review queue
The actionable list — identities flagged by the network, ready for you to look at. Search by name, ID, or signal, and filter by **Risk**, **Signal**, **Status**, or date.
| Status | What it means |
| --------- | --------------------- |
| Open | Not yet reviewed. |
| Reviewing | Being looked into. |
| Dismissed | Reviewed and cleared. |
Opening an item lets you record your own decision — **confirm fraud** or dismiss it. Confirming captures *your* judgement; the network signal stays advisory, so nothing is rejected automatically.
# My Signals
Source: https://docs.dojah.io/dashboard-guide/home/fraud-signals/my-signals
The fraud signals raised by your own verifications and workflows, over the period you choose.
The signals raised by **your own** verifications and workflows, over the period you choose.
## At a glance
Headline counts — **Total Signals**, **Critical**, **High**, and **Medium** — sit above a **Signal Trend** chart (signals over time by severity) and a **By Category** breakdown (Identity Mismatch, Velocity Abuse, Blocklist Hit, Document Fraud, Geolocation Anomaly, AML/PEP Match).
## Insights & Recommendations
**Insights** call out patterns in your data (for example, identity mismatches up week-on-week, a noisy IP range, peak hours, or a high-signal app). **Recommendations** suggest actions to reduce risk — enable IP blocking, add a liveness check, or update your blocklist — each tagged by severity.
## All signals
**View Signals** opens the full list, where you can search and filter by **Severity**, **Category**, and **Source** (Individual & Business Verification, EasyAuthentication, EasyOnboard, EasyDetect, and Custom Lists).
# API Status
Source: https://docs.dojah.io/dashboard-guide/integrations/api-status
See the real-time health of every Dojah service — KYC, KYB, and messaging — with per-service status, recent uptime, and incident banners.
The **API Status** page shows whether Dojah’s services are running normally. When a verification is failing, it’s the first place to check: it tells you at a glance whether the issue is on Dojah’s side and which specific service is affected.
**Service health, not your integration.** This page reflects the health of Dojah’s own services. If a check is failing only for you while the service shows **ONLINE**, the cause is more likely your request or balance — check the response code in [Usage](/dashboard-guide/account/usage), or reach the team via [Support](/dashboard-guide/account/support).
## The status banner
At the top of the page, a banner summarises overall health. When everything is healthy it reads **All systems operational**. When one or more services are down, it switches to a count — for example *“6 services offline in the past hour”* — with a short breakdown of how many are offline versus experiencing interruptions.
## Service categories
Services are grouped into collapsible categories. Each header shows an **issue count** if any of its services are affected, and a **Last checked** timestamp. Click a category to expand it and see the services inside.
* **Nigeria KYC APIs** — identity checks for Nigeria (BVN, NIN, CAC, and more).
* **Ghana KYC APIs** — identity checks for Ghana (Ghana Card, Passport, and more).
* **Other African Countries KYC APIs** — checks for Kenya, South Africa, Uganda, and others.
* **KYB APIs** — business verification (CAC Basic, CAC Advanced, TIN Lookup).
* **Messaging APIs** — OTP delivery over SMS, WhatsApp, and Email.
## Reading a service’s status
Expanding a category reveals a card for each service. The card shows the service’s current status, when it was last updated, and a short strip of recent uptime.
| On the card | What it shows |
| ------------ | ------------------------------------------------------------------------------------ |
| Service | The name of the API or check, e.g. **KYC BVN**, **GH Passport**, or **SMS OTP**. |
| Status badge | The service’s current state — **Online**, **Service Interruption**, or **Offline**. |
| Timestamp | When that service’s status was last updated. |
| Uptime bars | A short strip of recent history. A red bar marks a period when the service was down. |
### What the statuses mean
| Status | Meaning |
| ----------------------- | ------------------------------------------------------------------------------------------- |
| 🟢 Online | The service is operating normally. |
| 🟡 Service Interruption | The service is up but experiencing intermittent issues — some requests may fail or be slow. |
| 🔴 Offline | The service is currently unavailable. Dojah’s team is notified and investigating. |
## Frequently asked questions
Open **API Status** under **Integrations** in the dashboard. The banner at the top tells you whether all systems are operational, and each service category shows the status of its individual services. Expand a category to find the specific check you’re using.
**Online** means the service is running normally. **Service Interruption** means it’s up but having intermittent issues, so some requests may fail or be slow. **Offline** means it’s currently unavailable and Dojah’s team is investigating.
They’re a recent uptime history for that service. A **red** bar marks a period when the service was down, so a card with red bars had a recent outage even if it’s back online now.
An **Offline** status means the issue is on Dojah’s side, and the team is already investigating — there’s nothing to fix in your integration. Retry once the service returns to **Online**. If a check is failing for you but API Status shows the service is **Online**, check the response code in [Usage](/dashboard-guide/account/usage) or reach out via [Support](/dashboard-guide/account/support).
# Custom Lists
Source: https://docs.dojah.io/dashboard-guide/integrations/custom-lists
Build reusable sets of values — countries, emails, phone numbers, IPs, BVNs, NINs — to block or monitor across your fraud prevention rules.
A **custom list** is a named set of values you maintain once and reference from your fraud prevention rules. Rather than repeating the same blocked country or flagged email in every rule, you keep it in one list and point your rules at the list — update the list, and every rule that uses it follows.
**Where lists are used.** Custom Lists are the building blocks for your fraud rules — for example, a *Blocked Countries* list or a *VPN IP Addresses* list that your **EasyDetect** rules check against. Find them under **Integrations** in the sidebar.
## The Custom Lists table
The main view lists every custom list you’ve created. Use **Search** to find one by name, and **+ Create List** to add a new one. Click a list’s name to open it and manage its items.
| Column | What it shows |
| ------------ | --------------------------------------------------------------------------- |
| List Name | The name you gave the list. Click it to open the list and manage its items. |
| Items | How many entries the list currently holds. |
| Created By | The team member who created the list. |
| Date Added | When the list was created. |
| Date Updated | When an item in the list was last changed. |
| ⋮ (actions) | The three-dot menu to **Edit** or **Delete** the list. |
## Creating a list
Select **+ Create List** to open the form. Give the list a name and description, choose its **Type**, then add the values it should hold.
| Field | What it does |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |
| List name | A label for the list, e.g. *Blocked Countries*. |
| Description | A short note on what the list is for. |
| Type | The kind of value the list holds — **Countries**, **Email**, **Phone Number**, **IP Address**, **BVN**, **NIN**, or **Others**. |
| Add items | Type a value and press **Enter** (or **Add**) to add it. Each value appears as a chip you can remove. |
| Bulk upload | Drag & drop or browse a **CSV file** to add many values at once. |
## Viewing and editing a list
Click a list’s name to open its detail view, where every entry shows as a chip. From here you can **Search items**, **Add Item**, or remove a value with the **×** on its chip. To rename a list, change its description, or delete it, use the **⋮** menu on its row in the table.
**Deleting is permanent.** Removing a list deletes it and all of its items, and the action can’t be undone. Any rule that relied on the list will no longer find it — check your fraud rules before deleting.
## Frequently asked questions
A custom list is a named set of values — such as countries, emails, phone numbers, or IP addresses — that you maintain in one place and reference from your fraud prevention rules. Updating the list updates every rule that uses it, so you don’t have to edit each rule by hand.
A list can hold **Countries**, **Email** addresses, **Phone Number**s, **IP Address**es, **BVN**s, **NIN**s, or **Others**. You set the type when you create the list.
In the Create or Edit form, use the **bulk upload** area to drag & drop or browse a **CSV file**. You can also add values one at a time by typing each and pressing **Enter**.
Yes. Open the **⋮** menu on the list’s row and choose **Edit** to change its details and items, or **Delete** to remove it. Deleting is permanent — the list and all its items are removed and can’t be recovered.
# Developers
Source: https://docs.dojah.io/dashboard-guide/integrations/developers
Your integration hub — manage API keys and apps, create and revoke API tokens, and subscribe to webhooks, all in one place.
The **Developers** page is where you wire Dojah into your product. It’s split into three tabs — [Configuration](#configuration), [API Tokens](#api-tokens), and [Webhooks](#webhooks) — with a link out to the full API **Documentation**.
**Keep your secrets secret.** Your private key and API tokens grant access to your account — never expose them in client-side code or commit them to source control. Revoking a token or generating new keys takes effect immediately, so anything still using the old credential will stop working.
## Configuration
The **Configuration** tab holds your API keys and your apps. A badge shows whether you’re viewing **Production** or **Sandbox** keys — this follows your live/sandbox mode, so toggle modes to switch which set you see.
| Element | What it does |
| ----------------- | ----------------------------------------------------------------------------------------------------------- |
| Public key | Shown in full. Use **Copy** to grab it — it’s safe to use in client-side integrations. |
| Private key | Hidden by default. Select **Reveal key** and enter your password to view it, then **Copy**. Keep it secret. |
| Generate New Keys | Rotates your keys (password required). Existing keys are invalidated immediately. |
### Apps
An **app** represents a single integration — typically one product or service you’re connecting to Dojah. Each app has its own **App ID** and brand assets (a logo and primary color, used to style the verification experiences your users see), and your [API tokens](#api-tokens) and [webhooks](#webhooks) are each tied to a specific app. If you run more than one product, giving each its own app keeps their credentials, webhooks, and branding cleanly separate.
| Element | What it does |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Create App | Sets up a new app with a name, logo, and brand color. Each app gets its own **App ID**. |
| Apps table | Lists your apps with their App ID and creation date. Use the **Edit** and **Delete** icons on a row to update or remove an app. |
## API Tokens
The **API Tokens** tab manages the tokens that authenticate your requests. Each token has a name and a masked **Token ID** — select the eye icon and enter your password to reveal it. Use **Create Token** to add one (give it a name and choose the app it belongs to).
Manage an existing token with the two actions on its row:
| Action | What it does |
| --------- | --------------------------------------------------------------------------------------------------------------------- |
| ✎ Edit | Rename the token. Its ID stays the same. |
| 🗑 Delete | Revoke the token for good. Any application using it loses access immediately, so confirm nothing depends on it first. |
## Webhooks
The **Webhooks** tab lets you receive real-time event notifications. Select **Subscribe** to point an app at an endpoint: choose the app, enter your **Webhook URL**, and pick the service whose events you want.
| Column | What it shows |
| --------------- | ------------------------------------------------------------------- |
| App Name | The app the webhook belongs to. |
| Environment | **Live** or **Sandbox**. |
| Service Type | The service whose events are delivered, e.g. KYC Widget or SMS. |
| Date Subscribed | When the subscription was created. |
| End Point | The URL events are sent to. |
| Actions | **Copy** the endpoint, **View** the subscription, or **Delete** it. |
## Frequently asked questions
Open **Developers** under **Integrations** and stay on the **Configuration** tab. Your public key is shown in full; reveal the private key by selecting **Reveal key** and entering your password. The badge tells you whether you’re viewing Production or Sandbox keys — switch your live/sandbox mode to see the other set.
An **app** represents one integration — usually a single product or service you’re connecting to Dojah. It has its own **App ID** and brand assets (logo and primary color, used to style the verification experiences your users see), and your API tokens and webhook subscriptions are each linked to a specific app. Running several products? Give each its own app so their credentials, webhooks, and branding stay separate.
Your **API keys** (public and private) are the core credentials for an environment and live on the Configuration tab. **API tokens** are named credentials you create on the API Tokens tab — handy when you want separate, individually revocable tokens for different uses. You can rename or revoke a token without touching your main keys.
On the **API Tokens** tab, each token row has two icons at the end: **Edit** (the pencil) to rename it, and **Delete** (the trash) to revoke it. Deleting is permanent and takes effect immediately — anything using that token will lose access.
Go to the **Webhooks** tab and select **Subscribe**. Choose the app, enter the **Webhook URL** where events should be delivered, and pick the service whose events you want to receive. The new subscription appears in the table, where you can copy, view, or delete it.
Generating new keys rotates your credentials and **invalidates the existing ones immediately**. Any integration still using the old keys will start failing, so update your apps with the new keys right away. You’ll be asked for your password to confirm.
# Business Verification
Source: https://docs.dojah.io/dashboard-guide/verify/business-verification
Verify and manage business entities and corporate registrations — CAC lookups, directors and shareholders, global company checks, AML screening, and document analysis, one at a time or in bulk.
**Business Verification** (KYB) is where you run checks on a company and review the results. Like Individual Verification, it has three parts: the [history](#verification-history) of every lookup you’ve run, the [New Lookup](#running-a-lookup) form for running a fresh check, and the [result](#reading-a-result) view for each one.
**Business or individual?** Use Business Verification to check a *company* — its registration, directors, and risk. To verify a *person*, use [Individual Verification](/dashboard-guide/verify/individual-verification) (KYC) instead.
## Verification types
Dojah offers five kinds of business check. Which ones are available depends on the **country** you choose — Global Check, AML Screening, and Document Analysis work everywhere, while the CAC lookups are specific to Nigeria.
| Type | What it does | Where |
| ----------------- | ------------------------------------------------------------------------------------------ | ---------------- |
| CAC Basic | Confirms a company’s CAC registration — name, RC number, status, and registered address. | 🇳🇬 Nigeria |
| CAC Advanced | Everything in CAC Basic, plus the company’s **directors** and **shareholders**. | 🇳🇬 Nigeria |
| Global Check | Looks up a company in global business registries by name. | 🌍 All countries |
| AML Screening | Screens a business against global watchlists, sanctions, PEP, and adverse-media databases. | 🌍 All countries |
| Document Analysis | Reads and validates an uploaded business document (front and back). | 🌍 All countries |
## Running a lookup
Select **+ New Lookup** to open the form. Choose your **Country**, the **App Name** to record the lookup under, and the **Verification Type** — the form then shows the fields that check needs. For a CAC lookup, you enter the **Company Name** and/or **RC Number**.
| Step | What it does |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Country | The country whose registries you’re checking. This decides which verification types are available. |
| App Name | The app the lookup is recorded under. |
| Verification Type | Which of the five checks to run. The fields below change to match. |
| Single / Batch | **Single** runs one lookup; **Batch** lets you upload a CSV to run many at once (give the batch a name so you can find them later). |
| Link to an existing business | Optional. Attach this result to a business you already have — leave blank to create a new one. |
What you provide depends on the check: **CAC** lookups take a company name or RC number; **Global Check** takes a company name; **AML Screening** takes the organisation name, registration number, and risk categories; and **Document Analysis** takes an uploaded document. The submit button reads **Verify Business** (or **Upload & Run** for a batch).
**Verifying many businesses at once.** Switch to **Batch**, name the batch, and upload a CSV (a template is provided). Track batch progress from the **Batches** button on the history view.
## Verification history
The default view lists everything you’ve run, split into three tabs — one per result type. Each tab opens with its own headline counts and a table you can **Search**, **Filter**, and **Export**.
| Tab | Lists | Key columns |
| -------------------- | ----------------------------- | --------------------------------------------------------- |
| Business Data | CAC and Global Check lookups. | Business Name · ID Type · Status · Date Updated |
| AML Screening | Business AML screenings. | Name · Risk Level · Result · Status · Entity · Monitoring |
| Address Verification | Address checks. | Reference · Name · Phone Number · Status · Date Created |
Status reads differently per check — a business lookup shows **Found** or **Not Found**; an AML case shows its match status and risk level; an address check moves through **Pending**, **Completed**, **Failed**, or **Cancelled**.
## Reading a result
Open a verification to see the full result. The header shows the company’s name, an overall status (**Verified**, **Pending**, or **All Failed**), its reference, and how many checks are attached. Down the left is a summary sidebar; the main panel has a tab per verification.
| Sidebar section | What it shows |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Business Overview | The company details gathered — name, RC number, type, country, dates — with a check that flags where they match or differ across the business’s verifications. |
| Case Info | For AML Screening only: the case ID, match score, risk level, and assignee. Risk level and assignee are editable so you can work the case. |
| Timeline | A step-by-step log of how the verification ran. |
| Team Comments | Notes from your team — add your own to keep a record on the case. |
Each **verification tab** shows that check’s data. A **CAC Advanced** result adds **Directors** and **Shareholders** tables; **AML Screening** lists any watchlist matches; **Document Analysis** shows the uploaded document. A failed check shows the error and a retry option instead.
Use **Download Report** to export the result as a PDF — you can choose which verifications to include — or **Lookup Another ID** to run a new check for the same business.
## Frequently asked questions
Go to **Verify → Business** and select **+ New Lookup**. Choose the country, the app to record it under, and the verification type, then enter the company’s details (for a CAC lookup, its name or RC number) and select **Verify Business**. The result appears in your history and in the business’s profile.
**CAC Basic** confirms a company’s core registration — name, RC number, status, and registered address. **CAC Advanced** returns all of that *plus* the company’s **directors** and **shareholders**, so you can see who owns and runs the business.
Yes. **Global Check**, **AML Screening**, and **Document Analysis** are available in every country. The **CAC** lookups are specific to Nigeria, since they query the Corporate Affairs Commission registry.
On the New Lookup form, switch from **Single** to **Batch**, give the batch a name, and upload a CSV (a template is provided). Each batch runs as a group, and you can track progress and find past uploads from the **Batches** button on the history view.
Yes — run an **AML Screening** check. It screens the organisation against global sanctions, PEP, and adverse-media databases, and returns any matches with a risk level you can review and assign on the result’s **Case Info** panel.
# Individual Verification
Source: https://docs.dojah.io/dashboard-guide/verify/individual-verification
Verify and manage individual identities across multiple countries — government ID lookups, address checks, credit reports, AML screening, and document analysis, one at a time or in bulk.
**Individual Verification** is where you run identity checks on a person and review the results. The page has three parts: the [history](#verification-history) of every lookup you’ve run, the [New Lookup](#running-a-lookup) form for running a fresh check, and the [result](#reading-a-result) view for each verification.
**Verifications and customers.** Each lookup can be attached to a customer — either a new one or an existing record you link on the form. Results then roll up into the person’s profile on the [Customers](/dashboard-guide/home/customers) page, so you build one identity over time instead of scattered checks.
## Verification types
Dojah offers five kinds of individual check. Which ones are available depends on the **country** you choose — AML Screening and Document Analysis work everywhere, while the others cover Nigeria and a set of other countries.
| Type | What it does | Where |
| -------------------- | --------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| Government Lookup | Checks a government-issued ID — NIN, BVN, passport, driver’s licence, and more — against the official registry. | 🌍 Nigeria & select countries |
| Address Verification | Confirms a physical address, with field-agent photos of the location. | 🇳🇬 Nigeria |
| Credit Check | Pulls a credit report — score, loan summary, and behavioural analysis — from a BVN. | 🇳🇬 Nigeria |
| AML Screening | Screens a person against global watchlists, sanctions, PEP, and adverse-media databases. | 🌍 All countries |
| Document Analysis | Analyses an uploaded ID document (front and back) to read and validate it. | 🌍 All countries |
## Running a lookup
Select **+ New Lookup** to open the form. Choose your **Country**, the **App Name** to record the lookup under, and the **Verification Type** — the form then shows the fields that check needs. For a Government Lookup, for example, you pick an **ID Type** and enter the **ID Number**.
| Step | What it does |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Country | The country whose registries you’re checking. This decides which verification types and ID types are available. |
| App Name | The app the lookup is recorded under. |
| Verification Type | Which of the five checks to run. The fields below change to match. |
| Single / Batch | **Single** runs one lookup; **Batch** lets you upload a CSV to run many at once (give the batch a name so you can find them later). |
| Link to an existing customer | Optional. Attach this result to a customer you already have — leave blank to create a new one. |
The submit button names itself for the check — **Run Lookup**, **Submit Address**, **Perform Search**, or **Upload** — and becomes available once the required fields are filled.
**Verifying many people at once.** Switch to **Batch**, name the batch, and upload a CSV (a template is provided). Track batch progress from the **Batches** button on the history view.
## Verification history
The default view lists everything you’ve run, split into four tabs — one per result type. Each tab opens with its own headline counts and a table you can **Search**, **Filter**, and **Export**.
| Tab | Lists | Key columns |
| -------------------- | -------------------------- | --------------------------------------------------------- |
| Government Data | Government Lookup results. | Name · ID Type · ID Number · Status · Date Updated |
| AML Screening | AML screenings. | Name · Risk Level · Result · Status · Entity · Monitoring |
| Address Verification | Address checks. | Reference · Name · Phone Number · Status · Date Created |
| Document Analysis | Document analyses. | Name · ID Type · Status · Date Uploaded |
Status reads differently per check — a Government Lookup shows **User Found** or **User Not Found**; an address check moves through **Pending**, **Completed**, **Failed**, or **Cancelled**; an AML case shows its match status and risk level.
## Reading a result
Open a verification to see the full result. The header shows the person’s photo, name, an overall status (**Verified**, **Pending**, or **All Failed**), and how many checks are attached. Down the left is a summary sidebar; the main panel has a tab per verification.
| Sidebar section | What it shows |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Customer Overview | The identity fields gathered — name, gender, date of birth, country — with a check that flags where they match or differ across the person’s verifications. |
| Case Info | For AML Screening only: the case ID, match score, risk level, and assignee. Risk level and assignee are editable so you can work the case. |
| Timeline | A step-by-step log of how the verification ran. |
| Team Comments | Notes from your team — add your own to keep a record on the case. |
Each **verification tab** shows that check’s data: a Government Lookup lists the returned personal data and photo; AML Screening lists any watchlist matches; a Credit Check breaks down into **Credit Score**, **Credit Summary**, and **Behavioral Analysis**. A failed check shows the error and a **Retry This Lookup** button instead.
Use **Download Report** to export the result as a PDF — you can choose which verifications to include — or **Lookup Another ID** to run a new check for the same person.
## Frequently asked questions
Go to **Verify → Individual** and select **+ New Lookup**. Choose the country, the app to record it under, and the verification type, then fill in the details (for example an ID type and number for a Government Lookup) and run it. The result appears in your history and on the person’s customer profile.
It depends on the country. In Nigeria you can verify **NIN**, **BVN**, phone number, driver’s licence, voter’s card, passport, and TIN; other countries have their own national IDs and passports. The available ID types appear once you pick a country and choose **Government Lookup**.
**Government Lookup** checks an ID against an official registry; **Address Verification** confirms a physical address; **Credit Check** pulls a credit report from a BVN; **AML Screening** screens against sanctions, PEP, and watchlists; and **Document Analysis** reads and validates an uploaded ID document. AML Screening and Document Analysis are available in every country.
On the New Lookup form, switch from **Single** to **Batch**, give the batch a name, and upload a CSV (a template is provided). Each batch runs as a group, and you can track progress and find past uploads from the **Batches** button on the history view.
Yes. Open the result and select **Download Report**. When a person has more than one verification, you can choose which ones to include before exporting the PDF.
# EasyAuthentication
Source: https://docs.dojah.io/dashboard-guide/workflows/easyauthentication
Re-authenticate returning users in seconds — build auth flows using OTP, PIN, biometrics, or magic links, then monitor every authentication and the customers behind them.
**EasyAuthentication** verifies that a *returning* user is who they say they are. You set up an [auth flow](/dashboard-guide/workflows/easyauthentication/authflows) — an authentication method delivered over a channel — integrate it, and from then on each attempt is recorded as an [authentication](/dashboard-guide/workflows/easyauthentication/authentications). The people who authenticate become [customers](/dashboard-guide/workflows/easyauthentication/customers) you can track over time, and the [Overview](/dashboard-guide/workflows/easyauthentication/overview) shows how it’s all performing.
Choose an authentication method — OTP, PIN, biometric, or magic link — and the channel to deliver it.
Trigger authentication from your product with the hosted link, API, or SDK.
Returning users confirm their identity; each attempt is scored as Successful, Failed, or Expired.
Track every authentication and customer, and dig into any session.
**EasyAuthentication vs. EasyOnboard.** [EasyOnboard](/dashboard-guide/workflows/easyonboard) verifies a user the *first* time (capturing their identity and liveness). EasyAuthentication confirms a *returning* user — and can **link an EasyOnboard flow** so a biometric check matches against the liveness they enrolled during onboarding.
How your authentication is performing.
Build flows from a method and a channel.
Every authentication attempt in detail.
The people authenticating, over time.
## Frequently asked questions
EasyAuthentication is Dojah’s product for re-authenticating returning users. You build an **auth flow** using a method — OTP, PIN, biometric, or magic link — and a delivery channel, integrate it into your product, and every attempt is recorded under **Authentications**. It lives under **Workflows** in the dashboard.
**EasyOnboard** verifies a user for the *first* time — capturing their identity and liveness. **EasyAuthentication** confirms a *returning* user. You can link an EasyOnboard flow (one with a liveness step) so a biometric re-auth matches against the face the user enrolled at onboarding.
**OTP** (a one-time code over SMS, Email, or WhatsApp), **PIN** (in-app), **Biometric** (a face capture with liveness, via the SDK), and **Magic Link** (a one-tap link over Email). You choose the method and channel when you create the flow.
Go to **AuthFlows** and select **+ Create Flow**, then pick the authentication method and channel. Configure its branding under **Appearance**, set rules and links under **Settings**, and **Publish** to generate a shareable authentication link.
**Expired** means the session timed out before the user finished — for example, an OTP code that wasn’t entered in time. It’s distinct from **Failed**, where a check was attempted but didn’t pass.
# Authentications
Source: https://docs.dojah.io/dashboard-guide/workflows/easyauthentication/authentications
Every authentication attempt, with its status, the liveness match behind it, and device and IP detail.
**Authentications** lists every authentication attempt. Headline cards count **Total**, **Successful**, and **Failed**; the table shows the user, reference and auth IDs, app, status, and time. Search, filter by status or app, and export.
| Status | Meaning |
| ---------- | ---------------------------------------------------------------------- |
| Successful | The user confirmed their identity. |
| Failed | The check didn’t pass — e.g. a wrong code or a face that didn’t match. |
| Expired | The session timed out before the user completed it. |
Open an authentication to see the detail. The **Bio data** tab shows the **Registered Liveness** photo (enrolled earlier) next to the **Authentication** photo from this attempt, so you can see the match; the **IP/Device Check** tab shows device and IP details (including VPN/proxy flags). A sidebar carries the IDs, a timeline of the attempt, and any failure reason.
# AuthFlows
Source: https://docs.dojah.io/dashboard-guide/workflows/easyauthentication/authflows
Pair an authentication method — OTP, PIN, biometric, or magic link — with a delivery channel, then brand and publish it.
An **auth flow** pairs an authentication **method** with a delivery **channel**. The list shows each flow’s app, status (**Published** or **Draft**), and creation date; **+ Create Flow** starts a new one.
| Method | How the user authenticates | Channels |
| ---------- | ------------------------------------------------------------------- | -------------------- |
| OTP | A one-time code they enter to confirm their identity. | SMS, Email, WhatsApp |
| PIN | A secret PIN they set. | In-App |
| Biometric | A face capture with liveness, matched against their enrolled photo. | SDK |
| Magic Link | A one-tap link that signs them in. | Email |
## The auth-flow builder
Open a flow to configure it in the builder — a two-panel view with a live preview on the right. Work across three tabs:
| Tab | What it sets |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Appearance | Branding — linked app, logo, brand colour, display name, font, and button radius. The preview updates as you go. |
| Settings | **Link EasyOnboard Flow** (reuse an onboarding flow’s liveness for fast re-auth), **Notifications** (webhook/email + support email), **Countries**, and the **Confirmation Page** (default page or a redirect URL). |
| Integration | A **Shareable Link** to the hosted authentication page (once published), plus a link to the [SDK & API reference](/api-reference/get-started/introduction) for embedding it. |
**Reuse your onboarding liveness.** Under **Settings → Link EasyOnboard Flow**, connect an EasyOnboard flow that has a liveness step. Biometric re-authentication then matches the user’s selfie against the face they enrolled at onboarding — only flows with a liveness step can be linked.
# Customers
Source: https://docs.dojah.io/dashboard-guide/workflows/easyauthentication/customers
Everyone who has authenticated through your flows, with their registered liveness and authentication history.
**Customers** lists everyone who has authenticated through your flows, with their flow, user and reference IDs, and the date. Open a customer to see their registered liveness and authentication history.
From a customer, select **Analysis** to open an **Authentication Analysis** — a per-customer view of their successful, failed, and abandoned attempts over time, useful for spotting unusual patterns on a single account.
# Overview
Source: https://docs.dojah.io/dashboard-guide/workflows/easyauthentication/overview
Monitor authentication performance across all your flows — success rate, attempts over time, and recent authentications.
The **Overview** monitors authentication performance across all your flows. Headline cards show **Successful**, **Failed**, and **Abandoned** attempts with your overall **success rate**, a chart of authentications over time, and a list of recent authentications.
# EasyOnboard
Source: https://docs.dojah.io/dashboard-guide/workflows/easyonboard
Build no-code customer onboarding flows — assemble the verification steps you need in a visual builder, share a hosted link or embed the SDK, and review every session in one place.
**EasyOnboard** lets you package several checks — ID, liveness, address, custom questions — into a single branded flow your users complete themselves. You build a [workflow](/dashboard-guide/workflows/easyonboard/workflows) once, share its hosted link, and every completed session lands under [Verifications](/dashboard-guide/workflows/easyonboard/verifications) for review. The [Overview](/dashboard-guide/workflows/easyonboard/overview) tracks how your onboarding is performing.
Add the steps you want in the no-code builder and brand it to match your product.
Publish to get a hosted verification link, or embed it in your app with the SDK.
Each person completes your flow on the hosted page; checks run as they go.
Every session lands in Verifications with its result, ready to review.
**EasyOnboard vs. Verify.** EasyOnboard hands the flow to your *user* — they complete a hosted, multi-step journey themselves. The [Verify](/dashboard-guide/verify/individual-verification) pages are for checks *you* run one at a time from the dashboard.
How your onboarding is performing.
Build and edit your onboarding flows.
Review every completed session.
## Frequently asked questions
EasyOnboard is Dojah’s no-code tool for building customer onboarding flows. You assemble verification steps — ID, liveness, address, custom questions — into a single branded **workflow**, share it as a hosted link or embed it with the SDK, and review every completed session under **Verifications**. It lives under **Workflows** in the dashboard.
Go to **Workflows** and select **+ Create Flow** — start from a template or from scratch. In the builder, add steps under the **Steps** tab, brand the flow under **Appearance**, set your review and country rules under **Settings**, then **Publish**.
Publish the workflow, then open the **Integration** tab. You’ll find a **Shareable Link** — a hosted verification page you can send to users — and a link to the [SDK & API reference](/api-reference/get-started/introduction) for embedding the same flow in your web or mobile app.
From the Steps catalogue: **Get Started** (welcome), **User Data**, **Government Data** (NIN, BVN, passport, licence), **Government Issued ID**, **Liveness**, **Address**, **Email**, and custom **Questions**. You can also turn on **fraud rules** — age limits, liveness/ID-photo matching, AML screening, duplicate-ID and IP/device checks, and more.
Open the **Verifications** tab. Every session appears with its status — **Successful**, **Failed**, **Ongoing**, **Pending**, or **Abandoned** — and you can open any one to see the submitted data, per-step results, timeline, and cost.
# Overview
Source: https://docs.dojah.io/dashboard-guide/workflows/easyonboard/overview
Track how your onboarding is performing — conversion, status and country distribution, top failure reasons, and where users drop off.
The **Overview** monitors verification performance across all your workflows. Headline cards show **Successful**, **Failed**, **In Progress**, and **Abandoned** sessions with your overall **conversion rate**, alongside charts for status and country distribution, the top failure reasons, the steps users abandon most, and verifications over time.
# Verifications
Source: https://docs.dojah.io/dashboard-guide/workflows/easyonboard/verifications
Every session users have run through your workflows, with its status, submitted data, per-step results, and cost.
**Verifications** lists every session a user has run through your workflows. Headline cards count **Successful**, **Failed**, **In Progress**, and **Abandoned** sessions; the table shows each session’s name, reference ID, status, reason, and date. Switch between **All Verifications** and **My Pending Verifications**, and search, filter, or export.
| Status | Meaning |
| ---------- | ------------------------------------------------------------------- |
| Successful | The user completed the flow and passed its checks. |
| Failed | A check didn’t pass — the reason is shown on the row and in detail. |
| Ongoing | The user is partway through the flow. |
| Pending | Awaiting a result — for example, a manual review. |
| Abandoned | The user started but left before finishing. |
Open a session to see the data the user submitted and the result of each step, plus a sidebar with the **overview**, any **failure reason**, a **timeline**, **webhook** status, related **sessions**, and the **cost** breakdown. From here you can **Download Report** or **Reverify** the user.
# Workflows
Source: https://docs.dojah.io/dashboard-guide/workflows/easyonboard/workflows
Create and edit reusable onboarding flows in the no-code builder — branding, verification steps, fraud rules, settings, and integration.
A **workflow** is a reusable onboarding flow. The list shows each workflow’s app, status (**Published** or **Draft**), session count, estimated cost, and creation date. Select **+ Create Flow** to start a new one — from a pre-built **template** (Lending, Crypto, Digital Biz, BNPL) or from scratch. A second tab, **Verification links**, tracks individual links you’ve shared.
A workflow is tied to an **app** — its branding and verification data run under that app’s keys. Pick the app when you create the flow. See [Apps](/dashboard-guide/integrations/developers#apps) for how apps work.
## The workflow builder
Open a workflow to edit it in the **builder** — a two-panel view with a live phone preview on the right, so you see exactly what users will. Work is organised across five tabs: [Appearance](#appearance), [Steps](#steps), [Fraud Check](#fraud-check), [Settings](#settings), and [Integration](#integration). Save your work as a **Draft** and **Publish** when it’s ready.
### Appearance
Brands the widget so it matches your product. Settings here drive the live preview.
| Setting | What it controls |
| -------------------- | ----------------------------------------------------------------------------- |
| Branding | The linked app, a logo (PNG, SVG, or JPG, up to 2 MB), and your brand colour. |
| Display Name | The name shown at the top of the widget. |
| Font | The widget font — e.g. Inter, DM Sans, Manrope, Poppins, Lato, or Roboto. |
| Button Border Radius | The roundness of buttons, from square to pill. |
### Steps
The verification steps in the flow, in order. Add them from a catalogue:
| Step | What it collects |
| -------------------- | -------------------------------------------------------------- |
| Get Started | A welcome screen shown before verification begins. |
| User Data | Name, email, and phone number. |
| Government Data | A government ID lookup — NIN, BVN, passport, driver’s licence. |
| Government Issued ID | Capture and verification of an ID document. |
| Liveness | A selfie with liveness detection to confirm a real person. |
| Address | Residential address verification. |
| Email | Email verification by one-time password. |
| Questions | Your own custom questions (open, single-, or multiple-choice). |
Each step shows its own cost, and the builder totals an **estimated cost per verification** as you go.
### Fraud Check
Under **Fraud Rules** you switch on checks that watch for suspicious activity as a user goes through the flow. Each rule is toggled on or off, and you choose what happens when it triggers — **Pending** (flag the session for your review) or **Fail** (reject it automatically).
| Fraud rule | What it checks |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| User Data | Whether the name and date of birth are consistent across data sources. |
| Age Limit | Flags users below a minimum age you set. |
| Liveness Check | Compares the selfie against the submitted ID photo, with liveness-score and image-match thresholds. |
| AML Screening | Screens against sanctions and PEP databases — choose which lists (**PEP**, **Adverse Media**, **Sanctions**, **Warning**) and a match-score threshold. |
| Duplicate ID | Blocks reuse of the same ID number or face across verifications. |
| IP / Device Screening | Flags suspicious devices, VPNs, or proxies. |
| Digital Address | Verifies the user’s address by matching their geolocation. |
### Settings
Controls how verifications are reviewed, who’s notified, and where the flow runs:
| Setting | What it controls |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Review Process | **Automatic** returns a result as soon as the checks finish; **Manual** holds each session for your team to review before a result is returned to the user. |
| Business Notifications | How your team is alerted to verifications — by **webhook**, **email**, or both. |
| User Notifications | Email updates sent to the user, plus the support email they can reach you on. |
| Countries | Allow or block specific countries — or allow them all. |
| Resume Verifications | Let users pick up an unfinished verification where they left off. |
| Same-Device Agent Resume | Allow a verification to be resumed on the same device. |
| Multiple Device Verification | Allow a user to continue a verification across more than one device. |
| Confirmation Page | Show Dojah’s default completion page, or set a **Redirect URL** to send users back into your app afterwards. |
### Integration
How you take the flow live. Once a workflow is published, the **Integration** tab gives you a **Shareable Link** — a hosted verification page you can send straight to users — plus a link to the [SDK & API reference](/api-reference/get-started/introduction) for embedding the same flow in your own web or mobile product.
# What do you want to do?
Source: https://docs.dojah.io/get-started
Find the task you need across the dashboard and the API — start typing, or browse by area.
# Get help with Dojah
Source: https://docs.dojah.io/support
Four ways to reach Dojah — Help Centre, Slack community, technical support, and dashboard live chat — plus what to include so an integration issue can be traced quickly.
Four ways to reach us, depending on what you need. Start with the Help Centre for account and product questions — come to technical support when an endpoint is not behaving the way the reference says it should.
📚} href="https://support.dojah.io">
Self-serve answers on pricing, onboarding, accounts and billing.
💬} href="https://join.slack.com/t/dojahinc/shared_invite/zt-ng9ch04k-bT5sVBnTY6Fa1ffQ0SAxpQ">
Quick questions and integration advice from the community.
🛠️} href="mailto:support@dojah.io">
Failing calls, unexpected responses and production incidents.
⚡} href="/dashboard-guide/account/support">
A live thread with the team, inside your dashboard.
## Which channel do I need?
| If you… | Use |
| -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| Have a pricing, billing or account question | [Help Centre](https://support.dojah.io) |
| Are evaluating Dojah and want to discuss volumes or a contract | [Help Centre](https://support.dojah.io) |
| Want to know which endpoint fits your use case | [Slack community](https://join.slack.com/t/dojahinc/shared_invite/zt-ng9ch04k-bT5sVBnTY6Fa1ffQ0SAxpQ) |
| Are getting an error you cannot explain from the reference | [Technical support](mailto:support@dojah.io) |
| Have calls failing in production | [Technical support](mailto:support@dojah.io) |
| Need a webhook redelivered or a verification re-run | [Technical support](mailto:support@dojah.io) |
| Want to talk to an agent now, from inside the dashboard | [Dashboard live chat](/dashboard-guide/account/support) |
| Need your wallet funded or a payment reconciled | [Dashboard live chat](/dashboard-guide/account/support) |
## Before you report a technical issue
The team can resolve an integration issue far faster with the details that identify the exact call. Include as much of this as you have:
| Detail | Why it helps |
| ----------------------------- | ------------------------------------------------------------------------------ |
| The endpoint and method | `GET /api/v1/kyc/bvn/full` narrows it immediately. |
| Environment | Whether you called `api.dojah.io` or `sandbox.dojah.io`. |
| Your `AppId` | Identifies the app whose logs to search. |
| Timestamp, with the time zone | Lets the team find the request in the logs. |
| The full response body | Including any reference or request id Dojah returned. |
| The HTTP status code | Tells the team whether it is your request, your wallet, or an upstream source. |
| What you expected instead | Separates a bug from an endpoint doing what it is documented to do. |
**Never share your secret key.** Not in Slack, not in an email, not in a screenshot. Dojah will never ask for it. Send your `AppId` instead — it identifies your app without granting access to it. If a secret key has been exposed, rotate it from the dashboard straight away.
**Redact customer data.** BVNs, NINs, phone numbers and document images belong in the dashboard chat or an email to technical support — never in the public Slack community.
## Check these first
A large share of the issues that reach support are answered by four pages:
* [Errors & status codes](/api-reference/core-concepts/errors-status-codes) — what each code means, which are worth retrying, and the failures that come up most.
* [Authentication](/api-reference/get-started/authentication) — the cause of nearly every `401`, usually a `Bearer` prefix that should not be there.
* [Environments](/api-reference/get-started/environments) — why a call that works in sandbox can fail in production.
* [Wallet & billing](/api-reference/core-concepts/wallet-billing) — the `402` that stops production calls until the wallet is funded.
## Frequently asked questions
The live chat on the **Support** page of your dashboard — it opens a thread with the Dojah team, with no ticket number to track. See [Support in the dashboard](/dashboard-guide/account/support).
Use Slack for questions about how Dojah works — which endpoint to call, how a flow is meant to behave. Use technical support when a specific call is failing, because the team needs your `AppId` and timestamps to trace it, and those do not belong in a public channel.
Share the endpoint, the status code and the shape of the error. Do not share secret keys, `AppId` values, or customer identifiers such as BVNs and NINs — the community channel is public. Send those to technical support instead.
Contact technical support with the endpoint, the time the failures started, and the status codes you are seeing. A run of `424` responses usually means an upstream identity source is unavailable rather than a fault in your integration — see [Errors & status codes](/api-reference/core-concepts/errors-status-codes).
# Use cases
Source: https://docs.dojah.io/use-cases
Verification stacks by industry — the same Dojah building blocks, ordered for what you are regulated for. Fintech, lending, crypto and betting.
# Betting & Gaming
Source: https://docs.dojah.io/use-cases/betting
The recommended Dojah verification stack for betting and gaming — age and identity checks, biometrics, self-exclusion lists, and fraud signals at signup.
# Crypto & Web3
Source: https://docs.dojah.io/use-cases/crypto
The recommended Dojah verification stack for exchanges and wallets — government ID, biometrics, sanctions screening, IP risk, and transaction monitoring.
# Fintech & Neobanks
Source: https://docs.dojah.io/use-cases/fintech
The recommended Dojah verification stack for fintech and neobanks — government ID, biometrics, AML screening, and real-time transaction monitoring.
# Lending & Credit
Source: https://docs.dojah.io/use-cases/lending
The recommended Dojah verification stack for lenders — BVN lookup, biometrics, credit bureau history, and AML screening before you disburse.