# Verification

Endpoints for creating and processing verifications

## Create Verification

> Create a new verification link that can be shared with users.\
> \
> This endpoint allows you to create a verification link that users can use to verify their wallet ownership.\
> You can specify custom fields to collect additional information from users during the verification process.\
> \
> Rate limit: 10 requests per minute.\
> \
> \- \*\*id\*\*: A unique identifier for the verification\
> \- \*\*internal\_id\*\*: (optional in API, generated on dashboard): A unique identifier for the verification that is not shared with the user\
> \- \*\*service\_name\*\*: The name of your service\
> \- \*\*chain\*\*: Currently only "solana" is supported\
> \- \*\*webhook\*\*: URL to call when verification is complete (required if not a folder verification)\
> \- \*\*expiration\*\*: ISO format date when the verification link expires\
> \- \*\*secret\*\*: A secret key included in webhook calls for verification\
> \- \*\*redirect\_url\*\*: URL to redirect users after successful verification\
> \- \*\*one\_time\*\*: If true, the link can only be used once\
> \- \*\*folder\_id\*\*: ID of a folder to associate this verification with\
> \- \*\*custom\_fields\*\*: Array of custom fields to collect during verification. Each custom field should be an object with the following properties:\
> &#x20;   \- \*\*id\*\*: Unique identifier for the field (string)\
> &#x20;   \- \*\*type\*\*: Field type, one of: \
> &#x20;       \- "text" - Simple text input\
> &#x20;       \- "email" - Email address with validation\
> &#x20;       \- "url" - URL with validation\
> &#x20;       \- "twitter" - Twitter handle (accepts @username or twitter.com/username formats)\
> &#x20;       \- "telegram" - Telegram username (accepts @username or t.me/username formats)\
> &#x20;       \- "discord" - Discord username (accepts username format)\
> &#x20;       \- "number" - Numeric input with validation\
> &#x20;       \- "telephone" - Telephone number with validation\
> &#x20;       \- "date" - Date input with validation\
> &#x20;       \- "wallet" - Wallet address with validation\
> &#x20;   \- \*\*name\*\*: Display name for the field (string)\
> &#x20;   \- \*\*required\*\*: Whether the field is required (boolean)\
> &#x20;   \- \*\*placeholder\*\*: Optional placeholder text for the field (string)\
> &#x20;   \
> &#x20;   Example custom field:\
> &#x20;   \`\`\`json\
> &#x20;   {\
> &#x20;     "id": "field\_1234567890",\
> &#x20;     "type": "email",\
> &#x20;     "name": "Email Address",\
> &#x20;     "required": true,\
> &#x20;     "placeholder": "Enter your email address"\
> &#x20;   }\
> &#x20;   \`\`\`\
> \- \*\*token\_gate\*\*: Whether to enable token gating for this verification (boolean)\
> \- \*\*token\_address\*\*: The token address to check for token gating (string, required if token\_gate is true)\
> \- \*\*token\_amount\*\*: The minimum token amount required for successful verification (number, required if token\_gate is true)\
> \- \*\*is\_nft\*\*: Whether the token is an NFT (boolean, default: false)\
> \- \*\*force\_email\_verification\*\*: Whether to require email verification using OTP (boolean, default: false)\
> \- \*\*force\_telegram\_verification\*\*: Whether to require telegram verification using OTP (boolean, default: false)\
> \- \*\*force\_discord\_verification\*\*: Whether to require discord verification (boolean, default: false)\
> \- \*\*force\_twitter\_verification\*\*: Whether to require twitter verification using OAuth (boolean, default: false)\
> \- \*\*force\_telephone\_verification\*\*: Whether to require sms verification using OTP (boolean, default: false)

````json
{"openapi":"3.1.0","info":{"title":"Walver API","version":"1.1.42"},"tags":[{"name":"Verification","description":"Endpoints for creating and processing verifications"}],"paths":{"/new":{"post":{"tags":["Verification"],"summary":"Create Verification","description":"Create a new verification link that can be shared with users.\n\nThis endpoint allows you to create a verification link that users can use to verify their wallet ownership.\nYou can specify custom fields to collect additional information from users during the verification process.\n\nRate limit: 10 requests per minute.\n\n- **id**: A unique identifier for the verification\n- **internal_id**: (optional in API, generated on dashboard): A unique identifier for the verification that is not shared with the user\n- **service_name**: The name of your service\n- **chain**: Currently only \"solana\" is supported\n- **webhook**: URL to call when verification is complete (required if not a folder verification)\n- **expiration**: ISO format date when the verification link expires\n- **secret**: A secret key included in webhook calls for verification\n- **redirect_url**: URL to redirect users after successful verification\n- **one_time**: If true, the link can only be used once\n- **folder_id**: ID of a folder to associate this verification with\n- **custom_fields**: Array of custom fields to collect during verification. Each custom field should be an object with the following properties:\n    - **id**: Unique identifier for the field (string)\n    - **type**: Field type, one of: \n        - \"text\" - Simple text input\n        - \"email\" - Email address with validation\n        - \"url\" - URL with validation\n        - \"twitter\" - Twitter handle (accepts @username or twitter.com/username formats)\n        - \"telegram\" - Telegram username (accepts @username or t.me/username formats)\n        - \"discord\" - Discord username (accepts username format)\n        - \"number\" - Numeric input with validation\n        - \"telephone\" - Telephone number with validation\n        - \"date\" - Date input with validation\n        - \"wallet\" - Wallet address with validation\n    - **name**: Display name for the field (string)\n    - **required**: Whether the field is required (boolean)\n    - **placeholder**: Optional placeholder text for the field (string)\n    \n    Example custom field:\n    ```json\n    {\n      \"id\": \"field_1234567890\",\n      \"type\": \"email\",\n      \"name\": \"Email Address\",\n      \"required\": true,\n      \"placeholder\": \"Enter your email address\"\n    }\n    ```\n- **token_gate**: Whether to enable token gating for this verification (boolean)\n- **token_address**: The token address to check for token gating (string, required if token_gate is true)\n- **token_amount**: The minimum token amount required for successful verification (number, required if token_gate is true)\n- **is_nft**: Whether the token is an NFT (boolean, default: false)\n- **force_email_verification**: Whether to require email verification using OTP (boolean, default: false)\n- **force_telegram_verification**: Whether to require telegram verification using OTP (boolean, default: false)\n- **force_discord_verification**: Whether to require discord verification (boolean, default: false)\n- **force_twitter_verification**: Whether to require twitter verification using OAuth (boolean, default: false)\n- **force_telephone_verification**: Whether to require sms verification using OTP (boolean, default: false)","operationId":"create_verification_new_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"VerificationRequest":{"properties":{"id":{"type":"string","title":"Id"},"internal_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internal Id"},"service_name":{"type":"string","title":"Service Name"},"webhook":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook"},"chain":{"type":"string","title":"Chain"},"expiration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret"},"redirect_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Url"},"one_time":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"One Time","default":false},"folder_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder Id"},"custom_fields":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Custom Fields","default":[]},"token_gate":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Token Gate","default":false},"token_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Address"},"token_amount":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Token Amount"},"is_nft":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nft","default":false},"force_email_verification":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Force Email Verification","default":false},"force_telegram_verification":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Force Telegram Verification","default":false},"force_discord_verification":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Force Discord Verification","default":false},"force_twitter_verification":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Force Twitter Verification","default":false},"force_telephone_verification":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Force Telephone Verification","default":false}},"type":"object","required":["id","service_name","chain"],"title":"VerificationRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
````

