Schema Reference
This page documents all types, queries, inputs, and enums available in the Verse public GraphQL API.
Queries
type Query {
# Editions
editionByNumber(artworkId: ID!, editionNumber: String!): Edition
editionByContract(contractAddress: String!, tokenId: String!): Edition
# Assets
assetsPage(filter: AssetFilter, sorting: AssetSorting, after: Cursor, first: Int!): AssetConnection!
asset(id: ID!, assetType: AssetType!): Asset
# Primary Market
primaryMarketListing(artworkId: ID!): PrimaryMarketListing
primaryMarketListings(artworkId: ID!): [PrimaryMarketListing!]
primaryMarketSale(pmSaleId: ID!): PrimaryMarketSale!
# Secondary Market
secondaryMarketSale(smSaleId: ID!): SecondaryMarketSale!
smOfferMatchesPage(request: SMOfferMatchRequest!): SMOfferMatchConnection!
# Fees
artworkFees(artworkId: ID!): Fees!
estimateSecondaryMarketFees(artworkId: ID!, price: InputAmount!, assetType: AssetType! = EDITION): FeeEstimation!
mintPassConfiguration(pmListingId: ID!): MintPassConfiguration!
# Marketplace
stats(period: MarketplaceStatsPeriod!): MarketplaceStats!
activityPage(filter: ActivityPageFilter, after: Cursor, first: Int!): ActivityEntryConnection!
orders(request: MarketplaceOrdersRequest!): MarketplaceOrderConnection!
# Discovery
explore(filter: ExploreFilter, sorting: ExploreSorting, after: Cursor, first: Int! = 20): CollectionConnection!
search(query: String!, params: SearchParams): SearchResult!
# Entities
artworksPage(request: ArtworksPageRequest!): ArtworkConnection!
collectionsPage(request: CollectionsPageRequest!): CollectionConnection!
exhibitionsPage(request: ExhibitionsPageRequest!): ExhibitionConnection!
galleriesPage(request: GalleriesPageRequest!): GalleryConnection!
linksPage(request: LinksPageRequest!): LinkConnection!
personsPage(request: PersonsPageRequest!): PersonConnection!
# Users
userByUsername(username: String!): UserPublic
userById(id: String!): UserPublic
userByLinkedWallet(network: LinkedWalletNetwork!, address: String!): UserPublic
usersByLinkedWallet(network: LinkedWalletNetwork!, addresses: [String]!): [UserPublic]!
# Utility
projectStaticAssetByHash(artworkId: ArtworkID!, hash: String!, editionNumber: Int, totalEditions: Int, userInput: [PreviewUserInput!]): StaticAsset!
reverseResolveENS(addresses: [String!]!): [String!]!
}
Core Types
Collection
type Collection {
id: ID!
name: String
slug: String!
year: String
description: Markdown
blockchain: ProductChain!
artworkIds: [ArtworkID!]!
artworks: [Artwork!]!
artists: [Person!]!
persons: [Person!]!
features: [Feature!]
contract: ContractInfo
previewAsset: StaticAsset
banner: StaticAsset
tags: [String!]
isHidden: Boolean!
updatedAt: Time
featuredScore: Float!
saleType: ArtworkSaleType!
saleDetails: String
license: String
links: [Link!]!
exhibitions: [Exhibition!]!
tabs: [ExploreTabFilter!]
# Statistics
stats(filter: StatsFilter): CollectionStats!
floorEdition: Edition
floorListing: MarketplaceOrder
bestOffer: MarketplaceOrder
highestGlobalOffer: SecondaryMarketOffer
osSlug: String
contractAddress: String
# Permissions
canEdit: Boolean!
canMint: Boolean!
}
Artwork
type Artwork {
id: ArtworkID!
title: String
year: String
bio: Markdown
blockchain: ProductChain!
saleType: ArtworkSaleType!
saleDetails: String
displayStyle: DisplayStyle!
license: String
isHidden: Boolean!
featuredScore: Float!
updatedAt: Time
expectedSaleDate: Time
requiresShippingDetails: Boolean!
secondaryMarketSaleWithPhysical: Boolean!
secondaryMarketDisabled: Boolean!
# Relationships
artist: Person
collection: Collection
editions(first: Int! = 50000, editionId: ID): [Edition!]!
myEditions: [Edition!]!
features: [Feature!]
links: [Link!]!
exhibitions: [Exhibition!]!
artworkKind: ArtworkKind
cover: StaticAsset
banner: StaticAsset
# Sales
primaryMarketListing: PrimaryMarketListing
primaryMarketListings: [PrimaryMarketListing!]
fees: Fees
smSellingOptions: SMArtworkSellingOptions!
# Market data
stats(filter: StatsFilter): ArtworkStats!
floorEdition: Edition
floorListing: MarketplaceOrder
bestOffer: MarketplaceOrder
highestGlobalOffer: SecondaryMarketOffer
osSlug: String
contractAddress: String
}
ArtworkKind
The artworkKind field on Artwork resolves to one of these project types:
union ArtworkKind =
| ProjectArtworkKind
| GenerativeProjectArtworkKind
| ArtblocksProjectArtworkKind
| QuasiDragonsCompositeArtworkKind
ProjectArtworkKind
Represents an artist-curated project — a set of pre-selected artworks listed for sale.
type ProjectArtworkKind {
items: [ProjectItem!]!
withRepetitions: Boolean!
allowUserSelection: Boolean!
}
type ProjectItem {
id: ID!
staticAssetId: StaticAssetID!
staticAsset: StaticAsset!
isAvailable: Boolean!
probability: Float
featuresJson: String
}
allowUserSelection— Whentrue, collectors choose which item to buy. Whenfalse, a random item is assigned on purchase.withRepetitions— Whentrue, the same item can be sold multiple times.isAvailable— Whether the item can still be purchased.featuresJson— JSON string containing trait/feature attributes for the item.
Edition
type Edition {
id: ID!
artworkId: ID!
artwork: Artwork!
editionNumber: Int!
hash: String
tokenId: String
title: String
description: String
status: EditionStatus!
mintingOptionType: MintingOptionType!
createdAt: Time!
tokenUri: String
likes: Int!
isLiked: Boolean!
primaryMarketListingId: ID!
# Asset
asset: Asset!
staticAsset: StaticAsset
features: [FeatureValue!]
userInput: [EditionUserInput!]
# Ownership
owner: EditionOwner!
contractInfo: ContractInfo
events: [EditionEvent!]!
# Market
smListing: SecondaryMarketListing
osListing: OpenseaListing
floorListing: MarketplaceOrder
bestOffer: MarketplaceOrder
stats: EditionStats!
}
Edition Status
enum EditionStatus {
NOT_MINTED # Created but not yet minted
MINTING # Minting transaction in progress
ON_PLATFORM # Minted and held on Verse
WITHDRAWAL_REQUESTED # User requested withdrawal
WITHDRAWING # Withdrawal transaction in progress
WITHDRAWN # Sent to user's wallet
DEPOSIT_REQUESTED # Deposit back to Verse requested
BURNED # Token burned
}
Primary Market Types
PrimaryMarketListing
type PrimaryMarketListing {
id: ID!
artwork: Artwork!
strategy: PrimaryMarketStrategy!
createdAt: Time!
startedAt: Time
endedAt: Time
endReason: PMListingEndReason
startsAt: Time!
endsAt: Time!
pmSales: [PrimaryMarketSale!]!
editionTarget: Edition
}
# Strategy is one of:
union PrimaryMarketStrategy =
| PMBuyNowLimitedEditionStrategy
| PMBuyNowOpenEditionStrategy
| PMAuctionStrategy
Buy Now (Limited Edition)
type PMBuyNowLimitedEditionStrategy {
pmListingId: ID!
price: Amount!
maxEditions: Int!
reservedEditions: Int!
stats: PMBuyNowStats!
dutchAuction: DutchAuctionSettings # if dutch auction enabled
decreasingSupply: DecreasingSupplySettings # if decreasing supply enabled
purchaseQueue: PurchaseQueueStatus # if queue enabled
}
Buy Now (Open Edition)
type PMBuyNowOpenEditionStrategy {
pmListingId: ID!
price: Amount!
stats: PMBuyNowStats!
dutchAuction: DutchAuctionSettings # if dutch auction enabled
}
Auction
type PMAuctionStrategy {
pmListingId: ID!
minimumBid: Amount!
bids: [PrimaryMarketBid!]!
stats: PMAuctionStats!
auctionBrackets: [PMAuctionBracket!]
rankedAuctionSettings: RankedAuctionSettings # if ranked auction
extensionSettings: ExtensionSettings
currentStep: Decimal
entryBid: Amount
myWinningBids: [PrimaryMarketBid!]!
leaders: [PrimaryMarketBid!]!
lowestWinningBid: PrimaryMarketBid
}
Secondary Market Types
SecondaryMarketListing
type SecondaryMarketListing {
id: ID!
edition: Edition
asset: Asset!
artwork: Artwork!
isActive: Boolean!
offersStrategy: SMOfferStrategy!
additionalStrategies: [AdditionalSecondaryMarketStrategy!]!
owner: UserPublic!
smSale: SecondaryMarketSale
createdAt: Time!
endedAt: Time
listedAt: Time
}
MarketplaceOrder
type MarketplaceOrder {
id: ID!
orderSide: MarketplaceOrderSide! # ASK or BID
usdPrice: Decimal!
price: Amount!
source: String!
sourceOrderId: String!
createdAt: Time!
expiresAt: Time!
updatedAt: Time!
quantity: Decimal!
filledQuantity: Decimal!
chain: Chain!
artwork: Artwork
asset: Asset
collection: Collection
maker: UserOrBlockchainAddress!
}
Marketplace & Activity Types
ActivityEntry
type ActivityEntry {
id: ID!
entryType: ActivityEntryType!
timestamp: Time!
amount: String!
edition: Edition
asset: Asset
assetType: AssetType!
artwork: Artwork!
artworks: [Artwork!]!
fromUserId: UserPublic
toUserId: UserPublic
fromBlockchainAddress: String
toBlockchainAddress: String
transactionHash: String
offerId: ID
}
enum ActivityEntryType {
PM_SALE # Primary market purchase
SM_LISTED # Listed on secondary market
SM_DELISTED # Removed from secondary market
SM_SALE # Sold on secondary market
SM_OFFER # Offer made
SM_GLOBAL_OFFER # Global offer on artwork
OS_SALE # Sold on OpenSea
OS_OFFER # Offer on OpenSea
OS_COLLECTION_OFFER # Collection offer on OpenSea
OS_LISTED # Listed on OpenSea
NEW_FLOOR_PRICE # Floor price changed
}
Filtering & Sorting Inputs
AssetFilter
input AssetFilter {
ids: [ID!]
assetType: AssetType! = EDITION
artworkIds: [ID!]
artistIds: [ID!]
hashes: [String!]
availability: [AssetFilterAvailabilityOption!] # BUY_NOW, ACCEPTING_OFFERS
owners: [AssetFilterOwner!]
features: [AssetFilterFeature!]
advancedFeatures: AssetAdvancedFeatureFilter
includeCollectionTags: [String!]
excludeCollectionTags: [String!]
}
enum AssetSortOption {
CREATED_AT
LIST_PRICE
EDITION_NUMBER
LAST_SALE_PRICE
LAST_SALE_TIME
OWNER
LIKED
TITLE
LISTED_AT
LAST_TRANSFERRED_AT
}
ExploreFilter
input ExploreFilter {
exploreTab: [ExploreTabFilter!] # LIVE, UPCOMING, OPEN, CLOSED, CLOSING_SOON
market: [ExploreFilterMarket!] # PRIMARY, SECONDARY
assetType: [ExploreFilterAssetType!] # IMAGE, VIDEO, OTHER
artistIds: [PersonID!]
personIds: [PersonID!]
containsTags: [String!]
notContainsTags: [String!]
}
enum ExploreSortOption {
LAST_SALE_TIME
RECENCY
ENDED_AT
FLOOR_PRICE
FEATURED_SCORE
UPCOMING
}
Common Types
Amount
type Amount {
value: Decimal!
currency: String! # "ETH", "USD", "USDC", etc.
}
PageInfo
type PageInfo {
startCursor: Cursor
endCursor: Cursor
hasNextPage: Boolean!
hasPreviousPage: Boolean!
}
StaticAsset
union StaticAsset = VideoAsset | ImageAsset | SVGAsset | AudioAsset | IFrameAsset
Each asset type implements IStaticAsset with at minimum id, baseUrl, and internalTitle fields.
baseUrl is a template, not a ready-to-use URLThe baseUrl field contains {{SIZE}} and {{FORMAT}} placeholders that must be replaced before use. If you see literal {{SIZE}} in your network requests, you need to substitute the placeholders first:
// Replace placeholders to get a usable image URL
const imageUrl = baseUrl
.replace("{{SIZE}}", "w640") // width: w80, w160, w320, w480, w640, w980, w1400, w2400, w3840, or "source"
.replace("{{FORMAT}}", "webp"); // format: webp, jpeg, png, gif, avif
// For SVGs and original files, strip the format segment:
const originalUrl = baseUrl
.replace("{{SIZE}}", "source")
.replace("@{{FORMAT}}", "");
For VideoAsset, baseUrl is a direct video URL (no placeholders). For thumbnails of non-image types, use previewImageUrl instead.
See Static Assets for the full guide on rendering each asset type.
ContractInfo
type ContractInfo {
contractAddress: String!
contractType: ContractType!
chain: ProductChain!
}
UserPublic
type UserPublic {
id: ID!
username: String
bio: String
profilePic: String
profileBanner: String
twitterHandle: String
linkedWallets: [LinkedWallet!]!
editions: [Edition!]!
withdrawnEditions: [Edition!]!
}
Person (Artist/Curator/Gallery)
type Person {
id: PersonID!
slug: String!
name: String
bio: Markdown
isArtist: Boolean!
isCurator: Boolean!
isGallery: Boolean!
cover: ImageAsset
artworks: [Artwork!]!
collections: [Collection!]!
exhibitions: [Exhibition!]!
profileLinks: [String!]!
location: String
bioLine: String
}
Enums Reference
Blockchain & Contract
enum ProductChain { NONE, ETHEREUM, TEZOS, BASE, SOLANA, PHYSICAL, BITCOIN }
enum Chain { ETHEREUM, SOLANA, TEZOS, BITCOIN, BASE, NOT_SPECIFIED }
enum ContractType {
ERC_721, ERC_721_CURATED, ERC_721v3, ERC_721v3_ON_CHAIN, ERC_721v3_CUSTOM_v1,
ERC_1155, ERC_1155v2, SOLANA, ARTBLOCKS, TEZOS_FXHASH, TEZOS_OBJKT
}
Market
enum Market { PRIMARY, SECONDARY, OPENSEA }
enum MarketplaceOrderSide { ASK, BID }
enum MarketplaceStatsPeriod { PERIOD_1D, PERIOD_7D, PERIOD_30D, PERIOD_ALL_TIME }
Sale Status
enum ArtworkSaleType { REGULAR, PRIVATE, NOTFORSALE, SILENT }
enum PrimaryMarketSaleStatus { PENDING, SUCCESS, FAILED }
enum SecondaryMarketSaleStatus { PENDING, SUCCESS, FAILED }
enum PrimaryMarketBidStatus { PENDING, PLACED, OUTBID, WINNER, FAILED }
Sorting
enum SortDirection { ASC, DESC }
Scalar Types
| Scalar | Description |
|---|---|
Cursor | Opaque pagination cursor |
Decimal | Arbitrary precision decimal |
Time | ISO 8601 datetime |
Markdown | Markdown-formatted text |
ArtworkID | Artwork identifier |
PersonID | Person identifier |
StaticAssetID | Static asset identifier |
ExhibitionID | Exhibition identifier |
GalleryID | Gallery identifier |
LinkID | Link identifier |