Developer reference

The MineX API

Everything on this site, from items and players to the store and the player market, is powered by the MineXShift API. This page documents the surface that integrators (server plugins, bots, dashboards) can build against, including the signed webhook feed.

Base URLs & authentication

Devnet · test network

https://devnetapi.minex.gg

Mainnet · production

https://api.minex.gg

Server-to-server endpoints require an API key issued by the MineX team, sent on every request:

curl https://devnetapi.minex.gg/nx/items?perPage=10 \
  -H "x-api-key: YOUR_API_KEY"

Checkout endpoints under /nx/market/orders/:id/… are instead gated by the single-use order token issued when the order is created, so it is safe to call from a buyer's browser session.

Items & players

GET/nx/itemsPaginated item list. Filters: forSale, page, perPage.
GET/nx/items/:itemIdOne item with attributes, owner and sale state.
GET/nx/users/:refPlayer profile by reference UUID.
GET/nx/users/:ref/itemsItems owned by a player.
GET/nx/users/:ref/activityPublic activity feed: items found in-game, transfers, listings, trades. Optional ?name= matches the minex:found_by attribute.
POST/nx/users/:ref/items/:itemId/transferTransfer an item (consent flow for custodial wallets).
GET/nx/transactions/:idTransaction status: Pending → Confirmed | Failed.

Player market (P2P)

Players sell items to each other for a fixed USD price. Buyers pay by card or USDC; the item is delivered instantly; MineX takes a 10% fee and pays the seller from the house account (manual review, 24h SLA). Crate purchases in the store follow the same pattern with a 30% fee.

POST/nx/market/ordersCreate an order for a listed item (API key). Returns the order + one-time checkout token.
GET/nx/market/orders/:id?token=…Order snapshot for the checkout page (token-gated).
POST/nx/market/orders/:id/card-intentStart a card payment. Returns a Stripe client secret via Merso.
POST/nx/market/orders/:id/confirmServer-side payment verification → instant delivery.
POST/nx/market/orders/:id/usdc-confirmVerify a USDC transfer to the house wallet on-chain → instant delivery.
GET/nx/market/activity/:userRefA player's purchases and sales with payout status (API key).

Guardrails: min price $0.50 · card limit $100/order and $200/day per buyer · unpaid orders expire in 30 minutes · one payment signature settles exactly one order.

Payments

Card. Payments are processed by Merso on Stripe, so card data never touches MineX servers. The checkout confirms the payment server-side (verify-purchase) before any item moves.

USDC. Buyers send the exact amount to the MineX house wallet from any Solana wallet and submit the transaction signature; the backend verifies mint, amount and destination on-chain before delivering.

Escrow model: buyer money always lands on the MineX house account first. Sellers are paid after a manual security review, never automatically from the buyer's payment.

Webhooks

MineXShift pushes signed events to your HTTPS endpoint (registered by the MineX team; the signing secret is shown once). Payloads are flat JSON under a data key.

Event typeFired when
transactionAny transfer/mint confirms on-chain (includes sender, recipient, assetId).
market.listedAn item is listed on the player market.
market.cancelledA listing is withdrawn.
market.soldA sale is paid and the item is delivered to the buyer.
market.payout_paidThe seller's USDC payout is settled (includes the Solana signature).
market.payout_holdA payout is held for manual review.

Signatures are svix-compatible: verify the webhook-signature header by HMAC-SHA256 over `${webhookId}.${timestamp}.${dataJson}`:

const crypto = require('crypto');

function verify(headers, dataJson, secretB64) {
  const secret = Buffer.from(secretB64.replace(/^whsec_/, ''), 'base64');
  const signed = `${headers['webhook-id']}.${headers['webhook-timestamp']}.${dataJson}`;
  const expected = 'v1,' + crypto.createHmac('sha256', secret)
    .update(signed).digest('base64');
  return headers['webhook-signature'].split(' ').includes(expected);
}

Respond with HTTP 200 on receipt. Failed deliveries are retried automatically and can be redelivered from the MineX console.

Need an API key or a webhook endpoint?

Access is granted per-project by the MineX team.

Ask on Discord