Quick-starts
Replace $KEY with your key and $EVENT with an event id from GET /events. Base URL: https://api.staging.entrywick.com/v1.
1. Register people
Types and days are named by their codes. The registration goes through the event's own rules, capacity and approval, and its tickets are issued when it is confirmed.
curl
curl -X POST "https://api.entrywick.io/v1/events/$EVENT/registrations" \
-H "Authorization: Bearer $KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"attendees":[{"attendee_type":"VOL","first_name":"Amina","last_name":"Rahim","email":"amina@example.org","days":["DAY1"]}]}'
JavaScript
const res = await fetch(`https://api.entrywick.io/v1/events/${event}/registrations`, {
method: 'POST',
headers: { Authorization: `Bearer ${key}`, 'Idempotency-Key': crypto.randomUUID(), 'Content-Type': 'application/json' },
body: JSON.stringify({ attendees: [{ attendee_type: 'VOL', first_name: 'Amina', last_name: 'Rahim', email: 'amina@example.org', days: ['DAY1'] }] }),
});
const registration = await res.json();
PHP
$registration = Http::withToken($key)
->withHeaders(['Idempotency-Key' => (string) Str::uuid()])
->post("https://api.entrywick.io/v1/events/{$event}/registrations", [
'attendees' => [['attendee_type' => 'VOL', 'first_name' => 'Amina', 'last_name' => 'Rahim', 'email' => 'amina@example.org', 'days' => ['DAY1']]],
])->json();
Python
import requests, uuid
registration = requests.post(
f"https://api.entrywick.io/v1/events/{event}/registrations",
headers={"Authorization": f"Bearer {key}", "Idempotency-Key": str(uuid.uuid4())},
json={"attendees": [{"attendee_type": "VOL", "first_name": "Amina", "last_name": "Rahim", "email": "amina@example.org", "days": ["DAY1"]}]},
).json()
2. Keep a list in step
Ask for what changed since your last run with updated_since, and follow page.next_cursor until has_more is false.
# curl
curl "https://api.entrywick.io/v1/events/$EVENT/attendees?updated_since=2027-05-01T00:00:00Z&limit=200" -H "Authorization: Bearer $KEY"
// JavaScript
let cursor = null, people = [];
do {
const url = new URL(`https://api.entrywick.io/v1/events/${event}/attendees`);
url.searchParams.set('updated_since', since);
if (cursor) url.searchParams.set('cursor', cursor);
const page = await (await fetch(url, { headers: { Authorization: `Bearer ${key}` } })).json();
people.push(...page.data); cursor = page.page.next_cursor;
} while (cursor);
// PHP
$page = Http::withToken($key)->get("https://api.entrywick.io/v1/events/{$event}/attendees", ['updated_since' => $since])->json();
# Python
page = requests.get(f"https://api.entrywick.io/v1/events/{event}/attendees", headers={"Authorization": f"Bearer {key}"}, params={"updated_since": since}).json()
3. Record a scan
A key with the scanner scope gets exactly the decision the EntryWick scanner makes. client_uuid makes a retried scan count once.
# curl
curl -X POST "https://api.entrywick.io/v1/events/$EVENT/scan" \
-H "Authorization: Bearer $KEY" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
-d '{"code":"EW1:DAY1-0001-HOU:1a2b3c4d","check_in_point":"GATE1","client_uuid":"'"$(uuidgen)"'","scanned_at":"2027-05-01T13:05:00Z"}'
// JavaScript
const scan = await (await fetch(`https://api.entrywick.io/v1/events/${event}/scan`, {
method: 'POST',
headers: { Authorization: `Bearer ${key}`, 'Idempotency-Key': crypto.randomUUID(), 'Content-Type': 'application/json' },
body: JSON.stringify({ code, check_in_point: 'GATE1', client_uuid: crypto.randomUUID(), scanned_at: new Date().toISOString() }),
})).json(); // scan.result: accepted, duplicate, wrong_day…
// PHP
$scan = Http::withToken($key)->withHeaders(['Idempotency-Key' => (string) Str::uuid()])
->post("https://api.entrywick.io/v1/events/{$event}/scan", ['code' => $code, 'check_in_point' => 'GATE1', 'client_uuid' => (string) Str::uuid(), 'scanned_at' => now()->toIso8601ZuluString()])->json();
# Python
scan = requests.post(f"https://api.entrywick.io/v1/events/{event}/scan",
headers={"Authorization": f"Bearer {key}", "Idempotency-Key": str(uuid.uuid4())},
json={"code": code, "check_in_point": "GATE1", "client_uuid": str(uuid.uuid4()), "scanned_at": "2027-05-01T13:05:00Z"}).json()