API Reference

sessions

8 endpoints

POST/api/v1/sessions/{session_slug}/attend

Attend Session

Check in to a session using a tagged-union identifier (wallet, card, username, etc).

Self-service: the resolved identity must match the token subject. On-behalf-of: requires activity:attendees:manage with an org-scoped token matching the session's parent activity.

Ticket-gated sessions (effective requires_ticket=True) require the resolved identity to hold a valid ticket for the activity before attendance is recorded; walk-in sessions skip this gate entirely.

Path parameters

session_slug*string

Query parameters

default_backendstring

default: "primary"

Request body*application/json

FieldTypeDescription
identifier*IdentifierRef

object · IdentifierRef

FieldTypeDescription
type*enum

How to interpret `value`

value*string

Identifier value (card uid, wallet address, username, user uuid, or Davi link)

idempotency_keystring | null
proof_metadataobject | null

Responses

200Successful Response
FieldTypeDescription
status*string
action_taken*string
attendance_proof_tx_idstring | null
ticketHeldTicketRef | null

object · HeldTicketRef

FieldTypeDescription
transaction_id*string

Ledger transaction ID of the redeemed ticket reward

template_uuid*string

UUID of the reward template the ticket was issued from

wallet_address*string

Wallet address holding the valid ticket

userCheckinUser | null

object · CheckinUser

FieldTypeDescription
display_namestring | null
avatar_urlstring | null
400Invalid request
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

401Authentication failed
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

403Insufficient permissions
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

404Resource not found
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

422Validation error
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

Example request

curl -X POST "https://api.davi.social/api/v1/sessions/{session_slug}/attend" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{ /* request body */ }'
GET/api/v1/sessions/{session_slug}/attendee-status

Get Attendee Status

Check attendee status for a wallet in a session.

Returns the attendee record if registered, or null if not registered. Useful for checking status before attempting registration or check-in.

Path parameters

session_slug*string

Query parameters

wallet_address*string

Wallet address to check

default_backendstring

default: "primary"

Responses

200Successful Response
FieldTypeDescription
uuid*string
activity_uuid*string
session_uuidstring | null
wallet_address*string
user_uuidstring | null
status*enum
registered_at*string (date-time)
attended_atstring (date-time) | null
additional_dataobject | null
created_at*string (date-time)
updated_atstring (date-time) | null
usernamestring | null
display_namestring | null
avatar_urlstring | null
proof_tx_idstring | null
proof_verifiedboolean | null
proof_tx_hashstring | null
proof_amountnumber | null
401Authentication failed
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

403Insufficient permissions
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

404Resource not found
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

422Validation error
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

Example request

curl -X GET "https://api.davi.social/api/v1/sessions/{session_slug}/attendee-status" \
  -H "Authorization: Bearer <token>"
GET/api/v1/sessions/{session_slug}/eligibility

Get Session Eligibility

Tell a client what a tagged-union identifier can do for a session.

Read-only. Resolves the identifier, looks up attendee and ticket state, and reports the conclusion, so a door page does not reimplement the rules and cannot disagree with what check-in will actually do.

recommended_action is the one action worth offering: checkin when check-in would succeed, register when a ticket is the only thing missing and one can still be issued, none when neither applies. blocked_reason names why, when something stands in the way:

  • checkin_closed — check-in is switched off for the session or its event
  • membership_required — the session is gated on a membership or tier the identity does not hold
  • registration_closed — a ticket is required, the identity has none, and the ticket behind it is withdrawn or sold out

Unrecognized identifiers propagate as a 404, same as /attend.

Path parameters

session_slug*string

Query parameters

type*string

Identifier type, e.g. 'wallet', 'card'

value*string

Identifier value

default_backendstring

default: "primary"

Responses

200Successful Response
FieldTypeDescription
has_valid_ticket*boolean
attendee_status*string
can_checkin*boolean
blocked_reasonstring | null

What stands in the way, when something does. `checkin_closed`: check-in is switched off for the session or its event. `membership_required`: the session is gated on a membership or tier the identity does not hold. `registration_closed`: a ticket is required, the identity has none, and the ticket behind it is withdrawn or sold out. Treat an unfamiliar value as a plain refusal — the set grows.

recommended_action*string

The one action worth offering: `checkin` when it would succeed, `register` when a ticket is the only thing missing and one can still be issued, `none` when neither applies.

userCheckinUser | null

object · CheckinUser

FieldTypeDescription
display_namestring | null
avatar_urlstring | null
401Authentication failed
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

403Insufficient permissions
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

404Resource not found
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

422Validation error
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

Example request

curl -X GET "https://api.davi.social/api/v1/sessions/{session_slug}/eligibility" \
  -H "Authorization: Bearer <token>"
GET/api/v1/sessions/{session_slug}/attendees

List Session Attendees

List attendees for a specific session.

Path parameters

session_slug*string

Query parameters

include_proofboolean

Include proof transaction info in response

default: false

default_backendstring

default: "primary"

pageinteger

default: 1 · ≥ 1

page_sizeinteger

default: 20 · ≥ 1 · ≤ 100

sort_bystring | null
sort_orderstring

default: "asc"

Responses

200Successful Response
FieldTypeDescription
total_items*integer

Total number of items available

total_pages*integer

Total number of pages available

current_page*integer

Current page number

items*ActivityAttendeeResponse[]

List of items on the current page

array items · ActivityAttendeeResponse

