Update an event invitee
Checks expected_version before supplied changes. Null owner unassigns; null response clears it. Declined/closed disposition or a declined response requires confirm_disposition=true. Reopening a previously declined invitee requires explicitly clearing/replacing the declined response. Attendance remains derived from registration. Requires event setup management; archived event invitation history is read-only (409).
curl --request PATCH \
--url https://api.gratona.com/v1/admin/events/{eventId}/invitees/{inviteeId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"expected_version": 1,
"owner_user_id": 42,
"status": "open",
"response_outcome": "accepted",
"confirm_disposition": false
}
'import requests
url = "https://api.gratona.com/v1/admin/events/{eventId}/invitees/{inviteeId}"
payload = {
"expected_version": 1,
"owner_user_id": 42,
"status": "open",
"response_outcome": "accepted",
"confirm_disposition": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
expected_version: 1,
owner_user_id: 42,
status: 'open',
response_outcome: 'accepted',
confirm_disposition: false
})
};
fetch('https://api.gratona.com/v1/admin/events/{eventId}/invitees/{inviteeId}', 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}/invitees/{inviteeId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'expected_version' => 1,
'owner_user_id' => 42,
'status' => 'open',
'response_outcome' => 'accepted',
'confirm_disposition' => false
]),
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}/invitees/{inviteeId}"
payload := strings.NewReader("{\n \"expected_version\": 1,\n \"owner_user_id\": 42,\n \"status\": \"open\",\n \"response_outcome\": \"accepted\",\n \"confirm_disposition\": false\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.gratona.com/v1/admin/events/{eventId}/invitees/{inviteeId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"expected_version\": 1,\n \"owner_user_id\": 42,\n \"status\": \"open\",\n \"response_outcome\": \"accepted\",\n \"confirm_disposition\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/events/{eventId}/invitees/{inviteeId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expected_version\": 1,\n \"owner_user_id\": 42,\n \"status\": \"open\",\n \"response_outcome\": \"accepted\",\n \"confirm_disposition\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 42,
"version": 1,
"disposition": "open",
"response_outcome": "accepted",
"owner_user_id": 42
}
}{
"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": "Version, idempotency, preview or archived-event conflict.",
"error_code": "event_invitee_conflict",
"details": {
"current_version": 42,
"current_lock_version": 42,
"current_revision": 42,
"current_definition_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Authorizations
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Record ID in the authenticated organization.
42
Record ID in the authenticated organization.
42
Body
Current invitee version from the list.
x >= 11
Active staff owner; null unassigns.
42
New stored disposition.
open, declined, closed "open"
Response; null clears.
accepted, maybe, declined, needs_follow_up, null "accepted"
Explicit confirmation for decline/close changes.
false
Response
Update an event invitee completed.
Show child attributes
Show child attributes
curl --request PATCH \
--url https://api.gratona.com/v1/admin/events/{eventId}/invitees/{inviteeId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"expected_version": 1,
"owner_user_id": 42,
"status": "open",
"response_outcome": "accepted",
"confirm_disposition": false
}
'import requests
url = "https://api.gratona.com/v1/admin/events/{eventId}/invitees/{inviteeId}"
payload = {
"expected_version": 1,
"owner_user_id": 42,
"status": "open",
"response_outcome": "accepted",
"confirm_disposition": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
expected_version: 1,
owner_user_id: 42,
status: 'open',
response_outcome: 'accepted',
confirm_disposition: false
})
};
fetch('https://api.gratona.com/v1/admin/events/{eventId}/invitees/{inviteeId}', 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}/invitees/{inviteeId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'expected_version' => 1,
'owner_user_id' => 42,
'status' => 'open',
'response_outcome' => 'accepted',
'confirm_disposition' => false
]),
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}/invitees/{inviteeId}"
payload := strings.NewReader("{\n \"expected_version\": 1,\n \"owner_user_id\": 42,\n \"status\": \"open\",\n \"response_outcome\": \"accepted\",\n \"confirm_disposition\": false\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.gratona.com/v1/admin/events/{eventId}/invitees/{inviteeId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"expected_version\": 1,\n \"owner_user_id\": 42,\n \"status\": \"open\",\n \"response_outcome\": \"accepted\",\n \"confirm_disposition\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/events/{eventId}/invitees/{inviteeId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expected_version\": 1,\n \"owner_user_id\": 42,\n \"status\": \"open\",\n \"response_outcome\": \"accepted\",\n \"confirm_disposition\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 42,
"version": 1,
"disposition": "open",
"response_outcome": "accepted",
"owner_user_id": 42
}
}{
"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": "Version, idempotency, preview or archived-event conflict.",
"error_code": "event_invitee_conflict",
"details": {
"current_version": 42,
"current_lock_version": 42,
"current_revision": 42,
"current_definition_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}