API Changelog

Stay up-to-date with the latest changes and improvements to the Eshop-rychle API

  1. New

    Documents API is stable

    GET /invoices and /invoices/{id} are out of beta and their contract is now stable. They serve every accounting document the e-shop issues — invoice, credit note, advance invoice and payment receipt; documentType says which one. Each document carries its lines in items and their per-VAT-rate recap in vatRecap, rounded to cents as the printed document, plus roundingAmount, advanceDeductions split by VAT rate, paidAmount and remainingToPay, the currency the document is issued in, relatedDocuments and, on a credit note, isStockReturned. Filter by documentType, dateIssue and invoiceChanged to fetch only what changed since your last read; the invoiceCreate, invoiceChange and invoiceDelete webhooks tell you when to. Needs order read permission.

  2. New

    Product sets: read, write and stock derived from components

    GET /product-items and /products carry isProductSet and the composition in productSetItemList, with an isProductSet filter. New /product-sets resource: POST adds a component, PATCH changes its quantity, DELETE removes it; filter by productItem for one set or by productSetItem for the sets a product is part of. Turn a product into a set with isProductSet: true on PATCH /product-items/{id}. The stock of a set is derived from its components and recalculated after every change; a written stock value is replaced by the derived one. Orders carry the sold components in orderProductSetList, invoices in productSetItemList. Writing requires the product sets feature to be enabled for the e-shop, otherwise 422.

  3. Improvement

    Product UUIDs in listings and on product boxes

    category.products[] in the frontend dataLayer now carries productUuid and productItemUuid, like the other product blocks. Every product box in the page HTML carries the same values as data-product-uuid and data-product-item-uuid, so a script that adds content to a listing can tell which box is which product, including boxes added by "Load more". Contract version 1.2.

  4. New

    Batch creation of discount coupons

    Added POST /discount-coupons/batch for creating up to 400 coupons in one request, e.g. a unique code for every newsletter recipient. Items take the fields of POST /discount-coupons without products, categories and shippings. A code that already exists is not overwritten: that item returns responseCode 409 and the rest are created, so resend only the conflicts.

  5. Improvement

    productView on variant switch in the frontend dataLayer

    Switching to another variant on a product detail page now pushes a productView event with the selected variant, and getEshopDataLayer('product') returns that variant. Before, the dataLayer kept the originally loaded product until the next page load. The event shape is unchanged, so the contract stays at version 1.1.

  6. Improvement

    Product and item UUIDs in the frontend dataLayer

    Product blocks in the frontend dataLayer now carry productUuid and productItemUuid, the same ids as /products/{id} and /product-items/{id} in the REST API and webhooks. For a variant, productItemUuid is the variant's item. Fixed: order.items[].id on the thank-you page now carries the same product id as productView and cart. Contract version 1.1.

  7. New

    App-code exchange says who opened your application

    The exchange response now carries userEmail and userRole of the administration user who clicked Open application — any user allowed to manage modules can, not only the owner. userRole is owner, user, auditor, design or support; support means Eshop-rychle staff. Both are null for older codes and for a role outside that list. customerEmail still carries the owner's e-mail.

  8. New

    Incremental reads notice category changes

    Assigning a product to a category or removing it — including the primary category and deleting a category — now moves productChanged on GET /products and sends productChange. Renaming or moving a category in the tree does not touch its products; GET /categories gained changed[after] for that. Always add order[changed]=asc, or paging skips rows.

  9. New

    Webhook for order payment status changes

    Added the orderPaymentChange webhook. It fires whenever an order switches between paid and unpaid, whatever the source — payment gateway, bank statement pairing, Homecredit or a manual change in the admin. The payload carries the order ID and the new isPaid value, one order per message. Orders created as already paid are not reported; orderCreate covers them. Fires only if the package and API access are allowed to read orders, and nothing reaches you until you register the type.

  10. New

    Read and change how the e-shop manages product variants

    New GET and PATCH /api-engine/variant-configs with variantMode. productItems means every variant is a product item of its own — write variants via /product-items and /product-variant-definitions. combinationalVariants means the old variants, one base price plus surcharges — write them via /product-combinational-variants. Read it before writing variants; /product-dials is shared by both modes and does not tell them apart. Switching to productItems also makes choosing a variant mandatory and overwrites the stock of main products with the sum of their variants. Sending the mode that is already set changes nothing. Needs the e-shop config read or write permission.

  11. New

    Product reviews: read, write and webhooks

    New /product-reviews resource: customer reviews with rating, text, author, product and the merchant's reply, filterable by change time, product and published state. POST creates a review, PATCH hides it or replies. Webhooks productReviewCreate, productReviewChange and productReviewDelete send one review per message. Needs product read/write permission and the Product rating package.

  12. New

    Read products incrementally by the time of their last change

    GET /products filters on productChanged[after] — any change to the product or its items, stock movements included. productItemChanged[after] on /product-items misses product-level changes. Always add order[…]=asc, or paging skips rows. Send shop-local time without an offset. The first poll returns the whole catalogue; deletions come only via productDelete.

  13. New

    Orders say whether the customer is on the e-shop's blacklist

    Orders now carry isBlacklisted. It is true when the name, e-mail or phone number of the delivery or billing address matches the e-shop's blacklist, ignoring case and diacritics — the same warning the merchant sees in the administration. It never blocks the order, and it cannot be filtered on.

  14. New

    Open a partner application with a one-time code

    An active package can now send a merchant to your application with a 60-second one-time code. Exchange it from your backend on the fixed api.eshop-rychle.cz host with X-AUTH-TOKEN; never trust the website query parameter before the exchange. customerEmail can be an empty string.

  15. New

    Orders carry the type and UUID of the chosen delivery and payment

    Orders now carry deliveryType, paymentType, deliveryMethodId and paymentMethodId — a snapshot taken when the order was placed, so cash on delivery stays recognisable after the e-shop renames or deletes the method. Gateway orders add paymentSubMethod { id, name }. UUIDs match id in /delivery-methods and /payment-methods; on older orders the snapshot is filled only where it could be reconstructed.

  16. New

    Document webhook notifications

    Added the invoiceCreate, invoiceChange and invoiceDelete webhooks, covering all four document types — invoice, credit note, advance invoice and payment receipt; documentType says which one. Documents are batched per e-shop and de-duplicated. The payload carries only IDs — fetch the current data via GET /api-engine/invoices/{id} (a deleted document returns 404). If a notification is missed, GET /api-engine/invoices with invoiceChanged[after] lists everything touched since your last read. Fires only if the package and API access are allowed to read orders, and nothing reaches you until you register the type.

  17. Fix

    Creating a sub-resource returns 422 instead of 500

    Creating a sub-resource with some text fields left out, or creating one that already exists, failed with a bare 500. Both now return 422 naming the field or the conflict.

  18. New

    Active delivery and payment methods of the e-shop

    GET /delivery-methods and GET /payment-methods list what the e-shop really offers at checkout. Deliveries carry their bands — price, weight and order-value limits, and the UUIDs of the payments allowed in each band. Payments carry paymentType, the surcharge, an image and the active sub-methods of gateways. Both collections are unpaginated and need the e-shop config read permission.

  19. New

    Mark a document as reported to e-invoicing (Peppol)

    Documents now carry peppolReportedAt — the moment the document was handed over to the e-invoicing (Peppol) network. Read it on GET /invoices, set or clear it with the new PATCH; it is the only writable field. Once set, the administration warns the merchant before editing the document, so what you reported stays in sync.

  20. Improvement

    Product videos can be filtered by product

    GET /product-videos now accepts the product query filter (UUID or IRI, plus id for completeness), matching what /product-images already offers with productItem. Until now the parameter was silently ignored and the collection always returned all videos of the e-shop.