> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getparable.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Data model

# Check-ins Data Model

This document provides complete documentation of the Planning Center Check-ins data model in Parable, including all tables, fields, and relationships.

## Overview

The Check-ins module contains **26 tables** supporting attendance tracking, child safety, volunteer management, and event organization.

## Visual Data Model

<Tip>
  The diagram below shows the core entities and their relationships in the Check-ins module. Use it as a visual reference while exploring the detailed table definitions below.
</Tip>

### Core Entity Relationships

<Frame>
  <img src="https://mintcdn.com/parable/dIkTtcPi0zjaWA0V/diagrams/planning-center/check-ins-data-model-01.svg?fit=max&auto=format&n=dIkTtcPi0zjaWA0V&q=85&s=f5804c73db0ac4f4cc17a640d2a444c0" alt="Check-ins module data model" width="3563" height="2231" data-path="diagrams/planning-center/check-ins-data-model-01.svg" />
</Frame>

[Open diagram in new tab →](/diagrams/planning-center/check-ins-data-model-01.svg)

### Key Relationships Explained

**Event & Time Structure:**

* `EVENT`s represent recurring check-in programs (Sunday School, Nursery, etc.)
* `EVENT_TIME`s are specific time slots when events occur
* `EVENT_PERIOD`s define date ranges when events are active
* `LOCATION_EVENT_TIME` links locations to specific time slots

**Check-in Flow:**

1. Person arrives at a `LOCATION` during an `EVENT_TIME`
2. `CHECKIN` record created with security code
3. Labels printed based on `EVENT_LABEL` and `LOCATION_LABEL` configurations
4. `PERSON_EVENT` tracks long-term attendance patterns

**Label System:**

* `LABEL`s define printable tags (name tags, security labels, allergy alerts)
* `EVENT_LABEL` determines which labels print for an event
* `LOCATION_LABEL` determines which labels print at a location
* Multiple label types can apply to single check-in

**Security & Safety:**

* `PASS`es provide reusable check-in codes
* Security codes generated per check-in for child pickup
* `STATION`s configure check-in kiosks and admin workstations
* `THEME`s customize check-in interface appearance

**Headcount Tracking:**

* `HEADCOUNT` records aggregate attendance by type
* `ATTENDANCE_TYPE` categorizes attendees (kids, volunteers, guests)
* Tracked per `EVENT_TIME` for capacity planning

**Generic Relationship Pattern:**

* Check-in groups via `checkins_checkin_relationships`
* Event associations via `checkins_event_relationships`

## Query Requirements

### Schema Prefix

**IMPORTANT:** All tables in the Planning Center Check-ins module are in the `planning_center` schema. You MUST prefix all table names with `planning_center.` in your queries.

✅ CORRECT: `SELECT * FROM planning_center.checkins_checkins`
❌ INCORRECT: `SELECT * FROM checkins_checkins`

### Row Level Security (RLS)

This database uses Row Level Security (RLS) to automatically filter data based on:

* **tenant\_organization\_id**: You only see data for your current organization
* **system\_status**: You only see 'active' records by default

**DO NOT add these filters to your WHERE clause** - they are applied automatically:

* ❌ `WHERE tenant_organization_id = 1` (unnecessary)
* ❌ `WHERE system_status = 'active'` (unnecessary)

The RLS policies ensure you only access data you're authorized to see. Adding these filters is redundant and can negatively impact query speed.

## Core Tables Overview

### Primary Entity Tables

* `checkins_checkins` - Individual check-in records
* `checkins_people` - People who check in
* `checkins_events` - Event definitions (Sunday Service, Youth Group, etc.)
* `checkins_event_times` - Specific instances of events
* `checkins_event_periods` - Active check-in sessions
* `checkins_locations` - Physical and logical locations
* `checkins_stations` - Check-in kiosk stations
* `checkins_labels` - Print labels for check-ins
* `checkins_headcounts` - Manual attendance counts
* `checkins_checkin_times` - Specific check-in time records

### Supporting Entity Tables

* `checkins_attendance_types` - Types of attendance tracking
* `checkins_checkin_groups` - Groups of check-ins processed together
* `checkins_event_labels` - Labels associated with events
* `checkins_location_event_periods` - Location-specific period counts
* `checkins_location_event_times` - Location-specific time counts
* `checkins_location_labels` - Labels for locations
* `checkins_options` - Label printing options
* `checkins_passes` - Pass codes for check-ins
* `checkins_person_events` - Person-event connections
* `checkins_themes` - Visual themes for stations
* `checkins_organizations` - Organization settings
* `checkins_integration_links` - External system integrations

### Relationship Tables

* `checkins_checkin_relationships` - Links check-ins to other entities
* `checkins_event_relationships` - Links events to related entities
* `checkins_eventtime_relationships` - Links event times to events and locations
* `checkins_location_relationships` - Links locations to parents and events

## Table Definitions

### checkins\_checkins

The main check-in record table that tracks individual check-ins.

| Column                           | Type        | Description                                    |
| -------------------------------- | ----------- | ---------------------------------------------- |
| `id`                             | UUID        | Internal unique identifier                     |
| `check_in_id`                    | VARCHAR(64) | Planning Center check-in ID                    |
| `first_name`                     | VARCHAR(64) | First name of person checking in               |
| `last_name`                      | VARCHAR(64) | Last name of person checking in                |
| `kind`                           | VARCHAR(64) | Type: 'Regular', 'Guest', 'Volunteer'          |
| `one_time_guest`                 | BOOLEAN     | True if first-time guest                       |
| `security_code`                  | VARCHAR(64) | Security code for child pickup                 |
| `number`                         | INTEGER     | Check-in number                                |
| `medical_notes`                  | TEXT        | Medical information or allergies               |
| `emergency_contact_name`         | VARCHAR(64) | Emergency contact name                         |
| `emergency_contact_phone_number` | VARCHAR(64) | Emergency contact phone                        |
| `created_at`                     | TIMESTAMP   | When check-in was created                      |
| `updated_at`                     | TIMESTAMP   | Last update time                               |
| `confirmed_at`                   | TIMESTAMP   | When check-in was confirmed                    |
| `checked_out_at`                 | TIMESTAMP   | When person checked out                        |
| `event_period_id`                | VARCHAR(64) | Associated event period                        |
| `person_id`                      | VARCHAR(64) | Associated person ID                           |
| `event_id`                       | VARCHAR(64) | Associated event ID                            |
| `checked_in_at_id`               | VARCHAR(64) | Station where checked in                       |
| `checked_in_by_id`               | VARCHAR(64) | Person who checked them in                     |
| `checked_out_by_id`              | VARCHAR(64) | Person who checked them out                    |
| `tenant_organization_id`         | INTEGER     | Organization identifier                        |
| `system_status`                  | VARCHAR(50) | Data status: 'active', 'transferring', 'stale' |
| `system_created_at`              | TIMESTAMP   | When record was created in Parable             |
| `system_updated_at`              | TIMESTAMP   | When record was last updated in Parable        |

### checkins\_people

People who have checked in to events.

| Column                    | Type          | Description                             |
| ------------------------- | ------------- | --------------------------------------- |
| `id`                      | UUID          | Internal unique identifier              |
| `person_id`               | VARCHAR(64)   | Planning Center person ID               |
| `avatar_url`              | VARCHAR(2048) | Avatar image URL                        |
| `birthdate`               | DATE          | Date of birth                           |
| `check_in_count`          | INTEGER       | Total check-ins                         |
| `child`                   | BOOLEAN       | True if child                           |
| `created_at`              | TIMESTAMP     | When person was created                 |
| `demographic_avatar_url`  | VARCHAR(2048) | Demographic profile image URL           |
| `first_name`              | VARCHAR(64)   | First name                              |
| `gender`                  | VARCHAR(64)   | Gender                                  |
| `grade`                   | INTEGER       | School grade level                      |
| `headcounter`             | BOOLEAN       | Can do headcounts                       |
| `ignore_filters`          | BOOLEAN       | Ignores event filters                   |
| `last_checked_in_at`      | TIMESTAMP     | Last check-in time                      |
| `last_name`               | VARCHAR(64)   | Last name                               |
| `medical_notes`           | TEXT          | Medical information                     |
| `middle_name`             | VARCHAR(64)   | Middle name                             |
| `name`                    | VARCHAR(64)   | Full name                               |
| `name_prefix`             | VARCHAR(64)   | Name prefix (Mr., Mrs., etc.)           |
| `name_suffix`             | VARCHAR(64)   | Name suffix (Jr., Sr., etc.)            |
| `passed_background_check` | BOOLEAN       | Background check status                 |
| `permission`              | VARCHAR(50)   | Permission level                        |
| `top_permission`          | VARCHAR(50)   | Highest permission level                |
| `updated_at`              | TIMESTAMP     | Last update time                        |
| `organization_id`         | VARCHAR(64)   | Organization ID                         |
| `tenant_organization_id`  | INTEGER       | Organization identifier                 |
| `system_status`           | VARCHAR(50)   | Data status                             |
| `system_created_at`       | TIMESTAMP     | When record was created in Parable      |
| `system_updated_at`       | TIMESTAMP     | When record was last updated in Parable |

