Sandbox scenarios refunds

This guide explains how to simulate refund behavior using the sandbox Merchant Service API. All examples use fixed test IDs and return predefined responses. No real money is moved.

Retrieve refundable details

Use this step to verify that the sandbox transaction supports refunds and to see the maximum refundable amount and expiry time.

Trigger: transaction ID 22b36073-57a3-4c3d-9585-87f2e55275a5

Request

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refundable-details>

Response

{  
    "transaction_id": "22b36073-57a3-4c3d-9585-87f2e55275a5",  
    "refundable_money": {  
        "amount": 230,  
        "currency": "EUR"  
    },  
    "expiry_datetime": "2020-06-01T13:00:00+02:00"  
}

Create en retrieve refund details

Refunds in the sandbox are processed asynchronously. First, you send a Create Refund (POST) request; this only confirms that the refund request was accepted and returns the refund with status PENDING. You must then retrieve the refund details using the refund_id to determine the final status, which will be PENDING, SUCCEEDED, or FAILED depending on the sandbox scenario.

Successful iDEAL refund transaction

1. Request - Create Refund

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds>

{
  "money": {
    "currency": "EUR",
    "amount": 30
  }
}

2. Response - Create Refund

{
    "refund_id": "ecabb344-1f2c-4ca5-970a-3ec2649c817f",
    "refund_transaction_id": "c2ede5c0-a03f-4f00-a5f5-05aaa6d397af",
    "transaction_id": "22b36073-57a3-4c3d-9585-87f2e55275a5",
    "created_at": "2020-01-01T13:00:00+01:00",
    "updated_at": "2020-01-01T14:00:00+01:00",
    "refund_money": {
        "amount": 30,
        "currency": "EUR"
    },
    "vat_category": "HIGH",
    "payment_brand": "IDEAL",
    "status": "PENDING",
    "description": "Customer request for refund"
}

3. Request - Refund transaction information

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds/ecabb344-1f2c-4ca5-970a-3ec2649c817f>

4. Response - Refund transaction information

{  
    "refund_id": "ecabb344-1f2c-4ca5-970a-3ec2649c817f",  
    "refund_transaction_id": "c2ede5c0-a03f-4f00-a5f5-05aaa6d397af",  
    "transaction_id": "22b36073-57a3-4c3d-9585-87f2e55275a5",  
    "created_at": "2020-01-01T13:00:00+01:00",  
    "updated_at": "2020-01-01T14:00:00+01:00",  
    "refund_money": {  
        "amount": 30,  
        "currency": "EUR"  
    },  
    "vat_category": "HIGH",  
    "payment_brand": "IDEAL",  
    "status": "SUCCEEDED",  
    "description": "Customer request for refund"  
}

Pending iDEAL refund transaction

User attempts an iDeal refund and it is still pending.

1. Request - Create Refund

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds>

{
  "money": {
    "currency": "EUR",
    "amount": 230
  }
}

2. Response - Create Refund

{
    "refund_id": "cc094aeb-89f7-4123-b60b-ccf83a16320d",
    "transaction_id": "22b36073-57a3-4c3d-9585-87f2e55275a5",
    "created_at": "2020-01-01T13:00:00+01:00",
    "refund_money": {
        "amount": 230,
        "currency": "EUR"
    },
    "vat_category": "HIGH",
    "payment_brand": "IDEAL",
    "status": "PENDING",
    "description": "Customer request for refund"
}

3. Request - Refund transaction information

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds/cc094aeb-89f7-4123-b60b-ccf83a16320d>

4. Response - Refund transaction information

{  
    "refund_id": "cc094aeb-89f7-4123-b60b-ccf83a16320d",  
    "transaction_id": "22b36073-57a3-4c3d-9585-87f2e55275a5",  
    "created_at": "2020-01-01T13:00:00+01:00",  
    "refund_money": {  
        "amount": 230,  
        "currency": "EUR"  
    },  
    "vat_category": "HIGH",  
    "payment_brand": "IDEAL",  
    "status": "PENDING",  
    "description": "Customer request for refund"  
}

Failed iDEAL refund transaction

User attempts an iDeal refund but it fails.

1. Request - Create Refund

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds>

{
  "money": {
    "currency": "EUR",
    "amount": 20
  }
}

2. Response - Create Refund

{
    "refund_id": "96436fe3-caef-4af8-9cb5-dacc0d5e8907",
    "transaction_id": "22b36073-57a3-4c3d-9585-87f2e55275a5",
    "created_at": "2020-01-01T13:00:00+01:00",
    "updated_at": "2020-01-01T14:00:00+01:00",
    "refund_money": {
        "amount": 20,
        "currency": "EUR"
    },
    "vat_category": "HIGH",
    "payment_brand": "IDEAL",
    "status": "PENDING",
    "description": "Customer request for refund"
}

