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, open 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
24 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 | |
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 | |
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 | |
extensions | jsonb | |
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 | |
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 | |
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 | |
notes optional | text | |
extensions | jsonb | |
created_at | timestamp with time zone | |
updated_at | timestamp with time zone |
products
Retail products, prices and stock levels. Rows changed since: updated_at.
| Field | Type | Links to |
|---|---|---|
id | uuid | |
tenant_id | uuid | tenants.id |
name | text | |
slug | text | |
description optional | text | |
category optional | text | |
sku optional | text | |
price_gross_minor | integer | |
vat_rate_bp | integer | |
stock_quantity optional | integer | |
is_active | boolean | |
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 | |
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 | |
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 |
entry_type | credit_entry_type | |
amount | integer | |
expires_at optional | timestamp with time zone | |
note optional | text | |
created_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 | |
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 | |
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 | |
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 |
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.usage_metrics: Venakis's own hosting measurements, used for Venakis's costs.delivery_projects: Venakis's internal record of building your site.dedicated_provisions: Venakis's internal record of setting up dedicated hosting.
Venakis does not store uploaded files today, so there are none to include. If that changes, they will be added to the ZIP.