### checkins\_events

Recurring event definitions (e.g., "Sunday Service", "Youth Group").

| Column                        | Type         | Description                             |
| ----------------------------- | ------------ | --------------------------------------- |
| `id`                          | UUID         | Internal unique identifier              |
| `event_id`                    | VARCHAR(64)  | Planning Center event ID                |
| `name`                        | VARCHAR(255) | Event name                              |
| `frequency`                   | VARCHAR(64)  | How often event occurs                  |
| `enable_services_integration` | BOOLEAN      | Links to Services module                |
| `location_times_enabled`      | BOOLEAN      | Uses location-specific times            |
| `pre_select_enabled`          | BOOLEAN      | Pre-selection allowed                   |
| `integration_key`             | VARCHAR(64)  | Integration identifier                  |
| `archived_at`                 | TIMESTAMP    | When event was archived                 |
| `created_at`                  | TIMESTAMP    | When event was created                  |
| `updated_at`                  | TIMESTAMP    | Last update time                        |
| `tenant_organization_id`      | INTEGER      | Organization identifier                 |
| `system_status`               | VARCHAR(50)  | Data status                             |
| `system_created_at`           | TIMESTAMP    | When record was created in Parable      |
| `system_updated_at`           | TIMESTAMP    | When record was last updated in Parable |

### checkins\_event\_times

Specific instances of events with start and end times.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `event_time_id`          | VARCHAR(64) | Planning Center event time ID           |
| `created_at`             | TIMESTAMP   | When created                            |
| `day_of_week`            | INTEGER     | Day of week (0-6)                       |
| `guest_count`            | INTEGER     | Number of guests                        |
| `hides_at`               | TIMESTAMP   | When event time is hidden               |
| `hour`                   | INTEGER     | Hour of day (0-23)                      |
| `minute`                 | INTEGER     | Minute of the hour                      |
| `name`                   | TEXT        | Event time name                         |
| `regular_count`          | INTEGER     | Number of regular attendees             |
| `shows_at`               | TIMESTAMP   | When event time is shown                |
| `starts_at`              | TIMESTAMP   | Event start time                        |
| `total_count`            | INTEGER     | Total attendance count                  |
| `updated_at`             | TIMESTAMP   | Last update                             |
| `volunteer_count`        | INTEGER     | Number of volunteers                    |
| `event_id`               | VARCHAR(64) | Parent event ID                         |
| `event_period_id`        | VARCHAR(64) | Associated event period ID              |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_event\_periods

Active check-in sessions for events.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `event_period_id`        | VARCHAR(64) | Planning Center event period ID         |
| `created_at`             | TIMESTAMP   | When created                            |
| `ends_at`                | TIMESTAMP   | Period end time                         |
| `guest_count`            | INTEGER     | Guest count                             |
| `note`                   | TEXT        | Period notes                            |
| `regular_count`          | INTEGER     | Regular attendee count                  |
| `starts_at`              | TIMESTAMP   | Period start time                       |
| `volunteer_count`        | INTEGER     | Volunteer count                         |
| `quantity`               | INTEGER     | Total quantity                          |
| `updated_at`             | TIMESTAMP   | Last update                             |
| `event_id`               | VARCHAR(64) | Associated event                        |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_locations

Physical locations (rooms) and logical groupings.

