Skip to content
IN THIS GUIDE

GraveMarket v1 API ​

Base URL — https://api.solanadeads.com/gravemarket/v1

The marketplace read API. Browse collections, read an item, follow sales activity, pull traits and holders.

Public reads, with optional SDK authentication

These read consoles currently send requests without an X-API-Key header. For an integration you intend to maintain, follow the published SDK's API-key guidance: the SDK accepts a key, and its documentation recommends obtaining one because anonymous access is planned to change.

GraveMint has a different access model. Read keys and origins before integrating its mint flows.

Prefer the SDK — it gives you typed responses, retries and pagination helpers:

bash
npm install @solanadeads/gravemarket
ts
import { GraveyardClient } from '@solanadeads/gravemarket';
const gmk = new GraveyardClient();

Identifiers ​

A collection is addressable three ways, and every console below accepts any of them:

formexample
slugsolana-deads
on-chain address7ZYBDpPou8EehaYz6nUPExy5DU1bL3E64P5AKtikwZnh
internal idb2a30c10-0ba7-4ca8-9482-397324dc64bf

Prefer the slug: it is stable, readable, and what the marketplace URLs use.

Try it live ​

Examples in

Every console runs against our own collection, solana-deads.

Browse collections ​

GET/collections

Paginated browse. Returns a cursor — see Pagination below.

Sent

GET https://api.solanadeads.com/gravemarket/v1/collections?limit=3

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const result = await market.collections.list({
  limit: 3,
});
console.log(result);
GET/collections/meta

The chains and categories the marketplace currently indexes — use it to build filters rather than hardcoding a list.

Sent

GET https://api.solanadeads.com/gravemarket/v1/collections/meta

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const meta = await market.collections.meta();
console.log(meta);

One collection ​

GET/collections/{id}

Full detail: stats, floor, verification, chain and standard.

Sent

GET https://api.solanadeads.com/gravemarket/v1/collections/solana-deads

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const result = await market.collections.get("solana-deads");
console.log(result);
GET/collections/{id}/stats

Headline stats plus a daily series. Includes wash_trade_count_7d — volume figures elsewhere are not filtered for it, so read this before quoting volume.

Sent

GET https://api.solanadeads.com/gravemarket/v1/collections/solana-deads/stats

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const stats = await market.collections.stats("solana-deads");
console.log(stats);

Items and listings ​

GET/collections/{id}/items

Items in the collection, with listing state.

Sent

GET https://api.solanadeads.com/gravemarket/v1/collections/solana-deads/items?limit=3

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const items = await market.collections.items("solana-deads", {
  limit: 3,
});
console.log(items);
GET/collections/{id}/offers

Standing offers against the collection.

Sent

GET https://api.solanadeads.com/gravemarket/v1/collections/solana-deads/offers?limit=3

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const offers = await market.collections.offers("solana-deads", {
  limit: 3,
});
console.log(offers);

Activity ​

GET/collections/{id}/activity

Sales and listings for one collection — the secondary-market context that pairs with a GraveMint drop.

Sent

GET https://api.solanadeads.com/gravemarket/v1/collections/solana-deads/activity?limit=3

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const activity = await market.collections.activity("solana-deads", {
  limit: 3,
});
console.log(activity);
GET/activity

Global activity across the marketplace.

Sent

GET https://api.solanadeads.com/gravemarket/v1/activity?limit=3

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const result = await market.activity.list({
  limit: 3,
});
console.log(result);

Traits and holders ​

GET/collections/{id}/traits

Every trait and value, with counts — what you build a rarity filter from.

Sent

GET https://api.solanadeads.com/gravemarket/v1/collections/solana-deads/traits

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const traits = await market.collections.traits("solana-deads");
console.log(traits);
GET/collections/{id}/holders

Holder distribution, with unique_holders.

Sent

GET https://api.solanadeads.com/gravemarket/v1/collections/solana-deads/holders?limit=3

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const holders = await market.collections.holders("solana-deads", {
  limit: 3,
});
console.log(holders);
GET/search

Searches collections, items, profiles and traits in one call — the response is split by kind.

Sent

GET https://api.solanadeads.com/gravemarket/v1/search?q=deads&limit=3

Received

Nothing yet — press Send.
import { GravemarketClient } from "@solanadeads/gravemarket";

const market = new GravemarketClient();

const result = await market.search.query({
  q: "deads",
  limit: 3,
});
console.log(result);

Pagination ​

List endpoints are cursor-paginated and return cursor and hasMore:

ts
let cursor;
do {
  const page = await gmk.collections.activity('solana-deads', { limit: 50, cursor });
  handle(page.data);
  cursor = page.cursor;
} while (cursor);

The SDK also exposes listAll / activityAll async generators that drain pages for you.

For a complete export, follow the cursor until there are no more pages. Use the statistics endpoints for headline totals; the number of records loaded into a UI is not the collection total.

Differences from GraveMint v1 ​

GraveMint v1GraveMarket v1
credentialgm_pub_ / gm_live_, invite-onlynone
origin bindingrequiredn/a
collection scopekey is confined to its dropsn/a — public data
writesprepare / execute a mintread-only
paginationlimit + offsetcursor