# LLM General

```
# Wert Documentation

## Table of Contents
- [Introduction](#introduction)
- [Integration Steps](#integration-steps)
- [Supported Coins and Blockchains](#supported-coins-and-blockchains)
- [Service Availability](#service-availability)
- [Customization Package](#customization-package)
- [Sandbox Testing](#sandbox-testing)
- [Going Live](#going-live)
- [Passing Apple Store Review](#passing-apple-store-review)
- [Token Support](#token-support)
- [Troubleshooting KYC Verification Issues](#troubleshooting-kyc-verification-issues)
- [Troubleshooting Payment Issues](#troubleshooting-payment-issues)
- [General FAQ](#general-faq)
- [Smart Contract FAQ](#smart-contract-faq)

---

## Introduction

Welcome to the Wert documentation. This documentation will help you get started with integrating Wert.

> If you have any questions, please do not hesitate to book a meeting with [Sales](https://calendly.com/d/cjw-pwv-3mh/wert-team-call) or email [partner@wert.io](mailto:partner@wert.io). Please note that our partner support team is only available during standard business hours Central European time.
> 
> You can also schedule an onboarding/demo **call with our team** via [calendly](https://calendly.com/d/cjw-pwv-3mh/wert-team-call).

---

## Our solutions

We offer our partners two solutions depending on their needs; our [Fiat onramp](https://docs.wert.io/docs/fiat-onramp) solution is perfect for **simple crypto purchases with a card** while our [NFT checkout](https://docs.wert.io/docs/nft-checkout) allows your users to pay for **NFTs** or make purchases through a **smart contract**.

Both solutions are designed to seamlessly integrate with your product so your users can have a unified experience.

Before starting the integration, **we recommend checking out our [General FAQ](https://docs.wert.io/docs/general-faq) and [Smart Contract FAQ](https://docs.wert.io/docs/smart-contract-faq).**

---

## Partner sandbox module tuner

To simplify the wallet top-up integration, we have developed the module tuner. In the module tuner, you can set up widget language, available currencies and create custom themes to match your website branding.

You can find the module tuner on your Partner Dashboard in both [sandbox](https://partner-sandbox.wert.io/login) and [production](https://partner.wert.io/login).

---

## Integration Steps

### 1. Get your sandbox credentials
The first things you will need to start integrating Wert are your sandbox partner ID and login details. If you don't already have these, please book a meeting with [Sales](https://calendly.com/d/cjw-pwv-3mh/wert-team-call) or email [partner@wert.io](mailto:partner@wert.io).

If you are integrating our NFT checkout you will also be provided with your sandbox private key which will be used to [sign payment requests](https://docs.wert.io/docs/generate-signed-data).

### 2. Initialize the widget
Depending on the module you will be using, you can refer to the [Fiat Onramp page](https://docs.wert.io/docs/fiat-onramp) or the [NFT Checkout page](https://docs.wert.io/docs/nft-checkout). These pages provide details on how to initialize the widget for your module, including all the parameters and methods you will need to get started.

You can find **examples** of the integrations on [Github](https://github.com/wert-io/widget-integration-example).

### 3. Set up the webhooks
To receive notifications about your users and their Wert orders, you will need to set up webhooks. You can check all the details of how our webhooks work on the [Webhooks page](https://docs.wert.io/docs/webhooks).

### 4. Test the integration in the sandbox
After completing your integration, make sure that your code is functioning as intended and test the purchase flow in the sandbox environment. You can find information about it on our [Sandbox page](https://docs.wert.io/docs/sandbox).

### 5. Go live!
We've prepared a short guide about [going live](https://docs.wert.io/docs/going-live) which has all the steps you'll need to complete so that you're ready for that big day! Just let our team know when that will be so that we can work with you to get everything done.

---

## Supported Coins and Blockchains

### Production

| Cryptocurrency | Available networks | 'commodity' option | 'network' option | Supported for smart contracts | Decimal Precision |
| :--- | :--- | :--- | :--- | :--- | :--- |
| Aavegotchi | Polygon | 'GHST' | 'polygon' | Yes | 18 |
| Arbitrum | Arbitrum | 'ARB' | 'arbitrum' | Yes | 18 |
| AVAX | Avalanche | 'AVAX' | 'avalanche' | Yes | 18 |
| Binance Coin | Binance | 'BNB' | 'bsc' | Yes | 18 |
| Bitcoin | Bitcoin | 'BTC' | 'bitcoin' | No | 8 |
| Bone ShibaSwap | Shibarium | 'BONE' | 'shibarium' | Yes | 18 |
| Concordium | Concordium | 'CCD' | 'concordium' | Yes | 5 |
| cUSDT | Ethereum | 'CUSDT' | 'mainnet' | No | 6 |
| Ethereum | Ethereum Arbitrum Base Hemi | 'ETH' | 'ethereum' 'arbitrum' 'base' 'hemi' | Yes | 18 |
| EUROe | Concordium | 'EUROE' | 'mainnet' | No | 6 |
| GPRO | Polygon | 'GPRO' | 'polygon' | Yes | 18 |
| Hemi | Hemi | 'HEMI' | 'hemi' | Yes | 18 |
| LayerAI | Ethereum Binance | 'LAI' | 'ethereum' 'bsc' | No | 18 |
| LimeWire | Ethereum | 'LMWR' | 'ethereum' | Yes | 18 |
| MANA | Polygon Ethereum | 'MANA' | 'polygon' 'ethereum' | Yes | 18 |
| NEAR | Near | 'NEAR' | 'near' | Yes | 8 |
| opBNB | opBNB | 'OPBNB' | 'opbnb' | Yes | 18 |
| POL | Polygon | 'POL' | 'polygon' | Yes | 18 |
| Rootstock BTC | Rootstock | 'RBTC' | 'rootstock' | Yes | 18 |
| Stacks | Stacks | 'STX' | 'stacks' | No | 6 |
| Solana | Solana | 'SOL' | 'solana' | Yes | 9 |
| Tezos | Tezos | 'XTZ' | 'tezos' | Yes | 6 |
| Tezos | Etherlink | 'XTZ' | 'etherlink' | Yes | 18 |
| TFUEL | Theta | 'TFUEL' | 'theta' | Yes | 18 |
| TON | The Open Network | 'TON' | 'ton' | Yes | 8 |
| USDC | Arbitrum Base Ethereum Avalanche Shibarium Solana Polygon Hemi Etherlink | 'USDC' | 'arbitrum' 'base' 'ethereum' 'avalanche' 'shibarium' 'solana' 'polygon' 'hemi' 'etherlink' | Yes | 6 |
| USDSM | Etherlink | 'USDSM' | 'etherlink' | Yes | 18 |
| USDT | Polygon Ethereum Binance TON Hemi | 'USDT' | 'polygon' 'ethereum' 'bsc' 'ton' 'hemi' | Yes | 6, 6, 18, 6, 6 |
| Vyvo | Vyvo | 'VSC' | 'vyvo' | Yes | 5 |
| Wrapped Ether | Polygon | 'WETH' | 'polygon' | Yes | 18 |
| XCAD | opBNB Binance | 'XCAD' | 'opbnb' 'bsc' | Yes | 18 |

### Sandbox

| Cryptocurrency | Available networks | ‘commodity’ option | 'network' option | Decimal Precision |
| :--- | :--- | :--- | :--- | :--- |
| Binance | BSC | 'BNB' | 'bsc' | 18 |
| BONE | Puppynet | 'BONE' | 'puppynet' | 18 |
| Concordium | Concordium | 'CCD' | 'concordium' | 18 |
| cUSDC | Sepolia | 'cUSDC' | 'sepolia' | 6 |
| Ethereum | Sepolia Base Arbitrum | 'ETH' | 'sepolia' 'base_sepolia' 'arbitrum_sepolia' | 18 |
| EUROe | Concordium | 'EUROe' | 'concordium' | 18 |
| Hemi | Hemi | 'HEMI' | 'hemi' | 18 |
| POL | Amoy | 'POL' | 'amoy' | 18 |
| Solana | Solana | 'SOL' | 'solana' | 9 |
| Test Token | Amoy BSC KuCoin Base Arbitrum Sepolia opBNB Puppynet Hemi Etherlink | 'TT' | 'amoy' 'bsc' 'kucoin' 'base_sepolia' 'arbitrum_sepolia' 'sepolia' 'opbnb' 'puppynet' 'hemi' 'etherlink' | 18 |
| Test Token | Solana | 'TT' | 'solana' | 9 |
| Tezos | Ghostnet | 'XTZ' | 'ghostnet', 'etherlink' | 6 |
| opBNB | opBNB | 'opBNB' | 'opbnb' | 18 |
| USDSM | Etherlink | 'usdsm' | 'etherlink' | 18 |

#### Test Token contracts
Test Token is the only ERC-20 token available in sandbox. It’s a standard ERC-20 token, which can be used to test the interaction of ERC-20 tokens against your smart contract.

If you need to acquire some Test Tokens for your own testing, you can simulate a purchase on sandbox to transfer some to you. You will not be charged for this purchase and we ask that you send the tokens back once you have finished testing.

> Test Token contracts are deployed at the following addresses:
> - Arbitrum Sepolia network - `0x103EF343661335B85BE98EfEfF7f726Be7CeeeDE`
> - Ethereum Sepolia network - `0x42D8BCf255125BB186459AF66bB74EEF8b8cC391`
> - Polygon Amoy network - `0x834bBE71a0a5C91A4Aff10Df400A963D95AD4775`
> - Binance Smart Chain - `0x4C07B79C3D8954A51Efc342EdA5D08f8b1f9ceC4`
> - Base Sepolia network - `0x3bE123Ff0ec7c0717D6C05C8957EA7880e2FfDcb`
> - Puppynet - `0x4C07B79C3D8954A51Efc342EdA5D08f8b1f9ceC4`
> - Solana - `Hza3mZYRv7ZZw2xo1kvWvD4YXLnhA47JtTZBhgr8LTU7`
> - Hemi - `0x33e8Bf90e1aafcE42490e05880810f6d09699e02`

---

## Service Availability

### Supported countries
*(Abbreviated list of comprehensive global countries supported with various levels of Fiat Onramp and NFT Checkout)*
Full coverage applies across most territories globally, excluding sanctioned jurisdictions (Afghanistan, Cuba, Iran, North Korea, Syria, Russia, Belarus, etc.). Refer to live tables for specific country matrices.

### Supported US States
States supported for Fiat Onramp and NFT Checkout include Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, New Hampshire, New Jersey, North Carolina, North Dakota, Ohio, Oklahoma, Pennsylvania, Rhode Island, South Carolina, South Dakota, Tennessee, Texas, Utah, Virginia, Wisconsin, Wyoming, etc.

---

## Customization Package

*Available as a paid add-on*
We offer partners the ability to adapt the Wert user experience to their own brand while maintaining full product functionality.

### What’s included in the customization package
- **Custom email templates** — modify text and visuals to match your brand identity.
- **Personalized SMS OTP sender** — set your brand name as the sender for one-time passcodes.
- **Branded banking descriptor** — customize the name shown on your customers’ bank statements.

### How it works
1. **Select your customization options**: Email templates, SMS OTP sender name, Banking descriptor.
2. **We share the templates**: You’ll receive editable files where you can make changes to copy and design.
3. **Review & launch**: Once you approve the changes, we’ll implement them and confirm when everything is live.

### What can be customized
- Logos and brand colors in emails
- Email and notification text
- Sender domain for emails (Wert or custom domain)
- SMS sender name
- Banking descriptor displayed on bank statements
- **Mandatory elements**: Each email will include standard Wert legal information as required by regulators.

### Timeline & pricing
- Pricing — available upon request (paid add-on).
- Implementation time — typically 1 week after receiving all materials.

---

## Sandbox Testing

### Set-up
To ensure that you are testing in sandbox, please check the following:
1. The `origin` parameter passed to the widget is set to `https://sandbox.wert.io`.
2. You are using testnet commodities and smart contracts.
3. You have set up your webhook endpoint in the Sandbox Partner Dashboard: `https://partner-sandbox.wert.io/login/`

