---
title: "Reverse a payment - tries void first (for unsettled transactions), falls back to refund. This is the recommended endpoint for canceling payments as it automatically picks the right method."
method: POST
path: "/Payments/{id}/reverse"
tags: ["Payments"]
---

# Reverse a payment - tries void first (for unsettled transactions), falls back to refund. This is the recommended endpoint for canceling payments as it automatically picks the right method.

`POST /Payments/{id}/reverse`

## Request

- Base URL: `https://api.clinicos.vet/backend/business`
- URL: `https://api.clinicos.vet/backend/business/Payments/{id}/reverse`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/docs/Payments/:id/reverse/post.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `id` string, required

## Request body

- ReversePaymentDto: Request to reverse a payment (void or refund). The system will automatically try void first for unsettled transactions, then fall back to refund for settled transactions.
  - `amount` union
    - number, double
    - string, double
  - `reason` string
  - `destination` string, nullable: Where the money goes: "original" (default) voids/refunds the original tender; "storeCredit" grants the value to the client's credit ledger instead — no gateway call (ITE-655).

## Response `200`

OK

- ReversePaymentResultDto: Result of a payment reversal operation. Indicates whether the payment was voided (unsettled) or refunded (settled).
  - `payment` PaymentDto
    - `id` string
    - `paymentNumber` string
    - `invoiceId` string, nullable: Null for a deposit (string PaymentDto.Purpose = "Deposit"), which has no invoice.
    - `invoiceNumber` string, nullable
    - `purpose` string: "Invoice" or "Deposit" (ITE-834).
    - `clientId` string, nullable
    - `clientName` string, nullable
    - `paymentTokenId` string, nullable
    - `paymentToken` PaymentTokenSummaryDto
      - `id` string
      - `last4` string
      - `brand` string
      - `expirationMonth` union
        - integer
        - string, int32
      - `expirationYear` union
        - integer
        - string, int32
      - `isDefault` boolean
      - `nickname` string, nullable
    - `paymentMethod` string
    - `amount` union
      - number, double
      - string, double
    - `status` string
    - `description` string, nullable
    - `transactionId` string, nullable
    - `authorizationCode` string, nullable
    - `cashReceived` union
      - number, double
      - string, double
    - `changeDue` union
      - number, double
      - string, double
    - `markAsPaidType` string, nullable
    - `checkNumber` string, nullable
    - `routingNumberMasked` string, nullable
    - `accountNumberMasked` string, nullable
    - `text2PayPhoneNumber` string, nullable
    - `text2PayLinkSentAt` string, date-time, nullable
    - `refundedAmount` union
      - number, double
      - string, double
    - `originalPaymentId` string, nullable
    - `refunds` PaymentSummaryDto[], nullable
      - `id` string
      - `paymentNumber` string
      - `paymentMethod` string
      - `amount` union
        - number, double
        - string, double
      - `status` string
      - `refundedAmount` union
        - number, double
        - string, double
      - `createdAt` string, date-time
      - `clientName` string, nullable
      - `invoiceNumber` string, nullable
      - `cashReceived` union
        - number, double
        - string, double
      - `changeDue` union
        - number, double
        - string, double
    - `processedBy` UserSummaryDto
      - `id` string
      - `email` string
      - `firstName` string, nullable
      - `lastName` string, nullable
      - `displayName` string, nullable
      - `type` string
      - `roleId` string, nullable
      - `roleName` string, nullable
    - `processedAt` string, date-time, nullable
    - `createdAt` string, date-time
    - `cardEntryMethod` string, nullable
    - `applicationLabel` string, nullable
    - `maskedPan` string, nullable
    - `cardType` string, nullable
    - `lastFour` string, nullable
    - `emvAid` string, nullable
    - `emvTvr` string, nullable
    - `emvIad` string, nullable
    - `emvTsi` string, nullable
    - `cvmMethod` string, nullable
    - `pinVerified` boolean, nullable
    - `surchargeAmount` union
      - number, double
      - string, double
    - `baseAmount` union
      - number, double
      - string, double
    - `tipAmount` union
      - number, double
      - string, double
    - `cashbackAmount` union
      - number, double
      - string, double
    - `cashDiscountApplied` boolean, nullable
    - `cashDiscountAmount` union
      - number, double
      - string, double
    - `transactionType` string, nullable
    - `terminalId` string, nullable
    - `terminalName` string, nullable: Named terminal slug used for this transaction (e.g., "front-desk").
    - `isDuplicateTransaction` boolean: Whether this is a duplicate transaction that was previously approved. When true, no new charge was processed - this references a prior transaction.
  - `method` string: The method used to reverse the payment: "Voided" or "Refunded"
  - `message` string: Human-readable message explaining the reversal

## Other responses

- `400`: Bad Request
- `404`: Not Found

## Changes

- **2026-09-17** `d4ae30be0619`: 3 breaking, 3 info
  - the response property `payment/invoiceId` became nullable for the status `200` (media type: text/plain)
  - the response property `payment/invoiceId` became nullable for the status `200` (media type: application/json)
  - the response property `payment/invoiceId` became nullable for the status `200` (media type: text/json)
  - added the optional property `payment/purpose` to the response with the `200` status (media type: text/plain)
  - …2 more
- **2026-09-11** `503cd0546309`: 3 info
  - added the new optional request property `destination` (media type: application/json)
  - added the new optional request property `destination` (media type: text/json)
  - added the new optional request property `destination` (media type: application/*+json)
- **2026-08-12** `e7d381a5453b`: 6 info
  - added the optional property `payment/refunds/items/cashReceived` to the response with the `200` status (media type: text/plain)
  - added the optional property `payment/refunds/items/cashReceived` to the response with the `200` status (media type: application/json)
  - added the optional property `payment/refunds/items/cashReceived` to the response with the `200` status (media type: text/json)
  - added the optional property `payment/refunds/items/changeDue` to the response with the `200` status (media type: text/plain)
  - …2 more

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/Payments/:id/reverse/post.md)

---

[API](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1.md) - [All operations](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/revisions/099cf36186e0?raw)