## Verify Signature Api

> API endpoint to verify a wallet signature.\
> \
> This endpoint allows third-party services to verify wallet signatures\
> without having to implement the verification logic themselves.\
> \
> Rate limit: 60 requests per minute.\
> \
> \- \*\*wallet\_address\*\*: The wallet address that signed the message\
> \- \*\*message\*\*: The message that was signed\
> \- \*\*signature\*\*: The signature to verify\
> \- \*\*chain\*\*: The blockchain used (e.g., 'solana', 'ethereum')\
> \- \*\*nonce\*\*: The unique nonce that was included in the message\
> \- \*\*domain\*\*: The domain of the service requesting verification

```json
{"openapi":"3.1.0","info":{"title":"Walver API","version":"1.1.42"},"tags":[{"name":"Verification","description":"Endpoints for creating and processing verifications"}],"paths":{"/api/verify-signature":{"post":{"tags":["Verification"],"summary":"Verify Signature Api","description":"API endpoint to verify a wallet signature.\n\nThis endpoint allows third-party services to verify wallet signatures\nwithout having to implement the verification logic themselves.\n\nRate limit: 60 requests per minute.\n\n- **wallet_address**: The wallet address that signed the message\n- **message**: The message that was signed\n- **signature**: The signature to verify\n- **chain**: The blockchain used (e.g., 'solana', 'ethereum')\n- **nonce**: The unique nonce that was included in the message\n- **domain**: The domain of the service requesting verification","operationId":"verify_signature_api_api_verify_signature_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifySignatureRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Verify Signature Api Api Verify Signature Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"VerifySignatureRequest":{"properties":{"wallet_address":{"type":"string","title":"Wallet Address"},"message":{"type":"string","title":"Message"},"signature":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"string"}],"title":"Signature"},"chain":{"type":"string","title":"Chain"},"nonce":{"type":"string","title":"Nonce"},"domain":{"type":"string","title":"Domain"}},"type":"object","required":["wallet_address","message","signature","chain","nonce","domain"],"title":"VerifySignatureRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```

## Generate Auth Message

> Generate a service-specific authentication message.\
> \
> This endpoint generates a signed message that includes the service name\
> to prevent phishing attacks.\
> \
> Rate limit: 20 requests per minute.\
> \
> \- \*\*service\_name\*\*: The name of the service requesting authentication\
> \- \*\*wallet\_address\*\*: The wallet address to authenticate\
> \- \*\*chain\*\*: The blockchain used (e.g., 'solana', 'ethereum')\
> \- \*\*domain\*\*: The domain of the service requesting authentication

```json
{"openapi":"3.1.0","info":{"title":"Walver API","version":"1.1.42"},"tags":[{"name":"Verification","description":"Endpoints for creating and processing verifications"}],"paths":{"/api/generate-auth-message":{"post":{"tags":["Verification"],"summary":"Generate Auth Message","description":"Generate a service-specific authentication message.\n\nThis endpoint generates a signed message that includes the service name\nto prevent phishing attacks.\n\nRate limit: 20 requests per minute.\n\n- **service_name**: The name of the service requesting authentication\n- **wallet_address**: The wallet address to authenticate\n- **chain**: The blockchain used (e.g., 'solana', 'ethereum')\n- **domain**: The domain of the service requesting authentication","operationId":"generate_auth_message_api_generate_auth_message_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAuthMessageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Generate Auth Message Api Generate Auth Message Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"GenerateAuthMessageRequest":{"properties":{"wallet_address":{"type":"string","title":"Wallet Address"},"chain":{"type":"string","title":"Chain"},"service_name":{"type":"string","title":"Service Name"},"domain":{"type":"string","title":"Domain"}},"type":"object","required":["wallet_address","chain","service_name","domain"],"title":"GenerateAuthMessageRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
```
