Discover before reading
Include yourAPI-KEY header on every request below, including website discovery. See registration, limits and consent. A default key allows 100 reads, 25 writes and 10 stream connections per minute, in separate per-replica budgets; approved multipliers apply.
- Read
GET https://vibechain.com/api/vibemarket2/catalog/sources. - Choose a source and one of its versions. The version’s
runtimeIdselects backend runtime routes. For new launches, choose the version explicitly markedlaunchTarget: true. - Cross-check
GET https://build.vibechain.com/api/vibemarket2/runtime/versionsand retain the chain ID, market, factory and schema. - Read
GET /runtime/{version}/catalog?after=0from the backend base URL.
GET /runtime/pack-slugs/{slug}. The response includes canonicalSlug, launchTx, graph and market; use that graph’s id for subsequent reads.
Read surfaces
The raw index and the board API are different views. Index lists return
{items, next, head}; board responses vary by resource (for example {drops, next}, {trades}, or a quote object). There is no universal data wrapper.
Numbers, units and time
- Raw blockchain integers, IDs and wei quantities can be decimal strings. Use
BigIntor exact decimal arithmetic, not JavaScriptNumber. - Board fields ending in
Eth, such asethIn, are formatted ETH decimal strings, not wei. - Board dates such as
quotedAtare ISO timestamps. Session expiry, release scheduling and runtime-head update times use Unix milliseconds; raw chain event times may use seconds. - Missing or
nullaccounting values are not zero. Preserve “not available” states in the UI.
Pagination
Do not reuse a cursor across resources, wallets or runtime versions. Deduplicate by graph-qualified identity, not a numeric drop ID alone.
Live updates
GET /runtime/{version}/stream is a server-sent event stream. Subscribe with comma-separated topics: catalog, pot, market:{dropId}, or wallet:{lowercaseAddress} (at most 16).
Send API-KEY in the header, or use the narrowly supported apiKey query parameter for native EventSource on this exact GET route. Each connection/reconnection consumes stream quota; frames do not consume HTTP read quota.
Retain event IDs and reconnect with Last-Event-ID or the numeric after query. A hello starts a stream; reset means you must refresh durable HTTP reads. Other events are updates/invalidation signals, not proof of finality or transactions. The optional watch value is shelf or a positive drop ID and participates in presence tracking.
Use backoff and jitter on reconnect. Refetch relevant bounded reads after updates instead of polling the full catalog at high frequency.
Errors and freshness
Most application errors are JSON{"error":"..."}. Parsers and rate-limit middleware can also return non-JSON errors, so handle the HTTP status before assuming a JSON body.
400: invalid arguments, cursors, signatures or action data.401/403: missing/invalid API key or missing, expired or unauthorized session/origin/wallet; inspect the error code.404: unknown market, artwork or runtime resource.409: conflict, stale edit or unavailable mutation on a retired runtime; inspect the operation.413: body too large.429: admission or rate limit; honorRetry-Afterwhen present.503: indexing, dependency or capacity failure; retry with backoff.
400, others as 404; the operation reference records this distinction. Do not turn an incomplete catalog or a 503 into an empty-success result.
/health can return HTTP 200 with ready: false. Check readiness, head freshness and graph identity, not status alone. Honor cache headers; authenticated account and DM responses must not be shared between users.
See the complete operation reference.