Skip to main content

Refund Reservation

The Refund Reservation endpoint enables merchants to initiate either full or partial refunds for a reservation using its Reservation UUID. Depending on your business workflow, you can refund the entire order or only specific items. Upon successful submission, the API responds with a 202 Accepted, indicating that your refund request has been accepted and is pending processing.

This endpoint is ideal for scenarios such as:

  • Returns & Exchanges: Revert payment for returned or exchanged items.
  • Order Modifications: Adjust invoices or correct billing mistakes.
  • Partial Cancellations: Process refunds for specific products rather than full orders.

Endpoint

POST https://demo-api.frontpayment.no/api/v1/connect/reservations/refund/{{RESERVATION_UUID}}

Authorization

To access this endpoint, include a Bearer Token in the Authorization header of your request. You can obtain this token from Frontpayment.

Example Authorization Header: Authorization: Bearer YOUR_FRONTPAID_BEARER_TOKEN

Request Payload

Send the following parameters as a JSON object in the request body:

{
    "type": "reservation",
    "grandTotal": 15,
    "products": [
        {
            "id": 510,
            "amount": 15
        }
    ],
    "source": "captured",
    "reference": "CAP123234"
}

Retrieve Product ID from Get Order Details API.

using

Validation reference.Rules

Make sure your request meets the following requirements:

FieldTypeDescription
Endpointtype :string https://demo-api.frontpayment.no/api/v1/connect/reservations/refund/{{RESERVATION_UUID}}Required Using type. Available types is reservation
MethodgrandTotal :numeric POSTRequired Grand total of the refunded amount.
Authorizationproducts.*id :numeric BearerRequired Order product id. From which product you want to refund.
Payload Validationsproducts.*.amount :numeric Required
'type'Refund =>amount 'required|string|in:regular,invoiced,reservation',for 'grandTotal'the => 'required|numeric',
'products' => 'required|array',
'products.*.id' => 'required|numeric',
'products.*.amount' => 'required|numeric',
'source' => 'nullable|string|in:captured",charged|requiredIf('type') === reservation',
'reference' => 'nullable|string|requiredIf('type') === reservation
product.
Example Payloadsource :string Required
Avaiable values are {captured "type":and "reservation",
    "grandTotal": 55,
    "products": [
        {
            "id": 451,
            "amount": 30
        },
        {
            "id": 452,
            "amount": 25
        }
    ],
    "source": "charged",
    "reference": "CHA3852658817"
}charged

.
Response Structurereference :string Required Using captured or charged uuid.

Response

A successful request will return a 202 OK status with the following JSON payload:

{
    "status_code": 202,
    "status_message": "OK",
    "message": "orderRefundedSuccessfully",
    "is_data": true,
    "data": null
}

Error Response

API returns a 404 error, it means requested order with RESERVATION_UUID could not be found in our system.

{
    "status_code": 404,
    "status_message": "Not Found",
    "message": "orderNotFound",
    "is_error": false,
    "errors": null
}

API return a 417 error, it means request payload validation failed.

{
    "status_code": 417,
    "status_message": "Client Error",
    "message": "payloadValidationErrors",
    "is_error": true,
    "errors": "Array"
}
{
"status_code":

API 404,returns "status_message":a "Not510 Found",error, "message":it "orderNotFound",means "is_error":something false,failed "errors":on nullthe }server {side

"status_code": 404, "status_message": "Not Found", "message": "refundRejectionForTransactionNotFound", "is_error": false, "errors": null } { "status_code": 400, "status_message": "Conflict of Business Logic", "message": "refundRejectionForRefundedCancelledInvoicedOrderParamRefunded", "is_error": false, "errors": null } { "status_code": 400, "status_message": "Conflict of Business Logic", "message": "requestProductIdNotAvailable", "is_data": false, "data": null } { "status_code": 400, "status_message": "Conflict of Business Logic", "message": "refundRejectionForRefundedCancelledInvoicedOrderParamCancelled", "is_error": false, "errors": null } { "status_code": 400, "status_message": "Conflict of Business Logic", "message": "refundRejectionForRefundedCancelledInvoicedOrderParamInvoiced", "is_error": false, "errors": null } { "status_code": 400, "status_message": "Conflict of Business Logic", "message": "refundRejectionForRefundRequestGreaterThanOrderAmount", "is_error": false, "errors": null } { "status_code": 400, "status_message": "Conflict of Business Logic", "message": "orderProductsNotFound", "is_error": false, "errors": null } { "status_code": 400, "status_message": "Conflict of Business Logic", "message": "refundRejectionForProductAmountExceed", "is_error": true, "errors": "Array" } { "status_code": 400, "status_message": "Conflict of Business Logic", "message": "refundRejectionForWeeklyThresholdExceed", "is_error": true, "errors": null } { "status_code": 400, "status_message": "Conflict of Business Logic", "message": "refundRejectionForRequestAmountThresholdExceed", "is_error": true, "errors": null } { "status_code": 500, "status_message": "Internal Dependency Error", "message": "internalErrorOccurredPleaseTryAgainLater", "is_error": true, "errors": "Array" }
{
    "status_code": 510,
    "status_message": "Execution Exception Occurred",
    "message": "somethingWentWrong",
    "is_error": true,
    "errors": "Array"
}

Others refund rejections Example Response : errors

{
  "status_code": 202,400,
  "status_message": "OK"Conflict of Business Logic",
  "message": "orderRefundedSuccessfully"requestProductIdNotAvailable",
  "is_data": true,false,
  "data": null
}

{
    "status_code": 400,
    "status_message": "Conflict of Business Logic",
    "message": "refundRejectionForRefundRequestGreaterThanOrderAmount",
    "is_error": false,
    "errors": null
}
{
    "status_code": 400,
    "status_message": "Conflict of Business Logic",
    "message": "refundRejectionForProductAmountExceed",
    "is_error": true,
    "errors": "Array"
}
{
    "status_code": 400,
    "status_message": "Conflict of Business Logic",
    "message": "refundRejectionForWeeklyThresholdExceed",
    "is_error": true,
    "errors": null
}
{
    "status_code": 400,
    "status_message": "Conflict of Business Logic",
    "message": "refundRejectionForRequestAmountThresholdExceed",
    "is_error": true,
    "errors": null
}