Skip to main content
Base URL: https://dash.joinmarkt.com
Invoices are the same order rows as merchant orders. There is no separate invoice table. invoiceId in the response is the order’s stored orderId. The path {invoiceId} is trimmed, then looked up as the row id or the stored orderId. The trimmed value is tried, then the same value uppercased when it differs. The order publicId column is not a lookup key. Scope: invoice:read. Dashboard ceiling: viewOrders. The user must be able to access {storeId}. Store scope SELECTED must include that shop. ALL_ACCESSIBLE does not add a shop list. Access mode RESTRICTED must include invoice:read. Access mode FULL skips the scope list and still requires viewOrders. Limiter: 120 requests per 60 seconds per client IP. 429 Too many requests is returned before the key is checked. Successful bodies are the objects below. Errors:
code is BAD_REQUEST, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, RATE_LIMITED, or INTERNAL_ERROR. A 500 also includes errorId.

GET /api/merchant/v1/stores/{storeId}/invoices

Query parameters this route reads are the merchant order list parameters. Other query keys are ignored. Omitted or empty limit, cursor, status, from, and to are left unset (limit defaults to 50). An invalid value returns 400. The message is the Zod issues joined with ; (path: message when the issue has a path). An unreadable cursor returns 400 with error Invalid cursor. Rows are newest first (createdAt descending, then id descending). The handler loads limit + 1 rows. hasMore is true when an extra row exists. nextCursor is set only then, and is the base64url of {last.createdAt ISO}|{last.id}. nextCursor is null when hasMore is false. Each invoice is mapped from the order list item. keyCount is not copied.
Not included: publicId, note, customFieldResponses, keyCount, product-key strings, ipAddress, userAgent, browser, operatingSystem, asn, ipIntel, stripeCheckoutUrl, cryptomusPaymentAddress, cryptomusQrCode, nowpaymentsPaymentAddress, paypalFfEmail, venmoFfEmail, cashAppEmail, customPaymentProofUrls, gatewayCheckoutUrl. Lookup does not use publicId.
Fallback error: Failed to list invoices.

GET /api/merchant/v1/stores/{storeId}/invoices/{invoiceId}

No query parameters. Unknown id, or an order that belongs to another shop, returns 404 Order not found. The body is one invoice object with the same fields as a list element. Detail does not add note, customFieldResponses, or keyCount. Fallback error: Failed to load invoice.

Errors

There is no create, update, or delete method on these paths.