EvoMarket API
A small REST API for reading our card catalog and managing your own listings + orders. Versioned at /api/v1.
Getting started
Mint an API key from /sell/integrations/api-keys. Send it in the Authorization header:
curl https://evolvedmarket.com/api/v1/listings \
-H "Authorization: Bearer evom_ak_..."Conventions
- JSON requests + responses, UTF-8, camelCase field names.
- Money is always integer cents (
priceCents,totalCents). - Pagination:
?page=1&pageSize=50(max 100). Response includestotal,page,pageSize. - Errors:
{ "error": { "code": "...", "message": "..." } }. Codes: UNAUTHORIZED · FORBIDDEN · NOT_FOUND · VALIDATION · CONFLICT · INTERNAL.
Catalog
GET/api/v1/catalog/sets
List active sets across all supported games (filter with ?game=pokemon or ?game=magic).
GET/api/v1/catalog/cards
Search cards. Query params: game, set, rarity, q, page, pageSize.
GET/api/v1/catalog/cards/{id}
Fetch a single card by ID (e.g. me3-15).
Listings
All listings endpoints require auth. They're scoped to your listings only.
GET/api/v1/listings
Your listings. Filter with ?status=ACTIVE|PAUSED|SOLD_OUT.
POST/api/v1/listings
Create a listing.
{
"cardId": "me3-15",
"condition": "NEAR_MINT",
"priceCents": 499,
"quantity": 3,
"notes": "minor edge whitening"
}PATCH/api/v1/listings/{id}
Partial update. Send any subset of priceCents, quantity, notes, status.
DELETE/api/v1/listings/{id}
Soft-deletes by setting status to DELISTED.
Orders
Each shipmentin our model is what you'd call an "order" from a seller's POV — the slice of a buyer's checkout that you ship. id in these endpoints is a shipment ID.
GET/api/v1/orders
Your incoming shipments. Filter with ?status=AWAITING_SHIPMENT|SHIPPED|DELIVERED|CANCELLED.
GET/api/v1/orders/{id}
One shipment with full address + line items.
Rate limits
No hard limit yet. Be reasonable — under ~10 requests/sec sustained is fine. Vercel may rate-limit egregious abuse at the infrastructure layer.
Field naming
We use camelCase to match our internal model. If your tooling prefers snake_case, you'll need to translate at your edge.
Versioning
The path includes /v1/. Breaking changes go in a new prefix (/v2/, etc.). We won't remove or rename v1 fields without major version bump + 6 months notice.