---
title: "Record a session check-in"
method: POST
path: "/v1/events/{eventId}/sessions/{sessionId}/attendance/checkin"
tags: ["Sessions"]
---

# Record a session check-in

`POST /v1/events/{eventId}/sessions/{sessionId}/attendance/checkin`

Marks the attendee identified by the supplied QR code as checked into the given session. Intended for onsite check-in partners (e.g. RFID badge-scan vendors). The QR code may be supplied either as the raw code or as a Zuddl deep-link URL (e.g. https://applink.zuddl.com/link/com.zuddl.portal/{eventId}/profile/{qrCode}); the server extracts the trailing path segment when a URL is supplied. Session attendance is recorded against the user's Zuddl account; if the scanned registration is not yet linked to an account, the request is rejected with 422.

Required API key scopes: `WRITE`

**This API can only be called with an access key that was generated for Backend usage.**

## Path parameters

- `eventId` string, required
- `sessionId` string, required

## Request body

- OrgEventsAppDomainApiProductEventAttendanceDtosAttendanceCheckInRequest
  - `qrCode` string, required — QR code identifying the attendee. Accepts either the raw code (e.g. "EAFPSNAB2I") or a Zuddl deep-link URL such as "https://applink.zuddl.com/link/com.zuddl.portal/{eventId}/profile/{qrCode}" — the server extracts the trailing path segment when a URL is supplied.
  - `occurredAt` string, date-time — ISO-8601 timestamp of the scan from the partner's device. Defaults to the server time when omitted.

## Response `200`

Session check-in recorded

- OrgEventsAppDomainApiProductEventAttendanceDtosAttendanceCheckInResponse
  - `registrationId` string, uuid — Resolved registration id for the attendee. Null when the scanned user is a speaker without a registration record.
  - `accountId` string, uuid — Resolved Zuddl account id for the user.
  - `speakerId` string, uuid — Speaker id when the scanned user is a speaker for this event. Null otherwise.
  - `role` 'ATTENDEE' | 'ORGANIZER' | 'SPEAKER' | 'SPONSOR' | 'MODERATOR' — Resolved role of the scanned user within the event.
  - `action` 'CHECK_IN' | 'CHECK_OUT' — Action recorded for this scan.
  - `recordedAt` string, date-time — Timestamp recorded for the scan (echoes the request occurredAt or the server time used when omitted).

## Other responses

- `400` — Invalid input
- `401` — Unauthorized
- `404` — Session not found in this event, or QR code did not match a registration
- `409` — Session check-in is disabled for this session (CHECK_IN_DISABLED)
- `422` — Either ACCOUNT_NOT_LINKED (scanned registration is not yet linked to a Zuddl account) or INELIGIBLE_FOR_SESSION (attendee is not in the session's configured audience for its check-in permission type)

---

[API](https://skmtc.net/zuddl/apis/zuddl-webhook-documentation.md) · [All operations](https://skmtc.net/zuddl/apis/zuddl-webhook-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zuddl/zuddl-webhook-documentation/revisions/571c1d41e62a/schema)
