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

# Transfer My Ticket

> Offer the signed-in person's ticket to someone else

Offers one of the person's own tickets to someone else. The recipient gets an email with a link to accept it. Until they accept, the ticket stays the person's, and the offer can be [cancelled](/api-reference/me/cancel-my-ticket-transfer).

<Note>
  **Personal agents only.** Needs a [Personal Agent Protocol](https://personalagentprotocol.org) Session signed in with `poppy:write`. Without it: `403` with `WWW-Authenticate: DPoP error="sign_in_required"` or `error="insufficient_scope", scope="poppy:write"`.
</Note>

This is the same transfer the person can make from their ticket page, with the same rules, limits and emails. Confirm the recipient with the person before calling it.

## Idempotency

Pass an `Idempotency-Key` header to make retries safe. A second offer for the same ticket is refused with `transfer_already_pending` anyway.

## Path Parameters

<ParamField path="ticket_id" type="string" required>
  From `tickets[].ticket_id` on [List My Tickets](/api-reference/me/list-my-tickets).
</ParamField>

## Request Body

<ParamField body="first_name" type="string" required>The recipient's first name.</ParamField>
<ParamField body="last_name" type="string" required>The recipient's last name.</ParamField>
<ParamField body="email" type="string" required>Where the claim link goes. The recipient accepts with this address.</ParamField>
<ParamField body="note" type="string">An optional note for the recipient, up to 500 characters.</ParamField>

## Response

`201 Created`

<ResponseField name="ticket_id" type="string">The ticket offered.</ResponseField>
<ResponseField name="to_name" type="string">The recipient's name.</ResponseField>
<ResponseField name="to_email" type="string">The recipient's email.</ResponseField>
<ResponseField name="expires_at" type="string">When the offer expires if nobody accepts it (ISO 8601).</ResponseField>

## Errors

| Status | `error` | Meaning |
| - | - | - |
| 404 | `not_found` | No ticket with this id belongs to this account. |
| 409 | `transfer_already_pending` | A transfer is already waiting. Cancel it first. |
| 409 | `not_transferable_status` | Only a valid ticket that is not checked in can be transferred. |
| 409 | `shared_payment` | The ticket was bought on one order with other tickets, which share one ticket link. It cannot leave the order on its own yet. |
| 409 | `transfers_disabled` | The organizer turned transfers off for this ticket type. |
| 409 | `recipient_already_has_ticket` | The recipient already has a ticket for this event. |
| 409 | `same_recipient` | The ticket is already held by that address. |
| 409 | `retail_not_transferable`, `upgrade_in_progress`, `cashback_settling`, `unpaid_reservation` | The ticket cannot move right now; the message says why. |
| 429 | `rate_limited` | Too many transfer attempts. Try again in a few minutes. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.