3. Request - Refund transaction information

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds/96436fe3-caef-4af8-9cb5-dacc0d5e8907>

4. Response - Refund transaction information

{  
    "refund_id": "96436fe3-caef-4af8-9cb5-dacc0d5e8907",  
    "transaction_id": "22b36073-57a3-4c3d-9585-87f2e55275a5",  
    "created_at": "2020-01-01T13:00:00+01:00",  
    "updated_at": "2020-01-01T14:00:00+01:00",  
    "refund_money": {  
        "amount": 20,  
        "currency": "EUR"  
    },  
    "vat_category": "HIGH",  
    "payment_brand": "IDEAL",  
    "status": "FAILED",  
    "description": "Customer request for refund"

Error Scenarios

The sandbox allows you to simulate error conditions so you can verify that your integration handles failure scenarios correctly. Each error is triggered by using a specific test transaction ID or refund request, and returns a deterministic response.

Refundable details of a transaction

INTERNAL_SERVER_ERROR

Description: A network connection failure occurs while requesting refundable details.

Trigger: transaction ID 172f0295-daca-4783-971b-34f89847e69e

Request

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/172f0295-daca-4783-971b-34f89847e69e/refundable-details>

Response

{  
    "errors": [  
        {  
            "error_message": "Request to Refund Service failed with internal error for omnikassa contractId 1",  
            "error_code": "INTERNAL_SERVER_ERROR"  
        }  
    ]  
}

NOT_FOUND

Description: Transaction is not known.

Trigger: transaction ID 184f0213-bafa-4794-321b-12f89787e70a

Request

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/184f0213-bafa-4794-321b-12f89787e70a/refundable-details>

Response

{  
    "errors": [  
        {  
            "error_message": "Request to Refund Service failed with internal error for omnikassa contractId 1",  
            "error_code": "NOT FOUND"  
        }  
    ]  
}

Create refund

MAXIMUM_REFUNDABLE_AMOUNT_EXCEEDED

The refund request is rejected because the requested amount is higher than what is still refundable for the transaction.

Request

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds>

{
  "money": {
    "currency": "EUR",
    "amount": 2
  }
}

Response

{  
    "errors": [  
        {  
            "error_message": "Refund amount is too large",  
            "error_code": "MAXIMUM_REFUNDABLE_AMOUNT_EXCEEDED"  
        }  
    ]  
}

REFUND_PERIOD_EXPIRED

The transaction can no longer be refunded because the allowed refund period has passed.

Request

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds>

{
  "money": {
    "currency": "EUR",
    "amount": 3
  }
}

Response

{  
    "errors": [  
        {  
            "error_message": "Transaction is not refundable any more",  
            "error_code": "REFUND_PERIOD_EXPIRED"  
        }  
    ]  
}

UNKNOWN_TRANSACTION_OR_REFUND_NOT_SUPPORTED

A refund is requested using a transaction ID that does not exist or refers to a transaction type that does not support refunds.

Request

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds>

{
  "money": {
    "currency": "EUR",
    "amount": 4
  }
}

Response

{  
    "errors": [  
        {  
            "error_message": "Transaction 22b36073-57a3-4c3d-9585-87f2e55275a5 is not found",  
            "error_code": "UNKNOWN_TRANSACTION_OR_REFUND_NOT_SUPPORTED"  
        }  
    ]  
}

INTERNAL_SERVER_ERROR

User attempts a refund but a network connection failure occurs.

Request

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds>

{
  "money": {
    "currency": "EUR",
    "amount": 5
  }
}

Response

{  
    "errors": [  
        {  
            "error_message": "Request to Refund Service failed with internal error for omnikassa contractId 1",  
            "error_code": "INTERNAL_SERVER_ERROR"  
        }  
    ]  
}

Refund transaction information

NOT_FOUND

Trigger: refund ID aa024aeb-89f7-4123-a23b-ccf83a16450d

Request

<https://api-sandbox.rabobank.nl/openapi/sandbox/omnikassa/merchant/transactions/22b36073-57a3-4c3d-9585-87f2e55275a5/refunds/aa024aeb-89f7-4123-a23b-ccf83a16450d>

Response

{
    "errors": [
        {
            "error_code": "NOT_FOUND",
            "error_message": "Refund for id 'aa024aeb-89f7-4123-a23b-ccf83a16450d', contract '1' and transaction '22b36073-57a3-4c3d-9585-87f2e55275a5' not found"
        }
    ]
}