KashierDevelopersKashier Developers
Accept payments

Refunds

Make full or partial refund requests against an order

Refund a successful transaction in part or in full. Refunds are paid from your available Kashier balance — pending balance is not included.

Refund and void share one endpoint

Refund and void are the same endpoint — PUT /v3/orders/:orderId. Only apiOperation differs: send REFUND to refund, VOID to cancel.

Create a refund

To make a refund, send a PUT request to /v3/orders/:orderId. The only path parameter is the Kashier order ID — the transaction you are refunding goes in the body, as transaction.targetTransactionId. Omit it and Kashier refunds against the order's pay transaction. For a partial refund, send transaction.amount in the body as well. It is not permitted for the refund amount to exceed the amount of the original transaction.

In case you are still in the development phase, you will need to call our API using the following testing endpoint API URL:

Meanwhile, whenever you are ready for production, you should use the following production API endpoint URL instead:

Headers

KeyDescription
AuthorizationThe Authorization is the secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization

This call takes your secret key, not a hash

Refund, void and capture authenticate with the Authorization secret key — the same credential the Dashboard API uses — and a refund additionally needs the refund permission on that key's role. That differs from the pay call on the same host: creating a payment (POST /v3/orders) is gated by a Kashier-Hash header and takes no secret key. Kashier publishes no Kashier-Hash string-to-sign for PUT /v3/orders/:orderId, so there is nothing to compute here. Sending the header anyway is what some older integrations do and we have no report of it being rejected, but that is unconfirmed — if an update ever fails with INVALID_HASH_CHECK, raise it with Kashier support.

curl -X 'PUT' 'https://test-fep.kashier.io/v3/orders/:orderId'
  -H 'Authorization: your_secretKey' -H 'accept: application/json' 
  -H 'Content-Type: application/json'
  -d '{"apiOperation":"REFUND","reason":"any reason","transaction":{"amount":3}}'

Body structure

curl -X 'PUT' 'https://test-fep.kashier.io/v3/orders/:orderId' 
  -H 'Authorization: your_secretKey'
  -H 'accept: application/json'
  -H 'Content-Type: application/json' 
  -d '{"apiOperation":"REFUND","reason":"any reason","transaction":{"amount":3}}'

transaction.amount is optional. Omit it for a full refund; send it for a partial one. transaction.targetTransactionId is optional too — send it to refund a specific prior transaction on the order. reason is optional.

Full parameter and response reference → Refund, void, or capture an order.

Refund status

StatusDescription
SUCCESSRefund has successfully been processed by the processor.
FAILURERefund could not be processed. No money moved — the original payment is untouched and the customer was not refunded.
PENDINGRefund initiated, waiting for response from the processor

Maximum refund amount

The refund amount must not be more than the original transaction amount.

On this page