### Purchase amount and wallet address
We ask that you always use the minimum purchase amount, and if you can, please use one of our wallet addresses below. That way, you don't have to return the tokens to us.

| Commodity | Address |
| :--- | :--- |
| All EVM chains | `0x2ff0ec69341f43cc462251bd49bb63681adafcb0` |
| XTZ | `tz1T2uyYTshSGrEg13VGJFqsWwbi2H175hZb` |
| Solana | `BGCSawehjnxUDciqRCPfrXqzKvBeiTSe3mEtvTFC5d9q` |

### Sign up and login
The SMS verification code is not sent in sandbox; you can use any code to log in. You can sign up with any phone number and log in with any four-digit code.

### Card details
> Cards will not be charged in the sandbox environment, however we request that you do not use real card details in the sandbox environment. You can use any card number and expiry date, or generate one on external tools. Based on the CVV you use, you can mock different payment responses.

#### CVV Mocking Responses
| Response | CVV |
| :--- | :--- |
| General failure | 400 |
| Declined by issuer | 401 |
| Incorrect card details | 402 |
| Transaction limits exceeded | 403 |
| Insufficient funds | 404 |
| Incorrect CVV | 405 |
| Failed card validation (card deleted) | 406 |
| Failed card validation (contact support) | 407 |
| Success | Other |

#### Billing address
You can use any billing address as a test.

### KYC
You can use a sample ID to test the KYC flow. If you submit from a desktop device, any files will be acceptable as a selfie or address document, and the application will be approved automatically.
> **Warning:** Please note that this applies to sandbox testing only. In production, real documents will need to be submitted.

---

## Going Live

> Please let Wert know before you go live so that the customer support team is ready to support your users.

### 1. Sign the agreement
Before going live, you will need to contact the Wert integration support team to sign an agreement and receive your production Partner Dashboard credentials and Partner ID.

### 2. Switch from sandbox
With the agreement signed, you will need to make a few changes to your parameters to move to production:
1. Update the `partner_id` parameter to match the new Partner ID provided.
2. Update the `origin` parameter to `https://widget.wert.io`.
3. Make any required changes to the `commodity` parameter if you were using sandbox-specific commodities.

#### For the NFT Checkout
If you are using the NFT checkout, in addition to the changes above, please do the following:
1. Generate a keypair and send us your public key.
2. If required, verify your smart contract with Wert in the Partner Dashboard.
3. Update your smart contract details in signed data.

### Provide Domains for Whitelisting
In order for the widget to load in production, all domains or subdomains where the widget will be hosted must be shared with Wert. Our team will whitelist these domains. If domains are not whitelisted, the widget will not open for your users.

