Transfer My Ticket
curl --request POST \
--url https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"note": "<string>"
}
'import requests
url = "https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer"
payload = {
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"note": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: '<string>',
last_name: '<string>',
email: '<string>',
note: '<string>'
})
};
fetch('https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'first_name' => '<string>',
'last_name' => '<string>',
'email' => '<string>',
'note' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer"
payload := strings.NewReader("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"note\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"note\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"note\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"ticket_id": "<string>",
"to_name": "<string>",
"to_email": "<string>",
"expires_at": "<string>"
}Personal agents: my account
Transfer My Ticket
Offer the signed-in person’s ticket to someone else
POST
/
me
/
tickets
/
{ticket_id}
/
transfer
Transfer My Ticket
curl --request POST \
--url https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"note": "<string>"
}
'import requests
url = "https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer"
payload = {
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"note": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: '<string>',
last_name: '<string>',
email: '<string>',
note: '<string>'
})
};
fetch('https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'first_name' => '<string>',
'last_name' => '<string>',
'email' => '<string>',
'note' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer"
payload := strings.NewReader("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"note\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"note\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.gomry.com/api/v1/me/tickets/{ticket_id}/transfer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"note\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"ticket_id": "<string>",
"to_name": "<string>",
"to_email": "<string>",
"expires_at": "<string>"
}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.
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.
Personal agents only. Needs a Personal Agent Protocol Session signed in with
poppy:write. Without it: 403 with WWW-Authenticate: DPoP error="sign_in_required" or error="insufficient_scope", scope="poppy:write".Idempotency
Pass anIdempotency-Key header to make retries safe. A second offer for the same ticket is refused with transfer_already_pending anyway.
Path Parameters
string
required
From
tickets[].ticket_id on List My Tickets.Request Body
string
required
The recipient’s first name.
string
required
The recipient’s last name.
string
required
Where the claim link goes. The recipient accepts with this address.
string
An optional note for the recipient, up to 500 characters.
Response
201 Created
string
The ticket offered.
string
The recipient’s name.
string
The recipient’s email.
string
When the offer expires if nobody accepts it (ISO 8601).
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. |

