# Zebec Documentation

Documentation hub for the Zebec financial platform — user guides, developer docs, and API references.

Welcome to the Zebec documentation portal.

Zebec is a financial platform that moves real-world value in real time through stablecoin payroll, cards, yield products, and fiat off-ramps.

## Mission and vision

**Mission:** Deliver transformative blockchain-based consumer applications that significantly impact and improve people's lives.

**Vision:** A future where financial transactions are seamless, inclusive, and empowering for all.

## The Zebec Platform at a glance

Our platform is composed of different applications and a multitude of products.\
The table below gives

| Product                                                                           | [🌐 Web SuperApp](/zebec-application-suite/web-superapp) | [📱 Mobile SuperApp](/zebec-application-suite/mobile-superapp) | [🏢 Enterprise Payroll](/zebec-application-suite/enterprise-payroll) |
| --------------------------------------------------------------------------------- | :------------------------------------------------------: | :------------------------------------------------------------: | :------------------------------------------------------------------: |
| [Cards — Silver](/zebec-product-information/cards/silver-card)                    |                             ✅                            |                                ✅                               |                                   ✅                                  |
| [Cards — Carbon](/zebec-product-information/cards/carbon-card)                    |                             ✅                            |                                ✅                               |                                   ✅                                  |
| [Cards — Black](/zebec-product-information/cards/black-card)                      |                            🔓                            |                               🔓                               |                                   ✅                                  |
| [Yield — Dolomite](/zebec-product-information/yield/dolomite)                     |                             ✅                            |                                —                               |                                   —                                  |
| [Yield — Blend](/zebec-product-information/yield/blend)                           |                             ✅                            |                                —                               |                                   —                                  |
| [Yield — Solstice](/zebec-product-information/yield/usx-solstice)                 |                             —                            |                                —                               |                                   ✅                                  |
| [Fiat off-ramps — tGBP](/zebec-product-information/fiat-off-ramps/tgbp)           |                             ✅                            |                                —                               |                                   —                                  |
| [Fiat off-ramps — MoneyGram](/zebec-product-information/fiat-off-ramps/moneygram) |                             —                            |                                —                               |                                   ✅                                  |
| [Streaming payments](/zebec-product-information/streaming-payments)               |                             ✅                            |                                ✅                               |                                   —                                  |
| [Payroll](/zebec-product-information/payroll)                                     |                             —                            |                                —                               |                                   ✅                                  |

✅ : Available\
🔓 : Available, feature unlock

**App URLs**

* [Web SuperApp](https://superapp.zebec.io)
* Mobile SuperApp: [App Store](https://apps.apple.com/ae/app/zebec-superapp/id6757870351), [Google Play](https://play.google.com/store/apps/details?id=com.zebecrn)
* [Enterprise Payroll](https://payroll.zebec.io)

## Browse by section

* [User guides](/zebec-application-suite/user-guides)
  * [Web SuperApp](/zebec-application-suite/web-superapp)
  * [Mobile SuperApp](/zebec-application-suite/mobile-superapp)
  * [Enterprise Payroll](/zebec-application-suite/enterprise-payroll)
* [Product information](/zebec-product-information/product-information)
  * [Cards](/zebec-product-information/cards)
  * [Yield](/zebec-product-information/yield)
  * [Fiat off-ramps](/zebec-product-information/fiat-off-ramps)
  * [Streaming payments](/zebec-product-information/streaming-payments)
  * [Payroll](/zebec-product-information/payroll)
* [Developer docs](/developer-docs/developer-docs)
  * [SDKs](/developer-docs/sdks)
  * [Partner API](/developer-docs/partner-api)
* [Zebec Network (Archive)](/zebec-network-archive/zebec-network-archive) — deprecated legacy content

## Links & Support

* 🌐 Website: [www.zebec.io](https://www.zebec.io)
* ✉️ Email: <support@zebec.io>
* 🐦 X: [@Zebec\_HQ](https://x.com/Zebec_HQ)
* 💬 Discord: [discord.com/invite/fJM9cHuvvB](https://discord.com/invite/fJM9cHuvvB)
* 📣 Telegram: [t.me/zebecprotocol](https://t.me/zebecprotocol)
* 📸 Instagram: [@zebec\_hq](https://www.instagram.com/zebec_hq/)
* ▶️ YouTube: [@Zebec\_HQ](https://www.youtube.com/@Zebec_HQ)
* ✍️ Blog: [zebec.io/blog](https://zebec.io/blog)


# Overview

End-user guides for the Zebec Web SuperApp, Mobile SuperApp, and Enterprise Payroll.

These guides cover the applications you use to interact with the Zebec platform.

## Applications

* [**Web SuperApp**](/zebec-application-suite/web-superapp) — the main web interface for cards, yield, and fiat off-ramps on 21 chains.
* [**Mobile SuperApp**](/zebec-application-suite/mobile-superapp) — iOS and Android companion app.
* [**Enterprise Payroll**](/zebec-application-suite/enterprise-payroll) — payroll dashboard for companies paying employees and contractors in stablecoins.

## Product categories

Across these applications, Zebec offers:

* [**Cards**](/zebec-product-information/cards) — Silver, Carbon, and Black card programs.
* [**Yield**](/zebec-product-information/yield) — USX/Solstice, Dolomite, and Blend.
* [**Fiat off-ramps**](/zebec-product-information/fiat-off-ramps) — tGBP and MoneyGram.
* [**Streaming payments**](/zebec-product-information/streaming-payments) — real-time, per-second payment streams.
* [**Payroll**](/zebec-product-information/payroll) — stablecoin payroll for enterprises.

Product availability depends on the application and your location. Each product page lists where it is offered.


# Web SuperApp

Guide to the Zebec Web SuperApp - cards, streaming payments, staking, yield, and fiat off-ramps.

The **Zebec Web SuperApp** is the main web interface for spending, earning, and moving stablecoins in real time. It runs on [21 chains](/zebec-product-information/supported-chains) and is the primary place to get a Zebec card, stream payments, stake ZBCN, and off-ramp to fiat.

**URL:** [superapp.zebec.io](https://superapp.zebec.io)

Your wallet stays your own. You connect the wallet you already have; Zebec does not create or hold wallets for you.

## Guides

New to the app? Start with [Getting started](/zebec-application-suite/web-superapp/getting-started). Otherwise go straight to the section you need.

| Guide                                                                          | What it covers                                                   |
| ------------------------------------------------------------------------------ | ---------------------------------------------------------------- |
| [Getting started](/zebec-application-suite/web-superapp/getting-started)       | Email verification, connecting a wallet, finding your way around |
| [Profile management](/zebec-application-suite/web-superapp/profile-management) | Personal details and the address book                            |
| [Vault dashboard](/zebec-application-suite/web-superapp/vault)                 | Deposits, withdrawals, and balances                              |
| [Streaming payments](/zebec-application-suite/web-superapp/streaming)          | Real-time payment streams                                        |
| [Cards dashboard](/zebec-application-suite/web-superapp/cards)                 | Creating and managing Zebec cards                                |
| [Staking](/zebec-application-suite/web-superapp/staking)                       | Locking ZBCN to earn rewards                                     |
| [Fiat off-ramps](/zebec-application-suite/web-superapp/fiat-offramps)          | Redeeming tGBP to a UK bank account                              |

## Product information

The guides above cover how to use the app. For what each product is, its limits, and where it is available:

* [Cards](/zebec-product-information/cards), Silver, Carbon, and Black
* [Yield](/zebec-product-information/yield), Dolomite and Blend
* [Fiat off-ramps](/zebec-product-information/fiat-off-ramps), tGBP
* [Streaming payments](/zebec-product-information/streaming-payments)
* [Supported chains](/zebec-product-information/supported-chains)

{% hint style="info" %}
For a high-level overview of Zebec, visit [zebec.io](https://www.zebec.io).
{% endhint %}


# Getting started

Set up your Zebec Web SuperApp account, from email verification to connecting your wallet.

Setting up the Web SuperApp takes two steps: verify your email, then connect your wallet. This guide covers both, and points you to what comes next.

## Before you start

You need:

* Access to your email inbox for a verification code.
* A funded crypto wallet on a [supported network](/zebec-product-information/supported-chains). Cards and most features work cross-chain; a Solana wallet is only needed for Solana-specific features like staking.
* A small amount of the network's native token to cover transaction fees. On Solana, that means SOL.

Your wallet stays your own. Zebec does not create or hold wallets for you; you connect the wallet you already have.

## Step 1: Verify your email

Go to [superapp.zebec.io](https://superapp.zebec.io). The email verification screen loads first.

![Email verification screen](/files/j0LWZlmeVIwLiPswiSEN)

Enter your email address and click **Send code**. The code fields unlock once the code is sent.

Zebec sends a 6-digit code from `no-reply@zebec.io`.

![OTP email from Zebec](/files/8MMtz3OaOALZxb1RTNqY)

Enter the code on the site and click **Verify and continue**.

{% hint style="warning" %}
Codes expire after a few minutes. If yours no longer works, click **Send code** again for a fresh one.
{% endhint %}

## Step 2: Connect your wallet

Once your email is verified, the Vault dashboard loads with a prompt to connect a wallet.

![Dashboard with wallet connection prompt](/files/0IGKgsX4y0WK48slg1Ea)

The prompt defaults to Solana, and you have two options:

* **Connect Wallet** connects a Solana wallet. Approve the connection request when your wallet asks.
* **Switch Network** lets you pick a different chain first, then connect a wallet for that chain.

Behind the prompt you can see the Vault layout: your treasury balance, the **Deposit** and **Withdraw** buttons, and your assets. Everything reads zero until you deposit. The [Vault dashboard](/zebec-application-suite/web-superapp/vault) guide explains each section.

## Finding your way around

The top navigation has four sections, plus a **tGBP** button for UK off-ramps.

| Section                                                     | What it's for                                |
| ----------------------------------------------------------- | -------------------------------------------- |
| [Stream](/zebec-application-suite/web-superapp/streaming)   | Send and receive real-time payment streams   |
| [Cards](/zebec-application-suite/web-superapp/cards)        | Create and manage Zebec cards                |
| [Vault](/zebec-application-suite/web-superapp/vault)        | Deposit, withdraw, and see all your balances |
| [Staking](/zebec-application-suite/web-superapp/staking)    | Lock ZBCN to earn rewards                    |
| [tGBP](/zebec-application-suite/web-superapp/fiat-offramps) | Redeem tGBP to a UK bank account             |

Your wallet address sits in the top-right corner. Click it to reach your [profile, address book, and network switching](/zebec-application-suite/web-superapp/profile-management).

## What to do next

1. **Complete your profile.** Cards and fiat off-ramps need your legal name and address on file. See [Profile management](/zebec-application-suite/web-superapp/profile-management).
2. **Deposit funds.** Move assets from your wallet into your treasury balance in the [Vault](/zebec-application-suite/web-superapp/vault).
3. **Pick a product.** Create a [card](/zebec-application-suite/web-superapp/cards), start a [stream](/zebec-application-suite/web-superapp/streaming), or [stake ZBCN](/zebec-application-suite/web-superapp/staking).

If you get stuck, email <support@zebec.io>.


# Profile management

Manage your profile details and address book in the Zebec Web SuperApp.

Your profile holds the personal details Zebec needs to issue cards and open fiat off-ramps. The address book stores wallet addresses you pay often, so you never have to paste them from memory.

## The wallet menu

Everything account-related sits behind your wallet address in the top-right corner.

![Profile Details Menu](/files/O0yHqxB1snFIAX1j5Kcl)

The top of the menu shows your connected address and its network, with a button to copy the full address.

| Option                | What it does                                        |
| --------------------- | --------------------------------------------------- |
| **Disconnect Wallet** | Disconnects the wallet shown, leaving you logged in |
| **Switch Network**    | Moves you to a different chain                      |
| **Personal Details**  | Opens your profile                                  |
| **Address Book**      | Opens your saved contacts                           |
| **Logout**            | Ends the session for your connected email           |

Disconnecting and logging out are different things. Disconnecting drops the wallet but keeps your email session; logging out ends the session entirely.

## Personal details

![Profile Details Page](/files/oCL0hb8Sj3j2hYj9GtGF)

The Profile page shows what Zebec holds on file, in three groups:

* **Personal information**: first name, last name, and your verified email.
* **Region & address**: region, country, state, address, and city.
* **Linked wallet and last updated**: the wallet tied to this profile, and when the record last changed.

Fields are read-only on this page. Click **Edit Profile** in the top-right to change them.

These details decide whether a card can be issued to you, whether fiat off-ramps are available in your country, and how quickly Zebec's providers can complete their identity checks. Accuracy matters more than speed here.

{% hint style="warning" %}
Use your legal name exactly as it appears on your ID. A mismatch between your profile, your ID, and your bank account will hold up card issuance and off-ramp approval.
{% endhint %}

## Address book

![Address Book Interface](/files/rl1htwK0JtVBdD0qc6Zm)

The address book keeps the addresses you send to regularly, under two tabs:

* **Contacts** for individual addresses.
* **Groups** for contacts collected together, useful when you pay the same set of people repeatedly.

Search filters the list as you type. Each row shows the contact's initial and name, with a pencil icon to edit it and a bin icon to remove it.

To add someone, click **Add Contact**, then give the contact a name, the wallet address, and the network that address belongs to.

{% hint style="info" %}
Send a small test payment the first time you use a new address. Crypto payments to a wrong address cannot be reversed.
{% endhint %}

## Switching networks

Choose **Switch Network** from the wallet menu, pick the chain, then connect a wallet for it. Balances are specific to the connected network, so the figures in the Vault change when you switch.

## If something doesn't work

**Profile won't save.** Check that every required field is filled and your email is verified.

**Contact won't save.** Confirm the address is valid for the network you selected. Addresses are network-specific, so a Solana address will not save against Ethereum.

**A profile change hasn't reached cards or off-ramps.** Edits can trigger a fresh review by the card or off-ramp provider. Allow a business day, then contact <support@zebec.io>.

{% hint style="warning" %}
Zebec support will never ask for your seed phrase or private key. Nobody legitimate ever needs them.
{% endhint %}

## Related pages

* [Getting started](/zebec-application-suite/web-superapp/getting-started)
* [Cards dashboard](/zebec-application-suite/web-superapp/cards), which needs a complete profile
* [Fiat off-ramps](/zebec-application-suite/web-superapp/fiat-offramps), which needs a verified address


# Vault dashboard

Deposit, withdraw, and track your balances in the Zebec Web SuperApp Vault.

The Vault is where money enters and leaves the SuperApp. It shows your treasury balance, what each product currently holds, every asset you own, and your deposit and withdrawal history.

![Vault Dashboard](/files/YWWrgWoLBJml5n5Qlbqk)

## Treasury balance

Your treasury balance is the money you have moved from your wallet into the SuperApp. Products draw from it.

Three figures below the total show where that money sits:

| Figure      | Meaning                              |
| ----------- | ------------------------------------ |
| **Payroll** | Total across all active streams      |
| **Staking** | ZBCN currently locked in staking     |
| **Cards**   | Combined balance of all active cards |

In the screenshot the treasury holds $0.02, with 75 ZBCN staked and nothing in streams or cards.

## Moving funds

**Move funds** sits beside the balance, with two buttons:

* **Deposit** moves assets from your connected wallet into the SuperApp.
* **Withdraw** sends them back to your wallet.

Both open a dialog where you choose the asset and amount, then approve the transaction in your wallet. Each is an on-chain transaction, so a network fee applies and the balance updates once the transaction confirms.

## Assets

The Assets table lists supported assets with two balances side by side:

* **Wallet Balance** is what your connected wallet holds.
* **Treasury Balance** is what you have deposited into the SuperApp.

Each shows the token amount and its USD value. In the screenshot the wallet holds 59.0020 USDC and 0.0333 SOL, none of it deposited yet.

Turn on **Hide zero balances** to reduce the list to assets you actually hold.

## Transactions

The Transactions panel logs deposits and withdrawals for your treasury, filtered by **All**, **Incoming**, or **Outgoing**. Use the refresh icon if a recent transaction hasn't appeared.

This panel covers treasury movements only. Card spending lives in [Cards](/zebec-application-suite/web-superapp/cards), and stream activity in [Stream](/zebec-application-suite/web-superapp/streaming).

## If something doesn't work

**A deposit isn't showing.** Confirm the transaction succeeded in your wallet or on a block explorer, then refresh. Deposits appear once the network confirms them.

**Your wallet balance reads zero.** Check you are connected to the right network. Balances are per-chain, so switching networks changes what you see.

**A withdrawal won't go through.** You need enough of the network's native token to cover the fee, SOL on Solana for example, on top of the amount you are withdrawing.

{% hint style="info" %}
Deposit what you plan to use. Anything you don't need for cards, streams, or staking can stay in your own wallet.
{% endhint %}

## Related pages

* [Cards dashboard](/zebec-application-suite/web-superapp/cards), funded from your treasury
* [Streaming payments](/zebec-application-suite/web-superapp/streaming), which draw from your treasury
* [Staking](/zebec-application-suite/web-superapp/staking)
* [Fiat off-ramps](/zebec-application-suite/web-superapp/fiat-offramps)


# Streaming payments

Send and receive real-time payment streams in the Zebec Web SuperApp.

A stream pays out continuously instead of in one lump. Rather than sending someone 1,000 USDC on the last day of the month, you open a stream and the money accrues to them by the second. The Stream dashboard is where you create streams and monitor the ones already running.

![Stream Dashboard](/files/DMmHK9doK42YEjPekLrB)

## Total streams

The counter at the top left covers every stream on your connected wallet, split into **incoming** (money coming to you) and **outgoing** (money you are sending). The example shows 6 streams, all outgoing.

## Creating and reviewing streams

**Stream Actions** holds the two buttons you will use most:

* **Schedule Payment** sets up a new stream: recipient, token, amount, and period.
* **View All Streams** opens the full list, where you can act on individual streams.

## Top disbursed assets

This panel ranks the tokens you stream most, with **Total Received** and **Total Sent** for each. Use the arrows to page through if you stream in more than one token. The example shows ZBCN with $0.55 sent and nothing received.

## Payment summary

The chart plots incoming against outgoing payments over the last six months, with a currency selector so you can view one token at a time. It is the quickest way to spot a month where disbursements jumped, or a stream that stopped.

## Recent payments

Each row is a single payment from a stream, showing:

* which payment in the sequence it was, and the amount against the stream total
* the recipient address
* the start date and time
* the contract period, meaning how long that payment ran

Click **View All** for the full history.

## If something doesn't work

**A stream stopped paying.** Streams stop when their funding runs out. Check your treasury balance in the [Vault](/zebec-application-suite/web-superapp/vault) and top it up.

**A recipient says they haven't been paid.** Streamed funds accrue to the recipient, but they have to withdraw them. Point them to their own Stream dashboard.

**Nothing appears on the dashboard.** Streams belong to the wallet that created them. Confirm you are connected with that wallet, on the same network.

{% hint style="info" %}
Streams keep running whether or not you are logged in. Funds accrue continuously and stop only when you cancel the stream or the balance runs dry.
{% endhint %}

## Related pages

* [Vault dashboard](/zebec-application-suite/web-superapp/vault), where streams draw their funding
* [Address book](/zebec-application-suite/web-superapp/profile-management#address-book), for saving recipients
* [Streaming payments product information](/zebec-product-information/streaming-payments)
* [Streaming payroll](/zebec-application-suite/enterprise-payroll/streaming-payroll), the same mechanism applied to company payroll


# Cards dashboard

Create and manage Zebec cards in the Web SuperApp.

Zebec cards are Mastercard cards funded from your crypto. The Cards dashboard is where you create them, check balances, and open a card for its full details.

![Cards Dashboard](/files/jhtXEB2FOU57O3xJk828)

## Balances at a glance

Two panels sit at the top:

* **Total Cards Balance** is the combined balance across your active cards, $32.09 in the example.
* **Active Cards** counts the cards currently live, with a badge for each type you hold.

## Your cards

Each card shows its type, the last four digits, and its balance in the card's own currency. In the example the Carbon card holds 20.92 USD and the Silver card 11.17 EUR, which is why the combined total is a dollar figure rather than the sum of the two numbers.

Cards you can spend on carry an **ACTIVE** badge. **View Details** opens the card itself, with its transaction history and settings.

Below your cards:

* **Active**, **Used**, and **All** filter the list.
* **Search nickname or last 4** finds a specific card.
* **Recent** changes the sort order.

## Creating a card

The dashed placeholder showing the silver card artwork is the entry point for a new Silver card. Click **Create Silver Card** and the app takes you through it.

Before a card can be issued:

1. Your [profile](/zebec-application-suite/web-superapp/profile-management) needs your legal name and address.
2. Your country has to be eligible. See [availability and restrictions](/zebec-product-information/cards/availability-and-restrictions).
3. You need funds in your [treasury balance](/zebec-application-suite/web-superapp/vault) to load onto the card.

Zebec offers three tiers. Which ones you can apply for depends on your region and eligibility.

| Card                                                        | Tier  |
| ----------------------------------------------------------- | ----- |
| [Silver Card](/zebec-product-information/cards/silver-card) | Entry |
| [Carbon Card](/zebec-product-information/cards/carbon-card) | Mid   |
| [Black Card](/zebec-product-information/cards/black-card)   | Top   |

## If something doesn't work

**A payment was declined.** Check the card's balance first, then that it still shows as active. A card spends from its own balance, not straight from your treasury, so it needs topping up.

**The balance looks wrong after a purchase.** Authorisation and settlement can arrive at different times, so a balance may lag a transaction briefly.

**You can't create a card.** This is usually an incomplete profile or an ineligible country. Check both, then contact <support@zebec.io>.

{% hint style="warning" %}
Zebec support will never ask for your full card number, CVV, or PIN.
{% endhint %}

## Related pages

* [Cards product information](/zebec-product-information/cards), for tiers, limits, and fees
* [Vault dashboard](/zebec-application-suite/web-superapp/vault), where card funding comes from
* [Profile management](/zebec-application-suite/web-superapp/profile-management), required before a card can be issued


# Staking

Stake ZBCN to earn rewards in the Zebec Web SuperApp.

Staking locks ZBCN for a fixed period in return for a yield, quoted as an APY. The Stake page is where you open a position and track the ones you hold.

![Staking Dashboard](/files/9E3N6jni5LNUx9txx1jy)

## What the page shows

* **Global Staked** is the total ZBCN staked across the network.
* **Your Active Stake** is your own staked total, 75.00 ZBCN in the example.
* **My orders** lists each position you hold, under **Active** or **Unstaked**.

## Opening a stake

1. Enter an amount under **Amount to stake**. Your available ZBCN appears below the field, and **Half** and **Max** fill the amount in for you.
2. Choose a **Lockup duration**. The **APY** and **Total rewards** figures update to match, so you can compare durations before committing.
3. Click the button below. It reads **Enter amount** until there is an amount to stake. Approve the transaction in your wallet.

The position then appears under **My orders** with its timestamp, amount, and an **Active** badge. Expand a row for detail, or use **View all on Explorer** to verify positions on-chain.

## Rules worth knowing

* You cannot unstake before the lockup ends.
* The maximum stake is 5,000,000 ZBCN per wallet.
* Nothing happens automatically when the lockup ends. Funds stay staked until you unstake them yourself, which returns your principal along with the yield earned.
* The APY shown applies to the stake you are opening. Rates can differ for positions you open later.

{% hint style="info" %}
Keep some ZBCN outside your stake, along with enough native token for fees. A locked position cannot be touched until it matures, not even in part.
{% endhint %}

## If something doesn't work

**Not enough balance.** The figure under the amount field is your wallet's ZBCN, not your staked total. Transfer more in, or use **Half** to stake part of what you have.

**A position is missing after staking.** Refresh **My orders** with the icon beside the tabs. If it still doesn't appear, check the transaction on the explorer.

**Unstaking isn't available.** The lockup hasn't ended yet. The position's details show when it does.

## Related pages

* [Vault dashboard](/zebec-application-suite/web-superapp/vault), where your staked total appears in the treasury summary
* [Getting started](/zebec-application-suite/web-superapp/getting-started)


# Fiat off-ramps

Redeem tGBP to a UK bank account from the Zebec Web SuperApp.

tGBP lets UK users redeem supported balances into a verified UK bank account. Every redemption depends on three things: an approved UK customer profile, a GBP account in your own name, and a quote-backed compliance check.

![tGBP Off-ramp Interface](/files/AFG5pRAZB5on63Bql6pc)

## Reading the page

The chips under the heading show where you stand.

| Chip        | Meaning                                      |
| ----------- | -------------------------------------------- |
| **Profile** | Whether your UK customer profile is ready    |
| **Rail**    | The GBP account your funds will be paid into |
| **Status**  | Whether anything is still outstanding        |

In the screenshot the profile is **UK ready**, but the status reads **Setup required** because the bank account hasn't been submitted.

The panel on the right lays out the path a redemption takes:

1. **tGBP wallet**, the source address your tGBP comes from.
2. **Quote and review**, where the redemption is quoted and risk-scored. A **Manual review** tag means a person needs to check it.
3. **GBP payout**, the UK bank account the money lands in.

Below that, **Verification** tracks the two approvals you need: your **Customer profile** and your **Bank account**. Redemptions open once the provider has approved both.

## Setting up

**1. Complete your UK profile.** Open the **GBR profile** tab and provide your legal name, UK address, and date of birth, then the documents requested. Expect to supply a government-issued ID and proof of your UK address.

**2. Add your GBP account.** Submit the account name, sort code, and account number. The account must be in your own name and match your profile. Third-party accounts are rejected.

**3. Wait for approval.** Both items sit at **Pending review** until the provider clears them. The status on this page updates as they do.

{% hint style="warning" %}
Names must match across your profile, your ID, and your bank account. A middle name on one but not the other is enough to fail a check.
{% endhint %}

## Redeeming

Once both approvals are in place:

1. Enter the amount of tGBP to redeem.
2. Review the quote. It shows what you will receive after fees and is valid for a limited window.
3. Confirm, and approve the on-chain transaction.
4. Follow the redemption through quote, review, and payout on this page.

Most redemptions clear the automated check. Larger or unusual ones pick up the **Manual review** tag and take longer.

## If something doesn't work

**Redemptions are still closed.** Check the Verification section. Both the customer profile and the bank account need approval; one alone is not enough.

**The quote expired.** Quotes hold for a short window. Request a new one and complete it promptly.

**A redemption is stuck in manual review.** A reviewer is looking at it. Check your email in case they have asked for more information.

**The bank account was rejected.** The usual causes are a name mismatch or an account in someone else's name.

{% hint style="info" %}
tGBP redemption is for UK residents with a UK bank account. Elsewhere, see [MoneyGram](/zebec-product-information/fiat-off-ramps/moneygram) or spend directly with a [Zebec card](/zebec-application-suite/web-superapp/cards).
{% endhint %}

## Related pages

* [tGBP product information](/zebec-product-information/fiat-off-ramps/tgbp)
* [Vault dashboard](/zebec-application-suite/web-superapp/vault), where your tGBP balance sits
* [Profile management](/zebec-application-suite/web-superapp/profile-management)


# Mobile SuperApp

Zebec Mobile SuperApp for iOS and Android.

The **Zebec Mobile SuperApp** brings the same real-time payments, cards, and yield features to iOS and Android devices.

## Download

* **iOS:** [App Store](https://apps.apple.com/ae/app/zebec-superapp/id6757870351)
* **Android:** [Google Play](https://play.google.com/store/apps/details?id=com.zebecrn)

## Features

The mobile app is a companion to the [Web SuperApp](/zebec-application-suite/web-superapp). Core features include:

* Create and manage Zebec Cards (Silver, Carbon, Black).
* Top up cards from 150+ cryptocurrencies.
* View balances, transactions, and card details.
* Access yield products and staking features (where available).
* Apple Pay and Google Pay integration.

## Feature parity

Most products available on the Web SuperApp are also available on mobile. Some advanced workflows — such as large treasury operations or partner API setup — are designed for the web dashboard or Enterprise Payroll portal.

## Getting started

1. Download the app from the App Store or Google Play.
2. Have your crypto wallet ready with funds on a supported network — your wallet is separate from the app.
3. Connect the Zebec SuperApp to your crypto wallet.
4. Start using Cards, Staking, and other features.

{% hint style="info" %}
For product-specific guides, see [Product information](/zebec-product-information/product-information). Card programs, limits, and availability are the same across web and mobile.
{% endhint %}


# Enterprise Payroll

Zebec Enterprise Payroll — stablecoin payroll that settles in seconds and streams by the second.

**Zebec Enterprise Payroll** is a stablecoin payroll platform for companies that want to pay employees and contractors globally, in seconds, without traditional banking delays.

**URL:** [payroll.zebec.io](https://payroll.zebec.io)

## What it does

* Enterprises fund an on-chain treasury wallet with stablecoins.
* Zebec smart contracts disburse pay directly to employee/contractor wallets non-custodially.
* Recipients can withdraw pay as it accrues or load it onto a Zebec card.

## Who it is for

* Enterprises with distributed teams and contractors.
* Crypto-native companies paying in stablecoins.
* Traditional companies moving payroll onto faster, cheaper rails.

## Why it is different

1. **Settlement in seconds**: pay clears the same minute it leaves the treasury.
2. **Real-time payroll**: pay accrues by the second; recipients can withdraw anytime.
3. **No banking infrastructure required**: recipients only need a wallet.

For more details and benefits see the article on [Streaming Payroll](/zebec-application-suite/enterprise-payroll/streaming-payroll).

## Getting started

1. [Set up your workspace](/zebec-application-suite/enterprise-payroll/workspace-setup).
2. [Invite employees and contractors](/zebec-application-suite/enterprise-payroll/inviting-payees).
3. [Fund your treasury](/zebec-application-suite/enterprise-payroll/funding-your-treasury).
4. [Creating payroll schedules](/zebec-application-suite/enterprise-payroll/payroll-schedule)
5. [Running payroll](/zebec-application-suite/enterprise-payroll/running-payroll).

{% hint style="info" %}
Zebec must approve your enterprise account before disbursement begins. Approval usually takes under 24 hours.
{% endhint %}

## Product guides

* [Workspace setup](/zebec-application-suite/enterprise-payroll/workspace-setup)
* [Funding your treasury](/zebec-application-suite/enterprise-payroll/funding-your-treasury)
* [Inviting payees](/zebec-application-suite/enterprise-payroll/inviting-payees)
* [Creating payroll schedules](/zebec-application-suite/enterprise-payroll/payroll-schedule)
* [Running payroll](/zebec-application-suite/enterprise-payroll/running-payroll)
* [Streaming payroll](/zebec-application-suite/enterprise-payroll/streaming-payroll)
* [Team roles](/zebec-application-suite/enterprise-payroll/team-roles)
* [Payee guide](/zebec-application-suite/enterprise-payroll/payee-guide)
* [Cards for payees](/zebec-application-suite/enterprise-payroll/cards-for-payees)
* [Supported chains and assets](/zebec-application-suite/enterprise-payroll/supported-chains-and-assets)
* [Security and compliance](/zebec-application-suite/enterprise-payroll/security-and-compliance)
* [Troubleshooting](/zebec-application-suite/enterprise-payroll/troubleshooting)
* [Glossary](/zebec-application-suite/enterprise-payroll/glossary)

## Related products

* [USX / Solstice yield](/zebec-product-information/yield/usx-solstice)
* [MoneyGram off-ramp](/zebec-product-information/fiat-off-ramps/moneygram)


# Getting started

Getting started with Zebec Enterprise Payroll.

Zebec Enterprise Payroll replaces slow, bank-dependent payroll cycles with fast, programmable stablecoin disbursements.

## What is Zebec Payroll?

Zebec Payroll is a stablecoin payroll platform. Companies fund a corporate treasury wallet with stablecoins, and Zebec disburses pay directly to employee and contractor wallets. Recipients can withdraw pay as it accrues and/or load stablecoins onto a Zebec card to spend anywhere Mastercard is accepted.

## Who uses it

* **Enterprises** running payroll for distributed teams and contractors.
* **Crypto-native companies** that want to pay in stablecoins natively.
* **Traditional companies** moving payroll onto faster and cheaper rails.

## What makes it different

1. **Settlement in seconds rather than days.** Pay clears the same minute it leaves your treasury.
2. **Real-time payroll.** Pay accrues by the second. Employees and contractors can withdraw their accrued earnings at any time.
3. **No banking infrastructure required.** Recipients need a wallet rather than a bank account.

## Approval

When you complete onboarding, your workspace is provisioned immediately, but disbursement is gated until Zebec reviews your organization and signing wallet. This usually takes under 24 hours. You can still configure payroll, invite team members, and draft runs while waiting.

## Next steps

* [Set up your workspace](/zebec-application-suite/enterprise-payroll/workspace-setup)
* [Fund your treasury](/zebec-application-suite/enterprise-payroll/funding-your-treasury)
* [Invite your workforce](/zebec-application-suite/enterprise-payroll/inviting-payees)


# Workspace setup

How to set up your Zebec Enterprise Payroll workspace.

You start your journey with Zebec Enterprise Payroll by...

## Choosing your chain and signing wallet

The chain you select determines which wallets your employees and contractors can connect, which stablecoins you can settle in, and how fast transactions confirm.

You can disburse funds on:

* [Solana](https://payroll.zebec.io/)
* [Stellar](https://stellarpayroll.zebec.io/)
* Ripple: Coming soon

Each employer workspace runs on one chain. You can spin up additional workspaces for different chains if needed.

The **signing wallet** is the wallet that authorizes payroll runs. It is not the same as your treasury wallet (the wallet holding funds), although for simple setups they can be the same wallet. Zebec never holds your keys; you sign every run.

## Onboarding wizard

![Welcome screen](/files/DaMgrGayENZWD2P4W8m3)

Clicking `Create new account` and `I'm an Employer` starts the onboarding wizard.

The onboarding wizard takes under 5 minutes and has 4 steps. You will provide:

1. **Contact email**: verified via a 6-digit code. Payroll notifications go here.
2. **Organization details**: company name, legal entity, industry, registration / tax ID (if applicable).
3. **Wallet & Payroll configuration**: the signing wallet that authorizes payouts, pay frequency, settlement token, timezone.
4. **Review & confirm**: final check before your workspace is provisioned.

Everything except the signing wallet can be edited later from **Settings**.

## Configuring currency & payroll cadence

![Payroll cadence configuration](/files/vl27c375HXzbR9KnHGQS)

In this screen you configure the details of your payroll scheduling.

Choose:

* **Default stablecoin**: the stablecoin you will pay in.
* **Default Payment Currency**: the real-world currency you are using for payroll calculations.
* **Pay frequency**:
  * weekly: end of calendar week,
  * bi-weekly: end of every second calendar week,
  * semi-monthly: every 15th and end of month, or
  * monthly: every end of the month.
* **Timezone**: used to schedule payroll runs. UTC works for most cases.

## Approval and going live

After onboarding, your workspace status is **Pending approval**. The dashboard is fully accessible, but disbursement is blocked.

![Review screen](/files/4l6Uaf6Xl4r6FTXGA5gR)

When approval is complete (usually within 24 hours), you will receive a confirmation email. Once your treasury is funded and payees are invited, your can start executing your payroll runs.


# Funding your treasury

How to fund your Zebec Enterprise Payroll treasury.

Your **treasury** is the on-chain wallet that holds the float for payroll disbursements. You fund it by sending stablecoins from any wallet or exchange that supports the chain you have configured.

## Recommended approach

* **Pre-fund for at least one full pay cycle.** If you pay biweekly and your monthly payroll is $50K, fund at least $25K plus a 5–10% buffer for gas and mid-cycle hires.
* **Top up regularly** rather than holding large balances.
* **Set low-balance alerts** in **Settings → Notifications** so you do not get caught short.

## How payroll checks funding

Payroll settles per **cohort**: a pay group (team, department, or contractor batch) run together on its own schedule. When a run starts, Zebec checks that the cohort's allocation covers every recipient as of the current roster.

* **No partial paychecks.** An individual is never paid a fraction of what they are owed.
* **Within a run, either everyone settles in full or it halts.** Zebec will not pay half a team.
* **Funded cohorts are not blocked by unfunded ones.** If Engineering is funded and Sales is not, Engineering runs and only Sales pauses.
* **Roster changes apply at run time.** Added headcount raises the amount required; offboarded recipients are excluded before the check.
* **One treasury, multiple cadences.** Each run draws its own earmarked allocation, so weekly and monthly runs stay independent.

Zebec alerts you ahead of each run to top up before anything halts.

## Security

Consider enabling multi-sig for the signing wallet. See [Security and compliance](/zebec-application-suite/enterprise-payroll/security-and-compliance) for details.


# Inviting payees

How to invite employees and contractors to Zebec Enterprise Payroll.

![Payee dashboard](/files/3TkSYvL1IK0EOtwmSa6q)

From **People → Payees**, you can see your full workforce in one place: active, pending invitations, and terminated accounts.

## Add a new payee

![Invite Payee dialog](/files/fhq4t318LyAFDUmnYAvq)

Click on **Invite Payee** and provide:

* Full name
* Work email
* Role
* Department
* Employee ID (your internal reference)
* Payment details
  * Currency: the currency you are using for this particular payee
  * Pay rate: the all-in rate the payee receives every...
  * Rate Frequency: time period for this payee's payment calculations

> Example 1:\
> Payee A is paid $1,000 / month. You define `1000, USD, Monthly`. Example 2:\
> Payee B is paid a weekly stipend of €30. You define `30, EUR, Weekly`.

There is no functional difference between an "employee" and a "contractor" in the system. Both receive the same invite flow, both connect a wallet, and both get paid and can withdraw funds the same way. The distinction is for your internal classification and reporting, and for applicable tax withholdings and deductions once those are enabled.

## Bulk import

![Bulk import](/files/XD6gFA9LMZbfGReIOEUP)

You can import names and details via CSV if you are migrating a team. Use the **CSV upload** tab on the Payees dialog. Use the provided template to populate your data.

## Invite codes

![Invite code email](/files/dvLRIF4WZdW85GIm9uRi)

When you invite a team member, Zebec generates a one-time invite code in the format `ZBEC-XXXX-XXXX` and emails it to them. They use this code to claim their account.

**Key facts about invite codes:**

* **One-time use.** Once the account is claimed, the code is invalidated.
* **7-day expiry.** If they do not claim it within 7 days, you can resend it from the Payees tab.
* **Email-bound.** The code only works for the email it was sent to.
* **Cancellable.** You can cancel a pending invitation, which invalidates the code.

If a team member did not receive their invite, check the **Pending Invitations** panel — they may need a resend, or the email may be in their spam folder.


# Creating payroll schedules

How to create and manage recurring payroll schedules in Zebec Enterprise Payroll.

A **payroll schedule** defines who gets paid, how much, in which settlement token, and on what cadence. Configure once, run on repeat.\
You can create multiple schedules to cover a variety of cases. Some examples of schedules you can create.

* A monthly schedule for your full-time employees.
* A weekly schedule for a group of temporary workers.
* A daily schedule for a graphic designer, on an hourly rate.

Schedules are managed from the **Payroll Hub**.

![Payroll Hub](/files/LiIPL7iYsOlyo8ikkr6P)

## Payroll Hub at a glance

The stats row at the top summarizes your payroll operation:

| Stat                 | What it shows                                                     |
| -------------------- | ----------------------------------------------------------------- |
| **Active Schedules** | Number of live schedules, and how many have auto-execute enabled. |
| **Payees Covered**   | Total payees included across all schedules.                       |
| **Cycle Outflow**    | Total amount paid out per cycle, in your settlement token.        |
| **Next Run**         | Date of the next scheduled execution.                             |

Use the search box and the **status** / **frequency** filters to find a specific schedule.

## Create a schedule

1. Click **New Schedule** in the Payroll Hub.
2. Name the schedule and select the payees to include.
3. Set the frequency (for example, weekly or monthly) and the start date.
4. Choose the settlement token and chain.
5. Review the total payout and confirm with your signing wallet.

## Schedule statuses

| Status          | Meaning                                                     |
| --------------- | ----------------------------------------------------------- |
| **Active**      | Schedule is live and waiting for its next run.              |
| **Running**     | A run is currently in progress.                             |
| **Deactivated** | Schedule is paused; no runs will execute until reactivated. |

## Schedule actions

Each schedule card shows the payee count, total payout, frequency, settlement token and chain, plus the next or last run timestamp. From a card you can:

* **Run Now** (or **Run next run**) — execute the upcoming run immediately instead of waiting for the scheduled time. See [Running payroll](/zebec-application-suite/enterprise-payroll/running-payroll).
* **View active run** — open the live progress view for a run in progress.
* **Deactivate** — pause the schedule without deleting it.

## Instant Disbursement

Need to pay someone outside the regular cadence? Click **Instant Disbursement** in the Payroll Hub to send a one-off payment without creating or modifying a schedule.

## Related

* [Running payroll](/zebec-application-suite/enterprise-payroll/running-payroll) — what happens during and after a run.
* [Streaming payroll](/zebec-application-suite/enterprise-payroll/streaming-payroll) — how per-second accrual works.
* [Funding your treasury](/zebec-application-suite/enterprise-payroll/funding-your-treasury) — make sure the treasury can cover the cycle outflow.


# Running payroll

How to execute a payroll run in Zebec Enterprise Payroll.

Once your workforce is onboarded, payroll runs on the cadence you configured. The **Payroll Runs** page shows all upcoming, in-progress, and completed runs.

![Payroll Runs page](/files/N8rQnLATOiXA03Qgs3gC)

At a glance you can see:

* Total amount disbursed
* Streams in progress
* Employees paid
* Next scheduled run

## Execute a run

1. Click the upcoming run from the Payroll Runs page.
2. Review the headcount, total payout, and period.
3. Click **Run Now** or wait for the scheduled execution.
4. Your signing wallet will prompt you to sign — this authorizes the disbursement.
5. Zebec executes the run on-chain.

## During the run

![Run in progress](/files/xfFZNN9f6tpmbovwKqYG)

You will see a live progress bar at the top, with individual payment statuses displayed below. Each employee or contractor record shows the current stream rate, amount disbursed, and a status indicator:

* **Streaming**
* **Posted**
* **Cancelled**
* **Failed**

Failed payments are rare but can be retried individually without rerunning the entire payroll cycle.

The right rail shows your buffer overview (how long your treasury will sustain payroll at current rates) and the run configuration (frequency, settlement token, total amount, funding status).

## After the run

![Completed run](/files/BsKA0cJgXO5SFNDkyd0p)

When a run completes successfully, the status flips to **Completed** with a green confirmation banner. You get:

* A downloadable report (CSV with all transaction hashes)
* Per-payee totals
* A Final Summary card with the net amount disbursed and any cancelled payments noted

The Run Configuration block on the right shows the exact parameters this run executed under — useful for audit trails.


# Streaming payroll

How streaming payroll works in Zebec Enterprise Payroll.

Streaming payroll is Zebec's flagship feature. Instead of paying employees and contractors in lump sums at cycle boundaries, **pay accrues by the second** from the moment the payroll cycle starts.

## How it works

A team member on a $5,000/month salary does not wait until the 1st of the next month to see their money. From the moment the cycle opens, their balance ticks up continuously, by the second, and they can withdraw any portion at any time.

## Why it matters

* **For employees and contractors:** financial flexibility without payday loans, predatory advance apps, or asking the company for an advance.
* **For enterprises:** no extra cost and no extra admin. The total payout is the same, just streamed instead of batched. Better talent retention and reduced HR overhead from advance requests. Instant settlement of funds, rather than going through slow banking or remittance rails.
* **For everyone:** payers and payees do not need to open and maintain bank accounts or deal with cross-border currency fluctuations. This opens a new world of opportunities globally, for both companies and talent.


# Team members and roles

Team member roles and permissions in Zebec Enterprise Payroll.

Team members (**Settings → Team**) are people inside your organization who access the Zebec dashboard. They are separate from your payroll workforce.

![Team members page](/files/hSEqYsh7FpECaXpPEyCK)

## Roles

| Role        | Permissions                                                                                        |
| ----------- | -------------------------------------------------------------------------------------------------- |
| **Admin**   | Full access. Approve and run payroll. Fund treasury. Manage team. View all reports.                |
| **Finance** | Schedule payroll. View treasury balance. Download reports. Cannot manage team or fund treasury.    |
| **HR**      | Manage employees. View payroll reports. Cannot run payroll. No treasury access.                    |
| **Viewer**  | Read-only dashboards and payroll history. No transactions, no team management, no treasury access. |

## Invite a team member

![Invite member dialog](/files/bjssfNlSQC96iDJTHPEC)

1. Click **Invite Member**.
2. Enter their name and work email.
3. Choose a role.
4. Send the invitation.

Team members receive an email invitation that expires in 48 hours. You can resend it at any time.

## Managing members

* An invited member appears in the Members table with status **Invited** until they accept.
* You can change a member's role at any time by clicking **Edit** on their row.
* Removing a member revokes their access immediately, with no grace period.


# Payee guide

Guide for employees and contractors getting paid through Zebec Enterprise Payroll.

This guide is for employees and contractors who receive pay through Zebec Enterprise Payroll.

## I got an invite — what now?

You received an email from your employer with a Zebec invite code. Here is what happens:

1. **Click the join link** in the email — your invite code is pre-filled.
2. **Verify your email** with a 6-digit code Zebec sends to you.
3. **Connect a wallet** (do not have one? See "What's a wallet?" below).
4. **You are set.** Your pay starts accruing once your employer activates you and/or a new payroll cycle starts.

The whole process takes about 2 minutes.

The first step is confirming your invite code. The "Your Employer" panel on the right will populate with your employer's name once you enter a valid code. If the company shown does not match who you expected, stop and double-check with your contact before continuing.

After your invite code is accepted, you will get a 6-digit code by email. Enter it on the verification screen. The code expires in 10 minutes; hit **Resend** if you need a new one.

## What's a wallet?

A **wallet** is software that holds your crypto. Think of it as an account where stablecoins get sent, except that instead of a bank holding it for you, you hold it directly.

| Bank account                            | Crypto wallet                                |
| --------------------------------------- | -------------------------------------------- |
| The bank holds your money               | You hold your money directly                 |
| Log in with username + password         | Log in with a seed phrase or biometrics      |
| Recoverable if you forget your password | Not recoverable if you lose your seed phrase |
| Slow international transfers, fees      | Instant transfers, near-zero fees            |
| Working hours                           | 24/7                                         |

Two important things:

1. **You control your wallet.** Zebec never holds your keys. Your employer cannot freeze it, and neither can Zebec.
2. **Write down your seed phrase.** This is the 12 or 24 words your wallet shows you when you first set it up. Without these words, no one can recover your wallet if you lose your phone. Write them on paper and store them somewhere safe. Do not take a screenshot, and do not email them to yourself.

New to wallets? Phantom on Solana or Freighter on Stellar are good starting points.

## Connecting your wallet

During the join step, you will be asked to connect a wallet. Zebec supports the most popular wallets on each chain.

Connecting a wallet is **not** the same as logging in with a username and password. You are authorizing Zebec to:

* Send pay to your wallet address.
* Read your balance.

Zebec cannot move money out of your wallet, cannot see your seed phrase, and cannot see your other crypto.

You will be asked to **sign a message** to prove ownership of the wallet. This is just a cryptographic signature: there is no gas fee, no transaction, and no risk.

## Getting paid

Your employer sets the cadence and selects the **payout token**. You choose how to use it: hold it in your wallet, withdraw it to another wallet, or spend it in fiat via a Zebec card.

If your employer enabled **streaming payroll**, your balance accrues in real time from the moment the cycle starts, and you can withdraw any portion at any time.

To withdraw, go to your dashboard, click **Withdraw**, and choose:

* **To wallet** — moves funds to a wallet of your choice.
* **To Zebec card** — loads funds onto your card for fiat spending.

## Wallet or Zebec card?

Both work. It comes down to what you want to do with your pay.

**Pick the wallet route if you:**

* Want to hold crypto / save in stablecoins.
* Plan to send pay to family or other wallets.
* Are comfortable with self-custody.
* Live somewhere with strong crypto-to-fiat off-ramps.

**Pick the Zebec card route if you:**

* Want to spend your pay like normal money.
* Do not want to think about crypto, exchanges, or off-ramps.
* Need a card for things that do not accept crypto.
* Live somewhere with limited banking access.

You can use both. Most employees and contractors take part of their pay to a wallet and part to a card. Configure the split from your dashboard. You can change it at any time.

## If you lose access to your wallet

This is the downside of self-custody: if you lose your seed phrase and your device, no one can recover your wallet. Zebec cannot, your employer cannot, and the wallet developer cannot.

**If you still have your seed phrase:**

1. Install the wallet app on a new device.
2. Choose "Restore wallet" or "Import seed phrase."
3. Enter the 12 or 24 words.
4. Your wallet is back, with all funds intact.

**If you have lost the seed phrase but still have access on one device:**

1. Open your wallet on the device you can still access.
2. Go to Settings → Backup / Show seed phrase.
3. Write the phrase down somewhere safe immediately.
4. From now on, treat that paper like cash.

**If you have lost both seed phrase and device:**

Unfortunately, funds in that wallet are gone. Connect a *new* wallet to your Zebec account from **Settings → Wallet**, and future pay will go to the new address. Past pay already settled in the old wallet is unrecoverable.

This is why we say: **write down your seed phrase the first time you set up a wallet, and store it somewhere safe.**


# Cards for payees

How employees and contractors can use Zebec Cards with their payroll pay.

Employees and contractors paid through Zebec Enterprise Payroll can load accrued pay onto a Zebec Card and spend anywhere Mastercard is accepted.

## How it works

1. Your employer runs payroll.
2. Pay accrues in your Zebec account (in real time if streaming is enabled).
3. From your dashboard, choose **Withdraw → To Zebec card**.
4. The funds are loaded onto your card and ready to spend.

## Why use a card?

* Spend your pay like normal money, in groceries, rent, and everyday purchases.
* No need to manage exchanges or off-ramps yourself.
* Works anywhere Mastercard is accepted.
* Useful if you live somewhere with limited banking access.

## Card programs

The same card programs available to SuperApp users are available to payroll payees:

* [Silver Card](/zebec-product-information/cards/silver-card): single-use, USD/EUR/GBP.
* [Carbon Card](/zebec-product-information/cards/carbon-card): reloadable, USD.

Your eligibility for a particular card program and currency depends on your country of residence. See [Card availability and restrictions](/zebec-product-information/cards/availability-and-restrictions).

## Splitting your pay

You do not have to choose between wallet and card. From your dashboard you can split pay between:

* A wallet address (self-custody / savings)
* A Zebec card (spending)

You can change the split at any time.

## Fees and limits

Fees and limits depend on the card program you choose. See the individual card pages for details.

If a card transaction is declined, make sure you are not trying to use the card in a [restricted country](/zebec-product-information/cards/availability-and-restrictions#where-cards-cannot-be-used).


# Supported chains and assets

Supported chains, wallets, and settlement tokens for Zebec Enterprise Payroll.

Zebec runs across multiple chains. Each payroll workspace operates on one chain at a time; your employer chose this during setup.

## Supported chains

| Chain               | Supported wallets                          | Common settlement tokens         | Notes                                    |
| ------------------- | ------------------------------------------ | -------------------------------- | ---------------------------------------- |
| **Solana**          | Phantom, Solflare, Backpack                | USDC                             | Fast (\~400 ms blocks), low fees         |
| **Stellar**         | Freighter, Lobstr, Rabet                   | USDC, EURAU, XLM                 | Built for payments, 5 s settlement       |
| **XRP Ledger**      | Xumm, Crossmark                            | RLUSD                            | Ripple's native stablecoin               |
| **Canton**          | Canton-compatible custody                  | USDCx, Canton Coin               | Privacy-preserving institutional rail    |
| **Aleo**            | Leo Wallet, Puzzle, Fox                    | USDC (bridged)                   | Zero-knowledge L1, private by default    |
| **Algorand**        | Pera, Defly, Lute                          | USDC, USDT, ALGO                 | Instant finality, low fees, ASA standard |
| **Base**            | Coinbase Wallet, MetaMask, Rabby           | USDC, EURC                       | Coinbase L2 on Ethereum, low fees        |
| **BNB Smart Chain** | MetaMask, Trust Wallet, Binance Wallet     | USDC, USDT, BUSD, BNB            | High throughput, large retail liquidity  |
| **Bittensor**       | Bittensor Wallet (btcli), Talisman         | TAO                              | Decentralized AI/ML subnet network       |
| **Boba Network**    | MetaMask, Rabby                            | USDC, USDT, BOBA                 | Ethereum L2 (optimistic rollup)          |
| **Dash**            | Dash Core, Dash Wallet                     | DASH                             | InstantSend, low-fee payments focus      |
| **Ethereum**        | MetaMask, Rabby, Coinbase Wallet, Ledger   | USDC, USDT, DAI, PYUSD           | Deepest liquidity, higher gas fees       |
| **NEAR Protocol**   | NEAR Wallet, Meteor, HERE                  | USDC, USDT, NEAR                 | Sharded L1, human-readable accounts      |
| **OctaSpace**       | OctaSpace Wallet, MetaMask                 | OCTA                             | Decentralized compute/cloud network      |
| **Odyssey**         | MetaMask, compatible EVM wallets           | DIONE                            | DePIN-focused, EVM-compatible            |
| **Polygon**         | MetaMask, Rabby, Trust Wallet              | USDC, USDT, DAI, MATIC           | Low-fee Ethereum scaling, wide adoption  |
| **Quai Network**    | Pelagus, Quai-compatible EVM wallets       | QUAI                             | Sharded proof-of-work L1, EVM-compatible |
| **Sui**             | Sui Wallet, Suiet, Ethos                   | USDC, USDT, SUI                  | Object-based model, parallel execution   |
| **TON**             | Tonkeeper, Tonhub, MyTonWallet             | USDT, TON                        | Telegram-integrated, high retail reach   |
| **XDB Chain**       | DigitalBits Wallet, XDB-compatible custody | XDB, stablecoins (Stellar-based) | Stellar-fork, payments/loyalty focus     |
| **Zano**            | Zano Wallet                                | ZANO                             | Privacy-preserving, confidential assets  |

{% hint style="info" %}
Solana, Stellar, XRP Ledger, and Canton are supported for both payroll and card products. All other chains are currently supported for card products only; payroll support is coming soon.
{% endhint %}

## About settlement tokens

Stablecoins are crypto assets pegged 1:1 to a real-world currency.

* **USDC** is pegged to USD.
* **EURAU** is pegged to EUR.
* **RLUSD** is pegged to USD on XRPL.

The peg is held by the issuer, not by Zebec; Zebec provides the technology to route payments.

## More chains

More chains are added regularly. For the current network list across all Zebec products, see [Supported chains](/zebec-product-information/supported-chains). If your employer wants to run on a chain not listed here, contact <support@zebec.io>.


# Security and compliance

Security, compliance, and data handling for Zebec Enterprise Payroll.

## Does Zebec hold my keys?

**No.** Zebec is non-custodial. Your wallet keys never leave your device. We can see your wallet address (to send pay to it), but we cannot move funds out of it. Only you can.

This applies to both recipients of pay and enterprises. The enterprise's treasury wallet is owned and signed by the enterprise; Zebec just orchestrates the disbursement.

## What is multi-sig and why does it matter?

Multi-sig (multi-signature) means a transaction needs to be approved by multiple parties before it executes. Instead of one signature authorizing a payroll run, you can require two or three from different team members.

This is recommended for enterprises with more than one person on the finance team. It protects against:

* A single compromised laptop or wallet.
* A single rogue or careless employee.
* Accidental large transactions.

## KYB / KYC requirements

**KYB (Know Your Business)** applies to enterprises. During the approval process, Zebec verifies that your business is real and legitimate. We typically check registration documents, the signing wallet's history, and the contact details you provided.

**KYC (Know Your Customer)** for staff or contractors is generally not required; your employer is the entity Zebec verifies. However, depending on the jurisdiction and payees' withdrawal patterns, some regional compliance partners may require additional verification at higher volumes. If this affects you, you will be notified in the dashboard.

## Where is my data stored?

Zebec handles personal data in accordance with applicable data protection legislation, including where relevant the EU GDPR, the Irish Data Protection Act 2018, and any applicable UK data protection legislation. Information may be processed for engagement administration, compliance, risk management, conflict checking, anti-money laundering verification, service delivery, and the establishment, exercise, or defense of legal claims.

On-chain data (wallet addresses, transaction hashes) is public by nature of the blockchain.

Zebec does not sell data and does not share data with advertisers. Data is shared with auditors and regulators only where legally required.


# Troubleshooting

Common issues and how to resolve them in Zebec Enterprise Payroll.

## "My invite code expired"

Invite codes expire after 7 days. Your employer can resend a new code from their dashboard. Reach out to your contact at the company.

## "I can't connect my wallet"

1. **Make sure your wallet is unlocked.** Open the wallet app first, then try again.
2. **Make sure you're on the right chain.** If your employer is disbursing on Solana, your wallet needs to be on Solana.
3. **Try a different browser.** Wallet extensions sometimes conflict with each other.
4. **Refresh the page.** Especially after installing a new wallet.

Still stuck? Contact <support@zebec.io> with your invite code and the wallet you are trying to use.

## "My payroll run is stuck"

Active payroll runs occasionally pause if:

* **The treasury is underfunded.** Top up and the run resumes automatically.
* **The signing wallet is disconnected.** Reconnect from **Settings → Treasury → Signers**.
* **An employee or contractor's wallet address is invalid.** The dashboard will flag which payee. Correct the address with them, then retry that individual payment.

If none of the above apply, check the dashboard alerts panel or reach out to support.

## "An employee or contractor didn't receive their pay"

Check the payee's row in the payroll run. Status will show one of:

* **Completed** — pay arrived. Ask them to check their wallet.
* **Pending** — still processing, usually clears within minutes.
* **Failed** — flagged for retry. Common causes: invalid wallet address, or the payee had not completed onboarding.

If the status shows Completed but the payee says they do not see it, share the transaction hash so they can verify it on the corresponding chain's block explorer.

## "I'm an employee/contractor and I missed a pay cycle"

Cycles only execute if your onboarding is complete (invite code claimed, email verified, wallet connected). If you joined mid-cycle, your first payout will be pro-rated on the next cycle close.

If you have completed onboarding and a cycle still passed without pay, contact your employer first. They can see your status in their dashboard. If the issue is on Zebec's end, escalate to <support@zebec.io>.


# Glossary

Glossary of common Zebec Enterprise Payroll terms.

| Term                          | Definition                                                                                                                                                                             |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Accrued pay**               | Pay you have earned but have not withdrawn yet. With streaming payroll, this ticks up by the second. Contrast this to traditional fiat payments that take 1-3 business days to settle. |
| **Block explorer**            | A public website that lets you look up any transaction or wallet address on a chain. Examples: Solscan (Solana), Stellar Expert (Stellar).                                             |
| **Chain**                     | Short for blockchain. The underlying network where stablecoins move (Solana, Stellar, Sui, etc.).                                                                                      |
| **Custodial / non-custodial** | Custodial means someone else holds your crypto for you (like a bank). Non-custodial means you hold it directly. Zebec is non-custodial.                                                |
| **Gas**                       | The network fee paid to process a transaction on a blockchain. On many chains like Solana and Stellar, gas is fractions of a cent.                                                     |
| **KYB / KYC**                 | Know Your Business / Know Your Customer. Compliance checks to verify identity.                                                                                                         |
| **Multi-sig**                 | Multiple signatures required to authorize a transaction. Used for treasury security.                                                                                                   |
| **Seed phrase**               | The 12 or 24 words that back up your wallet. Whoever has the seed phrase controls the wallet. Treat it like "the keys to the kingdom".                                                 |
| **Settlement**                | The moment a payment becomes final on-chain. On Solana this takes \~400 ms; on Stellar \~5 s. Compare to traditional banking, where settlement takes 1–3 business days.                |
| **Settlement token**          | The specific stablecoin used for a payroll workspace (USDC, USDT, EURAU, etc.). The enterprise sets this.                                                                              |
| **Signing wallet**            | The wallet that authorizes payroll runs for an enterprise. Distinct from recipient wallets.                                                                                            |
| **Stablecoin**                | A crypto asset designed to hold a stable value relative to a real-world currency. Examples: USDC = $1 USD. EURAU = €1.                                                                 |
| **Streaming payroll**         | Pay accrues continuously, by the second, rather than in lump sums at cycle close.                                                                                                      |
| **Treasury**                  | The on-chain wallet an enterprise funds to disburse payroll from.                                                                                                                      |
| **Wallet**                    | Software (or hardware) that holds your crypto. Zebec Ent. Payroll supports and expanding list of wallets across chains, like Phantom, Freighter, etc.                                  |
| **Wallet address**            | The public identifier of a wallet, like an account number. You can share it freely; it is like sharing your email address, not your password.                                          |


# Overview

Zebec products — cards, yield, fiat off-ramps, streaming payments, and payroll — and the applications each is available in.

Zebec products are distributed through three applications: the **Web SuperApp**, the **Mobile SuperApp**, and **Enterprise Payroll**. Each product page shows a badge indicating where it is available.

See [Supported chains](/zebec-product-information/supported-chains) for the networks Zebec runs on.

## Product categories

* [**Cards**](/zebec-product-information/cards) — Silver, Carbon, and Black card programs powered by Mastercard.
  * [Silver Card](/zebec-product-information/cards/silver-card)
  * [Carbon Card](/zebec-product-information/cards/carbon-card)
  * [Black Card](/zebec-product-information/cards/black-card)
  * [Availability and restrictions](/zebec-product-information/cards/availability-and-restrictions)
* [**Yield**](/zebec-product-information/yield) — yield products for individuals and enterprises.
  * [Dolomite](/zebec-product-information/yield/dolomite)
  * [Blend](/zebec-product-information/yield/blend)
  * [USX / Solstice](/zebec-product-information/yield/usx-solstice)
* [**Fiat off-ramps**](/zebec-product-information/fiat-off-ramps) — convert crypto to fiat.
  * [tGBP](/zebec-product-information/fiat-off-ramps/tgbp)
  * [MoneyGram](/zebec-product-information/fiat-off-ramps/moneygram)
* [**Streaming payments**](/zebec-product-information/streaming-payments) — real-time, per-second payment streams.
* [**Payroll**](/zebec-product-information/payroll) — stablecoin payroll for enterprises.

## Availability by application

| Product                       | 🌐 Web SuperApp | 📱 Mobile SuperApp | 🏢 Enterprise Payroll |
| ----------------------------- | :-------------: | :----------------: | :-------------------: |
| Cards (Silver, Carbon, Black) |        ✅        |          ✅         |           ✅           |
| Yield — Dolomite              |        ✅        |          —         |           —           |
| Yield — Blend                 |        ✅        |          —         |           —           |
| Yield — USX / Solstice        |        —        |          —         |           ✅           |
| Fiat off-ramps — tGBP         |        ✅        |          —         |           —           |
| Fiat off-ramps — MoneyGram    |        —        |          —         |           ✅           |
| Streaming payments            |        ✅        |          ✅         |           —           |
| Payroll                       |        —        |          —         |           ✅           |


# Supported chains

The blockchain networks Zebec supports across cards, streaming payments, and payroll.

Zebec supports the following networks. All are live on mainnet.

| Chain           | Identifier  | Network | Symbol |
| --------------- | ----------- | ------- | ------ |
| Aleo            | `ALEO`      | Mainnet | ALEO   |
| Algorand        | `ALGORAND`  | Mainnet | ALGO   |
| Base            | `BASE`      | Mainnet | BASE   |
| BNB Smart Chain | `BINANCE`   | Mainnet | BSC    |
| Bittensor       | `BITTENSOR` | Mainnet | TAO    |
| Boba Network    | `BOBA`      | Mainnet | BOBA   |
| Canton          | `CANTON`    | Mainnet | CC     |
| Dash            | `DASH`      | Mainnet | DASH   |
| Ethereum        | `ETHEREUM`  | Mainnet | ETH    |
| NEAR Protocol   | `NEAR`      | Mainnet | NEAR   |
| OctaSpace       | `OCTASPACE` | Mainnet | OCTA   |
| Odyssey         | `ODYSSEY`   | Mainnet | DIONE  |
| Polygon         | `POLYGON`   | Mainnet | MATIC  |
| Quai Network    | `QUAI`      | Mainnet | QUAI   |
| Solana          | `SOLANA`    | Mainnet | SOL    |
| Stellar         | `STELLAR`   | Mainnet | XLM    |
| Sui             | `SUI`       | Mainnet | SUI    |
| TON             | `TON`       | Mainnet | TON    |
| XDB Chain       | `XDB`       | Mainnet | XDB    |
| XRP Ledger      | `XRPL`      | Mainnet | XRP    |
| Zano            | `ZANO`      | Mainnet | ZANO   |

The **Identifier** column is the value used by the [Partner API](/developer-docs/partner-api) and [SDKs](/developer-docs/sdks).

{% hint style="info" %}
We keep expanding this list. Last updated 6th August 2026.
{% endhint %}

## Availability by product

Not every product runs on every chain. For details, see:

* [Supported chains and assets](/zebec-application-suite/enterprise-payroll/supported-chains-and-assets) for payroll wallets and settlement tokens.
* [Availability and restrictions](/zebec-product-information/cards/availability-and-restrictions) for cards.

To request a chain that is not listed, contact <support@zebec.io>.


# Cards

Overview of Zebec card programs — available in the Web SuperApp, Mobile SuperApp, and Enterprise Payroll.

Zebec offers multiple card programs so users can choose the one that fits their spending habits, location, and custody preferences. All cards are powered by the Mastercard network and work anywhere Mastercard is accepted (subject to regional restrictions).

{% hint style="info" %}
**Available in:** 🌐 [Web SuperApp](/zebec-application-suite/web-superapp) · 📱 [Mobile SuperApp](/zebec-application-suite/mobile-superapp) · 🏢 [Enterprise Payroll](/zebec-application-suite/enterprise-payroll)
{% endhint %}

## Card programs

| Card       | Type               | Best for                                             | Primary currency | Availability                  |
| ---------- | ------------------ | ---------------------------------------------------- | ---------------- | ----------------------------- |
| **Silver** | Single-use prepaid | One-off purchases, disposable online spending        | USD / EUR / GBP  | US/Canada, UK, EU             |
| **Carbon** | Reloadable prepaid | Everyday spending, subscriptions, recurring payments | USD              | 90+ countries                 |
| **Black**  | Premium reloadable | High spenders, enterprises, invited users            | USD / EUR        | Global (subject to sanctions) |

## Quick comparison

| Feature                | Silver                 | Carbon                           | Black                                  |
| ---------------------- | ---------------------- | -------------------------------- | -------------------------------------- |
| Reloadable             | No                     | Yes                              | Yes                                    |
| Apple Pay / Google Pay | Yes                    | Yes                              | Yes                                    |
| Card number            | New with each issuance | Same card number                 | Same card number                       |
| Typical load limit     | $10 – $1,000           | Up to $1,000 per load            | No published cap                       |
| Daily spend            | Up to $1,000           | Up to $10,000                    | Higher / enterprise limits             |
| Fees                   | No sign-up/tx fees     | No-fee promo (subject to change) | Activation, top-up, monthly fees apply |

## Which card should I pick?

* **Silver** — if you want a quick, single-use card for a specific purchase and prefer a fresh card number each time.
* **Carbon** — if you want a reloadable card for daily spending and subscriptions.
* **Black** — if you need higher limits, enterprise features, or have received an invitation.

{% hint style="warning" %}
Card availability depends on your country of residence and local regulations. See [Card availability and restrictions](/zebec-product-information/cards/availability-and-restrictions) for issuance regions and prohibited-use countries.
{% endhint %}

## Getting a card

1. Open the [Web SuperApp](https://superapp.zebec.io) or [Mobile SuperApp](/zebec-application-suite/mobile-superapp). Payees in an enterprise workspace can also receive a card through [Enterprise Payroll](/zebec-application-suite/enterprise-payroll/cards-for-payees).
2. Go to the Cards section and choose a program, depending on your country of residence.
3. Fund the card from your wallet and start spending.

For developers and partners who want to issue Carbon cards inside their own app, see the [Partner API](/developer-docs/partner-api).


# Silver Card

Zebec Silver Card — single-use prepaid card for USD, EUR, and GBP spending.

The **Zebec Silver Card** is a single-use, non-custodial prepaid card designed for quick, disposable spending anywhere Mastercard is accepted.

## Key features

* **Single-use card number** — a new card is generated for each load.
* **Multi-currency spending** — USD, EUR, and GBP unlocked.
* **Fund from crypto** — deposit from 180+ cryptocurrencies.
* **Apple Pay & Google Pay** supported.
* **No sign-up fees, no transaction fees.**

## Limits

| Limit                  | Value                         |
| ---------------------- | ----------------------------- |
| Minimum load           | $10                           |
| Maximum load per card  | $1,000                        |
| Cumulative daily spend | Up to $10,000 within 24 hours |

You can create multiple Silver cards; the daily aggregate spend across all active cards is capped at $10,000.

## Availability

Silver cards are available to residents of supported regions only:

* **Silver USD** — US, Canada, Puerto Rico, US Virgin Islands, Guam, American Samoa, Northern Mariana Islands
* **Silver GBP** — UK, Gibraltar, Guernsey, Isle of Man, Jersey
* **Silver EUR** — supported EU countries

For a full list of issuance countries and currency mapping, see [Card availability and restrictions](/zebec-product-information/cards/availability-and-restrictions).

## Fees

* No sign-up fee
* No transaction fee
* Variable FX fees may apply when spending outside the card currency
* Crypto-to-fiat conversion rates vary by token/currency

## How to get a Silver Card

1. Open the [Zebec SuperApp](https://superapp.zebec.io) or download the [mobile SuperApp](/zebec-application-suite/mobile-superapp).
2. Select **Silver Card** in the Cards section.
3. Fill in some information about your country of residence.
4. Load between $10 and $1,000.
5. Use the card number for your purchase.

{% hint style="info" %}
If you need a reloadable card or higher limits, consider the [Carbon Card](/zebec-product-information/cards/carbon-card) or [Black Card](/zebec-product-information/cards/black-card).
{% endhint %}


# Carbon Card

Zebec Carbon Card — reloadable USD prepaid card for everyday spending.

The **Zebec Carbon Card** is a reloadable, USD-denominated prepaid card for everyday spending, subscriptions, and recurring payments.

## Key features

* **Reloadable anytime** — top up on demand from crypto.
* **Same card number** — ideal for everyday expenses and repeat merchants.
* **Fund with 180+ tokens across 21+ blockchains.**
* **Apple Pay & Google Pay** supported.
* **Stake $ZBCN** for extra rewards.

## Limits

| Limit                | Value   |
| -------------------- | ------- |
| Minimum load         | $10     |
| Per-load limit       | $10,000 |
| Daily spending limit | $10,000 |

## Availability

Carbon is available in two flavors:

* **Carbon USD Regional** — for US, Canada & US Territories residents; 2FA tokens delivered by SMS.
* **Carbon USD International** — for residents of approved countries outside the US/Canada; 2FA tokens delivered by email.

The international program is offered in over 70+ countries around the world.

For the full country list, see [Card availability and restrictions](/zebec-product-information/cards/availability-and-restrictions).

## Fees

* No sign-up fee
* No transaction fee
* Variable FX fees may apply
* Crypto conversion rates vary by token

## How to get a Carbon Card

1. Open the [Zebec SuperApp](https://superapp.zebec.io) or download the [mobile SuperApp](/zebec-application-suite/mobile-superapp).
2. Select **Carbon Card**.
3. Fill in some information about your country of residence.
4. Load the card and start spending.

## Partner API

Developers and businesses can issue and top up Carbon cards on behalf of their users through the [Partner API](/developer-docs/partner-api). The API supports:

* Card metadata lookups
* Transaction history
* Quote, preflight, and submission of top-ups

{% hint style="info" %}
For higher limits or enterprise programs, see the [Black Card](/zebec-product-information/cards/black-card).
{% endhint %}


# Black Card

Zebec Black Card — premium reloadable card with higher limits for enterprises and invited users.

The **Zebec Black Card** is Zebec’s premium reloadable card. It is aimed at high spenders, enterprise users, and invited members who need higher limits and a richer feature set.

## Key features

* **Premium reloadable card** with $50,000 / day load cap.
* **180+ cryptocurrencies** accepted for funding.
* **Apple Pay & Google Pay** supported.
* **Same card number** for all transactions.
* **Stake $ZBCN** for extra rewards.

## Limits

| Limit                | Value   |
| -------------------- | ------- |
| Minimum load         | $10     |
| Per-load limit       | $10,000 |
| Daily spending limit | $50,000 |

## Availability

Access is by **invitation or enterprise onboarding**. Contact Zebec to request access.

## Fees

* No sign-up fee
* No transaction fee
* Variable FX fees may apply when spending outside the card currency
* Crypto-to-fiat conversion rates vary by token/currency

## How to get a Black Card

1. Open the [Zebec SuperApp](https://superapp.zebec.io) or download the [mobile SuperApp](/zebec-application-suite/mobile-superapp).
2. Accept an invitation or unlock through in-app mechanisms (e.g. staked $ZBCN levels).
3. Fill in some information about your country of residence.
4. Fund the card and start spending.

{% hint style="info" %}
For enterprise card programs, contact Zebec at <support@zebec.io>.
{% endhint %}


# Availability and restrictions

Where Zebec cards can be issued, and where they cannot be used.

Not every Zebec card program is available in every country. This page explains where cards can be issued and where card transactions are prohibited.

{% hint style="info" %}
**Issue location** = the country where a user declares their home address and applies for a card.\
**Use location** = the country where the cardholder attempts to make a purchase.
{% endhint %}

## Where cards can be issued

### Silver programs

Silver cards are **regional programs**. Apple Pay / Google Pay verification tokens are sent by SMS, so a local phone number in the matching region is required.

#### Silver USD

For users physically in:

* United States
* Canada
* Puerto Rico
* U.S. Virgin Islands
* Guam
* American Samoa
* Northern Mariana Islands

#### Silver GBP

For users physically in:

* United Kingdom
* Gibraltar
* Guernsey
* Isle of Man
* Jersey

#### Silver EUR

For users physically in supported EU countries (all EU member states except Malta):

| Country        | ISO | Country     | ISO |
| -------------- | --- | ----------- | --- |
| Austria        | AT  | Ireland     | IE  |
| Belgium        | BE  | Italy       | IT  |
| Bulgaria       | BG  | Latvia      | LV  |
| Croatia        | HR  | Lithuania   | LT  |
| Cyprus         | CY  | Luxembourg  | LU  |
| Czech Republic | CZ  | Netherlands | NL  |
| Denmark        | DK  | Poland      | PL  |
| Estonia        | EE  | Portugal    | PT  |
| Finland        | FI  | Romania     | RO  |
| France         | FR  | Slovakia    | SK  |
| Germany        | DE  | Slovenia    | SI  |
| Greece         | GR  | Spain       | ES  |
| Hungary        | HU  | Sweden      | SE  |

### Carbon programs

Carbon cards come in both **regional** and **international** programs.

* **Carbon USD Regional** — for US/Canada residents; verification tokens sent by SMS.
* **Carbon USD International** — for approved countries outside the US/Canada; verification tokens sent by email.

#### Carbon — supported countries

| Country            | ISO | Country                  | ISO |
| ------------------ | --- | ------------------------ | --- |
| Algeria            | DZ  | Lithuania                | LT  |
| American Samoa     | AS  | Luxembourg               | LU  |
| Angola             | AO  | Malawi                   | MW  |
| Argentina          | AR  | Malaysia                 | MY  |
| Australia          | AU  | Malta                    | MT  |
| Austria            | AT  | Mexico                   | MX  |
| Belgium            | BE  | Morocco                  | MA  |
| Bolivia            | BO  | Mozambique               | MZ  |
| Brazil             | BR  | Nepal                    | NP  |
| Cameroon           | CM  | Netherlands              | NL  |
| Canada             | CA  | Nigeria                  | NG  |
| Chile              | CL  | Northern Mariana Islands | MP  |
| Costa Rica         | CR  | Norway                   | NO  |
| Cyprus             | CY  | Oman                     | OM  |
| Czech Republic     | CZ  | Pakistan                 | PK  |
| Denmark            | DK  | Papua New Guinea         | PG  |
| Ecuador            | EC  | Paraguay                 | PY  |
| Egypt              | EG  | Peru                     | PE  |
| El Salvador        | SV  | Philippines              | PH  |
| Estonia            | EE  | Poland                   | PL  |
| Finland            | FI  | Portugal                 | PT  |
| France             | FR  | Puerto Rico              | PR  |
| Georgia            | GE  | Qatar                    | QA  |
| Germany            | DE  | Romania                  | RO  |
| Ghana              | GH  | Saudi Arabia             | SA  |
| Greece             | GR  | Singapore                | SG  |
| Guam               | GU  | Slovakia                 | SK  |
| Guatemala          | GT  | Slovenia                 | SI  |
| Honduras           | HN  | Spain                    | ES  |
| Hungary            | HU  | Sweden                   | SE  |
| Iceland            | IS  | Taiwan                   | TW  |
| Ireland            | IE  | Trinidad and Tobago      | TT  |
| Italy              | IT  | Turkey                   | TR  |
| Jamaica            | JM  | U.S. Virgin Islands      | VI  |
| Japan              | JP  | United Kingdom           | GB  |
| Jordan             | JO  | United States            | US  |
| Kenya              | KE  | Uruguay                  | UY  |
| Korea, Republic of | KR  | Vanuatu                  | VU  |
| Kuwait             | KW  | Zambia                   | ZM  |

## Examples by user location

| User location  | Cards available                      |
| -------------- | ------------------------------------ |
| United States  | Carbon USD, Silver USD               |
| United Kingdom | Carbon USD International, Silver GBP |
| Greece         | Carbon USD International, Silver EUR |
| Uruguay        | Carbon USD International             |
| Kenya          | Carbon USD International             |

## Where cards cannot be used

For compliance reasons, Zebec cards cannot be used in the following countries. This list is updated regularly.

* Afghanistan
* Belarus
* Central African Republic
* China
* Congo, Democratic Republic of
* Cuba
* Eritrea
* Iran, Islamic Republic of
* Iraq
* Korea, People's Republic of
* Lebanon
* Libya
* Mali
* Myanmar
* Nicaragua
* Russian Federation
* Somalia
* South Sudan
* Sudan
* Syrian Arab Republic
* Venezuela
* Yemen
* Zimbabwe

Zebec and its card partners check device origin IP, declared address, and other signals to enforce these restrictions.

## Need help?

If your country is not listed or you are unsure which program applies, contact <support@zebec.io>.


# Yield

Yield products available across Zebec applications.

Zebec lets users put idle assets to work through integrated yield products. Availability varies by product, application, and jurisdiction.

## Available products

| Product                                                             | Availability          | Description                                                        |
| ------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------ |
| [**Dolomite**](/zebec-product-information/yield/dolomite)           | 🌐 Web SuperApp       | Yield product offered in partnership with World Liberty Finance.   |
| [**Blend**](/zebec-product-information/yield/blend)                 | 🌐 Web SuperApp       | Yield infrastructure with isolated accounts, RWA and DeFi sources. |
| [**USX / Solstice**](/zebec-product-information/yield/usx-solstice) | 🏢 Enterprise Payroll | Yield product for enterprise payroll clients, powered by Solstice. |

{% hint style="warning" %}
Yield products involve smart-contract and market risk. Make sure you understand the terms of each product before depositing.
{% endhint %}


# Dolomite

Dolomite yield product in the Zebec Web SuperApp.

Dolomite is a yield product available inside the Zebec Web SuperApp, offered in partnership with **WLFI**.

{% hint style="info" %}
**Available in:** 🌐 [Web SuperApp](/zebec-application-suite/web-superapp)
{% endhint %}

## Availability

* **Distribution channel:** Web SuperApp
* **Audience:** Individual SuperApp users

{% hint style="warning" %}
**Coming Soon**

Detailed product mechanics, supported assets, APYs, and step-by-step guides for Dolomite are not yet published. This page will be updated once the integration is live and public documentation is available.
{% endhint %}

## What we know

* Dolomite is integrated as a yield option within the Zebec SuperApp.
* It is delivered in partnership with World Liberty Finance.
* For the latest public information, keep an eye on [Zebec's Twitter account](https://mobile.twitter.com/Zebec_HQ) or the Web SuperApp itself.

## Related

* [Yield products overview](/zebec-product-information/yield)
* [Blend](/zebec-product-information/yield/blend)


# Blend

Blend - Earn infrastructure built into Zebec SuperApp for idle balance yields

**Earn, built into Zebec.**

Blend is the yield infrastructure powering the Earn experience inside the Zebec SuperApp. It lets your idle balances earn yield from two kinds of sources, tokenized real-world assets (RWA) and curated on-chain markets, without your funds ever leaving your control.

{% hint style="info" %}
**Available in:** 🌐 [Web SuperApp](/zebec-application-suite/web-superapp)
{% endhint %}

## What is Blend?

Blend is embedded savings infrastructure for fintechs, neobanks and apps. Instead of building yield products from scratch, platforms like Zebec integrate Blend through a single API and offer their users a complete earn experience under their own brand.

Blend was built by the team behind the oracle for Polymarket and the bridge for Uniswap: infrastructure that has moved over $40 billion.

## How it works

### 1. Your own isolated account

When you activate Earn, Blend deploys a dedicated smart account for you, yours alone. Funds are never pooled with other users. You are the only signer.

### 2. Two tiers of yield sources

Your balance is deployed into sources across two tiers, depending on the strategy you choose:

* **RWA tier**: Tokenized real-world assets from established institutions, such as money market funds backed by US Treasuries. Live today: Agora (with VanEck as fund manager), among others.
* **DeFi tier**: A curated set of audited, on-chain yield markets. Every source is independently classified by risk profile, TVL and audit history before it enters the lineup.

### 3. Earn while you hold

Yield accrues to your account automatically. Your balance keeps working in the background while you use the SuperApp as usual.

### 4. Withdraw anytime

Your funds remain yours and remain liquid. Deposits and withdrawals settle on-chain, and because your account is self-owned, you can always reach your funds, even directly through [safe.global](https://safe.global), independently of any interface.

## Why it's different

### Non-custodial by design

Most yield products pool user funds into a shared pot. Blend does the opposite: every user gets an isolated account where they are the sole signer. Blend never holds or pools your money.

### Screening built in

Every account includes sanctions and AML screening with full reporting. Compliance is part of the architecture, not an afterthought.

### Beyond DeFi: institutional-grade RWA

Blend is one of the few platforms where tokenized funds from tier-1 asset managers sit alongside curated DeFi markets, so strategies can range from conservative treasury-backed yield to higher-yielding on-chain markets.

### Risk-classified sources

Yield never comes from a black box. Each source in the lineup is audited and classified by an independent third party before your funds can touch it.

### Audited infrastructure

Blend's contracts have been audited by Cantina, Sherlock and Zellic.

## Key benefits

| Benefit          | What it means                                                           |
| ---------------- | ----------------------------------------------------------------------- |
| **Ownership**    | Your account, your keys, you are the only signer                        |
| **Segregation**  | Funds never pooled with other users                                     |
| **Liquidity**    | Withdraw anytime, on-chain                                              |
| **Range**        | From treasury-backed RWA funds to curated DeFi markets, by risk profile |
| **Transparency** | Positions and flows verifiable on-chain                                 |
| **Compliance**   | Per-account screening and reporting built in                            |
| **Security**     | Audited by Cantina, Sherlock and Zellic                                 |

## Getting started with Blend

1. **Access the Web SuperApp**: Navigate to [superapp.zebec.io](https://superapp.zebec.io)
2. **Connect your wallet**: Complete the [setup process](/zebec-application-suite/web-superapp/getting-started)
3. **Navigate to Earn**: Find the Earn or Yield section in the app
4. **Choose your strategy**: Select between RWA and DeFi tiers based on your risk preference
5. **Deposit funds**: Transfer idle balances to start earning
6. **Monitor returns**: Track your yield accumulation in real-time

{% hint style="info" %}
Your funds remain liquid and can be withdrawn at any time. All transactions settle on-chain for complete transparency.
{% endhint %}

## Availability

* **Distribution channel**: Web SuperApp
* **Audience**: Individual SuperApp users
* **Supported assets**: Various stablecoins and cryptocurrencies (check current list in-app)
* **Minimum deposit**: Check current requirements in the SuperApp

## Security considerations

* Smart contracts audited by multiple firms
* Non-custodial architecture - you maintain full control
* Isolated accounts prevent cross-contamination
* AML/KYC screening integrated
* Transparent on-chain operations

## Learn more

* **Website**: [blend.money](https://blend.money)
* **Documentation**: [docs.blend.money](https://docs.blend.money)
* **In-app support**: Available through the Zebec SuperApp

## Related products

* [Yield products overview](/zebec-product-information/yield)
* [Dolomite](/zebec-product-information/yield/dolomite) - Alternative yield option
* [USX / Solstice](/zebec-product-information/yield/usx-solstice) - Additional yield products


# USX / Solstice

USX / Solstice yield product available through Zebec Enterprise Payroll.

**USX / Solstice** is a yield product available to enterprises using **Zebec Enterprise Payroll**.

{% hint style="info" %}
**Available in:** 🏢 [Enterprise Payroll](/zebec-application-suite/enterprise-payroll)
{% endhint %}

## Availability

* **Distribution channel:** Enterprise Payroll
* **Audience:** Enterprise treasury managers and payroll clients

{% hint style="warning" %}
**Coming Soon**

Detailed documentation for the USX / Solstice integration — including supported assets, yield mechanics, onboarding steps, and risk disclosures — is not yet public. This page will be updated once the integration is live and documentation is released.
{% endhint %}

## Background

* **Solstice** is a yield layer, and **USX** is a stablecoin powering real yield on Solana.
* Zebec is integrating USX / Solstice as a yield option for enterprise payroll clients.

For background on Solstice and USX, see [solstice.finance/usx](https://solstice.finance/usx).

## Next steps

Contact your Zebec account manager or <support@zebec.io> to learn when USX / Solstice yield will be available for your workspace.


# Fiat off-ramps

Fiat off-ramps available across Zebec applications.

Zebec lets users convert crypto balances into fiat through a global partner network. Available off-ramp methods depend on the application and your location.

## Available off-ramps

| Off-ramp                                                             | Destination                               | Availability          |
| -------------------------------------------------------------------- | ----------------------------------------- | --------------------- |
| [**tGBP**](/zebec-product-information/fiat-off-ramps/tgbp)           | UK bank account                           | 🌐 Web SuperApp       |
| [**MoneyGram**](/zebec-product-information/fiat-off-ramps/moneygram) | Local currency cash at 450,000+ locations | 🏢 Enterprise Payroll |

## General notes

* Off-ramp availability is subject to local regulations and partner coverage.
* Fees, limits, and processing times are set by the relevant partner rail.
* Make sure your connected wallet has enough balance to cover both the off-ramp amount and any network fees.


# tGBP

Off-ramp from the Zebec Web SuperApp to a UK bank account via tGBP.

**tGBP** (Tokenised GBP) is a UK-based pound sterling stablecoin issued by **BCP Technologies**, an FCA-registered firm. Zebec has added native support for tGBP, making it possible to hold, transfer, and spend pound-backed value inside the Zebec ecosystem.

{% hint style="info" %}
**Available in:** 🌐 [Web SuperApp](/zebec-application-suite/web-superapp)
{% endhint %}

## What you can do with tGBP

* Hold tGBP in your Zebec wallet.
* Spend tGBP via Zebec Mastercard-powered cards.
* Stream tGBP payments in real time.
* Off-ramp tGBP to a UK bank account.

## Availability

* **Distribution channel:** Web SuperApp
* **Destination:** UK bank account
* **Status:** Live for SuperApp users. Enterprise payroll support is planned for a future release.

## How it works

1. Deposit or acquire tGBP in the Zebec Web SuperApp.
2. Choose the tGBP off-ramp option.
3. Connect or confirm your UK bank account details.
4. Initiate the transfer. Settlement timing depends on the partner rail.

{% hint style="info" %}
For more background on the tGBP integration, see the [Zebec blog announcement](https://zebec.io/blog/zebec-adds-native-support-for-tgbp-bringing-the-first-uk-based-pound-stablecoin-to-payroll-and-payments).
{% endhint %}

## Fees and limits

Specific fees, minimum/maximum amounts, and processing times are set by the tGBP issuer and partner rails. Check the latest values inside the Web SuperApp before confirming a transfer.

## Supported regions

tGBP off-ramping is intended for users with a verified UK bank account. Availability outside the UK is limited by issuer and regulatory requirements.


# MoneyGram

MoneyGram remittance off-ramp for Zebec Enterprise Payroll.

Zebec Enterprise Payroll can connect to **MoneyGram's global remittance network**, allowing payees to convert stablecoin pay into local currency at MoneyGram locations worldwide.

{% hint style="info" %}
**Available in:** 🏢 [Enterprise Payroll](/zebec-application-suite/enterprise-payroll)
{% endhint %}

## Availability

* **Distribution channel:** Enterprise Payroll
* **Destination:** Local currency cash at MoneyGram locations
* **Network:** 450,000+ locations across 170+ countries

## How it works

1. An enterprise runs payroll through Zebec on a supported chain (for example, Stellar).
2. The employee or contractor receives stablecoins in their wallet.
3. Through the integrated MoneyGram / Stellar rail, they can off-ramp to cash at a nearby MoneyGram location.

This is especially useful for:

* Recipients without traditional bank accounts.
* Fast cross-border payouts.
* Countries with limited banking infrastructure.

{% hint style="warning" %}
**Coming Soon**

Step-by-step instructions, fees, limits, and supported corridors for the MoneyGram integration are not yet published. This page will be updated once the integration is live in the Enterprise Payroll dashboard.
{% endhint %}

## Related

* [Zebec × Stellar payroll announcement](https://zebec.io/blog/zebec-brings-streaming-payroll-to-stellar)
* [MoneyGram Ramps developer docs](https://developer.moneygram.com/moneygram-developer/docs/integrate-moneygram-ramps)
* [Fiat off-ramps overview](/zebec-product-information/fiat-off-ramps)


# Streaming payments

Real-time, per-second streaming payments in the Zebec SuperApps.

**Streaming payments** let money flow continuously — by the second — instead of in lump sums. A sender opens a stream, and the recipient's balance grows in real time until the stream is paused, cancelled, or completed.

{% hint style="info" %}
**Available in:** 🌐 [Web SuperApp](/zebec-application-suite/web-superapp) · 📱 [Mobile SuperApp](/zebec-application-suite/mobile-superapp)
{% endhint %}

## What you can do

* **Send** a continuous payment stream to any wallet address.
* **Receive** funds that accrue by the second and withdraw them at any time.
* **Pause, resume, or cancel** streams at any point.

{% hint style="warning" %}
**Coming Soon**

Step-by-step streaming guides for the SuperApps are not yet published. This page will be updated when they are available.
{% endhint %}

## Related

* [Streaming SDK](/developer-docs/sdks/streaming-sdk) — for developers integrating streaming payments.
* [Streaming payroll](/zebec-application-suite/enterprise-payroll/streaming-payroll) — streaming applied to enterprise payroll.


# Payroll

Zebec Payroll — stablecoin payroll for enterprises, available in the Enterprise Payroll application.

**Zebec Payroll** lets enterprises pay employees and contractors globally in stablecoins — settling in seconds and, optionally, streaming pay by the second.

{% hint style="info" %}
**Available in:** 🏢 [Enterprise Payroll](/zebec-application-suite/enterprise-payroll)
{% endhint %}

## What it does

* Enterprises fund an on-chain treasury wallet with stablecoins.
* Zebec disburses pay directly to employee and contractor wallets.
* Recipients can withdraw pay as it accrues or load it onto a Zebec card.

## Documentation

The full payroll guide lives in the Enterprise Payroll user guide:

* [Enterprise Payroll overview](/zebec-application-suite/enterprise-payroll)
* [Getting started](/zebec-application-suite/enterprise-payroll/getting-started)
* [Running payroll](/zebec-application-suite/enterprise-payroll/running-payroll)
* [Streaming payroll](/zebec-application-suite/enterprise-payroll/streaming-payroll)
* [Cards for payees](/zebec-application-suite/enterprise-payroll/cards-for-payees)

## Related products

* [USX / Solstice yield](/zebec-product-information/yield/usx-solstice)
* [MoneyGram off-ramp](/zebec-product-information/fiat-off-ramps/moneygram)


# Overview

Developer documentation for Zebec SDKs and APIs.

This section is for engineers integrating Zebec into their own applications.

## What is available

* **SDKs** — Zebec provides SDKs for card issuance, streaming, staking, and other products across multiple chains.
* **Partner API** — a B2B surface for partners issuing Carbon cards, topping up cards, and handling end-user 2FA on behalf of their users.

## SDKs

* [Card Issuance SDK](/developer-docs/sdks/card-issuance-sdk)
* [Streaming SDK](/developer-docs/sdks/streaming-sdk)
* [Staking SDK](/developer-docs/sdks/staking-sdk)

## Partner API

* [Overview](/developer-docs/partner-api)
* [Authentication](/developer-docs/partner-api/authentication)
* [Cards](/developer-docs/partner-api/cards)
* [Top-up flow](/developer-docs/partner-api/topup-flow)

{% hint style="info" %}
For the live Partner API schemas, see the Swagger UI at <https://dev-super.api.zebec.io/api/partner>.
{% endhint %}


# SDKs

Zebec SDKs for card issuance, streaming, staking, and more.

Zebec offers a growing set of SDKs for different chains and product surfaces.

## Available SDKs

| SDK                                                         | Status      | Description                                            |
| ----------------------------------------------------------- | ----------- | ------------------------------------------------------ |
| [Card Issuance SDK](/developer-docs/sdks/card-issuance-sdk) | Coming Soon | Issue and manage Zebec cards inside your app.          |
| [Streaming SDK](/developer-docs/sdks/streaming-sdk)         | Coming Soon | Program real-time payment streams on supported chains. |
| [Staking SDK](/developer-docs/sdks/staking-sdk)             | Coming Soon | Integrate $ZBCN staking and reward flows.              |

{% hint style="warning" %}
Detailed installation, configuration, and API references will be added as the SDKs are finalized and published.
{% endhint %}

## Getting help

If you need early access or have integration questions, contact <support@zebec.io> or your Zebec partner engineer.


# Card Issuance SDK

Zebec Card Issuance SDK - integrate card issuance into your app.

The Card Issuance SDK lets developers embed Zebec card creation and management into their own applications.

## Availability

{% hint style="warning" %}
**Coming Soon**

The Card Issuance SDK is not yet publicly documented. This page will be updated with installation instructions, supported environments, and API reference once available.
{% endhint %}

## Related

* [Partner API](/developer-docs/partner-api) - for Carbon card top-ups and metadata today.
* [Silver, Carbon, and Black card user guides](/zebec-product-information/cards)


# Streaming SDK

Zebec Streaming SDK - programmable real-time payment streams.

The Streaming SDK lets developers create, update, pause, resume, and cancel real-time payment streams on supported blockchains.

## Availability

{% hint style="warning" %}
**Coming Soon**

The Streaming SDK documentation is being updated for the current platform. This page will include installation, chain support, and method reference once finalized.
{% endhint %}

## Related

* [Enterprise Payroll streaming guide](/zebec-application-suite/enterprise-payroll/streaming-payroll)
* [Partner API overview](/developer-docs/partner-api)


# Staking SDK

Zebec Staking SDK - integrate $ZBCN staking and rewards.

The Staking SDK lets developers integrate $ZBCN staking, reward tracking, and tier calculations into their applications.

## Availability

{% hint style="warning" %}
**Coming Soon**

The Staking SDK is not yet publicly documented. This page will be updated with installation instructions, supported chains, and API reference once available.
{% endhint %}

## Related

* [Zebec tokenomics blog](https://zebec.io/blog/zebec-network-zbcn-tokenomics)
* [Web SuperApp yield products](/zebec-product-information/yield)


# Partner API

Zebec Partner API v1 — issue Carbon cards and top them up on behalf of your users.

The **Zebec Partner API (v1)** is a B2B surface for partners integrating Carbon card issuance, top-ups, and end-user 2FA on behalf of their users.

**Base URLs**

* Sandbox: `https://dev-super.api.zebec.io/`
* PROD: `https://super.api.zebec.io`

**Swagger UI:** <https://dev-super.api.zebec.io/api/partner>

## What you can do

* Send and verify OTPs for end users under your partner.
* Read Carbon card metadata and transaction history.
* Discover top-up programs, build quotes, and submit signed top-ups.

## Endpoint summary

| Method | Path                             | Purpose                                                    |
| ------ | -------------------------------- | ---------------------------------------------------------- |
| POST   | `/partner/v1/auth/otp/send`      | Send an OTP to a user email                                |
| POST   | `/partner/v1/auth/otp/verify`    | Verify OTP and get a delegation token                      |
| GET    | `/partner/v1/cards`              | Get card metadata (no PAN/CVV)                             |
| GET    | `/partner/v1/cards/transactions` | List card transactions                                     |
| GET    | `/partner/v1/topup/programs`     | Discover available Carbon programs, currencies, and tokens |
| GET    | `/partner/v1/topup/quote`        | Build a top-up quote (2-minute TTL)                        |
| POST   | `/partner/v1/topup/preflight`    | Run preflight checks against a live quote                  |
| POST   | `/partner/v1/topup`              | Submit a signed top-up against a quote                     |
| GET    | `/partner/v1/topup/{orderId}`    | Poll top-up status                                         |

## Guides

* [Authentication](/developer-docs/partner-api/authentication)
* [Cards](/developer-docs/partner-api/cards)
* [Top-up flow](/developer-docs/partner-api/topup-flow)

## Getting access

Partner API credentials are issued by Zebec admin. Contact your Zebec partner engineer or <support@zebec.io> to request access.


# Authentication

Authentication and request signing for the Zebec Partner API.

Partner v1 uses two auth modes:

* **OTP endpoints** (`/partner/v1/auth/otp/*`) use HMAC-SHA256 with a partner credential issued by Zebec admin.
* **Cards and top-up endpoints** use `Authorization: Bearer <accessToken>`, where the token is returned by `POST /partner/v1/auth/otp/verify`.

## HMAC headers for OTP endpoints

| Header          | Value                                                       |
| --------------- | ----------------------------------------------------------- |
| `X-Partner-Key` | Public key ID, e.g. `pk_live_…`                             |
| `X-Timestamp`   | Request time in Unix milliseconds (server tolerates ±5 min) |
| `X-Nonce`       | UUID, unique per request — replay-protected for 10 min      |
| `X-Signature`   | Hex `HMAC_SHA256(secret, stringToSign)`                     |

### stringToSign

```
stringToSign = `${timestamp}\n${METHOD}\n${path}\n${sha256Hex(rawBody)}`
```

* `path` is the full request path including the query string, e.g. `/partner/v1/topup/quote?amount=100&sourceChain=SOLANA`.
* The body is hashed, not included raw, so signatures stay stable for any payload size.
* Empty body uses `sha256Hex('')`.

## Delegated bearer tokens

After verifying the OTP, the response contains an access token.

* Carry the token as `Authorization: Bearer <accessToken>`.
* Tokens expire after **48 hours**.
* Tokens carry the partner, API key, user, and `partner-delegated` scope claims.
* The user is always derived from the token, not supplied in partner requests.

## Scopes

API keys carry a scope set; endpoints declare what they need:

| Scope         | Allows                                                |
| ------------- | ----------------------------------------------------- |
| `auth:otp`    | Send / verify end-user OTP, mint delegation tokens    |
| `cards:read`  | Read card metadata + transactions, poll top-up status |
| `cards:topup` | Quote and submit a Carbon card top-up                 |

Missing scope → `403`. Bad signature / replay / stale timestamp → `401`. Cross-partner reads → `404` (anti-enumeration).

## Example: sending an OTP

```bash
curl -X POST https://dev-super.api.zebec.io/partner/v1/auth/otp/send \
  -H "X-Partner-Key: pk_live_..." \
  -H "X-Timestamp: 1717339200000" \
  -H "X-Nonce: 018f4b24-9f2c-7d2d-9c07-2d5d0f2f2a11" \
  -H "X-Signature: <hmac-signature>" \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com"}'
```

For request/response schemas, see the [Swagger UI](https://dev-super.api.zebec.io/api/partner).


# Cards

Read Carbon card metadata and transactions with the Zebec Partner API.

The Cards endpoints let a partner read card metadata and transaction history for users under their partner scope.

## Endpoints

### Get card metadata

```http
GET /partner/v1/cards
Authorization: Bearer <accessToken>
```

Returns card summary metadata. PAN and CVV are **not** included in the response.

### List card transactions

```http
GET /partner/v1/cards/transactions
Authorization: Bearer <accessToken>
```

Returns a list of card transactions.

## Required scope

Both endpoints require the `cards:read` scope on your partner API key.

## User resolution

The user is derived from the Bearer token returned by `POST /partner/v1/auth/otp/verify`. Do not supply a user identifier in the request path or body.

## Common use cases

* Display a user's card status and balance inside your app.
* Show recent card activity.
* Poll whether a top-up has landed before showing updated balances.

For full schemas and example responses, see the [Swagger UI](https://dev-super.api.zebec.io/api/partner).


# Top-up flow

Top up a Carbon card through the Zebec Partner API.

The top-up flow lets a partner add funds to a user's Carbon card using crypto held in the user's wallet.

## Flow overview

1. **Discover programs** — `GET /partner/v1/topup/programs`
2. **Build a quote** — `GET /partner/v1/topup/quote`
3. **User signs and sends the on-chain transfer** using the quote's payment instructions.
4. **Preflight checks** — `POST /partner/v1/topup/preflight`
5. **Submit the top-up** — `POST /partner/v1/topup`
6. **Poll status** — `GET /partner/v1/topup/{orderId}`

## 1. Discover programs

```http
GET /partner/v1/topup/programs
Authorization: Bearer <accessToken>
```

Returns available Carbon programs, currencies, accepted tokens, and each token's `sourceTokenMint`.

## 2. Build a quote

```http
GET /partner/v1/topup/quote?amount=...&sourceChain=...
Authorization: Bearer <accessToken>
```

The backend prices the top-up and returns:

* `id` — use this as `quoteId` in later requests.
* Payment instructions, including chain and `contractAddress`.
* A resolved `cardId`.
* A canonical signing message the end user must sign with their wallet.

Quotes are valid for **2 minutes**. The `expiresIn` field is an absolute expiration timestamp in Unix milliseconds.

## 3. On-chain transfer

The user submits the on-chain token transfer using the chain and `contractAddress` returned in the quote's `payment` object. Keep the on-chain receipt (including `txHash`).

## 4. Preflight

```http
POST /partner/v1/topup/preflight
Authorization: Bearer <accessToken>
{
  "quoteId": "..."
}
```

Validates KYC, balance, and the buyer wallet against the live quote. The result is cached by `quoteId`.

## 5. Submit

```http
POST /partner/v1/topup
Authorization: Bearer <accessToken>
{
  "quoteId": "...",
  "receipt": { "deposit": { "txHash": "..." } },
  "userSignature": "..."
}
```

The backend verifies the signature against the buyer wallet, consumes the quote, and enqueues the order through the validator → OnBe pipeline.

Submit idempotency is keyed by the on-chain `receipt.deposit.txHash` for **7 days**.

## 6. Poll status

```http
GET /partner/v1/topup/{orderId}
Authorization: Bearer <accessToken>
```

Poll until the order reaches a terminal state.

## Required scope

Top-up endpoints require the `cards:topup` scope.

For full request/response schemas, see the [Swagger UI](https://dev-super.api.zebec.io/api/partner).


# Deprecated content

Deprecated documentation from the earlier Zebec Network protocol era.

{% hint style="warning" %}
This section contains the previous generation of Zebec documentation for archival purposes. It is **deprecated** and will soon be deleted.

For current product guides, SDK documentation, and API references, see the sections above.
{% endhint %}

The pages here are preserved for reference only. URLs, commands, token addresses, and SDK APIs may be out of date or no longer supported.

If you cannot find what you need, check [www.zebec.io](https://www.zebec.io) for the latest positioning or contact support at <support@zebec.io>.


# Getting Started

Follow the following steps to get started with The Stream.

You can follow the following steps to easily get started in The Stream.

1. Got to [https://zebec.io/](https://thestream.finance/)
2. Have Phantom Wallet installed as an extension.
3. Click on the “Get Started” button on the homepage and connect with the Phantom Wallet.
4. Enter your desired amount, recipient address, and select start and end date to start a stream.


# How to get started?

You can follow the following steps to easily get started with Zebec Pay.

You can follow the following steps to easily get started in The Stream.

1. Got to [https://zebec.io/](https://thestream.finance/)
2. Have Phantom Wallet installed as an extension.
3. Click on the “Get Started” button on the homepage and connect with the Phantom Wallet.
4. Enter your desired amount, recipient address, and select start and end date to start a stream.

Let’s understand Zebec Pay with a real example. Let’s suppose Sam wants to hire David to build a project to participate in Solana’s Ignition hackathon for 50 Sol for 40 days starting from Aug 31, 2021 to Oct 08, 2021. Sam wants to pay David per second using Zebec Protocol.

**Creating a stream payment**\
In order to create a stream payment, first and foremost Sam must have 50 Sol or more in his phantom wallet. Sam can now initialize the stream payment by entering the recipient wallet address and selecting date and time. In our case, the following are the details for creating a stream.\
\
Amount - 50 Sol

Recipient Wallet Address (David’s Wallet Address)- AD51HA9nhEemo2w1pwnQ3BioyYVUWvNNNfArYpf9UffH\
Start Date - Aug 31, 2021; 09:00\
End Date - Oct 08, 2021; 09:00

**Receiving a Stream Payment**\
For David to receive from a stream payment, he needs to simply give his wallet address to Sam and view the stream by checking “Incoming Streams” in the Dashboard.

**Pause & Resume**\
If David is not working or if there’s any conflict of interest, Sam can pause the stream payment to stop payment being streamed to David’s address and resume it again.\
\
**Cancelling a Stream Payment**\
If Sam is unhappy with David’s work or vice versa, both can cancel the stream payment whenever they want to. Let’s understand how “Cancel” works in more detail. Let's assume Sam canceled the stream payment after 31 days on Sep 30, 2021; 17:00. David will receive 39.17 Sol (31 days & 8 hours work) and the stream will end.

**Withdrawing from a Stream Payment**\
David will be able to withdraw from an ongoing stream, from a completed stream or from a cancelled stream. Let's suppose the stream is still in progress but David wants to withdraw on Sep 06, 2021; 9:00. David will be able to withdraw 8.75 Sol on Sep 06, 2021 at 9:00. Once the stream is completed, David will be able to withdraw the whole amount i.e 50 Sol. If the stream is cancelled, David will be able to withdraw the amount that has been streamed upto the cancelled date (this scenario has been explained above in “Cancelling a Stream Payment”).


# Benefits of Using Zebec Protocol

Using The Zebec Protocol for streaming payment gives you the following benefits.

Zebec Pay is redefining payroll for the 21st century. For the first time, employees can be paid instantly, by the second, without having to wait days or weeks to be paid. In addition to providing employees with immediate access to their money, Zebec Pay streams can be programmed for each employee for automatic crypto investing, DeFi yield farming and more. Using The Zebec Pay for streaming payment gives you the following benefits.

* Enables liquidity for both sender and receiver.
* Eliminates the problem of payment disputes in the gig economy.
* Increases token productivity.
* Creates trustless future in Payroll.


# Deposit

Deposit some token in your zebec wallet to get started . This will deduct token from your main wallet to Zebec wallet.

![](/files/QUqYFzJ4dnmDjzjTxsrD)


# Start Streaming

You can start streaming to the receiver for this you should have tokens in your zebec wallet .This will start streaming the token as per selected time.You can even pause , resume , cancel the stream.

![](/files/3RU6evvdziSwcbM9HnMx)


# Withdraw Funds

There are two kinds of withdrawal currently in Zebec.   - Withdrawing balance you deposit into Zebec so that you can fund outgoing transactions - Withdrawing balance you received from other people

### Withdraw Incoming Funds

Withdrawing streamed token is easy.

Just go to your incoming tab. Select the stream you want to withdraw funds from.

Select the “Actions” menu, select “Withdraw.”

![](/files/etwi1NfdG1tmojlhxbLU)

Next, enter your withdrawal amount.

![](/files/l6EhrQZMsKiHMm3u0OX5)

Streamed Token = The amount of money streamed in that transaction. Max Withdrawable Token = The amount of money that can be withdrawn from the transaction.

Enter your desired amount.

You can enter the maximum amount to withdraw.

If for some reason the maximum value does not work, please enter a few decimals less than the maximum value.

For example, instead of 10, you enter 9.99 or 9.98.

That should get the job done.

The remaining amount is still remaining in your account for future withdrawals.

### Withdrawing Deposited Token

Go to your Zebec dashboard and click “Withdraw‘ button at the top in the navigation bar.

![](/files/wYHTPrWMojeENIJ6zLIa)

Select your desired token and enter the desired amount.

![](/files/tNmIu7fWRY0k3CqC4EFH)

Press Withdraw and proceed with your transaction.

\
Note : Sender should have enough token to stream you. If sender cancels the stream , the token will be directly deposited to the main wallet of receiver.i.e receiver should not click on withdraw button in case of cancellation.

If you have more questions, please ask at #support-zebec in our Discord.

<https://discord.com/invite/fJM9cHuvvB>


# Safe

Learn how you can manage multisig transactions using Zebec.

Zebec implements Gnosis Safe for multi-sig transactions, you can manage your Safe in three ways/operations.

**Safe Operations:**

[1) Create Safe](/zebec-network-archive/zebec-network-archive/safe/create-safe)

[2) Deposit Funds in Safe](/zebec-network-archive/zebec-network-archive/safe/deposit-in-safe)

[3) Streaming and Zapps Transactions](/zebec-network-archive/zebec-network-archive/safe/sending-a-transaction)


# Create Safe

To make use of the multi-signature transactions feature, you need to create a safe. Creating a safe can be achieved by following these steps:

1\) Look for the "Accounts" option in the Zebec Dashboard. Within the "Accounts" section, you will see a list of options. Among these options, you should find one labeled "Safe"

<figure><img src="/files/9Sa2lIqdqY299GFgdShE" alt=""><figcaption><p>Zebec BNB Dashboard</p></figcaption></figure>

2\) Click on Create Safe to create a new safe

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

3\) To create your Safe, provide a name for it and continue.

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

4\) Add the signer's addresses who would be signing transactions from the safe and the minimum number of confirmations required for any transactions

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

5\) Click Confirm and your multisig safe will be created.

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

6\) Safe has been created, You can now deposit funds and use it to initiate streaming and Zapps transaction

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


# Deposit in Safe

Funds can be deposited by any owner. This money will be deducted from the owner's Zebec wallet or Metamask wallet.

You can deposit funds into the Safe wallet from either your MetaMask wallet or your Zebec wallet.

<figure><img src="/files/C4rRAS2YneHykMdD0xgh" alt=""><figcaption><p>Desposit from Metamask Wallet</p></figcaption></figure>

<figure><img src="/files/jeRYBihtXqbTo6i0YPWx" alt=""><figcaption><p>Deposit from Zebec Wallet</p></figcaption></figure>


# Sending a Transaction

Initiating a Streaming Transaction from Safe

Any owner can initiate a transaction from the safe. To initiate a transaction account owner should follow the following steps.

1\) Look for the "Send Stream" button in the Zebec Dashboard. Among the Options, Select the Safe you want to transact from

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

2\) Fill up the details of the transaction and sign to initiate it.

<img src="/files/oMmfaviMc6ArA5GuHW5p" alt="" data-size="original">

3\) Number of the owner accounts should sign the transaction in order to begin streaming.


# Zapps

Safe funds can also be applied to various Zaaps.

Zebec Safe has integrated various applications known as Zapps. You can utilize these Zapps within the Safe by following these easy steps.

1\) Look for the "Zapps" tab in the Safe tab list. You will be directed to Zapps list

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

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

2\) Choose a Zapp you want to use

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

3\) You will be directed to the Zapp you have chosen

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

4\) After the transaction is initiated, a number of owner accounts must sign the transaction before the transaction is approved


# Signing a Transaction

Approving a transaction

To confirm a safe transaction, a threshold number of owners must sign the transaction. To sign a transaction, we can

1\) Select a transaction from the safe transaction list.

2\) Click sign transaction.

When a number of owner accounts sign the transaction, the transaction will be approved.


# Zebec Solana Sdk


# Streaming

This is the most advanced SDK for implementation. Find here :

Program ID : \`zbcKGdAmXfthXY3rEPBzexVByT2cqRqCZb9NwWdGQ2T\`

This is Zebec's normal stream version 2, which includes new features.

* Solana wallet adapter support.
* With proper error handling.
* Based on anchor framework.
* Easy to implement.


# Initialize Zebec Stream

To create a Zebec Stream service, we would need to initialize the anchor provider and fee receiver.

```
const provider = initAnchorProvider(wallet, RPC_URL);
```

```
const native = new ZebecNativeStream(provider, feeReceiverAddress);
```

```
const token = new ZebecTokenStream(provider, feeReceiverAddress);
```


# Create Fee Vault

Add fee percentage .

```
const response = await ZebecStream.createFeeVault({
    fee_percentage : 2.5
})
```


# Update Fee Vault

```
const response = await ZebecStream.updateFeeVault({
    fee_percentage: 2.5
});
```


# Collect Fees

The total collected fee can be withdrawn from the account owner. In the case of SPL tokens, simply enter the token mint address.

```
// Native token

const response = await ZebecStream.collectSolFees();

// SPL token

const response = await ZebecStream.collectTokenFees({
    token_mint_address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB' ;
});
```


# Deposit

Deposit functions creates associated address with program id and creates an address , which we called zebec wallet. Funds are deposited in this vault.

```
// Native Token

 const response = await native.deposit({
      sender: 'Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs', //signer
      amount: 1,
 });
 
 console.log(response); 
 
```

```
// SPL Token

 const response = await token.deposit({
      sender: 'Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs',
      token_mint_address:'zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF',
      amount: 1,
 });
 
 console.log(response); 

```


# Withdraw Deposited Token

This function withdraw the amount from zebec wallet and deposit to the main signers wallet.

```
// Native Token

 const response = await native.instantTransfer({
      sender: 'Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs,
      receiver: 'Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs'
      amount: 1,
});
    

```

```
// SPL Token

 const response = await token.instantTransfer({
      sender: 'Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs,
      token_mint_address: 'zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF',
      receiver: 'Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs',
      amount: 1,
 });
```


# Start Streaming

Start streaming helps to initiate the stream , for this user should decide start time , end time , amount and receiver before streaming and pass parameters as :

```
// Native Token

const response = stream.init({
        sender: "sender_wallet_address",
        receiver: "receiver_wallet_address",
        start_time: unixtimestamp,
        end_time: unixtimestamp,
        amount: <amount in SOL>
    })
   
```

```
// SPL Token

 const response = await token.init({
      sender: 'J75jd3kjsABQSDrEdywcyhmbq8eHDowfW9xtEWsVALy9',
      receiver: "Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs",
      start_time: Math.floor(Date.now() / 1000) + 80,
      end_time: Math.floor(Date.now() / 1000) + 150,
      amount: 0.5,
      token_mint_address:'zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF',
 });
 console.log(response);
```

{% hint style="info" %}
Note: Returned PDA 'escrow' should be saved for using stream methods: pause, resume, and, withdraw the streamed token.
{% endhint %}


# Pause Stream

Pause function stops the stream. After this, it will long as user will not resume this . In case the end time is crossed and stream is not resumed stream will be canceled and only the streamed amount will be withdraw able.

```
// Native Token

 const response = await native.pause({
      sender: 'J75jd3kjsABQSDrEdywcyhmbq8eHDowfW9xtEWsVALy9',
      receiver: "Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs",
      escrow: "3FUiFXgde4EUsk9gJKxmSh11YN2z7KEW47TErGV8yidk",
 });
 console.log(response.message);
```

```
// SPL Token

const response = await token.pause({
      sender: 'J75jd3kjsABQSDrEdywcyhmbq8eHDowfW9xtEWsVALy9',
      receiver: "Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs",
      escrow: "3FUiFXgde4EUsk9gJKxmSh11YN2z7KEW47TErGV8yidk",
      token_mint_address:'zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF',
});
 console.log(response.message);

```


# Resume Stream

```
// Native Token

const response = await native.resume({
       sender: 'J75jd3kjsABQSDrEdywcyhmbq8eHDowfW9xtEWsVALy9',
      receiver: "Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs",
      escrow: "3FUiFXgde4EUsk9gJKxmSh11YN2z7KEW47TErGV8yidk",
});
console.log(response.message);
```

```
// SPL Token

const response = await token.resume({
      sender: 'J75jd3kjsABQSDrEdywcyhmbq8eHDowfW9xtEWsVALy9',
      receiver: "Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs",
      escrow: "3FUiFXgde4EUsk9gJKxmSh11YN2z7KEW47TErGV8yidk",
      token_mint_address:'zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF',
});
console.log(response.message);

```

{% hint style="info" %}
Note : Resume will not work if end time of transaction is crossed.
{% endhint %}


# Cancel Stream

Cancel stream helps the sender to cancel the stream whenever they want within stream period.

```
// Native Token

const response = await native.cancel({
    sender: 'J75jd3kjsABQSDrEdywcyhmbq8eHDowfW9xtEWsVALy9',
    receiver: "Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs",
    escrow: "3FUiFXgde4EUsk9gJKxmSh11YN2z7KEW47TErGV8yidk",
});
    console.log(response.message);
```

```
// SPL Token

const response = await token.cancel({
    sender: 'J75jd3kjsABQSDrEdywcyhmbq8eHDowfW9xtEWsVALy9',
    receiver: "Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs",
    escrow: "3FUiFXgde4EUsk9gJKxmSh11YN2z7KEW47TErGV8yidk",
    token_mint_address:'zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF',
});
    console.log(response.message);
```

{% hint style="info" %}
Note: You can cancel the scheduled transaction before the start time reaches.
{% endhint %}


# Withdraw Streamed Token

To withdraw the streamed token this function is useful. In this function only the receiver is signer i.e only the receiver can withdraw the token.

```
// Native Token

 const response = await native.withdraw({
   sender: "J75jd3kjsABQSDrEdywcyhmbq8eHDowfW9xtEWsVALy9",
   receiver: "Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs",
   escrow: "FMBLNb3KD1u4pXhDzQQAqVanEqu6yCsD2wMjdARFbbtK",
});
  console.log(response.message);
```

```
// SPL Token

 const response = await token.withdraw({
   sender: "J75jd3kjsABQSDrEdywcyhmbq8eHDowfW9xtEWsVALy9",
   receiver: "Av6xsgSrnM1UAj4pUZnEWM97iBphph69NPHE8J2ceeYs",
   esrow: "FMBLNb3KD1u4pXhDzQQAqVanEqu6yCsD2wMjdARFbbtK",
   token_mint_address:'zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF',
 });
  console.log(response.message);

```


# Silver Card Sdk

The Zebec Card SDK allows developers to integrate the functionality of purchasing and managing Zebec virtual cards into their applications. We currently support EVM chains (Ethereum, Binance Smart Chain (BSC), and Base) and Bittensor Network with the flexibility to toggle between mainnet and testnet environments based on configuration.


# Installation

Install the Zebec Card SDK via npm

```sh
npm i @zebec-fintech/silver-card-sdk
```


# Quick Start

To get started, create an instance of ZebecCardService for EVM compatible networks or ZebecCardTAOService for Bittensor Network. This instance requires a signer, a chain ID (for EVM only), and configu

{% hint style="info" %}
**Note**: Testnets (e.g., Sepolia, BSC Testnet) can only be used if `sandbox` mode is enabled.
{% endhint %}

Example:

For EVM compatible networks:

```javascript
import { ethers } from 'ethers';
import { ZebecCardService, Recipient, CountryCode } from '@zebec-fintech/silver-card-sdk';

const signer: ethers.Signer = ... ; // Signer instance from Wallet Extension

const chainId = 11155111; // Sepolia testnet
const apiKey = process.env.API_KEY!;
const encryptionKey = process.env.ENCRYPTION_KEY!;

const service = new ZebecCardService(
    signer,
    chainId,
    {
        apiKey,
        encryptionKey,
    },
    {
        sandbox: true, // Set to true for development or testing
    },
);
```

For Bittensor Network:

```javascript
import { ZebecCardTAOService } from '@zebec-fintech/silver-card-sdk';

const signer: <Keyring | Signer> = ... ; // Keyring or Signer instance from Wallet Extension

const service = new ZebecCardTAOService(
    signer,
    {
        apiKey,
        encryptionKey,
    },
    {
        sandbox: true, // Set to true for development or testing
    },
);
```


# Fetch Quote

The fetchQuote method retrieves a quote for the specified amount in USD. The quote is used to calculate the corresponding token amount required for the card purchase. It expires in about 30 seconds.

Code Example:

```javascript
const amount = "150.55"; // Amount in USD
const quote = await service.fetchQuote(amount);
```

Response:

The `fetchQuote` method returns a quote object with the following fields:

* **id**: Unique quote identifier.
* **token**: Name or symbol of the token used to purchase the card. (e.g., `"USDC"`, `"TAO"`)
* **targetCurrency**: Currency code for the amount. (e.g., `"USD"`)
* **amountRequested**: Amount of USD the card is being purchased for.
* **pricePerUnitCurrency**: Price of the token per unit USD.
* **totalPrice**: Total token amount needed for purchase.
* **platformFee**: Any additional fees charged by the platform.
* **expiresIn**: Time in milliseconds before the quote expires.
* **timestamp**: Timestamp when the quote was generated.
* **status**: Quote status.

#### Purchase Card

The `purchaseCard` method initiates a virtual card purchase. It performs four main operations:

1. Approves token spending to the ZebecCard smart contract. (ERC20 tokens only)
2. Deposits tokens into the user's Zebec vault.
3. Initiates the card purchase on-chain. (ERC20 tokens only)
4. Posts transaction data, along with metadata, to the Zebec backend.

The method returns a tuple with responses from each stage of the process.

**Code Example**

For EVM compatible networks:

```javascript
const participantId = "JohnChamling";
const firstName = "John";
const lastName = "Chamling";
const emailAddress = "user@example.com";
const mobilePhone = "+91 012345678";
const language = "en-US";
const city = "Bharatpur";
const state = "Bagmati";
const postalCode = "44200";
const countryCode: CountryCode = "NPL";
const address1 = "Shittal street, Bharatpur - 10, Chitwan";

const recipient = Recipient.create(
	participantId,
	firstName,
	lastName,
	emailAddress,
	mobilePhone,
	language,
	city,
	state,
	postalCode,
	countryCode,
	address1,
);

const amount = "150.55";
const quote = await service.fetchQuote(amount);
const [depositResponse, buyCardResponse, apiResponse] = await service.purchaseCard({
	amount,
	recipient,
	quote,
});

console.log("Deposit Transaction Hash:", depositResponse.hash);
console.log("Purchase Transaction Hash:", buyCardResponse.hash);
console.log("Zebec Server Response:", apiResponse.data);
```

For Bittensor Network:

```javascript
const participantId = "JohnChamling";
const firstName = "John";
const lastName = "Chamling";
const emailAddress = "user@example.com";
const mobilePhone = "+91 012345678";
const language = "en-US";
const city = "Bharatpur";
const state = "Bagmati";
const postalCode = "44200";
const countryCode: CountryCode = "NPL";
const address1 = "Shittal street, Bharatpur - 10, Chitwan";

const recipient = Recipient.create(
	participantId,
	firstName,
	lastName,
	emailAddress,
	mobilePhone,
	language,
	city,
	state,
	postalCode,
	countryCode,
	address1,
);

const amount = "150.55"; // Amount in USD
const quote = await service.fetchQuote(amount);
const [depositResponse, apiResponse] = await service.purchaseCard({
	walletAddress: signer.address || "<wallet_address>",
	amount,
	recipient,
	quote,
});

console.log(
	`Deposit response: \n BlockHash: ${depositResponse.blockHash} \n TransactionHash: ${depositResponse.txHash}`,
);
console.log("Zebec Server Response:", apiResponse.data);
```


# Configuration Parameters

#### ZebecCardService

To create an instance of `ZebecCardService`, you need:

* **signer**: An instance of `ethers.Signer`.
* **chainId**: The ID of the blockchain (see list of supported chains below).
* **apiConfig**: Object containing `apiKey` and `encryptionKey`.
* **sdkConfig (optional)**: SDK-specific settings, such as:
  * `sandbox`: Boolean, set to `true` for testnets.

#### ZebecCardTAOService

To create an instance of `ZebecCardTAOService`, you need:

* **signer**: An instance of `Keyring` or `Signer`.
* **apiConfig**: Object containing `apiKey` and `encryptionKey`.
* **sdkConfig (optional)**: SDK-specific settings, such as:
  * `sandbox`: Boolean, set to `true` for testnets.

#### EVM Supported Chains

| Chain               | Chain ID                        |
| ------------------- | ------------------------------- |
| Ethereum            | Mainnet (1), Sepolia (11155111) |
| Binance Smart Chain | Mainnet (56), Testnet (97)      |
| Base                | Mainnet (8453)                  |


# Recipient Fields

To create a valid `Recipient` instance, provide the following details:

* **participantId** (alphanumeric string): Unique identifier for the buyer end user. 1-20 chars.
* **firstName**, **lastName** (string): Participant's full name.
* **emailAddress** (string): Contact email. 1-80 chars
* **mobilePhone** (string): Mobile number with country code.
* **language** (string): Language code (e.g., `"en-US"`).
* **city**, **state**, **postalCode** (string): Location details.
* **countryCode** (CountryCode enum): ISO 3166-1 alpha-3 country code.
* **address1** (string): Street address. (max 50 chars)


# Responses

The `purchaseCard` method returns three responses:

1. **depositResponse**: Transaction response for token deposit.
2. **buyCardResponse**: Transaction response for card purchase. (EVM only)
3. **apiResponse**: API response from Zebec's backend with additional transaction metadata.


# Environment Variables

* **API\_KEY**: Your Zebec API Key.
* **ENCRYPTION\_KEY**: Your Zebec encryption key for secure data handling.


# Supported Countries

| Country                          | Code |
| -------------------------------- | ---- |
| Algeria                          | DZA  |
| Angola                           | AGO  |
| Argentina                        | ARG  |
| Australia                        | AUS  |
| Austria                          | AUT  |
| Belgium                          | BEL  |
| Bolivia (Plurinational State of) | BOL  |
| Brazil                           | BRA  |
| Cameroon                         | CMR  |
| Canada                           | CAN  |
| Chile                            | CHL  |
| Costa Rica                       | CRI  |
| Cyprus                           | CYP  |
| Czechia                          | CZE  |
| Denmark                          | DNK  |
| Ecuador                          | ECU  |
| Egypt                            | EGY  |
| El Salvador                      | SLV  |
| Estonia                          | EST  |
| Finland                          | FIN  |
| France                           | FRA  |
| Georgia                          | GEO  |
| Germany                          | DEU  |
| Ghana                            | GHA  |
| Greece                           | GRC  |
| Guatemala                        | GTM  |
| Honduras                         | HND  |
| Hungary                          | HUN  |
| Iceland                          | ISL  |
| Ireland                          | IRL  |
| Italy                            | ITA  |
| Jamaica                          | JAM  |
| Japan                            | JPN  |
| Jordan                           | JOR  |
| Kenya                            | KEN  |
| Korea, Republic of Korea         | KOR  |
| Kuwait                           | KWT  |
| Lithuania                        | LTU  |
| Luxembourg                       | LUX  |
| Malawi                           | MWI  |
| Malaysia                         | MYS  |
| Malta                            | MLT  |
| Mexico                           | MEX  |
| Morocco                          | MAR  |
| Mozambique                       | MOZ  |
| Nepal                            | NPL  |
| Netherlands                      | NLD  |
| New Zealand                      | NZL  |
| Nigeria                          | NGA  |
| Norway                           | NOR  |
| Oman                             | OMN  |
| Pakistan                         | PAK  |
| Papua New Guinea                 | PNG  |
| Paraguay                         | PRY  |
| Peru                             | PER  |
| Philippines                      | PHL  |
| Poland                           | POL  |
| Portugal                         | PRT  |
| Puerto Rico                      | PRI  |
| Qatar                            | QAT  |
| Romania                          | ROU  |
| Saudi Arabia                     | SAU  |
| Singapore                        | SGP  |
| Slovakia                         | SVK  |
| Slovenia                         | SVN  |
| Spain                            | ESP  |
| Sweden                           | SWE  |
| Taiwan                           | TWN  |
| Thailand                         | THA  |
| Trinidad and Tobago              | TTO  |
| Tunisia                          | TUN  |
| Turkey                           | TUR  |
| United Kingdom                   | GBR  |
| United States                    | USA  |
| Uruguay                          | URY  |
| Vanuatu                          | VUT  |
| Zambia                           | ZMB  |


# Zebec Bridge

Development kit for x-chain Zebec Bridge Contracts

This is the sdk for zebec bridge contracts which lets use bridge your transactions from multiple chains to solana via wormhole to utilize the features of zebec streaming and multisig streaming protocol in solana.

This sdk is built on top of [wormhole-sdk](https://www.npmjs.com/package/@certusone/wormhole-sdk) package and requires you to install it to utilize this sdk. Since zebec protocol utilizes the solana's fast transaction processing ability for its streaming services, despite of the transaction payload being originated from various foreign chains that zebec supports or will be supporting in future, the target of the payload for execution will always be in solana.

| Folders/Files  | Description                                                                                         |
| -------------- | --------------------------------------------------------------------------------------------------- |
| evm            | Contains evm contract and client factory classes needed to interact with Zebec Evm bridge contract  |
| solana         | Contains solana contract factory and client classes to interact with Zebec Solana bridge contract   |
| portalTransfer | Contains all the functions for operation of token transfer from EVM chains to Solana and vice versa |
| utils          | Contains all the necessary constants, and other utility functions.                                  |
| parser         | Contains necessary methods and types for parsing wormhole vaa payloads.                             |

This sdk provides you apis to interact with Zebec's stream services such as:

* Vault interaction: Deposit and Withdraw
* Streaming actions: Initialize, update, pause, resume, cancel, withdrawStreamed

as well as some other apis such as:

* RegisterUser
* CreateTokenAccounts
* GetTargetAsset
* TransferEvm
* GetIsRelayCompleted


# Creating clients

Currently, there are two clients:

1. Evm Bridge client
2. Solana Bridge client

Evm bridge client instances can be created in following way:

```typescript
const sourceChain = CHAIN_ID_BSC;
const targetChain = CHAIN_ID_SOLANA;

const ethClient = new ZebecEthBridgeClient(
   BSC_ZEBEC_BRIDGE_ADDRESS, 
   signer, 
   sourceChain
);
```

Solana bridge client instances can be created in following way:

```typescript
const connection = new Connection(SOLANA_HOST);
const wallet = new anchor.Wallet(keypair);
const achorProvider = new anchor.AnchorProvider(
   connection, 
   wallet, 
   AnchorProvider.defaultOptions()
);
const wormholeConfig = {
   coreBridgeProgram: new PublicKey(SOL_BRIDGE_ADDRESS),
   tokenBridgeProgram: new PublicKey(SOL_TOKEN_BRIDGE_ADDRESS),
};
const FEE_RECEIVER = "<solana pubkey>"
const zebecInstructions = new ZebecInstructions(anchorProvider);
const bridgeProgram = ZebecSolBridge__factory.getProgram(new PublicKey(SOL_ZEBEC_BRIDGE_ADDRESS), anchorProvider);
const bridgeTransactions = new ZebecBridgeTransactions(bridgeProgram);

const solanaClient = new ZebecSolBridgeClient(
   anchorProvider,
   bridgeProgram,
   bridgeTransactions,
   zebecInstructions,
   wormholeConfig,
   FEE_RECEIVER,
);
```

Here, `FEE_RECEIVER` is solana pubkey address which receives fee for provider streaming services. If you're using this sdk for providing stream service to other, then you must have initialzed before streaming.


# Initialize Proxy Account

Every foreign chain user requires a solana account for their identity in solana chain to make any transactions. The associated token accounts that the user possesses in solana is also created from this account. The zebec bridge program in solana provides creating a solana account for users in foreign chain user for each chain that acts as a proxy account for evm user and signs transactions on behalf of user's demand in invoking solana programs. Proxy account is derived from seed of the 32 bytes wormhole's standard address buffer derived from their native address and wormhole chain id.

*Seed: \[32 byte sender address, chain id]*

*Program Id: Solana Zebec bridge program Id*

A solana proxy account can be created in following way.

```typescript
const newUser = "<evm address>"

// sends payload to initialize solana accounts
const receipt = await ethClient.registerUser(newUser);
```

After this, Zebec evm bridge contract sends payloads to wormhole which will be signed by the validators called guardians which when signed by minimum required number of validators can be retrieved from wormhole rpc hosts. This should be posted in solana wormhole bridge. The signed vaa can be obtained in following way.

```typescript
const sequence = parseSequenceFromLogEth(receipt, getBridgeAddressForChain(sourceChain));
const zebecEmitterAddress = getEmitterAddressEth(BSC_ZEBEC_BRIDGE_ADDRESS);
const { vaaBytes } = await getSignedVAAWithRetry(
   WORMHOLE_RPC_HOSTS, 
   sourceChain, 
   zebecEmitterAddress, 
   sequence
);
```

Zebec provides specialized zebec bridge spy relayer for relaying the message passed by its evm bridge contracts to solana bridge program as well however, that doesn't imply that they cannot be relayed manually. The sdk provides required client interfaces, factory classes and utililities for this. The spy relayer uses same sdk to relay the incomming payloads to solana.

```typescript
const payerAddress = wallet.publicKey.toString();
const bridgeAddress = getBridgeAddressForChain(targetChain);

const vaaBuf = Buffer.from(vaaBytes);

setDefaultWasm("node"); // use bundler for browser

// posting vaa in solana
await postVaaSolanaWithRetry(
   connection,
   wallet.signTransaction,
   bridgeAddress,
   payerAddress,
   vaaBuf,
   MAX_VAA_UPLOAD_RETRIES_SOLANA,
);
```

Then you parse payload information from vaa and call method in Zebec Solana bridge program to initialize account.

```typescript
const parsedVaa = parse_vaa(vaaBytes);
const parsedPayload = parseZebecPayload(Buffer.from(parsedVaa.payload));

// this initializes proxy account
const result = await solanaClient.initiallizePda(
   vaaBytes, 
   <InitializeProxyAccountPayload>parsedPayload
);
```

One thing you might have noticed is the payload is type cast in method params. This is because the `parseZebecPayload` function return a union type `ParsedZebecPayload` type which is a union type for all parsed payload types.


# Initialize Token Account

Creating a token account from Solana Proxy Account for each x-chain users.

For any tokens to migrate from evm chain to solana chain a user must have an existing token account in solana chain. This is becuase, every token has separate associated token account and a user may own many token account. An associated token account address is derived from the token mint address, user wallet address and token program id.

You can create a token account in following way.

```typescript
const owner = "0x91845D534744Ef350695CF98393d23acC9639024";
const tokenAddress = "<evm token address>"
const sourceChain = CHAIN_ID_BSC;
const targetChain = CHAIN_ID_SOLANA;

const tokenAddrInSolana = await getTargetAsset(
   signer, 
   tokenAddress, 
   sourceChain, 
   targetChain
)	
const proxyAccount = ZebecSolBridgeClient.getProxyUserKey(
   tryNativeToUint8Array(owner, sourceChain), 
   sourceChain, 
   SOL_ZEBEC_BRIDGE_ADDRESS
);

const ethClient = new ZebecEthBridgeClient(BSC_ZEBEC_BRIDGE_ADDRESS, signer, sourceChain);

const receipt = await ethClient.createTokenAccount(owner, tokenAddrInSolana);
```

Now you can find signed Vaa bytes of your payload sent to wormhole.

```typescript
const sequence = parseSequenceFromLogEth(receipt, getBridgeAddressForChain(sourceChain));
const zebecEmitterAddress = getEmitterAddressEth(BSC_ZEBEC_BRIDGE_ADDRESS);
const { vaaBytes } = await getSignedVAAWithRetry(WORMHOLE_RPC_HOSTS, sourceChain, zebecEmitterAddress, sequence);
```

Rest of work is performed by the relayer. If you want to manually relay the payloads to solana, you can accomplish it in following way.

```typescript
const payerAddress = wallet.publicKey.toString();
const bridgeAddress = getBridgeAddressForChain(targetChain);

const vaaBuf = Buffer.from(vaaBytes);

setDefaultWasm("node"); // use bundler for browser

// posting vaa in solana
await postVaaSolanaWithRetry(
   connection,
   wallet.signTransaction,
   bridgeAddress,
   payerAddress,
   vaaBuf,
   MAX_VAA_UPLOAD_RETRIES_SOLANA,
);
```

Then you parse payload information from vaa and call method in Zebec Solana bridge program to initialize token account in solana.

```typescript
const { parse_vaa } = await importCoreWasm();
const parsedVaa = parse_vaa(vaaBytes);
const parsedPayload = parseZebecPayload(Buffer.from(parsedVaa.payload));

const result = await solanaClient.initiallizePdaTokenAccount(
   vaaBytes,
   <InitializeTokenAccountPayload>parsedPayload,
);
```


# Deposit

To deposit token native to source evm chain, you must be attest the token beforehand in solana chain. If the token is already an attested token imported from solana to the source evm chain, you can proceed for depositing to zebec vault.

Deposit process in completed in two step:

1. [Token Transfer](/zebec-network-archive/zebec-network-archive/bridge-sdk/deposit/token-transfer): Migrate evm token to Proxy Account in solana through token portal
2. [Deposit](/zebec-network-archive/zebec-network-archive/bridge-sdk/deposit/deposit-to-zebec): Deposit token from Proxy Account to Zebec Vault.


# Token Transfer

Migrate token via Token Portal from evm to solana

Token transfer can be done in following way.

```typescript
const depositor = signer.address;
const sourceChain = CHAIN_ID_BSC;

const depositorAddrInSolana = ZebecSolBridgeClient.getProxyUserKey(
   depositor, 
   sourceChain, 
   SOL_ZEBEC_BRIDGE_ADDRESS
);

const tokenAddress = "<evm address of token>";

// use ui value for amount
const amount = "1";

// this may vary depending upon the token being transfered
const relayFee = "0.1";

// transfer from evm to solana
const transferReceipt = await transferEvm(
	signer,
	tokenAddress,
	sourceChain,
	amount,
	targetChain,
	proxyAccount.toString(),
	relayFee,
);
```

*Note: The solana proxy address that is derived from the user's evm address must be initialized beforehand. To initialize see initialize proxy account part.*

After this, it takes some time for your token to reach solana chain. During this time, a vaa is created which is then verified and signed by the wormhole validators called guardians. You can obtain the vaa in following way.

```typescript
const sequence = parseSequenceFromLogEth(transferReceipt, getBridgeAddressForChain(sourceChain));
const transferEmitterAddress = getEmitterAddressEth(getTokenBridgeAddressForChain(sourceChain));
const { vaaBytes } = await getSignedVAAWithRetry(
	WORMHOLE_RPC_HOSTS,
	sourceChain,
	transferEmitterAddress,
	sequence,
);
```

The vaa then can be used to posted on solana chain and redeem the token transferred. Zebec provides specialized token bridge relayer supporting certain tokens as well that automatically relay your tokens using small amount of fee so this part may be *optional*. However, if you want to manually relay you can accomplish it in following way.

```typescript
const payerAddress = wallet.publicKey.toString();
const bridgeAddress = getBridgeAddressForChain(targetChain);

const vaaBuf = Buffer.from(vaaBytes);

setDefaultWasm("node"); // use bundler for browser

// posting vaa in solana
await postVaaSolanaWithRetry(
   connection,
   wallet.signTransaction,
   bridgeAddress,
   payerAddress,
   vaaBuf,
   MAX_VAA_UPLOAD_RETRIES_SOLANA,
);

// redeeming token
const unsignedTransaction = await redeemOnSolana(
	connection,
	bridgeAddress,
	tokenBridgeAddress,
	payerAddress,
	vaaBytes,
);
unsignedTransaction.partialSign(keypair);

const txid = await connection.sendRawTransaction(unsignedTransaction.serialize());
await connection.confirmTransaction(txid);
```

If vaa is supposed to be relayed and token is redeemed by a relayer, in that case you can check and wait for token to be redeemed by the relayer in following way.

```typescript
let success = false;
let retry = 0;

while(!success) {
   success = await getIsTransferCompletedSolana(tokenBridgeAddress, transferVaa, connection);
   await new Promise((r) => setTimeout(r, 5000));	
   if (retry > 13) throw new Error("Transfer failed!");
   retry++;
}

console.log("transfer successful");
```


# Deposit to Zebec

Deposit from solana account to zebec vaults

Depositing token from proxy accounts to zebec vault can be done in following way. You first need to pass message to solana chain using evm bridge contracts for deposit tokens.

```typescript

const tokenAddress = "0xea0Fbe70025ac7Cab1F5f06976dA76Ac85C045d9";
const tokenAddressSol = await getTargetAsset(signer, tokenAddress, sourceChain, targetChain);

// deposit same amoutn of token that you migrated from bsc to solana 
const receipt = await ethClient.deposit(amount, depositor, tokenAddrInSolana);
```

Then the vaa can be obtained after this and which'll be posted in solana chain.

```typescript
const sequence = parseSequenceFromLogEth(receipt, getBridgeAddressForChain(sourceChain));
const emitterAddress = getEmitterAddressEth(BSC_ZEBEC_BRIDGE_ADDRESS);
const { vaaBytes } = await getSignedVAAWithRetry(
	WORMHOLE_RPC_HOSTS,
	sourceChain,
	emitterAddress,
	sequence,
);
```

Now post this signed vaa to wormhole solana core bridge program, parse the payloads from vaa and send the parsed data to solana zebec bridge program. Posting vaa and calling solana bridge (also called as proxy) program. This is optional because it's handled by zebec's specialized relayer.

```typescript
const payerAddress = wallet.publicKey.toString();
const bridgeAddress = getBridgeAddressForChain(targetChain);

const vaaBuf = Buffer.from(vaaBytes);

setDefaultWasm("node"); // use bundler for browser

// posting vaa in solana
await postVaaSolanaWithRetry(
   connection,
   wallet.signTransaction,
   bridgeAddress,
   payerAddress,
   vaaBuf,
   MAX_VAA_UPLOAD_RETRIES_SOLANA,
);

const { parse_vaa } = await importCoreWasm();
const parsedVaa = await parse_vaa(vaaBytes);
const payload = parseZebecPayload(Buffer.from(parsedVaa.payload));

const depositResult = await solClient.depositToken(depositVaa, depositPayload);
```


# Withdraw Deposited

withdraw assets deposited by sender

If you want to withdraw your assets you deposited. You have to keep in mind that your assets is being transferred from one chain to another. Withdraw comprises of two parts:

1. [Withdraw](/zebec-network-archive/zebec-network-archive/bridge-sdk/withdraw-deposited/withdraw-from-zebec) from Zebec accounts (vaults) to your solana wallet account (proxy accounts).
2. [Token migration](/zebec-network-archive/zebec-network-archive/bridge-sdk/withdraw-deposited/token-transfer) from Solana to EVM chain.


# Withdraw From Zebec

Withdraw from vault to proxy accounts

At first, you have to withdraw your assets from the Zebec. To withdraw you can do as follows.

```typescript
const withdrawer = signer.address

const withdrawerAddrInSolana = ZebecSolBridgeClient.getProxyUserKey(
   withdrawer,
   sourceChain,
   SOL_ZEBEC_BRIDGE_ADDRESS,
);

const tokenAddrInSolana = "<solana mint key>";
const amount = "1";

const reciept = await ethClient.withdraw(amount, withdrawer, tokenAddrInSolana);
```

Now you can find signed Vaa bytes of your payload sent from wormhole guardian rpc hosts.

```typescript
const sequence = parseSequenceFromLogEth(
   receipt, 
   getBridgeAddressForChain(sourceChain)
);
const zebecEmitterAddress = getEmitterAddressEth(BSC_ZEBEC_BRIDGE_ADDRESS);
const { vaaBytes } = await getSignedVAAWithRetry(
   WORMHOLE_RPC_HOSTS, 
   sourceChain, 
   zebecEmitterAddress, 
   sequence
);
```

Now post this signed vaa to wormhole solana core bridge program, parse the payloads from vaa and send the parsed data to solana zebec bridge program. Posting vaa and calling solana bridge (also called as proxy) program. This is optional because it's handled by zebec's specialized relayer.

```typescript


const payerAddress = wallet.publicKey.toString();

const bridgeAddress = getBridgeAddressForChain(targetChain);
const tokenBridgeAddress = getTokenBridgeAddressForChain(targetChain);
const vaaBuf = Buffer.from(vaaBytes);

setDefaultWasm("node"); // use bundler for browser
const { parse_vaa } = await importCoreWasm();

// posting vaa in solana
await postVaaSolanaWithRetry(
   connection,
   wallet.signTransaction,
   bridgeAddress,
   payerAddress,
   vaaBuf,
   MAX_VAA_UPLOAD_RETRIES_SOLANA,
);

const { parse_vaa } = await importCoreWasm();
const parsedVaa = parse_vaa(tes)
const parsedPayload = parseZebecPayload(Buffer.from(parsedVaa.payload));

const result = await solanaClient.withdrawDeposit(withdrawVaa, parsedPayload as TokenWithdrawPayload);
```


# Token Transfer

Transfer assets from proxy account in Solana to EVM.

Token transfer can be done in following way.

```typescript
const amount = "0.1";
const sender = signer.address;
const tokenMint = "AbLwGR8A1wvsiLWrzzA5eYPoQw51NVMcMMTPvAv5LTJ";
const receiver = sender;
const sourceChain = CHAIN_ID_BSC;

const receipt = await ethClient.directTransfer(amount, sender, tokenMint, receiver);
```

You might have noticed that receiver and sender are same here, it's because the transfer will performed from the sender's proxy account in Solana to own account in evm.

Then the vaa can be obtained after this and it must be posted in solana chain.

```typescript
const sequence = parseSequenceFromLogEth(receipt, getBridgeAddressForChain(sourceChain));
const emitterAddress = getEmitterAddressEth(BSC_ZEBEC_BRIDGE_ADDRESS);
const { vaaBytes } = await getSignedVAAWithRetry(
	WORMHOLE_RPC_HOSTS,
	sourceChain,
	emitterAddress,
	sequence,
);
```

Now post this signed vaa to wormhole solana core bridge program, parse the payloads from vaa and send the parsed data to solana zebec bridge program.

```typescript
const payerAddress = wallet.publicKey.toString();
const bridgeAddress = getBridgeAddressForChain(targetChain);
const vaaBuf = Buffer.from(vaaBytes);

setDefaultWasm("node"); // use bundler for browser

// posting vaa in solana
await postVaaSolanaWithRetry(
   connection,
   wallet.signTransaction,
   bridgeAddress,
   payerAddress,
   vaaBuf,
   MAX_VAA_UPLOAD_RETRIES_SOLANA,
);

const { parse_vaa } = await importCoreWasm();
const parsedVaa = parse_vaa(vaaBytes);
const parsedPayload = parseZebecPayload(Buffer.from(parsedVaa.payload));

const result = await solanaClient.directTokenTransfer(
   vaaBytes,
   <DirectTokenTransferPayload>parsedPayload
);
```

Then the zebec bridge program makes cpi call to token bridge program for asset transfer to evm chain. The asset is automatically redeemed by the token bridge relayer. For manual redeeming, you need to get signed vaa by emitted from token bridge and redeem asset in evm using the payload in that vaa.

<pre class="language-typescript"><code class="lang-typescript">if (!result.data) {
   throw new Error("data is missing in solana client result.");
}

const executionSignature = result.data.signatures[result.data.signatures.length - 1];
<strong>const transactionResponse = await connection.getTransaction(executionSignature);
</strong>
if (!transactionResponse) {
   throw new Error("Could not find Transaction");
}
		
const anotherSequence = parseSequenceFromLogSolana(transactionResponse);
const tokenBridgeEmitterAddress = await getEmitterAddressSolana(SOL_TOKEN_BRIDGE_ADDRESS);
const { vaaBytes: tokenBridgeVaa } = await getSignedVAAWithRetry(
   WORMHOLE_RPC_HOSTS,
   "solana",
   tokenBridgeEmitterAddress,
   anotherSequence,
);
const tokenBridgeAddress = getTokenBridgeAddressForChain(sourceChain);
const bridge = Bridge__factory.connect(tokenBridgeAddress, signer);
const tx = await bridge.completeTransfer(tokenBridgeVaa);
const receipt = await tx.wait();
console.log("receipt", receipt.transactionHash);
</code></pre>


# Init Stream

Asset stream initialization can be performed in following way.

```typescript
const now = nowInSec();
const startTime = now + 180; 
/* 
* three min added deliberately because it takes times for your payload to hit 
* zebec program in solana 
**/
const endTime = startTime + 6000; // 100 min 
const streamAmount = "1";
const receiver = <evm address>;
const sender = signer.address;
const canCancel = true;
const canUpdate = true;
const tokenMint = "<solana mint address>";

const sourceChain = CHAIN_ID_BSC;

const receipt = await ethClient.initStream(
   startTime.toString(),
   endTime.toString(),
   streamAmount,
   receiver,
   sender,
   canCancel,
   canUpdate,
   tokenMint,
);
```

Now you can find signed Vaa bytes of your payload sent from wormhole guardian rpc hosts.

```typescript
const sequence = parseSequenceFromLogEth(receipt, getBridgeAddressForChain(sourceChain));
const zebecEmitterAddress = getEmitterAddressEth(BSC_ZEBEC_BRIDGE_ADDRESS);
const { vaaBytes } = await getSignedVAAWithRetry(
   WORMHOLE_RPC_HOSTS,
   sourceChain,
   zebecEmitterAddress,
   sequence,
);
```

Now post this signed vaa to wormhole solana core bridge program, parse the payloads from vaa and send the parsed data to solana zebec bridge program. This part is optional because it's handled by zebec's specialized relayer.

```typescript
const payerAddress = wallet.publicKey.toString();
const bridgeAddress = getBridgeAddressForChain(targetChain);
const vaaBuf = Buffer.from(vaaBytes);

setDefaultWasm("node"); // use bundler for browser

// posting vaa in solana
await postVaaSolanaWithRetry(
   connection,
   wallet.signTransaction,
   bridgeAddress,
   payerAddress,
   vaaBuf,
   MAX_VAA_UPLOAD_RETRIES_SOLANA,
);

const parsedVaa = parse_vaa(streamVaa);
const parsedPayload = parseZebecPayload(Buffer.from(parsedVaa.payload));

const result = await solanaClient.initializeStream(streamVaa, <TokenStreamPayload>parsedPayload);
console.log(result);
```


# Pause/Resume Stream

Pause and resume stream both can be performed using same method means same method pause when invoked during ongoing stream and resume when invoked on paused stream can be done in following way.

```typescript
const sourceChain = CHAIN_ID_BSC;
const targetChain = CHAIN_ID_SOLANA;
const receiver = "<evm address>";
const sender = "<evm address>";
const tokenMint = "<solana mint address>";
const dataAccount = "<pubkey of stream data account>";

const receipt = await ethClient.pauseResumeStream(
   sender, 
   receiver, 
   tokenMint, 
   dataAccount
);
```

Now you can find signed vaa bytes of your payload sent to wormhole.

```typescript
const sequence = parseSequenceFromLogEth(receipt, getBridgeAddressForChain(sourceChain));
const zebecEmitterAddress = getEmitterAddressEth(BSC_ZEBEC_BRIDGE_ADDRESS);
const { vaaBytes } = await getSignedVAAWithRetry(
   WORMHOLE_RPC_HOSTS,
   sourceChain,
   zebecEmitterAddress,
   sequence,
);
```

Now post this signed vaa to wormhole solana core bridge program, parse the payloads from vaa and send the parsed data to solana zebec bridge program. This part is optional because it's handled by zebec's specialized relayer.

```typescript
const payerAddress = wallet.publicKey.toString();
const bridgeAddress = getBridgeAddressForChain(targetChain);
const vaaBuf = Buffer.from(vaaBytes);

setDefaultWasm("node"); // use bundler for browser

// posting vaa in solana
await postVaaSolanaWithRetry(
   connection,
   wallet.signTransaction,
   bridgeAddress,
   payerAddress,
   vaaBuf,
   MAX_VAA_UPLOAD_RETRIES_SOLANA,
);

const parsedVaa = parse_vaa(pauseVaa);
const parsedPayload = parseZebecPayload(Buffer.from(parsedVaa.payload));

const result = await solanaClient.pauseResumeStream(
   pauseVaa, 
   <PauseTokenStreamPayload>parsedPayload
);
```


# Cancel Stream

To cancel the stream, you can follow example below.

```typescript
const sourceChain = CHAIN_ID_BSC;
const targetChain = CHAIN_ID_SOLANA;
const receiver = "<evm address>";
const sender = "<evm address>";
const tokenMint = "<solana mint address>";
const dataAccount = "<pubkey of stream data account>";

const cancelReceipt = await ethClient.cancelStream(sender, receiver, tokenMint, dataAccount);
```

Now you can find signed Vaa bytes of your payload sent to wormhole.

```typescript
const sequence = parseSequenceFromLogEth(cancelReceipt, getBridgeAddressForChain(sourceChain));
const emitterAddress = getEmitterAddressEth(BSC_ZEBEC_BRIDGE_ADDRESS);

const { vaaBytes } = await getSignedVAAWithRetry(
   WORMHOLE_RPC_HOSTS,
   sourceChain,
   emitterAddress,
   sequence,
);
```

Now post this signed vaa to wormhole solana core bridge program, parse the payloads from vaa and send the parsed data to solana zebec bridge program. This part is optional because it's handled by zebec's specialized relayer.

```typescript
const payerAddress = wallet.publicKey.toString();
const bridgeAddress = getBridgeAddressForChain(targetChain);
const vaaBuf = Buffer.from(vaaBytes);

setDefaultWasm("node"); // use bundler for browser

// posting vaa in solana
await postVaaSolanaWithRetry(
   connection,
   wallet.signTransaction,
   bridgeAddress,
   payerAddress,
   vaaBuf,
   MAX_VAA_UPLOAD_RETRIES_SOLANA,
);

const parsedVaa = parse_vaa(cancelStreamVaa);
const parsedPayload = parseZebecPayload(Buffer.from(parsedVaa.payload));

const result = await solanaClient.cancelStream(cancelStreamVaa, <CancelTokenStreamPayload>parsedPayload);
```


# Update Stream

For updating stream, you must make sure that your stream has not started. Your can update your stream in following way.

```typescript
const sourceChain = CHAIN_ID_BSC;
const targetChain = CHAIN_ID_SOLANA;
const now = nowInSec();
const startTime = now + 600;
const endTime = startTime + 6000;

const sender = "<evm address>";
const receiver = "<evm address>";
const tokenMint = "<solana mint key>";
const dataAccount = "<solana stream data account key>";

const receipt = await ethClient.updateStream(
   startTime.toString(),
   endTime.toString(),
   amount,
   receiver,
   sender,
   tokenMint,
   dataAccount,
);

```

Now you can find signed Vaa bytes of your payload sent to wormhole.

```typescript
const sequence = parseSequenceFromLogEth(receipt, getBridgeAddressForChain(sourceChain));
const emitterAddress = getEmitterAddressEth(BSC_ZEBEC_BRIDGE_ADDRESS);
const { vaaBytes } = await getSignedVAAWithRetry(
   WORMHOLE_RPC_HOSTS,
   sourceChain,
   emitterAddress,
   sequence,
);
```

Now post this signed vaa to wormhole solana core bridge program, parse the payloads from vaa and send the parsed data to solana zebec bridge program. This part is optional because it's handled by zebec's specialized relayer.

```typescript
const payerAddress = wallet.publicKey.toString();
const bridgeAddress = getBridgeAddressForChain(targetChain);
const vaaBuf = Buffer.from(vaaBytes);

setDefaultWasm("node"); // use bundler for browser

// posting vaa in solana
await postVaaSolanaWithRetry(
   connection,
   wallet.signTransaction,
   bridgeAddress,
   payerAddress,
   vaaBuf,
   MAX_VAA_UPLOAD_RETRIES_SOLANA,
);

const parsedVaa = parse_vaa(updateStreamVaa);
const parsedPayload = parseZebecPayload(Buffer.from(parsedVaa.payload));

const result = await solanaClient.updateStreamToken(
   vaaBytes, 
   <CancelTokenStreamPayload>parsedPayload
);
```




---

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