### OTP & SMS Troubleshooting
1. **Not Receiving Your OTP? Check Your Spam Folder:** Sometimes mobile carriers or device security settings mistakenly flag automated verification SMS as spam. Check Spam/Blocked/Filtered folder.
2. **Error When Requesting OTP? Virtual Numbers Not Supported:** Please ensure you are using a standard, carrier-backed mobile phone number. Virtual numbers (VoIP) are strictly NOT supported.

### Testing live payments
Remember when testing live payments that each team member or test user should use their real details during profile creation and each person should only use their own cards and wallets to avoid any issues.

---

## Passing Apple Store Review

Wert's product can be seamlessly integrated into iOS applications via WebView; however, due to Apple Store policies, initial builds featuring the Wert on-ramp may occasionally be flagged during review.

Apple exercises oversight over how cryptocurrency applications are marketing their services, essentially acting as a regulator. In addressing Apple's concerns, explain that:
1. Your wallet or web3 application does not act as an exchange or a Virtual Asset Service Provider (VASP), nor does it facilitate the transmission of cryptocurrency. Emphasize the distinction between custodial and non-custodial wallets.
2. Wert is not a conventional cryptocurrency exchange for trading digital assets. Instead, it operates as a licensed cryptocurrency purchasing service in Europe (FIU) and the USA (MSB).
3. Wert is the entity enabling the purchase of cryptocurrency, which happens in accordance with Wert's Terms & Conditions on a separate page hosted by Wert. The app developer's role is simply to provide a link to this page within a native browser.
4. Wert has an agreement with the app developer which clearly demarcates responsibilities and states that the app developer does not participate in providing the cryptocurrency service.

