Events
Offer the next event waitlist place
Reserves ticket units and event admissions for the next waiting signup for that ticket, then queues its offer email. An active offer is replayed; communication holds and out-of-order offers return 409. Expiry defaults to the event reservation policy, clamped to 5–60 minutes.
POST
/
admin
/
events
/
{eventId}
/
waitlist
/
{entryId}
/
offer
Offer the next event waitlist place
curl --request POST \
--url https://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"offer_minutes": 15
}
'import requests
url = "https://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer"
payload = { "offer_minutes": 15 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({offer_minutes: 15})
};
fetch('https://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer', 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://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer",
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([
'offer_minutes' => 15
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer"
payload := strings.NewReader("{\n \"offer_minutes\": 15\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"offer_minutes\": 15\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"offer_minutes\": 15\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 42,
"status": "waiting",
"name": "Example",
"email": "jane@example.org",
"requested_units": 42,
"admissions_requested": 42,
"offered_at": "2026-10-20T12:00:00Z",
"offer_expires_at": "2026-10-20T12:00:00Z",
"converted_at": "2026-10-20T12:00:00Z",
"event_order_id": 42,
"token": "issued-waitlist-token"
}
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Authorizations
bearerAuthapiKeyAuth
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Record ID in the authenticated organization.
Example:
42
Record ID in the authenticated organization.
Example:
42
Body
application/json
Offer lifetime in minutes; omitted uses event settings.
Required range:
5 <= x <= 60Example:
15
Response
Offer the next event waitlist place completed.
Show child attributes
Show child attributes
⌘I
Offer the next event waitlist place
curl --request POST \
--url https://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"offer_minutes": 15
}
'import requests
url = "https://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer"
payload = { "offer_minutes": 15 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({offer_minutes: 15})
};
fetch('https://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer', 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://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer",
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([
'offer_minutes' => 15
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer"
payload := strings.NewReader("{\n \"offer_minutes\": 15\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"offer_minutes\": 15\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/events/{eventId}/waitlist/{entryId}/offer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"offer_minutes\": 15\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 42,
"status": "waiting",
"name": "Example",
"email": "jane@example.org",
"requested_units": 42,
"admissions_requested": 42,
"offered_at": "2026-10-20T12:00:00Z",
"offer_expires_at": "2026-10-20T12:00:00Z",
"converted_at": "2026-10-20T12:00:00Z",
"event_order_id": 42,
"token": "issued-waitlist-token"
}
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}