api-platform/core
Build a fully-featured hypermedia or GraphQL API in minutes!
v4.3.17
53M downloads/mo
#703 most downloaded on Packagist
api-platform/core
What this package is like to depend on
Last release 1 months ago
12 Jul 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 272 of 289 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
377 releases · first in 2015
65 releases in the last 12 months
see the full history below
Release timeline
375 releases · Jun 2015 to Jul 2026Releases
latest 60 of 377-
v5.0.0-alpha.212 Jul 2026 pre-releaseRelease notes
Open source →Breaking changes
- feat!: remove deprecated APIs scheduled for 5.0 (#8367)
- feat!: remove the legacy PropertyInfo Type system, use symfony/type-info (#8364)
- feat!: core 5.0 cleanups — PropertyAwareFilterInterface::getProperties(), JSON:API status as string (#8366)
Features
- feat(doctrine): standalone Date/Exists filters, ComparisonFilter [between], deprecate RangeFilter (#8351)
Bug fixes
- fix(jsonschema): drop removed getBuiltinTypes path in SchemaPropertyMetadataFactory
Dependencies
Release notes
Open source →Breaking changes
- e22e74464 feat!: remove deprecated APIs scheduled for 5.0 (#8367)
- 4a9a14507 feat!: remove the legacy PropertyInfo Type system, use symfony/type-info (#8364)
- 1e6d13ae1 feat!: core 5.0 cleanups — PropertyAwareFilterInterface::getProperties(), JSON:API status as string (#8366)
Features
- d37a75379 feat(doctrine): standalone Date/Exists filters, ComparisonFilter [between], deprecate RangeFilter (#8351)
Bug fixes
- 88f458a11 fix(jsonschema): drop removed getBuiltinTypes path in SchemaPropertyMetadataFactory
Release notes
Open source →Breaking changes
- e22e74464 feat!: remove deprecated APIs scheduled for 5.0 (#8367)
- 4a9a14507 feat!: remove the legacy PropertyInfo Type system, use symfony/type-info (#8364)
- 1e6d13ae1 feat!: core 5.0 cleanups — PropertyAwareFilterInterface::getProperties(), JSON:API status as string (#8366)
Features
- d37a75379 feat(doctrine): standalone Date/Exists filters, ComparisonFilter [between], deprecate RangeFilter (#8351)
Bug fixes
- 88f458a11 fix(jsonschema): drop removed getBuiltinTypes path in SchemaPropertyMetadataFactory
Dependencies
- Require
symfony/*^7.4 || ^8.0across all components; drop support for Symfony 6.4 and 7.0–7.3 (#8397) - Stabilize formerly
@experimentalAPIs (Elasticsearch, State parameter providers, PropertyAwareFilterInterface, Laravel);@experimentalkept only on MCP (#8365)
-
v5.0.0-alpha.129 Jun 2026 pre-releaseNothing published for this version
-
v4.4.0-alpha.312 Jul 2026 pre-releaseRelease notes
Open source →Release notes
Open source →Bug fixes
- f8c217283 fix(state): correct composer "conflicts" key to "conflict" (#8400)
Dependencies
- Require
symfony/*^7.4 || ^8.0across all components; drop support for Symfony 6.4 and 7.0–7.3 (#8397) - Stabilize formerly
@experimentalAPIs (Elasticsearch, State parameter providers, PropertyAwareFilterInterface, Laravel);@experimentalkept only on MCP (#8365)
-
v4.4.0-alpha.226 Jun 2026 pre-releaseRelease notes
Open source →What's Changed
- test(serializer): skip union-collection IRI test on legacy property-info by @soyuka in #8355
- test(functional): skip union-collection IRI test on legacy property-info by @soyuka in #8356
Full Changelog: v4.4.0-alpha.1...v4.4.0-alpha.2
Release notes
Open source →Bug fixes
- b3f02f4e0 fix(laravel): require
api-platform/metadata^4.4@alphaso inter-package dependencies resolve to 4.4 (fixes a brokencomposer require api-platform/laravelinstall whereSortFilterInterfacewas missing)
-
v4.4.0-alpha.125 Jun 2026 pre-releaseRelease notes
Open source →What's Changed
- feat(openapi): Scalar API Reference documentation support by @soyuka in #7817
- fix(mcp): fallback to sdk handler when not found by @soyuka in #7818
- feat: support dynamic HTTP response status code via request attribute by @Griffon-Weglot in #7904
- fix(state): scope ReadLinkParameterProvider to current Link's class by @soyuka in #7943
- test: phpunit exception not restored by @soyuka in #7949
- feat(hydra): use hydra:memberAssertion instead of owl:equivalentClass by @abderrahimghazali in #7944
- refactor(jsonld): simplify @context building by @soyuka in #7952
- refactor: split normalizer/denormalizer by @soyuka in #7713
- test(jsonld,hydra,hal): migrate behat features to ApiTestCase by @soyuka in #7957
- feat(doctrine): state options repositoryMethod for query builder by @soyuka in #7115
- feat(symfony,laravel):
withCredentialsoption to Swagger UI by @cay89 in #8197 - test: migrate remaining trivial behat features to ApiTestCase by @soyuka in #7971
- test: eliminate behat-migration skips and tighten ported asserts by @soyuka in #8198
- test: migrate elasticsearch/security/serializer/mongodb behat suites to ApiTestCase by @soyuka in #8202
- feat(jsonld): add resource-level jsonldContext for namespace prefixes by @soyuka in #8204
- ci: stale bot via actions, exempt typed issues by @soyuka in #8208
- ci(stale): bump checkout to v6 and github-script to v8 by @soyuka in #8213
- test: migrate doctrine/graphql behat features to ApiTestCase by @soyuka in #8205
- ci: trim phpunit-components matrix and merge fail-deprecation by @soyuka in #8214
- feat(metadata): throwOnNotFound option by @soyuka in #6027
- feat!(state): constraint-aware 422 for denormalization errors by @soyuka in #8211
- feat(doctrine): per-property filter map in FreeTextQueryFilter by @soyuka in #8257
- chore: fix php-cs-fixer by @alexisLefebvre in #8269
- test: drop stale serializer 8.1 getErrors() deprecation expectation by @soyuka in #8287
- feat(doctrine): add EndSearchFilter primary for ORM and ODM by @soyuka in #8319
- feat(doctrine): promote ComparisonFilter out of @experimental by @soyuka in #8323
- feat(doctrine): promote OrFilter out of @experimental by @soyuka in #8324
- feat(metadata): document BackwardCompatibleFilterDescriptionTrait as public API by @soyuka in #8326
- feat(doctrine): add StartSearchFilter and WordStartSearchFilter (ORM + ODM) by @soyuka in #8328
- feat(doctrine): deprecate AbstractFilter base class by @soyuka in #8330
- feat(symfony): deprecate Symfony Security AccessDeniedException by @soyuka in #8318
- fix(serializer): accept union-typed IRI collections on denormalization by @soyuka in #8339
- feat(symfony): deprecate jsonapi.use_iri_as_id defaulting to true by @soyuka in #8327
- feat(doctrine): deprecate the extends-AbstractFilter form of Date/Range/Exists filters by @soyuka in #8340
- feat(doctrine): deprecate the legacy SearchFilter/Boolean/Numeric/BackedEnum/OrderFilter by @soyuka in #8341
- perf(laravel): memoize the Symfony RouteCollection in Router by @soyuka in #8342
- fix(jsonschema): don't require @id in single-item MCP output schema by @alexisLefebvre in #8343
- fix(serializer): forward DiscriminatorMap defaultType in PropertyMetadataLoader by @soyuka in #8346
- fix(graphql): build filter args from parameters by @soyuka in #8347
- feat(openapi): support OpenAPI 3.2.0 by @soyuka in #8350
- feat(symfony): api:upgrade-filter codemod + filter fixture migration by @soyuka in #8344
New Contributors
- @Griffon-Weglot made their first contribution in #7904
Full Changelog: v4.3.14...v4.4.0-alpha.1
Release notes
Open source →Bug fixes
- 9b7ace54f fix(graphql): build filter args from parameters (#8347)
- a47e36c33 fix(state): scope ReadLinkParameterProvider to current Link's class (#7943)
- c2909a1ff fix(mcp): fallback to sdk handler when not found (#7818)
Features
- 0fb1dc8f6 feat(symfony): api:upgrade-filter codemod + filter fixture migration (#8344)
- 2ff386bd8 feat(symfony,laravel):
withCredentialsoption to Swagger UI (#8197) - 373b56b98 feat(doctrine): deprecate the extends-AbstractFilter form of Date/Range/Exists filters (#8340)
- 48bc56e9a feat(metadata): document BackwardCompatibleFilterDescriptionTrait as public API (#8326)
- 4bf850fc8 feat(doctrine): add StartSearchFilter and WordStartSearchFilter (ORM + ODM) (#8328)
- 5ddf94aeb feat(jsonld): add resource-level jsonldContext for namespace prefixes (#8204)
- 6942dc0a1 feat(doctrine): promote OrFilter out of @experimental (#8324)
- 72b02afb0 feat(hydra): use hydra:memberAssertion instead of owl:equivalentClass (#7944)
- 75f9056d3 feat(openapi): support OpenAPI 3.2.0 (#8350)
- 8f48b9dbc feat(symfony): deprecate jsonapi.use_iri_as_id defaulting to true (#8327)
- 9179b3667 feat(doctrine): per-property filter map in FreeTextQueryFilter (#8257)
- 94f3c7fe8 feat(openapi): Scalar API Reference documentation support (#7817)
- 98dc77ba7 feat(doctrine): state options repositoryMethod for query builder (#7115)
- 9b1a58fd5 feat(doctrine): deprecate the legacy SearchFilter/Boolean/Numeric/BackedEnum/OrderFilter (#8341)
- af0a0ab6c feat(doctrine): promote ComparisonFilter out of @experimental (#8323)
- b0f6dbd63 feat(doctrine): add EndSearchFilter primary for ORM and ODM (#8319)
- b2f1a5ac3 feat(metadata): throwOnNotFound option (#6027)
- c3fd6dd6b feat(doctrine): deprecate AbstractFilter base class (#8330)
- c9e5071d9 feat(symfony): deprecate Symfony Security AccessDeniedException (#8318)
- cc0ae1254 feat: support dynamic HTTP response status code via request attribute (#7904)
-
v4.3.1712 Jul 2026Release notes
Open source →What's Changed
- fix(doctrine): fetch_data=false reference for stateOptions resources by @bendavies in #8387
- fix(openapi): don't inherit name converter from a possibly-missing Symfony parent by @soyuka in #8386
- fix(serializer): report enum backing type in denormalization violations by @soyuka in #8389
- fix(serializer): preserve denormalization errors for nullable object properties by @bendavies in #8393
Full Changelog: v4.3.16...v4.3.17
Release notes
Open source →Bug fixes
- 079c7461f fix(openapi): don't inherit name converter from a possibly-missing Symfony parent (#8386)
- 3d48a4aa4 fix(serializer): preserve denormalization errors for nullable object properties (#8393)
- 56de59737 fix(doctrine): fetch_data=false reference for stateOptions resources (#8387)
- b396ff938 fix(serializer): report enum backing type in denormalization violations (#8389)
-
v4.3.1603 Jul 2026Release notes
Open source →What's Changed
- fix(jsonschema): respect readableLink for resource-typed properties on non-resource parents by @wuchen90 in #8362
- fix(doctrine): support filtering scalar enum columns by IRI by @soyuka in #8358
- fix(ci): link monorepo root in laravel e2e so siblings resolve from working tree by @soyuka in #8363
- fix(openapi): don't apply the global name converter to the generated document by @soyuka in #8360
- fix(symfony): allow null $data in PlaceholderAction by @soyuka in #8359
- fix: clone Parameters before mutation in security and validator providers by @ostrolucky in #8378
- fix(mcp): make tools/list resilient to an empty registry by @soyuka in #8371
- fix(doctrine): use PHP property name in DQL for modern filters with name converter by @soyuka in #8382
- fix(serializer): denormalize nullable collections of enums/objects by @soyuka in #8381
- fix(test): remove stale phpstan ignores in CollectionNormalizerTest by @soyuka in #8384
- fix(symfony): don't expose entrypoint in openapi format by @soyuka in #8383
Full Changelog: v4.3.15...v4.3.16
Release notes
Open source →Bug fixes
- 328cb67ce fix(symfony): don't expose entrypoint in openapi format (#8383)
- 340e982c2 fix(test): remove stale phpstan ignores in CollectionNormalizerTest (#8384)
- 43e3b4cf7 fix(openapi): don't apply the global name converter to the generated document (#8360)
- 48e8f9781 fix(doctrine): use PHP property name in DQL for modern filters with name converter (#8382)
- 66829859f fix(doctrine): support filtering scalar enum columns by IRI (#8358)
- 71918e464 fix(jsonschema): respect readableLink for resource-typed properties on non-resource parents (#8362)
- 798b4cc53 fix(serializer): denormalize nullable collections of enums/objects (#8381)
- a9c1b538c fix: clone Parameters before mutation in security and validator providers (#8378)
- f1f33cac9 fix(ci): link monorepo root in laravel e2e so siblings resolve from working tree (#8363)
- f9d3706bb fix(mcp): make tools/list resilient to an empty registry (#8371)
- fe84af236 fix(symfony): allow null $data in PlaceholderAction (#8359)
-
v4.3.1526 Jun 2026Release notes
Open source →What's Changed
- fix(serializer): accept union-typed IRI collections on denormalization by @soyuka in #8339
- perf(laravel): memoize the Symfony RouteCollection in Router by @soyuka in #8342
- fix(jsonschema): don't require @id in single-item MCP output schema by @alexisLefebvre in #8343
- fix(serializer): forward DiscriminatorMap defaultType in PropertyMetadataLoader by @soyuka in #8346
- fix(serializer): preserve deserialization path and expected type on IRI type-confusion guard by @alexndlm in #8353
- test(serializer): skip union-collection IRI test on legacy property-info by @soyuka in #8357
Full Changelog: v4.3.14...v4.3.15
Release notes
Open source →Bug fixes
- 37dfcb397 fix(serializer): preserve deserialization path and expected type on IRI type-confusion guard (#8353)
- 7bc11b2fe fix(serializer): accept union-typed IRI collections on denormalization (#8339)
- a5761cc17 fix(jsonschema): don't require @id in single-item MCP output schema (#8343)
- be26bbeb3 fix(serializer): forward DiscriminatorMap defaultType in PropertyMetadataLoader (#8346)
-
v4.3.1419 Jun 2026Release notes
Open source →What's Changed
- fix(mcp): support mcp/sdk 0.6 ResourceDefinition in Loader by @soyuka in #8302
- fix(openapi): serialize Reference objects with $ref in the generated document by @soyuka in #8306
- fix(doctrine): filter parent link from uri variables in fetch_data=false reference by @soyuka in #8295
- fix(doctrine): exclude self-reference relation links from GraphQL root item lookup by @soyuka in #8314
- fix(mcp): support mcp/sdk 0.6 by @soyuka in #8311
- fix(jsonapi): exclude relations from openapi attributes schema by @soyuka in #8313
- chore: drop phpstan mcp/sdk class.notFound ignore by @soyuka in #8320
- feat(laravel): boot without a database via dumped metadata by @soyuka in #8290
- fix(jsonapi): correct relationship schemas in generated json schema by @soyuka in #8321
- refactor(jsonapi): single source of truth for the attribute/relationship split by @soyuka in #8325
- fix(serializer): fix union types denormalization fallback after security mismatch by @jonnyeom in #8333
- chore: fix phpstan on 4.3 by @soyuka in #8331
Full Changelog: v4.3.13...v4.3.14
Release notes
Open source →Bug fixes
- 0d9bcde6b fix(doctrine): filter parent link from uri variables in fetch_data=false reference (#8295)
- 2abda532d fix(serializer): fix union types denormalization fallback after security mismatch (#8333)
- 553f6d3c0 fix(openapi): serialize Reference objects with $ref in the generated document (#8306)
- 75c275cd0 fix(jsonapi): exclude relations from openapi attributes schema (#8313)
- 8586a80e6 fix(mcp): support mcp/sdk 0.6 (#8311, #8302)
- 8999b60ca fix(jsonapi): correct relationship schemas in generated json schema (#8321)
- 977714184 fix(doctrine): exclude self-reference relation links from GraphQL root item lookup (#8314)
Features
- 84e7818d4 feat(laravel): boot without a database via dumped metadata (#8290)
-
v4.3.1313 Jun 2026Release notes
Open source →What's Changed
- fix(elasticsearch): coerce document _id to declared int identifier type by @soyuka in #8296
- fix(openapi): throw clear error for openapi parameter missing name in yaml config by @soyuka in #8297
- fix(jsonschema): embed relations of non-resource objects in output schema by @alexisLefebvre in #8294
Full Changelog: v4.3.12...v4.3.13
-
v4.3.1213 Jun 2026 -
v4.3.1112 Jun 2026Release notes
Open source →Bug fixes
- 2726085ae fix(metadata): keep explicitly set GraphQL mutation description (#8286)
- 4819b5f9f fix(metadata): metadata mutators for resource & operations with lower priority (#8273)
- 6b8bd0a3d fix(metadata): read ApiProperty from trait private properties inherited via parent class (#8275)
- aced52dd0 fix(metadata): preserve nested array query parameters in IriHelper (#8278)
- c37e27079 fix(metadata): preserve explicit class on ApiResource when propagating defaults (#8262)
- c79045718 fix(jsonschema): embed genId:false relations in output schema (#8272)
- ce4f6c210 fix(jsonschema): don't leak operation deprecation onto sub-schemas (#8289)
- 134bb5cd7 fix(jsonld): replace already-populated nested relation from embedded @id on patch (#8274)
- 4b50a4edc fix(hydra): declare hydra:view links as nullable in json schema (#8277)
- 78538aa90 fix(mcp): resolve $ref inside oneOf/anyOf when flattening tool outputSchema (#8268)
- a8d4b00f5 fix(mcp): always serialize payload into TextContent when structuredContent is disabled (#8270)
- 1ffe0ada8 fix(symfony): register http cache purgers independently of invalidation flag (#8260)
- 81a1307fe fix(symfony): expose uri variables in security expression context (#8279)
- d6fd5bfae fix(httpcache): allow custom http method on SouinPurger and SurrogateKeysPurger (#8259)
- b3b376225 fix(openapi): ship oauth2-redirect.js with swagger-ui assets (#8261)
- fb2062465 fix(swagger): improve dark mode button in swaggerUI (#8265)
Notes
- JSON-LD
PATCH: an embedded@idon a nested writable relation now replaces the currently-linked relation when it points to a different resource. A dangling embedded@idnow returns a 400 instead of being silently ignored (it previously mutated the existing relation in place). See #8274.
-
v4.3.1005 Jun 2026Release notes
Open source →Bug fixes
- 149adf70f fix(laravel): register graphql routes before catch-all entrypoint (#8248)
- 1bc670c72 fix(jsonapi): allow opt-in client-generated IDs on POST per spec (#7930)
- 39edcdddd fix(symfony): skip ErrorResourceAttributeLoaderPass on Symfony 6.4 (#8253)
- 4609a9e5d fix(graphql): dispatch item Query through its own provider (#8237)
- 5c62c1bd8 fix(jsonapi): do not require id in input schema for post operations (#8252)
- 7bde11eb9 fix(swagger): fix SwaggerUI CSS override (#8245)
- 86a09b3c3 fix(state): guard hex2bin against malformed query parameter keys (#8255)
- a6bdf7134 fix(laravel): detect enum casts in eloquent property metadata factory (#8247)
- b5c41aff5 fix(laravel): honor path_segment_name_generator config for url segments (#8251)
- d5d8176f1 fix(serializer): allow nullable to-many relations to normalize as null (#8254)
- f4d2b56c2 fix(laravel): persist dirty embedded belongsTo relations (#8246)
-
v4.3.904 Jun 2026Release notes
Open source →Bug fixes
- e7968852c fix(serializer): bump api-platform/serializer to ^4.3.8 and cover Hal in CI (#8242)
- d59c24490 fix(graphql): return identifier-only node on circular reference (#8239)
- b714a4451 fix(graphql): nested resources without graphqloperations propagate fields (#8236)
- ca8fbf9de fix(hydra): format datetime fields as iso 8601 in cursor pagination urls (#8241)
- cfe1bc324 fix(doctrine): extract alias from sql function in orderby parts (#8240)
- 8567366a7 fix(test): capture streamedresponse body in test client response (#8235)
-
v4.3.804 Jun 2026Release notes
Open source →Bug fixes
- cf55c0e7b fix(serializer): gate cache_key in JsonApi and Hal with isCacheKeySafe
- 0e0c58b87 fix(symfony): filter nested constraint groups in Sequentially/Compound (#8223)
- 277589de6 fix(symfony): keep error serialization mapping when enable_attributes is disabled (#8231)
- 30f1f977a fix(tests): symfony 8.1 compat (#8210)
- 37e361339 fix(jsonapi): keep flat custom params with flat page (#8216) (#8217)
- 4059c6303 fix(laravel): wire jsonapi.use_iri_as_id in ApiPlatformProvider (#8224)
- 4378916ac fix(jsonapi): drop consumed pagination keys before raw-param replace
- 46c25c7e4 fix(symfony): reject duplicate operation names instead of silently dropping operations (#8232)
- 6fc55c27d fix(metadata): apply YAML/XML attributes to virtual (method-backed) properties (#8220)
- 71fcb9314 fix(test): default content-type in ApiTestCase matches configured formats (#8227)
- 7aed9d10c fix(openapi): emit valid 3.0 schemas when downgrading from 3.1 (#8225)
- 90bcfb09a fix(doctrine): resolve parent link toProperty during PUT create (#8233)
- 9aca842d4 fix(state): omit Content-Type when response has no body (#8218)
- abef010cf fix(openapi): emit Draft 4 boolean exclusive bounds for spec 3.0.0 (#8222)
- c83558954 fix(openapi): disambiguate definition names when input and output share a shortname (#8230)
- ef40bcda6 fix(graphiql): migrate to v5 via esm.sh CDN (#8209)
- ef79ab337 fix(symfony): guard null ExpressionLanguage in ResourceAccessChecker::usesObjectVariable()
- fd08d296a fix(openapi): coerce metadata parameters in user-supplied openapi operation (#8229)
- fd2518695 fix(serializer): bump min serializer dep and fix phpstan probe typing
-
v4.3.729 May 2026 -
v4.3.622 May 2026Release notes
Open source →Bug fixes
- 080574ad3 fix(symfony): register property_info fallback when not provided by Symfony (#7969)
- 286a47e72 fix(jsonapi): merge flat page/itemsPerPage params with bracket filter (#8193)
- 412682ede fix(serializer): translate PropertyAccess type mismatches to NotNormalizableValueException (#7967)
- 44bb18ddd fix(state): convert BackedEnum denormalization errors into validation violations (#8195)
- 53d8f5615 fix(metadata): :property dedup drops repeated parameters (#8196)
- 84d15b1f1 fix(metadata): negotiate wildcard Accept with parameters (#8192)
- 91f93e013 fix(laravel): set application/ld+json content-type on /contexts/{shortName} (#7973)
- ae4ea864e fix(symfony,laravel): IriConverter local cache key collision between item and collection ops (#7975)
- bf3fded64 fix(symfony): include value-object transformers in JSON-LD streamer locator (#7968)
- f533810f7 fix(graphql): accept FilterInterface instance in QueryParameter (#7972)
-
v4.3.511 May 2026Release notes
Open source →Bug fixes
- 78c4ddf02 fix(symfony): Symfony 8.1 compatibility (#7955)
- 14d5e8279 fix(symfony): api_platform_iris loader misses item Gets and api_genid (#7946)
- f88b9122f fix(hydra): emit hydra:next and hydra:previous on empty cursor-paginated collections (#7961)
- 1721a7366 fix(mcp): jsonld schema handle oneOf and anyOf (#7962)
- 03ca10c17 fix(mcp): add title support to Tool
- 30a8e9ef0 fix(laravel): inject missing dependencies into HydraSchemaFactory (#7963)
- 173dc6631 fix(laravel): fall back to resource class when object is null in ResourceAccessChecker (#7948)
- 445529519 fix(laravel): don't cache empty Eloquent attributes for missing table
- 67d7a3dc2 fix(laravel): use lowercase asc/desc for Eloquent orderBy
- 85f6269c3 fix(laravel): expose ReDoc/Scalar in docs footer
-
v4.3.430 Apr 2026Release notes
Open source →Bug fixes
- 0160a72e1 fix(doctrine): IriFilter ignores custom ApiProperty identifier on ODM (#7937)
- 37f248a45 fix(state): use exception message for user-facing violation when available (#7894)
- 472ae3f22 fix(openapi): generate both singular and array parameter variants for filters (#7906)
- 88ddc3680 fix(symfony): ensure ErrorListener is fully stateless to prevent stat… (#7921)
- 90875fb46 fix: unnecessary nullable operator
- 967ff7925 fix(jsonapi): use parent-resolved class in denormalizeRelation
- 98112eab7 fix(symfony): api_platform_iris route loader for graphql-only setups (#7934)
- 98f3d0f49 fix(symfony): security regression when ResourceAccessChecker is decorated (#7896) (#7897)
- ac374fcc4 fix(state): preserve Type message when expectedTypes is set (#7935)
- cf80a82d5 fix(laravel): skip relation metadata for abstract Eloquent models (#7933)
- d08eb7f44 fix:
ResourceClassInfoTrait::isResourceClass()is always true (#7924) - e19154930 fix(validator): handle nested groups and group sequences (#7914)
- fcfaf3844 fix(metadata): nested property filters fail to generate JOINs when relation target entity is not directly declared as ApiResource (#7926)
-
v4.3.329 Mar 2026Release notes
Open source →Bug fixes
- 4ad230247 fix(openapi): default explode to true for form and cookie style param… (#7891)
-
v4.3.227 Mar 2026Release notes
Open source →Bug fixes
- 2d6e47460 fix(openapi)!: oauth scopes with dashes in name (#7853)
- 892c1c796 fix(openapi): uri variable default description (#7884)
- a0daa07f9 fix(openapi): fallback description on summary (#7874)
- a7072be4a fix(metadata): nested filtering only on resource classes (#7864)
- e14ae87fa fix(laravel): resolve casts defined via casts() method (#7859)
Notes
- The fix for oauth scopes with dashes in name (#7853) may change the current OpenAPI description but the risk is low.
-
v4.3.120 Mar 2026Release notes
Open source →Bug fixes
- 13cc3950c fix(doctrine): reset nested_properties_info for non-nested properties in FreeTextQueryFilter (#7850)
- 1fa8c05ca fix(validator): fallback to message when detail is uninitialized (#7844)
- aff1cf2cc fix(symfony): do not exclude resources from DI (#7847)
- e45b5791d fix(validator): skip ValidateProcessor when ObjectMapper is not used (#7848)
-
v4.3.013 Mar 2026Release notes
Open source →Features
- fa3b69635 feat(mcp): introduce api-platform/mcp component (#7703)
- d13c24759 feat: mcp bundle tool integration (#7595)
- ed0ae92ce feat: add support of collection to MCP (#7724)
- 6e9e88dc2 feat(laravel): mcp support (#7709)
- 6addc554d feat(openapi): Scalar API Reference documentation support (#7817)
- 05a5d4d93 feat(laravel): object mapper (#7704)
- 359a128cd feat(symfony): isGranted before provider (#7500)
- 32e94848c feat: support relations on filters (#7711)
- 2682fc5fc feat: defaults parameters (#7758)
- d640d106b feat(doctrine): uuid filter (#7628)
- c56a35469 feat(doctrine): add nested relation support to IriFilter and UuidFilter (#7759)
- 5a876cc92 feat(doctrine): ComparisonFilter decorator for range filtering (#7760)
- 19809c617 feat(doctrine): ne (not equal) operator for ComparisonFilter (#7814)
- 6ba9c8b4d feat(doctrine): Add caseSensitive option to PartialSearchFilter (#7675)
- 9f98aff46 feat(doctrine): add ODM SortFilter and nested property support for parameter-based filters (#7780)
- 6f5d41458 feat(doctrine): remove PUT & PATCH for readonly entity (#7453)
- 64b46b2d0 feat(jsonschema): support for normalization/denormalization with attributes (#7629)
- c70cd449f feat(json-schema): handle union object types in iterable properties (#7726)
- 625438cf2 feat(jsonapi): support entity identifiers instead of IRIs as resource id
- 833f3fec6 feat(serializer): option to preserve key in CollectionNormalizer (#7721)
- 383a5fa67 feat(serializer): global defaults.normalization_context.gen_id configuration option (#7775)
- 516ee3a28 feat(elasticsearch): OpenSearch support (#7811)
- 21aa2572d feat(elasticsearch): add SSL options for Elasticsearch configuration (#4059)
- fe63ddec8 feat(validator): uuid/ulid parameter validation (#7649)
- 1427dfa91 feat(metadata): expose default attribute on parameters (#7551)
- 63fba2a4e feat(metadata): cache operation metadata factory (#7516)
- 350390ba3 feat(state): add headers to comply with LDP specification (#6917)
- 8bdb2bc91 feat(symfony): allow symfony makers namespace configuration (#7497)
- 45831a93c feat: enable to skip autoconfiguration with new
SkipAutoconfigureattribute (#7467) - 26d1ac4d6 feat: allow both uppercase and lowercase order direction in OrderFilter schema (#7741)
- 6626549b6 feat: correctly map problem-detail fields when using ProblemExceptionInterface (#7776)
- db147a52f feat(laravel): split render logic from error handler (#7790)
Bug fixes
- 263dbd8b2 fix: call object mapper with the expected class on 4.3 (#7796)
- af7c22749 fix(jsonld): use operation shortName for @context URI with multiple ApiResources
- 86b97d5ea fix(mcp): propagate session via processor context
- 3b9ed3bd4 fix(laravel): make api-platform/mcp optional (#7824) (#7828)
- 27cc4dbb3 fix(laravel): improve UI selection for documentation (#7826)
- e16f7ec4f fix(laravel): add init-scalar-ui.js to Laravel's assets (#7825)
- 5ca646111 fix(mcp): fallback to sdk handler when not found (#7818)
- 95ec407bf fix(jsonapi): wrong variable name during merge (#7816)
- 04c30b7ee fix(jsonapi): prevent double unwrapping of data.attributes with input DTOs
- 191a46122 fix(serializer): apply API Platform name converter to input/output DTOs (#7779)
- 2e0b8ffb6 fix(serializer): prevent api_platform_output context from leaking to nested non-resource objects (#7787)
- c6236f313 fix(serializer): report all missing constructor arguments in instantiateObject
- 31289b838 fix(symfony): make enable_docs a master switch for disabling documentation (#7806)
- 64247b050 fix(metadata): sort parameters by priority after pattern expansion (#7788)
- 813e4f793 fix(validator): missing required properties when using GroupSequence (#7784)
- 90dfc3554 fix(validator): handle nested groups and group sequences (#7791)
- 28834e6d6 fix(validator): validate entities after ObjectMapper transformation (#7731)
- 98b8efb68 fix(laravel): exclude .blade.php files from recursive class scan (#7813)
- cfdc22c1c fix(laravel): do not exclude custom primary keys matching HasMany foreign keys (#7810)
- 9f1109365 fix(hydra): example type - use @type prefix per JSON-LD spec (#7768)
- 75ffdc43f fix(hydra): hide search key when there is parameter without filter (#7773)
- e0ba0068d fix(hydra): unique class @id with subClassOf for semantic types (#7771)
- 9fdc6c27d fix(openapi): allow Operations to override global config in getPaginationParameters (#7807)
- 0f025e849 fix(state): handle partial pagination with object mapper (#7769)
- a2efb39e1 fix(elasticsearch): mono-repo v9 support (#7766)
- 332272c6f fix(jsonld): restore item_uri_template @type resolution after 4.2 merge (#7764)
- 390056fbb fix(jsonld): item uri template type (#7518)
- f0b355984 fix(symfony): use AsCommand description parameter for console commands (#7763)
- 23840f9df fix(symfony): publish mercure updates for all resources of an entity (#7774)
- c624daf68 fix(symfony): allow toggling GraphQL Playground to ensure BC
- c741bd62e fix: add missing RPC messenger handler for Symfony 8.1 compatibility
- a4715f063 fix(doctrine): enforce api-platform/serializer dependency (#7781)
- 149fe24a1 fix(doctrine): throw exception if property is null for the doctrine filters (#7681)
- 17b6ff221 fix(jsonschema): name collision when an operation name is already used by another class (#7778)
- 4f6c4e1b4 fix(laravel): object-mapper / mcp-bundle versions
Breaking changes
- JSON-LD
@typewithoutputanditemUriTemplate: When usingoutputwithitemUriTemplateon a collection operation, the JSON-LD@typenow uses the resource class name instead of the output DTO class name for semantic consistency withitemUriTemplatebehavior. Update any client code that relies on the DTO class name in@type. - Doctrine filters require explicit
property(#7681): Doctrine parameter-based filters (ExactFilter,IriFilter,PartialSearchFilter,UuidFilter) now throwInvalidArgumentExceptionif thepropertyattribute is missing. If you have filter parameters without an explicitproperty, you must either add one or use the:propertyplaceholder in your parameter name. - Readonly Doctrine entities lose PUT & PATCH (#7453): Entities marked as readonly via Doctrine metadata (
$classMetadata->markReadOnly()) will no longer expose PUT and PATCH operations. Clients sending PUT/PATCH to these resources will receive a 404. If you need write operations on readonly entities, explicitly define them in yourApiResourceattribute.
Behavioral changes
- Hydra class
@idnow always uses#ShortName(#7771): Hydra documentation classes now consistently use#ShortNameas their@idinstead of schema.org type URIs (e.g.schema:Product). This resolves class identifier collisions when multiple resources shared the same semantic type, which previously caused api-doc-parser conflation. Semantic types configured viatypesare now exposed throughrdfs:subClassOf. Clients should expect class@idand property range changes in the Hydra documentation if resources had customtypesconfigured. isGrantedevaluated before provider (#7500): Security expressions are now evaluated before the state provider runs. Expressions that do not reference theobjectvariable will be checked earlier (at thepre_readstage), improving security by preventing unnecessary database queries on unauthorized requests. Expressions that referenceobjectstill wait for the provider to resolve the entity. Review any security expressions that relied on provider side-effects running before authorization.- LDP-compliant response headers (#6917): API responses now include
AllowandAccept-Postheaders per the Linked Data Platform specification. These are informational headers that help clients discover API capabilities and should not break existing integrations. - Scalar API Reference UI (#7817): Scalar is now available as an alternative documentation UI alongside Swagger UI. It is enabled by default when TwigBundle is available. Access it via
?ui=scalar. To disable it, setenable_scalar: falsein your API Platform configuration.
-
v4.3.0-beta.206 Mar 2026 pre-releaseNothing published for this version
-
v4.3.0-beta.103 Mar 2026 pre-releaseNothing published for this version
-
v4.3.0-alpha.220 Feb 2026 pre-releaseNothing published for this version
-
v4.3.0-alpha.113 Feb 2026 pre-releaseNothing published for this version
-
v4.2.2613 Jun 2026Nothing published for this version
-
v4.2.2504 Jun 2026 -
v4.2.2429 Mar 2026Release notes
Open source →Bug fixes
- 8cb5a6044 fix(state): do not map to input class in ObjectMapperProvider (#7892)
-
v4.2.2327 Mar 2026Release notes
Open source →Bug fixes
- 1bddff82f fix(doctrine): inject nameConverter into AbstractFilter via QueryParameter (#7877)
- 5a3a7dc4b fix(state): prioritize input class over output in ObjectMapperProvider (#7879)
- 7c562a51f fix(laravel): partial patch validation config to replace required with sometimes (#7882)
- 9c2810b08 fix(metadata): read operation tags from OpenAPI context in XML (#7865)
- a1292592e fix(doctrine): skip links with no join info when fromClass differs from entityClass (#7878)
- aefeca529 fix(symfony): remove json stream conflicting service (#7867)
- e447ab1fc fix(serializer): disable normalizer cache to prevent wrong normalizer in worker mode (#7868) (#7873)
- fff8213b2 fix(serializer): handle nullable constructor params without default value (#7883)
-
v4.2.2220 Mar 2026 -
v4.2.2113 Mar 2026Release notes
Open source →Bug fixes
- 20ced5fca fix(laravel): clear SkolemIriConverter state between requests (#7838)
- 2b2b7bca2 fix(filter): use correct type for int-backed enums in BackedEnumFilter
- 42a2d7fc6 fix(symfony): register DateTimeValueObjectTransformer for JsonStreamer (#7839)
- 63e6b57f8 fix(openapi): correct redocly openapi errors (#7834)
- 6a472a2db fix(jsonapi): swap arguments in DefinitionNameFactory::create() call
- bbfd4cafa fix(filter): do not nest array while generating default schema (#7832)
- c20a41c20 fix(symfony): clear SkolemIriConverter state between requests via ResetInterface (#7829)
- d6ecbe122 fix(serializer): Use serializer when denormalizing relation inside Input (#7830)
- da6232468 fix(metadata): allow GraphQL-only resources without identifiers (#3975) (#7836)
- f4002902a fix(state): on creation, give expected class to object mapper (#7795)
-
v4.2.2006 Mar 2026Release notes
Open source →Bug fixes
- 31289b838 fix(symfony): make enable_docs a master switch for disabling documentation (#7806)
- 64115e152 fix(odm): partial pagination limit the documents entering $facet (#7822)
- 98b8efb68 fix(laravel): exclude .blade.php files from recursive class scan (#7813)
- 9fdc6c27d fix(openapi): allow Operations to override global config in getPaginationParameters (#7807)
- cfdc22c1c fix(laravel): do not exclude custom primary keys matching HasMany foreign keys (#7810)
-
v4.2.1927 Feb 2026 -
v4.2.1827 Feb 2026Release notes
Open source →Bug fixes
- 2e0b8ffb6 fix(serializer): prevent api_platform_output context from leaking to nested non-resource objects (#7787)
- 64247b050 fix(metadata): sort parameters by priority after pattern expansion (#7788)
- 90dfc3554 fix(validator): handle nested groups and group sequences (#7784, #7791)
- 9f1109365 fix(hydra): example type - use @type prefix per JSON-LD spec (#7768)
- c624daf68 fix(symfony): allow toggling GraphQL Playground to ensure BC
-
v4.2.1720 Feb 2026Release notes
Open source →Bug fixes
- 0f025e849 fix(state): handle partial pagination with object mapper (#7769)
- 17b6ff221 fix(jsonschema): name collision when an operation name is already used by another class (#7778)
- 191a46122 fix(serializer): apply API Platform name converter to input/output DTOs (#7779)
- 75ffdc43f fix(hydra): hide search key when there is parameter without filter (#7773)
- f0b355984 fix(symfony): use AsCommand description parameter for console commands (#7763)
-
v4.2.1613 Feb 2026Release notes
Open source →Bug fixes
- 07100d501 fix(hydra): use standard xsd prefix and remove duplicate context namespaces (#7740)
- 3d8e4fb05 fix(laravel): support numeric float types in eloquent metadata factory (#7730)
- 4f307d3ce fix(doctrine): skip uninitialized properties in handleLazyObjectRelations (#7738)
- 6f85f2aa3 fix(metadata): use entity class from stateOptions for filter property resolution (#7739)
- 70b17ce56 fix(doctrine): allow both uppercase and lowercase order direction in OrderFilter schema (#7741) (#7742)
- d70eec574 fix(serializer): prevent context leakage with service-based entity resolution (#7756)
-
v4.2.1530 Jan 2026Release notes
Open source →Bug fixes
- 2de06db1d fix(jsonapi): output null on a to-one relationship (#7686)
- 5577f07bf fix(openapi): change payload type from array to free-form object (#7694)
- 5d860bdec fix(hydra): memory persistent cache during schema generation (#7718)
- 696d31597 fix(metadata): issues with extending xml/yaml resources (#5956)
- 773289658 fix(laravel): properly transform invokable service to route action (#7720)
- 881812926 fix(symfony): declare api_platform.normalizer.object fixes #7705 (#7717)
- cc2f88558 fix(doctrine): post with mapped relation
- f3c2b1a56 fix(symfony): prevent symfony name converter service pollution (#7691)
-
v4.2.1423 Jan 2026Release notes
Open source →Bug fixes
- 0dc7ec348 fix(doctrine): useless generateParameterName call (#7679)
- 1c6fae536 fix(symfony): fix for symfony/json_streamer 8.0 with enable_json_streamer (#7684)
- 83a3cacfb fix(laravel): use controller if declared (#7687)
- 9f46eef05 fix(jsonschema): call to an undefined method Symfony\Component\TypeInfo\Type::getClassName() (#7685)
- f5ba97460 fix(doctrine): PartialSearchFilter on multibyte characters (#7688)
- 1706c3c58 fix(doctrine): throw exception if parameter property is not provided
-
v4.2.1316 Jan 2026 -
v4.2.1209 Jan 2026Release notes
Open source →Bug fixes
- 39c55837e fix(doctrine): Handling of parameter description (#7656)
- 550b7621d fix(doctrine): escape values with
%or_in search filter (#7653) - 582508eee fix(doctrine): fix partial fetch with same entity included multiple time with different fields (#7647)
- 6a3b02465 fix(metadata): optional operation element in XML (#7632)
- 71578088a fix(symfony): replace getDefaultName() with AsCommand attribute (#7633)
- 7d4b5e9c5 fix(serializer): keep object normalization exception messages (#7644)
- b5a0ae068 fix(openapi): properly document list parameters (#7658)
- c136918e0 fix(laravel): deprecation in definition name factory (#7661)
- d0dffea9b fix(openapi): respect schema type for non-collection parameter documentation (#7634)
- d23ab4301 fix(doctrine): partial fetch when relation switches context (#7645)
- d5f60e2e1 fix(test): change string to int for status in JsonApiTest::testError (#7631)
- dd457fbd3 fix(serializer): enhance exception message for non-object relation (#7646)
-
v4.2.1119 Dec 2025Release notes
Open source →Bug fixes
- 0d9a44bef fix(laravel): allow custom error handler for non-api operations (#7622)
- 17415f789 fix(serializer): allow CsvEncoder::AS_COLLECTION_KEY in context (#7613)
- 2a3449818 fix(symfony): check that required package are installed before configuring services (#7607)
- 40ad56859 fix(jsonld): allow mapping collection output with itemUriTemplate (#7620)
- 9f11aed8a fix(state): delete with stateOptions and object mapper (#7615)
- a2da50905 fix(symfony): enable ReDoc when Swagger UI is disabled (#7617)
- c0998928e fix(symfony): enable to set default values for
stale-while-revalidateandstale-if-errorcache headers via config file (#7606) - d847ad629 fix(jsonapi): handle missing attributes in ErrorNormalizer (#7569)
-
v4.2.1011 Dec 2025Release notes
Open source →Bug fixes
- 01fd0b578 fix(symfony): do not redeclare object_mapper (#7602)
- 0ef0ba63a fix(metadata): update tests to use MappedObjectPaginator instead of ArrayPaginator (#7591)
- 6561eb1ec fix(symfony): do not load docs routes if docs disabled (#7448)
- 8f4bc086f fix(symfony): disable Swagger UI and ReDoc when Swagger is off (#7586)
- 9814f27ee fix(metadata): property placeholder on multiple parameters (#7598)
- bc1fd4c10 fix(laravel): belongs-to-many relations dont have a get-foreign-key-name method (#7589)
- d3bcded9b fix(metadata): use operation output class for mapping instead of operation class (#7601)
- d7bab4bb3 fix(serializer): properly handle read link parameters when generating iris (#7520)
-
v4.2.905 Dec 2025Release notes
Open source →Bug fixes
- 502c0e2de fix(symfony): skip argument resolver when context is not api platform (#7579)
- 834064fc6 fix(metadata): filter interface context php doc (#7560)
- 85458e0d9 fix(symfony): use app.request.query.get() directly instead of app.request.get() in swagger (#7578)
- ef3127000 fix(symfony): use current route for footer links (#7580)
- 49d80c840 fix(serializer): render BCMath\Number (PHP 8.4+) as string instead of object (#7555)
-
v4.2.801 Dec 2025Nothing published for this version
-
v4.2.730 Nov 2025 -
v4.2.617 Nov 2025 -
v4.2.517 Nov 2025Release notes
Open source →Bug fixes
- 57fe3d1 fix(state): class existence check for ObjectMapperAwareInterface
-
v4.2.413 Nov 2025Release notes
Open source →Bug fixes
- 20f288959 fix: multiple :property template operations on a single resource (#7461)
- 44f227112 fix(symfony): inject api-platform default configuration in the php resource metadata factory (#7525)
- 921d7c8fe fix(state): create PUT has relation with lazy mapper (#7521)
- 951422e15 fix(openapi): maintain json schema for non-json operations (#7528)
- 98fc35221 fix(symfony): object mapper compatibility (#7531)
- a5c44624d fix(json-schema): pagination less schema with disabled pagination (#7506)
- da2324e82 fix(jsonschema): move jsonMergePatch postfix to DefinitionNameFactory (#7510)
- dc0df6110 fix(iri): json streamer iri template does not need metadata (#7511)
-
v4.2.331 Oct 2025Release notes
Open source →- 9416083f7 fix(state): object mapper aware interface (#7486)
- 99718d954 fix(serializer): resilient denormalizeRelation capability (#7474)
- 9b2f98610 fix(metadata): eliminate duplicate keys in the constructor of
Parameters(#7492) - a26c35840 fix(doctrine): properly set properties according to interface (#7487)
- a2867e986 fix(laravel): serializer attributes on Eloquent methods (#7416)
- aea8113e0 fix(json-schema): move
memberproperty out ofHydraCollectionBaseSchema(#7456) - b59626a97 fix(symfony): add missing symfony/asset dependency (#7491)
- ddf4c0b5e fix(graphql): stateOptions to get filter class (#7485)
- ebe6dc9a2 fix(jsonschema): fallback the schema for
mixedproperties tostring|nullinstead ofnull(#7489) - fa6e206cc fix(state): detect mapping on source (#7475)
- fafbe5c7b fix(validator): custom message was not translated (#7424)
Features
- f5c257dab feat(symfony): convert routing files to php-dsl (#7463)
-
v4.2.209 Oct 2025Release notes
Open source →Bug fixes
- 0b8237918 fix(state): object mapper with input different (#7435)
- 1094a52d6 fix(metadata): allow description and other fields to be override seperately (#7442)
- 133028e38 fix(state): object mapper on delete operation (#7447)
- 1a4636200 fix(doctrine): group or filter in an AndWhere #7441 (#7445)
- 55fd65795 fix(validator): validation exception without constraint violation list
- 5b59f8914 fix(jsonschema/jsonld): make
@idand@typeproperties required only in the JSON-LD schema for output (#7397) - 654339e03 fix(openapi): Improve response override (#7428)
- 6c267408a fix(hydra): genId false schema (#7440)
- 70bdf2959 fix(symfony): ensure the kernel is booted before using
KernelBrowser::loginUser()(#7446) - 9c918c657 fix(symfony): align listeners context (#7449)
- abe0438be fix(jsonschema): make all required properties optional in PATCH operation with 'json' format (#7398)
- e1ce9456b fix(openapi): define items type for HydraCollectionBaseSchema hydra:member (#7419)
- e52e825db fix(openapi): allow assertMatchesJsonSchema with custom output dto (#7438)
- f3c811d0f fix(hydra): add base schema to item of a collection (#7444)
-
v4.2.126 Sep 2025Release notes
Open source →Bug fixes
- 059e6a09e fix(symfony): remove suggest ocramius/package-versions (#7395)
- 3b0c44177 fix(openapi): ability to override description in response (#7412)
- 54bdce504 fix(symfony): openapi property path for validation
- 65e137fca fix: make default value of
pagination_maximum_items_per_pagesame as Laravel version (#7396) - 6916bea95 fix(serializer): require api-platform/metadata:^4.2 (#7409)
- 82d0dd7e0 fix(symfony): openapi property path for validation (#7411)
- a5102d9a2 fix(schema): anyOf must contains an array, not an object (#7399)
- dfe4fd7f2 fix: handle generic array in JsonSchema (#7414)
Also includes v4.1.25 bug fixes
Features
-
v4.2.018 Sep 2025Release notes
Open source →Features
- ceeaf51e8 feat: json streamer (#7225)
- 092a3a4f8 feat(mongodb): partial paginator (#7352)
- 1290ebb88 feat(serializer): ability to throw access denied exception when denormalizing secured properties (#7221)
- 1862d03b7 feat(symfony): add error classes options to open api config (#7143)
- 24a1cf5a2 feat(elasticsearch): add support for v9 (#7180)
- 26d2394b7 feat(doctrine): new search filters (#7121)
- 2a13100f4 feat(serializer): (un)set object-to-populate through denormalization context (#7124)
- 3ab0b8d0f feat(metadata): use PHP file as resource format
- 4abf17b3c feat(symfony): CSS Color Schema Restriction for Property Validation (#7215)
- 4b1b94cad feat(symfony): Autoconfigure classes using
#[ApiResource]attribute (#6943) - 6491bfc7a feat(doctrine): improve http cache invalidation using the info from the mapping (#7319)
- 9e9cf648d feat(metadata): introduce metadata mutators for resource & operations (#7213)
- a42034dc3 feat(symfony): object mapper with state options (#6801)
- a8b82172a feat(doctrine): support integer-backed enums in BackedEnumFilter (#7129)
- b52187d91 feat(serializer): handle defaultType for DiscriminatorMap (#7284)
- b948209b9 feat(laravel): add make:filter command to generate API Platform filters (#7364)
- ebd85f502 feat(symfony): add make:filter command to generate API Platform filters (#7355)
- bf09616cf feat(httpcache): add more cache directives to AddHeadersProcessor (#7008)
- f25d7d1a6 feat(metadata): ability to set description on an Error (#7329)
Breaking changes
- 073c0e282 fix(openapi)!: allowReserved, allowEmtpyValue defaults to null
- 62a9cc821 fix(state)!: parameter default value overrides falsy value
- 79edced67 fix(json-schema): share invariable sub-schemas
TypeInfo
- 143d512ef feat(jsonapi): use
TypeInfo'sType(#7100) - 1d579d095 feat(hal): use
TypeInfotype (#7097) - 350d6d707 feat(hydra): use
TypeInfo'sType(#7099) - 55461a83c feat: Use
TypeofTypeInfoinstead ofPropertyInfo(#6979) - 7c796de0d feat(serializer): type info (#7104)
- 827e1f725 feat(elasticsearch): use
TypeInfotype (#7098) - a1952e304 feat(openapi): use
TypeInfo'sType(#7096) - dd3356824 feat(laravel): use
TypeInfo'sType(#7101)
Bug fixes
- 02a764950 fix(symfony): explicitly set the target class when mapping entities to resources (#7311)
- 0411cd9cc fix(jsonld): duplicate error fields when prefix is enabled (#7021) (#7074)
- 1acf8f764 fix(symfony): only set name_converter for the default serializer (#6101) (#7365)
- 2c5c9e451 fix(openapi): no content schema (#7384)
- 321c68f12 fix: pagination via cursor on ApiResource operations (#7368)
- 5a8d4d282 fix(jsonld): various json streamer fixes (#7374)
- 9389b4f46 fix(laravel): restore accidentally removed BooleanFilter (#6881)
- b80ab9a59 fix(httpcache): collection iri invalidation for mapped entities (#7353)
- c9692b509 fix(state): transform uri variable using ReadLinkParameterProvider (#7375)
- d06b1a0a0 fix(state): object-mapper reuse related entity (#7300)
- ecb3f6cef fix(httpcache): only map entites that are persisted
- d921dd37a fix(mongodb): make
ParameterExtensioncontext more generic (#7389)
Miscellaneous
- 04f252e7f fix(symfony): missing finder dependency
- 1806cfae6 feat(symfony): stop watch system provider/processor
- 202c60fcb feat(openapi): license identifier (#7141)
- 4f0864c1a fix(symfony): remove deprecation about jsonopenapi
- 6db55be8c fix(metadata): wrong method name in resource mutator
- 76c80a67c fix: command name deprecation
- 77b292bfe feat(metadata): class is now class-string (#7307)
- 95451fbee feat(state): remove @internal from the CreateProvider
- ce4e97fe8 fix(hal): rename package
- cff61eab8 fix(metadata): append php file resource extractor (#7193)
- de9e7f576 feat(hal): allow to output null links for hal+json
- f010fd456 fix(serializer): deprecate SerializerAwareProviderInterface and SerializableProvider (#7348)
- f3d4afe03 fix(symfony): validator type-info
-
v4.2.0-beta.116 Sep 2025 pre-releaseRelease notes
Open source →Bug fixes
- 2c5c9e451 fix(openapi): no content schema (#7384)
- 4f0864c1a fix(symfony): remove deprecation about jsonopenapi
- 5a8d4d282 fix(jsonld): various json streamer fixes (#7374)
- 62a9cc821 fix(state)!: parameter default value overrides falsy value
- 6db55be8c fix(metadata): wrong method name in resource mutator
- b80ab9a59 fix(httpcache): collection iri invalidation for mapped entities (#7353)
- c9692b509 fix(state): transform uri variable using ReadLinkParameterProvider (#7375)
- ce4e97fe8 fix(hal): rename package
Features
- b948209b9 feat(laravel): add make:filter command to generate API Platform filters (#7364)
- ebd85f502 feat(symfony): add make:filter command to generate API Platform filters (#7355)
Also includes patches from v4.1.24 and v4.2.0-alpha fixes
-
v4.2.0-alpha.329 Aug 2025 pre-releaseRelease notes
Open source →Bug fixes
- f010fd456 fix(serializer): deprecate SerializerAwareProviderInterface and SerializableProvider (#7348)
- 02a764950 fix(symfony): explicitly set the target class when mapping entities to resources (#7311)
- 04414e4fc fix(serializer): improve #7270 by reducing inconsistencies (#7346)
- 2c06a22e2 fix(validation): moving dependency from require-dev to require (#7296)
- 2cde06246 fix(openapi): output
partialquery parameter to OpenAPI whenpagination_client_enabledis true (#7295) - 2e6911c35 fix(openapi): sync typehints between properties and getter/canner for alllowReserved and allowEmptyValue (#7322)
- 385953a92 fix(jsonapi): handle type error when handling validation errors (#7330)
- 4f717c1e1 fix(openapi): allow null on allowReserved and allowEmptyValue properties (#7315)
- 6bc112193 fix(metadata): do not fail if phpstan/phpdoc-parser is missing (#7279)
- 871e5d3e1 fix(symfony): restore graphql_playground option (#7274)
- c41a0bca4 fix(jsonld): child class @src/JsonLd/JsonStreamer/ValueTransformer/TypeValueTransformer.php shortName (#7312)
- c46c57918 fix(doctrine): do not consider empty string as a current date (#7291)
- d06b1a0a0 fix(state): object-mapper reuse related entity (#7300)
- d1073bc67 fix(laravel): read property type before serialization (#7332)
- d1abfc0fa fix(openapi): nullable default values in operation openapi definition (#7321)
- d1e6772e3 fix(validation): property path on deepObject style (#7179)
- d35e46b14 fix(hydra): "property" may not be defined (#7293)
- e7502b65a fix(serializer): nested denormalization when allow_extra_attributes=false (#7270)
- ecb3f6cef fix(httpcache): only map entites that are persisted
- f3a54a239 fix: json formatted resource should not get xml errors #7287 (#7297)
- 0411cd9cc fix(jsonld): duplicate error fields when prefix is enabled (#7074)
- 073c0e282 !fix(openapi): allowReserved, allowEmtpyValue defaults to null
- 76c80a67c fix: command name deprecation
- 79edced67 !fix(json-schema): share invariable sub-schemas
- cff61eab8 fix(metadata): append php file resource extractor (#7193)
- f3d4afe03 fix(symfony): validator type-info
Features
- 092a3a4f8 feat(mongodb): partial paginator (#7352)
- 26d2394b7 feat(doctrine): new search filters (#7121)
- 1806cfae6 feat(symfony): stop watch system provider/processor
- 2d501b315 feat(laravel): support composite identifiers within
Link(#7342) - 6491bfc7a feat(doctrine): improve http cache invalidation using the info from the mapping (#7319)
- 77b292bfe feat(metadata): class is now class-string (#7307)
- 9e9cf648d feat(metadata): introduce metadata mutators for resource & operations (#7213)
- a8b82172a feat(doctrine): support integer-backed enums in BackedEnumFilter (#7129)
- b52187d91 feat(serializer): handle defaultType for DiscriminatorMap (#7284)
- de9e7f576 feat(hal): allow to output null links for hal+json
- f25d7d1a6 feat(metadata): add setter for description (#7329)
- 1290ebb88 feat(serializer): ability to throw access denied exception when denormalizing secured properties (#7221)
- 1862d03b7 feat(symfony): add error classes options to open api config (#7143)
- 202c60fcb feat(openapi): license identifier (#7141)
- 24a1cf5a2 feat(elasticsearch): add support for v9 (#7180)
- 2a13100f4 feat(serializer): (un)set object-to-populate through denormalization context (#7124)
- 3ab0b8d0f feat(metadata): use PHP file as resource format
- 4abf17b3c feat(symfony): CSS Color Schema Restriction for Property Validation (#7215)
- 4b1b94cad feat(symfony): autoconfigure classes using
#[ApiResource]attribute (#6943) - bf09616cf feat(httpcache): add more cache directives to AddHeadersProcessor (#7008)
JSON Streamer:
- ceeaf51e8 feat: json streamer (#7225)
Object Mapper:
- a42034dc3 feat(symfony): object mapper with state options (#6801)
TypeInfo:
- 7c796de0d feat(serializer): type info (#7104)
- 350d6d707 feat(hydra): use
TypeInfo'sType(#7099) - 55461a83c feat: Use
TypeofTypeInfoinstead ofPropertyInfo(#6979) - 827e1f725 feat(elasticsearch): use
TypeInfotype (#7098) - a1952e304 feat(openapi): use
TypeInfo'sType(#7096) - dd3356824 feat(laravel): use
TypeInfo'sType(#7101) - 143d512ef feat(jsonapi): use
TypeInfo'sType(#7100) - 1d579d095 feat(hal): use
TypeInfotype (#7097)
-
v4.2.0-alpha.225 Aug 2025 pre-releaseRelease notes
Open source →Bug fixes
- 02a764950 fix(symfony): explicitly set the target class when mapping entities to resources (#7311)
- 04414e4fc fix(serializer): improve #7270 by reducing inconsistencies (#7346)
- 2c06a22e2 fix(validation): moving dependency from require-dev to require (#7296)
- 2cde06246 fix(openapi): output
partialquery parameter to OpenAPI whenpagination_client_enabledis true (#7295) - 2e6911c35 fix(openapi): sync typehints between properties and getter/canner for alllowReserved and allowEmptyValue (#7322)
- 385953a92 fix(jsonapi): handle type error when handling validation errors (#7330)
- 4f717c1e1 fix(openapi): allow null on allowReserved and allowEmptyValue properties (#7315)
- 6bc112193 fix(metadata): do not fail if phpstan/phpdoc-parser is missing (#7279)
- 871e5d3e1 fix(symfony): restore graphql_playground option (#7274)
- c41a0bca4 fix(jsonld): child class @src/JsonLd/JsonStreamer/ValueTransformer/TypeValueTransformer.php shortName (#7312)
- c46c57918 fix(doctrine): do not consider empty string as a current date (#7291)
- d06b1a0a0 fix(state): object-mapper reuse related entity (#7300)
- d1073bc67 fix(laravel): read property type before serialization (#7332)
- d1abfc0fa fix(openapi): nullable default values in operation openapi definition (#7321)
- d1e6772e3 fix(validation): property path on deepObject style (#7179)
- d35e46b14 fix(hydra): "property" may not be defined (#7293)
- e7502b65a fix(serializer): nested denormalization when allow_extra_attributes=false (#7270)
- ecb3f6cef fix(httpcache): only map entites that are persisted
- f3a54a239 fix: json formatted resource should not get xml errors #7287 (#7297)
- 0411cd9cc fix(jsonld): duplicate error fields when prefix is enabled (#7074)
- 073c0e282 !fix(openapi): allowReserved, allowEmtpyValue defaults to null
- 76c80a67c fix: command name deprecation
- 79edced67 !fix(json-schema): share invariable sub-schemas
- cff61eab8 fix(metadata): append php file resource extractor (#7193)
- f3d4afe03 fix(symfony): validator type-info
Features
- 1806cfae6 feat(symfony): stop watch system provider/processor
- 2d501b315 feat(laravel): support composite identifiers within
Link(#7342) - 6491bfc7a feat(doctrine): improve http cache invalidation using the info from the mapping (#7319)
- 77b292bfe feat(metadata): class is now class-string (#7307)
- 9e9cf648d feat(metadata): introduce metadata mutators for resource & operations (#7213)
- a8b82172a feat(doctrine): support integer-backed enums in BackedEnumFilter (#7129)
- b52187d91 feat(serializer): handle defaultType for DiscriminatorMap (#7284)
- de9e7f576 feat(hal): allow to output null links for hal+json
- f25d7d1a6 feat(metadata): add setter for description (#7329)
- 1290ebb88 feat(serializer): ability to throw access denied exception when denormalizing secured properties (#7221)
- 1862d03b7 feat(symfony): add error classes options to open api config (#7143)
- 202c60fcb feat(openapi): license identifier (#7141)
- 24a1cf5a2 feat(elasticsearch): add support for v9 (#7180)
- 2a13100f4 feat(serializer): (un)set object-to-populate through denormalization context (#7124)
- 3ab0b8d0f feat(metadata): use PHP file as resource format
- 4abf17b3c feat(symfony): CSS Color Schema Restriction for Property Validation (#7215)
- 4b1b94cad feat(symfony): autoconfigure classes using
#[ApiResource]attribute (#6943) - bf09616cf feat(httpcache): add more cache directives to AddHeadersProcessor (#7008)
JSON Streamer:
- ceeaf51e8 feat: json streamer (#7225)
Object Mapper:
- a42034dc3 feat(symfony): object mapper with state options (#6801)
TypeInfo:
- 7c796de0d feat(serializer): type info (#7104)
- 350d6d707 feat(hydra): use
TypeInfo'sType(#7099) - 55461a83c feat: Use
TypeofTypeInfoinstead ofPropertyInfo(#6979) - 827e1f725 feat(elasticsearch): use
TypeInfotype (#7098) - a1952e304 feat(openapi): use
TypeInfo'sType(#7096) - dd3356824 feat(laravel): use
TypeInfo'sType(#7101) - 143d512ef feat(jsonapi): use
TypeInfo'sType(#7100) - 1d579d095 feat(hal): use
TypeInfotype (#7097)
-
v4.2.0-alpha.103 Jul 2025 pre-releaseRelease notes
Open source →Introducing new Symfony components!
Features
- 1290ebb88 feat(serializer): ability to throw access denied exception when denormalizing secured properties (#7221)
- 1862d03b7 feat(symfony): add error classes options to open api config (#7143)
- 202c60fcb feat(openapi): license identifier (#7141)
- 24a1cf5a2 feat(elasticsearch): add support for v9 (#7180)
- 2a13100f4 feat(serializer): (un)set object-to-populate through denormalization context (#7124)
- 3ab0b8d0f feat(metadata): use PHP file as resource format
- 4abf17b3c feat(symfony): CSS Color Schema Restriction for Property Validation (#7215)
- 4b1b94cad feat(symfony): autoconfigure classes using
#[ApiResource]attribute (#6943) - bf09616cf feat(httpcache): add more cache directives to AddHeadersProcessor (#7008)
Object Mapper:
- a42034dc3 feat(symfony): object mapper with state options (#6801)
TypeInfo:
- 7c796de0d feat(serializer): type info (#7104)
- 350d6d707 feat(hydra): use
TypeInfo'sType(#7099) - 55461a83c feat: Use
TypeofTypeInfoinstead ofPropertyInfo(#6979) - 827e1f725 feat(elasticsearch): use
TypeInfotype (#7098) - a1952e304 feat(openapi): use
TypeInfo'sType(#7096) - dd3356824 feat(laravel): use
TypeInfo'sType(#7101) - 143d512ef feat(jsonapi): use
TypeInfo'sType(#7100) - 1d579d095 feat(hal): use
TypeInfotype (#7097)
Bug fixes
- 0411cd9cc fix(jsonld): duplicate error fields when prefix is enabled (#7074)
- 073c0e282 !fix(openapi): allowReserved, allowEmtpyValue defaults to null
- 76c80a67c fix: command name deprecation
- 79edced67 !fix(json-schema): share invariable sub-schemas
- cff61eab8 fix(metadata): append php file resource extractor (#7193)
- f3d4afe03 fix(symfony): validator type-info
-
v4.1.3013 Jun 2026Nothing published for this version
-
v4.1.2904 Jun 2026Release notes
Open source →Bug fixes
- 9f5d0e020 fix(serializer): gate cache_key in JsonApi and Hal with isCacheKeySafe
- 3812a3617 fix(serializer): adapt tests for 4.1 (createMock for HAL, drop name converter)
- 8f32ad0e3 fix(serializer): bump min serializer dep and fix phpstan probe typing
- 89ca6f279 fix(state): _api_operation_nme to _api_operation_name in ErrorProvider (#7637)