> ## Documentation Index
> Fetch the complete documentation index at: https://docs.finventi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Respond to SWIFT Cancellation Requests

> Handle an incoming cancellation request (camt.056) for a payment you received - accept and return the funds, or reject and keep them.

The bank that sent you a payment can ask for it back: an incoming `camt.056` cancellation request arrives for a payment you **received**. The platform matches it to your inbound payment automatically - you work with the payment's **transaction ID** and simply decide: return the funds or keep them.

## How it works

<Steps>
  <Step title="Request arrives">
    The `camt.056` is matched to your inbound payment automatically. A cancellation request is created and you are notified by webhook (`CANCELLATION_IN_PROGRESS`) with the reason and the transaction ID.
  </Step>

  <Step title="You decide">
    Review and respond via API or the PGW UI: **accept** (return the funds) or **reject** (keep them).
  </Step>

  <Step title="Accept: funds returned">
    The cancellation moves to `RETURNING` and stays there while the return travels. The original inbound payment stays **Completed**; a separate **Payment return** transaction (`pacs.004`) is created back to the originator and tracked via the SWIFT Frontend Tracker. When the return transaction reaches **Completed** (delivery confirmed), the cancellation gets its final status - webhook `PAYMENT_RETURNED`. The return itself answers the request.
  </Step>

  <Step title="Reject: refusal sent">
    The cancellation moves to `REFUSING` while the `camt.029` resolution with your rejection reason travels back to the originating bank - webhook `CANCELLATION_REFUSED` on delivery (final). The funds stay with the beneficiary.
  </Step>
</Steps>

```mermaid actions={true} theme={null}
sequenceDiagram
  autonumber
  participant Orig as Originating Bank
  participant SWIFT as SWIFT Network
  participant Platform as Payments Platform
  participant App as Your System

  Orig->>SWIFT: camt.056 (reason)
  SWIFT->>Platform: Deliver request
  Platform->>Platform: Match inbound payment
  Platform-->>App: Webhook (CANCELLATION_IN_PROGRESS)
  alt Accept
    App->>Platform: Accept
    Platform-->>App: Webhook (RETURNING)
    Platform->>SWIFT: pacs.004 return (original stays Completed)
    Platform-->>App: Payment return lifecycle webhooks
    Platform-->>App: Webhook (PAYMENT_RETURNED) - return completed, final
  else Reject
    App->>Platform: Reject (reason)
    Platform-->>App: Webhook (REFUSING)
    Platform->>SWIFT: camt.029 REJECTED
    Platform-->>App: Webhook (CANCELLATION_REFUSED)
  end
```

## Webhooks

Two webhook types are involved: the **cancellation request** emits [Payment Cancellation Status Change](/payments/webhooks/payment-cancellation-status-change) events, while the **Payment return** transaction (created when you accept) emits [Payment Status Change](/payments/webhooks/payment-status-change) events.

<Note>
  Status values are shown exactly as they arrive on the wire: the Payment Status Change webhook uses title case (`Cancelled`, `Sent to clear`), the Cancellation Status Change webhook uses upper snake case (`CANCELLATION_IN_PROGRESS`, `PAYMENT_RETURNED`).
</Note>

| Event                                              | Webhook                                       | `status`                                                 |
| -------------------------------------------------- | --------------------------------------------- | -------------------------------------------------------- |
| Incoming request matched to your payment           | Cancellation Status Change                    | `CANCELLATION_IN_PROGRESS`                               |
| You accept - return on its way                     | Cancellation Status Change                    | `RETURNING`                                              |
| Return transaction completed - delivery confirmed  | Cancellation Status Change                    | `PAYMENT_RETURNED` (final)                               |
| Return transaction lifecycle                       | Payment Status Change (`type=Payment return`) | `Created` → `Sent to clear` → (`Accepted`) → `Completed` |
| You reject - `camt.029` on its way, then delivered | Cancellation Status Change                    | `REFUSING` → `CANCELLATION_REFUSED`                      |

## API Reference

<CardGroup cols={2}>
  <Card title="Accept Cancellation" icon="check" href="/payments/api/sepa/cancellation-request-accept">
    Accept an incoming request and return funds
  </Card>

  <Card title="Reject Cancellation" icon="xmark" href="/payments/api/sepa/cancellation-request-reject">
    Reject an incoming request and keep funds
  </Card>
</CardGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Payment statuses" icon="route" href="/payments/integration-guide/swift/track-payments">
    Inbound statuses and hold reasons explained
  </Card>

  <Card title="Statements" icon="file-lines" href="/payments/integration-guide/swift/statements">
    Reconcile returned funds
  </Card>
</CardGroup>