| Column                    | Type         | Description                             |
| ------------------------- | ------------ | --------------------------------------- |
| `id`                      | UUID         | Internal unique identifier              |
| `location_id`             | VARCHAR(64)  | Planning Center location ID             |
| `name`                    | VARCHAR(255) | Location name                           |
| `kind`                    | VARCHAR(255) | Type: 'Folder', 'Location', etc.        |
| `opened`                  | BOOLEAN      | Currently open for check-ins            |
| `child_or_adult`          | VARCHAR(50)  | 'child' or 'adult'                      |
| `gender`                  | VARCHAR(50)  | Gender restriction if any               |
| `age_min_in_months`       | INTEGER      | Minimum age in months                   |
| `age_max_in_months`       | INTEGER      | Maximum age in months                   |
| `age_on`                  | DATE         | Date for age calculation                |
| `age_range_by`            | VARCHAR(255) | How age range is determined             |
| `grade_min`               | INTEGER      | Minimum grade level                     |
| `grade_max`               | INTEGER      | Maximum grade level                     |
| `max_occupancy`           | INTEGER      | Room capacity                           |
| `min_volunteers`          | INTEGER      | Minimum volunteers required             |
| `attendees_per_volunteer` | INTEGER      | Required ratio                          |
| `milestone`               | VARCHAR(255) | Associated milestone                    |
| `position`                | INTEGER      | Sort order                              |
| `effective_date`          | DATE         | When settings take effect               |
| `created_at`              | TIMESTAMP    | When created                            |
| `updated_at`              | TIMESTAMP    | Last update                             |
| `parent_id`               | VARCHAR(64)  | Parent location ID                      |
| `event_id`                | VARCHAR(64)  | Associated event                        |
| `tenant_organization_id`  | INTEGER      | Organization identifier                 |
| `system_status`           | VARCHAR(50)  | Data status                             |
| `system_created_at`       | TIMESTAMP    | When record was created in Parable      |
| `system_updated_at`       | TIMESTAMP    | When record was last updated in Parable |

### checkins\_stations

Check-in kiosk stations.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `station_id`             | VARCHAR(64) | Planning Center station ID              |
| `created_at`             | TIMESTAMP   | When created                            |
| `input_type`             | TEXT        | Input method                            |
| `input_type_options`     | TEXT        | Input configuration                     |
| `mode`                   | INTEGER     | Station mode                            |
| `name`                   | TEXT        | Station name                            |
| `timeout_seconds`        | INTEGER     | Session timeout in seconds              |
| `updated_at`             | TIMESTAMP   | Last update                             |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_labels

Print labels for check-ins.

| Column                   | Type         | Description                             |
| ------------------------ | ------------ | --------------------------------------- |
| `id`                     | UUID         | Internal unique identifier              |
| `label_id`               | VARCHAR(64)  | Planning Center label ID                |
| `created_at`             | TIMESTAMP    | When created                            |
| `name`                   | VARCHAR(255) | Label name                              |
| `prints_for`             | VARCHAR(255) | Who gets this label                     |
| `roll`                   | VARCHAR(255) | Label roll type                         |
| `updated_at`             | TIMESTAMP    | Last update                             |
| `xml`                    | TEXT         | Label XML definition                    |
| `tenant_organization_id` | INTEGER      | Organization identifier                 |
| `system_status`          | VARCHAR(50)  | Data status                             |
| `system_created_at`      | TIMESTAMP    | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP    | When record was last updated in Parable |

### checkins\_headcounts

Manual attendance counts.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `headcount_id`           | VARCHAR(64) | Planning Center headcount ID            |
| `total`                  | INTEGER     | Total count                             |
| `updated_at`             | TIMESTAMP   | When count was updated                  |
| `created_at`             | TIMESTAMP   | When count was created                  |
| `attendance_type_id`     | VARCHAR(64) | Type of attendance                      |
| `event_time_id`          | VARCHAR(64) | Associated event time                   |
| `location_id`            | VARCHAR(64) | Associated location                     |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_checkin\_times

Specific times when people checked into locations.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `check_in_time_id`       | VARCHAR(64) | Planning Center check-in time ID        |
| `kind`                   | VARCHAR(64) | Type of check-in time                   |
| `event_time_id`          | VARCHAR(64) | Associated event time                   |
| `location_id`            | VARCHAR(64) | Associated location                     |
| `check_in_id`            | VARCHAR(64) | Parent check-in ID                      |
| `pre_check_id`           | VARCHAR(64) | Pre-check identifier                    |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_attendance\_types

Types of attendance tracking for events.

| Column                   | Type         | Description                             |
| ------------------------ | ------------ | --------------------------------------- |
| `id`                     | UUID         | Internal unique identifier              |
| `attendance_type_id`     | VARCHAR(64)  | Planning Center attendance type ID      |
| `color`                  | VARCHAR(255) | Display color                           |
| `created_at`             | TIMESTAMP    | When created                            |
| `attendance_limit`       | INTEGER      | Maximum attendance                      |
| `name`                   | VARCHAR(64)  | Attendance type name                    |
| `updated_at`             | TIMESTAMP    | Last update                             |
| `event_id`               | VARCHAR(64)  | Associated event ID                     |
| `tenant_organization_id` | INTEGER      | Organization identifier                 |
| `system_status`          | VARCHAR(50)  | Data status                             |
| `system_created_at`      | TIMESTAMP    | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP    | When record was last updated in Parable |

### checkins\_checkin\_groups

Groups of check-ins processed together for printing labels.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `check_in_group_id`      | VARCHAR(64) | Planning Center check-in group ID       |
| `check_ins_count`        | INTEGER     | Number of check-ins in group            |
| `created_at`             | TIMESTAMP   | When group was created                  |
| `name_labels_count`      | INTEGER     | Number of name labels                   |
| `print_status`           | VARCHAR(64) | Printing status                         |
| `security_labels_count`  | INTEGER     | Number of security labels               |
| `updated_at`             | TIMESTAMP   | Last update                             |
| `event_period_id`        | VARCHAR(64) | Associated event period                 |
| `print_station_id`       | VARCHAR(64) | Print station ID                        |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_event\_labels

Labels associated with specific events.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `event_label_id`         | VARCHAR(64) | Planning Center event label ID          |
| `created_at`             | TIMESTAMP   | When created                            |
| `for_guest`              | BOOLEAN     | Print for guests                        |
| `for_regular`            | BOOLEAN     | Print for regular attendees             |
| `for_volunteer`          | BOOLEAN     | Print for volunteers                    |
| `quantity`               | INTEGER     | Number of labels to print               |
| `updated_at`             | TIMESTAMP   | Last update                             |
| `event_id`               | VARCHAR(64) | Associated event ID                     |
| `label_id`               | VARCHAR(64) | Associated label ID                     |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_location\_event\_periods

Location-specific attendance counts for event periods.

| Column                     | Type        | Description                              |
| -------------------------- | ----------- | ---------------------------------------- |
| `id`                       | UUID        | Internal unique identifier               |
| `location_event_period_id` | VARCHAR(64) | Planning Center location event period ID |
| `created_at`               | TIMESTAMP   | When created                             |
| `guest_count`              | INTEGER     | Guest count for this location            |
| `regular_count`            | INTEGER     | Regular attendee count for this location |
| `updated_at`               | TIMESTAMP   | Last update                              |
| `volunteer_count`          | INTEGER     | Volunteer count for this location        |
| `event_period_id`          | VARCHAR(64) | Associated event period                  |
| `location_id`              | VARCHAR(64) | Associated location                      |
| `tenant_organization_id`   | INTEGER     | Organization identifier                  |
| `system_status`            | VARCHAR(50) | Data status                              |
| `system_created_at`        | TIMESTAMP   | When record was created in Parable       |
| `system_updated_at`        | TIMESTAMP   | When record was last updated in Parable  |

### checkins\_location\_event\_times

Location-specific attendance counts for event times.

| Column                   | Type        | Description                              |
| ------------------------ | ----------- | ---------------------------------------- |
| `id`                     | UUID        | Internal unique identifier               |
| `location_event_time_id` | VARCHAR(64) | Planning Center location event time ID   |
| `created_at`             | TIMESTAMP   | When created                             |
| `guest_count`            | INTEGER     | Guest count for this location            |
| `regular_count`          | INTEGER     | Regular attendee count for this location |
| `updated_at`             | TIMESTAMP   | Last update                              |
| `volunteer_count`        | INTEGER     | Volunteer count for this location        |
| `event_time_id`          | VARCHAR(64) | Associated event time                    |
| `location_id`            | VARCHAR(64) | Associated location                      |
| `tenant_organization_id` | INTEGER     | Organization identifier                  |
| `system_status`          | VARCHAR(50) | Data status                              |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable       |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable  |

### checkins\_location\_labels

Labels associated with specific locations.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `location_label_id`      | VARCHAR(64) | Planning Center location label ID       |
| `created_at`             | TIMESTAMP   | When created                            |
| `for_guest`              | BOOLEAN     | Print for guests                        |
| `for_regular`            | BOOLEAN     | Print for regular attendees             |
| `for_volunteer`          | BOOLEAN     | Print for volunteers                    |
| `quantity`               | INTEGER     | Number of labels to print               |
| `updated_at`             | TIMESTAMP   | Last update                             |
| `label_id`               | VARCHAR(64) | Associated label ID                     |
| `location_id`            | VARCHAR(64) | Associated location ID                  |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_options

Label printing options and configurations.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `option_id`              | VARCHAR(64) | Planning Center option ID               |
| `body`                   | TEXT        | Option configuration body               |
| `created_at`             | TIMESTAMP   | When created                            |
| `quantity`               | INTEGER     | Quantity setting                        |
| `updated_at`             | TIMESTAMP   | Last update                             |
| `label_id`               | VARCHAR(64) | Associated label ID                     |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_passes

Pass codes for secure check-ins.

| Column                   | Type         | Description                             |
| ------------------------ | ------------ | --------------------------------------- |
| `id`                     | UUID         | Internal unique identifier              |
| `pass_id`                | VARCHAR(64)  | Planning Center pass ID                 |
| `code`                   | VARCHAR(255) | Pass code                               |
| `created_at`             | TIMESTAMP    | When created                            |
| `kind`                   | VARCHAR(255) | Type of pass                            |
| `updated_at`             | TIMESTAMP    | Last update                             |
| `person_id`              | VARCHAR(64)  | Associated person ID                    |
| `tenant_organization_id` | INTEGER      | Organization identifier                 |
| `system_status`          | VARCHAR(50)  | Data status                             |
| `system_created_at`      | TIMESTAMP    | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP    | When record was last updated in Parable |

### checkins\_person\_events

Connections between people and events they've attended.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `person_event_id`        | VARCHAR(64) | Planning Center person event ID         |
| `check_in_count`         | INTEGER     | Number of check-ins for this event      |
| `created_at`             | TIMESTAMP   | When created                            |
| `updated_at`             | TIMESTAMP   | Last update                             |
| `event_id`               | VARCHAR(64) | Associated event ID                     |
| `first_check_in_id`      | VARCHAR(64) | First check-in ID                       |
| `last_check_in_id`       | VARCHAR(64) | Most recent check-in ID                 |
| `person_id`              | VARCHAR(64) | Associated person ID                    |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_themes

Visual themes for check-in stations.

| Column                   | Type        | Description                             |
| ------------------------ | ----------- | --------------------------------------- |
| `id`                     | UUID        | Internal unique identifier              |
| `theme_id`               | VARCHAR(64) | Planning Center theme ID                |
| `background_color`       | TEXT        | Background color                        |
| `color`                  | TEXT        | Primary color                           |
| `created_at`             | TIMESTAMP   | When created                            |
| `image_thumbnail`        | TEXT        | Thumbnail image URL                     |
| `mode`                   | TEXT        | Theme mode                              |
| `name`                   | TEXT        | Theme name                              |
| `text_color`             | TEXT        | Text color                              |
| `updated_at`             | TIMESTAMP   | Last update                             |
| `tenant_organization_id` | INTEGER     | Organization identifier                 |
| `system_status`          | VARCHAR(50) | Data status                             |
| `system_created_at`      | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP   | When record was last updated in Parable |

### checkins\_organizations

Organization settings and configuration.

| Column                   | Type          | Description                             |
| ------------------------ | ------------- | --------------------------------------- |
| `id`                     | UUID          | Internal unique identifier              |
| `organization_id`        | VARCHAR(64)   | Planning Center organization ID         |
| `avatar_url`             | VARCHAR(2048) | Organization avatar URL                 |
| `created_at`             | TIMESTAMP     | When created                            |
| `daily_check_ins`        | INTEGER       | Daily check-in count                    |
| `date_format_pattern`    | VARCHAR(64)   | Date format pattern                     |
| `name`                   | VARCHAR(255)  | Organization name                       |
| `time_zone`              | VARCHAR(64)   | Organization time zone                  |
| `updated_at`             | TIMESTAMP     | Last update                             |
| `tenant_organization_id` | INTEGER       | Organization identifier                 |
| `system_status`          | VARCHAR(50)   | Data status                             |
| `system_created_at`      | TIMESTAMP     | When record was created in Parable      |
| `system_updated_at`      | TIMESTAMP     | When record was last updated in Parable |

### checkins\_integration\_links

Links to external systems and integrations.

| Column                         | Type        | Description                             |
| ------------------------------ | ----------- | --------------------------------------- |
| `id`                           | UUID        | Internal unique identifier              |
| `integration_link_id`          | VARCHAR(64) | Planning Center integration link ID     |
| `remote_app`                   | TEXT        | Remote application name                 |
| `remote_gid`                   | TEXT        | Remote global ID                        |
| `remote_id`                    | TEXT        | Remote ID                               |
| `remote_type`                  | TEXT        | Remote type                             |
| `sync_future_assignment_types` | BOOLEAN     | Sync future assignments                 |
| `local`                        | VARCHAR(64) | Local identifier                        |
| `tenant_organization_id`       | INTEGER     | Organization identifier                 |
| `system_status`                | VARCHAR(50) | Data status                             |
| `system_created_at`            | TIMESTAMP   | When record was created in Parable      |
| `system_updated_at`            | TIMESTAMP   | When record was last updated in Parable |

## Relationship Tables

### checkins\_checkin\_relationships

Links check-ins to people, events, locations, and other entities.

| Column                   | Type        | Description                               |
| ------------------------ | ----------- | ----------------------------------------- |
| `id`                     | UUID        | Internal unique identifier                |
| `checkin_id`             | VARCHAR(64) | Check-in ID                               |
| `relationship_type`      | VARCHAR(50) | Type: 'Person', 'Event', 'Location', etc. |
| `relationship_id`        | VARCHAR(64) | ID of related entity                      |
| `tenant_organization_id` | INTEGER     | Organization identifier                   |
| `system_status`          | VARCHAR(50) | Data status                               |
| `system_created_at`      | TIMESTAMP   | When created                              |
| `system_updated_at`      | TIMESTAMP   | Last update                               |

Common relationship types:

* `Person` - Links to checkins\_people
* `Event` - Links to checkins\_events
* `EventTime` - Links to checkins\_event\_times
* `EventPeriod` - Links to checkins\_event\_periods
* `Location` - Links to checkins\_locations

### checkins\_event\_relationships

Links events to other entities.

| Column                   | Type        | Description                |
| ------------------------ | ----------- | -------------------------- |
| `id`                     | UUID        | Internal unique identifier |
| `event_id`               | VARCHAR(64) | Event ID                   |
| `relationship_type`      | VARCHAR(50) | Type of relationship       |
| `relationship_id`        | VARCHAR(64) | ID of related entity       |
| `tenant_organization_id` | INTEGER     | Organization identifier    |
| `system_status`          | VARCHAR(50) | Data status                |
| `system_created_at`      | TIMESTAMP   | When created               |
| `system_updated_at`      | TIMESTAMP   | Last update                |

### checkins\_location\_relationships

Links locations to parent locations and events.

| Column                   | Type        | Description                   |
| ------------------------ | ----------- | ----------------------------- |
| `id`                     | UUID        | Internal unique identifier    |
| `location_id`            | VARCHAR(64) | Location ID                   |
| `relationship_type`      | VARCHAR(50) | Type: 'Parent', 'Event', etc. |
| `relationship_id`        | VARCHAR(64) | ID of related entity          |
| `tenant_organization_id` | INTEGER     | Organization identifier       |
| `system_status`          | VARCHAR(50) | Data status                   |
| `system_created_at`      | TIMESTAMP   | When created                  |
| `system_updated_at`      | TIMESTAMP   | Last update                   |

### checkins\_eventtime\_relationships

Links event times to events and locations.

| Column                   | Type        | Description                |
| ------------------------ | ----------- | -------------------------- |
| `id`                     | UUID        | Internal unique identifier |
| `eventtime_id`           | VARCHAR(64) | Event time ID              |
| `relationship_type`      | VARCHAR(50) | Type of relationship       |
| `relationship_id`        | VARCHAR(64) | ID of related entity       |
| `tenant_organization_id` | INTEGER     | Organization identifier    |
| `system_status`          | VARCHAR(50) | Data status                |
| `system_created_at`      | TIMESTAMP   | When created               |
| `system_updated_at`      | TIMESTAMP   | Last update                |

## System Fields

All tables include these system fields for data management:

* `tenant_organization_id` - Multi-tenant organization identifier
* `system_status` - Data lifecycle status:
  * `transferring` - Being imported from Planning Center
  * `active` - Current active data
  * `stale` - Marked for removal
* `system_created_at` - When record was created in Parable
* `system_updated_at` - When record was last updated in Parable

## Common Query Patterns

### Joining Check-ins to People

```sql theme={null}
SELECT
    c.*,
    p.first_name,
    p.last_name,
    p.birthdate
FROM planning_center.checkins_checkins c
JOIN planning_center.checkins_checkin_relationships cr
    ON c.check_in_id = cr.checkin_id
    AND cr.relationship_type = 'Person'
JOIN planning_center.checkins_people p
    ON cr.relationship_id = p.person_id;
```

### Joining Check-ins to Locations

```sql theme={null}
SELECT
    c.*,
    l.name as location_name,
    l.max_occupancy
FROM planning_center.checkins_checkins c
JOIN planning_center.checkins_checkin_relationships cr
    ON c.check_in_id = cr.checkin_id
    AND cr.relationship_type = 'Location'
JOIN planning_center.checkins_locations l
    ON cr.relationship_id = l.location_id;
```

### Finding Location Hierarchy

```sql theme={null}
WITH RECURSIVE location_tree AS (
    SELECT
        location_id,
        name,
        parent_id,
        0 as level
    FROM planning_center.checkins_locations
    WHERE parent_id IS NULL
    
    UNION ALL
    
    SELECT
        l.location_id,
        l.name,
        l.parent_id,
        lt.level + 1
    FROM planning_center.checkins_locations l
    JOIN location_tree lt ON l.parent_id = lt.location_id
)
SELECT * FROM location_tree;
```

## Data Integrity Rules

1. **Schema Qualification**: Always use `planning_center.` prefix for all table references
2. **Row Level Security**: RLS automatically handles multi-tenancy and status filtering - do not add manual filters
3. **Monetary Values**: Any fee or purchase columns are stored in cents - divide by 100.0 for display
4. **Check-in Status Flags**: Use fields like `confirmed_at`, `checked_out_at`, and `headcount_type` instead of relying on `system_status`
5. **Direct ID Columns**: Core tables such as `checkins_checkins` and `checkins_event_times` expose direct IDs for fast joins

## Common Mistakes to Avoid

1. **Missing Schema Prefix**
   * ❌ `FROM checkins_checkins`
   * ✅ `FROM planning_center.checkins_checkins`

2. **Adding Redundant RLS Filters**
   * ❌ `WHERE tenant_organization_id = 1 AND system_status = 'active'`
   * ✅ Trust RLS to handle this automatically

3. **Joining Without Schema**
   * ❌ `JOIN checkins_locations l ON ...`
   * ✅ `JOIN planning_center.checkins_locations l ON ...`

4. **Skipping Currency Conversion**
   * ❌ `SELECT fee_cents as fee`
   * ✅ `SELECT fee_cents / 100.0 as fee`

## Performance Considerations

1. **Indexes**: All tables have optimized indexes on:
   * Primary keys and entity IDs
   * Join columns and foreign keys
   * Date columns for time-based queries

2. **Query Optimization**:
   * Always use the `planning_center.` schema prefix
   * RLS handles tenant and status filtering automatically
   * Filter by event period or location status when relevant
   * Consider using CTEs for complex hierarchical queries
   * Use direct ID columns when available instead of relationship tables

## Next Steps

* Return to [Basic Queries](/planning-center/check-ins/basic-queries) for simple examples
* Review [Advanced Queries](/planning-center/check-ins/advanced-queries) for complex analysis
* Check [Reporting Examples](/planning-center/check-ins/reporting-examples) for production-ready reports
