POST /api/admin/catalog/products/{id}/downloadable-links/upload and .../downloadable-samples/upload.GET /api/admin/catalog/products/{id}/downloadable/{attributeId}/download.campaignId / cartRuleId / sitemapId and the generated sitemap file paths and timestamp; these fields now resolve. REST was unaffected.customerId is now required, so an address can no longer be changed or removed without identifying its customer.POST /api/admin/transactions + createAdminTransaction): record a full or partial payment against an invoice; the invoice is marked paid and the order advances once payments cover its total.null over GraphQL (REST was unaffected).Major release. Contains breaking changes to the Admin API (some response shapes changed). The Shop (storefront) API is fully backward compatible — storefront integrations need no changes.
adminCustomers / adminCustomer (GET /api/admin/customers) to return the customer group as a nested object instead of the flat customerGroupId / customerGroupName.adminCustomerReviews / adminCustomerReview (GET /api/admin/customers/reviews) to return product, customer, and images as nested objects instead of flat scalars.adminSettingsChannels / adminSettingsChannel (GET /api/admin/settings/channels) to return locales, currencies, and inventory sources as object collections instead of int arrays.adminInvoices / adminInvoice (GET /api/admin/invoices) to return the order as a nested object instead of the flat orderId.adminSettingsTaxCategories / adminSettingsTaxCategory and adminSettingsThemes / adminSettingsTheme to return nested data as field-selectable objects instead of an opaque JSON blob.adminReviews / adminReview (GET /api/admin/reviews); use adminCustomerReviews / adminCustomerReview (GET /api/admin/customers/reviews) instead.bagisto-api-platform:optimize — single post-deploy command that caches config, events, and routes and warms the API Platform metadata + GraphQL schema. Cuts typical response times ~5× (GraphQL list ~1.5s → ~0.3s). Fails loudly if route caching fails and warns when APP_DEBUG is on; pair with APP_DEBUG=false. Run it after every deploy or endpoint change.taxRates, translations) to be field-selectable instead of an opaque JSON blob.id — now returns a snapshot of the deleted record plus a message.isGift), Marketing Campaigns / Search Terms / Subscribers (nested channel / customerGroup / marketingTemplate), Customers (group.isUserDefined), Invoices (nested order).adminMarketingCartRule partial update wrongly demanding couponCode — it now preserves the existing coupon.skipped ids.{ data, meta } envelope — now a plain list of ids.adminCustomer REST detail returning 500 when a date of birth is set.sort / order to the Wishlist and Customer Address listings.Integration menu
bagisto-api:prune-audits command, and a retention config. Sensitive fields are redacted; the feature can be switched off.Sales menu
?format=csv, honours listing filters; REST only).Catalog menu
CMS menu
previewUrl.Settings menu
delete-self, password-confirmed).Reporting menu
Installation
composer require bagisto/bagisto-api failure on a fresh install — the API Platform dependencies are now pinned to a consistent, tested set so installation completes cleanly.Configuration menu
Settings menu
null; REST unchanged).Reporting menu
dateRange now resolves over GraphQL on every reporting query.Sales menu
id was exposed).cartId, orderId, …) instead of the non-selectable id.last_three_months / last_six_months)._from/_to range).adminOrders) now accepts its filter arguments (previously rejected as unknown).422.422 when one is missing.vatId.state: removed the non-existent refunded value from the filter, OpenAPI enum, and docs.Catalog menu
formattedPrice / baseImageUrl / isSaleable (were null).isComparable, enableWysiwyg, and regex (could be set but not read back).CMS menu
pageTitle, urlKey, htmlContent, metaTitle, previewUrl, timestamps) now resolve over GraphQL (were null).GraphQL node ids
ids returned the export path instead of the per-record IRI once a CSV export endpoint was added; corrected.Sales menu
Admin Sales: Orders tag (the former Admin Orders / Admin Order Actions / Admin Carts tags were retired).Catalog menu
adminProducts picker is repositioned as the Create-Order "Add Product" search.Customer REST API (parity with existing GraphQL)
Admin REST + GraphQL API (new surface)
all, custom, same_as_web), configurable expiry, regeneration, and revocation. Lifecycle email notifications on generate / regenerate / revoke, including a signed login-free revoke link sent to the token owner.Admin API endpoints by menu
_warnings array surfacing dropped sub-resource fields); delete; copy; mass-delete; mass-update-status. Sub-resources: images (multipart upload, reorder, delete), inventories (list plus bulk update with meta.totalQty), and customer-group prices (full CRUD with composite uniqueness).Infrastructure
{ data, meta } envelope on every admin paginated collection.X-Total-Count, X-Page, X-Per-Page, X-Total-Pages on every paginated REST endpoint (CORS-exposed so JavaScript clients can read them).application/json request bodies on admin endpoints no longer return 500 — accepted as {} automatically.X-STOREFRONT-KEY is no longer required on admin endpoints. Admin auth is Bearer-only; the storefront key remains required on shop endpoints.success and message fields, matching the other checkout endpoints.1.0.4 in Swagger / API Platform configuration.toggleWishlist mutation no longer fails with "Internal server error" when a downstream listener misbehaves — the toggle completes successfully and listener failures are silently swallowed.removeCartItem, applyCoupon, and removeCoupon GraphQL responses now carry the correct success and message fields. Apply-coupon verifies the code actually applied before reporting success.readCart now returns the applied couponCode (previously always null after applying a coupon).currentPassword for password changes (previously rejected as missing).logoPath and logoUrl (null when unset) so clients can rely on field presence.createNewsletter GraphQL mutation now correctly accepts customerEmail (previously rejected as missing).top-selling-products and reporting top-selling-products-by-revenue / by-quantity no longer return "Internal server error".locales / currencies / inventory_sources when those fields are omitted from the request body.PageProvider for CMS page API resource.InstallApiPlatformCommand.cache(...) → correct artisan command).bagisto-api-platform:install artisan command (installation command for the platform).bootstrap/providers.php.post-autoload-dump composer hook.InstallApiPlatformCommand.bagisto/bagisto-api./api/docs and GraphQL playground at /graphiql.Customer account APIs
CustomerOrderProvider).CustomerOrderShipmentProvider).CustomerInvoiceProvider) and invoice PDF download (InvoicePdfController).CustomerReviewProvider).CustomerDownloadableProductProvider) and purchased-downloads download endpoint (DownloadablePurchasedController).CancelOrderProcessor + CancelOrderInput DTO).ReorderProcessor + ReorderInput DTO).CustomerProfileOutput) and profile helper.Catalog & storefront APIs
PageProvider, GraphQL PageByUrlKeyResolver tagged as collection query resolver).ChannelProvider).BookingSlotProvider) and mutations for Booking / Event Booking product types.DownloadSampleController).ContactUsProcessor + ContactUsInput/ContactUsOutput DTOs).Cart, wishlist & compare
CartTokenProcessor extended).CompareItemProvider/CompareItemProcessor) + delete-all (DeleteAllCompareItemsProcessor).WishlistProvider/WishlistProcessor) + delete-all (DeleteAllWishlistsProcessor).MoveWishlistToCartProcessor + input/output DTOs).Infrastructure
php artisan bagisto-api-platform:cache:clear (ClearApiPlatformCacheCommand).CursorAwareCollectionProvider for cursor-based pagination.FixedSerializerContextBuilder to patch API Platform serializer context handling.SnakeCaseLinksHandler for consistent snake_case link rendering.en/app.php + 20 locale files: ar, bn, ca, de, es, fa, fr, he, hi_IN, id, it, ja, nl, pl, pt_BR, ru, sin, tr, uk, zh_CN) including Event Booking product type strings.formattedPrice (ShippingRateOutput updated).InstallApiPlatformCommand now publishes vendor config.api-platform/laravel and api-platform/graphql pinned to specific versions in composer.json.info.version bumped to 1.0.3 in config/api-platform.php, config/api-platform-vendor.php, and the SwaggerUIController error fallback.attributeValues key resolved correctly in product query data.formattedPrice field for downloadable and Event Booking product types.api-platform-vendor.php newline hygiene.graphqli → graphiql typo in the GraphQL Playground link.CHANGELOG.md (this file).How can I help you explore Laravel packages today?