Skip to content
Status

Refund a payment

POSThttps://app.shuttleglobal.com/c/api/instances/{instance_key}/payments/{payment_id}/refund

POST
/payments/{payment_id}/refund

You can refund a payment in part or full, or simply mark a payment as refunded (if refunded offline). You can refund “PAYMENT” and “CAPTURE” type transactions, but not “AUTH” (void an AUTH to release what is still reserved on it).

Note, support for multi-refund (e.g., I pay $100 and refund $20 followed by a second refund of $80) is not available on all gateways.

payment_id
required
string
e.g. "tr_11842_10000"

The payment’s ID (pay_...), capture ID (ca_...) or transaction ID (tr_...), or the alt_key you gave it (case-insensitive). The record must be a payment or capture, otherwise 404 Payment not found. An alt_key resolves to the newest payment or capture with that key, ignoring failed attempts; if another one with the same alt_key was created in the last six months, the request fails with Duplicate alt_key.

Media typeapplication/json
object
refund
object
object
amount
string
e.g. "10.00"

(Optional) The amount of the refund as a string e.g., “10”. The amount should not have commas and use a . as a decimal separator. If omitted, the entire unrefunded amount of the transaction will be refunded.

reason
required
string
e.g. "Customer returned item"

The reason for the refund (free text)

manual
boolean

(Optional) Set to true if you do not want to process the refund via the gateway, but simply record that a refund was performed offline.

Refund processed

Media typeapplication/json
object
refund
object
object
id
string
e.g. "ref_11842_11073"

The unique ID of the refund

payment
string
e.g. "pay_11842_11072"

The original payment this refund relates to

amount
string
e.g. "10"

The amount refunded

created
string · date-time
e.g. "2020-11-27T15:17:15.000Z"

When the refund was created/instructed

processed
string · date-time
e.g. "2020-11-27T15:17:18.000Z"

When the refund completed processing

reason
string
e.g. "Customer requested cancellation"

The reason for the refund

reference
string
e.g. "BOLT-00011073"

A unique customer facing reference for the refund

source_transaction
string
e.g. "tr_11842_11072"

The original transaction that is being refunded - may be a payment or a capture

status
string · enum

The status of the refund transaction

Allowed values: SUCCESS PENDING DECLINED INVALID_PAYMENT_METHOD UNRESOLVED UNATTRIBUTED
gateway_status
string · enum

The gateway status of the refund transaction

Allowed values: APPROVED PENDING DECLINED DECLINED_ERROR UNRESOLVED MANUAL
gateway_message
string

The message from the gateway (if pending or declined)

manual
boolean

False if the refund was instructed, or true if it was only recorded (in which case the onus is on the user to perform the refund via an offline method)

currency
string
e.g. "USD"

The currency of the refund (always the same as source transaction)

account
string

The ID of the person this refund is for

parts
Array<object>

An array of parts objects for which charge(s) the refund was applied to

object
offline
boolean

True if this is just a record to indicate a refund was performed offline

updated
string · date-time

The date the record was last updated

v
integer

The version of the record

Bad request - invalid parameters

Media typeapplication/json

Every error has a code and a message. Some add more fields alongside them, with detail about the error.

object
code
string

The error code, for example VALIDATION_ERROR, INVALID, INVALID_REQUEST, UNAUTHORIZED, FORBIDDEN or NOT_FOUND. Program against this, not the message.

message
string

What went wrong, in words, for logs and support.

Unauthorized - invalid credentials

Media typeapplication/json

Every error has a code and a message. Some add more fields alongside them, with detail about the error.

object
code
string

The error code, for example VALIDATION_ERROR, INVALID, INVALID_REQUEST, UNAUTHORIZED, FORBIDDEN or NOT_FOUND. Program against this, not the message.

message
string

What went wrong, in words, for logs and support.

Example
{
"code": "UNAUTHORIZED",
"message": "Unauthorised"
}

Payment not found

Media typeapplication/json

Every error has a code and a message. Some add more fields alongside them, with detail about the error.

object
code
string

The error code, for example VALIDATION_ERROR, INVALID, INVALID_REQUEST, UNAUTHORIZED, FORBIDDEN or NOT_FOUND. Program against this, not the message.

message
string

What went wrong, in words, for logs and support.

Was this page helpful?