---

## Token Support

**Have Your Own Token?** Elevate your user experience with Wert's onramp integration by adding your custom token directly.
**Looking to Sell NFTs?** Leverage Wert's NFT checkout to handle transactions using your own token.

### Requirements:
- An ERC-20 token (EVM chains) or FA 1.2 Asset (for tokens on Tezos blockchain).
- Your token must be listed on any of our partner exchanges: Hitbtc, Gate.io, Kucoin, Bitmart.
- Your token's daily trading volume should be above $100k, traded against USD/USDT/USDC.
- Your token should not be a security or restricted anywhere in the world.
- Initial liquidity loan: We ask for at least $25-50K initial liquidity.

> Not listed on our partner exchanges? We offer full support for custom exchange integrations. Contact our sales team.

### Steps to Get Started:
1. Connect: Reach out to our team.
2. Formalities: Sign the Partner and Liquidity Agreements.
3. Liquidity: Send the initial liquidity.
4. Integration: We'll add your token to our platform within 1 to 2 weeks.
5. Launch: Start selling!

---

## Troubleshooting KYC Verification Issues

### Identity Verification (KYC)
To unlock higher purchase limits or meet regulatory requirements, users may be prompted to verify their identity. Most submissions are reviewed within a few minutes.

### Checklist for Verification Success
- **Light KYC (LKYC) - basic details:** Requires full name, date of birth, and email.
  - **Full name:** Must be at least two words with a space, English characters only (e.g., Wang Wei instead of local script). Single-word entries are rejected.
  - **Date of birth:** Real date of birth matching potential future FKYC documents.
  - **Email:** Common providers work best (Gmail, Yahoo, Hotmail, iCloud).
