PackageTrack
Sign in Get early access

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 2026
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 60 of 377
  1. v5.0.0-alpha.2 12 Jul 2026 pre-release
    Release notes

    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

    • Require symfony/* ^7.4 || ^8.0 across all components; drop support for Symfony 6.4 and 7.0–7.3 (#8397)
    • Stabilize formerly @experimental APIs (Elasticsearch, State parameter providers, PropertyAwareFilterInterface, Laravel); @experimental kept only on MCP (#8365)
    Open source →
    Release notes

    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
    Open source →
    Release notes

    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.0 across all components; drop support for Symfony 6.4 and 7.0–7.3 (#8397)
    • Stabilize formerly @experimental APIs (Elasticsearch, State parameter providers, PropertyAwareFilterInterface, Laravel); @experimental kept only on MCP (#8365)
    Open source →
  2. v5.0.0-alpha.1 29 Jun 2026 pre-release

    Nothing published for this version

  3. v4.4.0-alpha.3 12 Jul 2026 pre-release
    Release notes

    Bug fixes

    • fix(state): correct composer "conflicts" key to "conflict" (#8400)

    Dependencies

    • Require symfony/* ^7.4 || ^8.0 across all components; drop support for Symfony 6.4 and 7.0–7.3 (#8397)
    • Stabilized formerly @experimental APIs (Elasticsearch, State parameter providers, PropertyAwareFilterInterface, Laravel ParameterValidatorProvider); @experimental now kept only on MCP (#8398)
    Open source →
    Release notes

    Bug fixes

    • f8c217283 fix(state): correct composer "conflicts" key to "conflict" (#8400)

    Dependencies

    • Require symfony/* ^7.4 || ^8.0 across all components; drop support for Symfony 6.4 and 7.0–7.3 (#8397)
    • Stabilize formerly @experimental APIs (Elasticsearch, State parameter providers, PropertyAwareFilterInterface, Laravel); @experimental kept only on MCP (#8365)
    Open source →
  4. v4.4.0-alpha.2 26 Jun 2026 pre-release
    Release notes

    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

    Open source →
    Release notes

    Bug fixes

    • b3f02f4e0 fix(laravel): require api-platform/metadata ^4.4@alpha so inter-package dependencies resolve to 4.4 (fixes a broken composer require api-platform/laravel install where SortFilterInterface was missing)
    Open source →
  5. v4.4.0-alpha.1 25 Jun 2026 pre-release
    Release notes

    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): withCredentials option 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

    Full Changelog: v4.3.14...v4.4.0-alpha.1

    Open source →
    Release notes

    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): withCredentials option 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)
    Open source →
  6. v4.3.17 12 Jul 2026
    Release notes

    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

    Open source →
    Release notes

    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)
    Open source →
  7. v4.3.16 03 Jul 2026
    Release notes

    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

    Open source →
    Release notes

    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)
    Open source →
  8. v4.3.15 26 Jun 2026
    Release notes

    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

    Open source →
    Release notes

    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)
    Open source →
  9. v4.3.14 19 Jun 2026
    Release notes

    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

    Open source →
    Release notes

    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)
    Open source →
  10. v4.3.13 13 Jun 2026
    Release notes

    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

    Open source →
    Release notes

    Bug fixes

    • 098d52766 fix(elasticsearch): coerce document _id to declared int identifier type (#8296)
    • 20baa6180 fix(openapi): throw clear error for openapi parameter missing name in yaml config (#8297)
    • 9e18fe013 fix(jsonschema): embed relations of non-resource objects in output schema (#8294)
    Open source →
  11. v4.3.12 13 Jun 2026
    Release notes

    Bug fixes

    • 6bcbeb2db fix(serializer): validate IRI target class on relation denormalization
    • 6b1fe1e47 fix(doctrine): guard unmapped relation links in ORM handleLinks (#8293)
    • cc021e4fa fix(graphql): honor custom mutation output class in payload type (#8300)
    Open source →
  12. v4.3.11 12 Jun 2026
    Release notes

    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 @id on a nested writable relation now replaces the currently-linked relation when it points to a different resource. A dangling embedded @id now returns a 400 instead of being silently ignored (it previously mutated the existing relation in place). See #8274.
    Open source →
  13. v4.3.10 05 Jun 2026
    Release notes

    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)
    Open source →
  14. v4.3.9 04 Jun 2026
    Release notes

    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)
    Open source →
  15. v4.3.8 04 Jun 2026
    Release notes

    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
    Open source →
  16. v4.3.7 29 May 2026
    Release notes

    Bug fixes

    • 90ae5142b fix(openapi): include jsonapi collection schema (#8190)
    • ab8bfd529 fix(symfony): isolate api_platform.property_info tags (#8206)
    Open source →
  17. v4.3.6 22 May 2026
    Release notes

    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)
    Open source →
  18. v4.3.5 11 May 2026
    Release notes

    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
    Open source →
  19. v4.3.4 30 Apr 2026
    Release notes

    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)
    Open source →
  20. v4.3.3 29 Mar 2026
    Release notes

    Bug fixes

    • 4ad230247 fix(openapi): default explode to true for form and cookie style param… (#7891)
    Open source →
  21. v4.3.2 27 Mar 2026
    Release notes

    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.
    Open source →
  22. v4.3.1 20 Mar 2026
    Release notes

    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)
    Open source →
  23. v4.3.0 13 Mar 2026
    Release notes

    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 SkipAutoconfigure attribute (#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 @type with output and itemUriTemplate: When using output with itemUriTemplate on a collection operation, the JSON-LD @type now uses the resource class name instead of the output DTO class name for semantic consistency with itemUriTemplate behavior. 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 throw InvalidArgumentException if the property attribute is missing. If you have filter parameters without an explicit property, you must either add one or use the :property placeholder 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 your ApiResource attribute.

    Behavioral changes

    • Hydra class @id now always uses #ShortName (#7771): Hydra documentation classes now consistently use #ShortName as their @id instead 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 via types are now exposed through rdfs:subClassOf. Clients should expect class @id and property range changes in the Hydra documentation if resources had custom types configured.
    • isGranted evaluated before provider (#7500): Security expressions are now evaluated before the state provider runs. Expressions that do not reference the object variable will be checked earlier (at the pre_read stage), improving security by preventing unnecessary database queries on unauthorized requests. Expressions that reference object still 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 Allow and Accept-Post headers 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, set enable_scalar: false in your API Platform configuration.
    Open source →
  24. v4.3.0-beta.2 06 Mar 2026 pre-release

    Nothing published for this version

  25. v4.3.0-beta.1 03 Mar 2026 pre-release

    Nothing published for this version

  26. v4.3.0-alpha.2 20 Feb 2026 pre-release

    Nothing published for this version

  27. v4.3.0-alpha.1 13 Feb 2026 pre-release

    Nothing published for this version

  28. v4.2.26 13 Jun 2026

    Nothing published for this version

  29. v4.2.25 04 Jun 2026
    Release notes

    Bug fixes

    • 019fd9012 fix(serializer): gate cache_key in JsonApi and Hal with isCacheKeySafe
    • 1bfd6eecd fix(serializer): bump min serializer dep and fix phpstan probe typing
    Open source →
  30. v4.2.24 29 Mar 2026
    Release notes

    Bug fixes

    • 8cb5a6044 fix(state): do not map to input class in ObjectMapperProvider (#7892)
    Open source →
  31. v4.2.23 27 Mar 2026
    Release notes

    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)
    Open source →
  32. v4.2.22 20 Mar 2026
    Release notes

    Bug fixes

    • 3e96fc679 fix(serializer): evaluate ApiProperty security on input DTOs (#7852)
    • c7ababf2d fix(hydra): use compact IRI for owl:onProperty and Collection @id in DocumentationNormalizer (#7849)
    Open source →
  33. v4.2.21 13 Mar 2026
    Release notes

    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)
    Open source →
  34. v4.2.20 06 Mar 2026
    Release notes

    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)
    Open source →
  35. v4.2.19 27 Feb 2026
    Release notes

    Bug fixes

    • 04c30b7ee fix(jsonapi): prevent double unwrapping of data.attributes with input DTOs
    • c6236f313 fix(serializer): report all missing constructor arguments in instantiateObject
    Open source →
  36. v4.2.18 27 Feb 2026
    Release notes

    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
    Open source →
  37. v4.2.17 20 Feb 2026
    Release notes

    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)
    Open source →
  38. v4.2.16 13 Feb 2026
    Release notes

    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)
    Open source →
  39. v4.2.15 30 Jan 2026
    Release notes

    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)
    Open source →
  40. v4.2.14 23 Jan 2026
    Release notes

    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
    Open source →
  41. v4.2.13 16 Jan 2026
    Release notes

    Bug fixes

    • 1e22e4450 fix(openapi): phpdoc operation response as array<int|string, OpenApi\Response> (#7660)
    • 2721655d7 fix(metadata): losing content on error reponse with no output (#7674)
    • bed668c58 fix: 🐛 pass missing arguments to ConcernsResourceMetadataCollectionFactory (#7676)
    Open source →
  42. v4.2.12 09 Jan 2026
    Release notes

    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)
    Open source →
  43. v4.2.11 19 Dec 2025
    Release notes

    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-revalidate and stale-if-error cache headers via config file (#7606)
    • d847ad629 fix(jsonapi): handle missing attributes in ErrorNormalizer (#7569)
    Open source →
  44. v4.2.10 11 Dec 2025
    Release notes

    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)
    Open source →
  45. v4.2.9 05 Dec 2025
    Release notes

    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)
    Open source →
  46. v4.2.8 01 Dec 2025

    Nothing published for this version

  47. v4.2.7 30 Nov 2025
    Release notes

    Symfony 8.0 compatible.

    Bug fixes

    • 44af80c43 fix(symfony): disable Swagger UI and keep openapi.json (#7549)
    • 4dfa8da8b fix(metadata): repeatable attribute mutators (#7542)
    • 5e2f729ed fix(state): never map a response (#7543)
    • e9af8905c fix(metadata): disable pagination maximum items per page (#7553)
    Open source →
  48. v4.2.6 17 Nov 2025
    Release notes

    Bug fixes

    • 53d3f8481 fix(state): object mapper flag (#7541)
    • f4a1697ca Revert "fix: 🐛 make default value of pagination_maximum_items_per_page same…" (#7533)
    Open source →
  49. v4.2.5 17 Nov 2025
    Release notes

    Bug fixes

    • 57fe3d1 fix(state): class existence check for ObjectMapperAwareInterface
    Open source →
  50. v4.2.4 13 Nov 2025
    Release notes

    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)
    Open source →
  51. v4.2.3 31 Oct 2025
    Release notes
    • 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 member property out of HydraCollectionBaseSchema (#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 mixed properties to string|null instead of null (#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)
    Open source →
  52. v4.2.2 09 Oct 2025
    Release notes

    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 @id and @type properties 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)
    Open source →
  53. v4.2.1 26 Sep 2025
    Release notes

    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_page same 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

    Open source →
  54. v4.2.0 18 Sep 2025
    Release notes

    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's Type (#7100)
    • 1d579d095 feat(hal): use TypeInfo type (#7097)
    • 350d6d707 feat(hydra): use TypeInfo's Type (#7099)
    • 55461a83c feat: Use Type of TypeInfo instead of PropertyInfo (#6979)
    • 7c796de0d feat(serializer): type info (#7104)
    • 827e1f725 feat(elasticsearch): use TypeInfo type (#7098)
    • a1952e304 feat(openapi): use TypeInfo's Type (#7096)
    • dd3356824 feat(laravel): use TypeInfo's Type (#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 ParameterExtension context 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
    Open source →
  55. v4.2.0-beta.1 16 Sep 2025 pre-release
    Release notes

    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

    Open source →
  56. v4.2.0-alpha.3 29 Aug 2025 pre-release
    Release notes

    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 partial query parameter to OpenAPI when pagination_client_enabled is 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:

    Object Mapper:

    • a42034dc3 feat(symfony): object mapper with state options (#6801)

    TypeInfo:

    • 7c796de0d feat(serializer): type info (#7104)
    • 350d6d707 feat(hydra): use TypeInfo's Type (#7099)
    • 55461a83c feat: Use Type of TypeInfo instead of PropertyInfo (#6979)
    • 827e1f725 feat(elasticsearch): use TypeInfo type (#7098)
    • a1952e304 feat(openapi): use TypeInfo's Type (#7096)
    • dd3356824 feat(laravel): use TypeInfo's Type (#7101)
    • 143d512ef feat(jsonapi): use TypeInfo's Type (#7100)
    • 1d579d095 feat(hal): use TypeInfo type (#7097)
    Open source →
  57. v4.2.0-alpha.2 25 Aug 2025 pre-release
    Release notes

    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 partial query parameter to OpenAPI when pagination_client_enabled is 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:

    Object Mapper:

    • a42034dc3 feat(symfony): object mapper with state options (#6801)

    TypeInfo:

    • 7c796de0d feat(serializer): type info (#7104)
    • 350d6d707 feat(hydra): use TypeInfo's Type (#7099)
    • 55461a83c feat: Use Type of TypeInfo instead of PropertyInfo (#6979)
    • 827e1f725 feat(elasticsearch): use TypeInfo type (#7098)
    • a1952e304 feat(openapi): use TypeInfo's Type (#7096)
    • dd3356824 feat(laravel): use TypeInfo's Type (#7101)
    • 143d512ef feat(jsonapi): use TypeInfo's Type (#7100)
    • 1d579d095 feat(hal): use TypeInfo type (#7097)
    Open source →
  58. v4.2.0-alpha.1 03 Jul 2025 pre-release
    Release notes

    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's Type (#7099)
    • 55461a83c feat: Use Type of TypeInfo instead of PropertyInfo (#6979)
    • 827e1f725 feat(elasticsearch): use TypeInfo type (#7098)
    • a1952e304 feat(openapi): use TypeInfo's Type (#7096)
    • dd3356824 feat(laravel): use TypeInfo's Type (#7101)
    • 143d512ef feat(jsonapi): use TypeInfo's Type (#7100)
    • 1d579d095 feat(hal): use TypeInfo type (#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
    Open source →
  59. v4.1.30 13 Jun 2026

    Nothing published for this version

  60. v4.1.29 04 Jun 2026
    Release notes

    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)
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive