# Intro

## Our Mission

At WalliD, our mission is to empower the digital world with safety and trust . We are building the infrastructure to create a seamless and safe environment where users can easily prove their identity while keeping their personal information private. Our ultimate goal is to provide trust and security in all digital transactions and to make them accessible to everyone.

<figure><img src="/files/vukuD8spb5hWZYZDep28" alt=""><figcaption></figcaption></figure>

## What is digital ID?

Identity is the unique data that can be linked to an individual. It is the only asset that ensures the right of ownership over all others. With it, we can sign documents, claim our property, access the benefits and services that we're entitled to, and also be held accountable for our actions.&#x20;

In a reality that's becoming increasingly digital, the need to digitize our identity has been accelerating. We now use digital ID to authenticate on websites or to prove our identity in all types of online interactions. Today, digital ID is more important than ever. It ensures trust in remote transactions and enables accountability across the web.

## Problems with the current digital ID landscape[​](https://docs.galxe.com/#problems-with-the-current-credential-system)

Digital ID providers and verifiable data sources are spread across multiple infrastructures and have different standards with no interoperability at all. Some providers cover some types of authentication, others cover centralized or decentralized ID verification only.&#x20;

This creates a significant problem for WebApps and dApps when it comes to authenticating and verifying users' data. dApp developers are limited to a niche user experience from web3 wallets, making it difficult to onboard more users who are not comfortable using these types of tools. Traditional WebApp developers are unable to authenticate their users on the blockchain and take advantage of the possibilities of web3 and decentralized protocols.&#x20;

Ultimately, the user is left with poor onboarding experiences, repetitive processes, difficult technology to handle, and private data scattered all over the internet.

## WalliD Solution[​](https://docs.galxe.com/#galxe-solution) <a href="#galxe-solution" id="galxe-solution"></a>

WalliD aims to provide the ultimate onboarding and data verification solution by aggregating verifiable data sources and infrastructures. Our aggregator brings together OAuth providers, Blockchains, Public Key Infrastructures (PKIs), DIDs and Zero-Knowledge protocols. This allows us to offer a comprehensive toolkit with different suites of products that cater to the needs of WebApp, dApp developers and users.

We have integrated with dozens of verifiable data sources across multiple infrastructures into our aggregator, and we continue to expand this number.

#### 🧑‍💻For developers

Our [SDKs](/sdks) and [Config Dashboard](/config-dashboard) enable **social or web3 logins** and **user data verification** from different sources. This enables developers to seamlessly embed customized Identity and access management flows in their systems for different purposes such as **sybil resistance, trust scores, compliance, reputation and statement checks.**

#### 👤For users

Our [self-custodial wallet ](/wallid-wallet)provides full control over their tokens and IDs. This enables everyone to **authenticate on web2 and web3 platforms**, **prove ownership over their data** and **execute blockchains transactions**. WalliD wallet ultimately empowers users to protect their privacy and security online.

<figure><img src="/files/iZAUeV2A8UWC2hA4B55q" alt=""><figcaption><p>WalliD Ecosystem</p></figcaption></figure>

WalliD is the ultimate solution for effortless user onboarding and secure digital trust. It serves as an all-in-one platform, bringing together various digital ID providers and authenticators, allowing developers of dApps and WebApps to easily verify user identities while maintaining safety and privacy of personal data.

## Join WalliD Community[​](https://docs.galxe.com/#join-galxe-community) <a href="#join-galxe-community" id="join-galxe-community"></a>

