Transaction: Refund
Transaction: Void instead. If you do not
    specify an amount to refund, the entire transaction amount will be refunded. Refer to the
    Transaction response object for more
    information.
    - Python
 
result = gateway.transaction.refund("the_transaction_id")NotFoundError
    exception. If the refund fails, then the result will be unsuccessful and will include either
    validation errors indicating
    which parameters were invalid, or a
    processor settlement response code
    indicating the type of settlement failure.
    - Python
 
result.is_success  # False
result.errors.deep_errorsArguments
transaction_idrequired, strAdditional Parameters
'amount'Decimal'discount_amount'Decimal'kind'strIndicates whether the line item is a debit (sale) or credit (refund) to the customer. Accepted values:
"debit""credit"
'name'str'quantity'Decimal'total_amount'Decimal'unit_amount'Decimal'unit_tax_amount'Decimal'upc_code'str'upc_type'strUPC type for the item. If specified, you must also provide the UPC code. Accepted values:
"UPC-A""UPC-B""UPC-C""UPC-D""UPC-E""UPC-2""UPC-5"
'url'strThe merchant account ID used to create a transaction. Currency is also determined by merchant account ID. If no merchant account ID is specified, we will use your default merchant account.
'order_id'strUse this parameter if you would like to pass an order_id different than that of the original transaction. Otherwise, the original transaction's order_id value will be copied over to the refund. On PayPal transactions, this field maps to the PayPal invoice number. PayPal invoice numbers must be unique in your PayPal business account. Maximum 255 characters or 127 for PayPal transactions.
Requirements
- Transaction status must be settled or settling.
 - Refund amount can't be greater than remaining non-refunded amount of the original transaction.
 - Transaction can't be refunded again after being completely refunded.
 - Transactions held in escrow can only be refunded in full. Attempts to partially refund an escrow transaction will throw a validation error.
 
Examples
Partial refunds
    If you only want to refund a portion of the transaction, specify the amount to refund:
    - Python
 
result = gateway.transaction.refund("the_transaction_id", "50.00")
result.is_success  # True
result.transaction.type  # "credit"
result.transaction.amount  # "50.00"
result = gateway.transaction.refund("the_transaction_id", "10.00")
result.is_success  # True
result.transaction.type  # "credit"
result.transaction.amount  # "10.00"Refund processor declines
    If using the most current SDK, and the processor declines the refund, the response will have the
    processor_response_code available. See the
    transaction statuses page
    for additional information on the Processor Declined response. If using an older SDK version, and
    the processor declines the refund, you may receive a
    validation error
    in lieu of a processor response code.
    - Python
 
result.is_success  # false
result.transaction.status  # "processor_declined"
result.transaction.processor_response_code  # e.g. "2005"
result.transaction.processor_response_text  # e.g. "Invalid Credit Card Number"Settlement failures
    If the processor declines the capture for the refund transaction, the transaction object will have
    the processor_settlement_response_code available. See the
    transaction statuses page
    for additional information on the Settlement Declined response.
    - Python
 
result.is_success  # false
result.transaction.status  # "settlement_declined"
result.transaction.processor_settlement_response_code  # e.g. "4001"
result.transaction.processor_settlement_response_text  # e.g. "Settlement Declined"Issuing a credit
- Python
 
result = gateway.transaction.credit({
    "amount": "100.00",
    "payment_method_token": "my_token"
})