# SenPrints Seller API > Create and track print-on-demand fulfillment and FBA orders on SenPrints: product catalog, orders, order status and tracking webhooks. Authenticate with the seller's API key as a Bearer token. ## Docs - [API reference as Markdown](https://api-sg.senprints.net/api/documentation.md): every endpoint with its parameters, request and response examples. One endpoint: ?method=PUT&path=/seller-api/webhook - [OpenAPI 3 spec](https://api-sg.senprints.net/api/documentation.openapi) - [Interactive reference](https://api-sg.senprints.net/api/documentation) ## Environments - Production: API base URL https://api-sg.senprints.net, API key from https://seller.senprints.com (Settings -> General), MCP server https://api.senprints.com/mcp/seller, docs https://api-sg.senprints.net/api/documentation. - Development: API base URL https://apis.dev.senprints.net, API key from https://seller.senprints.xyz (Settings -> General), MCP server https://apis.dev.senprints.net/mcp/seller, docs https://apis.dev.senprints.net/api/documentation. - They share nothing: a key works on its own environment only (HTTP 401 on the other). Paths and bodies are the same. ## AI assistants - Seller MCP server (URL per environment above): connect Claude, ChatGPT or any MCP client and sign in with the SenPrints seller account of that environment (OAuth). Tools search orders, look up the fulfillment catalog, upload artwork, create fulfillment orders and read sales and balance; creating an order or changing campaigns asks to confirm first. ## Getting started - API key: seller dashboard of the environment, Settings -> General (account owner only, valid for one year). - Dry run an order: POST /seller-api/orders/validate (same checks as POST /seller-api/orders, creates nothing). - Tracking: PUT /seller-api/webhook with a URL; the events arrive as signed or unsigned JSON POSTs. GET /seller-api/webhook/deliveries lists every attempt with the body sent and how the URL answered. - Retries: POST /seller-api/orders with an order_number already used creates nothing, so a retry is safe. - Limits: 300 requests a minute per API key (HTTP 429 with Retry-After). Check the success field: a failed check on an order body answers HTTP 200 with success=false.