Repository: VictorAvelar/mollie-api-go
Pull request #349 (2024-03-15 17:33:21)

check refunds resource against api reference
<!--- Provide a general summary of your changes in the Title above -->

# Description

Ensures that the `refunds` resource delivers API parity. 

## Motivation and context

Ensures the library has full API parity.

## How has this been tested?

Please describe in detail how you tested your changes.

Include details of your testing environment, and the tests you ran to
see how your change affects other areas of the code, etc.

- [x] Unit tests added / updated
- [x] The tests run on docker (using `make test`)
- [ ] The required `test data` has been added / updated

If you are running the tests locally, please specify:

- OS: macos
- Go version 1.22

## Types of changes

What types of changes does your code introduce? Put an `x` in all the boxes that apply:

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [x] Breaking change (fix or feature that would cause existing functionality to change)
- [ ] This change requires a documentation update

## Checklist

Go over all the following points, and put an `x` in all the boxes that apply.

Please, please, please, don't send your pull request until all of the boxes are ticked. Once your pull request is created, it will trigger a build on our continuous integration server to make sure your [tests and code style pass](https://help.github.com/articles/about-required-status-checks/).

- [x] I have read the **[CONTRIBUTING](CONTRIBUTING.md)** document.
- [x] My pull request addresses exactly one patch/feature.
- [x] I have created a branch for this patch/feature.
- [x] Each individual commit in the pull request is meaningful.
- [x] If my change requires a change to the documentation, I have updated it accordingly.

<!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->



