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

# Resubmit Refund Ticket

> Revise and resubmit a rejected or failed refund ticket

`POST /api/actions/refund-ticket/resubmit-ticket`

**Authentication:** Merchant API Key (server-to-server).

Resubmit reuses the request shape of [Create Refund Ticket](/api-reference/endpoints/refunds/create-refund-ticket), plus a `ticketId` to identify the ticket being revised. The originating `paymentId` is bound to the existing ticket and cannot be changed.

## Request body

| Field                      | Type   | Required | Description                                                                    |
| -------------------------- | ------ | -------- | ------------------------------------------------------------------------------ |
| `ticketId`                 | string | Yes      | Short ID of the refund ticket being revised, e.g. `TKT_3bVzrkD0FJjFdZNLk8Ualx` |
| `reason`                   | string | Yes      | Free-text reason for the revised request                                       |
| `requestedAmount.amount`   | string | Yes      | Revised refund amount (display format, must be `> 0` and `≤ payment.amount`)   |
| `requestedAmount.currency` | string | Yes      | ISO 4217 code, must match the payment currency                                 |

The `refundTicketMerchantExternalId` written at create time is **immutable** across resubmits — it cannot be changed once the ticket exists.

## Success response (200)

```json theme={"system"}
{
  "data": {
    "ticket": {
      "id": "TKT_3bVzrkD0FJjFdZNLk8Ualx",
      "status": "pending",
      "subjectId": "PAY_6eYCunG3IMmIgcQOnaXdoA",
      "versionNumber": 2,
      "refundTicketMerchantExternalId": "REF-2026-00891"
    }
  }
}
```

A new ticket version is appended; `versionNumber` increments. The ticket re-enters the review queue (`pending` for customer-initiated, `processing` for merchant-initiated).

## Errors

> **Retry policy:** Never retry 4xx — fix the request and resubmit. Retry 5xx with exponential backoff (start 5s, max 3 attempts).

| Status | `errors[0].message`                                           | What it means                                        | Recommended handling                                      |
| ------ | ------------------------------------------------------------- | ---------------------------------------------------- | --------------------------------------------------------- |
| 400    | `Missing required field: ticketId`                            | `ticketId` not provided                              | Add `ticketId`, resubmit                                  |
| 400    | `Expected format: TKT_xxx, got "..."`                         | `ticketId` Short ID could not be decoded             | Fix `ticketId` format, resubmit                           |
| 400    | `Invalid requestedAmount.amount format`                       | Amount string could not be parsed                    | Use a display string like `"10.50"`                       |
| 401    | `Unauthorized`                                                | Invalid API Key signature                            | Verify auth headers                                       |
| 403    | `Submitter is not the original ticket owner`                  | The caller didn't create this ticket                 | Only the original submitter can resubmit                  |
| 404    | `Ticket not found`                                            | Ticket doesn't exist or doesn't belong to the caller | Verify `ticketId`                                         |
| 409    | `Ticket status is X, only rejected/failed can be resubmitted` | Ticket is not in a resubmittable state               | Wait for `rejected` / `failed`, or open a new ticket      |
| 409    | `Requested amount exceeds payment amount`                     | Revised amount > `payment.amount`                    | Fix the amount                                            |
| 500    | `Internal server error`                                       | Unexpected server-side failure                       | Retry with exponential backoff (start 5s, max 3 attempts) |
