The export schema
Every table and field in a Venakis data export, with types and relationships, so you or your next supplier know exactly what you have. Schema version 1.
Getting your export
In HQ, go to Settings › Your data and download everything as a ZIP, or one table at a time. It is free, on every plan, as often as you like. Only the account owner can export, because the export contains every client’s personal data.
- export.json holds every table exactly as stored, plus this schema. It is the file to give another system.
- csv/{table}.csv holds one table each: RFC 4180, UTF-8, a header row of field names, empty for no value. Structured fields are written as JSON text. A cell a spreadsheet would run as a formula (starting =, @, or a + or - that isn’t a number) starts with an apostrophe, so opening it in Excel can’t run anything a client typed into a form. The JSON file is never altered.
- Identifiers are UUIDs and never change, so the relationships below survive the export and can be rebuilt anywhere. Times are ISO 8601 in UTC. Money is in pence (the
_minorfields), and VAT rates are in basis points (2000 is 20%).
The API
The same export is available as web endpoints on https://hq.venakis.com/api. They use your signed-in HQ session as the owner. Access keys for unattended, scheduled pulls are planned but do not exist yet, and Data Ownership and Exit will say when they do.
| Endpoint | Returns |
|---|---|
GET /v1/export.zip | Everything: export.json plus one CSV per table, in a ZIP. |
GET /v1/export | Everything, as one JSON document with the schema included. |
GET /v1/export/csv/{table}.csv | One table as CSV, for example /v1/export/csv/customers.csv. |
GET /v1/public/export-schema | This schema, as JSON. No sign-in needed. |
Only what changed. Add ?since= with an ISO 8601 time, for example /v1/export?since=2026-10-01T00:00:00Z, and each table returns only rows added or changed since then (the last column below says which). Deleted rows don’t appear in an incremental pull, so take a full export from time to time. Every export is recorded in your account’s activity log.
The tables
88 tables. A field marked optional can be empty. “Links to” gives the table and field an identifier points at.
tenants
Your business account: name, slug, business type, currency and time zone. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
slug | text | |
name | text | |
profile | deployment_profile | |
vertical | vertical | |
status | tenant_status | |
currency | text | |
timezone | text | |
domain_mode | domain_mode | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
users
People who can sign in to HQ for your business. Passwords are never exported. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
email | text | |
first_name | text | |
last_name | text | |
totp_enabled_at optional | timestamp with time zone | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
tenant_memberships
Which user holds which role (owner, admin, staff) in your business. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
user_id | uuid | users.id |
role | tenant_role | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
locations
Your premises: address, contact details and time zone. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
name | text | |
address_line1 optional | text | |
address_line2 optional | text | |
city optional | text | |
postcode optional | text | |
country | text | |
phone optional | text | |
email optional | text | |
timezone | text | |
is_primary | boolean | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
staff
Staff records, roles, bios and whether each person takes bookings. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
user_id optional | uuid | users.id |
location_id optional | uuid | locations.id |
display_name | text | |
email optional | text | |
phone optional | text | |
job_title optional | text | |
bio optional | text | |
is_bookable | boolean | |
is_active | boolean | |
working_hours optional | jsonb | |
image_asset_id optional | uuid | tenant_assets.id |
sort_order | integer | |
commission_bp optional | integer | |
reports_to_staff_id optional | uuid | staff.id |
employment_type | text | |
started_on optional | date | |
left_on optional | date | |
contracted_minutes_per_week optional | integer | |
holiday_allowance optional | numeric(7, 2) | |
extensions | jsonb | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
customers
Your clients and their contact details, marketing consent and notes. Passwords are never exported. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
user_id optional | uuid | users.id |
email | text | |
first_name | text | |
last_name | text | |
phone optional | text | |
marketing_opt_in | boolean | |
notes optional | text | |
tags | text[] | |
allergies optional | jsonb | |
birthday optional | text | |
health_notes optional | text | |
extensions | jsonb | |
deleted_at optional | timestamp with time zone | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
services
Services and classes: durations, capacities, prices and VAT rates. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
location_id optional | uuid | locations.id |
kind | service_kind | |
name | text | |
slug | text | |
description optional | text | |
category optional | text | |
duration_minutes | integer | |
capacity | integer | |
price_gross_minor | integer | |
vat_rate_bp | integer | |
credit_cost optional | integer | |
buffer_minutes optional | integer | |
cancellation_cutoff_hours optional | integer | |
image_asset_id optional | uuid | tenant_assets.id |
sort_order | integer | |
table_booking | boolean | |
covers_per_slot optional | integer | |
deposit_per_cover_minor optional | integer | |
deposit_from_party_size optional | integer | |
is_active | boolean | |
extensions | jsonb | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
service_sessions
Your class timetable: each scheduled class occurrence. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
service_id | uuid | services.id |
location_id optional | uuid | locations.id |
staff_id optional | uuid | staff.id |
starts_at | timestamp with time zone | |
ends_at | timestamp with time zone | |
capacity_override optional | integer | |
status | session_status | |
series_id optional | uuid | session_series.id |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
bookings
Every booking, including cancelled ones, with price, status, source and notes. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
customer_id | uuid | customers.id |
service_id | uuid | services.id |
session_id optional | uuid | service_sessions.id |
staff_id optional | uuid | staff.id |
location_id optional | uuid | locations.id |
starts_at | timestamp with time zone | |
ends_at | timestamp with time zone | |
status | booking_status | |
source | booking_source | |
price_gross_minor | integer | |
vat_rate_bp | integer | |
paid_with_credits optional | integer | |
cancellation_reason optional | text | |
cancelled_at optional | timestamp with time zone | |
checked_in_at optional | timestamp with time zone | |
checked_in_by optional | uuid | |
notes optional | text | |
party_size optional | integer | |
table_ids | jsonb | |
customer_notes optional | text | |
price_reduction optional | jsonb | |
voucher_id optional | uuid | vouchers.id |
partner_provider optional | text | |
partner_provider_name optional | text | |
partner_channel optional | text | |
partner_ref optional | text | |
extensions | jsonb | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
customer_notes
Dated notes your team wrote about each client. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
customer_id | uuid | customers.id |
body | text | |
author_user_id optional | uuid | users.id |
visibility | rapport_visibility | |
source | customer_note_source | |
deleted_at optional | timestamp with time zone | |
created_at | timestamp with time zone |
rapport_team_rules
Your team rules for voice notes (Rapport): the kinds of change staff must always confirm first. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
tenant_id | uuid | tenants.id |
staff_must_ask | jsonb | |
updated_at | timestamp with time zone |
rapport_entities
The people, organisations, places, events and interests your clients mention (Rapport). A mentioned person who is not a client holds a first name only. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
kind | entity_kind | |
name | text | |
normalised_name | text | |
aliases | text[] | |
valid_until optional | timestamp with time zone | |
merged_into_id optional | uuid | |
deleted_at optional | timestamp with time zone | |
created_at | timestamp with time zone |
rapport_mentions
Which client mentioned which connection, in which note (Rapport). Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
entity_id | uuid | rapport_entities.id |
customer_id | uuid | customers.id |
note_id | uuid | customer_notes.id |
relation | mention_relation | |
detail optional | text | |
confidence | mention_confidence | |
confirmed_at optional | timestamp with time zone | |
rejected_at optional | timestamp with time zone | |
created_at | timestamp with time zone |
rapport_entity_edges
Links between connections (a mentioned person studies at a place), from the note that said so (Rapport). Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
from_entity_id | uuid | rapport_entities.id |
to_entity_id | uuid | rapport_entities.id |
relation | mention_relation | |
note_id | uuid | customer_notes.id |
created_at | timestamp with time zone |
change_sets
Changes made in HQ or by voice (Rapport): who made each set of changes and when, and whether it was undone. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
actor_user_id optional | uuid | users.id |
source | change_source | |
undoes_change_set_id optional | uuid | |
status | change_set_status | |
summary | text | |
created_at | timestamp with time zone |
change_items
Each line of those changes, with what the record looked like before and after (snapshots are kept for 30 days). Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
change_set_id | uuid | change_sets.id |
tenant_id | uuid | tenants.id |
entity_type | change_entity_type | |
entity_id | uuid | |
op | change_op | |
before optional | jsonb | |
after optional | jsonb | |
customer_id optional | uuid | |
visibility | change_visibility | |
owner_user_id optional | uuid | |
summary | text | |
created_at | timestamp with time zone |
customer_consents
Each client's marketing choices (email and SMS) over time, with where each came from. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
customer_id | uuid | customers.id |
channel | text | |
granted | boolean | |
source | text | |
recorded_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone |
session_series
Your repeating class timetable: days, start time and how often. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
service_id | uuid | services.id |
staff_id optional | uuid | staff.id |
weekdays | integer[] | |
start_time | text | |
interval_weeks | integer | |
starts_on | text | |
ends_on optional | text | |
capacity_override optional | integer | |
filled_until optional | text | |
is_active | boolean | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
service_staff
Who does which service, and any price of their own. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
tenant_id | uuid | tenants.id |
service_id | uuid | services.id |
staff_id | uuid | staff.id |
price_gross_minor optional | integer | |
created_at | timestamp with time zone |
staff_time_off
Holidays, sickness, training and other time your team asked for or booked off, with each decision. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
staff_id | uuid | staff.id |
starts_at | timestamp with time zone | |
ends_at | timestamp with time zone | |
reason optional | text | |
created_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone | |
kind | text | |
status | text | |
part_day | boolean | |
allowance_used optional | numeric(7, 2) | |
requested_by_user_id optional | uuid | users.id |
decided_by_user_id optional | uuid | users.id |
decided_at optional | timestamp with time zone | |
decision_note optional | text | |
note optional | text | |
decision_detail optional | jsonb | |
updated_at | timestamp with time zone |
staff_hour_patterns
Each team member's weekly working hours, and the date each pattern starts. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
staff_id | uuid | staff.id |
effective_from | date | |
working_hours optional | jsonb | |
created_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone |
staff_day_overrides
Rota changes for a single day ("this week only"). Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
staff_id | uuid | staff.id |
date | date | |
windows | jsonb | |
note optional | text | |
created_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
staff_change_requests
Requests from your team to change their working hours, and each decision. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
staff_id | uuid | staff.id |
working_hours | jsonb | |
effective_from | date | |
scope | text | |
status | text | |
note optional | text | |
requested_by_user_id optional | uuid | users.id |
decided_by_user_id optional | uuid | users.id |
decided_at optional | timestamp with time zone | |
decision_note optional | text | |
decision_detail optional | jsonb | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
staff_leave_adjustments
Holiday adjustments (carry-over, extra days) with the reason for each. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
staff_id | uuid | staff.id |
leave_year_start | date | |
amount | numeric(7, 2) | |
reason | text | |
created_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone |
staff_records
Team records: emergency contacts, right-to-work checks and notes. Only the owner can export them. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
staff_id | uuid | staff.id |
emergency_contact_name optional | text | |
emergency_contact_relationship optional | text | |
emergency_contact_phone optional | text | |
right_to_work_checked_on optional | date | |
right_to_work_method optional | text | |
contract_document_id optional | uuid | people_documents.id |
notes optional | text | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
staff_qualifications
Team qualifications and certificates, with expiry dates. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
staff_id | uuid | staff.id |
name | text | |
expires_on optional | date | |
document_id optional | uuid | people_documents.id |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
staff_sickness_details
Reasons given for sickness. Health data: only the owner can export it. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
time_off_id | uuid | staff_time_off.id |
tenant_id | uuid | tenants.id |
staff_id | uuid | staff.id |
reason optional | text | |
created_at | timestamp with time zone |
people_documents
Contracts and certificates you uploaded for your team (file names and types; download the files from each person's profile). Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
staff_id | uuid | staff.id |
kind | text | |
filename | text | |
content_type | text | |
byte_size | integer | |
sha256 | text | |
created_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone |
people_settings
Your People settings: approvals, holiday rules, sickness and reminders. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
tenant_id | uuid | tenants.id |
settings | jsonb | |
updated_at | timestamp with time zone |
message_settings
How your emails go out: reminder timing, your added lines, review requests, win-back and where client replies go. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
tenant_id | uuid | tenants.id |
settings | jsonb | |
reply_to_email optional | text | |
reply_to_confirmed_at optional | timestamp with time zone | |
pending_reply_to_email optional | text | |
updated_at | timestamp with time zone |
discount_codes
Your discount codes: what they take off, when and how often they can be used. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
code | text | |
description optional | text | |
kind | text | |
percent_off optional | integer | |
amount_off_minor optional | integer | |
starts_on optional | text | |
ends_on optional | text | |
max_redemptions optional | integer | |
max_per_customer optional | integer | |
service_ids optional | jsonb | |
plan_ids optional | jsonb | |
is_active | boolean | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
discount_redemptions
Each time a discount code was used, and how much it took off. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
discount_code_id | uuid | discount_codes.id |
customer_id optional | uuid | customers.id |
booking_id optional | uuid | bookings.id |
stripe_checkout_session_id optional | text | |
amount_minor | integer | |
pending_until optional | timestamp with time zone | |
created_at | timestamp with time zone |
gift_cards
Gift cards bought or issued: amount, who for, and when they expire. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
code | text | |
initial_minor | integer | |
status | text | |
purchaser_name optional | text | |
purchaser_email optional | text | |
recipient_name optional | text | |
recipient_email optional | text | |
message optional | text | |
expires_at optional | timestamp with time zone | |
stripe_checkout_session_id optional | text | |
issued_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
gift_card_ledger
Every change to a gift card's balance: issued, spent, given back or adjusted. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
gift_card_id | uuid | gift_cards.id |
entry_type | text | |
amount_minor | integer | |
booking_id optional | uuid | bookings.id |
customer_membership_id optional | uuid | customer_memberships.id |
stripe_checkout_session_id optional | text | |
pending_until optional | timestamp with time zone | |
note optional | text | |
actor_user_id optional | uuid | users.id |
created_at | timestamp with time zone |
sales_settings
Your gift card settings: amounts offered and how long cards last. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
tenant_id | uuid | tenants.id |
settings | jsonb | |
updated_at | timestamp with time zone |
dining_areas
Your restaurant's areas, such as the main room or terrace. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
name | text | |
sort_order | integer | |
created_at | timestamp with time zone |
dining_tables
Your tables: seats and whether they can be pushed together. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
area_id optional | uuid | dining_areas.id |
name | text | |
min_seats | integer | |
max_seats | integer | |
joinable | boolean | |
is_active | boolean | |
sort_order | integer | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
products
Menu items and products: prices, sizes, allergens, dietary labels and drink details. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
section_id | uuid | menu_sections.id |
sort_order | integer | |
name | text | |
slug | text | |
description optional | text | |
sku optional | text | |
price_gross_minor | integer | |
sizes | jsonb | |
vat_rate_bp | integer | |
stock_quantity optional | integer | |
is_active | boolean | |
sold_out_until optional | timestamp with time zone | |
image_asset_id optional | uuid | tenant_assets.id |
allergens | jsonb | |
allergens_declared_at optional | timestamp with time zone | |
allergens_confirmed_by_user_id optional | uuid | users.id |
dietary | text[] | |
calories optional | integer | |
spice_level optional | integer | |
contains_alcohol | boolean | |
abv_bp optional | integer | |
ingredients optional | text | |
extensions | jsonb | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
membership_plans
Membership and class-pack plans you sell. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
name | text | |
slug | text | |
description optional | text | |
price_gross_minor | integer | |
vat_rate_bp | integer | |
billing_period | billing_period | |
credits_per_period optional | integer | |
credit_validity_days optional | integer | |
kind | text | |
intro_offer | boolean | |
sort_order | integer | |
is_active | boolean | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
customer_memberships
Which clients hold which membership, and its current period. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
plan_id | uuid | membership_plans.id |
customer_id | uuid | customers.id |
status | membership_status | |
started_at | timestamp with time zone | |
current_period_start | timestamp with time zone | |
current_period_end | timestamp with time zone | |
cancelled_at optional | timestamp with time zone | |
stripe_subscription_id optional | text | |
stripe_account_id optional | text | |
cancel_at_period_end | boolean | |
paused_at optional | timestamp with time zone | |
last_reminder_at optional | timestamp with time zone | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
credit_ledger
Every class-credit movement; a client's balance is the sum of amount. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
customer_id | uuid | customers.id |
membership_id optional | uuid | customer_memberships.id |
booking_id optional | uuid | bookings.id |
voucher_id optional | uuid | vouchers.id |
entry_type | credit_entry_type | |
amount | integer | |
expires_at optional | timestamp with time zone | |
note optional | text | |
created_at | timestamp with time zone |
loyalty_schemes
Your loyalty scheme: stamps or points, what earns, and when unspent balances lapse. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
tenant_id | uuid | tenants.id |
style | text | |
stamps_required | integer | |
points_per_pound | integer | |
earn_on_bookings | boolean | |
earn_on_sales | boolean | |
auto_attend_hours | integer | |
expiry_months optional | integer | |
card_title | text | |
is_active | boolean | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
loyalty_rewards
The rewards clients can spend stamps or points on, and what each costs. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
name | text | |
kind | text | |
cost | integer | |
service_id optional | uuid | services.id |
product_id optional | uuid | products.id |
amount_off_minor optional | integer | |
percent_off optional | integer | |
is_active | boolean | |
sort_order | integer | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
loyalty_ledger
Every stamp or point earned, spent, adjusted, lapsed or reversed, with the reason and what it came from; a client's balance is the sum of amount. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
customer_id | uuid | customers.id |
entry_type | text | |
amount | integer | |
reason | text | |
source_type | text | |
source_id optional | text | |
reward_id optional | uuid | loyalty_rewards.id |
booking_id optional | uuid | bookings.id |
reverses_entry_id optional | uuid | |
actor_user_id optional | uuid | users.id |
created_at | timestamp with time zone |
loyalty_deals
Your automatic deals: quiet-time pricing, first visit, birthday treat and refer a friend. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
kind | text | |
name | text | |
percent_off optional | integer | |
amount_off_minor optional | integer | |
service_ids optional | jsonb | |
days optional | jsonb | |
start_time optional | text | |
end_time optional | text | |
reward_id optional | uuid | loyalty_rewards.id |
is_active | boolean | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
loyalty_referrals
Which client referred which friend, and whether the referral has been rewarded. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
referrer_customer_id | uuid | customers.id |
friend_customer_id | uuid | customers.id |
status | text | |
booking_id optional | uuid | bookings.id |
rewarded_at optional | timestamp with time zone | |
created_at | timestamp with time zone |
loyalty_member_tokens
Each client's referral code. The QR codes scanned at the counter are passes and are never exported. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
customer_id | uuid | customers.id |
tenant_id | uuid | tenants.id |
referral_code | text | |
rotated_at optional | timestamp with time zone | |
created_at | timestamp with time zone |
video_collections
Your video library's collections, in order. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
name | text | |
description optional | text | |
sort_order | integer | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
videos
Your videos: titles, who can watch, length, views, and the ids of each video at Mux (our video host), where the files themselves are kept. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
collection_id optional | uuid | video_collections.id |
title | text | |
description optional | text | |
instructor_staff_id optional | uuid | staff.id |
level optional | text | |
status | text | |
mux_upload_id optional | text | |
mux_asset_id optional | text | |
mux_playback_id optional | text | |
duration_seconds optional | integer | |
thumbnail_time | integer | |
access | text | |
sort_order | integer | |
view_count | integer | |
error optional | text | |
created_by_user_id optional | uuid | users.id |
ready_at optional | timestamp with time zone | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
video_plan_access
Which membership plans can watch which videos. Always the whole table: not filtered by since.
| Field | Type | Links to |
|---|---|---|
video_id | uuid | videos.id |
plan_id | uuid | membership_plans.id |
tenant_id | uuid | tenants.id |
video_progress
Where each client got to in each video, for Continue watching. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
customer_id | uuid | customers.id |
video_id | uuid | videos.id |
tenant_id | uuid | tenants.id |
seconds | integer | |
completed | boolean | |
last_pass_at optional | timestamp with time zone | |
updated_at | timestamp with time zone |
integration_connections
The accounting software you connected (Xero), its status, last sync and the accounts you mapped. The access tokens are never exported. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
provider | text | |
status | text | |
external_id optional | text | |
external_name optional | text | |
settings | jsonb | |
connected_by_user_id optional | uuid | users.id |
connected_at optional | timestamp with time zone | |
last_sync_at optional | timestamp with time zone | |
last_error optional | text | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
integration_sync_runs
Each nightly sales summary sent to your accounting software: the day, the totals and the reference (VNK-YYYY-MM-DD). Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
provider | text | |
run_date | text | |
status | text | |
external_ref optional | text | |
external_id optional | text | |
totals | jsonb | |
attempts | integer | |
error optional | text | |
created_at | timestamp with time zone | |
finished_at optional | timestamp with time zone |
webhook_endpoints
The addresses you send events to (Zapier, Make…) and which events each receives. Signing secrets are never exported. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
url | text | |
description optional | text | |
events | jsonb | |
status | text | |
consecutive_failures | integer | |
paused_at optional | timestamp with time zone | |
created_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
webhook_deliveries
Recent webhook deliveries: the event sent, the answer and the retries (kept for 30 days). Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
endpoint_id | uuid | webhook_endpoints.id |
event_type | text | |
event_key | text | |
payload | jsonb | |
status | text | |
attempts | integer | |
next_attempt_at | timestamp with time zone | |
last_status_code optional | integer | |
last_error optional | text | |
delivered_at optional | timestamp with time zone | |
created_at | timestamp with time zone |
calendar_feed_tokens
Which team members have a private calendar link, and when it was made, last read or revoked. The links themselves are never exported. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
staff_id | uuid | staff.id |
created_by_user_id optional | uuid | users.id |
last_fetched_at optional | timestamp with time zone | |
revoked_at optional | timestamp with time zone | |
created_at | timestamp with time zone |
terminal_readers
The card readers registered on your Stripe account. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
stripe_reader_id | text | |
stripe_location_id | text | |
label | text | |
device_type optional | text | |
status optional | text | |
current_payment_id optional | uuid | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
voucher_deals
The deals you run on Groupon, Wowcher, Treatwell, ClassPass and other sites: what each covers, what you're paid per voucher and when it ends. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
provider | text | |
provider_name optional | text | |
provider_key | text | |
title | text | |
kind | text | |
sessions | integer | |
payout_minor | integer | |
list_price_minor optional | integer | |
expires_on optional | text | |
needs_security_code | boolean | |
only_imported_codes | boolean | |
merchant_url optional | text | |
external_ref optional | text | |
is_active | boolean | |
settings | jsonb | |
created_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
voucher_deal_services
The services each voucher deal covers. Always the whole table: not filtered by since.
| Field | Type | Links to |
|---|---|---|
tenant_id | uuid | tenants.id |
deal_id | uuid | voucher_deals.id |
service_id | uuid | services.id |
sort_order | integer |
vouchers
Every third-party voucher your clients used: the code, its status (to check, checked, redeemed…), the client and what you're paid. Security codes are never exported. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
deal_id | uuid | voucher_deals.id |
provider | text | |
provider_name optional | text | |
provider_key | text | |
code | text | |
status | text | |
source | text | |
customer_id optional | uuid | customers.id |
imported_code_id optional | uuid | voucher_imported_codes.id |
payout_minor | integer | |
sessions_total | integer | |
expires_on optional | text | |
status_note optional | text | |
claimed_at | timestamp with time zone | |
checked_at optional | timestamp with time zone | |
checked_by_user_id optional | uuid | users.id |
redeemed_at optional | timestamp with time zone | |
redeemed_by_user_id optional | uuid | users.id |
status_changed_at | timestamp with time zone | |
external_ref optional | text | |
meta | jsonb | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
voucher_events
Each status change of a voucher, who made it and when. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
voucher_id | uuid | vouchers.id |
from_status optional | text | |
to_status | text | |
actor_type | actor_type | |
actor_user_id optional | uuid | users.id |
note optional | text | |
created_at | timestamp with time zone |
voucher_import_batches
Each list of sold codes you imported (pasted or from a CSV file). Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
deal_id | uuid | voucher_deals.id |
format | text | |
filename optional | text | |
added | integer | |
skipped | integer | |
undone_at optional | timestamp with time zone | |
created_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone |
voucher_imported_codes
The sold codes you imported, and which client used each. Security codes are never exported. Always the whole table: not filtered by since.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
deal_id | uuid | voucher_deals.id |
batch_id optional | uuid | voucher_import_batches.id |
provider_key | text | |
code | text | |
expires_on optional | text | |
claimed_voucher_id optional | uuid | vouchers.id |
created_at | timestamp with time zone |
partner_inbound_settings
Your forwarding address for booking emails from other sites, and your Ask first or Automatic choices. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
tenant_id | uuid | tenants.id |
address_local | text | |
enabled | boolean | |
modes | jsonb | |
auto_actor_user_id optional | uuid | users.id |
ai_fallback | boolean | |
settings | jsonb | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
partner_inbound_emails
Booking emails forwarded from other sites: sender, subject, what we read and what happened. The email itself is deleted after 30 days and never exported. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
provider_email_id | text | |
message_id optional | text | |
from_address | text | |
to_address | text | |
subject | text | |
received_at | timestamp with time zone | |
sender | text | |
status | text | |
raw_expires_at | timestamp with time zone | |
raw_deleted_at optional | timestamp with time zone | |
parser optional | text | |
ai_used | boolean | |
confidence optional | integer | |
parsed optional | jsonb | |
confirmation optional | jsonb | |
summary optional | text | |
error optional | text | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
partner_proposals
Bookings proposed from forwarded emails, and whether each was approved, applied automatically or discarded. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
inbound_email_id optional | uuid | partner_inbound_emails.id |
kind | text | |
status | text | |
payload | jsonb | |
confidence | integer | |
change_set_id optional | uuid | change_sets.id |
decided_by_user_id optional | uuid | users.id |
decided_at optional | timestamp with time zone | |
expires_at | timestamp with time zone | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
busy_feed_tokens
Your busy-times calendar links for other booking sites, and when each was made, last read or revoked. The links themselves are never exported. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
staff_id optional | uuid | staff.id |
label | text | |
created_by_user_id optional | uuid | users.id |
last_fetched_at optional | timestamp with time zone | |
revoked_at optional | timestamp with time zone | |
created_at | timestamp with time zone |
partner_calendar_imports
Calendars from other booking sites you import into the diary. The calendar links are never exported. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
provider | text | |
provider_name optional | text | |
label | text | |
staff_id | uuid | staff.id |
blocks_availability | boolean | |
is_active | boolean | |
last_fetched_at optional | timestamp with time zone | |
last_error optional | text | |
last_event_count | integer | |
settings | jsonb | |
created_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
partner_calendar_events
Bookings imported from other sites' calendars, as shown in your diary. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
import_id | uuid | partner_calendar_imports.id |
staff_id | uuid | staff.id |
uid | text | |
title | text | |
starts_at | timestamp with time zone | |
ends_at | timestamp with time zone | |
all_day | boolean | |
partner_ref optional | text | |
matched_booking_id optional | uuid | bookings.id |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
invoices
Invoices you issued to your clients, with totals and payment dates. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
customer_id | uuid | customers.id |
number | integer | |
status | invoice_status | |
currency | text | |
issued_at optional | timestamp with time zone | |
due_at optional | timestamp with time zone | |
paid_at optional | timestamp with time zone | |
subtotal_minor | integer | |
vat_minor | integer | |
total_minor | integer | |
notes optional | text | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
invoice_lines
The lines on each invoice. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
invoice_id | uuid | invoices.id |
description | text | |
quantity | integer | |
unit_net_minor | integer | |
vat_rate_bp | integer | |
subtotal_minor | integer | |
vat_minor | integer | |
total_minor | integer | |
booking_id optional | uuid | bookings.id |
product_id optional | uuid | products.id |
created_at | timestamp with time zone |
notifications
Messages sent from your account (confirmations, reminders) with delivery status. Always the whole table: not filtered by since.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
booking_id optional | uuid | bookings.id |
kind | notification_kind | |
recipient | text | |
subject | text | |
body_text | text | |
status | notification_status | |
scheduled_at | timestamp with time zone | |
sent_at optional | timestamp with time zone | |
error optional | text | |
channel | text | |
data optional | jsonb | |
created_at | timestamp with time zone |
tenant_configs
Your settings, branding, opening hours and site configuration, every version. Always the whole table: not filtered by since.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
version | integer | |
status | config_status | |
config | jsonb | |
created_by_user_id optional | uuid | users.id |
activated_at optional | timestamp with time zone | |
created_at | timestamp with time zone |
extension_schemas
Custom fields you defined, and their versions. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id optional | uuid | tenants.id |
vertical optional | vertical | |
entity_type | extensible_entity_type | |
version | integer | |
fields | jsonb | |
created_at | timestamp with time zone |
tenant_domains
The web addresses your site answers on. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
hostname | text | |
is_primary | boolean | |
mode | domain_mode | |
status | domain_status | |
last_error optional | text | |
verified_at optional | timestamp with time zone | |
expires_at optional | timestamp with time zone | |
auto_renew | boolean | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
domain_acquisition_requests
Domains you asked Venakis to register for you. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
hostname | text | |
status | domain_request_status | |
price_minor optional | integer | |
resold_price_minor optional | integer | |
currency | text | |
registrant | jsonb | |
stripe_checkout_session_id optional | text | |
paid_at optional | timestamp with time zone | |
domain_id optional | uuid | tenant_domains.id |
last_error optional | text | |
requested_by_user_id optional | uuid | users.id |
fulfilled_by_operator_id optional | uuid | users.id |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
tenant_billing
Your billing contact with Venakis. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
tenant_id | uuid | tenants.id |
stripe_customer_id | text | |
billing_email optional | text | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
platform_subscriptions
Your Venakis subscription history. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
stripe_subscription_id | text | |
stripe_customer_id | text | |
status | subscription_status | |
plan_price_id optional | text | |
plan_key optional | text | |
usage_band optional | text | |
currency | text | |
amount_minor | integer | |
current_period_end optional | timestamp with time zone | |
cancel_at_period_end | boolean | |
canceled_at optional | timestamp with time zone | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
platform_billing_invoices
Invoices Venakis issued to you. Always the whole table: not filtered by since.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
stripe_invoice_id | text | |
stripe_subscription_id optional | text | |
number optional | text | |
status | text | |
currency | text | |
amount_due_minor | integer | |
amount_paid_minor | integer | |
hosted_invoice_url optional | text | |
invoice_pdf optional | text | |
period_start optional | timestamp with time zone | |
period_end optional | timestamp with time zone | |
issued_at optional | timestamp with time zone | |
created_at | timestamp with time zone |
tenant_payment_accounts
Your connected Stripe account's status and your no-show fee. Payouts and card details stay with Stripe. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
tenant_id | uuid | tenants.id |
stripe_account_id optional | text | |
status | text | |
charges_enabled | boolean | |
payouts_enabled | boolean | |
details_submitted | boolean | |
disabled_reason optional | text | |
requirements_due | jsonb | |
no_show_fee_minor | integer | |
bacs_debit | boolean | |
offer_direct_debit | boolean | |
connected_at optional | timestamp with time zone | |
disconnected_at optional | timestamp with time zone | |
previous_stripe_account_id optional | text | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
service_payment_settings
What each service takes at booking: nothing, a deposit or the full price, and whether a card is saved. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
service_id | uuid | services.id |
tenant_id | uuid | tenants.id |
mode | text | |
deposit_minor | integer | |
card_on_file | boolean | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
payments
Client payments taken on your Stripe account (deposits, prepayments, memberships, fees) and refunds. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
kind | text | |
status | text | |
amount_minor | integer | |
refunded_minor | integer | |
currency | text | |
application_fee_minor | integer | |
booking_id optional | uuid | bookings.id |
customer_id optional | uuid | customers.id |
membership_plan_id optional | uuid | membership_plans.id |
customer_membership_id optional | uuid | customer_memberships.id |
stripe_account_id | text | |
stripe_checkout_session_id optional | text | |
stripe_payment_intent_id optional | text | |
stripe_invoice_id optional | text | |
stripe_subscription_id optional | text | |
failure_message optional | text | |
dispute_status optional | text | |
method optional | text | |
device_session optional | text | |
device_name optional | text | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
booking_payment_methods
Cards clients saved at booking, as Stripe's ids, with the consent wording they agreed to and when. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
booking_id | uuid | bookings.id |
tenant_id | uuid | tenants.id |
stripe_account_id | text | |
stripe_customer_id | text | |
stripe_payment_method_id | text | |
consent_text | text | |
consent_at | timestamp with time zone | |
agreed_no_show_fee_minor optional | integer | |
agreed_late_cancellation_fee_minor optional | integer | |
created_at | timestamp with time zone |
tenant_assets
Images you uploaded for your site (logo, gallery). The files themselves are in the ZIP's images folder. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
kind | text | |
content_type | text | |
byte_size | integer | |
sha256 | text | |
created_by_user_id optional | uuid | users.id |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
audit_events
Your account's activity log: who changed what, and when. Rows added since: created_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id optional | uuid | tenants.id |
actor_type | actor_type | |
actor_id optional | uuid | |
action | text | |
entity_type optional | text | |
entity_id optional | uuid | |
payload | jsonb | |
created_at | timestamp with time zone |
What is not in the export
Passwords and password-reset tokens are never exported, in any form. These tables are left out entirely:
sessions: Sign-in sessions: short-lived credentials, not business data.customer_sessions: Client sign-in sessions: short-lived credentials, not business data.login_tokens: One-time sign-in links: credentials, not business data.login_challenges: Half-finished two-step sign-ins: credentials, not business data.usage_metrics: Venakis's own hosting measurements, used for Venakis's costs.integration_oauth_states: Half-finished connections to accounting software: credentials, not business data.webhook_scan_state: How far Venakis has turned your changes into webhook events: an internal bookmark.delivery_projects: Venakis's internal record of building your site.clients: Venakis's own sales and account record of your business, not your business data.dedicated_provisions: Venakis's internal record of setting up dedicated hosting.menu_imports: Copies of your menu kept so a spreadsheet import can be undone; your menu itself is exported.life_items: Your team's own life items (Rapport): personal, not business data, and each person's alone.life_ics_feeds: Your team's subscribed personal calendars (Rapport): personal, and each person's alone.rapport_briefs: Cached pre-appointment briefs (Rapport): made for one person from notes that are exported in full; rebuilt on demand.rapport_proposals: What Rapport proposed from a voice note before it was confirmed (personal to the person who spoke; what was saved is in the change log and the records themselves).rapport_user_settings: Each person's own Ask first / Automatic choices for voice notes: a personal preference, not business data.push_devices: Phones registered for HQ app notifications: device tokens, not business data.notification_prefs: Each person's own notification choices in the HQ app: a personal preference, not business data.tap_to_pay_setups: Which phones can take Tap to Pay, who turned it on and the Stripe location: payment set-up, not business data.idempotency_keys: Short-lived markers that stop the HQ app doing the same thing twice when it retries; cleared after a week.
The images you uploaded for your site (your logo and gallery photos) are in the same ZIP, in an images folder, as the original files. The tenant_assets table says which is which.