UpHeld
$100.00
Base Sepoliasyncing…Vibeathon 02 · Night shift

Subscriptions that refund youwhen the service goes down.

Providers sell monthly plans in USDC on Base and fund a reserve to back their uptime guarantee. If a service falls below that guarantee, subscribers can claim a USDC refund from the reserve.

Billing window
0 min
Uptime precision
1 bps
USDC minor units
0
Refund tiers
0 · 10/25/50%
Example · CloudBox

How an outage becomes a refund

CloudBox costs $10 a month and guarantees 99.95% uptime. A 518-minute outage drops it to refund tier 2, so $2.50 moves from the provider's reserve to the subscriber's balance.

  • Reserve funded on Base before the plan goes on sale
  • Each outage record includes a keccak256 hash
  • Subscribers claim refunds from their dashboard
Example · outage refund
CloudBox $10/mo · SLA 99.95%
SLA 99.95%
Rolling uptime
99.99%
OperationalWithin SLA
Provider reserve
$5,000.00
Your refund
$0.00
4 min down → 9999 bps ≥ 9995 → within SLA → no refund due
The problem

Most subscriptions charge full price during an outage, and getting a service credit usually means filing a support ticket. 

SLA in a contract PDF01
SLA stored on-chain

The uptime target, refund tiers and reserve balance are public state in the UpHealthSLA contract.

Support tickets02
Outages recorded by a monitor

The watchdog checks each service and records an outage after consecutive failed checks. Each record is hashed with keccak256.

Store credit03
USDC refunds

Refunds come from a prefunded reserve and can be claimed as soon as a breach is recorded.

How it works · UpHealthSLA.sol

Four contract calls from subscription to refund

01step 1 / 4

Subscribe in USDC

The subscriber pays the monthly price in USDC on Base. The uptime guarantee applies from that block.

UpHealthSLA.subscribe(serviceId)
SUBSCRIBER$100.00PROVIDER+$10.0010 USDCsubscribe(2) · transferFrom
02step 2 / 4

Provider funds the reserve

The provider deposits USDC into the UpHealthSLA contract. Each subscription locks its worst-case refund from this reserve, and the balance is public.

UpHealthSLA.fundReserve(serviceId, amount)
reserveBalanceUsdc
$0
fundReserve(2, 5_000_000_000)
03step 3 / 4

Monitor records the outage

The watchdog checks each service and records downtime after 3 failed checks in a row. Each record is hashed with keccak256 and submitted to the contract.

UpHealthSLA.recordOutage(id, minutes, hash)
SLA 99.95%480 MIN · 503
attestationHash = keccak256(2, 1, 480, 9888)
04step 4 / 4

Subscriber claims the refund

If uptime falls below the guarantee, the subscriber claims the refund for the matching tier. The USDC comes out of the provider’s reserve.

UpHealthSLA.claimCompensation(serviceId)
RESERVE$4,997.50VAULT$2.50WALLET+$2.50(10,000,000 × 2,500) / 10,000 = 2,500,000
Refund math

Refund tiers by uptime

uptimeBps = floor((43200 − downtime) × 10000 / 43200)
refund    = monthlyPrice × tierBps / 10000
CloudBox · $10/mo · SLA 99.95%
Downtime this window
480 min · 8h
Uptime
98.88%
9888 bps
Refund per subscriber
$2.50
2,500,000 minor units
TierUptimeRefundPayout
None≥ 99.95%0%$0.00
Tier 1< 99.95% (SLA)10%$1.00
Tier 2< 99.00%25%$2.50
Tier 3< 98.00%50%$5.00
Trust model

What you need to trust

Payments and refunds follow rules enforced by the contract. Outage reports come from an approved attestor, which is the part you still need to trust.

Read the full trust model
  1. Who records outages01

    An approved attestor: a monitor address that can submit outage records (minutes down and a one-time hash) to the contract. Providers and subscribers cannot submit records.

    In this build the attestor is trusted. It is the sandbox monitor, or your wallet if you deploy your own copy.

  2. What the contract guarantees02

    Each subscription locks its worst-case refund from the provider's reserve at checkout. Refunds use the worst tier reached, are paid only once, and are claimed by the subscriber.

    A plan shows Sold out when the reserve cannot cover another subscription.

  3. Planned for production03

    An attestor quorum, where several independent monitors in different locations must agree before an outage is recorded.

    Not yet built. It is the first item on the provider roadmap.

For providers

Sell plans backed by an uptime guarantee

Set a monthly price and an uptime target, then fund the USDC reserve that backs them. When the monitor records an outage, subscribers are refunded from the reserve and the incident appears in your incident log.

Who pays

Subscribers pay a monthly price in USDC, which goes to the provider's wallet when they subscribe. The provider funds the reserve that backs each subscription.

First market

Infrastructure providers such as RPC nodes, inference APIs and data feeds. Many of their customers already pay in USDC on Base and choose vendors on uptime.

How UpHeld makes money
Proposed model

A small take rate (around 1%) on subscription volume settled through UpHeld, plus a fee for verified listings and the public SLA badge. Nothing is charged in this testnet build.

Reserve sizing · default tiers 10 / 25 / 50%
Reserve calculator
$25.00
100
Monthly revenue
$2,500
Required reserve
$1,250

Each subscription locks its worst-case refund: $25.00 × 50% = $12.50. The reserve is only spent when the SLA is breached. Reserve withdrawals are not available in this testnet build.

List a test service with sandbox USDC.List a service
  1. 01
    Independent attestor quorum

    Monitors run by different parties must agree before an outage is recorded, so a single monitor cannot trigger or block a payout.

  2. 02
    Public SLA badge and status page

    An embeddable widget that shows live uptime and reserve balance on a provider's pricing page.

  3. 03
    Pay-per-call SLAs for AI agents

    Endpoints that agents pay for per request in USDC (x402-style), with the reserve refunding calls that fail the SLA.

Try the app with the prefunded Judge Sandbox wallet or your own Base Sepolia wallet. 

Subscribe to a plan, record an outage and claim the refund in the demo. 

Open the demo