Skip to content

Instantly share code, notes, and snippets.

@Niximacco
Created July 23, 2025 18:53
Show Gist options
  • Select an option

  • Save Niximacco/660851408b5fac913f2beeb65659f3c9 to your computer and use it in GitHub Desktop.

Select an option

Save Niximacco/660851408b5fac913f2beeb65659f3c9 to your computer and use it in GitHub Desktop.
# Code to attach and send reverse transfers
def reverse_transfer(self, transfer_id, amount=0, validate_request=True, metadata=None):
data = {"amount": amount} if amount > 0 else {}
if metadata:
for k, v in metadata.items():
data[f"metadata[{k}]"] = v
return self.transfers.reverse(transfer_id, data, validate_request)
def reverse(self, transfer_id, data, validate_request=True):
return self.client.post(f"{self.path}/{transfer_id}/reversals", data, validate_request=validate_request)
def post(self, path, data, *args, **kwargs):
logger.info(
f"Stripe api request - POST {path}",
extra={
"requests.request.body": str(data or {}),
"requests.request.args": str(args),
"requests.request.kwargs": str(kwargs),
},
)
error_types_to_ignore = kwargs.pop("error_types_to_ignore", None)
if kwargs.pop("validate_request", True) is False:
return self.log_response(requests.post(path, data=data, headers=self.headers, *args, **kwargs))
return self.validate_response(
requests.post(path, data=data, headers=self.headers, *args, **kwargs),
error_types_to_ignore=error_types_to_ignore,
)
# Results in payload like:
{'amount': 10000, 'metadata[reason]': 'dispute', 'metadata[charge_transfer_id]': 'tr_3RZD8iH2wLHuCKJp0Lz39NmU'}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment