---
search:
  tags:
    - tickets
    - PATCH
seo:
  description: >-
    Minimum role: ADMIN. Active workspace via the X-Workspace-Id header.
    Reference for the PATCH /tickets/{ticketCode} endpoint in the FreeTicket B2B
    API.
sidebar:
  label: Reassign a sold ticket to another date or ticket type
  badge: PATCH
title: Reassign a sold ticket to another date or ticket type
type: openapi-operation
---
Minimum role: `ADMIN`. Active workspace via the `X-Workspace-Id` header.

Moves an ALREADY SOLD ticket to another `ticketTypeId` and/or to the `eventDateId` date (at least one of the two is required). Intended for a postponement: moving buyers from the old date to the new one without refunding and reselling.

With only `eventDateId`, the target ticket type is resolved by NAME (the same type the ticket had, on the new date); if the target date doesn't have exactly one type with that name, it responds 422 and you must pass an explicit `ticketTypeId`.

It does NOT charge or refund the price difference if the new type costs something else: the ticket's `unitPrice`/`subtotal` keep the sale's ORIGINAL price. If money needs adjusting, use `POST /sales/{id}/refund` separately.

It does NOT reissue the QR: `ticketCode` is always preserved (it is what the buyer already has printed, in Wallet and in their email).

It does NOT notify the buyer. This endpoint only moves data; to resend the updated ticket use `POST /tickets/{ticketCode}/resend`, and for a bulk postponement notice, use the communications module.

A ticket that is already checked in, or that belongs to a sale that is not CONFIRMED, responds 409 and is not reassigned.

NUMBERED SEATING (seats.io): if the target date has numbered seating, `seatLabel` is REQUIRED (409 `SEAT_REQUIRED` if missing) — the server never picks a seat on its own. The seat is validated and booked in seats.io before moving the ticket; if it is no longer available, it responds 409 `SEAT_UNAVAILABLE` without changing anything. If the ticket held a numbered seat on the source date, that seat is released after the move is confirmed.

`PATCH /tickets/{ticketCode}`