- **Full KYC (FKYC) - identity documents:**
  1. **Government-Issued ID:** Valid, unexpired passport, driver's licence, or national ID card. High-resolution, uncropped.
  2. **Selfie Liveness Check:** Real-time camera scan. *(U.S. residents only require a driver's licence and liveness check; proof of address is waived).*
  3. **Proof of Address (non-U.S. only):** Full document scan issued within the last 3 months (utility bills, bank/credit card statements, tax returns). Mobile phone bills, neobank statements, retail receipts are not accepted.

### Troubleshooting Verification Blocks
- **Why is the application still 'Pending'?** Flagged for manual review. Do not create a second account, as duplicate accounts trigger KYC failure.
- **Why was the application 'Rejected'?** Non-document KYC rejections ask to step up to document KYC. Document KYC rejections explain compliance failures. Users must fully remove rejected files before uploading new ones.

### Reject Type Values (`verify_failed` webhook event)
- **Light KYC (`reject_type`):**
  - `LKYC_FAILED_GENERAL`: Unspecified reason.
  - `LKYC_FAILED_AGE`: Minimum age requirement not met.
  - `LKYC_FAILED_UNSUPPORTED_COUNTRY`: Country not supported.
  - `LKYC_FAILED_UNSUPPORTED_STATE`: State/region not supported.
  - `LKYC_FAILED_DUPLICATE`: Verified account already exists.
- **Full KYC (`reject_type`):**
  - `FKYC_FAILED_GENERAL`: Unspecified reason.
  - `FKYC_FAILED_AGE`: Age requirement not met.
  - `FKYC_FAILED_UNSUPPORTED_COUNTRY`: Country on ID not supported.
  - `FKYC_FAILED_UNSUPPORTED_STATE`: State/region not supported (U.S.).
  - `FKYC_FAILED_SPAM`: Multiple failed attempts detected.
  - `FKYC_FAILED_DUPLICATE`: Verified account already exists.

---

## Troubleshooting Payment Issues

### Initial User Checklist:
- Turn off active VPNs.
- Check pop-up blockers.
- Use Google Chrome.

### Error Codes and Resolution:
- **Error Code 4002 / 4012 (Declined by Card Issuer):** Bank rejected payment due to automated fraud rules or MCC restrictions. Ask user to contact issuer.
- **Error Code 4005 (Card Limit Exceeded):** Exceeds daily/monthly limit. Use different card or increase limit.
- **Error Code 4013 (Risk Review):** Fraud prevention blocked transaction. Complete full KYC.
- **Error Code 4001 (Card CVV Invalid):** Incorrect CVV entered. Double-check and retry.
- **Error Code 4003 / 4011 (Incorrect Card Details / Validation Failed):** Card number/expiration incorrect or expired. Contact support to remove/update card.
- **Error Code 4004 (Insufficient Balance):** Insufficient funds. Fund account or switch method.
- **Error Code 4014 (Name Mismatch):** Cardholder name doesn't match KYC. Contact support.
- **Error Code 4010 (3DS Authentication Failure):** Failed 3-Domain Secure authentication. Ensure stable signal and no VPN.
- **Error Code 4000 (General Rejection / Technical Glitch):** Network timeout. Wait 2 minutes and retry.
- **Error Code 4015 / 4016 / 4017 (Timing & Amount Issues):** Session expired or mismatch. Restart session. Refunds for 4016 are processed automatically.
- **Error Code 4018 (Payment Cancelled):** User manually closed session. No funds captured.

---

## General FAQ

- **OTP in sandbox:** SMS is not sent in sandbox; code is always `0000`.
- **Fee structure:** Blockchain/gas fees paid by customer. Processing fee applied by Wert. Minimum fee is $1/€1 or agreement percentage, whichever is greater.
- **Integration timeline:** Designed to take a few days (typically under a week).
- **KYC requirements:** LKYC up to $1,000 crypto / $1,000 US NFT ($5,000 non-US NFT). FKYC up to $10,000/week crypto / $20,000/week NFT.
- **Purchase values:** Minimum $1 (except BTC which is $30); maximum $10,000 (crypto) / $20,000 (NFT).
- **Supported payment methods:** Google Pay, Apple Pay, Mastercard, Visa for crypto. AmEx, JCB, Discover additionally supported for NFTs.
- **Supported currencies:** USD and EUR.

---

## Smart Contract FAQ

- **How interactions work:** Wert sends a transaction to your smart contract with provided input data. Payer (Wert) and receiver (end-user) have different wallet addresses; your smart contract must account for this.
- **Wallets interacting:** Estimation wallet (dry runs) and hot wallet (sends required crypto). Whitelist both if your contract requires whitelisting.
- **NFT transfer:** Wert does not handle NFT transfer. We send crypto to your contract, and your contract transfers the NFT to the customer's wallet address.
- **Supported blockchains:** Arbitrum, Avalanche, Binance, Ethereum, Polygon, Tezos, Solana.
- **Ethereum/Polygon requirements:** Must be verified on Etherscan/Polygonscan. Must invoke payable methods only (unless using ERC-20s like USDC/USDT). Proxy contracts are supported by saving proxy address against implementation ABI.
- **ERC-20 smart contract payments:** Supported on EVM networks. Wert's smart wallet sends tx, contract calls ERC-20 contract to pull tokens from Wert's wallet, contract transfers NFT to user.
- **Failed smart contract transaction:** Wert performs a dry run beforehand. If it fails anyway, a failover order sends crypto directly to the user's wallet.

```

<br />