Starting with v3, all notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Mollie\Api\Contracts\ResourceOriginmarker interface describing where a hydrated resource came from.Http\Responsenow implements it.BaseResource::getOrigin()/setOrigin()accessors on every hydrated resource and collection. HTTP-hydrated resources set origin to theResponseautomatically; no migration needed for existing user code.Mollie\Api\Webhooks\WebhookSnapshotOriginexposes the event id, signature, and received-at timestamp of the webhook that produced a hydrated resource. Accessible via$resource->getOrigin().Mollie\Api\Webhooks\SnapshotHydratorfeeds a webhook snapshot through the mainResourceHydratorafter a one-linejson_decode(json_encode())normalization so nested values arrive as stdClass (matching the HTTP path byte-for-byte).BaseEvent::asResource(Connector)hydrates the embedded entity into a fully-typed SDK resource and automatically threads the rich origin (event id, signature, received-at).WebhookEventMapper::processPayload()gains an optional?string $signatureparameter that is threaded through to the resulting event and carried onto hydrated resources viaWebhookSnapshotOrigin.ResourceCollection::withOrigin()factory as the origin-aware sibling ofwithResponse().
- BC-implied:
IsResponseAware::getResponse()return type narrowed fromResponseto?Response. HTTP-hydrated resources continue to return a non-nullResponse, matching pre-refactor behavior. Webhook-hydrated resources returnnull. User code that chains$resource->getResponse()->successful()or similar without a null check will NPE on webhook-origin resources — audit your webhook handlers before upgrading. HTTP-only consumers see no change. - BC-implied:
HasResponse::getPendingRequest()return type narrowed fromPendingRequestto?PendingRequest. Same rationale. WebhookEntity::asResource()gains an optional?WebhookSnapshotOriginsecond parameter. Callers using the single-arg form ($event->entity()->asResource($mollie)) continue to work and receive a fallback origin with null signature. Mapper-driven flow ($event->asResource($mollie)) passes the rich origin automatically.- Hydrating a webhook payload no longer requires a valid API key on the
connector. Signed snapshots are self-sufficient, so a signing-secret-only
webhook worker can read the snapshot without any key. Follow-up calls
(
$payment->refunds(),$subscription->payments(), etc.) still require an authenticator — they fire real HTTP requests. - Follow-up methods on hydrated resources (
Payment::refunds/captures/chargebacks,Profile::chargebacks/methods/payments/refunds,Subscription::payments) now fall back to their endpoint collection when the embedded webhook snapshot does not carry the corresponding_links.{name}.href. Previously these methods returned an empty collection in that case, which was a silent behavioural difference between HTTP-origin and webhook-origin resources. With this change the SDK routes through the connector using the resource's id (same patternPaymentLink::payments()already used), so you get a live child collection on both origins. Relative_links.{name}.hrefvalues in webhook payloads are resolved against the client's base URL viaUrl::join, no special handling required on the caller's side.
WebhookEventMapper::createWebhookEntityFromPayload()switched fromarray_pop($_embedded)to key-agnostic iteration that picks the first candidate carryingidandresourcefields. Mollie keys the embedded entity under_embedded.entity; the new iteration resolves that correctly and is resilient to any future schema tweak (additional_embeddedsub-blocks, renamed key) without silently breaking webhook handling.
WebhookEntity::buildSyntheticResponse()and its dependencies onPendingRequest,DynamicGetRequest,Nyholm\Psr7\Request, andNyholm\Psr7\Response. Webhook hydration goes throughSnapshotHydrator.protected Response $responseproperty on theHasResponsetrait. Storage is now?ResourceOrigin $origin; thegetResponse()accessor narrows back to?Responsefor callers. Third-party subclasses that read$this->responsedirectly must migrate to$this->getResponse()or$this->getOrigin().
docs/webhooks.mdpreviously stated that$event->entity()returns null for simple payloads. It actually throws. Updated to correctly describe reading the nullable$event->entityproperty or fetching the resource via$event->entityId.
v3.13.2 - 2026-08-24
- Update signature-verification.md by @fjbender in #902
- Do not drop request fields whose value is 0, "0" or 0.0 by @winklemad in #907
- @winklemad made their first contribution in #907
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.13.1...v3.13.2
v3.9.0 - 2026-02-09
- Fix: Don't call deprecated
setAccessible()by @derrabus in #852 - Fix documented
Capability::$requirementsstructure by @derrabus in #853 - feat(auth): add setToken helper for api keys by @Naoray in #859
- Chore/enhance sdk with docs and convenience methods by @Naoray in #855
- Fix/wrong payment details attribute by @Naoray in #854
- Remove incorrect null return type from ClientLink::getRedirectUrl() by @Naoray in #865
- Remove incorrect null return type from ClientLink::getRedirectUrl() by @NormanAlbert91 in #862
- @derrabus made their first contribution in #852
- @NormanAlbert91 made their first contribution in #862
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.8.0...v3.9.0
v3.8.0 - 2026-01-06
- feat: add metadata to connect balance transfer by @Naoray in #848
- Fix cURL deprecation notice for PHP 8.5 and higher by @RobinvanderVliet in #847
- fix: make TransferParty data accessible for debugging by @Naoray in #849
- Sandervanhooft fix/inclusion qr mismatch by @Naoray in #851
- @RobinvanderVliet made their first contribution in #847
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.7.0...v3.8.0
v3.7.0 - 2025-12-01
- Add GOOGLEPAY and SWISH payment methods by @samdejongobc in #844
- Add fromArray to Money by @Naoray in #846
- @samdejongobc made their first contribution in #844
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.6.0...v3.7.0
v3.6.0 - 2025-11-05
- Feat/add balance transfer webhook events by @sandervanhooft in #842
- Fixed webhook docs typo and explained next-gen webhook focus by @sandervanhooft in #841
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.5.0...v3.6.0
v3.5.0 - 2025-10-28
- Feat/add retry logic by @Naoray in #826
- Feat/add fake retain requests option by @Naoray in #830
- feat: add isEInvoice param and add support for testmode in all sales-… by @Naoray in #832
- feat: add customerId and mandateId to create sales invoice request by @Naoray in #834
- Feat/add balance transfer endpoint by @Naoray in #831
- Feat/add webhook mapping and events by @Naoray in #829
- global Config that serves as a lookup map to easily map resources to their respective collection keys
MockEventto easily test event handlingStrutility classclassBasenametoUtilityWebhookEntityto serve as Container for Resource data received through webhooks (-> can be transformed into BaseResource)- Webhook Events that are instanced via the
WebhookEventMapper
- Feat/make sequence mock responses consume callables by @Naoray in #833
- Change include to embed just like in GetPaginatedChargebacksRequest.php #837 by @Naoray in #838
- Allow description on CreatePaymentRefundRequest to be empty by @Naoray in #839
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.4.0...v3.5.0
v3.4.0 - 2025-08-13
- Feat/add new payment route endpoints by @Naoray in #825
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.3.3...v3.4.0
v3.3.3 - 2025-08-12
- Fix/823 inconsistencies on payment link request by @Naoray in #824
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.3.2...v3.3.3
v3.3.2 - 2025-07-25
- Fix/819 signature date invalid by @Naoray in #820
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.3.1...v3.3.2
v3.3.1 - 2025-07-25
- fix: signature validator handling null signatures by @Naoray in #822
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.3.0...v3.3.1
v3.3.0 - 2025-07-25
- Feat/expose webhook signature header by @Naoray in #821
- Feat/expose webhook signature creation by @Naoray
v3.2.0 - 2025-07-23
- Feat/add create webhook endpoint by @Naoray in #812
- Feat/webhook signature verification by @Naoray in #813
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.1.5...v3.2.0
v3.1.5 - 2025-07-10
- Fix: allow array of payment methods when creating a payment by @jockri in #811
- Sandervanhooft fix/recipe classes by @Naoray in #815
- Fix class references on recipes by @sandervanhooft in #814
- Fix payment links expiresAt by @sandervanhooft in #817
- Change "include" into "embed" on GetPaginatedChargebacksRequest by @sandervanhooft in #818
- @jockri made their first contribution in #811
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.1.4...v3.1.5
v3.1.4 - 2025-06-11
- Fix 400 Bad Request on DELETE when store array is empty by @cswiers in #810
- @cswiers made their first contribution in #810
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.1.3...v3.1.4
v3.1.3 - 2025-06-11
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.1.3...v3.1.3
v3.1.2 - 2025-06-10
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.1.1...v3.1.2
v3.1.1 - 2025-06-10
- Fix/include resources by @Naoray in #808
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.1.0...v3.1.1
v3.1.0 - 2025-06-05
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.0.6...v3.1.0
v3.0.6 - 2025-06-02
- Amend capturable recipe by @fjbender in #796
- fix: exchange wrong request name by @Naoray in #797
- Removes nullability from delete() method, as it cannot return null by @Sjustein in #802
- fix: use payload instead of query params for testmode by @Naoray in #803
- @Sjustein made their first contribution in #802
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.0.5...v3.0.6
v1.0.0-test - 2025-06-02
- Amend capturable recipe by @fjbender in #796
- fix: exchange wrong request name by @Naoray in #797
- Removes nullability from delete() method, as it cannot return null by @Sjustein in #802
- fix: use payload instead of query params for testmode by @Naoray in #803
- @Sjustein made their first contribution in #802
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.0.5...v1.0.0-test
v3.0.5 - 2025-04-27
- Fix/791 data types may mess up property order by @Naoray in #794
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.0.4...v3.0.5
v3.0.4 - 2025-04-25
- Chore/allow psr message v1 by @Naoray in #793
- Fix/789 remove overhault to resource calls by @Naoray in #792
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.0.3...v3.0.4
v3.0.3 - 2025-04-23
- Fixed docs links by @sandervanhooft in #787
- Feat/small improvements by @Naoray in #788
- make
MockResponseserializable - add changed
$metadatahandling to upgrade guide
- make
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.0.2...v3.0.3
v3.0.2 - 2025-04-17
- handle nullable 422 exception field by @sandervanhooft in #786
Full Changelog: https://github.com/mollie/mollie-api-php/compare/v3.0.1...v3.0.2