[Website](https://wallid.io) | [Github](https://github.com/walliDprotocol) |[Twitter](https://twitter.com/WalliDonchain) | [Discord](https://discord.gg/3vnsN7zVpT) | [Blog](https://medium.com/@WalliD) |


# Config Dashboard

{% hint style="success" %}
:rocket: **Apply for the Private Beta waitlist** [**here**](https://wytj7vjf6ml.typeform.com/to/uBOR6LJm) **to be the first trying it out!**
{% endhint %}

## Overview

The Config Dashboard is the gateway to WalliD. It allows dApp and WebApp developers to signup into the ecosystem and config [Authentication](/config-dashboard/authentication) and [Data verification](/config-dashboard/data-verification) flows that can be embedded within their systems.

It is a no-code tool that enables you to quickly connect to multiple verifiable data sources  and config authentication or verification parameters to integrate in your platform through a [Verification Modal](/verification-modal).

<figure><img src="/files/WfsVfoJXI03d9Lj56sYE" alt=""><figcaption></figcaption></figure>

**With the config Dashboard you are able to:**

* **Create an account** with WalliD;
* **Create workspaces** for your authentication or Data verification configs;
* **Config authentication flows** for your website by connecting with Social Login and web3 wallet providers;
* **Config Data verification** **flows** by connecting and setting up parameters for a successful verification based on Digital ID or blockchain assets ownership;
* **Integrate a Verification Modal** in your platform with the parameters configured in the dashboard and seamlessly authenticate or verify users' data  from your favourite verifiable Data sources.

{% hint style="info" %}
For an advanced customization of authentication and verification features check out the documentation available in our [SDKs](/sdks) section
{% endhint %}


# Getting started

*This is a step by step guide to help you get started with using WalliD config dashboard.*

### Signup with your favourite account

To get started, login with your favourite social account or web3 wallet on the WalliD dashboard. Please note that this login flow is using the WalliD [authentication flow](/config-dashboard/authentication). Your users will experience a similar flow using your application integrated with WalliD.

<figure><img src="/files/R72G1IkzUCx12z00Z0bq" alt=""><figcaption></figcaption></figure>

### Home[​](https://web3auth.io/docs/developer-dashboard/#home) <a href="#home" id="home"></a>

After successfully logging in you will have access to the dashboard home page.

<figure><img src="/files/BqICoW21tLwXGTqKGq3x" alt=""><figcaption></figcaption></figure>

This is what you can access from this screen:

#### Overview[​](https://web3auth.io/docs/developer-dashboard/#overview) <a href="#overview" id="overview"></a>

* Documentation
* [Link to schedule a demo](https://calendly.com/filipe-veiga/30min) with the team for further information

#### Let's get Started[​](https://web3auth.io/docs/developer-dashboard/#quick-start) <a href="#quick-start" id="quick-start"></a>

* Create an [Authentication Config](/config-dashboard/authentication)
* Create a [Data verification config](/config-dashboard/data-verification)

#### Left Pane: <a href="#bottomost-interactive-web3auth-logo" id="bottomost-interactive-web3auth-logo"></a>

* [Workspaces](/config-dashboard/workspaces)
* Dashboard
* [Authentication ](/config-dashboard/authentication)
* [Data verification](/config-dashboard/data-verification)
* [Wallet infrastructure](/config-dashboard/non-custodial-wallet-infrastructure-as-a-service)
* [Team Members](/config-dashboard/workspaces)
* Docs&#x20;
* Support

#### Profile Icon <a href="#quick-start" id="quick-start"></a>

* Account info
* Upgrade Plan
* Billing <br>


# Workspaces

Workspaces are a great way to organize teams around different projects you manage or different authentication and ID verification configs. All configs and settings are wrapped to a single Workspace and they will only be visible for the teammates added to that space.

### Create a Workspace

To create a new workspace you simply need to press the  <mark style="color:purple;">**`+`**</mark> button on the left panel (beneath the icon of your first workspace. You can rename the workspace any time by pressing the  <mark style="color:purple;">**`...`**</mark> icon on the right of its name.

<figure><img src="/files/taPLm20cdZiuKlm4VzTQ" alt=""><figcaption></figcaption></figure>

### Team members

You can add, remove and customize roles of members in every workspace. Click <mark style="color:purple;">`Team members`</mark> to access the screen below

<figure><img src="/files/P1D2QhVxWgWJskSp3E5t" alt=""><figcaption></figcaption></figure>

#### Roles and Permissions

<table><thead><tr><th width="323">Permissions/Roles</th><th width="148" align="center">Owner</th><th width="140" align="center">Admin</th><th align="center">Member</th></tr></thead><tbody><tr><td>See config settings </td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td></tr><tr><td>Leave workspace</td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td></tr><tr><td>Create new configs </td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"></td></tr><tr><td>Invite team members to workspace</td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"></td></tr><tr><td>Edit configs</td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"></td></tr><tr><td>Delete configs</td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"></td></tr><tr><td>Remove team members</td><td align="center"><strong>x</strong></td><td align="center"></td><td align="center"></td></tr><tr><td>Change team members' roles</td><td align="center"><strong>x</strong></td><td align="center"></td><td align="center"></td></tr><tr><td>Delete workspace</td><td align="center"><strong>x</strong></td><td align="center"></td><td align="center"></td></tr></tbody></table>


# Authentication

{% hint style="warning" %}
Authentication Configs are not yet live on WalliD's Dashboard. \
:eyes:[**Stay tuned**](https://discord.gg/3vnsN7zVpT) **to be the first trying them out!**
{% endhint %}

The Authentication section allows you to choose from multiple social login providers and web3 wallets to support the sign-up and and login flows of your app. The user will be redirected to that provider authentication system and you'll be able to use those authentication tokens to connect to your own authentication flows.&#x20;

<figure><img src="/files/ZtKGmBOo3P3LIOiPHTtU" alt=""><figcaption></figcaption></figure>

### Create a new Authentication Config

You can setup different configs, containing different providers. A config is a the unique combination of authentication providers associated to an APP key that will be generated automatically and linked to your billing in WalliD's backend. To create a new config click on <mark style="color:purple;">`Authentication`</mark> on the left-side pane of the dashboard and start by defining a name for it.

<figure><img src="/files/ovMqYxwyTt1sbUCvvOaY" alt=""><figcaption></figcaption></figure>

### Select authentication providers

You can choose one or as many social login or web3 wallet providers to add to your config. All the providers selected will become available in your platform login flow.

<figure><img src="/files/snXp2MQB6wMQ23ii8RV7" alt=""><figcaption></figcaption></figure>

### Add your Client ID and Secret Key

You'll need a  <mark style="color:purple;">`Client ID`</mark> and <mark style="color:purple;">`Secret Key`</mark> from every provider selected. If you don't have an account already, follow the step by step guide available for each provider below. After completing the config, paste the recently created Client ID and Secret key in the appropriate boxes on WalliD dashboard. Learn how to get your Client ID and Secret Key [in this guide](/config-dashboard/authentication/social-login-providers).

<figure><img src="/files/SMUhVvbq4fadOBVgWyUX" alt=""><figcaption></figcaption></figure>

#### Social Login Providers supported

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/RyvzdM5fRtd6040ZEgvL"><img src="/files/yual3rIZpLGJsGUvNE9B" alt="logo-google.png" data-size="line"></a> <a href="/pages/RyvzdM5fRtd6040ZEgvL"><strong>Google</strong></a></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="/pages/2xoZMeacKYBJEib7dwgS"><img src="/files/8EDKCUSDtpubi2LwIMAV" alt="logo-twitter.png" data-size="line"></a> <a href="/pages/2xoZMeacKYBJEib7dwgS"><strong>Twitter</strong></a></td><td></td><td><a href="/pages/2xoZMeacKYBJEib7dwgS">/pages/2xoZMeacKYBJEib7dwgS</a></td></tr><tr><td><a href="/pages/PjWNVLJ7JGnBrPVqGLe5"><img src="/files/bdLaPyagQmtlGn17dXSB" alt="logo-discord.png" data-size="line"></a> <a href="/pages/PjWNVLJ7JGnBrPVqGLe5"><strong>Discord</strong></a></td><td></td><td><a href="/pages/PjWNVLJ7JGnBrPVqGLe5">/pages/PjWNVLJ7JGnBrPVqGLe5</a></td></tr><tr><td><a href="/pages/66ros7gocNH9vaRezVmT"><img src="/files/nuS9cupMxpYKKvTgGfHL" alt="logo-linkedin.png" data-size="line"></a> <a href="/pages/66ros7gocNH9vaRezVmT"><strong>Linkedin</strong></a></td><td></td><td><a href="/pages/66ros7gocNH9vaRezVmT">/pages/66ros7gocNH9vaRezVmT</a></td></tr><tr><td><a href="/pages/OeFrLY14kFMIhWyYZCQA"><img src="/files/xRKyIlCz7MzKAZx3SudZ" alt="logo-reddit.png" data-size="line"></a> <a href="/pages/OeFrLY14kFMIhWyYZCQA"><strong>Reddit</strong></a></td><td></td><td><a href="/pages/OeFrLY14kFMIhWyYZCQA">/pages/OeFrLY14kFMIhWyYZCQA</a></td></tr><tr><td><a href="/pages/AmtGN9xtijcIkNDHzUYo"><img src="/files/DRbvdK6NMsKR7EWFXa3E" alt="logo-github.png" data-size="line"></a> <a href="/pages/AmtGN9xtijcIkNDHzUYo"><strong>Github</strong></a></td><td></td><td><a href="/pages/AmtGN9xtijcIkNDHzUYo">/pages/AmtGN9xtijcIkNDHzUYo</a></td></tr><tr><td><a href="/pages/nMF8OkUUo1U1mtlLZvxb"><img src="/files/HO3w38Mdd3Gn6DCUguXd" alt="logo-facebook.png" data-size="line"></a> <a href="/pages/nMF8OkUUo1U1mtlLZvxb"><strong>Facebook</strong></a></td><td></td><td><a href="/pages/nMF8OkUUo1U1mtlLZvxb">/pages/nMF8OkUUo1U1mtlLZvxb</a></td></tr><tr><td><a href="/pages/arisSYkI8h3mgyeqz3IY"><img src="/files/FDkXMs7wThicAKhrMcDj" alt="logo-twitch.png" data-size="line"></a> <a href="/pages/arisSYkI8h3mgyeqz3IY"><strong>Twitch</strong></a></td><td></td><td><a href="/pages/arisSYkI8h3mgyeqz3IY">/pages/arisSYkI8h3mgyeqz3IY</a></td></tr></tbody></table>

#### Web3 wallets supported

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><img src="/files/5BhiT5pCGWUxokcp2XHb" alt="" data-size="line"> <strong>WalliD wallet</strong></td><td></td><td></td></tr><tr><td><a href="/pages/ID7KZj9kpxReFm9LVacv"><img src="https://seeklogo.com/images/N/near-icon-logo-10785AE366-seeklogo.com.png" alt="logo-twitter.png" data-size="line"></a> <strong>Near Selector</strong></td><td></td><td></td></tr><tr><td><a href="/pages/uD17SVQ121aJHWRwUroz"><img src="https://seeklogo.com/images/W/walletconnect-logo-EE83B50C97-seeklogo.com.png" alt="logo-discord.png" data-size="line"></a> <strong>Wallet Connect</strong></td><td></td><td></td></tr><tr><td><a href="/pages/5KkhkQpz2Q2fLmNlFAFG"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/MetaMask_Fox.svg/1200px-MetaMask_Fox.svg.png" alt="logo-linkedin.png" data-size="line"></a> <strong>Metamask</strong></td><td></td><td></td></tr><tr><td><a href="/pages/5KkhkQpz2Q2fLmNlFAFG"><img src="https://tor.us/images/Wallet.svg" alt="logo-reddit.png" data-size="line"></a> <strong>Torus</strong> <strong>Wallet</strong></td><td></td><td></td></tr><tr><td><a href="/pages/5KkhkQpz2Q2fLmNlFAFG"><img src="https://trustwallet.com/assets/images/media/assets/TWT.png" alt="logo-github.png" data-size="line"></a> <strong>Trust</strong> <strong>wallet</strong></td><td></td><td></td></tr></tbody></table>

### Export the config code and add it to your platform

Once all providers are setup, preview the [verification modal](/sdks/verification-modal-sdks) that will be displayed in your website with all the providers selected. Copy the code generated and add it to the frontend component of your platform that you wish to trigger the Login flows from.

<figure><img src="/files/25tly8x1lR6QYEL5dwG7" alt=""><figcaption></figcaption></figure>

### Integrate with your authentication flows

:eyes: **Coming soon!** :eyes:


# Social Login Providers

Social Login providers allow you to register your app directly with [implicit grant support ](https://oauth.net/2/grant-types/implicit/)and use them with WalliD in order to get data from users' accounts.

You will also need to set up an application with the integrating social login provider to get the <mark style="color:purple;">`Client ID / App ID`</mark> which will be required in the config Dashboard.

#### How to get Client ID?

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/RyvzdM5fRtd6040ZEgvL"><img src="/files/yual3rIZpLGJsGUvNE9B" alt="logo-google.png" data-size="line"></a> <a href="/pages/RyvzdM5fRtd6040ZEgvL"><strong>Google</strong></a></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="/pages/2xoZMeacKYBJEib7dwgS"><img src="/files/8EDKCUSDtpubi2LwIMAV" alt="logo-twitter.png" data-size="line"></a> <a href="/pages/2xoZMeacKYBJEib7dwgS"><strong>Twitter</strong></a></td><td></td><td><a href="/pages/2xoZMeacKYBJEib7dwgS">/pages/2xoZMeacKYBJEib7dwgS</a></td></tr><tr><td><a href="/pages/PjWNVLJ7JGnBrPVqGLe5"><img src="/files/bdLaPyagQmtlGn17dXSB" alt="logo-discord.png" data-size="line"></a> <a href="/pages/PjWNVLJ7JGnBrPVqGLe5"><strong>Discord</strong></a></td><td></td><td><a href="/pages/PjWNVLJ7JGnBrPVqGLe5">/pages/PjWNVLJ7JGnBrPVqGLe5</a></td></tr><tr><td><a href="/pages/66ros7gocNH9vaRezVmT"><img src="/files/nuS9cupMxpYKKvTgGfHL" alt="logo-linkedin.png" data-size="line"></a> <a href="/pages/66ros7gocNH9vaRezVmT"><strong>Linkedin</strong></a></td><td></td><td><a href="/pages/66ros7gocNH9vaRezVmT">/pages/66ros7gocNH9vaRezVmT</a></td></tr><tr><td><a href="/pages/OeFrLY14kFMIhWyYZCQA"><img src="/files/xRKyIlCz7MzKAZx3SudZ" alt="logo-reddit.png" data-size="line"></a> <a href="/pages/OeFrLY14kFMIhWyYZCQA"><strong>Reddit</strong></a></td><td></td><td><a href="/pages/OeFrLY14kFMIhWyYZCQA">/pages/OeFrLY14kFMIhWyYZCQA</a></td></tr><tr><td><a href="/pages/AmtGN9xtijcIkNDHzUYo"><img src="/files/pTzlrQsH8qW47zIVFuEo" alt="logo-github.png" data-size="line"></a> <a href="/pages/AmtGN9xtijcIkNDHzUYo"><strong>Github</strong></a></td><td></td><td><a href="/pages/AmtGN9xtijcIkNDHzUYo">/pages/AmtGN9xtijcIkNDHzUYo</a></td></tr><tr><td><a href="/pages/nMF8OkUUo1U1mtlLZvxb"><img src="/files/HO3w38Mdd3Gn6DCUguXd" alt="logo-facebook.png" data-size="line"></a> <a href="/pages/nMF8OkUUo1U1mtlLZvxb"><strong>Facebook</strong></a></td><td></td><td><a href="/pages/nMF8OkUUo1U1mtlLZvxb">/pages/nMF8OkUUo1U1mtlLZvxb</a></td></tr><tr><td><img src="/files/G2ps5jRGkEImUKOcJLeM" alt="" data-size="line"> <a href="/pages/nET5qtkpDqyJAP9qPLiv"><strong>Instagram</strong></a></td><td></td><td><a href="/pages/nET5qtkpDqyJAP9qPLiv">/pages/nET5qtkpDqyJAP9qPLiv</a></td></tr><tr><td><a href="/pages/arisSYkI8h3mgyeqz3IY"><img src="/files/FDkXMs7wThicAKhrMcDj" alt="logo-twitch.png" data-size="line"></a><a href="/pages/arisSYkI8h3mgyeqz3IY"><strong>Twitch</strong></a></td><td></td><td><a href="/pages/arisSYkI8h3mgyeqz3IY">/pages/arisSYkI8h3mgyeqz3IY</a></td></tr></tbody></table>


# Google

You will need to set up an application with Google social login provider to get the App ID and Secret which will be required in the config Dashboard.

**Note:** To generate Google Client ID and Client Secret you must be signed into a Google account.

## How to get Google Client ID and Client Secret?

1. Go to the [Google Developers Console](https://console.developers.google.com/apis) **->** Sign in into your <mark style="color:purple;">**`Google account`**</mark>
2. Click on the dropdown <mark style="color:purple;">**`Select a project`**</mark>**->&#x20;**<mark style="color:purple;">**`New project`**</mark>

<figure><img src="/files/FRFMSlK9Yi3QTVeMA0Yd" alt=""><figcaption></figcaption></figure>

3. &#x20;Enter your <mark style="color:purple;">**`Project name`**</mark>  and <mark style="color:purple;">**`location`**</mark> **->** Click on the <mark style="color:purple;">**`Create`**</mark> button

<figure><img src="/files/6DuS7jfbkwb20Rk6EmaB" alt=""><figcaption></figcaption></figure>

4. Click <mark style="color:purple;">**`OAuth consent screen`**</mark>  on the left side menu **->** Choose  <mark style="color:purple;">**`User type`**</mark>**&#x20;->** Click on the <mark style="color:purple;">**`Create`**</mark> button

<figure><img src="/files/8i9UIP22cqYYmqgk5hUU" alt=""><figcaption></figcaption></figure>

5. Add <mark style="color:purple;">**`Application name`**</mark>**&#x20;,** <mark style="color:purple;">**`Support email`**</mark>**&#x20;,** <mark style="color:purple;">**`Authorised domain`**</mark>**,** <mark style="color:purple;">**`Developer content information`**</mark>**&#x20;->** Click on the <mark style="color:purple;">**`Save and continue`**</mark> button.

<figure><img src="/files/fyF8BUyQF3mYPlVavdHX" alt=""><figcaption></figcaption></figure>

6. Complete all 4 steps on  <mark style="color:purple;">**`OAuth consent screen`**</mark> in the left side bar menu **->** Click on the <mark style="color:purple;">**`Back to Dashboard`**</mark> button

<figure><img src="/files/7hz7uQQg7iP0lZUdj9AT" alt=""><figcaption></figcaption></figure>

7. Go to <mark style="color:purple;">**`Credentials`**</mark> in the left side menu **->** Click on the <mark style="color:purple;">**`Create credentials`**</mark> button -> Select <mark style="color:purple;">**`OAuth client ID`**</mark> from the dropdown list

<figure><img src="/files/lejPgkLJjtX2E9mEREGz" alt=""><figcaption></figcaption></figure>

8. Open the dropdown list <mark style="color:purple;">**`Application type`**</mark> **->** Select <mark style="color:purple;">**`Web application`**</mark> **->** <mark style="color:purple;">**`Enter the name`**</mark> of your OAuth

<figure><img src="/files/cKmtmd4AH7Z9HuQibCUn" alt=""><figcaption></figcaption></figure>

9. Enter your site URL in <mark style="color:purple;">**`Authorised JavaScript origins`**</mark>**&#x20;->** in <mark style="color:purple;">**`Authorised redirect URIs`**</mark>, enter the page URL where you wanted your users redirected back after they have authenticated with Google **->** Click on the <mark style="color:purple;">**`Create`**</mark> button.

<figure><img src="/files/qXenOTPTjFJ4RCsFSktB" alt=""><figcaption></figcaption></figure>

10. Copy your <mark style="color:purple;">**`Client ID`**</mark> and <mark style="color:purple;">**`Client secret`**</mark>&#x20;

<figure><img src="/files/jTOy77OrNunLb625Lf5X" alt=""><figcaption></figcaption></figure>

10. Paste your <mark style="color:purple;">**`Client ID`**</mark> and <mark style="color:purple;">**`Client secret`**</mark> into the corresponding fields in the WalliD config Dashboard.

<figure><img src="/files/jGr3fdPMBhsUIKmFvCO8" alt=""><figcaption></figcaption></figure>


# Twitter

You will need to set up an application with Twitter social login provider to get the API Key and API Key Secret which will be required in the config Dashboard.

### How to get Twitter API Key and API Key Secret?

1. Go to the [Twitter developer account](https://developer.twitter.com/en/portal/dashboard) **->** <mark style="color:purple;">**`Sign up`**</mark>**&#x20;for a Free account**

<figure><img src="/files/sKSp3c4A57ZEYMfPzibP" alt=""><figcaption></figcaption></figure>

2. Go to the <mark style="color:purple;">**`Dashboard`**</mark> in the left side menu **->** click on the <mark style="color:purple;">**`+ Add App`**</mark> button

<figure><img src="/files/eklxpNBObeaODFWtAwPo" alt=""><figcaption></figcaption></figure>

3. Click in <mark style="color:purple;">**`Projects & Apps`**</mark> in the left side menu **->&#x20;**<mark style="color:purple;">**`Name`**</mark> your App **->** Click on the <mark style="color:purple;">**`Next`**</mark> button

<figure><img src="/files/1OmJmN9sxSfku1cjHiOb" alt=""><figcaption></figcaption></figure>

4. Copy your<mark style="color:purple;">**`API Key`**</mark> and <mark style="color:purple;">**`API Key Secret`**</mark>

<figure><img src="/files/rtmO02MQVoBQ1DIi7myJ" alt=""><figcaption></figcaption></figure>

5. Paste your <mark style="color:purple;">**`API Key`**</mark> and <mark style="color:purple;">**`API Key Secret`**</mark> into the **corresponding fields in the WalliD config Dashboard**

<figure><img src="/files/RH1SsUk8H3lrrOK2s9ZN" alt=""><figcaption></figcaption></figure>


# Discord

You will need to set up an application with Discord social login provider to get the Client ID and Client Secret which will be required in the config Dashboard.

### How to get Client ID and Client Secret?

1. Go to the [Discord Developer Console](https://discord.com/login?redirect_to=%2Fdevelopers) **->** <mark style="color:purple;">**`Sign in`**</mark> into your Discord account

<figure><img src="/files/Sj8TuWeSLvFyw0Y3FXLp" alt=""><figcaption></figcaption></figure>

2. Go to <mark style="color:purple;">**`Applications`**</mark> in the left side menu **->** Click on the <mark style="color:purple;">**`New application`**</mark> button on the top right corner

<figure><img src="/files/yaPVZuS8TQnDgPXvRTtp" alt=""><figcaption></figcaption></figure>

3. <mark style="color:purple;">**`Name`**</mark> your Application **->** Click on the <mark style="color:purple;">**`Create`**</mark> button

<figure><img src="/files/dyAgOovkZtYNHCKAnuUa" alt=""><figcaption></figcaption></figure>

4. &#x20;<mark style="color:purple;">**`Enter all General information`**</mark> about your Application

<figure><img src="/files/CiGDh2g7dQ5d33mlqTX0" alt=""><figcaption></figcaption></figure>

5. Go to <mark style="color:purple;">**`OAuth 2`**</mark>on the left side menu **->** Click on the <mark style="color:purple;">**`Add Redirect`**</mark>button

<figure><img src="/files/1SNgwIniR0pdITBasLu4" alt=""><figcaption></figcaption></figure>

6. Enter the <mark style="color:purple;">**`redirect URL`**</mark>

<figure><img src="/files/YDg3dbXslBZTTHZuPYSy" alt=""><figcaption></figcaption></figure>

7. Copy the <mark style="color:purple;">**`Client ID`**</mark> and <mark style="color:purple;">**`Client Secret`**</mark>

<figure><img src="/files/WiVLqrNJ0l5VxYBUg1hB" alt=""><figcaption></figcaption></figure>

8. Paste your  <mark style="color:purple;">**`Client ID`**</mark> and <mark style="color:purple;">**`Client Secret`**</mark>  into the **corresponding fields in the WalliD config Dashboard**

<figure><img src="/files/eeXf7szdBsqnmFeFch8P" alt=""><figcaption></figcaption></figure>


# Linkedin

You will need to set up an application with Linkedin social login provider to get the Client ID and Client Secret which will be required in the config Dashboard.

### How to get Client ID and Client Secret?

1. Go to the [Linkedin Developer Platform](https://developer.linkedin.com/) **->** Click on the <mark style="color:purple;">**`Create app`**</mark> button

<figure><img src="/files/fKlZZv9cBdm5gDr0dXFK" alt=""><figcaption></figcaption></figure>

2. <mark style="color:purple;">**`Sign in`**</mark> into your Linkedin account

<figure><img src="/files/Mr9ezVIQcEOryJQ1sqyw" alt=""><figcaption></figcaption></figure>

3. <mark style="color:purple;">**`Name the app`**</mark> **->** <mark style="color:purple;">**`Paste`**</mark> your Linkedin page **->** <mark style="color:purple;">**`Upload`**</mark> the App logo **->** Click on the  <mark style="color:purple;">**`Create App`**</mark>  button

<figure><img src="/files/UqQAmUxvlBPa87AJAYbl" alt=""><figcaption></figcaption></figure>

4. Go to the <mark style="color:purple;">**`Auth`**</mark> tab&#x20;

<figure><img src="/files/rXW1GGhvYJcbNlIXI2gb" alt=""><figcaption></figcaption></figure>

5. Copy the <mark style="color:purple;">**`Client ID`**</mark> and <mark style="color:purple;">**`Client Secret`**</mark>

<figure><img src="/files/DXcDZOSKf8fEzMRizNUC" alt=""><figcaption></figcaption></figure>

6. Paste your <mark style="color:purple;">**`Client ID`**</mark> and <mark style="color:purple;">**`Client Secret`**</mark> into the **corresponding fields in the WalliD config Dashboard**

<figure><img src="/files/vpkK38M87Th4UqCK0RG5" alt=""><figcaption></figcaption></figure>


# Reddit

You will need to set up an application with Reddit social login provider to get the Client ID and Client Secret which will be required in the config Dashboard.

### How to get Client ID and Client Secret?

1. Go to the [Reddit Developer Platform](https://www.reddit.com/login/?dest=https%3A%2F%2Fwww.reddit.com%2Fprefs%2Fapps) **->** <mark style="color:purple;">**`Login`**</mark> into your account

<figure><img src="/files/esZJpTs7ocTm5HnM3JYN" alt=""><figcaption></figcaption></figure>

2. Go to the <mark style="color:purple;">**`Apps`**</mark> tab on the main menu

<figure><img src="/files/qplCDJh2G63dSTxl2LpO" alt=""><figcaption></figcaption></figure>

3. Click on the <mark style="color:purple;">**`Are you a developer? create an app...`**</mark> button to create an App

<figure><img src="/files/Ln7wTdHEPXvy0GwGe62R" alt=""><figcaption></figcaption></figure>

4. Enter your <mark style="color:purple;">**`Application name`**</mark>**&#x20;,&#x20;**<mark style="color:purple;">**`Description`**</mark>**&#x20;,&#x20;**<mark style="color:purple;">**`About URL`**</mark> , <mark style="color:purple;">**`Redirect URI`**</mark>**->** Click on the <mark style="color:purple;">**`Create App`**</mark> button&#x20;

<figure><img src="/files/BlW6WJdQdRLrowyAfOZs" alt=""><figcaption></figcaption></figure>

5. Copy the <mark style="color:purple;">**`Client ID`**</mark>**->** Click on  <mark style="color:purple;">**`Edit`**</mark> to see your Client Secret

<figure><img src="/files/JAuhfeaykqABvnbMMBFw" alt=""><figcaption></figcaption></figure>

6. Copy your <mark style="color:purple;">**`Client secret`**</mark>

<figure><img src="/files/rVrAy86rOF1H5FeE5g96" alt=""><figcaption></figcaption></figure>

7. Paste your <mark style="color:purple;">**`Client ID`**</mark> and <mark style="color:purple;">**`Client Secret`**</mark> into the **corresponding fields in the WalliD config Dashboard**

<figure><img src="/files/gxMISy3ZgkBARbnsOKyv" alt=""><figcaption></figcaption></figure>


# Github

You will need to set up an application with Github social login provider to get the Client ID and Client Secret which will be required in the config Dashboard.

### How to get Client ID and Client Secret?

1. <mark style="color:purple;">**`Sign in`**</mark> into your [**Github account**](https://github.com/login)

<figure><img src="/files/QBqT0JFeeBGEax4js7ys" alt=""><figcaption></figcaption></figure>

2. Click on your <mark style="color:purple;">**`Profile image`**</mark> **->** Click on the <mark style="color:purple;">**`Settings`**</mark> on the right menu bar

<figure><img src="/files/F9ZH6sKvQnugMr8B9h7X" alt=""><figcaption></figcaption></figure>

3. Click the <mark style="color:purple;">**`OAuth Apps`**</mark> tab on the left side bar menu **->** Click on the <mark style="color:purple;">**`Register a new application`**</mark> button

<figure><img src="/files/wDiFHE7CgZjlVWZSpu7K" alt=""><figcaption></figcaption></figure>

4. <mark style="color:purple;">**`Enter all details`**</mark> about your new OAuth application

<figure><img src="/files/ge9oxxniaDAjRU9oNw2s" alt=""><figcaption></figcaption></figure>

5. Copy your <mark style="color:purple;">**`Client ID`**</mark> **->** Click on the <mark style="color:purple;">**`Generate a new client secret`**</mark> button

<figure><img src="/files/gwdvPbpTFlfzHypULDcQ" alt=""><figcaption></figcaption></figure>

6. Copy your <mark style="color:purple;">**`Client Scret`**</mark>

<figure><img src="/files/vtiXDu0cLep68PV1OESb" alt=""><figcaption></figcaption></figure>

7. Paste your <mark style="color:purple;">**`Client ID`**</mark> and <mark style="color:purple;">**`Client Secret`**</mark> into the **corresponding fields in the WalliD config Dashboard**

<figure><img src="/files/oCOcGqCy0l6MKfXdSulh" alt=""><figcaption></figcaption></figure>


# Facebook

You will need to set up an application with Facebook social login provider to get the App ID and App Secret which will be required in the config Dashboard.

### How to get App ID and App Secret?

1. Login into [Developers Facebook platform](https://www.facebook.com/login/?privacy_mutation_token=eyJ0eXBlIjowLCJjcmVhdGlvbl90aW1lIjoxNjg4NjM2NjQ1LCJjYWxsc2l0ZV9pZCI6Mjc2MjMwNjIxNzQyMjQ4NX0%3D\&next=https%3A%2F%2Fdevelopers.facebook.com%2F)

<figure><img src="/files/QNBuzLjkWL8lsTlUdscy" alt=""><figcaption></figcaption></figure>

2. Go to <mark style="color:purple;">**`My Apps`**</mark> at the top right menu

<figure><img src="/files/TZLw2hC0jA6jBNYygzag" alt=""><figcaption></figcaption></figure>

3. Click on the <mark style="color:purple;">**`Create App`**</mark> button

<figure><img src="/files/g4ycgAnnF6u1iDZaLJtt" alt=""><figcaption></figcaption></figure>

4. <mark style="color:purple;">**`Select the purpose of the App`**</mark> **->** Click on the <mark style="color:purple;">**`Next`**</mark> button

<figure><img src="/files/qJyGrxYpOMNoBq5pdEw7" alt=""><figcaption></figcaption></figure>

5. <mark style="color:purple;">**`Enter all details`**</mark> about your App **->** Click on the <mark style="color:purple;">**`Create App`**</mark> button

<figure><img src="/files/yjvyLLjJl7VmDiYw6vdk" alt=""><figcaption></figcaption></figure>

6. Go to <mark style="color:purple;">**`Settings > Basic`**</mark> on the left side menu **->** Copy your <mark style="color:purple;">**`App ID`**</mark> and<mark style="color:purple;">**`App Secret`**</mark> to the clipboard

<figure><img src="/files/N2MdpIn7730f03BV0eLB" alt=""><figcaption></figcaption></figure>

7. Paste your <mark style="color:purple;">**`App ID`**</mark> and <mark style="color:purple;">**`App Secret`**</mark> into the **corresponding fields in the WalliD config Dashboard**

<figure><img src="/files/4ZfYxPIJcflyZws22ROq" alt=""><figcaption></figcaption></figure>


# Instagram

### :eyes: Coming soon... :eyes:


# Twitch

### :eyes: Coming soon... :eyes:


# Data Verification

The Data verification section offers the ability to verify user data by connecting to different Blockchains or Digital ID providers and validating the ownership of tokens (<mark style="color:purple;">`ERC-20, NFTs SBTs...`</mark>) or <mark style="color:purple;">`digital IDs`</mark>. The user will connect to the infrastructures with their own keys and verify the data directly from within your system. The outcome of the verification can be used to trigger different actions within your system `(eg. add a trust score, allow access to a service, complete KYC...).`

<figure><img src="/files/RXr6xHFXBRqcqOeMMVhD" alt=""><figcaption></figcaption></figure>

### Create a new Verification Config

You can setup different configs, containing different providers. A config is the unique combination of verifiable data sources and parameters associated to an APP key that will be generated automatically and linked to your billing in WalliD's backend. To create a new config, click on <mark style="color:purple;">`Data verification`</mark> on the left-side pane of the dashboard and start by defining a name for it.

<figure><img src="/files/pwtWIvTsacIcFJ2k7l4l" alt=""><figcaption></figcaption></figure>

### Select verifiable data providers&#x20;

You can choose one or as many verifiable data sources to add to your config. All the infrastructures selected will become available in your system verification flow.

<figure><img src="/files/GoEXdjxiIGJqYX2s0eZp" alt=""><figcaption></figcaption></figure>

### Choose data sources and config the parameters to verify

You can choose data sources `(eg. PolygonID protocol + Polygon Blockchain)` and define the parameters `(eg.  PolygonDAO member claim ownership + >1,000 Matic held)` for a successful verification. Fill in the boxes or pick the options available in the right pane that appear once you select a specific data source to config all the details

#### Blockchains supported

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/hTIFyHQUHGpVfonWhcXX"><img src="/files/6KbeDbbc9Te7Flcvbvfi" alt="logo-ethereum.png" data-size="line"></a> <a href="/pages/hTIFyHQUHGpVfonWhcXX"><strong>Ethereum</strong></a></td><td></td><td><a href="/pages/hTIFyHQUHGpVfonWhcXX">/pages/hTIFyHQUHGpVfonWhcXX</a></td></tr><tr><td><a href="/pages/ID7KZj9kpxReFm9LVacv"><img src="https://seeklogo.com/images/N/near-icon-logo-10785AE366-seeklogo.com.png" alt="logo-twitter.png" data-size="line"></a> <a href="/pages/ID7KZj9kpxReFm9LVacv"><strong>NEAR</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/MfbQLJYZ8pDpq8suSmpi"><img src="/files/DtfGo8UGPrM9dw9AUzHE" alt="logo-polygon.png" data-size="line"></a> <a href="/pages/MfbQLJYZ8pDpq8suSmpi"><strong>Polygon</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/IO3o6g6fn1MTQNZxYujN"><img src="https://s2.coinmarketcap.com/static/img/coins/200x200/5625.png" alt="logo-linkedin.png" data-size="line"></a> <a href="/pages/IO3o6g6fn1MTQNZxYujN"><strong>LUKSO</strong></a></td><td></td><td><a href="/pages/IO3o6g6fn1MTQNZxYujN">/pages/IO3o6g6fn1MTQNZxYujN</a></td></tr><tr><td><a href="/pages/hmHgeetZc78bSOFVeiis"><img src="/files/gdlJqEYOZKIepKP9PbZf" alt="logo-binance.png" data-size="line"></a> <a href="/pages/hmHgeetZc78bSOFVeiis"><strong>BSC</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/9IdA4y6VpystvLdbf3bC"><img src="/files/oYP896cAchJV5kFiSrhR" alt="logo-arbitrum.png" data-size="line"></a> <a href="/pages/9IdA4y6VpystvLdbf3bC"><strong>Arbitrum</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/YNoxDVKVMQ09kyDoBNlG"><img src="/files/p3nnZIvAUueVOoVByqZp" alt="logo-avalanche.png" data-size="line"></a> <a href="/pages/YNoxDVKVMQ09kyDoBNlG"><strong>Avalanche</strong></a></td><td></td><td><a href="/pages/YNoxDVKVMQ09kyDoBNlG">/pages/YNoxDVKVMQ09kyDoBNlG</a></td></tr><tr><td><a href="/pages/lA7mi04L5GhdqqUP9tgW"><img src="/files/jXPBbbW5UiB6ydIggub2" alt="logo-optimism.png" data-size="line"></a> <a href="/pages/lA7mi04L5GhdqqUP9tgW"><strong>Optimism</strong></a></td><td></td><td><a href="/pages/lA7mi04L5GhdqqUP9tgW">/pages/lA7mi04L5GhdqqUP9tgW</a></td></tr><tr><td><a href="/pages/Do2rMmGQaSh92HVkBKff"><img src="/files/K8gmv3vZNScJRsmr6yya" alt="logo-celo.png" data-size="line"></a> <a href="/pages/Do2rMmGQaSh92HVkBKff"><strong>Celo</strong></a></td><td></td><td></td></tr><tr><td><a href="https://web3auth.io/docs/integration-builder?chain=GLMR"><img src="/files/Uflna3qfWMPciw5vjMrA" alt="logo-moonbeam.png" data-size="line"></a> <a href="/pages/FJxl9IEEDxXKC4gC1MEl"><strong>Moonbeam</strong></a></td><td></td><td><a href="/pages/FJxl9IEEDxXKC4gC1MEl">/pages/FJxl9IEEDxXKC4gC1MEl</a></td></tr><tr><td><a href="https://web3auth.io/docs/integration-builder?chain=MOVR"><img src="/files/ida8scWP34aOAzLxWmnl" alt="logo-moonriver.png" data-size="line"></a> <a href="/pages/6MQgFznu5OH5efuknqMB"><strong>Moonriver</strong></a></td><td></td><td><a href="/pages/6MQgFznu5OH5efuknqMB">/pages/6MQgFznu5OH5efuknqMB</a></td></tr><tr><td><a href="/pages/YgQQeAxPELkneUqSravj"><img src="/files/5uLd3XOGp4pLMttvHR1o" alt="logo-solana.png" data-size="line"></a> <a href="/pages/YgQQeAxPELkneUqSravj"><strong>Solana</strong></a></td><td></td><td></td></tr></tbody></table>

#### Social IDs supported

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/JgtoAPiq2VJcRv1hDVI5"><img src="/files/yual3rIZpLGJsGUvNE9B" alt="logo-google.png" data-size="line"></a> <a href="/pages/JgtoAPiq2VJcRv1hDVI5"><strong>Google</strong></a></td><td></td><td><a href="/pages/JgtoAPiq2VJcRv1hDVI5">/pages/JgtoAPiq2VJcRv1hDVI5</a></td></tr><tr><td><a href="/pages/A0LPKrX00g2NOGJ2a1CW"><img src="/files/8EDKCUSDtpubi2LwIMAV" alt="logo-twitter.png" data-size="line"></a> <a href="/pages/A0LPKrX00g2NOGJ2a1CW"><strong>Twitter</strong></a></td><td></td><td><a href="/pages/A0LPKrX00g2NOGJ2a1CW">/pages/A0LPKrX00g2NOGJ2a1CW</a></td></tr><tr><td><a href="/pages/AbwhHS4Vv73Gl7MhsLyd"><img src="/files/bdLaPyagQmtlGn17dXSB" alt="logo-discord.png" data-size="line"></a> <a href="/pages/AbwhHS4Vv73Gl7MhsLyd"><strong>Discord</strong></a></td><td></td><td><a href="/pages/AbwhHS4Vv73Gl7MhsLyd">/pages/AbwhHS4Vv73Gl7MhsLyd</a></td></tr><tr><td><a href="/pages/CqTLnPjfNN5vWpJi4IFr"><img src="/files/nuS9cupMxpYKKvTgGfHL" alt="logo-linkedin.png" data-size="line"></a> <a href="/pages/CqTLnPjfNN5vWpJi4IFr"><strong>Linkedin</strong></a></td><td></td><td><a href="/pages/CqTLnPjfNN5vWpJi4IFr">/pages/CqTLnPjfNN5vWpJi4IFr</a></td></tr><tr><td><a href="/pages/nzexzyAf9BR3c7KZRXbn"><img src="/files/xRKyIlCz7MzKAZx3SudZ" alt="logo-reddit.png" data-size="line"></a> <a href="/pages/nzexzyAf9BR3c7KZRXbn"><strong>Reddit</strong></a></td><td></td><td><a href="/pages/nzexzyAf9BR3c7KZRXbn">/pages/nzexzyAf9BR3c7KZRXbn</a></td></tr><tr><td><a href="/pages/wqs7kJ25IvK4eTuaoXnm"><img src="/files/DRbvdK6NMsKR7EWFXa3E" alt="logo-github.png" data-size="line"></a> <a href="/pages/wqs7kJ25IvK4eTuaoXnm"><strong>Github</strong></a></td><td></td><td><a href="/pages/wqs7kJ25IvK4eTuaoXnm">/pages/wqs7kJ25IvK4eTuaoXnm</a></td></tr><tr><td><a href="/pages/zY4zS8WdVjhAZX2nMA7f"><img src="/files/HO3w38Mdd3Gn6DCUguXd" alt="logo-facebook.png" data-size="line"></a><a href="/pages/zY4zS8WdVjhAZX2nMA7f"> <strong>Facebook</strong></a></td><td></td><td><a href="/pages/zY4zS8WdVjhAZX2nMA7f">/pages/zY4zS8WdVjhAZX2nMA7f</a></td></tr><tr><td><img src="/files/G2ps5jRGkEImUKOcJLeM" alt="" data-size="line"> <a href="/pages/iBmx2d0nzx0SxpMpBM33"><strong>Instagram</strong></a></td><td></td><td><a href="/pages/iBmx2d0nzx0SxpMpBM33">/pages/iBmx2d0nzx0SxpMpBM33</a></td></tr><tr><td><a href="/pages/arisSYkI8h3mgyeqz3IY"><img src="/files/FDkXMs7wThicAKhrMcDj" alt="logo-twitch.png" data-size="line"></a> <a href="/pages/ifQKPTYZWhF23Wxi18P8"><strong>Twitch</strong></a></td><td></td><td></td></tr></tbody></table>

#### Web3 IDs supported

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/KQEgICoXxQFtTA9FdZFI"><img src="/files/azkJCHBQjiJ9sz8e5FvS" alt="logo-google.png" data-size="line"></a> <a href="/pages/KQEgICoXxQFtTA9FdZFI"><strong>EBSI</strong></a></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="/pages/FerzMnQujCNDpgBV0QgA"><img src="https://play-lh.googleusercontent.com/I6ZlvPS6WoeN8OSuf8lLBlL149X9jWvRtCfNOFUVANiGpVH7PKgerYJPV1crARLqTtQ" alt="logo-twitter.png" data-size="line"></a> <a href="/pages/FerzMnQujCNDpgBV0QgA"><strong>Polygon</strong> <strong>ID</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/khYybkwoX0GpZrvx7Huj"><img src="/files/8TqHVpdFrynErsi7Ip5F" alt="logo-discord.png" data-size="line"></a> <a href="/pages/khYybkwoX0GpZrvx7Huj"><strong>WorldCoin</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/Nz1DU933qqeiHpYPw8fr"><img src="https://assets.website-files.com/609ab8eae6dd417c085cc925/609b2ba76d637745d781160e_logo-ceramic.png" alt="logo-linkedin.png" data-size="line"></a> <a href="/pages/Nz1DU933qqeiHpYPw8fr"><strong>Ceramic Network</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/DIngTGgTkXrMyFtgYECB"><img src="https://cdn.dribbble.com/users/2210413/screenshots/15548951/poh-logo_1x.png" alt="logo-reddit.png" data-size="line"></a> <a href="/pages/DIngTGgTkXrMyFtgYECB">Proof ofHumanity</a></td><td></td><td></td></tr><tr><td><a href="/pages/q5Otesz6GNdVot1Xr5dE"><img src="https://avatars.githubusercontent.com/u/36172275?s=280&#x26;v=4" alt="logo-github.png" data-size="line"></a> <a href="/pages/q5Otesz6GNdVot1Xr5dE"><strong>U. Domains</strong></a></td><td></td><td></td></tr></tbody></table>

#### PKIs  supported

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/tx740z4gv8hqBQBaGkdY"><img src="https://play-lh.googleusercontent.com/2IeE0Vhgzk-feNt3O5tG_HpXBQ7liTwqdvuKGGeQ87gPN4OUNm2MThYsHXdftjsR64s" alt="logo-google.png" data-size="line"></a> <a href="/pages/tx740z4gv8hqBQBaGkdY"><strong>CMD Portugal</strong></a></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="/pages/tx740z4gv8hqBQBaGkdY"><img src="https://play-lh.googleusercontent.com/2IeE0Vhgzk-feNt3O5tG_HpXBQ7liTwqdvuKGGeQ87gPN4OUNm2MThYsHXdftjsR64s" alt="logo-twitter.png" data-size="line"></a> <a href="/pages/tx740z4gv8hqBQBaGkdY"><strong>CC Portugal</strong></a></td><td></td><td></td></tr></tbody></table>

### Select the type of verification flow (independent/ combined)

After selecting all data sources and defining parameters to be verified in your platform you can choose from one of the following verification flows:

* **Combined verifications flow -** The user will need to verify all data selected in your config and comply with all the conditions to generate a verification output. They will be presented with a flow embedded in your platform that will require the user to complete all steps until all data is verified.
* **Independent verifications flow -** The user can freely verify one or more of the individual data parameters you selected in your config. Each will be verified individually and the output of the verification will be treated individually as well.

<figure><img src="/files/44pW5Qlt8nP2HmKeKgT5" alt=""><figcaption></figcaption></figure>

### Choose output type (result/ data)

The output of the verification will be sent and processed in your frontend. You can choose to process it in one of two ways:

* **Verification result -** The verification process will only return a `True` or `False` statement based on the data provided by the user.
* **Verification data -** The verification process will return all the user data verified alongside the verification result in case of successful verification.

### Export the config code and add it to your platform

Once you complete the steps above, preview the [verification modal](/verification-modal) that will be displayed in your website with all the parameters selected. Copy the code generated and add it to the frontend component of your platform that you wish to trigger the Verification flows from.

<figure><img src="/files/lGcnJusPpZHEOb2ZGnad" alt=""><figcaption></figcaption></figure>


# Blockchains

WalliD allows you to add blockchain asset ownership verifications to your user data verification flows

The dashboard will allow you to get the smart contract data of the tokens and NFTs you wish to validate and establish conditions  (eg. user owns NFT #ID 001) for a successful verification.&#x20;

#### How to config Blockchain asset verifications

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/hTIFyHQUHGpVfonWhcXX"><img src="/files/6KbeDbbc9Te7Flcvbvfi" alt="logo-ethereum.png" data-size="line"></a> <a href="/pages/hTIFyHQUHGpVfonWhcXX"><strong>Ethereum</strong></a> </td><td></td><td><a href="/pages/hTIFyHQUHGpVfonWhcXX">/pages/hTIFyHQUHGpVfonWhcXX</a></td></tr><tr><td><a href="/pages/ID7KZj9kpxReFm9LVacv"><img src="https://seeklogo.com/images/N/near-icon-logo-10785AE366-seeklogo.com.png" alt="logo-twitter.png" data-size="line"></a> <a href="/pages/ID7KZj9kpxReFm9LVacv"><strong>NEAR</strong></a></td><td></td><td><a href="/pages/ID7KZj9kpxReFm9LVacv">/pages/ID7KZj9kpxReFm9LVacv</a></td></tr><tr><td><a href="/pages/MfbQLJYZ8pDpq8suSmpi"><img src="/files/DtfGo8UGPrM9dw9AUzHE" alt="logo-polygon.png" data-size="line"></a> <a href="/pages/MfbQLJYZ8pDpq8suSmpi"><strong>Polygon</strong></a></td><td></td><td><a href="/pages/FerzMnQujCNDpgBV0QgA">/pages/FerzMnQujCNDpgBV0QgA</a></td></tr><tr><td><a href="/pages/IO3o6g6fn1MTQNZxYujN"><img src="https://s2.coinmarketcap.com/static/img/coins/200x200/5625.png" alt="logo-linkedin.png" data-size="line"></a> <a href="/pages/IO3o6g6fn1MTQNZxYujN"><strong>LUKSO</strong></a></td><td></td><td><a href="/pages/IO3o6g6fn1MTQNZxYujN">/pages/IO3o6g6fn1MTQNZxYujN</a></td></tr><tr><td><a href="/pages/hmHgeetZc78bSOFVeiis"><img src="/files/gdlJqEYOZKIepKP9PbZf" alt="logo-binance.png" data-size="line"></a> <a href="/pages/hmHgeetZc78bSOFVeiis"><strong>BSC</strong></a></td><td></td><td><a href="/pages/hmHgeetZc78bSOFVeiis">/pages/hmHgeetZc78bSOFVeiis</a></td></tr><tr><td><a href="/pages/9IdA4y6VpystvLdbf3bC"><img src="/files/oYP896cAchJV5kFiSrhR" alt="logo-arbitrum.png" data-size="line"></a> <a href="/pages/9IdA4y6VpystvLdbf3bC"><strong>Arbitrun</strong></a></td><td></td><td><a href="/pages/9IdA4y6VpystvLdbf3bC">/pages/9IdA4y6VpystvLdbf3bC</a></td></tr><tr><td><a href="/pages/YNoxDVKVMQ09kyDoBNlG"><img src="/files/p3nnZIvAUueVOoVByqZp" alt="logo-avalanche.png" data-size="line"></a> <a href="/pages/YNoxDVKVMQ09kyDoBNlG"><strong>Avalanche</strong></a></td><td></td><td><a href="/pages/YNoxDVKVMQ09kyDoBNlG">/pages/YNoxDVKVMQ09kyDoBNlG</a></td></tr><tr><td><a href="/pages/lA7mi04L5GhdqqUP9tgW"><img src="/files/jXPBbbW5UiB6ydIggub2" alt="logo-optimism.png" data-size="line"></a> <a href="/pages/lA7mi04L5GhdqqUP9tgW"><strong>Optimism</strong></a></td><td></td><td><a href="/pages/lA7mi04L5GhdqqUP9tgW">/pages/lA7mi04L5GhdqqUP9tgW</a></td></tr><tr><td><a href="/pages/Do2rMmGQaSh92HVkBKff"><img src="/files/K8gmv3vZNScJRsmr6yya" alt="logo-celo.png" data-size="line"></a> <a href="/pages/Do2rMmGQaSh92HVkBKff"><strong>Celo</strong></a></td><td></td><td><a href="/pages/Do2rMmGQaSh92HVkBKff">/pages/Do2rMmGQaSh92HVkBKff</a></td></tr><tr><td><a href="/pages/FJxl9IEEDxXKC4gC1MEl"><img src="/files/Uflna3qfWMPciw5vjMrA" alt="logo-moonbeam.png" data-size="line"></a> <a href="/pages/FJxl9IEEDxXKC4gC1MEl"><strong>Moonbeam</strong></a></td><td></td><td><a href="/pages/FJxl9IEEDxXKC4gC1MEl">/pages/FJxl9IEEDxXKC4gC1MEl</a></td></tr><tr><td><a href="/pages/6MQgFznu5OH5efuknqMB"><img src="/files/ida8scWP34aOAzLxWmnl" alt="logo-moonriver.png" data-size="line"></a> <a href="/pages/6MQgFznu5OH5efuknqMB"><strong>Moonriver</strong></a></td><td></td><td><a href="/pages/6MQgFznu5OH5efuknqMB">/pages/6MQgFznu5OH5efuknqMB</a></td></tr><tr><td><a href="/pages/YgQQeAxPELkneUqSravj"><img src="/files/5uLd3XOGp4pLMttvHR1o" alt="logo-solana.png" data-size="line"></a> <a href="/pages/YgQQeAxPELkneUqSravj"><strong>Solana</strong></a></td><td></td><td><a href="/pages/YgQQeAxPELkneUqSravj">/pages/YgQQeAxPELkneUqSravj</a></td></tr></tbody></table>


# Ethereum

You can customise verification conditions based on users' ownership of <mark style="color:purple;">`Ethereum`</mark>tokens. This section serves as a guide to help you to setup those configs.&#x20;

### Select type of token

To get started, select <mark style="color:purple;">`Ethereum`</mark> Assets in WalliD dashboard. You'll have to choose from <mark style="color:purple;">`Fungible tokens`</mark> (ERC-20 and native tokens) or <mark style="color:purple;">`NFTs`</mark> (ERC-721 and 1155). You can mix token types and bundle as many tokens as you wish in the same config.

<figure><img src="/files/g7xPGt89cbPmT7oJQFUm" alt=""><figcaption></figcaption></figure>

### Fungible token configs

**Token type** - Choose from <mark style="color:purple;">`ERC-20`</mark> or <mark style="color:purple;">`native`</mark> (ETH token).

**Smart contract address** - Paste the <mark style="color:purple;">`smart contract address`</mark> of the token you wish to add to your verification config. If you've selected native, this field will automatically be filled.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark>t of tokens held by the user for a successful verification.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

A**dd another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and <mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/mGRU1aztE0EC9SOBD6rz" alt=""><figcaption></figcaption></figure>

### NFT configs

**Token type** - Choose from <mark style="color:purple;">`ERC-721`</mark> or <mark style="color:purple;">`ERC-155`</mark>.&#x20;

**Smart contract address** - Paste the smart contract address of the token you wish to add to your verification config.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Unique ID -** Provide the <mark style="color:purple;">`#ID`</mark> of a specific NFT you wish to verify ownership of. If the NFT is hosted on an <mark style="color:purple;">`ERC-1155`</mark> contract, you can also define a <mark style="color:purple;">`Minimum amount`</mark> and <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

**Add another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and<mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/d4gDs0l0r2qIej2jxkef" alt=""><figcaption></figcaption></figure>


# Binance Smart Chain

You can customise verification conditions based on users' ownership of <mark style="color:purple;">`BSC`</mark> tokens. This section serves as a guide to help you to setup those configs.&#x20;

### Select type of token

To get started, select <mark style="color:purple;">`BNB Assets`</mark> Assets in WalliD dashboard. You'll have to choose from <mark style="color:purple;">`Fungible tokens`</mark> (ERC-20 and native tokens) or <mark style="color:purple;">`NFTs`</mark> (ERC-721 and 1155). You can mix token types and bundle as many tokens as you wish in the same config.

<figure><img src="/files/Q2vyiqCHIvnTIMNCLISI" alt=""><figcaption></figcaption></figure>

### Fungible token configs

**Token type** - Choose from <mark style="color:purple;">`ERC-20`</mark> or <mark style="color:purple;">`native`</mark> (ETH token).

**Smart contract address** - Paste the <mark style="color:purple;">`smart contract address`</mark> of the token you wish to add to your verification config. If you've selected native, this field will automatically be filled.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark>t of tokens held by the user for a successful verification.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

A**dd another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and <mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/I7dnI95M0R90gurBAWYb" alt=""><figcaption></figcaption></figure>

### NFT configs

**Token type** - Choose from <mark style="color:purple;">`ERC-721`</mark> or <mark style="color:purple;">`ERC-155`</mark>.&#x20;

**Smart contract address** - Paste the smart contract address of the token you wish to add to your verification config.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Unique ID -** Provide the <mark style="color:purple;">`#ID`</mark> of a specific NFT you wish to verify ownership of. If the NFT is hosted on an <mark style="color:purple;">`ERC-1155`</mark> contract, you can also define a <mark style="color:purple;">`Minimum amount`</mark> and <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

**Add another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and<mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/2dSBv0UiVDqtMwEnqttt" alt=""><figcaption></figcaption></figure>


# NEAR

You can customise verification conditions based on users' ownership of <mark style="color:purple;">`NEAR`</mark> tokens. This section serves as a guide to help you to setup those configs.&#x20;

### Select type of token

To get started, select <mark style="color:purple;">`NEAR`</mark> Assets in WalliD dashboard. You'll have to choose from <mark style="color:purple;">`Fungible tokens`</mark> (ERC-20 and native tokens) or <mark style="color:purple;">`NFTs`</mark> (ERC-721 and 1155). You can mix token types and bundle as many tokens as you wish in the same config.

<figure><img src="/files/A5V7X3dKsODKjiAehaAE" alt=""><figcaption></figcaption></figure>

### Fungible token configs

**Token type** - Choose from <mark style="color:purple;">`ERC-20`</mark> or <mark style="color:purple;">`native`</mark> (NEAR token).

**Smart contract address** - Paste the <mark style="color:purple;">`smart contract address`</mark> of the token you wish to add to your verification config. I. f you've selected native, this field will automatically be filled.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark>t of tokens held by the user for a successful verification.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

A**dd another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and <mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/LZ8yCEnAkRsF0I0syXar" alt=""><figcaption></figcaption></figure>

### NFT configs

**Token type** - Choose from <mark style="color:purple;">`ERC-721`</mark> or <mark style="color:purple;">`ERC-155`</mark>.&#x20;

**Smart contract address** - Paste the smart contract address of the token you wish to add to your verification config.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Unique ID -** Provide the <mark style="color:purple;">`#ID`</mark> of a specific NFT you wish to verify ownership of. If the NFT is hosted on an <mark style="color:purple;">`ERC-1155`</mark> contract, you can also define a <mark style="color:purple;">`Minimum amount`</mark> and <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

**Add another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and<mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/YRyuMVNGsEOL6mAyfzHN" alt=""><figcaption></figcaption></figure>


# Polygon

You can customise verification conditions based on users' ownership of <mark style="color:purple;">`Polygon`</mark> tokens. This section serves as a guide to help you to setup those configs.&#x20;

### Select type of token

To get started, select <mark style="color:purple;">`Polygon`</mark> Assets in WalliD dashboard. You'll have to choose from <mark style="color:purple;">`Fungible tokens`</mark> (ERC-20 and native tokens) or <mark style="color:purple;">`NFTs`</mark> (ERC-721 and 1155). You can mix token types and bundle as many tokens as you wish in the same config.

<figure><img src="/files/ntUaQmWxMMk5XUZFXS10" alt=""><figcaption></figcaption></figure>

### Fungible token configs

**Token type** - Choose from <mark style="color:purple;">`ERC-20`</mark> or <mark style="color:purple;">`native`</mark> (NEAR token).

**Smart contract address** - Paste the <mark style="color:purple;">`smart contract address`</mark> of the token you wish to add to your verification config. If you've selected native, this field will automatically be filled.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark>t of tokens held by the user for a successful verification.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

A**dd another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and <mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/dClO5ks8278kgPuKJrr8" alt=""><figcaption></figcaption></figure>

### NFT configs

**Token type** - Choose from <mark style="color:purple;">`ERC-721`</mark> or <mark style="color:purple;">`ERC-155`</mark>.&#x20;

**Smart contract address** - Paste the smart contract address of the token you wish to add to your verification config.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Unique ID -** Provide the <mark style="color:purple;">`#ID`</mark> of a specific NFT you wish to verify ownership of. If the NFT is hosted on an <mark style="color:purple;">`ERC-1155`</mark> contract, you can also define a <mark style="color:purple;">`Minimum amount`</mark> and <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

**Add another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and<mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/nHynV3DoFkzRKN1O55fS" alt=""><figcaption></figcaption></figure>


# Solana

You can customise verification conditions based on users' ownership of <mark style="color:purple;">`Solana`</mark> tokens. This section serves as a guide to help you to setup those configs.&#x20;

### Select type of token

To get started, select <mark style="color:purple;">`Solana`</mark> Assets in WalliD dashboard. You'll have to choose from <mark style="color:purple;">`Fungible tokens`</mark> (ERC-20 and native tokens) or <mark style="color:purple;">`NFTs`</mark> (ERC-721 and 1155). You can mix token types and bundle as many tokens as you wish in the same config.

<figure><img src="/files/s03EIQ0FIgqW5TFYFJlC" alt=""><figcaption></figcaption></figure>

### Fungible token configs

**Token type** - Choose from <mark style="color:purple;">`ERC-20`</mark> or <mark style="color:purple;">`native`</mark> (SOL token).

**Smart contract address** - Paste the <mark style="color:purple;">`smart contract address`</mark> of the token you wish to add to your verification config. If you've selected native, this field will automatically be filled.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark>t of tokens held by the user for a successful verification.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

A**dd another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and <mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/dbMhih0aGNSvY5FBDRgg" alt=""><figcaption></figcaption></figure>

### NFT configs

**Token type** - Choose from <mark style="color:purple;">`ERC-721`</mark> or <mark style="color:purple;">`ERC-155`</mark>.&#x20;

**Smart contract address** - Paste the smart contract address of the token you wish to add to your verification config.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Unique ID -** Provide the <mark style="color:purple;">`#ID`</mark> of a specific NFT you wish to verify ownership of. If the NFT is hosted on an <mark style="color:purple;">`ERC-1155`</mark> contract, you can also define a <mark style="color:purple;">`Minimum amount`</mark> and <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

**Add another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and<mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/aaZzMnownHQqXKER0y3P" alt=""><figcaption></figcaption></figure>


# CELO

You can customise verification conditions based on users' ownership of <mark style="color:purple;">`CELO`</mark> tokens. This section serves as a guide to help you to setup those configs.&#x20;

### Fungible token configs

**Token type** - Choose from <mark style="color:purple;">`ERC-20`</mark> or <mark style="color:purple;">`native`</mark> (NEAR token).

**Smart contract address** - Paste the <mark style="color:purple;">`smart contract address`</mark> of the token you wish to add to your verification config. If you've selected native, this field will automatically be filled.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark>t of tokens held by the user for a successful verification.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

A**dd another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and <mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/Z0OLXnpVhZ8hyAZF7b4u" alt=""><figcaption></figcaption></figure>


# LUKSO

You can customise verification conditions based on users' ownership of <mark style="color:purple;">`LUKSO`</mark> tokens. This section serves as a guide to help you to setup those configs.&#x20;

### Select type of token

To get started, select <mark style="color:purple;">`LUKSO`</mark> Assets in WalliD dashboard. You'll have to choose from <mark style="color:purple;">`Fungible tokens`</mark> (LSP4, LSP7) or <mark style="color:purple;">`NFTs`</mark> (LSP8). You can mix token types and bundle as many tokens as you wish in the same config.

<figure><img src="/files/NFuYQ8Nd4lJ5Ed8o1xNp" alt=""><figcaption></figcaption></figure>

### Fungible token configs

**Token type** - Choose from<mark style="color:purple;">`LSP4, LSP7`</mark> or <mark style="color:purple;">`LSP8`</mark> (LYXe token).

**Smart contract address** - Paste the <mark style="color:purple;">`smart contract address`</mark> of the token you wish to add to your verification config. If you've selected native, this field will automatically be filled.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark>t of tokens held by the user for a successful verification.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

A**dd another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and <mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/oK2dp6Z7MlMylezR41tg" alt=""><figcaption></figcaption></figure>

### NFT configs

**Token type** - Choose <mark style="color:purple;">`LSP8`</mark> token type.

**Smart contract address** - Paste the smart contract address of the token you wish to add to your verification config.

**Minimum amount held** - Define the value for the <mark style="color:purple;">`Minimum amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Max amount held** - Define the value for the <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification. The verification will ignore any specificities of the tokens and their IDs.

**Unique ID -** Provide the <mark style="color:purple;">`#ID`</mark> of a specific NFT you wish to verify ownership of. If the NFT is hosted on an <mark style="color:purple;">`LSP8`</mark>contract, you can also define a <mark style="color:purple;">`Minimum amount`</mark> and <mark style="color:purple;">`Max amount`</mark> of tokens held by the user for a successful verification.

**Add another level** - Add more values to the <mark style="color:purple;">`Max amount`</mark> held and<mark style="color:purple;">`Minimum amount`</mark> held to create different levels of verification based on token ownership.

<figure><img src="/files/zt4YlBAYOkvXti4WKY4p" alt=""><figcaption></figcaption></figure>


# Optimism

### :eyes: Coming soon... :eyes:


# Avalanche

### :eyes: Coming soon... :eyes:


# Arbitrum

### :eyes: Coming soon... :eyes:


# Moonbeam

### :eyes: Coming soon... :eyes:


# Moonriver

### :eyes: Coming soon... :eyes:


# Social ID Providers

You can add verification parameters based on users' social ID attributes to your user verification flows `(eg. Twitter account + <1,000 followers)`.&#x20;

For social ID providers, you'll also need to set up an application with the integrating social login provider to get the <mark style="color:purple;">**`Client ID / Client Secret`**</mark> which will be required in the config Dashboard

#### How to get Client ID and config Social ID verifications

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/JgtoAPiq2VJcRv1hDVI5"><img src="/files/yual3rIZpLGJsGUvNE9B" alt="logo-google.png" data-size="line"></a><a href="/pages/JgtoAPiq2VJcRv1hDVI5"><strong>Google</strong></a></td><td></td><td><a href="/pages/JgtoAPiq2VJcRv1hDVI5">/pages/JgtoAPiq2VJcRv1hDVI5</a></td></tr><tr><td><a href="/pages/A0LPKrX00g2NOGJ2a1CW"><img src="/files/8EDKCUSDtpubi2LwIMAV" alt="logo-twitter.png" data-size="line"></a> <a href="/pages/A0LPKrX00g2NOGJ2a1CW"><strong>Twitter</strong></a></td><td></td><td><a href="/pages/A0LPKrX00g2NOGJ2a1CW">/pages/A0LPKrX00g2NOGJ2a1CW</a></td></tr><tr><td><a href="/pages/AbwhHS4Vv73Gl7MhsLyd"><img src="/files/bdLaPyagQmtlGn17dXSB" alt="logo-discord.png" data-size="line"></a> <a href="/pages/PjWNVLJ7JGnBrPVqGLe5"><strong>Discord</strong></a></td><td></td><td><a href="/pages/AbwhHS4Vv73Gl7MhsLyd">/pages/AbwhHS4Vv73Gl7MhsLyd</a></td></tr><tr><td><a href="/pages/CqTLnPjfNN5vWpJi4IFr"><img src="/files/nuS9cupMxpYKKvTgGfHL" alt="logo-linkedin.png" data-size="line"></a> <a href="/pages/66ros7gocNH9vaRezVmT"><strong>Linkedin</strong></a></td><td></td><td><a href="/pages/CqTLnPjfNN5vWpJi4IFr">/pages/CqTLnPjfNN5vWpJi4IFr</a></td></tr><tr><td><a href="/pages/nzexzyAf9BR3c7KZRXbn"><img src="/files/VC7PJ3tISH0zzvcnJO8m" alt="logo-reddit.png" data-size="line"></a> <a href="/pages/OeFrLY14kFMIhWyYZCQA"><strong>Reddit</strong></a></td><td></td><td><a href="/pages/nzexzyAf9BR3c7KZRXbn">/pages/nzexzyAf9BR3c7KZRXbn</a></td></tr><tr><td><a href="/pages/wqs7kJ25IvK4eTuaoXnm"><img src="/files/pTzlrQsH8qW47zIVFuEo" alt="logo-github.png" data-size="line"></a> <a href="/pages/AmtGN9xtijcIkNDHzUYo"><strong>Github</strong></a></td><td></td><td><a href="/pages/wqs7kJ25IvK4eTuaoXnm">/pages/wqs7kJ25IvK4eTuaoXnm</a></td></tr><tr><td><a href="/pages/zY4zS8WdVjhAZX2nMA7f"><img src="/files/Yhukb02vtjZYEEfON9iv" alt="logo-facebook.png" data-size="line"></a> <a href="/pages/nMF8OkUUo1U1mtlLZvxb"><strong>Facebook</strong></a></td><td></td><td><a href="/pages/zY4zS8WdVjhAZX2nMA7f">/pages/zY4zS8WdVjhAZX2nMA7f</a></td></tr><tr><td><img src="/files/G2ps5jRGkEImUKOcJLeM" alt="" data-size="line"> <a href="/pages/nET5qtkpDqyJAP9qPLiv"><strong>Instagram</strong></a></td><td></td><td><a href="/pages/iBmx2d0nzx0SxpMpBM33">/pages/iBmx2d0nzx0SxpMpBM33</a></td></tr><tr><td><a href="/pages/arisSYkI8h3mgyeqz3IY"><img src="/files/FDkXMs7wThicAKhrMcDj" alt="logo-twitch.png" data-size="line"></a><a href="/pages/arisSYkI8h3mgyeqz3IY"><strong>Twitch</strong></a></td><td></td><td><a href="/pages/ifQKPTYZWhF23Wxi18P8">/pages/ifQKPTYZWhF23Wxi18P8</a></td></tr></tbody></table>


# Google

You can customise verification conditions based on users' <mark style="color:purple;">**`Google`**</mark> attributes. This section serves as a guide to help you to setup those configs.&#x20;

<figure><img src="/files/2qWkljpUbktFDdcYXqQk" alt=""><figcaption></figcaption></figure>

### Get Client ID and Client Secret

To get started, paste the Client ID and Client Secret provided by Google's developer web service. If you don't know how to get your Client ID and Client Secret, check out [this guide](/config-dashboard/authentication/social-login-providers/google#how-to-get-google-client-id-and-client-secret).

### Select attributes to verify

**Account Name** - Activate the button in order to collect the user account name. Since this is the only attribute verifiable with Google OAuth's service, this button can't be deactivated .


# Twitter

You can customise verification conditions based on users' <mark style="color:purple;">**`Twitter`**</mark> attributes. This section serves as a guide to help you to setup those configs.&#x20;

<figure><img src="/files/zhbPxrkcJflEkjtmLP9Y" alt=""><figcaption></figcaption></figure>

### Get API Key and API Key Secret&#x20;

To get started, paste the API Key and API Key Secret provided by Twitters' developer web service. If you don't know how to get your API Key and API Key Secret, check out out [this guide](/config-dashboard/authentication/social-login-providers/twitter#how-to-get-twitter-api-key-and-api-key-secret).

### Select attributes to verify

**Account Name** - Activate the button in order to collect the user account name.

**Number of Followers** - Activate the the button and define <mark style="color:purple;">**`Minimum amount`**</mark> of followers for a successful verification.

**Number of Tweets** - Activate the the button and define <mark style="color:purple;">**`Minimum value`**</mark> of published tweets a for a successful verification.


# Discord

You can customise verification conditions based on users' <mark style="color:purple;">**`Discord`**</mark> attributes. This section serves as a guide to help you to setup those configs.&#x20;

<figure><img src="/files/nQAtseaD5upm4Psmj6kY" alt=""><figcaption></figcaption></figure>

### Get Client ID and Client Secret

To get started, paste the Client ID and Client Secret provided by Discords' developer web service. If you don't know how to get your Client ID and Client Secret, check out out [this guide](/config-dashboard/authentication/social-login-providers/discord#how-to-get-client-id-and-client-secret).

### Select attributes to verify

**Account Name** - Activate the button in order to collect the user account name.

**Server Membership** - Activate the the button and provide a  <mark style="color:purple;">**`SERVER ID`**</mark> in order to verify the users' membership,&#x20;


# Linkedin

You can customise verification conditions based on users' <mark style="color:purple;">**`Linkedin`**</mark> attributes. This section serves as a guide to help you to setup those configs.&#x20;

<figure><img src="/files/6VXHle5Q14Ey1I2BPM44" alt=""><figcaption></figcaption></figure>

### Get Client ID and Client Secret

To get started, paste the Client ID and Client Secret provided by Linkedin's developer web service. If you don't know how to get your Client ID and Client Secret, check out [this guide](/config-dashboard/authentication/social-login-providers/linkedin#how-to-get-client-id-and-client-secret).

### Select attributes to verify

**Account Name** - Activate the button in order to collect the user account name.

**Number of Followers** - Activate the the button and define <mark style="color:purple;">**`Minimum amount`**</mark> of followers for a successful verification.


# Reddit

You can customise verification conditions based on users'<mark style="color:purple;">**`Reddit`**</mark> attributes. This section serves as a guide to help you to setup those configs.&#x20;

<figure><img src="/files/67CzX8bIYgwnK00L1gek" alt=""><figcaption></figcaption></figure>

### Get Client ID and Secret Key

To get started, paste the Client ID and Secret Key provided by Reddit's developer web service. If you don't know how to get your Client ID and Secret Key, check out [this guide](/config-dashboard/authentication/social-login-providers/reddit#how-to-get-client-id-and-client-secret).

### Select attributes to verify

**Account Name** - Activate the button in order to collect the user account name.

**Number of Followers** - Activate the the button and define <mark style="color:purple;">**`Minimum amount`**</mark> of followers for a successful verification.

**Account Karma Score** - Activate the the button and define <mark style="color:purple;">**`Minimum value`**</mark> of users' Karma for a successful verification.

**Post Karma Score** - Activate the the button and define <mark style="color:purple;">**`Minimum value`**</mark> of post Karma for a successful verification.

**Comment Karma Score** - Activate the the button and define <mark style="color:purple;">**`Minimum value`**</mark> of comment Karma for a successful verification.

**Awardee Karma Score** - Activate the the button and define <mark style="color:purple;">**`Minimum value`**</mark> of awardee Karma for a successful verification.

**Awarder Karma Score** - Activate the the button and define <mark style="color:purple;">**`Minimum value`**</mark> of awarder Karma for a successful verification.


# Facebook

You can customise verification conditions based on users' <mark style="color:purple;">**`Facebook`**</mark> attributes. This section serves as a guide to help you to setup those configs.&#x20;

<figure><img src="/files/9UXhjzmyGTxKCkzx5V6Q" alt=""><figcaption></figcaption></figure>

### Get App ID and App Secret

To get started, paste the App ID and App Secret provided by Facebook developer web service. If you don't know how to get your App ID and App Secret, check out [this guide](/config-dashboard/authentication/social-login-providers/facebook#how-to-get-app-id-and-app-secret).

### Select attributes to verify

**Account Name** - Activate the button in order to collect the user account name.

**Number of friends** - Activate the the button and define <mark style="color:purple;">**`Minimum amount`**</mark> of followers for a successful verification.

**Profile Picture** - Activate the button in order to collect the user profile picture.


# Github

You can customise verification conditions based on users' <mark style="color:purple;">**`Github`**</mark> attributes. This section serves as a guide to help you to setup those configs.&#x20;

<figure><img src="/files/K7NyMHyS1DVsL2983d0W" alt=""><figcaption></figcaption></figure>

### Get Client ID and Client Secret

To get started, paste the Client ID and Client Secret provided by Github developer web service. If you don't know how to get your Client ID and Client Secret, check out [this guide](/config-dashboard/authentication/social-login-providers/github#how-to-get-client-id-and-client-secret).

### Select attributes to verify

**Account Name** - Activate the button in order to collect the user account name.

**Number of Followers** - Activate the the button and define <mark style="color:purple;">**`Minimum amount`**</mark> of followers for a successful verification.


# Instagram

### :eyes: Coming soon... :eyes:


# Twitch

### :eyes: Coming soon... :eyes:


# Web3 ID providers

{% hint style="warning" %}
Web3 ID providers are not live on WalliD config Dashboard yet.\
:eyes:[**Stay tuned**](https://discord.gg/3vnsN7zVpT) **to be the first trying them out!**
{% endhint %}

Web3 ID providers are DID or ZK protocols that allow you to query blockchain infrastructures to access users' data upon authorization.

From WalliD Dashboard you can config the connection to different networks and protocols in order to enable your users to seamlessly provide a proof-of-ownership over credentials, badges and other data objects from those infrastructures

#### How to config Web3 ID verifications

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/KQEgICoXxQFtTA9FdZFI"><img src="/files/azkJCHBQjiJ9sz8e5FvS" alt="logo-google.png" data-size="line"></a> <a href="/pages/KQEgICoXxQFtTA9FdZFI"><strong>EBSI</strong></a></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="/pages/FerzMnQujCNDpgBV0QgA"><img src="https://play-lh.googleusercontent.com/I6ZlvPS6WoeN8OSuf8lLBlL149X9jWvRtCfNOFUVANiGpVH7PKgerYJPV1crARLqTtQ" alt="logo-twitter.png" data-size="line"></a> <a href="/pages/FerzMnQujCNDpgBV0QgA"><strong>Polygon</strong> <strong>ID</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/khYybkwoX0GpZrvx7Huj"><img src="/files/NCAOXZsMsLrRPPIMcMbd" alt="logo-discord.png" data-size="line"></a> <a href="/pages/khYybkwoX0GpZrvx7Huj"><strong>WorldCoin</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/Nz1DU933qqeiHpYPw8fr"><img src="https://assets.website-files.com/609ab8eae6dd417c085cc925/609b2ba76d637745d781160e_logo-ceramic.png" alt="logo-linkedin.png" data-size="line"></a> <a href="/pages/Nz1DU933qqeiHpYPw8fr"><strong>Ceramic Network</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/DIngTGgTkXrMyFtgYECB"><img src="https://cdn.dribbble.com/users/2210413/screenshots/15548951/poh-logo_1x.png" alt="logo-reddit.png" data-size="line"></a> <a href="/pages/DIngTGgTkXrMyFtgYECB"><strong>Proof of Humanity</strong></a></td><td></td><td></td></tr><tr><td><a href="/pages/q5Otesz6GNdVot1Xr5dE"><img src="https://avatars.githubusercontent.com/u/36172275?s=280&#x26;v=4" alt="logo-github.png" data-size="line"></a> <a href="/pages/q5Otesz6GNdVot1Xr5dE"><strong>U. Domains</strong></a></td><td></td><td></td></tr></tbody></table>


# EBSI

### &#x20;:eyes: Coming soon... :eyes:


# PolygonID

### &#x20;:eyes: Coming soon... :eyes:


# WorldCoin

### &#x20;:eyes: Coming soon... :eyes:


# Ceramic Network

### &#x20;:eyes: Coming soon... :eyes:


# Proof of Humanity

### &#x20;:eyes: Coming soon... :eyes:


# U. Domains

### &#x20;:eyes: Coming soon... :eyes:


# Certificate Authorities

### :eyes: Coming soon... :eyes:


# non-custodial wallet infrastructure as a service

### :eyes: Coming soon... :eyes:


# Verification Modal

The verification modal allows for a quick integration of the authentication or verification flows in your systems. Its code is generated at the end of your configuration within the[ Config Dashboard](/config-dashboard)  and can be be added to the code of your platform to launch the Modal at the desired environment.

<figure><img src="/files/ikhBVHMYCWiLfL6pDBC1" alt=""><figcaption></figcaption></figure>

The Modal provides an easy interface for users to connect and verify their data on each of the selected providers or infrastructures and to automatically guide them to the intended destination once the verification is complete.

<div align="left"><figure><img src="/files/WGC3tLRA6DHCQODWgxlJ" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
Want to take full control over the UI and branding of the Modal? Check out our [SDKs](/sdks) section.
{% endhint %}


# Authentication flow

If you have configured an [authentication flow ](/config-dashboard/authentication)in the Config Dashboard to add to your  login flows, the Modal will display all the Social Login Providers and Web3 wallets selected by you.

<figure><img src="/files/J9LedyBvZ0jlWMQNm6Xx" alt=""><figcaption></figcaption></figure>

Users will be able to select their preferred option and to complete the authentication flow specified for those providers (eg. connect WalliD wallet or approve Google OAuth).

#### Signing up with web3 wallets

Web3 authentication follows the connection flows and methods established by the wallet providers. Users are prompted to their wallet provider websites or browser extension pop-ups  to approve the connection request and login with their wallets.

<figure><img src="/files/nnyUC0Wa6GAdqOqmRQFQ" alt=""><figcaption></figcaption></figure>

#### Signing up with social login providers

Social logins/signups follow the OAuth flows established by the selected providers. Users are prompted to the login window of those providers to complete the process by authorizing the authentication with their unique credentials.

<figure><img src="/files/JWuXrO4tkqm2lKyDysGy" alt=""><figcaption></figcaption></figure>


# Verification flow

### Independent verification flow

If you have configured an[ independent data verification flow](/config-dashboard/data-verification#select-the-type-of-verification-flow-independent-combined) in the Config Dashboard, the Modal will display all the ID providers and data sources selected by you and users will be able to freely choose and select one or more of the options available. &#x20;

<figure><img src="/files/K9IVtA86hn5B7rvi3eTB" alt=""><figcaption></figcaption></figure>

###

### Combined verification flow

If you have configured a [combined verification flow](/config-dashboard/data-verification#select-the-type-of-verification-flow-independent-combined) in the Config Dashboard to add to your system, the Modal will display all the ID providers and data sources selected by you and inform users that they will need to verify all the data requested in order to successfully complete the verification flow.

<figure><img src="/files/s2cSG3I9ZugCjYXVaAKG" alt=""><figcaption></figcaption></figure>

### Verification steps

Each data source has its own specific attributes that can be verified. Once a data source is selected from the Modal, a window will appear, displaying the configuration parameters and requested data. By clicking the <mark style="color:purple;">**`VERIFY`**</mark> button, the user can establish a connection with the corresponding infrastructure and verify the validity of the shared data.

<figure><img src="/files/buJtgCRfDvPfz2WIrEVU" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/581mpwTuzLHiR7OX2ZHJ" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/QwkHlUTWbQUbCl4ZUNGx" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ZhE9Bob4xY2kHaCN9Dg7" alt=""><figcaption></figcaption></figure>


# Integrate Modal

{% embed url="<https://github.com/walliDprotocol/verification-modal>" %}


# WalliD Wallet

WalliD wallet is a self-custodial aggregator wallet that enables natural persons to authenticate on the web2, web3 and to manage digital assets and IDs.

<div align="center"><figure><img src="/files/Kp2YdKlaRhjPtoRZSOP4" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="success" %}
📱 **Get your WalliD wallet now!**
{% endhint %}

The wallet is available for desktop and mobile. Its [architecture](/wallid-wallet/wallet-architecture) ensures users maintain complete sovereignty over their keys and assets at the same time it provides a smooth authentication experience across the web.

#### Browser extension

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><img src="/files/93PPociWBAfY8zhkPNLf" alt="" data-size="line"> <a href="https://chrome.google.com/webstore/detail/wallid-wallet/eknlkogikcabnjbjnhmjllabckeapdii"><strong>Chrome</strong></a></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><img src="/files/nKV0WwiA0ohPOA1tkiur" alt="" data-size="line"> <a href="https://chrome.google.com/webstore/detail/wallid-wallet/eknlkogikcabnjbjnhmjllabckeapdii"><strong>Brave</strong></a></td><td></td><td></td></tr><tr><td><img src="/files/w1406x5ZwjVmjyP29hDd" alt="" data-size="line"><a href="https://web3auth.io/docs/sdk/react-native/"> </a><a href="https://chrome.google.com/webstore/detail/wallid-wallet/eknlkogikcabnjbjnhmjllabckeapdii"><strong>Edge</strong></a></td><td></td><td></td></tr><tr><td><img src="/files/9Yy6gmJX0dP9aY8vF9Kg" alt="" data-size="line"> <strong>Firefox</strong></td><td></td><td></td></tr><tr><td><img src="/files/3Uxj0stzq6GhytgwDZLv" alt="" data-size="line"> <strong>Opera</strong></td><td></td><td></td></tr></tbody></table>

#### Mobile app (:eyes:comming soon :eyes:)

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="https://web3auth.io/docs/sdk/ios/"><img src="/files/sw3S82pW0AcOpoNAdUfW" alt="logo-apple.png" data-size="line"></a> <strong>IOS</strong> </td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="https://web3auth.io/docs/sdk/android/"><img src="/files/1HPnPyCP7csUTdOCiqqx" alt="logo-android.png" data-size="line"></a> <strong>Android</strong> </td><td></td><td></td></tr></tbody></table>

### Main Features

{% hint style="info" %}
👤 **Web2 authentication**

Easily sign in websites with your email, Google, Facebook and other of your social accounts.&#x20;
{% endhint %}

{% hint style="info" %}
⛓️ **Web3 authentication**

Connect to dApps and execute blockchain transactions on EVM chains, NEAR and Solana.
{% endhint %}

{% hint style="info" %}
🦄 **Crypto token management**

Send and view native, ERC-20, NFTs and Soulbound tokens balance and metadata in your wallet. &#x20;
{% endhint %}

{% hint style="info" %}
**🐱 Digital ID management**

Claim, prove the ownership and view Digital IDs, social network accounts, digital certificates, verifiable credentials and badges from multiple verifiable data sources.
{% endhint %}

{% hint style="info" %}
🔑 **Self-custodial**

With WalliD, you are in full control of your keys and assets with no third party being able to access tokens or ID data without your permission.
{% endhint %}


# Browser extension

*This is a step by step guide to help you get started with using WalliD wallet on a browser extension*

{% hint style="warning" %}
Current wallet version: v.1.1.4 Check the open-source code in our [Github](https://github.com/walliDprotocol/WalliD-Wallet)
{% endhint %}

## Getting started

### Get the extension for your favourite browser

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><img src="/files/93PPociWBAfY8zhkPNLf" alt="" data-size="line"> <a href="https://chrome.google.com/webstore/detail/wallid-wallet/eknlkogikcabnjbjnhmjllabckeapdii"><strong>Chrome</strong></a></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><img src="/files/nKV0WwiA0ohPOA1tkiur" alt="" data-size="line"> <a href="https://chrome.google.com/webstore/detail/wallid-wallet/eknlkogikcabnjbjnhmjllabckeapdii"><strong>Brave</strong></a></td><td></td><td></td></tr><tr><td><img src="/files/w1406x5ZwjVmjyP29hDd" alt="" data-size="line"><a href="https://web3auth.io/docs/sdk/react-native/"> </a><a href="https://chrome.google.com/webstore/detail/wallid-wallet/eknlkogikcabnjbjnhmjllabckeapdii"><strong>Edge</strong></a></td><td></td><td></td></tr><tr><td><img src="/files/9Yy6gmJX0dP9aY8vF9Kg" alt="" data-size="line"> <strong>Firefox</strong></td><td></td><td></td></tr><tr><td><img src="/files/3Uxj0stzq6GhytgwDZLv" alt="" data-size="line"> <strong>Opera</strong></td><td></td><td></td></tr></tbody></table>

### Setup your wallet

You can <mark style="color:purple;">**`create a new wallet`**</mark> or <mark style="color:purple;">**`import and existing wallet`**</mark> through its seed phrase or private keys.&#x20;

<figure><img src="/files/IQbmY6WqFQ2IkNf3GCZh" alt="" width="375"><figcaption></figcaption></figure>

### Create a new wallet

#### Choose a password

Create a password with at least 8 characters and confirm it in box below. This password will encrypt all the data of your wallet in your browser local storage and will be required to log you in in your extension.

<figure><img src="/files/haDeezEU95j7w6cbGtsb" alt="" width="375"><figcaption></figcaption></figure>

#### Save your seed phrase or private key

Click on the blurred box to reveal your 12-word seedphrase. The seedphrase is the ultimate key to your wallet and you are the only owner of it. Make sure you save it in a secure place an no one else has access to it. Click <mark style="color:purple;">**`I wrote down the seed phrase`**</mark> after saving it.

<figure><img src="/files/VzwOVShqbZgtScMvgfwr" alt="" width="375"><figcaption></figcaption></figure>

#### Rewrite your seedphrase

Click on the 12 words of your seedphrase by the correct order to rebuild it. Click <mark style="color:purple;">**`Confirm`**</mark> after saving it to complete the process of creating a new wallet.

<figure><img src="/files/kBg1w1y1Lzf9in6l5YX9" alt="" width="375"><figcaption></figcaption></figure>

### Import a wallet

Paste the seedphrase of the wallet you wish to import in the appropriate box and choose a new password to lock you wallet. All the addresses and assets associated to the wallet imported will be accessible through the extension

<figure><img src="/files/83XgtjBTlsm5KCqAPXdP" alt="" width="375"><figcaption></figcaption></figure>

### Home[​](https://web3auth.io/docs/developer-dashboard/#home) <a href="#home" id="home"></a>

After successfully logging in you will have access to the wallet home screen

<figure><img src="/files/Kp2YdKlaRhjPtoRZSOP4" alt="" width="375"><figcaption></figcaption></figure>

This is what you can access from this screen:

#### Overview[​](https://web3auth.io/docs/developer-dashboard/#overview) <a href="#overview" id="overview"></a>

* Account name
* wallet address
* Send&#x20;
* Prove

#### Network selector <a href="#bottomost-interactive-web3auth-logo" id="bottomost-interactive-web3auth-logo"></a>

#### Main nets:

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="https://web3auth.io/docs/integration-builder?chain=ETH"><img src="/files/6KbeDbbc9Te7Flcvbvfi" alt="logo-ethereum.png" data-size="line"></a> <strong>Ethereum</strong></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/federated-identity-providers#twitter"><img src="https://seeklogo.com/images/N/near-icon-logo-10785AE366-seeklogo.com.png" alt="logo-twitter.png" data-size="line"></a> <strong>NEAR</strong></td><td></td><td></td></tr><tr><td><a href="https://web3auth.io/docs/integration-builder?chain=MATIC"><img src="/files/DtfGo8UGPrM9dw9AUzHE" alt="logo-polygon.png" data-size="line"></a> <strong>Polygon</strong></td><td></td><td></td></tr><tr><td><a href="https://web3auth.io/docs/integration-builder?chain=CELO"><img src="/files/K8gmv3vZNScJRsmr6yya" alt="logo-celo.png" data-size="line"></a> <strong>Celo</strong></td><td></td><td></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/federated-identity-providers#linkedin"><img src="https://s2.coinmarketcap.com/static/img/coins/200x200/5625.png" alt="logo-linkedin.png" data-size="line"></a> <strong>LUKSO</strong></td><td></td><td></td></tr><tr><td><a href="https://web3auth.io/docs/integration-builder?chain=BNB"><img src="/files/gdlJqEYOZKIepKP9PbZf" alt="logo-binance.png" data-size="line"></a> <strong>BSC</strong></td><td></td><td></td></tr></tbody></table>

#### Test nets:

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="https://web3auth.io/docs/integration-builder?chain=ETH"><img src="/files/6KbeDbbc9Te7Flcvbvfi" alt="logo-ethereum.png" data-size="line"></a> <strong>Rinkeby</strong></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/federated-identity-providers#twitter"><img src="https://seeklogo.com/images/N/near-icon-logo-10785AE366-seeklogo.com.png" alt="logo-twitter.png" data-size="line"></a> <strong>NEAR testnet</strong></td><td></td><td></td></tr><tr><td><a href="https://web3auth.io/docs/integration-builder?chain=MATIC"><img src="/files/DtfGo8UGPrM9dw9AUzHE" alt="logo-polygon.png" data-size="line"></a> <strong>Mumbai</strong></td><td></td><td></td></tr><tr><td><a href="https://web3auth.io/docs/integration-builder?chain=CELO"><img src="/files/K8gmv3vZNScJRsmr6yya" alt="logo-celo.png" data-size="line"></a> <strong>Alfajores</strong></td><td></td><td></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/federated-identity-providers#linkedin"><img src="https://s2.coinmarketcap.com/static/img/coins/200x200/5625.png" alt="logo-linkedin.png" data-size="line"></a> <strong>L-16</strong></td><td></td><td></td></tr><tr><td><a href="https://web3auth.io/docs/integration-builder?chain=BNB"><img src="/files/gdlJqEYOZKIepKP9PbZf" alt="logo-binance.png" data-size="line"></a> <strong>BSC testnet</strong></td><td></td><td></td></tr></tbody></table>

#### Assets Dashboard[​](https://web3auth.io/docs/developer-dashboard/#quick-start) <a href="#quick-start" id="quick-start"></a>

* [Fungible tokens](/wallid-wallet/browser-extension/fungible-tokens)
* [NFTs](/wallid-wallet/browser-extension/nfts)
* [Digital IDs](/wallid-wallet/browser-extension/digital-ids)

#### Account Icon <a href="#quick-start" id="quick-start"></a>

* [Wallet details](/wallid-wallet/browser-extension/wallet-details)
* Activity
* [Connected Sites](/wallid-wallet/browser-extension/connected-sites)
* [Wallet Connect](/wallid-wallet/browser-extension/wallet-connect)
* [Settings ](/wallid-wallet/browser-extension/settings)
* About
* Sign-out&#x20;


# Fungible tokens

{% hint style="warning" %}
Fungible tokens and blockchain transactions are not yet available on WalliD wallet.\
:eyes:[**Stay tuned**](https://discord.gg/3vnsN7zVpT) **to be the first trying them out!**
{% endhint %}

The browser extension supports different standards of fungible and native tokens from the multiple networks available and allows you to <mark style="color:purple;">**`import`**</mark>, <mark style="color:purple;">**`view balance`**</mark> and<mark style="color:purple;">**`send tokens`**</mark> to a different address.

### Import tokens

To import a token that you already own in the address associated to your wallet, go to the Fungible Tokens section in the home page of your extension and click on <mark style="color:purple;">**`Import token.`**</mark>Provide the token info requested to add that token to your wallet.

<figure><img src="/files/Dj8MmiCLJLSLB9HBQrR3" alt="" width="375"><figcaption></figcaption></figure>

### View token balance

Token balances are automatically displayed on the side of the tokens imported to the wallet.

<figure><img src="/files/xQ9ecAc5SjLakoZWMkbf" alt="" width="375"><figcaption></figcaption></figure>

### Send tokens

To send tokens to another address click the <mark style="color:purple;">**`...`**</mark> button on the right side of the page to open the option menu. Select the option <mark style="color:purple;">**`Send token`**</mark> to open the window below. Provide the address of the recipient and select the amount of tokens you wish to send.

<figure><img src="/files/0nEXZ1PjlJRRX8SmRMqC" alt="" width="375"><figcaption></figcaption></figure>

#### How to manage network fees

:eyes: **Coming soon!** :eyes:


# NFTs

{% hint style="warning" %}
NFTs and blockchain transactions are not yet available on WalliD wallet.\
:eyes:[**Stay tuned**](https://discord.gg/3vnsN7zVpT) **to be the first trying them out!**
{% endhint %}

The browser extension supports different standards of NFTs from the multiple networks available and allows you to <mark style="color:purple;">**`import`**</mark>, <mark style="color:purple;">**`view metadata`**</mark> and to <mark style="color:purple;">**`send tokens`**</mark> to a different address.

### Import tokens

To import a token that you already own in the address associated to your wallet, go to the Fungible Tokens section in the home page of your extension and click on <mark style="color:purple;">**`Import NFT.`**</mark>Provide the token info requested to add that token to your wallet.

<figure><img src="/files/ka3p0qYDhGLpc9HpWzth" alt="" width="375"><figcaption></figcaption></figure>

### View metadata

To check NFTs metadata click the <mark style="color:purple;">**`...`**</mark> button on the right side of the page toopen the option menu. Select the option <mark style="color:purple;">**`check on-chain`**</mark> to access the correspondent smart contract on its network block explorer or select the option <mark style="color:purple;">**`check on Opensea`**</mark> to the marketplace webpage displaying your NFT.

<figure><img src="/files/oiD4c9u91wkkMPsdovf2" alt="" width="375"><figcaption></figcaption></figure>

### Send NFTs

To send NFTs to another address click the <mark style="color:purple;">**`...`**</mark> button on the right side of the page to open the option menu. Select the option <mark style="color:purple;">**`Send token`**</mark> to open the window below. Provide the address of the recipient and if the standard supports tokens IDs with multiple units `(eg ERC-155)` provide the amount of tokens you wish to send as well

<figure><img src="/files/iDrKSClmC7SYHSej8C6Y" alt="" width="375"><figcaption></figcaption></figure>

#### How to manage network fees

:eyes: **Coming soon!** :eyes:


# Wallet details

The wallet details section allows you to confirm and share the public address you're currently logged into.

<figure><img src="/files/aN3zTSyKm9IgeMWxUjCm" alt="" width="375"><figcaption></figcaption></figure>


# Connected Sites

The connected sites section shows you the list of all the websites that your wallet maintains a connection with.

<figure><img src="/files/pu0tVv44yUD645xdzJYD" alt="" width="375"><figcaption></figcaption></figure>

### Disconnect sites

You can disconnect from all websites from within the browser extension. Click on the trash can icon next to the site you wish to disconnect from and confirm the action by clicking the <mark style="color:purple;">**`Disconnect`**</mark> button in the page that appears

<figure><img src="/files/9Ocr6VSjalZU3EtEkuRB" alt="" width="375"><figcaption></figcaption></figure>


# Wallet Connect

### :eyes: **Coming soon!** :eyes:


# Settings

### General

Change the language of the extension.

<figure><img src="/files/QNyJaXL1UhpD8p4LQUKn" alt="" width="375"><figcaption></figcaption></figure>

### Privacy and Security

{% hint style="danger" %}
Make sure you are alone and in a safe environment when managing Seed Phrases and Private Keys. You are the only owner of this information
{% endhint %}

This section of the extension allows you to view and copy your <mark style="color:purple;">**`Seed Phrase`**</mark> and <mark style="color:purple;">**`Private Keys`**</mark>. You can copy to import them into other wallets.&#x20;

#### Reveal Seed Phrase

To reveal your seed phrase input your wallet password and click <mark style="color:purple;">`Confirm`</mark> button. The 12 word phrase will be displayed in your screen.

<figure><img src="/files/SX31vQDoFHUpXjfzIosO" alt="" width="375"><figcaption></figcaption></figure>

#### Reveal Private Key

To reveal your Private key input your wallet password and click <mark style="color:purple;">`Confirm`</mark> button. The string will be displayed in your screen.

<figure><img src="/files/MJuOxHdKqDgrE8Mt7MqQ" alt="" width="375"><figcaption></figcaption></figure>


# Digital IDs

The browser extension supports different types of Digital IDs and allows you to <mark style="color:purple;">**`claim`**</mark>, <mark style="color:purple;">**`view`**</mark> and <mark style="color:purple;">**`prove the ownership`**</mark> of every single one of them.

<figure><img src="/files/PlpE9LFBqZ9XI4hbZncF" alt="" width="375"><figcaption></figcaption></figure>

### Claim a digital ID

To add a new digital ID to your wallet, go to the Digital IDs section in the home page of your extension and click on <mark style="color:purple;">**`Import an ID.`**</mark>Select the Digital ID you'd like to add and follow the specific steps for each one of them.

<figure><img src="/files/Sfxmf8aDbhe9N3DEHBqZ" alt=""><figcaption></figcaption></figure>

#### Social IDs supported

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/NyewIV1LCgLJfEAm0wrX#team-members"><img src="/files/yual3rIZpLGJsGUvNE9B" alt="logo-google.png" data-size="line"></a> <strong>Google</strong></td><td></td><td><a href="/pages/unLPRQB0ZGAgL9J2UsyZ">/pages/unLPRQB0ZGAgL9J2UsyZ</a></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/federated-identity-providers#twitter"><img src="/files/8EDKCUSDtpubi2LwIMAV" alt="logo-twitter.png" data-size="line"></a> <strong>Twitter</strong></td><td></td><td><a href="/pages/mNoPONvYLYqij2IwSKLv">/pages/mNoPONvYLYqij2IwSKLv</a></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/social-providers/discord"><img src="/files/bdLaPyagQmtlGn17dXSB" alt="logo-discord.png" data-size="line"></a> <strong>Discord</strong></td><td></td><td><a href="/pages/2LMk8XtUxGQFpiSScxdt">/pages/2LMk8XtUxGQFpiSScxdt</a></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/federated-identity-providers#linkedin"><img src="/files/nuS9cupMxpYKKvTgGfHL" alt="logo-linkedin.png" data-size="line"></a> <strong>Linkedin</strong></td><td></td><td><a href="/pages/SWxbTOgbyKInNycp4kuJ">/pages/SWxbTOgbyKInNycp4kuJ</a></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/federated-identity-providers#reddit"><img src="/files/xRKyIlCz7MzKAZx3SudZ" alt="logo-reddit.png" data-size="line"></a> <strong>Reddit</strong></td><td></td><td><a href="/pages/K8eNKsr8Xdaz7Tas1aTq">/pages/K8eNKsr8Xdaz7Tas1aTq</a></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/federated-identity-providers#github"><img src="/files/DRbvdK6NMsKR7EWFXa3E" alt="logo-github.png" data-size="line"></a> <strong>Github</strong></td><td></td><td><a href="/pages/5k7gdeciSDNB26NgO0yK">/pages/5k7gdeciSDNB26NgO0yK</a></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/social-providers/facebook"><img src="/files/HO3w38Mdd3Gn6DCUguXd" alt="logo-facebook.png" data-size="line"></a> <strong>Facebook</strong></td><td></td><td><a href="/pages/OUriuyYpqCxzk3sgQaHd">/pages/OUriuyYpqCxzk3sgQaHd</a></td></tr><tr><td><img src="/files/G2ps5jRGkEImUKOcJLeM" alt="" data-size="line"> <strong>Instagram</strong></td><td></td><td><a href="/pages/D0bDaV1XfxDM9SJAPrMi">/pages/D0bDaV1XfxDM9SJAPrMi</a></td></tr><tr><td><a href="/pages/arisSYkI8h3mgyeqz3IY"><img src="/files/FDkXMs7wThicAKhrMcDj" alt="logo-twitch.png" data-size="line"></a> <strong>Twitch</strong></td><td></td><td><a href="/pages/c1XHacV3nat84EcghJaB">/pages/c1XHacV3nat84EcghJaB</a></td></tr></tbody></table>

#### Web3 IDs supported

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="https://web3auth.io/docs/custom-authentication/federated-identity-providers#twitter"><img src="https://play-lh.googleusercontent.com/I6ZlvPS6WoeN8OSuf8lLBlL149X9jWvRtCfNOFUVANiGpVH7PKgerYJPV1crARLqTtQ" alt="logo-twitter.png" data-size="line"></a> <a href="/pages/7mA8W6yzazd6ixHSVw4X"><strong>Polygon</strong> <strong>ID</strong></a></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="https://web3auth.io/docs/custom-authentication/social-providers/google"><img src="/files/azkJCHBQjiJ9sz8e5FvS" alt="logo-google.png" data-size="line"></a> <strong>EBSI</strong></td><td></td><td><a href="/pages/plyU44FTursIY2Llt5Z1">/pages/plyU44FTursIY2Llt5Z1</a></td></tr></tbody></table>

#### PKIs  supported

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="https://web3auth.io/docs/custom-authentication/social-providers/google"><img src="https://play-lh.googleusercontent.com/2IeE0Vhgzk-feNt3O5tG_HpXBQ7liTwqdvuKGGeQ87gPN4OUNm2MThYsHXdftjsR64s" alt="logo-google.png" data-size="line"></a> <strong>CMD Portugal</strong></td><td></td><td><a href="/pages/dorA4zYrMBWiohm4yNui">/pages/dorA4zYrMBWiohm4yNui</a></td></tr></tbody></table>

### View digital ID data

Digital IDs claimed or added to the wallet will be visible in the Digital IDs section. They can easily be identified by the Issuers' logo and name, name of the ID and main attribute of that ID (eg. Twitter handle). In some types of IDs you will also see its validity state (<mark style="color:green;">Valid</mark>, <mark style="color:yellow;">Expired</mark> or <mark style="color:red;">Revoked</mark>). Click the <mark style="color:purple;">**`...`**</mark> button on the right side of the Digital ID to open the option menu. Select <mark style="color:purple;">**`View ID info`**</mark> to display all the attributes and metadata associated to it

<figure><img src="/files/BBJKfw3r0ZVqv1PSSyci" alt="" width="375"><figcaption></figcaption></figure>

You can also download some Digital IDs to a document file (eg. PDF) to keep the ability to prove its ownership offline.

### Prove the ownership of your Digital IDs

You can prove the ownership of a single Digital ID or create a single proof with a bundle of different assets owned by you.  Click the <mark style="color:purple;">**`...`**</mark> button on the right side of the Digital ID to open the option menu. Select <mark style="color:purple;">**`Share Proof of ownership`**</mark> to open the following page. Choose all the assets you wish to aggregate on a single proof to proceed.

<figure><img src="/files/qXJzwipzIWdusGEcdXWr" alt="" width="375"><figcaption></figcaption></figure>


# Polygon ID

### Overview

WalliD wallet supports [Polygon ID ](https://polygon.technology/polygon-id)protocol by integrating with [Polygon ID JS SDK](https://0xpolygonid.github.io/tutorials/js-sdk/js-sdk-overview/). allowing users to <mark style="color:purple;">**`create or import an identifier (DID)`**</mark> in the network and to <mark style="color:purple;">**`claim and prove the ownership`**</mark> of verifiable credentials associated with that DID.

{% embed url="<https://www.youtube.com/watch?v=URSfsz3f3Gc>" %}

### Create or Import DID

The DID is the unique identifier within Polygon ID network to which your verifiable credentials refer. It acts as your public account in the network and it can only be controled by the wallet owning it. Start by selecting Polygon ID in the network tab. If you haven't linked a DID to your account you'll be presented with the following screen.

#### Create DID

Click on <mark style="color:purple;">**`Create DID`**</mark> and a unique identifier will be generated automatically and associated to your address. You will be able so see it within your IDs tab.

<figure><img src="/files/4Gep2PzOYH4pmbzg7wUr" alt="" width="375"><figcaption></figcaption></figure>

#### Import DID

To import a DID you must first import the wallet account to which it is associated. Click on <mark style="color:purple;">**`Import DID`**</mark> and import the seed phrase of the wallet you want to add. The DID will automatically be imported and displayed within your IDs tab.

<figure><img src="/files/svlz6t3Fufv8srkKmRbi" alt="" width="375"><figcaption></figcaption></figure>

### Claim a verifiable credential

WalliD wallet is automatically available as a wallet option to claim and store verifiable credentials for Issuers supporting Polygon ID protocol. After clicking in the website button to claim your credential, WalliD wallet plugin will appear, displaying the credential data and a request to <mark style="color:green;">Receive</mark> or <mark style="color:red;">Decline</mark> it in your wallet. Accepting it will link the data to your identifier and the credential will become available in your wallet extension.

<figure><img src="/files/xH2Nb2nGEGiwZ4bvCUuI" alt=""><figcaption></figcaption></figure>

### Prove the ownership of verifiable credentials

WalliD wallet allows you to answer proof of ownership requests from external systems (eg. for KYC purposes) or to generate a public one from within your browser extension and/or combined with any other data sources you might have linked to to your wallet. For the latter check out the generic guide in [this user guide](/wallid-wallet/browser-extension/digital-ids#prove-the-ownership-of-your-digital-ids).  To approve a request from an external system, click in the website button to call your wallet plugin. The pop-up will display the credential that's being requested, the entity requesting it and will require you to  <mark style="color:green;">Accept</mark> or <mark style="color:red;">Decline</mark> it in your wallet.

<figure><img src="/files/iUjkfewAlJf6ydAm4k2s" alt=""><figcaption></figcaption></figure>

### Coming soon... :eyes:


# Twitter

### How to add Twitter ID to your wallet?

1. Go to the  <mark style="color:purple;">**`Digital IDs`**</mark> section on the home screen of your extension and click on <mark style="color:purple;">**`Import an ID`**</mark>

<figure><img src="/files/Ve2FBuGoSLsIKo1iIu8X" alt="" width="375"><figcaption></figcaption></figure>

2. You will be redirected to WalliD onboarding to complete a few steps in order to store your Twitter ID **->** Click on the <mark style="color:purple;">**`Social IDs`**</mark> button

<figure><img src="/files/p7ck9oi0tJdz9SZ8Q9Px" alt=""><figcaption></figcaption></figure>

3. Select <mark style="color:purple;">**`Twitter icon`**</mark> from the options **->** Type you Twitter <mark style="color:purple;">**`Username`**</mark>**&#x20;->** Click on the <mark style="color:purple;">**`Next`**</mark> button **->** Click on the <mark style="color:purple;">**`Sign`**</mark> button in order to sign your Twitter username and your wallet address

<figure><img src="/files/tSJYs7VlnZeftzOiDi9e" alt=""><figcaption></figcaption></figure>

4. Click on the <mark style="color:purple;">**`Sign and tweet`**</mark> button to publish a tweet containing your account ID signed by your wallet **->** Click on the <mark style="color:purple;">**`Tweet`**</mark> on the Twitter pop-up

<figure><img src="/files/qMNo0UlnX0rDWJ6CjzN7" alt=""><figcaption></figcaption></figure>

5. Click on the <mark style="color:purple;">**`Verify`**</mark> button to proceed to the next step

<figure><img src="/files/k7XOOl24zNdGzcOIiIZx" alt=""><figcaption></figcaption></figure>

6. Confirm data to be stored in your wallet **->** Click on the <mark style="color:purple;">**`Store digital ID`**</mark> button **->** Accept the authorisation request pop-up by clicking on the <mark style="color:purple;">**`Authorise`**</mark>button to store Twitter ID into WalliD wallet

<figure><img src="/files/OMUyk4n6Lp6cNTtrDKZn" alt=""><figcaption></figcaption></figure>

7. Your **Twitter ID account was successfully stored** and now you can **prove the ownership of your Twitter ID** or create a single proof with a bundle of different assets owned by you. Click the <mark style="color:purple;">**`...`**</mark> button on the right side of the Digital ID to open the option menu.&#x20;

<figure><img src="/files/DdQ3l6H3M9JJ5Irp70UT" alt=""><figcaption></figcaption></figure>


# Discord

### How to add Discord ID to your wallet?

1. Go to the <mark style="color:purple;">**`Digital IDs`**</mark> section on the home screen of your extension and click on <mark style="color:purple;">**`Import an ID`**</mark>

<figure><img src="/files/Ve2FBuGoSLsIKo1iIu8X" alt="" width="375"><figcaption></figcaption></figure>

2. You will be redirected to WalliD onboarding to complete a few steps in order to store your Discord ID **->** Click on the <mark style="color:purple;">**`Social IDs`**</mark> button

<figure><img src="/files/p7ck9oi0tJdz9SZ8Q9Px" alt=""><figcaption></figcaption></figure>

3. Select the <mark style="color:purple;">**`Discord icon`**</mark> from the options **->** On the first step click on the <mark style="color:purple;">**`WalliD Discord Server`**</mark> and you will be redirect to WalliD Discord

<figure><img src="/files/O1L8TuW2bIZoCjrXmeSB" alt=""><figcaption></figcaption></figure>

4. Go to <mark style="color:purple;">**`id-verification`**</mark> channel **->** Type <mark style="color:purple;">**`!start`**</mark> on the chat **->&#x20;**<mark style="color:purple;">**`Check your DM`**</mark>

<figure><img src="/files/A2oE17pewzf3w7zDIp7h" alt=""><figcaption></figcaption></figure>

5. Already inside your DM inbox click on the <mark style="color:purple;">**`Link`**</mark> provided by WalliD Bot

<figure><img src="/files/T2fYWzGlmIhfvbhogzgy" alt=""><figcaption></figcaption></figure>

6. You will be redirect again to WalliD onboarding process **->** Click on the <mark style="color:purple;">**`Sign`**</mark> button in order to sign your Discord username and your wallet address&#x20;

<figure><img src="/files/ANuEac19DJi49XyMaxGZ" alt=""><figcaption></figcaption></figure>

7. <mark style="color:purple;">**`Copy the message`**</mark> signed by you on the previous pop-up signature request **->** Click on the <mark style="color:purple;">**`WalliD Discord server`**</mark>&#x20;

<figure><img src="/files/H3SEhboqDMbspsJYf8v6" alt=""><figcaption></figcaption></figure>

8. <mark style="color:purple;">**`Paste it`**</mark> on id-verifcation channel

<figure><img src="/files/mJZB57q129ovRQXZrzlR" alt=""><figcaption></figcaption></figure>

9. Copy the <mark style="color:purple;">**`Link of id-verification channel`**</mark>

<figure><img src="/files/7TKLMsskXhoVKUuCN4wr" alt=""><figcaption></figcaption></figure>

10. Back to WalliD onboarding page and <mark style="color:purple;">**`Paste the link`**</mark> on the 3rd step to prove your Discord ID and Ethereum address ownership **->** Click on the <mark style="color:purple;">**`Verify`**</mark> button

<figure><img src="/files/UzwaCm8AMSfyYfsObUxE" alt=""><figcaption></figcaption></figure>

11. Confirm data to be stored in your wallet **->** Click on the <mark style="color:purple;">**`Store digital ID`**</mark> button **->** Accept the authorisation request pop-up by clicking on the <mark style="color:purple;">**`Authorise`**</mark> button to store Discord ID into WalliD wallet.

<figure><img src="/files/LGsYtfspGT56BZFgP6Ay" alt=""><figcaption></figcaption></figure>

12. Your **Discord ID account was successfully stored** and now you can **prove the ownership of your Discord ID** or create a single proof with a bundle of different assets owned by you. Click the <mark style="color:purple;">**`...`**</mark> button on the right side of the Digital ID to open the option menu.&#x20;

<figure><img src="/files/X19turtwbFCVysHtZGYg" alt=""><figcaption></figcaption></figure>


# Reddit

## How to add Reddit ID to your wallet?

1. Go to the <mark style="color:purple;">**`Digital IDs`**</mark> section on the home screen of your extension and click on <mark style="color:purple;">**`Import an ID`**</mark>

<figure><img src="/files/Ve2FBuGoSLsIKo1iIu8X" alt="" width="375"><figcaption></figcaption></figure>

2. You will be redirected to WalliD onboarding to complete a few steps in order to store your Reddit ID **->** Click on the <mark style="color:purple;">**`Social IDs`**</mark> button

<figure><img src="/files/p7ck9oi0tJdz9SZ8Q9Px" alt=""><figcaption></figcaption></figure>

3. Select <mark style="color:purple;">**`Reddit icon`**</mark> from the options **->** Enter your <mark style="color:purple;">**`Reddit Username`**</mark>**&#x20;->** Click on the <mark style="color:purple;">**`Next`**</mark> button **->** Click on the <mark style="color:purple;">**`Sign`**</mark> button in order to sign your Reddit username and your wallet address

<figure><img src="/files/APu2l4jq8PdiBUOUE9nF" alt=""><figcaption></figcaption></figure>

4. <mark style="color:purple;">**`Copy the message`**</mark> signed by your wallet address to the clipboard **->** Click on the  <mark style="color:purple;">**`r/wallid`**</mark> to redirect you to the WalliD Reddit page&#x20;

<figure><img src="/files/wAK2Ta2Vd4TRTGKd4GMT" alt=""><figcaption></figcaption></figure>

5. <mark style="color:purple;">**`Post it`**</mark> on r/wallid Reddit page&#x20;

<figure><img src="/files/OtXqvxaXXfo1gNmwuQ4b" alt=""><figcaption></figcaption></figure>

6. <mark style="color:purple;">**`Enter the link`**</mark> of the post you just made **->** Click on the <mark style="color:purple;">**`Verify`**</mark> button

<figure><img src="/files/UpojywvLq6dIjfqYNILW" alt=""><figcaption></figcaption></figure>

7. Confirm the data to be stored in your wallet **->** Click on the <mark style="color:purple;">**`Store digital ID`**</mark> button **->** Accept the authorisation request pop-up by clicking on the <mark style="color:purple;">**`Authorise`**</mark> button to store Reddit ID into WalliD wallet

<figure><img src="/files/9Kh6Mq4tHNJGQ7IogExU" alt=""><figcaption></figcaption></figure>

8. Your **Reddit ID account was successfully stored** and now you can **prove the ownership of your Reddit ID** or create a single proof with a bundle of different assets owned by you. Click the <mark style="color:purple;">**`...`**</mark> button on the right side of the Digital ID to open the option menu.&#x20;

<figure><img src="/files/Uh8QI8tDCBqpwkOqdyvg" alt=""><figcaption></figcaption></figure>


# Github

## How to add Github ID to your wallet?

1. Go to the <mark style="color:purple;">**`Digital IDs`**</mark> section on the home screen of your extension and click on <mark style="color:purple;">**`Import an ID`**</mark>

<figure><img src="/files/Ve2FBuGoSLsIKo1iIu8X" alt="" width="375"><figcaption></figcaption></figure>

2. You will be redirected to WalliD onboarding to complete a few steps in order to store your Github ID **->** Click on the <mark style="color:purple;">**`Social IDs`**</mark> button

<figure><img src="/files/p7ck9oi0tJdz9SZ8Q9Px" alt=""><figcaption></figcaption></figure>

3. Select <mark style="color:purple;">**`Github icon`**</mark> from the options **->** Enter your <mark style="color:purple;">**`Github Username`**</mark>**&#x20;->** Click on the <mark style="color:purple;">**`Next`**</mark> button **->** Click on the <mark style="color:purple;">**`Sign`**</mark> button in order to sign your Github username and your wallet address

<figure><img src="/files/tWVjvh86UD8EakHYh9E0" alt=""><figcaption></figcaption></figure>

4. &#x20;<mark style="color:purple;">**`Copy`**</mark> the text to the clipboard and go to the one of your Github account repos

<figure><img src="/files/UuzvP18HDH9ZxWV2Dk5f" alt=""><figcaption></figcaption></figure>

5. Select a repository on your Github account **->** <mark style="color:purple;">**`Create a file name "wallid"`**</mark> containing the copied text **->** Click on the <mark style="color:purple;">**`Commit changes`**</mark> button

<figure><img src="/files/ZpxekI8V7FfP5cbgItze" alt=""><figcaption></figcaption></figure>

6. <mark style="color:purple;">**`Enter the link`**</mark> of the repository you just created on the third step **->** Click on the <mark style="color:purple;">**`Verify`**</mark> button

<figure><img src="/files/WeW4p2ihEvqDxHGeoLIk" alt=""><figcaption></figcaption></figure>

7. Confirm the data to be stored in your wallet **->** Click on the <mark style="color:purple;">**`Store digital ID`**</mark> button **->** Accept the authorisation request pop-up by clicking on <mark style="color:purple;">**`Authorise`**</mark> button to store Github ID into WalliD wallet

<figure><img src="/files/ojyVR9QSIcYhvluCHwKx" alt=""><figcaption></figcaption></figure>

8. Your **Github ID was successfully stored** and now you can **prove the ownership of your Github ID** or create a single proof with a bundle of different assets owned by you. Click the <mark style="color:purple;">**`...`**</mark> button on the right side of the Digital ID to open the option menu.&#x20;

<figure><img src="/files/1SBceeMCdtmX2232LVn6" alt=""><figcaption></figcaption></figure>


# CMD Portugal

### Coming soon... :eyes:


# Google

### Coming soon... :eyes:


# Linkedin

### Coming soon... :eyes:


# Facebook

### Coming soon... :eyes:


# Instagram

### Coming soon... :eyes:


# Twitch

### Coming soon... :eyes:


# EBSI

### Coming soon... :eyes:


# Mobile App

### :eyes: Coming soon... :eyes:


# Wallet architecture

### :eyes: Coming soon... :eyes:


# SDKs

{% hint style="warning" %}
Our SDKs are not live yet. :eyes:[**Stay tuned**](https://discord.gg/3vnsN7zVpT) **to be the first trying them out!**
{% endhint %}

Our SDKs offer the ability to customize the utilization of WalliD's core components to suit the specific needs of developers. This includes the capability to create authentication and verification configurations independent of the WalliD Dashboard, integrate with providers outside of the WalliD ecosystem, and have full control over the user experience at the interface level when adding authentication and verification flows to you systems.

### WalliD SDKS

{% hint style="info" %}
[**Core Config**](/sdks/core-config-sdks) **-** NPM libs to configure authentication and verification parameters to embed in you system.
{% endhint %}

{% hint style="info" %}
[**Verification Modal**](/sdks/verification-modal-sdks) **-** Mobile and Desktop Libs to customize and add an already configured verification flow to your system.
{% endhint %}

{% hint style="info" %}
[**Wallet Connector**](/sdks/wallid-wallet-connector-sdks) **-** Mobile and Desktop libs to add WalliD wallets to login flows.
{% endhint %}


# Core Config SDKs

{% hint style="warning" %}
Our SDKs are not live yet. :eyes:[**Stay tuned**](https://discord.gg/3vnsN7zVpT) **to be the first trying them out!**
{% endhint %}

The Core Configuration Libraries enable you to configure authentication and verification parameters through NPM libs. These libraries give you the flexibility to add new parameters to the verification flow or integrate ID providers that are not currently part of the WalliD aggregator. Additionally, you can embed all the features of the WalliD Dashboard within your own environment or platform, providing a seamless integration of WalliD's technology into your existing systems.

#### Mobile

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="https://web3auth.io/docs/sdk/ios/"><img src="/files/j8u2qR3Khy6tzt1GjarA" alt="logo-apple.png" data-size="line"></a> <strong>IOS (Swift)</strong></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="https://web3auth.io/docs/sdk/android/"><img src="/files/b68ORVert1rro3I4tZrD" alt="logo-android.png" data-size="line"></a><strong>Android (Kotlin)</strong></td><td></td><td></td></tr></tbody></table>

#### Desktop

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="/files/6GNz2OJqA2Vdywcyq9hr" alt="logo-nodejs.png" data-size="line"></a> <strong>Node.js</strong></td><td></td><td></td></tr><tr><td><img src="/files/Q0LRmN9ZzpYKn283d1YZ" alt="" data-size="line"> <strong>GO</strong></td><td></td><td></td></tr><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="/files/Z8UODNnR7ts8NsSrSZtm" alt="logo-flutter.png" data-size="line"></a><strong>Flutter</strong></td><td></td><td></td></tr><tr><td><img src="/files/SbOjybVyU3Us1Jq9OdgK" alt="" data-size="line"> <strong>Python</strong></td><td></td><td></td></tr><tr><td><img src="/files/jw2Nkm0VoDn8dTVtFy8i" alt="" data-size="line"> <strong>Rust</strong></td><td></td><td></td></tr></tbody></table>


# Verification Modal SDKs

{% hint style="warning" %}
Our SDKs are not live yet. :eyes:[**Stay tuned**](https://discord.gg/3vnsN7zVpT) **to be the first trying them out!**
{% endhint %}

These SDKs give you full control over the interface used to authenticate or verify users' data through the data sources that you have configured. You can easily embed the Modal features into your website and customize the flow or the  components by calling its methods through our libraries. This customization is available for desktop and mobile environments, allowing you to create a consistent and seamless user experience across all platforms.

#### Mobile

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="/files/j8u2qR3Khy6tzt1GjarA" alt="logo-apple.png" data-size="line"></a> <strong>IOS (Swift)</strong></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="/files/b68ORVert1rro3I4tZrD" alt="logo-android.png" data-size="line"></a><strong>Android (Kotlin)</strong></td><td></td><td></td></tr></tbody></table>

#### Desktop

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><img src="/files/BnkflBYHaToCdpHJCNXZ" alt="" data-size="line"> <strong>Vue.js</strong></td><td></td><td></td></tr><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="/files/SCIbHbNossyJ6eAAOQgN" alt="logo-react.png" data-size="line"> </a>R<strong>eact native</strong></td><td></td><td></td></tr><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="https://web3auth.io/docs/contents/logo-js.png" alt="logo-js.png" data-size="line"></a><strong>Web</strong></td><td></td><td></td></tr><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="/files/7fh00RQomxjrLJB4vCly" alt="logo-flutter.png" data-size="line"></a><strong>Flutter</strong></td><td></td><td></td></tr><tr><td><img src="/files/K5QddumMnzMAecbrQ3Dr" alt="" data-size="line"> <strong>Angular</strong></td><td></td><td></td></tr></tbody></table>


# WalliD wallet connector SDKs

{% hint style="warning" %}
Our SDKs are not live yet. :eyes:[**Stay tuned**](https://discord.gg/3vnsN7zVpT) **to be the first trying them out!**
{% endhint %}

### WalliD wallet Connector SDKs

These Libraries allow you to quickly add WalliD wallet to your authentication flows and to connect users' wallets and execute specific methods available on WalliD wallet only.

#### Mobile

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="/files/2UtcvaUOOthFKDkcm9Rf" alt="logo-apple.png" data-size="line"></a> <strong>IOS (Swift)</strong></td><td></td><td><a href="/pages/RyvzdM5fRtd6040ZEgvL">/pages/RyvzdM5fRtd6040ZEgvL</a></td></tr><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="/files/UNaa3l2x8AUbn1TN7ezO" alt="logo-android.png" data-size="line"></a><strong>Android (Kotlin)</strong></td><td></td><td></td></tr></tbody></table>

#### Desktop

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="https://web3auth.io/docs/contents/logo-js.png" alt="logo-js.png" data-size="line"></a><strong>Web</strong></td><td></td><td></td></tr><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="/files/kyngelDHZ21bfTc9cXJK" alt="logo-flutter.png" data-size="line"></a><strong>Flutter</strong></td><td></td><td></td></tr><tr><td><img src="/files/BnkflBYHaToCdpHJCNXZ" alt="" data-size="line"> <strong>Vue.js</strong></td><td></td><td></td></tr><tr><td><a href="/pages/MTFZMO3VeGuOO9XEMa6H"><img src="/files/nYLM5EkvunxmKGp0up3Z" alt="logo-react.png" data-size="line"> </a>R<strong>eact native</strong></td><td></td><td></td></tr><tr><td><img src="/files/K5QddumMnzMAecbrQ3Dr" alt="" data-size="line"> <strong>Angular</strong></td><td></td><td></td></tr></tbody></table>


# Overview

### **Our Mission**

At **WalliD**, our mission is to deliver **self-sovereign and digital ID 2.0 solutions** that are accessible, usable, and secure for everyone. We believe in empowering organizations to embrace decentralized identity (DID), verifiable credentials, and all other W3C and eIDAS-compliant protocols without the friction and complexity typically associated with these technologies. Our goal is to abstract the intricacies of blockchain, cryptography, and digital wallets, allowing organizations to seamlessly issue, verify, and manage digital identities while maintaining full control over their data. With WalliD, Digital ID becomes an easy-to-use, scalable solution for all.

***

### **Current Problems with the Digital ID Landscape**

Despite the regulatory frameworks such as **eIDAS 2** in Europe, **ISO** standards for digital driving licenses, **PDA-1** for social security, and the **W3C** verifiable credential standards being well-established in regions like Europe, the US, and Canada, **adoption remains low**. The global potential of Digital ID technologies is immense—ensuring data authenticity, reducing fraud costs, and strengthening existing certification authorities with improved cryptography and distribution.

However, the challenge lies in the fact that these solutions have been designed far removed from the actual organizations and users. They require organizations to manage complex processes such as handling blockchain transactions, launching smart contracts, and managing wallet keys. For users, adoption is hindered by the requirement of managing wallets and navigating unfamiliar tools, creating significant friction.

At WalliD, we remove these barriers by **abstracting the complexity** of decentralized identity and verifiable credentials. Our platform operates as a layer on top of established DID protocols and digital identity standards, managing wallets, keys, and transactions on behalf of organizations and users. This allows organizations to issue compliant and verifiable digital certificates without needing in-depth technical knowledge, while retaining full control and ownership over their data.

***

### **Introducing CertiShop**

**CertiShop** is the platform that powers WalliD’s mission of frictionless digital ID adoption. CertiShop provides organizations with both a [**webApp**](/config-dashboard/getting-started)[ ](/certishop-webapp/getting-started)and an [**SDK**](/certishop-sdk/intro) to design, issue, and verify digital certificates effortlessly. Whether through the no-code web interface or through deep API integration via the SDK, CertiShop makes it simple for any organization to leverage the power of decentralized identity technologies while maintaining full regulatory compliance and user control.

### **What Can I do with CertiShop?**

* Create a Certificate Authority for my organization
* Design Certificate Templates
* Issue Certificates manually or in Bulk
* Verify Certificates online or offline

### **Why CertiShop?**

* Simplicity -  no coding experience&#x20;
* Flexibility -  choose existing protocols or use your own servers as source of truth
* Privacy and Security - Use WalliD cloud our your own infrastructure to store certificate data and act as source of truth&#x20;

### **Who is CertiShop for?**

* **Admins and Designers**  - our WebApp allows you to benefit from all WalliD features in a no-code platform
* **Developers -** Our SDKs enable a seamless intgration of WalliD backend features in our own infrastructure.


# Getting Started

*This is a step by step guide to help you get started with using WalliD config dashboard.*

### Signup with your favourite account

To get started, [signup](https://demo.eidcmp.wallid.io/SignIn) or login with your email, favourite social account or web3 wallet on WalliD CertiShop Dashboard.

<figure><img src="/files/R72G1IkzUCx12z00Z0bq" alt=""><figcaption></figcaption></figure>

### Home[​](https://web3auth.io/docs/developer-dashboard/#home) <a href="#home" id="home"></a>

After successfully logging in you will have access to the dashboard home page.

<figure><img src="/files/XaheDs3uSCumCMU0XM8J" alt=""><figcaption></figcaption></figure>

This is what you can access from this screen:

#### Dashboard[​](https://web3auth.io/docs/developer-dashboard/#overview) <a href="#overview" id="overview"></a>

* All Active Certificates
* &#x20;[Create New  Template](/certishop-webapp/create-a-certificate-template)

#### Metrics[​](https://web3auth.io/docs/developer-dashboard/#quick-start) <a href="#quick-start" id="quick-start"></a>

* Certificates Created
* [Certificates Issued](/certishop-webapp/issue-certificates)

#### Header: <a href="#bottomost-interactive-web3auth-logo" id="bottomost-interactive-web3auth-logo"></a>

* Dashboard
* [Issuer Profile](/certishop-webapp/manage-organization)
* Sign Out


# Manage Organization

This section is available in the <mark style="color:blue;">**`Issuer Profile`**</mark> button on the header section of the platform. It allows admins to see generic information regarding their organization as well as to manage users and roles, [certificate templates](/certishop-webapp/create-a-certificate-template) and API keys.

### Create an Organization

Once you sign up on WalliD CertiShop for the first time, you'll be required to provide a name for your Organization. After completing this step, the platform will create a [Certificate Authority](broken://pages/Gcq00HbJqKZIltsEwQsp) with the same name and a unique identifier that will be used as source of truth and to sign all the certificates that will be issued.

### Check Organization info

Organization name and photo can be edited in the <mark style="color:blue;">**`pencil icon`**</mark> on the to right end of the dashboard. Users can also confirm their organization DID address on the blockchain and their current usage measure by number of certificates issued and templates created.

<figure><img src="/files/DX9Lj402oioBAGMBnA6z" alt=""><figcaption></figcaption></figure>

### Manage members and roles

To add a new user to your organization click on <mark style="color:blue;">**`+`**</mark> button on `users` tab Manage their roles according to your organization needs

<table><thead><tr><th width="323">Permissions/Roles</th><th width="148" align="center">Owner</th><th width="140" align="center">Admin</th><th align="center">Member</th></tr></thead><tbody><tr><td>See config settings </td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td></tr><tr><td>Leave workspace</td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td></tr><tr><td>Create  and Delete  Templates</td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"></td></tr><tr><td>Invite team members to workspace</td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"></td></tr><tr><td>Edit configs</td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"></td></tr><tr><td>Delete configs</td><td align="center"><strong>x</strong></td><td align="center"><strong>x</strong></td><td align="center"></td></tr><tr><td>Remove team members</td><td align="center"><strong>x</strong></td><td align="center"></td><td align="center"></td></tr><tr><td>Change team members' roles</td><td align="center"><strong>x</strong></td><td align="center"></td><td align="center"></td></tr><tr><td>Delete Organization</td><td align="center"><strong>x</strong></td><td align="center"></td><td align="center"></td></tr></tbody></table>

### API Keys

You can also create, delete and manage API keys that allow your organization members to use CertiShop via [API requests](/certishop-sdk/intro).

<figure><img src="/files/wrDrWhq8usDcsWJS0E16" alt=""><figcaption></figcaption></figure>


# Create a Certificate Template

### Choose a Preset Design or Draw your certificate from scratch

After selecting <mark style="color:blue;">**`New Certificate`**</mark> in the main dashboard you'll be able to choose from one of the options below:

* [**Preset Designs**](#preset-designs): Select a format with pre-filled attributes and placeholders.
* [**Create a Design**](#create-a-design): Customize your certificate's attributes and visuals entirely from scratch.

<figure><img src="/files/vldJiXoHOYKjmTrqvsNb" alt=""><figcaption></figcaption></figure>

### Preset Designs

If you select a **Preset Design**, you'll be able to choose from predefined templates that include common fields and design elements. This option allows for faster setup if you’re issuing standard certificates.

<figure><img src="/files/vvTfPC3CkTkt3oT9G7bw" alt=""><figcaption></figcaption></figure>

### Create a Design

Selecting this option opens the **Template Editor**, where you have full control to customize both the look and the fields of your certificate. The available tools allow you to modify every aspect of the template, including layouts, backgrounds, attributes, and more.

<figure><img src="/files/BvSNSm0NdVhsC6fHbt5s" alt=""><figcaption></figcaption></figure>

In the Template Editor, you can use the following tools:

#### **Layouts**

Choose the base format of your certificate:

* Horizontal A4 page
* Vertical A4 page
* Circular badge

***

#### **Background**

This option allows you to import an image to use as the background of your certificate. The image will cover 100% of the document size, with all other fields layered on top.

***

#### **Attributes**

These are the text fields in your certificate and are divided into [**Text Attributes**](broken://pages/A64XwdwCHsgOSTYuozQ5) and [**Placeholders**](broken://pages/A64XwdwCHsgOSTYuozQ5):

* **Text Attributes**: These are static fields that appear on every certificate issued under this template. Typically, they represent the issuing entity's name and the titles of the dynamic fields (e.g., "Name").
* **Placeholders**: These are dynamic fields that represent the unique information for each recipient (e.g., \[NAME] for "John Doe"). Placeholders must be typed in **uppercase** and enclosed in **brackets** (e.g., \[PLACEHOLDER]). These fields will be filled in when the certificates are issued, so name them clearly to identify their purpose (e.g., \[NAME] for the recipient's name).

***

#### **Images**

You can upload **.jpeg** or **.png** files, such as logos or other visual elements. These can be resized and positioned anywhere on the certificate.

***

#### **Signatures**

These are either text fields with customizable fonts or uploaded images of signatures from the certificate issuer. You can place the signature anywhere on the certificate.

***

#### **Conditions**

Conditions allow you to set rules for automatic certificate expiration or limited validations. For example, a certificate can expire on a specific date or after a certain number of verifications. Once the conditions are met, the certificate will be automatically revoked.

### Confirm Template and check it in the Dashboard

Once you click <mark style="color:blue;">**`Create`**</mark> to confirm the template’s visuals and attributes, it will be saved and visible in your main Dashboard under the `All Active Certificates` section.

<figure><img src="/files/4vth756Lqt1jwD0tt4BT" alt=""><figcaption></figcaption></figure>

Click on the box with the template’s name to enter the specific area for that certificate template. From there, you can:

* [**Issue certificates**](/certishop-webapp/issue-certificates) for that template.
* **Check the status** of each certificate that has been issued.
* **Manage active certificates**, including revoking or updating them as needed.


# Issue Certificates

Once you're inside a specific **Certificate Dashboard**, you can view the general information related to that certificate. From this dashboard, you can easily manage and issue certificates with the following options:

<figure><img src="/files/yGzq9x1iKnKdUqDhXGWS" alt=""><figcaption></figcaption></figure>

* **Issue Certificates**: Begin issuing new certificates using the selected template.
* **View Issued Certificates**: A table displays the status of all certificates issued, providing an overview of their current state (e.g., active, revoked).
* **Detailed Information**: View detailed information for each individual certificate, including who it was issued to, when it was issued, and its current status.
* **Revoke Certificates**: Revoke individual certificates as needed.

### Issue a new Certificate

To issue a new certificate, click <mark style="color:blue;">**`+Issue Certificates`**</mark>, where you’ll have two options:

<figure><img src="/files/alTyJaf6TxFd39gS4yYk" alt=""><figcaption></figcaption></figure>

* **Issue Certificates Manually**: Manually fill in the unique attestations (e.g., recipient name, credentials) and send the certificate to a single user’s email address.
* **Issue Certificates in Bulk**: Upload a file (e.g., CSV) containing the attestations for multiple recipients. CertiShop will automatically issue the certificates to all the listed users, sending them to their respective email addresses.

### Issue Certificates Manually

Choosing this option will take you to a screen where your certificate template is displayed, and all the **Placeholders** you defined in the template editor will appear as input fields. These input boxes are where you fill in the unique data specific to the recipient of the certificate.&#x20;

<figure><img src="/files/JQIQ3gZekK7PEV3z7Sws" alt=""><figcaption></figcaption></figure>

Once all placeholders are filled, click the <mark style="color:blue;">**`Next`**</mark> button and provide the recipient’s email address. An automatic email containing the certificate will then be sent to the recipient.

### Issue Certificates in Bulk

In this section, you can upload a file (.csv, .xls, or .json) to automatically fill in the dynamic placeholders with the unique data for each recipient.

<figure><img src="/files/ECu29LRLXF7oTojcXI4d" alt=""><figcaption></figcaption></figure>

To get started, click the <mark style="color:blue;">**`Download Template File`**</mark> button. This will provide you with a file that contains an empty table with the PLACEHOLDERS defined in your template. You can then fill each row with the data for individual recipients.

Once the file is filled in, upload it and click the <mark style="color:blue;">**`Next`**</mark> button to automatically issue and send the certificates to all the recipients listed in the file.


# Receiving Certificates


# Verifying Certificates


# Intro

You can interact with the WlliD-CertiShop API through HTTP requests via our official libraries.

To install the official Node.js library, run the following command in your Node.js project directory:

```sh
npm install wallid-certishop
```

To install the official Python library, run the following command in your python project directory:

```sh
pip install wallid-certishop
```


# Authentication

Authentication is a crucial step to ensure secure and authorized access to the WalliD CertiShop API. Whether you are an individual user or part of an organization, this guide will walk you through the process of obtaining and using API keys for authentication. You can specify an organization to manage API requests and quotas effectively.

### Individual Authentication <a href="#individual-authentication" id="individual-authentication"></a>

For individual users, obtaining and using an API key is a straightforward process.

**Step 1: Obtain API Key**

1. Create an account with [WalliD.  ](https://demo.eidcmp.wallid.io/Signup)
2. SignUp  to the [dashboard](/certishop-webapp/getting-started).
3. Access the `API Keys` section within the [`Issuer Profile`](/certishop-webapp/manage-organization) tab.
4. Generate a new [`API key`](/certishop-webapp/manage-organization#api-keys) specific to your project.

**Using API Key with WalliD-CertiShop API (Node.js):**

```javascript
const {CertiShop } = require(“wallid-certishop");
const configuration = {apiKey: "YOUR_API_KEY"};

const CertiShopWalliD = new CertiShop(configuration);
```

### Organization Authentication <a href="#organization-authentication" id="organization-authentication"></a>

If you are part of an organization with multiple users, you can manage API requests and quotas at the organization level.

**Step 1: Obtain Organization ID**

1. Login to the dashboard.
2. within the `Issuer Profile` tab.
3. Select `Organization`.
4. Note down the `Organization` ID for future reference.

**Step 2: Set Up API Keys**

**Using API Key with WalliD-CertiShop API (Node.js):**

```javascript
const {CertiShop } = require(“wallid-certishop");
const configuration = {apiKey: "YOUR_API_KEY"};

const CertiShopWalliD = new CertiShop(configuration);
```

### Specifying Organization for API Requests <a href="#specifying-organization-for-api-requests" id="specifying-organization-for-api-requests"></a>

For users who belong to multiple organizations, you can pass a header to specify the organization used for an API request. This is helpful to ensure accurate quota allocation.

**Using cURL:**

```bash
curl https://certishop.wallid.com/api \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "WalliD-Organization: your-organization-id"
```

By following these steps, you can securely authenticate your and manage API requests effectively, whether you are an individual user or part of an organization.


# Making Requests

## Create a Certificate Authority

```javascript
const payload = {
    wa : "wallet_address", 
    admin_email : "admin_email" 
}

createCA(payload)
  .then(response => console.log('CA Created:', response))
  .catch(error => console.error('Error creating CA:', error));
```

**Payload elements**

| Name          | Type   | Description                                   |
| ------------- | ------ | --------------------------------------------- |
| `wa`          | string | wallet address                                |
| `admin_email` | string | registered email address of the account admin |

## Create Certificate Templates

```javascript
const payload = {
  cid: 'cid_value', 
  name: 'template_name',
  waAdmin: 'waAdmin_value', 
  frontendProps: {
    components: [
      {
        id: 'component_id'
        ...
        type: 'text',
      }
    ],
    currentLayout: 'current_layout'
  }
}

createTemplate(payload)
  .then(response => console.log('Template Created:', response))
  .catch(error => console.error('Error creating template:', error));
```

**Payload Elements**

| Name            | Type   | Description                                                                                                         |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------------- |
| `cid`           | string | CA identifier                                                                                                       |
| `name`          | string | Name of the Template                                                                                                |
| `wa`            | string | CA wallet address                                                                                                   |
| `frontendProps` | object | frontend elements and attributes of the certificate schema. Contains `components` object and `current_layout` array |
| `components`    | object | contains all the visual and atribute elements of the certificate                                                    |
| `CurrentLayout` | string | type of certificate visual format (card, badge, vertical A4, horizontal H4)                                         |

**Component Object Elements**

| Name            | Type                     | Description |
| --------------- | ------------------------ | ----------- |
| `id`            | string                   |             |
| `type`          | string                   |             |
| `inputType`     | string                   |             |
| `content`       | string                   |             |
| `styles`        | object                   |             |
| `className`     | string                   |             |
| `placeholder`   | string                   |             |
| `src`           | string                   |             |
| `text`          | string                   |             |
| `name`          | string                   |             |
| `value`         | string                   |             |
| `isActive`      | boolean                  |             |
| `isDraggable`   | boolean                  |             |
| `x`             | number                   |             |
| `y`             | number                   |             |
| `baseText`      | (string \| undefined)\[] |             |
| `originalText`  | string                   |             |
| `maxCharacters` | string                   |             |
| `minCharacters` | string                   |             |
| `isMandatory`   | boolean                  |             |

**Styles Object Elements:**

<table><thead><tr><th width="249">Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>width</code></td><td>string</td><td></td></tr><tr><td><code>height</code></td><td>string</td><td></td></tr><tr><td><code>color</code></td><td>string</td><td></td></tr><tr><td><code>backgroundColor</code></td><td>string</td><td></td></tr><tr><td><code>fontSize</code></td><td>string | number</td><td></td></tr><tr><td><code>fontWeight</code></td><td>string</td><td></td></tr><tr><td><code>textAlign</code></td><td>string</td><td></td></tr><tr><td><code>fontFamily</code></td><td>string</td><td></td></tr><tr><td><code>isItalic</code></td><td>boolean</td><td></td></tr><tr><td><code>isBold</code></td><td>boolean</td><td></td></tr><tr><td><code>isUnderlined</code></td><td>boolean</td><td></td></tr><tr><td><code>letterSpacing</code></td><td>string</td><td></td></tr><tr><td><code>previousWidth</code></td><td>number</td><td></td></tr><tr><td><code>warp</code></td><td>number</td><td></td></tr><tr><td><code>cursor</code></td><td>string</td><td></td></tr></tbody></table>

## Issue Certificates

```javascript
const payload = {
  cid: 'cid_value', 
  tid: 'tid_value', 
  waAdmin: 'waAdmin_value', 
  data: [{ key: 'value' }], 
  email: 'user@domain.com', 
};
createCredentials(payload)
  .then(response => console.log('Credentials Created:', response))
  .catch(error => console.error('Error creating credentials:', error));
```

**Payload Elements**

| Name      | Type       | Description                                                                                       |
| --------- | ---------- | ------------------------------------------------------------------------------------------------- |
| `cid`     | string     | CA identifier                                                                                     |
| `tid`     | string     | Template identifier                                                                               |
| `waAdmin` | string     | CA wallet address                                                                                 |
| `data`    | dictionary | object with data to be stored in the credential (in the format of a list of "key": "value" pairs) |
| `email`   | string     | recipient person email address                                                                    |

## Verify Certificates

```javascript
const payload = {
  tid: 'tid_value', 
  id: 'id_value', 
  guid: 'guid_value', 
};

verifyCredentials(payload)
  .then(response => console.log('Verification URL:', response))
  .catch(error => console.error('Error verifying credentials:', error));
```

**Payload Body**

| Name   | Type   | Description                                                                         |
| ------ | ------ | ----------------------------------------------------------------------------------- |
| `id`   | string | Certificate identifier                                                              |
| `tid`  | string | Template identifier                                                                 |
| `guid` | string | a unique identifier for the verification session and is returned in the init method |


# Intro

The On-Demand architecture provides a secure and flexible way for clients to manage sensitive credential data within their own infrastructure.

#### Why On-Demand?

* **Data Privacy:** Ensures sensitive data remains under the client’s control.
* **Customization:** Allows clients to choose their preferred database and operational setup.
* **Security:** Communication is authenticated and encrypted using HTTPS and client-specific certificates.

#### Implementation Options

Clients can choose between:

1. **Webhooks:** Clients provide custom URLs for each operation (`create`, `import`, `revoke`, etc.). The SDK calls these URLs directly.
2. **Client-Gateway:** Use our pre-built Node.js-based gateway, which implements the required operations and integrates with the client’s infrastructure. This simplifies the process and requires minimal setup.


# Webhooks

## Webhooks

Webhooks allow clients to handle operations through custom endpoints hosted on their infrastructure. The SDK communicates directly with these endpoints.

#### Required Webhooks

Clients must provide URLs for the following operations:

| **Operation** | **HTTP Method** | **Description**                      |
| ------------- | --------------- | ------------------------------------ |
| `create`      | POST            | Create a new credential.             |
| `import`      | POST            | Import an existing credential.       |
| `revoke`      | POST            | Revoke an existing credential.       |
| `verify`      | POST            | Verify the validity of a credential. |

#### Example Webhook Payload

* **Request to `/create`:**

  ```json
  {
    "credential_id": "1234",
    "name": "example_credential",
    "type": "temporary",
    "expires_at": "2025-12-31T23:59:59Z"
  }
  ```


# Client-gateway

## Client-Gateway

The Client-Gateway is a pre-built Node.js service designed to simplify the On-Demand implementation. It acts as an intermediary between the SDK Client and the client's infrastructure, managing operations like credential creation, import, revoke, and verification.

### Prerequisites

1. **On-Demand Configuration:**
   * Access the dashboard of your account on our API platform.
   * Enable the "On-Demand" mode.
   * Configure the necessary webhook URLs or set the **Client-Gateway** mode.
   * Generate the following keys:
     * `API_KEY`: For secure communication between your infrastructure and our API.
     * `CLIENT_SECRET`: For internal authentication within your infrastructure.
2. **Install Docker:**
   * Ensure Docker is installed on the server where the Gateway will run.

### How to Get Started

1. **Clone or Download the Client-Gateway:**
   * Clone the repository or download the source code from GitHub:

     ```bash
     git clone https://github.com/your-repo/client-gateway.git
     cd client-gateway
     ```
2. **Or Pull the Pre-built Docker Image:**
   * Pull the official Docker image directly from our registry:

     ```bash
     docker pull your-registry/client-gateway:latest
     ```
3. **Run the Gateway with Docker:**
   * Configure the environment variables and start the container:

     ```bash
     docker run -d -p 8080:8080 \
       -e API_BASE_URL=https://api.example.com \
       -e API_KEY=your-api-key \
       -e CLIENT_SECRET=your-client-secret \
       your-registry/client-gateway:latest
     ```
4. **Test the Gateway:**
   * Once the container is running, test the endpoints:

     ```bash
     curl -X POST http://localhost:8080/create \
       -H "Authorization: Bearer your-client-secret" \
       -H "Content-Type: application/json" \
       -d '{"name": "test_credential", "type": "temporary"}'
     ```

### Available Endpoints

The Client-Gateway exposes the following endpoints:

| **Endpoint**  | **HTTP Method** | **Description**                      |
| ------------- | --------------- | ------------------------------------ |
| `/create`     | POST            | Create a new credential.             |
| `/importBulk` | POST            | Import an existing credential.       |
| `/revoke`     | POST            | Revoke an existing credential.       |
| `/verify`     | POST            | Verify the validity of a credential. |

The gateway will also communicate with the central API to log operations and ensure auditability.


# Datalayer

## Data Layer

The Data Layer is the only component you, as the client, must implement. This layer stores and manages credential data securely within your infrastructure. The Client-Gateway communicates with the Data Layer over HTTP.

### Responsibilities

Your implementation should support the following operations:

1. **Create:** Add a new credential to the database.
2. **Import:** Import an existing credential from external systems.
3. **Revoke:** Mark a credential as revoked.
4. **Verify:** Validate the status of a credential.

### Example Implementation

You can implement the Data Layer using any database technology. Below is an example using MongoDB.

#### Setting Up MongoDB

1. Install MongoDB on your infrastructure or use a managed service.
2. Create a `credentials` collection.

#### Example Code

Here is an example of a simple Node.js service for the Data Layer:

```javascript
const express = require('express');
const mongoose = require('mongoose');

const app = express();
app.use(express.json());

const CredentialSchema = new mongoose.Schema({
  credential_id: String,
  name: String,
  type: String,
  status: String,
  expires_at: Date,
});

const Credential = mongoose.model('Credential', CredentialSchema);

app.post('/create', async (req, res) => {
  const credential = new Credential(req.body);
  await credential.save();
  res.status(201).json({ success: true });
});

app.listen(5000, () => console.log('Data Layer service running on port 5000'));
```

Client should setup the datalayer URL on dashboard in order to gateway forward requests to the Data Layer for processing.


# Deployment

## Deployment

This guide outlines the step-by-step process to deploy the On-Demand architecture, including configuring the API dashboard, setting up the Client-Gateway, and integrating the Data Layer.

***

### Step-by-Step Guide

#### 1. Configure On-Demand in the API Dashboard

1. **Log In:**
   * Access the [API Dashboard](https://dashboard.example.com) and log in with your account.
2. **Enable On-Demand Mode:**
   * Navigate to the **On-Demand Settings** section.
   * Enable the On-Demand mode for your account.
3. **Choose the Integration Option:**
   * **Webhooks:**
     * Enter the URLs for each operation (`/create`, `/import`, `/revoke`, `/verify`).
   * **Client-Gateway:**
     * Select the Gateway option to use our pre-configured solution.
4. **Generate Security Keys:**
   * Click **Generate Keys** to create:
     * `API_KEY`: Used by the SDK Client and Gateway for authentication.
     * `CLIENT_SECRET`: Used for internal communication within the On-Demand system.
5. **Save Configuration:**
   * Save the On-Demand settings to activate the mode.

***

#### 2. Deploy the Client-Gateway

The Client-Gateway is a pre-built service that simplifies the management of credential operations. You can deploy it using a pre-built Docker image or by building it locally.

**Option 1: Use the Pre-built Docker Image**

1. **Pull the Docker Image:**

   ```bash
   docker run -d -p 8080:8080 \
     -e API_BASE_URL=https://api.example.com \
     -e API_KEY=your-api-key \
     -e CLIENT_SECRET=your-client-secret \
     your-registry/client-gateway:latest

   ```
2. **Run the Gateway:** Use the following command to start the Gateway:

   `docker run -d -p 8080:8080`\
   `-e API_BASE_URL=https://api.example.com`\
   `-e API_KEY=your-api-key`\
   `-e CLIENT_SECRET=your-client-secret`\
   `your-registry/client-gateway:latest`

**Option 2: Build the Gateway Locally**

1. **Clone the Repository:**

   ```
   git clone https://github.com/your-repo/client-gateway.git
   cd client-gateway

   ```
2. Built docker image

`git clone https://github.com/your-repo/client-gateway.git cd client-`git clone <https://github.com/your-repo/client-gateway.git> cd client-gateway

3. Run Gateway

docker run -d -p 8080:8080\
-e API\_BASE\_URL=<https://api.example.com\\>
-e API\_KEY=your-api-key\
-e CLIENT\_SECRET=your-client-secret\
client-gateway

#### 3. Set Up the Data Layer

The Data Layer stores and manages sensitive data. You need to implement this layer based on your infrastructure.

1. **Choose a Database Technology:**
   * Supported options include MongoDB, PostgreSQL, MySQL, or others.
2. **Implement the Required Endpoints:**
   * Create endpoints for operations such as `/create`, `/import`, `/revoke`, and `/verify`.
   * Refer to the Data Layer section for example implementations.
3. **Configure the Gateway:**
   * Update the Gateway configuration to point to your Data Layer endpoints

`const DATA_LAYER_URL = 'http://your-database-service';`

#### 4. Test the Deployment

1. **Test SDK Integration:**
   * Use the SDK Client to make test requests for each operation (`create`, `import`, `revoke`, `verify`).
   * Ensure the requests are routed to the Gateway or Webhooks based on your configuration.
2. **Verify API Logs:**
   * Log in to the API Dashboard and check the logs to confirm that operations are being recorded.
3. **Check the Data Layer:**
   * Verify that data is being stored and managed correctly in your database.


# Overview

CertiShop's backend architecture is built to simplify the complexities of creating a Certificate Authority (CA) issuing and verifying digital certificates while ensuring compliance with global standards like[ eIDAS](/glossary#eidas-electronic-identification-authentication-and-trust-services). At its core, the CertiShop backend abstracts the intricacies of [**Decentralized Identity** ](/glossary#did-protocol-decentralized-identifier-protocol)**(DID) protocols,** [**digital wallets**](/glossary#id-wallets), and **Verifiable Credentials (VC)**, providing organizations with a streamlined, frictionless experience.&#x20;

The architecture of WalliD CertiShop connects frontend components (webapp and SDK) to a robust backend API that integrates multiple VC protocols, wallet solutions, and databases.&#x20;

<figure><img src="/files/3Q3blOX7Kzw7BXgmVLue" alt=""><figcaption></figcaption></figure>

1. **Frontend Components:**<br>
   * **Webapp**: A no-code platform allowing users to:
     * Set up a Certificate Authority (CA).
     * Manage users and API keys.
     * Create certificate templates, schemas, and designs.
     * Issue certificates manually or in bulk.
     * Revoke and manage certificates.<br>
   * **SDK**: Libraries enabling developers to:
     * Interact with CertiShop APIs programmatically.
     * Create CAs, templates, and certificates.
     * Perform certificate issuance and verification.<br>
2. **API** The API serves as the central hub for:
   * Authentication of users.
   * Managing CAs and templates.
   * Issuing and verifying VCs.
   * Supporting multiple VC protocols (OID4VC, mDL, PDA-1).<br>
3. **Databases** store certificate's data and are queried by verification proccesses.&#x20;
   * **Cloud Database**: Default storage managed by WalliD.
   * **On-Premise Database**: Optional implementation for clients to store data privately.<br>
4. **Verification**
   * Verification occurs via a website (Accessed through a QR displayed on the certificate), hosted by WalliD or configured by the client. Offline verification is supported using electronic signatures embedded in PDFs, ensuring authenticity.


# Certificate Protocols

WalliD CertiShop’s backend supports multiple verifiable credential (VC) standards, allowing flexibility in credential schema setups and regulatory compliance.

In **CertiShop**, the process of defining certificate templates is both flexible and compliant with established standards. Issuers can freely design and customize their certificates using our [**template editor**](/certishop-webapp/create-a-certificate-template), which allows them to define both **fixed** and **dynamic attributes** for their digital certificates.

#### Supported Verifiable Credential Protocols

* OpenID for Verifiable Credentials (OID4VC).
* Mobile Driver’s License (mDL).
* Public Digital Asset 1 (PDA-1).<br>

{% hint style="info" %}
**Check How to Create Templates in our** [**API here**](/certishop-sdk/making-requests#create-certificate-templates)**!**
{% endhint %}

#### **How the Template System Works**

When an issuer creates a certificate template using the [WebApp](/certishop-webapp/getting-started) or [API,](/certishop-sdk/making-requests#create-certificate-templates) the backend stores this information in a structured **schema** that adheres to the [**Verifiable Credential**](/glossary#verifiable-credentials-vcs) **(VC) protocol** chosen by the issuer.. This ensures that all certificates issued from this template will be compliant with global standards for verifiable credentials, making them tamper-proof and cryptographically secure.

Here’s a breakdown of the template structure:

1. **Fixed Attributes**: These are predefined text fields that are static for every certificate issued from this template. Examples of fixed attributes include the certificate title, the organization name, and the date of issue.<br>
2. **Placeholders (Dynamic Attributes)**: These fields are dynamic and change for each recipient of the certificate. Known as **Attestations**, these placeholders are filled with specific information about each certified user when a certificate is issued. Examples include the recipient's name, their achievement, and unique certificate IDs.

#### **Storage and Linking in the Backend**

WalliD CertiShop ensures that the complete structure and fields defined in the **template editor** are securely stored in the database configured by the Issuer. This includes not only the **fixed** and **dynamic attributes** but also the **visual structure** of the certificate, such as images, logos, signatures, and other design elements.

Each certificate template is stored as part of the **Certificate Authority's (CA's) data**, allowing for consistent issuance of certificates based on the predefined template. The entire schema,is linked to the CA, ensuring that every certificate issued retains the same design and formatting.

When a certificate is issued, the **dynamic placeholders** (e.g., recipient's name, course details) are filled with the relevant user data, while the **fixed attributes** (e.g., organization name, date) and **visual elements** are preserved according to the template’s design. WalliD CertiShop reserves the appropriate space in the **visual representation** of the document for both fixed and dynamic fields, ensuring the certificate maintains its intended layout and aesthetic across all issuances. This allows for **seamless, scalable issuance**, where the integrity of the certificate's **visual identity** and **data attributes** are consistently maintained.

By storing both the **data schema** and **visual structure** together, WalliD CertiShop ensures that certificates issued by an organization not only remain **compliant** with verifiable credential standards but also retain a professional and branded appearance, helping to build trust and authenticity in the digital certificates.

#### **Example of a Template Schema**

Here’s an example of how a certificate template schema might look in the backend, following the **OpenID 4VC** format:

```json
jsonCopy code{
  "template_id": "cert_template_001",
  "issuer_id": "CA_12345",
  "schema": {
    "attributes": {
      "title": "Certificate of Achievement",
      "organization": "Example University",
      "date_of_issue": "2024-09-25"
    },
    "placeholders": {
      "recipient_name": "{RECIPIENT_NAME}",
      "course_name": "{RECIPIENT_COURSE}",
      "certificate_id": "{CERTIFICATE_ID}"
    }
  }
}
```

In this schema:

* **Fixed Attributes** include the title of the certificate, the name of the issuing organization, and the date of issue. These remain the same for all recipients.
* **Placeholders** are dynamic attributes, represented by double curly braces (`{}`). These placeholders will be replaced with the specific recipient’s data (such as their name and course) and a unique certificate ID when the certificate is issued.


# Wallets

Wallets are a key component to ensure the authenticity of both the issuing entities and the holders of certificates. They play a critical role in securing the cryptographic chain of trust, uniquely identifying entities, and associating credentials with their rightful owners.

### What Are Wallets Used For?

1. **Setting up a Certificate Authority (CA):**
   * The wallet address is used to generate a unique identifier for the CA.
   * This serves as the root of trust in the cryptographic chain for all certificates associated with the issuer.
2. **Issuing Certificates:**
   * Wallets are used to sign and associate certificates with the issuer’s identity, ensuring verifiability in the future.
3. **Storing Certificates:**
   * Certificates are linked to the user’s unique wallet address.
   * Users can claim their certificates to compatible wallets, ensuring their ownership and authenticity.

### Wallet Management

1. **Default Wallet Management**
   * WalliD CertiShop  backend manages wallets for CAs and users by default.
   * Access to wallets is secured through login credentials, ensuring privacy and security.<br>
2. **Custom Wallet Integration**
   * Issuers can use their own wallets to create CAs by registering with a valid wallet in the webapp or via API requests.
   * Users have the option to claim their VCs into their wallets after receiving the certificates via email.


# Databases

Databases are a crucial component of WalliD CertiShop, serving as the **source of truth** for all certificate data and ensuring robust verification capabilities. Whenever someone verifies a certificate—whether through a QR code, the embedded PDF, or a link—the system checks the original data stored in the database. This enables retrieval of the **certificate's current state** (e.g., valid, revoked, or expired) or verification of the cryptographic proof through the chosen protocol.

#### Key Features of the Database:

1. **Certificate Data Storage**
   * All certificate data is securely stored in the database.
   * Provides easy access for verification queries.
2. **Verification Backbone**
   * Real-time verification connects to the database to ensure accuracy.
   * Cross-checks the current state of the certificate (valid, revoked, or expired).

### Database options

{% hint style="info" %}
**Check how you can use your own databases** [**here!**](/certishop-on-prem/intro)
{% endhint %}

WalliD CertiShop provides flexible storage options for certificate data with a cloud based solution managed by WalliD and an On Prem solution for issuers with high levels of privacy needs.

### **1. Cloud-Based Storage**

Managed by WalliD, ensuring high availability and security. Used by default.

### **2. On-Premises Storage**

Clients can host and manage their own databases for greater control.

<figure><img src="/files/iKBwvHfOfRRQ8OpizcUZ" alt=""><figcaption></figcaption></figure>

The On Prem architecture consists of the following components:

1. **CertiShop SDK:** Integrated into the client's website, it interacts with the Gateway or Webhooks.
2. **CertiShop API:** Centralized service that manages authentication and monitors all operations.
3. **Client-Gateway:** A pre-built service deployed in the client’s infrastructure to handle credential operations.
4. **Client's Data Layer:** The client's custom implementation for storing and managing credential data.

#### Communication Flow

1. CertiShop makes an initial call to the API to retrieve the On Prem configuration.
2. Based on the configuration:
   * The SDK calls the **webhooks** provided by the client.
   * OR interacts with the **Client-Gateway**, which handles operations locally.
3. Once an operation is complete, the Gateway or Webhooks notify the API for logging purposes.

#### Diagrams

* **Solution Overview:** Show SDK → API → Gateway → Client DB.
* **Communication Sequence:** Include an interaction diagram for both Webhook and Gateway flows.


# Verification

{% hint style="info" %}
**Check How to Verify Certificates in our** [**API here**](/certishop-sdk/making-requests#verify-certificates)**!**
{% endhint %}

Verification is a critical aspect of WalliD CertiShop, ensuring that issued certificates are authentic, tamper-proof, and verifiable in both online and offline scenarios. The system leverages the cryptographic foundations of VC protocols to validate the integrity and authenticity of credentials.

#### Cryptography Behind Verification

At the core of verification lies the cryptographic process enabled by VC protocols. When a certificate is issued:

1. The **Certificate Authority's (CA) wallet** digitally signs the certificate using a private key, creating a cryptographic proof linked to the issuer's identity.
2. The cryptographic signature ensures that any tampering with the certificate invalidates the proof, guaranteeing its integrity.
3. This signed certificate becomes part of the trust chain, linking the issuer, the credential, and the protocol used for validation.

#### How CertiShop Enables Verification

CertiShop ensures seamless verification through three distinct mechanisms:

1. **Unique Verification URL**
   * For every issued certificate, a unique URL is generated.
   * The URL is connected to the **source of truth**, either the client’s database or the VC protocol used during issuance.
   * When accessed, the system retrieves the original certificate data, verifies its cryptographic proof, and checks its current status (e.g., valid, revoked, or expired).
   * This URL is sent to the certificate recipient via email.
2. **QR Code Integration**
   * A QR code linking to the unique verification URL is generated.
   * The QR code is embedded into the PDF certificate, allowing easy access to the verification process with a simple scan.
   * This ensures that the verification process is intuitive and user-friendly.
3. **PDF with Embedded Cryptographic Proof**
   * Certificates are issued as visually appealing PDFs containing an **electronic signature** with the cryptographic proof of authenticity.
   * The electronic signature ensures that the document can be verified offline. Any alteration to the PDF would invalidate the signature, making tampering easily detectable.
   * This mechanism provides an additional layer of trust for scenarios where online verification is not possible.

#### Real-Time and Offline Verification

1. **Online Verification**
   * Real-time verification occurs when the recipient or verifier uses the URL or QR code.
   * The system queries either the client’s database or the VC protocol backend to validate the certificate and return its status.
   * This method ensures up-to-date and accurate results.
2. **Offline Verification**
   * The embedded cryptographic signature in the PDF ensures that the document can be verified even without internet access.
   * Verification tools or software can validate the integrity of the signature, confirming the document’s authenticity.

***

#### Diagrams

1. **Verification Flow**
   * Show the process of scanning the QR code or accessing the URL → Querying the database or protocol → Returning verification results.
2. **Offline Verification Mechanism**
   * Illustrate how the embedded cryptographic signature is checked against the document for tampering.


# API Reference

## Create a Certificate Authority

Creates a Certificate Authority (CA) identifier (DID) and a new wallet address.

<mark style="color:green;">`POST`</mark> '<https://demo.eidcmp.wallid.io/api/v1/ca/&#x20>;

**Headers**

| Name          | Value              |
| ------------- | ------------------ |
| Content-Type  | `application/json` |
| Authorization | `Bearer <token>`   |

**Request Body**

| Name          | Type   | Description                                   |
| ------------- | ------ | --------------------------------------------- |
| `wa`          | string | wallet address                                |
| `admin_email` | string | registered email address of the account admin |

**Example Request**

```javascript
{
    wa : "0x12b...bcD, 
    admin_email : "alice@example.com" 
}
```

**Example Response**

```javascript
{
  "message": {
      "name": "CA Name",
      "admin_email": "test@test.io",
      "creatorWA": "0x4289128eb6e3b298140845364fbec0f7344ffe8b",
      "contract_address": "0x99999999",
      "admin": [
          "0x4289128eb6e3b298140845364fbec0f7344ffe8b"
      ],
      "issuerKey": {
          "type": "jwk",
          "jwk": {
              "kty": "OKP",
              "d": "Ho_2n9eidSDnKwKrw3pfxl_QYvBf-iLcIysR3ttsDlE",
              "crv": "Ed25519",
              "kid": "nDVD3o4MUzwPddZim_AQIkybSo3gc9pPsS06Ff3A0xU",
              "x": "slQ0XLMtyvETG9GDZz_89ytjspNRsn7fNBcWvtWRsS8"
          }
      },
      "issuerDid": "did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoibkRWRDNvNE1VendQZGRaaW1fQVFJa3liU28zZ2M5cFBzUzA2RmYzQTB4VSIsIngiOiJzbFEwWExNdHl2RVRHOUdEWnpfODl5dGpzcE5Sc243Zk5CY1d2dFdSc1M4In0",
      "_id": "670fb05a77d3b449d9e3b69f",
      "code": "0x172fde1d5fd586411af4939b776693e93235b1791d17a5d9d935c3886183b16d",
      "createdAt": "2024-10-16T12:23:54.517Z",
      "updatedAt": "2024-10-16T12:23:54.517Z",
      "cid": "670fb05a77d3b449d9e3b69f",
      "id": "670fb05a77d3b449d9e3b69f"
  }
}
```

## Create a Template

Creates a Certificate template as achema with fixed attributes and corresponding dynamic attestations.

<mark style="color:green;">`POST`</mark> '<https://demo.eidcmp.wallid.io/api/v1/template/&#x20>;

**Headers**

| Name          | Value              |
| ------------- | ------------------ |
| Content-Type  | `application/json` |
| Authorization | `Bearer <token>`   |

**Request Body**

| Name            | Type   | Description                                                                                                         |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------------- |
| `cid`           | string | CA identifier                                                                                                       |
| `name`          | string | Name of the Template                                                                                                |
| `wa`            | string | CA wallet address                                                                                                   |
| `frontendProps` | object | frontend elements and attributes of the certificate schema. Contains `components` object and `current_layout` array |
| `components`    | object | contains all the visual and atribute elements of the certificate                                                    |
| `CurrentLayout` | string | type of certificate visual format (card, badge, vertical A4, horizontal H4)                                         |

**Example Request**

```javascript
{
  cid: 'cid_value', 
  name: 'template_name',
  waAdmin: 'waAdmin_value', 
  frontendProps: {
    components: [
      {
        id: 'component_id'
        type: string
        inputType: string
        content: string
        styles: [TemplateElementStyles]
        className: string
        placeholder: string
        src: string
        text: string
        name: string
        value: string
        isActive: boolean
        isDraggable: boolean
        isEditable: boolean
        x: number
        y: number
        baseText: (string | undefined)[]
        originalText: string
        maxCharacters: string
        minCharacters: string
        isMandatory: boolean
      }
    ],
    currentLayout: 'horizontal_h4'
  }
}
```

**Component Object elements**

| Name            | Type                     | Description |
| --------------- | ------------------------ | ----------- |
| `id`            | string                   |             |
| `type`          | string                   |             |
| `inputType`     | string                   |             |
| `content`       | string                   |             |
| `styles`        | object                   |             |
| `className`     | string                   |             |
| `placeholder`   | string                   |             |
| `src`           | string                   |             |
| `text`          | string                   |             |
| `name`          | string                   |             |
| `value`         | string                   |             |
| `isActive`      | boolean                  |             |
| `isDraggable`   | boolean                  |             |
| `x`             | number                   |             |
| `y`             | number                   |             |
| `baseText`      | (string \| undefined)\[] |             |
| `originalText`  | string                   |             |
| `maxCharacters` | string                   |             |
| `minCharacters` | string                   |             |
| `isMandatory`   | boolean                  |             |

**Styles object elements:**

<table><thead><tr><th width="249">Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>width</code></td><td>string</td><td></td></tr><tr><td><code>height</code></td><td>string</td><td></td></tr><tr><td><code>color</code></td><td>string</td><td></td></tr><tr><td><code>backgroundColor</code></td><td>string</td><td></td></tr><tr><td><code>fontSize</code></td><td>string | number</td><td></td></tr><tr><td><code>fontWeight</code></td><td>string</td><td></td></tr><tr><td><code>textAlign</code></td><td>string</td><td></td></tr><tr><td><code>fontFamily</code></td><td>string</td><td></td></tr><tr><td><code>isItalic</code></td><td>boolean</td><td></td></tr><tr><td><code>isBold</code></td><td>boolean</td><td></td></tr><tr><td><code>isUnderlined</code></td><td>boolean</td><td></td></tr><tr><td><code>letterSpacing</code></td><td>string</td><td></td></tr><tr><td><code>previousWidth</code></td><td>number</td><td></td></tr><tr><td><code>warp</code></td><td>number</td><td></td></tr><tr><td><code>cursor</code></td><td>string</td><td></td></tr></tbody></table>

**Example Response**

```javascript
{
    "cid": "66fd767cbd536ca460f33be4",
    "name": "Card",
    "creatorWa": "0x4289128eb6e3b298140845364fbec0f7344ffe8b",
    "frontendProps": {
        "name": "Card",
        "repeatedAttributes": false,
        "currentLayout": "Card",
        "design": "Card",
    },
    "lang": "en",
    "template_chain": {
        "sig": []
    },
    "status": "active",
    "admin": [
        "0x4289128eb6e3b298140845364fbec0f7344ffe8b"
    ],
    "tid": "670fb92e77d3b449d9e3b6fe"
}
```

## Other Template Related Requests

#### Get Template

Returns the certificate template json file

<mark style="color:orange;">`GET`</mark> '<https://demo.eidcmp.wallid.io/api/v1/template/:tid>

#### Get Template File

Returns a the certificate template file in the specified file format (eg. .csv or .xls)

<mark style="color:orange;">`GET`</mark> '<https://demo.eidcmp.wallid.io/api/v1/template/:tid/download/:fileFormat>

#### Delete Template

Deletes Template from the API

<mark style="color:red;">`DELETE`</mark> '<https://demo.eidcmp.wallid.io/api/v1/template/:tid>

## Issue Certificates

Issues new certificate to and sends it to the a recipient email address.

<mark style="color:green;">`POST`</mark> '<https://demo.eidcmp.wallid.io/api/v1/credential/create&#x20>;

**Headers**

| Name          | Value              |
| ------------- | ------------------ |
| Content-Type  | `application/json` |
| Authorization | `Bearer <token>`   |

**Request Body**

| Name      | Type       | Description                                                                                       |
| --------- | ---------- | ------------------------------------------------------------------------------------------------- |
| `cid`     | string     | CA identifier                                                                                     |
| `tid`     | string     | Template identifier                                                                               |
| `waAdmin` | string     | CA wallet address                                                                                 |
| `data`    | dictionary | object with data to be stored in the credential (in the format of a list of "key": "value" pairs) |
| `email`   | string     | recipient person email address                                                                    |

**Example Request**

```javascript
{
   "cid": "cid_value", // Certificate Authority (CA) id
   "tid": "tid_value", // Template id
   "waAdmin": "waAdmin_value", // wallet address of the admin creating the credential
   "data": [{ "key": "value" }], // data to be stored in the credential (in the format of a list of key value pairs)
   "email": "user@domain.com",
}
```

**Example Response**

```javascript
{
 "data": {
     "mgs": "The invite 670fb0d577d3b449d9e3b6a7 was sent!",
     "inviteId": "670fb0d577d3b449d9e3b6a7"
 },
 "credentialUrl": "openid-credential-offer://issuer.portal.walt.id/?credential_offer_uri=https%3A%2F%2Fissuer.portal.walt.id%2Fopenid4vc%2FcredentialOffer%3Fid%3Dc4d7f3f6-a8fb-4f89-8ca7-c2e9932dc3e4"
}
```

## Verify Certificates

Creates a verification URL to get and display certificate and verification data.

<mark style="color:green;">`POST`</mark> '<https://demo.eidcmp.wallid.io/api/v1/credential/create-verify-url>

**Headers**

| Name          | Value              |
| ------------- | ------------------ |
| Content-Type  | `application/json` |
| Authorization | `Bearer <token>`   |

**Request Body**

| Name   | Type   | Description                                                                         |
| ------ | ------ | ----------------------------------------------------------------------------------- |
| `id`   | string | Certificate identifier                                                              |
| `tid`  | string | Template identifier                                                                 |
| `guid` | string | a unique identifier for the verification session and is returned in the init method |

**Example Request**

```javascript
{
   "id": "id_value", 
   "tid": "tid_value", 
   "guid": "guid_value",
}
```

**Example Response**

```javascript
{
 "verificationUrl": "openid4vp://authorize?response_type=vp_token&client_id=https%3A%2F%2Fverifier.portal.walt.id%2Fopenid4vc%2Fverify&response_mode=direct_post&state=ClJIRQQu8FBr&presentation_definition_uri=https%3A%2F%2Fverifier.portal.walt.id%2Fopenid4vc%2Fpd%2FClJIRQQu8FBr&client_id_scheme=redirect_uri&client_metadata=%7B%22authorization_encrypted_response_alg%22%3A%22ECDH-ES%22%2C%22authorization_encrypted_response_enc%22%3A%22A256GCM%22%7D&nonce=f9ce4c7d-2804-4804-bc21-6e1fe199da60&response_uri=https%3A%2F%2Fverifier.portal.walt.id%2Fopenid4vc%2Fverify%2FClJIRQQu8FBr"
}
```

## Other Verification Related Requests

#### Redirect Verification Session

Triggers socket io event in the Verify page session

<mark style="color:orange;">`GET`</mark> '<https://demo.eidcmp.wallid.io/api/v1/credential/redirect/:sessionId>

#### Get Certificate data

Gets certificate data for the session in the OIDC format

<mark style="color:orange;">`GET`</mark> '<https://demo.eidcmp.wallid.io/api/v1/credential/data/:sessionId>




---

[Next Page](/llms-full.txt/1)

