Introduction

Metaplex API

Last updated August 1, 2026

The Metaplex API is the public REST API at api.metaplex.com. It serves Genesis launch data, builds launch-creation transactions, and exposes the Metaplex Agent Registry — browsing agents, serving A2A AgentCards, and building agent wallet transactions.

Summary

The Metaplex API provides public HTTP access to Genesis launch data, launch creation, and the agent registry — no SDK or authentication required.

  • Query launches by genesis address, token mint, or browse all active launches
  • Create and register new Genesis launches
  • Browse and search the agent registry; fetch per-agent A2A AgentCards
  • Build agent mint, fund, and withdraw transactions
  • Public REST API at https://api.metaplex.com/v1 — no authentication required
  • Supports Solana mainnet (default) and devnet via network query parameter
  • Machine-readable OpenAPI 3.1 specification: YAML (canonical) / JSON, discoverable via the RFC 9727 API catalog

Base URL

https://api.metaplex.com/v1

Network Selection

By default, the API returns data from Solana mainnet. To query devnet launches instead, add the network query parameter:

?network=solana-devnet

Example:

# Mainnet (default)
curl https://api.metaplex.com/v1/launches/7nE9GvcwsqzYcPUYfm5gxzCKfmPqi68FM7gPaSfG6EQN
# Devnet
curl "https://api.metaplex.com/v1/launches/7nE9GvcwsqzYcPUYfm5gxzCKfmPqi68FM7gPaSfG6EQN?network=solana-devnet"

Authentication

No authentication is required. The API is public with rate limits.

Launch Endpoints

MethodEndpointDescription
GET/launches/{genesis_pubkey}Get launch data by genesis address
GET/tokens/{mint}Get all launches for a token mint
GET/launchesList launches with optional filters
GET/launches?spotlight=trueGet featured spotlight launches
POST/launches/createBuild on-chain transactions for a new launch
POST/launches/registerRegister a confirmed launch for listing
POST/twitter/verifyVerify Twitter account ownership for launch registration
POST/creator-rewards/claimBuild a creator rewards claim transaction

The POST endpoints (/launches/create and /launches/register) are used together to create new token launches. For most use cases, the SDK API Client provides a simpler interface that wraps both endpoints. Real-time on-chain launch state can be read directly with the SDK chain methods fetchBucketState and fetchDepositState.

Agent Endpoints

MethodEndpointDescription
GET/agentsList and search registered agents (paginated)
GET/agents/{address}Get a single agent with tokens and metadata
GET/agents/{address}/agent-card.jsonGet the hosted A2A AgentCard
POST/agents/mintBuild an agent mint + registration transaction
POST/agents/{address}/fundBuild a SOL transfer to the agent's wallet
POST/agents/{address}/withdrawBuild a withdrawal from the agent's wallet (owner only)

For minting agents with a guided walkthrough, see Mint an Agent.

Transaction-Building Endpoints

POST endpoints that build transactions never hold user keys and never submit transactions. Each returns one or more base64-serialized transactions plus the blockhash they were built against; your application deserializes them, has the user's wallet sign, and submits to the network.

Error Codes

CodeDescription
400Bad request - invalid parameters
403Not authorized for the operation (e.g. withdrawing from an agent you don't own)
404Launch, token, or agent not found
429Rate limit exceeded
500Internal server error

Response Envelopes

Two envelope conventions are in use, reflecting the API's evolution:

Launch read endpoints (/launches*, /tokens/*, /creator-rewards/claim) wrap results in data and errors in error.message:

{ "data": { "…": "…" } }
{ "error": { "message": "Launch not found" } }

Agent endpoints, launch write endpoints, and /twitter/verify use a success discriminator:

{ "success": true, "…": "…" }
{ "success": false, "error": "Agent not found" }

The exception is /agents/{address}/agent-card.json, which returns raw AgentCard JSON with no envelope so A2A clients can consume it directly. Each endpoint page documents its exact shape, as does the OpenAPI specification.

Machine-Readable Specification

The full API contract is published as an OpenAPI 3.1 document, generated directly from the API's request validators (so it cannot drift from the implementation):

FormatURL
YAML (canonical)https://api.metaplex.com/v1/openapi.yaml
JSONhttps://api.metaplex.com/v1/openapi.json
Current-version aliaseshttps://api.metaplex.com/openapi.json / openapi.yaml
RFC 9727 API cataloghttps://api.metaplex.com/.well-known/api-catalog

Import the spec into Postman, Swagger UI, code generators, or agent frameworks to get typed clients and callable tools for every endpoint.

Notes

  • The API is rate limited. If you receive a 429 response, reduce your request frequency.
  • All date fields (startTime, endTime, graduatedAt, lastActivityAt) are returned as ISO 8601 strings.
  • The default network is solana-mainnet. Devnet data is available via ?network=solana-devnet.
  • For POST endpoints, the SDK API Client is recommended as it wraps both /launches/create and /launches/register.

Shared Types

TypeScript

interface Launch {
launchPage: string;
mechanic: string;
genesisAddress: string;
spotlight: boolean;
startTime: string;
endTime: string;
status: 'upcoming' | 'live' | 'graduated' | 'ended';
heroUrl: string | null;
graduatedAt: string | null;
lastActivityAt: string;
type: 'launchpool' | 'presale';
}
interface BaseToken {
address: string;
name: string;
symbol: string;
image: string;
description: string;
}
interface Socials {
x?: string;
telegram?: string;
discord?: string;
}
interface ErrorResponse {
error: {
message: string;
};
}

Rust

use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Launch {
pub launch_page: String,
pub mechanic: String,
pub genesis_address: String,
pub spotlight: bool,
pub start_time: String,
pub end_time: String,
pub status: String,
pub hero_url: Option<String>,
pub graduated_at: Option<String>,
pub last_activity_at: String,
#[serde(rename = "type")]
pub launch_type: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BaseToken {
pub address: String,
pub name: String,
pub symbol: String,
pub image: String,
pub description: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Socials {
pub x: Option<String>,
pub telegram: Option<String>,
pub discord: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ApiError {
pub message: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ErrorResponse {
pub error: ApiError,
}

Add these dependencies to your Cargo.toml:

[dependencies]
reqwest = { version = "0.12", features = ["json"] }
tokio = { version = "1", features = ["full"] }
serde = { version = "1", features = ["derive"] }

Glossary

TermDefinition
Genesis AddressA PDA (Program Derived Address) that uniquely identifies a specific launch campaign
Base TokenThe token being launched, identified by its mint address
Launch PageThe URL where users can participate in a launch
MechanicThe allocation mechanism used for the launch (e.g., launchpoolV2, presaleV2, auction)
Launch TypeThe underlying mechanism of the launch: launchpool or presale
SpotlightA platform-curated flag indicating a featured launch
StatusThe current state of a launch: upcoming, live, graduated, or ended
SocialsSocial media links (X/Twitter, Telegram, Discord) associated with a token
LaunchDataThe response wrapper containing launch, baseToken, website, and socials
TokenDataThe response wrapper for token queries, containing a launches array plus baseToken, website, and socials