vibe shift
Developer API

Build on Vibe Shift.

A free, open JSON API with everything on the board: coins, red envelopes, every burst and its draw, fee claims, cats and wallets. No key, no sign up. Every request below is live, so press Send and you get real data. With no coins on the board yet, lists come back empty.

01

Basics

  • Base URL https://usevibeshift.fun/api/v1
  • Read only. Every endpoint is GET and returns JSON. Starting a coin or taking a seat happens with your wallet on the site.
  • Open. No key. CORS is open, so you can call it from a browser, a bot or a server.
  • Units. SOL as plain numbers, times as unix milliseconds, raw token amounts as strings, addresses as base58.
  • Versioned. Fields under v1 will not be renamed or removed. New fields may be added.
02

Endpoints

List coins

GET/api/v1/coinscached 5s

Every coin on the board, newest first, with its envelope (size, shares, fill, pays in), fee tier, cat count and SOL paid out. Drafts that were never paid are not listed.

curl -s "https://usevibeshift.fun/api/v1/coins"

Get a coin

GET/api/v1/coins/{id}cached 3s

One coin in full: every envelope with its snapshot hash, block, seed and shares, every fee claim, the top waving cats, the boarding passengers and every deposit.

curl -s "https://usevibeshift.fun/api/v1/coins/coin%20id"

Look up a mint

GET/api/v1/coins/mint/{mint}cached 3s

Is this token a Vibe Shift coin? Returns the full coin, or a 404 when it is not. Made for terminals and bots that see a token address first.

curl -s "https://usevibeshift.fun/api/v1/coins/mint/token%20mint"

Look up a wallet

GET/api/v1/wallets/{address}cached 10s

Every coin a wallet started, joined or holds: its cat's wave, SOL its cat caught, best luck badges, what it put in and got back, and its starter lock. Unknown wallets come back with empty lists.

curl -s "https://usevibeshift.fun/api/v1/wallets/wallet%20address"

Leaderboard

GET/api/v1/leaderboardcached 30s

Launched coins ranked by SOL paid out in envelopes (topFees), the biggest boardings, and the starters with the most launches. Up to 20 rows each.

curl -s "https://usevibeshift.fun/api/v1/leaderboard"

Stats

GET/api/v1/statscached 15s

Totals across every coin: coins by status, SOL that went into launched pots and boarding buyers.

curl -s "https://usevibeshift.fun/api/v1/stats"

Rules

GET/api/v1/rulescached 5m

The constants every coin runs on: fee tiers, envelope limits, pay options, count interval, wave, seats, caps and the curve. Read straight from the file the server enforces.

curl -s "https://usevibeshift.fun/api/v1/rules"
03

The coin object

The list returns the base fields. Single coin and mint lookups add envelopes, claims, cats, buyers, joins and linkedPairs.

id, urlstringCoin id and its page.
name, ticker, descriptionstringAs set by the starter. Ticker is uppercase, 2 to 10 characters.
imagestringAbsolute URL to the coin image.
linksobjectwebsite, twitter, telegram and tweet, each a URL or null.
statusstringSee the lifecycle below.
starteraddressWallet that started the coin.
potaddressThe coin's pot address: takes seats, creates the pool, owns the coin's platform config, claims its fees and pays its envelopes.
platformaddress | nullThe coin's own LaunchLab platform config.
mint, pooladdress | nullNull until creation. The mint is never revealed early.
startstringboarding or instant.
feeTier, feesPercentstring, objectThe tier ("1", "2" or "2.5") and its split per trade: total, raydium, house, envelope (percent).
envelopeobjectsizeSol, shares, fillSol (SOL waiting in the current envelope) payWith (mihao, stocks or both) and stockPick (a company ticker from /api/stocks, or leader; null when paying in $MIHAO only).
cats, holdersnumber | nullWaving cats at the last count, and wallets holding the coin.
lastCountAtunix ms | nullWhen cats were last counted and fees last checked.
bursts, paidOutSolnumber, numberEnvelopes burst so far and the SOL value paid out in them.
claimedSolnumberFees claimed into the envelope, after Vibe Shift's share.
starterLockobject | nulluntil ("bond"), totalTokens, releasedTokens and releaseTx when the starter locked their tokens.
seatPriceSol, seatsTaken, seatsTotalnumber | nullBoarding only. Null on instant coins.
createdAt, opensAt, closesAt, launchedAt, scheduledForunix ms | nullWhen it was drafted, opened, closes, launched and was scheduled for.
potSol, wallets, entryPriceSol, tokensBoughtmixedSOL in the pot, wallets in it, the one entry price and the raw tokens bought (string, 6 decimals).
departureTxsignature | nullThe block zero transaction that created the pool and bought.
marketobject | nullLive curve: priceSol, marketCapSol, raisedSol, goalSol, progress (0 to 1), graduated.
failReason, lookalikeOfstring | nullWhy a pot refunded, and the ticker it looks like if flagged.
envelopesarrayDetail only. Every burst; see below.
claimsarrayDetail only. at, platformSol, creatorSol, houseSol, tx for every fee claim by the pot.
catsarrayDetail only (replaces the count). Top 50 cats: wallet, tokens, since, multiplier (the wave).
buyersarrayDetail only. Boarding passengers: wallet, committedSol, acceptedSol, refundSol, tokens, linked, group, deliveryTx, starter, streakSince, streakMultiplier.
joins, linkedPairsarrayDetail only. Every deposit (wallet, sol, at, tx) and pairs of wallets found funding each other.
04