FieldTypeDescription
uuid*string
activity_uuid*string
session_uuidstring | null
wallet_address*string
user_uuidstring | null
status*enum
registered_at*string (date-time)
attended_atstring (date-time) | null
additional_dataobject | null
created_at*string (date-time)
updated_atstring (date-time) | null
usernamestring | null
display_namestring | null
avatar_urlstring | null
proof_tx_idstring | null
proof_verifiedboolean | null
proof_tx_hashstring | null
proof_amountnumber | null
401Authentication failed
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

403Insufficient permissions
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

422Validation error
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

Example request

curl -X GET "https://api.davi.social/api/v1/sessions/{session_slug}/attendees" \
  -H "Authorization: Bearer <token>"
GET/api/v1/sessions/{session_slug}/attendees/{wallet_address}

Get Session Attendee

Read one attendee of a session.

The collection had a read and the item had a write, so a client that updated an attendee could not read back what it wrote.

Path parameters

session_slug*string
wallet_address*string

Query parameters

default_backendstring

default: "primary"

Responses

200Successful Response
FieldTypeDescription
uuid*string
activity_uuid*string
session_uuidstring | null
wallet_address*string
user_uuidstring | null
status*enum
registered_at*string (date-time)
attended_atstring (date-time) | null
additional_dataobject | null
created_at*string (date-time)
updated_atstring (date-time) | null
usernamestring | null
display_namestring | null
avatar_urlstring | null
proof_tx_idstring | null
proof_verifiedboolean | null
proof_tx_hashstring | null
proof_amountnumber | null
401Authentication failed
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

403Insufficient permissions
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

404Resource not found
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

422Validation error
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

Example request

curl -X GET "https://api.davi.social/api/v1/sessions/{session_slug}/attendees/{wallet_address}" \
  -H "Authorization: Bearer <token>"
PATCH/api/v1/sessions/{session_slug}/attendees/{wallet_address}

Update Session Attendee

Update attendee status for a specific session.

Path parameters

session_slug*string
wallet_address*string

Query parameters

status*string
default_backendstring

default: "primary"

Responses

200Successful Response
FieldTypeDescription
uuid*string
activity_uuid*string
session_uuidstring | null
wallet_address*string
user_uuidstring | null
status*enum
registered_at*string (date-time)
attended_atstring (date-time) | null
additional_dataobject | null
created_at*string (date-time)
updated_atstring (date-time) | null
usernamestring | null
display_namestring | null
avatar_urlstring | null
proof_tx_idstring | null
proof_verifiedboolean | null
proof_tx_hashstring | null
proof_amountnumber | null
400Invalid request
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

401Authentication failed
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

403Insufficient permissions
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

404Resource not found
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

422Validation error
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

Example request

curl -X PATCH "https://api.davi.social/api/v1/sessions/{session_slug}/attendees/{wallet_address}" \
  -H "Authorization: Bearer <token>"
GET/api/v1/sessions/{session_slug}

Get Session

Get a session by slug (or uuid, until v1 is frozen).

Path parameters

session_slug*string

Query parameters

default_backendstring

default: "primary"

Responses

200Successful Response
FieldTypeDescription
uuid*string
slug*string
activity_uuid*string
name*string
descriptionstring | null
start_time*string (date-time)
end_time*string (date-time)
max_attendeesinteger | null
is_checkin_openboolean

default: true

requires_ticketboolean | null
required_entitlementstring | null
ticket_template_uuidstring | null
sequence_number*integer
created_at*string (date-time)
updated_atstring (date-time) | null
401Authentication failed
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

403Insufficient permissions
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

404Resource not found
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

422Validation error
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

Example request

curl -X GET "https://api.davi.social/api/v1/sessions/{session_slug}" \
  -H "Authorization: Bearer <token>"
PATCH/api/v1/sessions/{session_slug}

Update Session

Update session details.

Only organization members with activity:update scope can update sessions.

Path parameters

session_slug*string

Query parameters

default_backendstring

default: "primary"

Request body*application/json

FieldTypeDescription
namestring | null

Name of the session

descriptionstring | null

Session description

start_timestring (date-time) | null

Session start time

end_timestring (date-time) | null

Session end time

max_attendeesinteger | null

Optional capacity override (None = inherit from activity)

≥ 1

is_checkin_openboolean | null

Manual toggle for check-in

requires_ticketboolean | null

Require a ticket for this session (None = inherit event default)

required_entitlementstring | null

Entitlement gate for this session (None = inherit event's)

ticket_template_uuidstring | string (uuid) | null

Per-session ticket override (None = inherit event default)

Responses

200Successful Response
FieldTypeDescription
uuid*string
slug*string
activity_uuid*string
name*string
descriptionstring | null
start_time*string (date-time)
end_time*string (date-time)
max_attendeesinteger | null
is_checkin_openboolean

default: true

requires_ticketboolean | null
required_entitlementstring | null
ticket_template_uuidstring | null
sequence_number*integer
created_at*string (date-time)
updated_atstring (date-time) | null
400Invalid request
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

401Authentication failed
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

403Insufficient permissions
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

404Resource not found
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

422Validation error
FieldTypeDescription
errors*object

Map of field names to error messages. Use '_root' for form-level errors.

message*string

Human-readable error summary

codestring | null

Machine-readable error code

Example request

curl -X PATCH "https://api.davi.social/api/v1/sessions/{session_slug}" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{ /* request body */ }'