Patch:
diff --git a/docs/README.md b/docs/README.md
index 18ad867..493647b 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -114,8 +114,10 @@ REST also implies a nice and clean structure for URLs or endpoints. This means y
 - [type CreateMollieConnectPaymentFields](<#CreateMollieConnectPaymentFields>)
 - [type CreateOrUpdateProfile](<#CreateOrUpdateProfile>)
 - [type CreateOrder](<#CreateOrder>)
+- [type CreateOrderRefund](<#CreateOrderRefund>)
 - [type CreatePayment](<#CreatePayment>)
 - [type CreatePaymentAccessTokenFields](<#CreatePaymentAccessTokenFields>)
+- [type CreatePaymentRefund](<#CreatePaymentRefund>)
 - [type CreatePreAuthorizedPaymentFields](<#CreatePreAuthorizedPaymentFields>)
 - [type CreateRecurrentPaymentFields](<#CreateRecurrentPaymentFields>)
 - [type CreateShipmentRequest](<#CreateShipmentRequest>)
@@ -159,7 +161,6 @@ REST also implies a nice and clean structure for URLs or endpoints. This means y
 - [type LinkedClientList](<#LinkedClientList>)
 - [type ListLinkedClientsOptions](<#ListLinkedClientsOptions>)
 - [type ListPaymentOptions](<#ListPaymentOptions>)
-- [type ListRefundOptions](<#ListRefundOptions>)
 - [type Locale](<#Locale>)
 - [type Mandate](<#Mandate>)
 - [type MandateDetails](<#MandateDetails>)
@@ -202,6 +203,7 @@ REST also implies a nice and clean structure for URLs or endpoints. This means y
 - [type OrderListRefundOptions](<#OrderListRefundOptions>)
 - [type OrderOptions](<#OrderOptions>)
 - [type OrderPayment](<#OrderPayment>)
+- [type OrderRefundLine](<#OrderRefundLine>)
 - [type OrderStatus](<#OrderStatus>)
 - [type OrdersService](<#OrdersService>)
   - [func \(ors \*OrdersService\) Cancel\(ctx context.Context, orderID string\) \(res \*Response, order \*Order, err error\)](<#OrdersService.Cancel>)
@@ -253,6 +255,9 @@ REST also implies a nice and clean structure for URLs or endpoints. This means y
   - [func \(ms \*PaymentMethodsService\) Get\(ctx context.Context, id PaymentMethod, options \*PaymentMethodOptions\) \(res \*Response, pmd \*PaymentMethodDetails, err error\)](<#PaymentMethodsService.Get>)
   - [func \(ms \*PaymentMethodsService\) List\(ctx context.Context, options \*PaymentMethodsListOptions\) \(res \*Response, pm \*PaymentMethodsList, err error\)](<#PaymentMethodsService.List>)
 - [type PaymentOptions](<#PaymentOptions>)
+- [type PaymentRefundAccessTokenFields](<#PaymentRefundAccessTokenFields>)
+- [type PaymentRefundMollieConnectFields](<#PaymentRefundMollieConnectFields>)
+- [type PaymentRefundOptions](<#PaymentRefundOptions>)
 - [type PaymentRouting](<#PaymentRouting>)
 - [type PaymentsService](<#PaymentsService>)
   - [func \(ps \*PaymentsService\) Cancel\(ctx context.Context, id string\) \(res \*Response, p \*Payment, err error\)](<#PaymentsService.Cancel>)
@@ -299,16 +304,20 @@ REST also implies a nice and clean structure for URLs or endpoints. This means y
 - [type RecurrentPaymentFields](<#RecurrentPaymentFields>)
 - [type Refund](<#Refund>)
 - [type RefundLinks](<#RefundLinks>)
-- [type RefundList](<#RefundList>)
-- [type RefundOptions](<#RefundOptions>)
 - [type RefundStatus](<#RefundStatus>)
+- [type RefundsList](<#RefundsList>)
+- [type RefundsListOptions](<#RefundsListOptions>)
 - [type RefundsService](<#RefundsService>)
-  - [func \(rs \*RefundsService\) Cancel\(ctx context.Context, paymentID, refundID string\) \(res \*Response, err error\)](<#RefundsService.Cancel>)
-  - [func \(rs \*RefundsService\) Create\(ctx context.Context, paymentID string, re Refund, options \*RefundOptions\) \(res \*Response, rf \*Refund, err error\)](<#RefundsService.Create>)
-  - [func \(rs \*RefundsService\) Get\(ctx context.Context, paymentID, refundID string, opts \*RefundOptions\) \(res \*Response, refund \*Refund, err error\)](<#RefundsService.Get>)
-  - [func \(rs \*RefundsService\) ListRefund\(ctx context.Context, opts \*ListRefundOptions\) \(res \*Response, rl \*RefundList, err error\)](<#RefundsService.ListRefund>)
-  - [func \(rs \*RefundsService\) ListRefundPayment\(ctx context.Context, paymentID string, opts \*ListRefundOptions\) \(res \*Response, rl \*RefundList, err error\)](<#RefundsService.ListRefundPayment>)
+  - [func \(rs \*RefundsService\) CancelPaymentRefund\(ctx context.Context, paymentID, refundID string\) \(res \*Response, err error\)](<#RefundsService.CancelPaymentRefund>)
+  - [func \(rs \*RefundsService\) CreateOrderRefund\(ctx context.Context, orderID string, r CreateOrderRefund\) \(res \*Response, rf \*Refund, err error\)](<#RefundsService.CreateOrderRefund>)
+  - [func \(rs \*RefundsService\) CreatePaymentRefund\(ctx context.Context, paymentID string, re CreatePaymentRefund, options \*PaymentRefundOptions\) \(res \*Response, rf \*Refund, err error\)](<#RefundsService.CreatePaymentRefund>)
+  - [func \(rs \*RefundsService\) GetPaymentRefund\(ctx context.Context, paymentID, refundID string, opts \*PaymentRefundOptions\) \(res \*Response, refund \*Refund, err error\)](<#RefundsService.GetPaymentRefund>)
+  - [func \(rs \*RefundsService\) List\(ctx context.Context, opts \*RefundsListOptions\) \(res \*Response, rl \*RefundsList, err error\)](<#RefundsService.List>)
+  - [func \(rs \*RefundsService\) ListOrderRefunds\(ctx context.Context, orderID string, opts \*RefundsListOptions\) \(res \*Response, rl \*RefundsList, err error\)](<#RefundsService.ListOrderRefunds>)
+  - [func \(rs \*RefundsService\) ListPaymentRefunds\(ctx context.Context, paymentID string, opts \*RefundsListOptions\) \(res \*Response, rl \*RefundsList, err error\)](<#RefundsService.ListPaymentRefunds>)
 - [type Response](<#Response>)
+- [type RoutingReversal](<#RoutingReversal>)
+- [type RoutingSource](<#RoutingSource>)
 - [type SequenceType](<#SequenceType>)
 - [type Settlement](<#Settlement>)
 - [type SettlementCosts](<#SettlementCosts>)
@@ -324,7 +333,7 @@ REST also implies a nice and clean structure for URLs or endpoints. This means y
   - [func \(ss \*SettlementsService\) GetCaptures\(ctx context.Context, id string, slo \*SettlementsListOptions\) \(res \*Response, cl \*CapturesList, err error\)](<#SettlementsService.GetCaptures>)
   - [func \(ss \*SettlementsService\) GetChargebacks\(ctx context.Context, id string, slo \*SettlementsListOptions\) \(res \*Response, cl \*ChargebacksList, err error\)](<#SettlementsService.GetChargebacks>)
   - [func \(ss \*SettlementsService\) GetPayments\(ctx context.Context, id string, slo \*SettlementsListOptions\) \(res \*Response, pl \*PaymentList, err error\)](<#SettlementsService.GetPayments>)
-  - [func \(ss \*SettlementsService\) GetRefunds\(ctx context.Context, id string, slo \*SettlementsListOptions\) \(res \*Response, rl \*RefundList, err error\)](<#SettlementsService.GetRefunds>)
+  - [func \(ss \*SettlementsService\) GetRefunds\(ctx context.Context, id string, slo \*SettlementsListOptions\) \(res \*Response, rl \*RefundsList, err error\)](<#SettlementsService.GetRefunds>)
   - [func \(ss \*SettlementsService\) List\(ctx context.Context, slo \*SettlementsListOptions\) \(res \*Response, sl \*SettlementsList, err error\)](<#SettlementsService.List>)
   - [func \(ss \*SettlementsService\) Next\(ctx context.Context\) \(res \*Response, s \*Settlement, err error\)](<#SettlementsService.Next>)
   - [func \(ss \*SettlementsService\) Open\(ctx context.Context\) \(res \*Response, s \*Settlement, err error\)](<#SettlementsService.Open>)
@@ -1967,6 +1976,20 @@ type CreateOrder struct {
 }
 ```
 
+<a name="CreateOrderRefund"></a>
+## type [CreateOrderRefund](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L20-L25>)
+
+CreateOrderRefund describes the payload to create a refund associated to an order.
+
+```go
+type CreateOrderRefund struct {
+    Description string             `json:"description,omitempty"`
+    Metadata    any                `json:"metadata,omitempty"`
+    Lines       []*OrderRefundLine `json:"lines,omitempty"`
+    PaymentRefundAccessTokenFields
+}
+```
+
 <a name="CreatePayment"></a>
 ## type [CreatePayment](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/payments.go#L66-L101>)
 
@@ -2029,6 +2052,21 @@ type CreatePaymentAccessTokenFields struct {
 }
 ```
 
+<a name="CreatePaymentRefund"></a>
+## type [CreatePaymentRefund](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L11-L17>)
+
+CreatePaymentRefund describes the payload to create a refund associated to a payment.
+
+```go
+type CreatePaymentRefund struct {
+    Description string  `json:"description,omitempty"`
+    Metadata    any     `json:"metadata,omitempty"`
+    Amount      *Amount `json:"amount,omitempty"`
+    PaymentRefundAccessTokenFields
+    PaymentRefundMollieConnectFields
+}
+```
+
 <a name="CreatePreAuthorizedPaymentFields"></a>
 ## type [CreatePreAuthorizedPaymentFields](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/payments.go#L117-L120>)
 
@@ -2711,22 +2749,6 @@ type ListPaymentOptions struct {
 }
 ```
 
-<a name="ListRefundOptions"></a>
-## type [ListRefundOptions](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L69-L74>)
-
-ListRefundOptions describes list refund endpoint valid query string parameters.
-
-See: https://docs.mollie.com/reference/v2/refunds-api/list-refunds.
-
-```go
-type ListRefundOptions struct {
-    From      string     `url:"from,omitempty"`
-    Limit     int        `url:"limit,omitempty"`
-    ProfileID string     `url:"profileId,omitempty"`
-    Embed     EmbedValue `url:"embed,omitempty"`
-}
-```
-
 <a name="Locale"></a>
 ## type [Locale](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/common_types.go#L89>)
 
@@ -3439,6 +3461,19 @@ type OrderPayment struct {
 }
 ```
 
+<a name="OrderRefundLine"></a>
+## type [OrderRefundLine](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L28-L32>)
+
+OrderRefundLine describes the payload to create a refund associated to an order line.
+
+```go
+type OrderRefundLine struct {
+    Quantity int     `json:"quantity,omitempty"`
+    ID       string  `json:"id,omitempty"`
+    Amount   *Amount `json:"amount,omitempty"`
+}
+```
+
 <a name="OrderStatus"></a>
 ## type [OrderStatus](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/orders.go#L109>)
 
@@ -4245,6 +4280,40 @@ type PaymentOptions struct {
 }
 ```
 
+<a name="PaymentRefundAccessTokenFields"></a>
+## type [PaymentRefundAccessTokenFields](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L35-L37>)
+
+PaymentRefundAccessTokenFields describes the access token available fields for a refund.
+
+```go
+type PaymentRefundAccessTokenFields struct {
+    Testmode bool `json:"testmode,omitempty"`
+}
+```
+
+<a name="PaymentRefundMollieConnectFields"></a>
+## type [PaymentRefundMollieConnectFields](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L40-L43>)
+
+PaymentRefundMollieConnectFields describes the Mollie Connect available fields for a refund.
+
+```go
+type PaymentRefundMollieConnectFields struct {
+    ReverseRouting   bool               `json:"reverseRouting,omitempty"`
+    RoutingReversals []*RoutingReversal `json:"routingReversals,omitempty"`
+}
+```
+
+<a name="PaymentRefundOptions"></a>
+## type [PaymentRefundOptions](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L108-L110>)
+
+PaymentRefundOptions describes payment refund endpoint valid query string parameters.
+
+```go
+type PaymentRefundOptions struct {
+    Embed []EmbedValue `url:"embed,omitempty"`
+}
+```
+
 <a name="PaymentRouting"></a>
 ## type [PaymentRouting](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/payments.go#L47-L51>)
 
@@ -4804,7 +4873,7 @@ type RecurrentPaymentFields struct {
 ```
 
 <a name="Refund"></a>
-## type [Refund](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L11-L26>)
+## type [Refund](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L58-L74>)
 
 Refund describe a refund for a certain payment.
 
@@ -4812,23 +4881,24 @@ Refund describe a refund for a certain payment.
 type Refund struct {
     Resource         string       `json:"resource,omitempty"`
     ID               string       `json:"id,omitempty"`
-    Amount           *Amount      `json:"amount,omitempty"`
     SettlementID     string       `json:"settlementId,omitempty"`
-    SettlementAmount *Amount      `json:"settlementAmount,omitempty"`
     Description      string       `json:"description,omitempty"`
-    Metadata         interface{}  `json:"metadata,omitempty"`
-    Status           RefundStatus `json:"status,omitempty"`
-    Lines            []*OrderLine `json:"lines,omitempty"`
     PaymentID        string       `json:"paymentId,omitempty"`
     OrderID          string       `json:"orderId,omitempty"`
+    Amount           *Amount      `json:"amount,omitempty"`
+    SettlementAmount *Amount      `json:"settlementAmount,omitempty"`
     CreatedAt        *time.Time   `json:"createdAt,omitempty"`
-    TestMode         bool         `json:"testmode,omitempty"`
+    Lines            []*OrderLine `json:"lines,omitempty"`
+    Metadata         any          `json:"metadata,omitempty"`
+    Status           RefundStatus `json:"status,omitempty"`
     Links            RefundLinks  `json:"_links,omitempty"`
+    PaymentRefundAccessTokenFields
+    PaymentRefundMollieConnectFields
 }
 ```
 
 <a name="RefundLinks"></a>
-## type [RefundLinks](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L51-L57>)
+## type [RefundLinks](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L99-L105>)
 
 RefundLinks describes all the possible links to be returned with a Refund object.
 
@@ -4842,13 +4912,34 @@ type RefundLinks struct {
 }
 ```
 
-<a name="RefundList"></a>
-## type [RefundList](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L29-L35>)
+<a name="RefundStatus"></a>
+## type [RefundStatus](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L86>)
 
-RefundList describes how a list of refunds will be retrieved by Mollie.
+RefundStatus describes the status of the refund.
 
 ```go
-type RefundList struct {
+type RefundStatus string
+```
+
+<a name="Queued"></a>Valid refund status.
+
+```go
+const (
+    Queued     RefundStatus = "queued"
+    Pending    RefundStatus = "pending"
+    Processing RefundStatus = "processing"
+    Refunded   RefundStatus = "refunded"
+    Failed     RefundStatus = "failed"
+)
+```
+
+<a name="RefundsList"></a>
+## type [RefundsList](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L77-L83>)
+
+RefundsList describes how a list of refunds will be retrieved by Mollie.
+
+```go
+type RefundsList struct {
     Count    int `json:"count,omitempty"`
     Embedded struct {
         Refunds []*Refund
@@ -4857,101 +4948,105 @@ type RefundList struct {
 }
 ```
 
-<a name="RefundOptions"></a>
-## type [RefundOptions](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L62-L64>)
-
-RefundOptions describes refund endpoint valid query string parameters.
+<a name="RefundsListOptions"></a>
+## type [RefundsListOptions](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L113-L118>)
 
-See: https://docs.mollie.com/reference/v2/refunds-api/get-refund.
+RefundsListOptions describes payment and order refunds list endpoint valid query string parameters.
 
 ```go
-type RefundOptions struct {
-    Embed EmbedValue `url:"embed,omitempty"`
+type RefundsListOptions struct {
+    Limit     int          `url:"limit,omitempty"`
+    From      string       `url:"from,omitempty"`
+    ProfileID string       `url:"profileId,omitempty"`
+    Embed     []EmbedValue `url:"embed,omitempty"`
 }
 ```
 
-<a name="RefundStatus"></a>
-## type [RefundStatus](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L38>)
+<a name="RefundsService"></a>
+## type [RefundsService](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L121>)
 
-RefundStatus describes the status of the refund.
+RefundsService instance operates over refund resources.
 
 ```go
-type RefundStatus string
+type RefundsService service
 ```
 
-<a name="Queued"></a>Valid refund status.
+<a name="RefundsService.CancelPaymentRefund"></a>
+### func \(\*RefundsService\) [CancelPaymentRefund](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L229-L231>)
 
 ```go
-const (
-    Queued     RefundStatus = "queued"
-    Pending    RefundStatus = "pending"
-    Processing RefundStatus = "processing"
-    Refunded   RefundStatus = "refunded"
-    Failed     RefundStatus = "failed"
-)
+func (rs *RefundsService) CancelPaymentRefund(ctx context.Context, paymentID, refundID string) (res *Response, err error)
 ```
 
-<a name="RefundsService"></a>
-## type [RefundsService](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L77>)
+CancelPaymentRefund cancels a refund for a specific payment.
 
-RefundsService instance operates over refund resources.
+See https://docs.mollie.com/reference/v2/refunds-api/cancel-payment-refund
+
+<a name="RefundsService.CreateOrderRefund"></a>
+### func \(\*RefundsService\) [CreateOrderRefund](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L238-L246>)
 
 ```go
-type RefundsService service
+func (rs *RefundsService) CreateOrderRefund(ctx context.Context, orderID string, r CreateOrderRefund) (res *Response, rf *Refund, err error)
 ```
 
-<a name="RefundsService.Cancel"></a>
-### func \(\*RefundsService\) [Cancel](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L130>)
+CreateOrderRefund creates a refund for a specific order.
+
+See https://docs.mollie.com/reference/v2/refunds-api/create-order-refund
+
+<a name="RefundsService.CreatePaymentRefund"></a>
+### func \(\*RefundsService\) [CreatePaymentRefund](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L198-L207>)
 
 ```go
-func (rs *RefundsService) Cancel(ctx context.Context, paymentID, refundID string) (res *Response, err error)
+func (rs *RefundsService) CreatePaymentRefund(ctx context.Context, paymentID string, re CreatePaymentRefund, options *PaymentRefundOptions) (res *Response, rf *Refund, err error)
 ```
 
-Cancel try to cancel the refund request. The refund can only be canceled while the refund’s status is either queued or pending. See https://docs.mollie.com/reference/v2/refunds-api/cancel-refund
+Create a refund payment request.
+
+See https://docs.mollie.com/reference/v2/refunds-api/create-payment-refund
 
-<a name="RefundsService.Create"></a>
-### func \(\*RefundsService\) [Create](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L104-L108>)
+<a name="RefundsService.GetPaymentRefund"></a>
+### func \(\*RefundsService\) [GetPaymentRefund](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L146-L154>)
 
 ```go
-func (rs *RefundsService) Create(ctx context.Context, paymentID string, re Refund, options *RefundOptions) (res *Response, rf *Refund, err error)
+func (rs *RefundsService) GetPaymentRefund(ctx context.Context, paymentID, refundID string, opts *PaymentRefundOptions) (res *Response, refund *Refund, err error)
 ```
 
-Create a refund payment request.
+GetPaymentRefund retrieves a specific refund for a specific payment.
 
-See https://docs.mollie.com/reference/v2/refunds-api/create-refund.
+See: https://docs.mollie.com/reference/v2/refunds-api/get-payment-refund
 
-<a name="RefundsService.Get"></a>
-### func \(\*RefundsService\) [Get](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L82-L86>)
+<a name="RefundsService.List"></a>
+### func \(\*RefundsService\) [List](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L126-L130>)
 
 ```go
-func (rs *RefundsService) Get(ctx context.Context, paymentID, refundID string, opts *RefundOptions) (res *Response, refund *Refund, err error)
+func (rs *RefundsService) List(ctx context.Context, opts *RefundsListOptions) (res *Response, rl *RefundsList, err error)
 ```
 
-Get retrieve a single refund by its ID.
+List retrieves all refunds.
 
-If you do not know the original payment’s ID, you can use the List payment refunds endpoint.
+See https://docs.mollie.com/reference/v2/refunds-api/list-refunds.
 
-<a name="RefundsService.ListRefund"></a>
-### func \(\*RefundsService\) [ListRefund](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L144-L148>)
+<a name="RefundsService.ListOrderRefunds"></a>
+### func \(\*RefundsService\) [ListOrderRefunds](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L268-L276>)
 
 ```go
-func (rs *RefundsService) ListRefund(ctx context.Context, opts *ListRefundOptions) (res *Response, rl *RefundList, err error)
+func (rs *RefundsService) ListOrderRefunds(ctx context.Context, orderID string, opts *RefundsListOptions) (res *Response, rl *RefundsList, err error)
 ```
 
-ListRefund calls the top level https://api.mollie.com/v2/refunds.
+ListOrderRefunds retrieves all refunds for a specific order.
 
-See https://docs.mollie.com/reference/v2/refunds-api/list-refunds.
+See https://docs.mollie.com/reference/v2/refunds-api/list-order-refunds
 
-<a name="RefundsService.ListRefundPayment"></a>
-### func \(\*RefundsService\) [ListRefundPayment](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L159-L163>)
+<a name="RefundsService.ListPaymentRefunds"></a>
+### func \(\*RefundsService\) [ListPaymentRefunds](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L172-L180>)
 
 ```go
-func (rs *RefundsService) ListRefundPayment(ctx context.Context, paymentID string, opts *ListRefundOptions) (res *Response, rl *RefundList, err error)
+func (rs *RefundsService) ListPaymentRefunds(ctx context.Context, paymentID string, opts *RefundsListOptions) (res *Response, rl *RefundsList, err error)
 ```
 
-ListRefundPayment calls the payment\-specific https://api.mollie.com/v2/payments/*paymentId*/refunds.
+ListPaymentRefunds retrieves all refunds for a specific payment.
 
-Only refunds for that specific payment are returned. See: https://docs.mollie.com/reference/v2/refunds-api/list-refunds
+See: https://docs.mollie.com/reference/v2/refunds-api/list-payment-refunds
 
 <a name="Response"></a>
 ## type [Response](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/mollie.go#L350-L353>)
@@ -4965,6 +5060,30 @@ type Response struct {
 }
 ```
 
+<a name="RoutingReversal"></a>
+## type [RoutingReversal](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L46-L49>)
+
+RoutingReversal describes the payload to be sent to the reverse routing endpoint.
+
+```go
+type RoutingReversal struct {
+    Amount *Amount `json:"amount,omitempty"`
+    Source string  `json:"source,omitempty"`
+}
+```
+
+<a name="RoutingSource"></a>
+## type [RoutingSource](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/refunds.go#L52-L55>)
+
+RoutingSource describes the source of the routing.
+
+```go
+type RoutingSource struct {
+    Type           string `json:"type,omitempty"`
+    OrganizationID string `json:"organizationId,omitempty"`
+}
+```
+
 <a name="SequenceType"></a>
 ## type [SequenceType](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/payments.go#L37>)
 
@@ -5182,7 +5301,7 @@ See: https://docs.mollie.com/reference/v2/settlements-api/list-settlement-paymen
 ### func \(\*SettlementsService\) [GetRefunds](<https://github.com/VictorAvelar/mollie-api-go/blob/master/mollie/settlements.go#L163-L167>)
 
 ```go
-func (ss *SettlementsService) GetRefunds(ctx context.Context, id string, slo *SettlementsListOptions) (res *Response, rl *RefundList, err error)
+func (ss *SettlementsService) GetRefunds(ctx context.Context, id string, slo *SettlementsListOptions) (res *Response, rl *RefundsList, err error)
 ```
 
 GetRefunds retrieves all refunds included in a settlement.
diff --git a/mollie/refunds.go b/mollie/refunds.go
index bbbec5c..0c6beea 100644
--- a/mollie/refunds.go
+++ b/mollie/refunds.go
@@ -7,26 +7,74 @@ import (
 	"time"
 )
 
+// CreatePaymentRefund describes the payload to create a refund associated to a payment.
+type CreatePaymentRefund struct {
+	Description string  `json:"description,omitempty"`
+	Metadata    any     `json:"metadata,omitempty"`
+	Amount      *Amount `json:"amount,omitempty"`
+	PaymentRefundAccessTokenFields
+	PaymentRefundMollieConnectFields
+}
+
+// CreateOrderRefund describes the payload to create a refund associated to an order.
+type CreateOrderRefund struct {
+	Description string             `json:"description,omitempty"`
+	Metadata    any                `json:"metadata,omitempty"`
+	Lines       []*OrderRefundLine `json:"lines,omitempty"`
+	PaymentRefundAccessTokenFields
+}
+
+// OrderRefundLine describes the payload to create a refund associated to an order line.
+type OrderRefundLine struct {
+	Quantity int     `json:"quantity,omitempty"`
+	ID       string  `json:"id,omitempty"`
+	Amount   *Amount `json:"amount,omitempty"`
+}
+
+// PaymentRefundAccessTokenFields describes the access token available fields for a refund.
+type PaymentRefundAccessTokenFields struct {
+	Testmode bool `json:"testmode,omitempty"`
+}
+
+// PaymentRefundMollieConnectFields describes the Mollie Connect available fields for a refund.
+type PaymentRefundMollieConnectFields struct {
+	ReverseRouting   bool               `json:"reverseRouting,omitempty"`
+	RoutingReversals []*RoutingReversal `json:"routingReversals,omitempty"`
+}
+
+// RoutingReversal describes the payload to be sent to the reverse routing endpoint.
+type RoutingReversal struct {
+	Amount *Amount `json:"amount,omitempty"`
+	Source string  `json:"source,omitempty"`
+}
+
+// RoutingSource describes the source of the routing.
+type RoutingSource struct {
+	Type           string `json:"type,omitempty"`
+	OrganizationID string `json:"organizationId,omitempty"`
+}
+
 // Refund describe a refund for a certain payment.
 type Refund struct {
 	Resource         string       `json:"resource,omitempty"`
 	ID               string       `json:"id,omitempty"`
-	Amount           *Amount      `json:"amount,omitempty"`
 	SettlementID     string       `json:"settlementId,omitempty"`
-	SettlementAmount *Amount      `json:"settlementAmount,omitempty"`
 	Description      string       `json:"description,omitempty"`
-	Metadata         interface{}  `json:"metadata,omitempty"`
-	Status           RefundStatus `json:"status,omitempty"`
-	Lines            []*OrderLine `json:"lines,omitempty"`
 	PaymentID        string       `json:"paymentId,omitempty"`
 	OrderID          string       `json:"orderId,omitempty"`
+	Amount           *Amount      `json:"amount,omitempty"`
+	SettlementAmount *Amount      `json:"settlementAmount,omitempty"`
 	CreatedAt        *time.Time   `json:"createdAt,omitempty"`
-	TestMode         bool         `json:"testmode,omitempty"`
+	Lines            []*OrderLine `json:"lines,omitempty"`
+	Metadata         any          `json:"metadata,omitempty"`
+	Status           RefundStatus `json:"status,omitempty"`
 	Links            RefundLinks  `json:"_links,omitempty"`
+	PaymentRefundAccessTokenFields
+	PaymentRefundMollieConnectFields
 }
 
-// RefundList describes how a list of refunds will be retrieved by Mollie.
-type RefundList struct {
+// RefundsList describes how a list of refunds will be retrieved by Mollie.
+type RefundsList struct {
 	Count    int `json:"count,omitempty"`
 	Embedded struct {
 		Refunds []*Refund
@@ -56,30 +104,50 @@ type RefundLinks struct {
 	Documentation *URL `json:"documentation,omitempty"`
 }
 
-// RefundOptions describes refund endpoint valid query string parameters.
-//
-// See: https://docs.mollie.com/reference/v2/refunds-api/get-refund.
-type RefundOptions struct {
-	Embed EmbedValue `url:"embed,omitempty"`
+// PaymentRefundOptions describes payment refund endpoint valid query string parameters.
+type PaymentRefundOptions struct {
+	Embed []EmbedValue `url:"embed,omitempty"`
 }
 
-// ListRefundOptions describes list refund endpoint valid query string parameters.
-//
-// See: https://docs.mollie.com/reference/v2/refunds-api/list-refunds.
-type ListRefundOptions struct {
-	From      string     `url:"from,omitempty"`
-	Limit     int        `url:"limit,omitempty"`
-	ProfileID string     `url:"profileId,omitempty"`
-	Embed     EmbedValue `url:"embed,omitempty"`
+// RefundsListOptions describes payment and order refunds list endpoint valid query string parameters.
+type RefundsListOptions struct {
+	Limit     int          `url:"limit,omitempty"`
+	From      string       `url:"from,omitempty"`
+	ProfileID string       `url:"profileId,omitempty"`
+	Embed     []EmbedValue `url:"embed,omitempty"`
 }
 
 // RefundsService instance operates over refund resources.
 type RefundsService service
 
-// Get retrieve a single refund by its ID.
+// List retrieves all refunds.
+//
+// See https://docs.mollie.com/reference/v2/refunds-api/list-refunds.
+func (rs *RefundsService) List(ctx context.Context, opts *RefundsListOptions) (
+	res *Response,
+	rl *RefundsList,
+	err error,
+) {
+	res, err = rs.client.get(ctx, "v2/refunds", opts)
+	if err != nil {
+		return
+	}
+
+	if err = json.Unmarshal(res.content, &rl); err != nil {
+		return
+	}
+
+	return
+}
+
+// GetPaymentRefund retrieves a specific refund for a specific payment.
 //
-// If you do not know the original payment’s ID, you can use the List payment refunds endpoint.
-func (rs *RefundsService) Get(ctx context.Context, paymentID, refundID string, opts *RefundOptions) (
+// See: https://docs.mollie.com/reference/v2/refunds-api/get-payment-refund
+func (rs *RefundsService) GetPaymentRefund(
+	ctx context.Context,
+	paymentID, refundID string,
+	opts *PaymentRefundOptions,
+) (
 	res *Response,
 	refund *Refund,
 	err error,
@@ -98,10 +166,41 @@ func (rs *RefundsService) Get(ctx context.Context, paymentID, refundID string, o
 	return
 }
 
+// ListPaymentRefunds retrieves all refunds for a specific payment.
+//
+// See: https://docs.mollie.com/reference/v2/refunds-api/list-payment-refunds
+func (rs *RefundsService) ListPaymentRefunds(
+	ctx context.Context,
+	paymentID string,
+	opts *RefundsListOptions,
+) (
+	res *Response,
+	rl *RefundsList,
+	err error,
+) {
+	u := fmt.Sprintf("v2/payments/%s/refunds", paymentID)
+
+	res, err = rs.client.get(ctx, u, opts)
+	if err != nil {
+		return
+	}
+
+	if err = json.Unmarshal(res.content, &rl); err != nil {
+		return
+	}
+
+	return
+}
+
 // Create a refund payment request.
 //
-// See https://docs.mollie.com/reference/v2/refunds-api/create-refund.
-func (rs *RefundsService) Create(ctx context.Context, paymentID string, re Refund, options *RefundOptions) (
+// See https://docs.mollie.com/reference/v2/refunds-api/create-payment-refund
+func (rs *RefundsService) CreatePaymentRefund(
+	ctx context.Context,
+	paymentID string,
+	re CreatePaymentRefund,
+	options *PaymentRefundOptions,
+) (
 	res *Response,
 	rf *Refund,
 	err error,
@@ -109,7 +208,7 @@ func (rs *RefundsService) Create(ctx context.Context, paymentID string, re Refun
 	uri := fmt.Sprintf("v2/payments/%s/refunds", paymentID)
 
 	if rs.client.HasAccessToken() && rs.client.config.testing {
-		re.TestMode = true
+		re.Testmode = true
 	}
 
 	res, err = rs.client.post(ctx, uri, re, options)
@@ -124,54 +223,60 @@ func (rs *RefundsService) Create(ctx context.Context, paymentID string, re Refun
 	return
 }
 
-// Cancel try to cancel the refund request.
-// The refund can only be canceled while the refund’s status is either queued or pending.
-// See https://docs.mollie.com/reference/v2/refunds-api/cancel-refund
-func (rs *RefundsService) Cancel(ctx context.Context, paymentID, refundID string) (res *Response, err error) {
-	u := fmt.Sprintf("v2/payments/%s/refunds/%s", paymentID, refundID)
-
-	res, err = rs.client.delete(ctx, u, nil)
-	if err != nil {
-		return
-	}
-
-	return
+// CancelPaymentRefund cancels a refund for a specific payment.
+//
+// See https://docs.mollie.com/reference/v2/refunds-api/cancel-payment-refund
+func (rs *RefundsService) CancelPaymentRefund(
+	ctx context.Context, paymentID, refundID string,
+) (res *Response, err error) {
+	return rs.client.delete(ctx, fmt.Sprintf("v2/payments/%s/refunds/%s", paymentID, refundID), nil)
 }
 
-// ListRefund calls the top level https://api.mollie.com/v2/refunds.
+// CreateOrderRefund creates a refund for a specific order.
 //
-// See https://docs.mollie.com/reference/v2/refunds-api/list-refunds.
-func (rs *RefundsService) ListRefund(ctx context.Context, opts *ListRefundOptions) (
+// See https://docs.mollie.com/reference/v2/refunds-api/create-order-refund
+func (rs *RefundsService) CreateOrderRefund(
+	ctx context.Context,
+	orderID string,
+	r CreateOrderRefund,
+) (
 	res *Response,
-	rl *RefundList,
+	rf *Refund,
 	err error,
 ) {
-	u := "v2/refunds"
+	uri := fmt.Sprintf("v2/orders/%s/refunds", orderID)
 
-	return rs.list(ctx, u, opts)
-}
+	if rs.client.HasAccessToken() && rs.client.config.testing {
+		r.Testmode = true
+	}
 
-// ListRefundPayment calls the payment-specific
-// https://api.mollie.com/v2/payments/*paymentId*/refunds.
-//
-// Only refunds for that specific payment are returned.
-// See: https://docs.mollie.com/reference/v2/refunds-api/list-refunds
-func (rs *RefundsService) ListRefundPayment(ctx context.Context, paymentID string, opts *ListRefundOptions) (
-	res *Response,
-	rl *RefundList,
-	err error,
-) {
-	u := fmt.Sprintf("v2/payments/%s/refunds", paymentID)
+	res, err = rs.client.post(ctx, uri, r, nil)
+	if err != nil {
+		return
+	}
+
+	if err = json.Unmarshal(res.content, &rf); err != nil {
+		return
+	}
 
-	return rs.list(ctx, u, opts)
+	return
 }
 
-func (rs *RefundsService) list(ctx context.Context, uri string, opts interface{}) (
+// ListOrderRefunds retrieves all refunds for a specific order.
+//
+// See https://docs.mollie.com/reference/v2/refunds-api/list-order-refunds
+func (rs *RefundsService) ListOrderRefunds(
+	ctx context.Context,
+	orderID string,
+	opts *RefundsListOptions,
+) (
 	res *Response,
-	rl *RefundList,
+	rl *RefundsList,
 	err error,
 ) {
-	res, err = rs.client.get(ctx, uri, opts)
+	u := fmt.Sprintf("v2/orders/%s/refunds", orderID)
+
+	res, err = rs.client.get(ctx, u, opts)
 	if err != nil {
 		return
 	}
diff --git a/mollie/settlements.go b/mollie/settlements.go
index 40df0fe..d2efda6 100644
--- a/mollie/settlements.go
+++ b/mollie/settlements.go
@@ -162,7 +162,7 @@ func (ss *SettlementsService) GetPayments(ctx context.Context, id string, slo *S
 // See: https://docs.mollie.com/reference/v2/settlements-api/list-settlement-refunds
 func (ss *SettlementsService) GetRefunds(ctx context.Context, id string, slo *SettlementsListOptions) (
 	res *Response,
-	rl *RefundList,
+	rl *RefundsList,
 	err error,
 ) {
 	res, err = ss.list(ctx, id, "refunds", slo)


Test patch:
diff --git a/mollie/refunds_test.go b/mollie/refunds_test.go
index 504115a..0e96355 100644
--- a/mollie/refunds_test.go
+++ b/mollie/refunds_test.go
@@ -10,16 +10,14 @@ import (
 	"github.com/stretchr/testify/assert"
 )
 
-func TestRefundsService_Get(t *testing.T) {
-	setEnv()
-	defer unsetEnv()
-
+func TestRefundsService_CreatePaymentRefund(t *testing.T) {
 	type args struct {
-		ctx     context.Context
-		payment string
-		refund  string
-		options *RefundOptions
+		ctx       context.Context
+		paymentID string
+		re        CreatePaymentRefund
+		options   *PaymentRefundOptions
 	}
+
 	cases := []struct {
 		name    string
 		args    args
@@ -29,36 +27,168 @@ func TestRefundsService_Get(t *testing.T) {
 		handler http.HandlerFunc
 	}{
 		{
-			"get refund works as expected.",
+			"create payment refund works as expected",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				"re_4qqhO89gsT",
-				&RefundOptions{
-					Embed: "profile",
+				"tr_7UhSN1zuXS",
+				CreatePaymentRefund{
+					Amount: &Amount{
+						Value:    "5.00",
+						Currency: "EUR",
+					},
 				},
+				&PaymentRefundOptions{},
 			},
 			false,
 			nil,
 			noPre,
 			func(w http.ResponseWriter, r *http.Request) {
-				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
-				testMethod(t, r, "GET")
-				testQuery(t, r, "embed=profile")
+				w.WriteHeader(http.StatusCreated)
+				w.Write([]byte(testdata.CreatePaymentRefundResponse))
+			},
+		},
+		{
+			"create payment refund works as expected with access tokens",
+			args{
+				context.Background(),
+				"tr_7UhSN1zuXS",
+				CreatePaymentRefund{
+					Amount: &Amount{
+						Value:    "5.00",
+						Currency: "EUR",
+					},
+				},
+				&PaymentRefundOptions{},
+			},
+			false,
+			nil,
+			setAccessToken,
+			func(w http.ResponseWriter, r *http.Request) {
+				w.WriteHeader(http.StatusCreated)
+				w.Write([]byte(testdata.CreatePaymentRefundResponse))
+			},
+		},
+		{
+			"create payment refund, an error is returned from the server",
+			args{
+				context.Background(),
+				"tr_7UhSN1zuXS",
+				CreatePaymentRefund{},
+				&PaymentRefundOptions{},
+			},
+			true,
+			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
+			noPre,
+			errorHandler,
+		},
+		{
+			"create payment refund, an error occurs when parsing json",
+			args{
+				context.Background(),
+				"tr_7UhSN1zuXS",
+				CreatePaymentRefund{},
+				&PaymentRefundOptions{},
+			},
+			true,
+			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
+			noPre,
+			encodingHandler,
+		},
+		{
+			"get settlement refunds, invalid url when building request",
+			args{
+				context.Background(),
+				"tr_7UhSN1zuXS",
+				CreatePaymentRefund{},
+				&PaymentRefundOptions{},
+			},
+			true,
+			errBadBaseURL,
+			crashSrv,
+			errorHandler,
+		},
+	}
 
-				if _, ok := r.Header[AuthHeader]; !ok {
-					w.WriteHeader(http.StatusUnauthorized)
-				}
-				_, _ = w.Write([]byte(testdata.GetRefundResponse))
+	for _, c := range cases {
+		setup()
+		defer teardown()
+		t.Run(c.name, func(t *testing.T) {
+			c.pre()
+			tMux.HandleFunc(fmt.Sprintf("/v2/payments/%s/refunds", c.args.paymentID), c.handler)
+
+			res, ref, err := tClient.Refunds.CreatePaymentRefund(
+				c.args.ctx,
+				c.args.paymentID,
+				c.args.re,
+				c.args.options,
+			)
+			if c.wantErr {
+				assert.NotNil(t, err)
+				assert.EqualError(t, err, c.err.Error())
+			} else {
+				assert.Nil(t, err)
+				assert.IsType(t, &Refund{}, ref)
+				assert.IsType(t, &http.Response{}, res.Response)
+			}
+		})
+	}
+}
+
+func TestRefundsService_GetPaymentRefund(t *testing.T) {
+	type args struct {
+		ctx       context.Context
+		paymentID string
+		refundID  string
+		opts      *PaymentRefundOptions
+	}
+
+	cases := []struct {
+		name    string
+		args    args
+		wantErr bool
+		err     error
+		pre     func()
+		handler http.HandlerFunc
+	}{
+		{
+			"get payment refund works as expected",
+			args{
+				context.Background(),
+				"tr_7UhSN1zuXS",
+				"re_4qqhO89gsT",
+				&PaymentRefundOptions{},
+			},
+			false,
+			nil,
+			noPre,
+			func(w http.ResponseWriter, r *http.Request) {
+				w.WriteHeader(http.StatusOK)
+				w.Write([]byte(testdata.GetPaymentRefundResponse))
+			},
+		},
+		{
+			"get payment refund works as expected with access tokens",
+			args{
+				context.Background(),
+				"tr_7UhSN1zuXS",
+				"re_4qqhO89gsT",
+				&PaymentRefundOptions{},
+			},
+			false,
+			nil,
+			setAccessToken,
+			func(w http.ResponseWriter, r *http.Request) {
+				w.WriteHeader(http.StatusOK)
+				w.Write([]byte(testdata.GetPaymentRefundResponse))
 			},
 		},
 		{
-			"get refund, an error is returned from the server",
+			"get payment refund, an error is returned from the server",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
+				"tr_7UhSN1zuXS",
 				"re_4qqhO89gsT",
-				nil,
+				&PaymentRefundOptions{},
 			},
 			true,
 			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
@@ -66,12 +196,12 @@ func TestRefundsService_Get(t *testing.T) {
 			errorHandler,
 		},
 		{
-			"get refund, an error occurs when parsing json",
+			"get payment refund, an error occurs when parsing json",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
+				"tr_7UhSN1zuXS",
 				"re_4qqhO89gsT",
-				nil,
+				&PaymentRefundOptions{},
 			},
 			true,
 			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
@@ -79,12 +209,12 @@ func TestRefundsService_Get(t *testing.T) {
 			encodingHandler,
 		},
 		{
-			"get refund, invalid url when building request",
+			"get payment refund, invalid url when building request",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
+				"tr_7UhSN1zuXS",
 				"re_4qqhO89gsT",
-				nil,
+				&PaymentRefundOptions{},
 			},
 			true,
 			errBadBaseURL,
@@ -96,34 +226,38 @@ func TestRefundsService_Get(t *testing.T) {
 	for _, c := range cases {
 		setup()
 		defer teardown()
-
 		t.Run(c.name, func(t *testing.T) {
 			c.pre()
-			tMux.HandleFunc(fmt.Sprintf("/v2/payments/%s/refunds/%s", c.args.payment, c.args.refund), c.handler)
-
-			res, m, err := tClient.Refunds.Get(c.args.ctx, c.args.payment, c.args.refund, c.args.options)
+			tMux.HandleFunc(
+				fmt.Sprintf("/v2/payments/%s/refunds/%s", c.args.paymentID, c.args.refundID),
+				c.handler,
+			)
+
+			res, ref, err := tClient.Refunds.GetPaymentRefund(
+				c.args.ctx,
+				c.args.paymentID,
+				c.args.refundID,
+				c.args.opts,
+			)
 			if c.wantErr {
 				assert.NotNil(t, err)
 				assert.EqualError(t, err, c.err.Error())
 			} else {
 				assert.Nil(t, err)
-				assert.IsType(t, &Refund{}, m)
+				assert.IsType(t, &Refund{}, ref)
 				assert.IsType(t, &http.Response{}, res.Response)
 			}
 		})
 	}
 }
 
-func TestRefundsService_Create(t *testing.T) {
-	setEnv()
-	defer unsetEnv()
-
+func TestRefundsService_ListPaymentRefunds(t *testing.T) {
 	type args struct {
-		ctx     context.Context
-		payment string
-		refund  Refund
-		options *RefundOptions
+		ctx       context.Context
+		paymentID string
+		opts      *RefundsListOptions
 	}
+
 	cases := []struct {
 		name    string
 		args    args
@@ -133,73 +267,41 @@ func TestRefundsService_Create(t *testing.T) {
 		handler http.HandlerFunc
 	}{
 		{
-			"create refund works as expected.",
+			"list payment refunds works as expected",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				Refund{
-					Amount: &Amount{
-						Currency: "USD",
-						Value:    "100.00",
-					},
-				},
-				&RefundOptions{
-					Embed: "profile",
-				},
+				"tr_7UhSN1zuXS",
+				&RefundsListOptions{},
 			},
 			false,
 			nil,
 			noPre,
 			func(w http.ResponseWriter, r *http.Request) {
-				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
-				testMethod(t, r, "POST")
-				testQuery(t, r, "embed=profile")
-
-				if _, ok := r.Header[AuthHeader]; !ok {
-					w.WriteHeader(http.StatusUnauthorized)
-				}
-				_, _ = w.Write([]byte(testdata.GetRefundResponse))
+				w.WriteHeader(http.StatusOK)
+				w.Write([]byte(testdata.ListPaymentRefundsResponse))
 			},
 		},
 		{
-			"create refund with access token works as expected.",
+			"list payment refunds works as expected with access tokens",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				Refund{
-					Amount: &Amount{
-						Currency: "USD",
-						Value:    "100.00",
-					},
-				},
-				nil,
+				"tr_7UhSN1zuXS",
+				&RefundsListOptions{},
 			},
 			false,
 			nil,
 			setAccessToken,
 			func(w http.ResponseWriter, r *http.Request) {
-				testHeader(t, r, AuthHeader, "Bearer access_token_test")
-				testMethod(t, r, "POST")
-				testQuery(t, r, "testmode=true")
-
-				if _, ok := r.Header[AuthHeader]; !ok {
-					w.WriteHeader(http.StatusUnauthorized)
-				}
-				_, _ = w.Write([]byte(testdata.GetRefundResponse))
+				w.WriteHeader(http.StatusOK)
+				w.Write([]byte(testdata.ListPaymentRefundsResponse))
 			},
 		},
 		{
-			"create refund, an error is returned from the server",
+			"list payment refunds, an error is returned from the server",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				Refund{
-					Amount: &Amount{
-						Currency: "USD",
-						Value:    "100.00",
-					},
-				},
-				nil,
+				"tr_7UhSN1zuXS",
+				&RefundsListOptions{},
 			},
 			true,
 			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
@@ -207,17 +309,11 @@ func TestRefundsService_Create(t *testing.T) {
 			errorHandler,
 		},
 		{
-			"create refund, an error occurs when parsing json",
+			"list payment refunds, an error occurs when parsing json",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				Refund{
-					Amount: &Amount{
-						Currency: "USD",
-						Value:    "100.00",
-					},
-				},
-				nil,
+				"tr_7UhSN1zuXS",
+				&RefundsListOptions{},
 			},
 			true,
 			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
@@ -225,17 +321,11 @@ func TestRefundsService_Create(t *testing.T) {
 			encodingHandler,
 		},
 		{
-			"create refund, invalid url when building request",
+			"list payment refunds, invalid url when building request",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				Refund{
-					Amount: &Amount{
-						Currency: "USD",
-						Value:    "100.00",
-					},
-				},
-				nil,
+				"tr_7UhSN1zuXS",
+				&RefundsListOptions{},
 			},
 			true,
 			errBadBaseURL,
@@ -247,33 +337,34 @@ func TestRefundsService_Create(t *testing.T) {
 	for _, c := range cases {
 		setup()
 		defer teardown()
-
 		t.Run(c.name, func(t *testing.T) {
 			c.pre()
-			tMux.HandleFunc(fmt.Sprintf("/v2/payments/%s/refunds", c.args.payment), c.handler)
+			tMux.HandleFunc(fmt.Sprintf("/v2/payments/%s/refunds", c.args.paymentID), c.handler)
 
-			res, m, err := tClient.Refunds.Create(c.args.ctx, c.args.payment, c.args.refund, c.args.options)
+			res, rl, err := tClient.Refunds.ListPaymentRefunds(
+				c.args.ctx,
+				c.args.paymentID,
+				c.args.opts,
+			)
 			if c.wantErr {
 				assert.NotNil(t, err)
 				assert.EqualError(t, err, c.err.Error())
 			} else {
 				assert.Nil(t, err)
-				assert.IsType(t, &Refund{}, m)
+				assert.IsType(t, &RefundsList{}, rl)
 				assert.IsType(t, &http.Response{}, res.Response)
 			}
 		})
 	}
 }
 
-func TestRefundsService_Cancel(t *testing.T) {
-	setEnv()
-	defer unsetEnv()
-
+func TestRefundsService_CancelPaymentRefund(t *testing.T) {
 	type args struct {
-		ctx     context.Context
-		payment string
-		refund  string
+		ctx       context.Context
+		paymentID string
+		refundID  string
 	}
+
 	cases := []struct {
 		name    string
 		args    args
@@ -283,30 +374,38 @@ func TestRefundsService_Cancel(t *testing.T) {
 		handler http.HandlerFunc
 	}{
 		{
-			"get settlement works as expected.",
+			"cancel payment refund works as expected",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
+				"tr_7UhSN1zuXS",
 				"re_4qqhO89gsT",
 			},
 			false,
 			nil,
 			noPre,
 			func(w http.ResponseWriter, r *http.Request) {
-				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
-				testMethod(t, r, "DELETE")
-
-				if _, ok := r.Header[AuthHeader]; !ok {
-					w.WriteHeader(http.StatusUnauthorized)
-				}
-				w.WriteHeader(http.StatusOK)
+				w.WriteHeader(http.StatusNoContent)
+			},
+		},
+		{
+			"cancel payment refund works as expected with access tokens",
+			args{
+				context.Background(),
+				"tr_7UhSN1zuXS",
+				"re_4qqhO89gsT",
+			},
+			false,
+			nil,
+			setAccessToken,
+			func(w http.ResponseWriter, r *http.Request) {
+				w.WriteHeader(http.StatusNoContent)
 			},
 		},
 		{
-			"get settlement, an error is returned from the server",
+			"cancel payment refund, an error is returned from the server",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
+				"tr_7UhSN1zuXS",
 				"re_4qqhO89gsT",
 			},
 			true,
@@ -315,10 +414,10 @@ func TestRefundsService_Cancel(t *testing.T) {
 			errorHandler,
 		},
 		{
-			"get settlement, invalid url when building request",
+			"cancel payment refund, invalid url when building request",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
+				"tr_7UhSN1zuXS",
 				"re_4qqhO89gsT",
 			},
 			true,
@@ -331,12 +430,18 @@ func TestRefundsService_Cancel(t *testing.T) {
 	for _, c := range cases {
 		setup()
 		defer teardown()
-
 		t.Run(c.name, func(t *testing.T) {
 			c.pre()
-			tMux.HandleFunc(fmt.Sprintf("/v2/payments/%s/refunds/%s", c.args.payment, c.args.refund), c.handler)
-
-			res, err := tClient.Refunds.Cancel(c.args.ctx, c.args.payment, c.args.refund)
+			tMux.HandleFunc(
+				fmt.Sprintf("/v2/payments/%s/refunds/%s", c.args.paymentID, c.args.refundID),
+				c.handler,
+			)
+
+			res, err := tClient.Refunds.CancelPaymentRefund(
+				c.args.ctx,
+				c.args.paymentID,
+				c.args.refundID,
+			)
 			if c.wantErr {
 				assert.NotNil(t, err)
 				assert.EqualError(t, err, c.err.Error())
@@ -348,15 +453,13 @@ func TestRefundsService_Cancel(t *testing.T) {
 	}
 }
 
-func TestRefundsService_List(t *testing.T) {
-	setEnv()
-	defer unsetEnv()
-
+func TestRefundsService_CreateOrderRefund(t *testing.T) {
 	type args struct {
 		ctx     context.Context
-		payment string
-		options *ListRefundOptions
+		orderID string
+		r       CreateOrderRefund
 	}
+
 	cases := []struct {
 		name    string
 		args    args
@@ -366,34 +469,57 @@ func TestRefundsService_List(t *testing.T) {
 		handler http.HandlerFunc
 	}{
 		{
-			"list refund works as expected.",
+			"create order refund works as expected",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				&ListRefundOptions{
-					Limit: 10,
+				"ord_8wmqcHMN4U",
+				CreateOrderRefund{
+					Lines: []*OrderRefundLine{
+						{
+							ID:       "odl_dgtxyl",
+							Quantity: 1,
+							Amount:   &Amount{Value: "5.00", Currency: "EUR"},
+						},
+					},
 				},
 			},
 			false,
 			nil,
 			noPre,
 			func(w http.ResponseWriter, r *http.Request) {
-				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
-				testMethod(t, r, "GET")
-				testQuery(t, r, "limit=10")
-
-				if _, ok := r.Header[AuthHeader]; !ok {
-					w.WriteHeader(http.StatusUnauthorized)
-				}
-				_, _ = w.Write([]byte(testdata.GetRefundListResponse))
+				w.WriteHeader(http.StatusCreated)
+				w.Write([]byte(testdata.CreateOrderRefundResponse))
 			},
 		},
 		{
-			"list refund, an error is returned from the server",
+			"create order refund works as expected with access tokens",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				nil,
+				"ord_8wmqcHMN4U",
+				CreateOrderRefund{
+					Lines: []*OrderRefundLine{
+						{
+							ID:       "odl_dgtxyl",
+							Quantity: 1,
+							Amount:   &Amount{Value: "5.00", Currency: "EUR"},
+						},
+					},
+				},
+			},
+			false,
+			nil,
+			setAccessToken,
+			func(w http.ResponseWriter, r *http.Request) {
+				w.WriteHeader(http.StatusCreated)
+				w.Write([]byte(testdata.CreateOrderRefundResponse))
+			},
+		},
+		{
+			"create order refund, an error is returned from the server",
+			args{
+				context.Background(),
+				"ord_8wmqcHMN4U",
+				CreateOrderRefund{},
 			},
 			true,
 			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
@@ -401,11 +527,11 @@ func TestRefundsService_List(t *testing.T) {
 			errorHandler,
 		},
 		{
-			"list refund, an error occurs when parsing json",
+			"create order refund, an error occurs when parsing json",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				nil,
+				"ord_8wmqcHMN4U",
+				CreateOrderRefund{},
 			},
 			true,
 			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
@@ -413,11 +539,11 @@ func TestRefundsService_List(t *testing.T) {
 			encodingHandler,
 		},
 		{
-			"list refund, invalid url when building request",
+			"create order refund, invalid url when building request",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				nil,
+				"ord_8wmqcHMN4U",
+				CreateOrderRefund{},
 			},
 			true,
 			errBadBaseURL,
@@ -429,34 +555,34 @@ func TestRefundsService_List(t *testing.T) {
 	for _, c := range cases {
 		setup()
 		defer teardown()
-
 		t.Run(c.name, func(t *testing.T) {
 			c.pre()
-			tMux.HandleFunc("/v2/refunds", c.handler)
+			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s/refunds", c.args.orderID), c.handler)
 
-			res, m, err := tClient.Refunds.ListRefund(c.args.ctx, c.args.options)
+			res, ref, err := tClient.Refunds.CreateOrderRefund(
+				c.args.ctx,
+				c.args.orderID,
+				c.args.r,
+			)
 			if c.wantErr {
 				assert.NotNil(t, err)
 				assert.EqualError(t, err, c.err.Error())
 			} else {
 				assert.Nil(t, err)
-				assert.IsType(t, &RefundList{}, m)
+				assert.IsType(t, &Refund{}, ref)
 				assert.IsType(t, &http.Response{}, res.Response)
 			}
 		})
 	}
 }
 
-func TestRefundsService_ListPaynents(t *testing.T) {
-	setEnv()
-	defer unsetEnv()
-
+func TestRefundsService_ListOrderRefunds(t *testing.T) {
 	type args struct {
 		ctx     context.Context
-		payment string
-		refund  string
-		options *ListRefundOptions
+		orderID string
+		opts    *RefundsListOptions
 	}
+
 	cases := []struct {
 		name    string
 		args    args
@@ -466,36 +592,41 @@ func TestRefundsService_ListPaynents(t *testing.T) {
 		handler http.HandlerFunc
 	}{
 		{
-			"get refund works as expected.",
+			"list order refunds works as expected",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				"re_4qqhO89gsT",
-				&ListRefundOptions{
-					Limit: 10,
-				},
+				"ord_8wmqcHMN4U",
+				&RefundsListOptions{},
 			},
 			false,
 			nil,
 			noPre,
 			func(w http.ResponseWriter, r *http.Request) {
-				testHeader(t, r, AuthHeader, "Bearer token_X12b31ggg23")
-				testMethod(t, r, "GET")
-				testQuery(t, r, "limit=10")
-
-				if _, ok := r.Header[AuthHeader]; !ok {
-					w.WriteHeader(http.StatusUnauthorized)
-				}
-				_, _ = w.Write([]byte(testdata.GetRefundListResponse))
+				w.WriteHeader(http.StatusOK)
+				w.Write([]byte(testdata.ListOrderRefundsResponse))
 			},
 		},
 		{
-			"get refund, an error is returned from the server",
+			"list order refunds works as expected with access tokens",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				"re_4qqhO89gsT",
-				nil,
+				"ord_8wmqcHMN4U",
+				&RefundsListOptions{},
+			},
+			false,
+			nil,
+			setAccessToken,
+			func(w http.ResponseWriter, r *http.Request) {
+				w.WriteHeader(http.StatusOK)
+				w.Write([]byte(testdata.ListOrderRefundsResponse))
+			},
+		},
+		{
+			"list order refunds, an error is returned from the server",
+			args{
+				context.Background(),
+				"ord_8wmqcHMN4U",
+				&RefundsListOptions{},
 			},
 			true,
 			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
@@ -503,12 +634,11 @@ func TestRefundsService_ListPaynents(t *testing.T) {
 			errorHandler,
 		},
 		{
-			"get refund, an error occurs when parsing json",
+			"list order refunds, an error occurs when parsing json",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				"re_4qqhO89gsT",
-				nil,
+				"ord_8wmqcHMN4U",
+				&RefundsListOptions{},
 			},
 			true,
 			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
@@ -516,12 +646,11 @@ func TestRefundsService_ListPaynents(t *testing.T) {
 			encodingHandler,
 		},
 		{
-			"get refund, invalid url when building request",
+			"list order refunds, invalid url when building request",
 			args{
 				context.Background(),
-				"tr_WDqYK6vllg",
-				"re_4qqhO89gsT",
-				nil,
+				"ord_8wmqcHMN4U",
+				&RefundsListOptions{},
 			},
 			true,
 			errBadBaseURL,
@@ -533,18 +662,121 @@ func TestRefundsService_ListPaynents(t *testing.T) {
 	for _, c := range cases {
 		setup()
 		defer teardown()
-
 		t.Run(c.name, func(t *testing.T) {
 			c.pre()
-			tMux.HandleFunc(fmt.Sprintf("/v2/payments/%s/refunds", c.args.payment), c.handler)
+			tMux.HandleFunc(fmt.Sprintf("/v2/orders/%s/refunds", c.args.orderID), c.handler)
 
-			res, m, err := tClient.Refunds.ListRefundPayment(c.args.ctx, c.args.payment, c.args.options)
+			res, rl, err := tClient.Refunds.ListOrderRefunds(
+				c.args.ctx,
+				c.args.orderID,
+				c.args.opts,
+			)
 			if c.wantErr {
 				assert.NotNil(t, err)
 				assert.EqualError(t, err, c.err.Error())
 			} else {
 				assert.Nil(t, err)
-				assert.IsType(t, &RefundList{}, m)
+				assert.IsType(t, &RefundsList{}, rl)
+				assert.IsType(t, &http.Response{}, res.Response)
+			}
+		})
+	}
+}
+
+func TestRefundsService_List(t *testing.T) {
+	type args struct {
+		ctx  context.Context
+		opts *RefundsListOptions
+	}
+
+	cases := []struct {
+		name    string
+		args    args
+		wantErr bool
+		err     error
+		pre     func()
+		handler http.HandlerFunc
+	}{
+		{
+			"list refunds works as expected",
+			args{
+				context.Background(),
+				&RefundsListOptions{},
+			},
+			false,
+			nil,
+			noPre,
+			func(w http.ResponseWriter, r *http.Request) {
+				w.WriteHeader(http.StatusOK)
+				w.Write([]byte(testdata.ListRefundsResponse))
+			},
+		},
+		{
+			"list refunds works as expected with access tokens",
+			args{
+				context.Background(),
+				&RefundsListOptions{},
+			},
+			false,
+			nil,
+			setAccessToken,
+			func(w http.ResponseWriter, r *http.Request) {
+				w.WriteHeader(http.StatusOK)
+				w.Write([]byte(testdata.ListRefundsResponse))
+			},
+		},
+		{
+			"list refunds, an error is returned from the server",
+			args{
+				context.Background(),
+				&RefundsListOptions{},
+			},
+			true,
+			fmt.Errorf("500 Internal Server Error: An internal server error occurred while processing your request."),
+			noPre,
+			errorHandler,
+		},
+		{
+			"list refunds, an error occurs when parsing json",
+			args{
+				context.Background(),
+				&RefundsListOptions{},
+			},
+			true,
+			fmt.Errorf("invalid character 'h' looking for beginning of object key string"),
+			noPre,
+			encodingHandler,
+		},
+		{
+			"list refunds, invalid url when building request",
+			args{
+				context.Background(),
+				&RefundsListOptions{},
+			},
+			true,
+			errBadBaseURL,
+			crashSrv,
+			errorHandler,
+		},
+	}
+
+	for _, c := range cases {
+		setup()
+		defer teardown()
+		t.Run(c.name, func(t *testing.T) {
+			c.pre()
+			tMux.HandleFunc("/v2/refunds", c.handler)
+
+			res, rl, err := tClient.Refunds.List(
+				c.args.ctx,
+				c.args.opts,
+			)
+			if c.wantErr {
+				assert.NotNil(t, err)
+				assert.EqualError(t, err, c.err.Error(), "error message does not match")
+			} else {
+				assert.Nil(t, err)
+				assert.IsType(t, &RefundsList{}, rl)
 				assert.IsType(t, &http.Response{}, res.Response)
 			}
 		})
diff --git a/mollie/settlements_test.go b/mollie/settlements_test.go
index 8166cd3..21dbb43 100644
--- a/mollie/settlements_test.go
+++ b/mollie/settlements_test.go
@@ -735,7 +735,7 @@ func TestSettlementsService_GetRefunds(t *testing.T) {
 				if _, ok := r.Header[AuthHeader]; !ok {
 					w.WriteHeader(http.StatusUnauthorized)
 				}
-				_, _ = w.Write([]byte(testdata.GetRefundListResponse))
+				_, _ = w.Write([]byte(testdata.ListRefundsResponse))
 			},
 		},
 		{
@@ -796,7 +796,7 @@ func TestSettlementsService_GetRefunds(t *testing.T) {
 				assert.EqualError(t, err, c.err.Error())
 			} else {
 				assert.Nil(t, err)
-				assert.IsType(t, &RefundList{}, m)
+				assert.IsType(t, &RefundsList{}, m)
 				assert.IsType(t, &http.Response{}, res.Response)
 			}
 		})
diff --git a/testdata/refunds.go b/testdata/refunds.go
index c89ae20..4ba7235 100644
--- a/testdata/refunds.go
+++ b/testdata/refunds.go
@@ -1,7 +1,7 @@
 package testdata
 
-// GetRefundResponse example
-const GetRefundResponse = `{
+// CreatePaymentRefundResponse example.
+const CreatePaymentRefundResponse = `{
     "resource": "refund",
     "id": "re_4qqhO89gsT",
     "amount": {
@@ -25,15 +25,46 @@ const GetRefundResponse = `{
             "type": "application/hal+json"
         },
         "documentation": {
-            "href": "https://docs.mollie.com/reference/v2/refunds-api/get-refund",
+            "href": "https://docs.mollie.com/reference/v2/refunds-api/create-payment-refund",
             "type": "text/html"
         }
     }
 }`
 
-// GetRefundListResponse example
-const GetRefundListResponse = `{
-    "count": 5,
+// GetPaymentRefundResponse example.
+const GetPaymentRefundResponse = `{
+    "resource": "refund",
+    "id": "re_4qqhO89gsT",
+    "amount": {
+        "currency": "EUR",
+        "value": "5.95"
+    },
+    "status": "pending",
+    "createdAt": "2018-03-14T17:09:02.0Z",
+    "description": "Order #33",
+    "metadata": {
+         "bookkeeping_id": 12345
+    },
+    "paymentId": "tr_WDqYK6vllg",
+    "_links": {
+        "self": {
+            "href": "https://api.mollie.com/v2/payments/tr_WDqYK6vllg/refunds/re_4qqhO89gsT",
+            "type": "application/hal+json"
+        },
+        "payment": {
+            "href": "https://api.mollie.com/v2/payments/tr_WDqYK6vllg",
+            "type": "application/hal+json"
+        },
+        "documentation": {
+            "href": "https://docs.mollie.com/reference/v2/refunds-api/get-payment-refund",
+            "type": "text/html"
+        }
+    }
+}`
+
+// ListPaymentRefundsResponse example.
+const ListPaymentRefundsResponse = `{
+    "count": 1,
     "_embedded": {
         "refunds": [
             {
@@ -60,13 +91,111 @@ const GetRefundListResponse = `{
                         "type": "application/hal+json"
                     },
                     "documentation": {
-                        "href": "https://docs.mollie.com/reference/v2/refunds-api/get-refund",
+                        "href": "https://docs.mollie.com/reference/v2/refunds-api/get-payment-refund",
+                        "type": "text/html"
+                    }
+                }
+            }
+        ]
+    },
+    "_links": {
+        "self": {
+            "href": "https://api.mollie.com/v2/payments/tr_7UhSN1zuXS/refunds?limit=5",
+            "type": "application/hal+json"
+        },
+        "previous": null,
+        "next": {
+            "href": "https://api.mollie.com/v2/payments/tr_7UhSN1zuXS/refunds?from=re_APBiGPH2vV&limit=5",
+            "type": "application/hal+json"
+        },
+        "documentation": {
+            "href": "https://docs.mollie.com/reference/v2/refunds-api/list-payment-refunds",
+            "type": "text/html"
+        }
+    }
+}`
+
+// ListOrderRefundsResponse example.
+const ListOrderRefundsResponse = `
+{
+    "count": 1,
+    "_embedded": {
+        "refunds": [
+            {
+                "resource": "refund",
+                "id": "re_4qqhO89gsT",
+                "amount": {
+                    "currency": "EUR",
+                    "value": "698.00"
+                },
+                "status": "processing",
+                "createdAt": "2018-03-14T17:09:02.0Z",
+                "description": "Required quantity not in stock, refunding one photo book.",
+                "metadata": {
+                     "bookkeeping_id": 12345
+                },
+                "paymentId": "tr_WDqYK6vllg",
+                "orderId": "ord_stTC2WHAuS",
+                "lines": [
+                    {
+                        "resource": "orderline",
+                        "id": "odl_dgtxyl",
+                        "orderId": "ord_stTC2WHAuS",
+                        "name": "LEGO 42083 Bugatti Chiron",
+                        "sku": "5702016116977",
+                        "type": "physical",
+                        "status": "paid",
+                        "metadata": null,
+                        "quantity": 1,
+                        "unitPrice": {
+                            "value": "399.00",
+                            "currency": "EUR"
+                        },
+                        "vatRate": "21.00",
+                        "vatAmount": {
+                            "value": "51.89",
+                            "currency": "EUR"
+                        },
+                        "discountAmount": {
+                            "value": "100.00",
+                            "currency": "EUR"
+                        },
+                        "totalAmount": {
+                            "value": "299.00",
+                            "currency": "EUR"
+                        },
+                        "createdAt": "2018-08-02T09:29:56+00:00",
+                        "_links": {
+                            "productUrl": {
+                                "href": "https://shop.lego.com/nl-NL/Bugatti-Chiron-42083",
+                                "type": "text/html"
+                            },
+                            "imageUrl": {
+                                "href": "https://sh-s7-live-s.legocdn.com/is/image//LEGO/42083_alt1?$main$",
+                                "type": "text/html"
+                            }
+                        }
+                    }
+                ],
+                "_links": {
+                    "self": {
+                        "href": "https://api.mollie.com/v2/payments/tr_WDqYK6vllg/refunds/re_4qqhO89gsT",
+                        "type": "application/hal+json"
+                    },
+                    "payment": {
+                        "href": "https://api.mollie.com/v2/payments/tr_WDqYK6vllg",
+                        "type": "application/hal+json"
+                    },
+                    "order": {
+                        "href": "https://api.mollie.com/v2/orders/ord_stTC2WHAuS",
+                        "type": "application/hal+json"
+                    },
+                    "documentation": {
+                        "href": "https://docs.mollie.com/reference/v2/refunds-api/get-order-refund",
                         "type": "text/html"
                     }
                 }
-            },
-            { },
-            { }
+            }
         ]
     },
     "_links": {
@@ -79,6 +208,59 @@ const GetRefundListResponse = `{
             "href": "https://api.mollie.com/v2/payments/tr_7UhSN1zuXS/refunds?from=re_APBiGPH2vV&limit=5",
             "type": "application/hal+json"
         },
+        "documentation": {
+            "href": "https://docs.mollie.com/reference/v2/refunds-api/list-order-refunds",
+            "type": "text/html"
+        }
+    }
+}`
+
+// ListRefundsResponse example.
+const ListRefundsResponse = `{
+    "count": 1,
+    "_embedded": {
+        "refunds": [
+            {
+                "resource": "refund",
+                "id": "re_4qqhO89gsT",
+                "amount": {
+                    "currency": "EUR",
+                    "value": "5.95"
+                },
+                "status": "pending",
+                "createdAt": "2018-03-14T17:09:02.0Z",
+                "description": "Order",
+                "metadata": {
+                     "bookkeeping_id": 12345
+                },
+                "paymentId": "tr_WDqYK6vllg",
+                "_links": {
+                    "self": {
+                        "href": "https://api.mollie.com/v2/payments/tr_WDqYK6vllg/refunds/re_4qqhO89gsT",
+                        "type": "application/hal+json"
+                    },
+                    "payment": {
+                        "href": "https://api.mollie.com/v2/payments/tr_WDqYK6vllg",
+                        "type": "application/hal+json"
+                    },
+                    "documentation": {
+                        "href": "https://docs.mollie.com/reference/v2/refunds-api/get-payment-refund",
+                        "type": "text/html"
+                    }
+                }
+            }
+        ]
+    },
+    "_links": {
+        "self": {
+            "href": "https://api.mollie.com/v2/refunds?limit=5",
+            "type": "application/hal+json"
+        },
+        "previous": null,
+        "next": {
+            "href": "https://api.mollie.com/v2/refunds?from=re_APBiGPH2vV&limit=5",
+            "type": "application/hal+json"
+        },
         "documentation": {
             "href": "https://docs.mollie.com/reference/v2/refunds-api/list-refunds",
             "type": "text/html"