Envelopes and draws

Each item in envelopes is one burst. With the snapshot, block and seed you can rerun the draw yourself (see check a burst yourself).

n, at, statusEnvelope number, when it was sealed, and sealed, drawn, paid or rolled.
sizeSol, payWith, stockThe SOL in it, what it pays in, and the stock token bought (symbol, mint, name) or null.
snapshotcats, totalTickets, sha256, sealSlot, drawSlot. The sha256 is published before the draw block exists.
block, seedThe block that decided it (slot, hash) and the seed: sha256 of snapshot hash, a colon, block hash.
shareswallet, sol, best (手气最佳), mihao and stock (raw amounts sent), paidSol (part paid in SOL), tx.
buys, paidAt, noteThe swaps (asset, sol, out, tx), when it finished paying, and any note such as a stock part paid in SOL.
05

Status lifecycle

boarding then settling then launched or refunded. A boarding is created the moment all 20 seats are taken; if they are not within 24 hours it is cancelled and refunded.

awaiting_feeDrafted, start fee not paid yet. Never listed; only visible by id.
scheduledStart fee paid, boarding opens at opensAt. Ticker already locked.
boardingTaking seats. Instant coins pass through this for a few seconds.
settlingEvery seat taken. The coin is being created and tokens delivered.
launchedPool created and tokens delivered (or in delivery). mint and pool are set, and the envelope starts filling.
refunding, refundedEvery deposit is being sent back, or has been.
cancelledDraft expired unpaid. Never listed.
06

Recipes

Watch envelopes fill and burst

// Watch envelopes fill and alert when one bursts (poll every 15s)
const seen = new Map();
setInterval(async () => {
  const { coins } = await fetch("https://usevibeshift.fun/api/v1/coins?status=launched").then((r) => r.json());
  for (const c of coins) {
    const { sizeSol, fillSol, shares, payWith } = c.envelope;
    if (seen.has(c.id) && c.bursts > seen.get(c.id)) {
      console.log(`$${c.ticker} burst: ${sizeSol} SOL in ${shares} shares, paid in ${payWith} ${c.url}`);
    }
    seen.set(c.id, c.bursts);
    console.log(`$${c.ticker} envelope ${Math.round((fillSol / sizeSol) * 100)}% full, ${c.cats ?? 0} cats waving`);
  }
}, 15_000);

Label Vibe Shift coins in a terminal or bot

// Label Vibe Shift coins in your terminal or bot
async function vibeShiftInfo(mint) {
  const r = await fetch(`https://usevibeshift.fun/api/v1/coins/mint/${mint}`);
  if (r.status === 404) return null; // not a Vibe Shift coin
  const c = await r.json();
  const last = c.envelopes.at(-1);
  return {
    feeTier: c.feeTier,
    envelope: c.envelope, // sizeSol, shares, fillSol, payWith
    paidOutSol: c.paidOutSol,
    lastBestLuck: last?.shares.find((s) => s.best)?.wallet ?? null,
    devIsPot: true, // the "dev" wallet is c.pot, not a person
  };
}

On a Vibe Shift coin the creator wallet is the pot, and its fee claims and swaps are the envelope at work. The guide explains how that reads on terminals.

07

Errors and limits

  • Errors come back as { "error": "..." } with status 400 (bad input), 404 (not found) or 500.
  • Caching. Responses are cached at the edge for a few seconds (shown on each endpoint), so polling faster returns the same data. Every 5 to 15 seconds is plenty.
  • Fair use. No hard limit today. Keep it to a request every few seconds per endpoint and it will stay that way.
  • Source of truth is the chain. Every amount here links to a transaction you can check on any explorer.