> For the complete documentation index, see [llms.txt](https://prodocs.webhash.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://prodocs.webhash.com/storage-and-billing.md).

# Storage & Billing

WebHash Pro stores your deployed sites on IPFS. You get a generous free allowance to start, and when you need more you can top up your storage by paying in crypto - no credit card, no subscription, and no recurring charges. You only pay for what you add.

This page explains how storage is measured, what it costs, and exactly how to buy more, step by step.

Everything described here lives on the **Billing** page of your dashboard, at <https://pro.webhash.com/dashboard/billing>.

![Full Billing page overview](/files/wvHhyfUCtzZGt7x9qxPf)

***

## How storage works

### The 20 MB free tier

Every account starts with **20 MB of free storage**. That is enough to host a small static site or a few lightweight projects. You do not need a wallet or any payment to use the free tier - it is active the moment you sign in.

{% hint style="info" %}
Storage on WebHash Pro is a **one-time, lifetime allowance**, not a monthly plan. The free 20 MB never expires, and any storage you buy is added on top of it permanently.
{% endhint %}

### $5 per GB, paid in crypto

When you outgrow the free tier, additional storage costs **$5.00 (USD) per gigabyte**. You can buy anywhere from **1 GB up to 100 GB** in a single purchase.

The price is quoted in US dollars, then converted to the exact amount of crypto you'll pay at the moment you check out (see [How the price is calculated](#how-the-price-is-calculated) below).

### How your usage is measured

Your "used" storage is the **total size of all your successful deployments added together**. Each time a deployment finishes successfully, its size is recorded, and the sum of those sizes is your current usage.

A few things worth knowing:

* Only **successful** deployments count toward your usage. Failed or in-progress deployments do not.
* Sizes are measured in **decimal units** - 1 GB = 1,000 MB = 1,000,000,000 bytes - which is how the usage meter and pricing both count.
* Deleting a deployment removes it from your usage total, freeing that space back up.

### What happens when you run out

Your **remaining storage** is simply your total quota (20 MB free + anything you've purchased) minus what you've used.

If a new deployment would push you past your quota, WebHash Pro stops it before it starts and shows a "storage quota exceeded" message. Your existing sites keep working - you just can't deploy anything new until you free up space or buy more storage.

{% hint style="success" %}
If you hit your limit mid-project, just buy more storage on the Billing page and retry your deployment - there's nothing else to configure.
{% endhint %}

***

## The usage meter

At the top of the Billing page, the **Storage usage** card shows your current situation at a glance:

* **Used** - how much storage your successful deployments take up.
* **Total** - your full quota (free tier + purchased storage).
* A progress bar that fills as you use more space. It turns red when you're full.
* **Remaining** - how much headroom you have left.
* **% used** - your usage as a percentage of your total quota.

If you've used everything, a **"Storage full"** warning appears, prompting you to buy more below.

{% hint style="info" %}
The meter refreshes when you load the page and again automatically right after a payment is credited. If a number ever looks stale, reload the page.
{% endhint %}

***

## Buying storage, step by step

Buying storage takes a few minutes and involves your crypto wallet. Here's the whole flow.

### Before you start

You'll need:

* A crypto wallet (for example MetaMask, Rainbow, Coinbase Wallet, or any WalletConnect-compatible wallet).
* Enough of your chosen token to cover the purchase, **plus a little extra for network gas fees** (the small fee the blockchain charges to process your transaction - this is separate from the $5/GB and is not paid to WebHash).

### Step 1 - Connect your wallet

1. Go to the [Billing page](https://pro.webhash.com/dashboard/billing).
2. Click **Connect Wallet** in the top-right corner.
3. Choose your wallet and approve the connection request.

Connecting your wallet does **not** move any funds or sign anything that costs money - it simply lets WebHash Pro know which address you'll be paying from.

![RainbowKit wallet connection modal](/files/OeRT5yxOk73AcdaWOrTg)

### Step 2 - Choose how much storage to buy

In the **Buy storage** card, pick a storage amount:

* Use a quick preset: **1 GB**, **5 GB**, or **10 GB**.
* Or click **Custom** and type any whole number from **1 to 100** GB.

The estimate box updates instantly to show roughly what you'll pay (e.g. "$25.00") and how much storage you'll receive.

### Step 3 - Choose a network and token

Pick the blockchain **Network** you want to pay on, and the **Token** you want to pay with:

| Network                | Tokens you can pay with |
| ---------------------- | ----------------------- |
| **Ethereum** (mainnet) | ETH, USDC, USDT         |
| **Base**               | ETH, USDC               |
| **Arbitrum**           | ETH, USDC, USDT         |
| **Optimism**           | ETH, USDC, USDT         |

{% hint style="info" %}
**Stablecoins (USDC/USDT) make the cost predictable** - $5/GB maps almost exactly to the same amount of tokens. **Paying in ETH** is fine too; the amount is calculated from a live ETH/USD price at checkout.

Layer-2 networks (**Base**, **Arbitrum**, **Optimism**) usually have much lower gas fees than Ethereum mainnet. If you want to keep network costs low, those are good choices.
{% endhint %}

![Buy storage card with network dropdown open](/files/ctxptHVoKfSp01XuzDEd)

### Step 4 - Click "Buy" and confirm the quote

When you're happy with the amount, network, and token, click the **Buy** button (it reads, for example, **"Buy 5 GB"**).

WebHash Pro then:

1. Generates a **quote** - a fixed crypto amount, locked to your wallet address, valid for **15 minutes**.
2. Checks that your wallet is set to the network you chose. If it isn't, your wallet will pop up and ask you to **switch networks** - approve it.

{% hint style="info" %}
The quote is **bound to the wallet you connected**. The payment must come from that same wallet, which protects you from anyone else's transaction being applied to your quote. Make sure the connected wallet is the one you intend to pay from.
{% endhint %}

### Step 5 - Send the payment from your wallet

Your wallet will now pop up asking you to approve the payment transaction:

* **Paying in ETH:** your wallet sends the exact ETH amount directly to WebHash's payment address.
* **Paying in USDC or USDT:** your wallet sends a token transfer of the exact amount to WebHash's payment address.

Review the details in your wallet, then **confirm**. This is the one and only transaction that moves your money, and **you sign it yourself in your own wallet** - WebHash never has access to your funds or your keys.

{% hint style="warning" %}
**You are responsible for the gas fee.** Your wallet shows it separately from the payment amount. The $5/GB you pay goes to WebHash; the gas fee goes to the network validators.

Pay the **exact amount in the quote**. Sending less will not credit your storage. (Sending more works, but you'd be overpaying.)
{% endhint %}

### Step 6 - Wait for confirmations

Once you confirm, the button changes to **"Verifying payment…"** and WebHash watches the blockchain for your transaction. You'll see a "Payment sent. Verifying on-chain…" message.

A payment is only credited once it has reached enough **confirmations** (blocks mined on top of your transaction), which protects against rare blockchain reversals:

* **Ethereum mainnet:** 12 confirmations.
* **Base, Arbitrum, Optimism:** 30 confirmations.

This usually takes anywhere from under a minute to a few minutes depending on the network. Just leave the page open.

### Step 7 - Storage credited

When the transaction is confirmed, you'll see **"Payment confirmed - storage credited."** Your usage meter and total quota update automatically, and the purchase appears in your payment history. That's it - you can deploy again right away.

{% hint style="success" %}
You never have to do anything manual to receive your storage. As long as you sent the correct amount and the transaction confirms, the credit is applied automatically and exactly once.
{% endhint %}

***

## How the price is calculated

* **Stablecoins (USDC / USDT):** priced at a flat $1.00 each, so for example 5 GB = $25 ≈ 25 USDC.
* **ETH:** priced from a live, on-chain **ETH/USD price feed** at the moment your quote is created. The quote locks in that amount for 15 minutes.

Because the ETH amount is fixed only for the life of the quote, if you let a quote sit unused for a while and then try to pay, you may need to request a fresh quote (see [Troubleshooting](#troubleshooting)).

***

## Payment history

The **Payment history** table lists your storage purchases, newest first. For each payment you'll see:

| Column      | What it shows                                                                                                                |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **Date**    | When the quote/purchase was created.                                                                                         |
| **Network** | The blockchain you paid on (Ethereum, Base, etc.).                                                                           |
| **Amount**  | The crypto amount and token, with the USD value in parentheses.                                                              |
| **Storage** | How many GB that payment buys.                                                                                               |
| **Status**  | `confirmed`, `submitted`, `quoted`, `expired`, or `failed` (see below).                                                      |
| **Tx**      | A **View** link to the transaction on the network's block explorer (Etherscan, Basescan, Arbiscan, or Optimistic Etherscan). |

Click **Refresh** at the top of the table to reload it.

### What the statuses mean

* **`confirmed`** - Payment received and storage credited. Done.
* **`submitted`** - Your transaction has been seen on-chain but hasn't reached the required number of confirmations yet. It should become `confirmed` shortly.
* **`quoted`** - A quote was created but no payment has been detected yet.
* **`expired`** - The quote's 15-minute window passed before the payment confirmed. If you **did** pay, you can still claim it (see below).
* **`failed`** - The payment could not be completed.

***

## "Check & claim": recover a payment that wasn't credited

Occasionally a payment goes through on-chain but isn't credited automatically - for example you closed the tab while it was still confirming, the quote expired before enough confirmations arrived, or you paid from a different device. Your money is safe; you just need to **claim** it.

For any payment row that isn't `confirmed`, you'll see a button at the end of the row:

* **"Check & claim"** - appears when WebHash already has your transaction hash on record. Click it to re-check the blockchain and credit your storage.
* **"Add tx & claim"** - appears when no transaction hash is on record. Click it, and you'll be asked to **paste the transaction hash** of your payment (the `0x…` string, 66 characters long). You can copy it from your wallet's activity list or your block explorer.

### How to find your transaction hash

1. Open your wallet's transaction/activity history (or the block explorer for the network you used).
2. Find the payment you sent to WebHash.
3. Copy the **transaction hash** - it starts with `0x` followed by 64 characters.

After you submit:

* If the payment is confirmed on-chain, you'll see **"Payment confirmed - storage credited."** and your meter updates.
* If it's still confirming, you'll see **"Payment seen on-chain - still confirming. Try claiming again in a moment."** - wait briefly, then click again.

{% hint style="info" %}
Claiming works even after a quote has **expired** - as long as you paid the correct amount to WebHash's address from your wallet, the payment is honored. A claimed payment is credited **exactly once**, so clicking the button more than once can never double-credit or double-charge you.
{% endhint %}

***

## Troubleshooting

### "Your wallet is on a different network"

You selected, say, Base, but your wallet is connected to a different network. This is fine - when you click **Buy**, WebHash will prompt your wallet to switch automatically. Just approve the switch. If the switch prompt doesn't appear, change networks manually in your wallet and try again.

### "Quote expired. Please request a new quote."

A quote is valid for **15 minutes**. If you didn't pay within that window, simply pick your amount/network/token again and click **Buy** to generate a fresh quote.

If you **already paid** against an expired quote, don't worry - go to **Payment history** and use **Check & claim** to credit it.

### Payment is "pending" / still confirming

This is normal. Your transaction needs to reach the required confirmation depth (12 on Ethereum mainnet, 30 on Base/Arbitrum/Optimism). Leave the page open, or come back later and use **Check & claim** in the history table. Nothing is lost while it's pending.

### "This transaction has already been used"

Each on-chain transaction can pay for **one** storage purchase. You'll see this message if you try to claim a transaction hash that was already credited to another payment. Check your payment history - the storage is likely already on your account.

### "Could not verify this payment"

WebHash checked the blockchain but the transaction didn't match the quote - usually because the amount was too low, it went to the wrong address, or it came from a wallet other than the one the quote was bound to. Compare your transaction on the block explorer against the quote details. If you genuinely underpaid, you may need to make a new purchase for the shortfall.

### "Verification service is busy" / network issue

A temporary hiccup talking to the blockchain. Your payment is safe and recorded - wait a moment and click **Refresh** then **Check & claim** in the history table.

### "Billing is not configured" / "Crypto payments are not available right now"

Paid storage isn't available at the moment. Your free tier and existing sites are unaffected - check back later.

***

## What you sign, and what you don't

To keep things clear and reassuring:

* **You sign exactly one thing that costs money:** the payment transaction in Step 5, which you approve in your own wallet.
* **WebHash never holds your keys or funds.** The payment goes straight from your wallet to WebHash's payment address on the blockchain.
* **Connecting your wallet is free** and doesn't authorize any spending.
* **Storage credits are permanent** - there's no subscription to cancel and no auto-renewal.

{% hint style="success" %}
Self-custody all the way: you control your wallet, you confirm every transaction, and your purchased storage is added to your account the moment your payment confirms on-chain.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://prodocs.webhash.com/storage-and-billing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
