Snappy Database -- Full Table Schemas

Field-by-field schemas for every Xano table backing the Snappy system. Companion to SKILL.md. Use this when you need to see column types, defaults, or non-obvious field semantics.

Table of Contents


Workspace 1: Snappy MAIN (xnwv-v1z6-dvnr)

Owner Xano instance: https://xnwv-v1z6-dvnr.n7c.xano.io

Knowledge graph

contacts (canonical -- see snappy-knowledge/schemas.md)

FieldTypeNotes
idintPK, auto
namestringRequired
emailstringRequired, unique recommended
phonestringE.164 format +14155551234
companystringDenormalized name (until companies table ships)
company_idintFK to companies (ASPIRATIONAL)
rolestringJob title
tagsarray<string>Controlled vocab -- see xano-conventions.md
sub_tagsarray<string>mentor, investor, collaborator, strategic
linkedin_urlstringFull URL
notesstring (long)Freeform; latest interaction summary lives here until contacts_interactions ships
birthdaydatePersonal pipeline trigger
preferred_channelstringOne of slack, email, whatsapp, imessage, telegram, linkedin, call, zoom, in_person
last_contactdateUpdated by every touchpoint
referral_sourcestringHow we met / who introduced
created_atdatetimeUTC
updated_atdatetimeUTC
deleted_atdatetime nullableSoft delete

Endpoints: POST/PATCH/GET /api:PB9UH7b9/contacts* -- see snappy-knowledge/endpoints.md.

contacts_referrals [INFERRED -- VERIFY]

FieldTypeNotes
idintPK
from_idintFK to contacts (referrer)
to_idintFK to contacts (referred)
contextstringWhy / how
created_atdatetime--

Backing endpoint: POST /api:PB9UH7b9/contacts/referrals.

contacts_touchpoints [INFERRED -- VERIFY]

FieldTypeNotes
idintPK
contact_idintFK to contacts
typestringslack_message, email, whatsapp, call, etc.
notesstringFreeform
created_atdatetime--

Lightweight interaction stand-in. Backing endpoint: POST /api:PB9UH7b9/contacts/{id}/touchpoints.

contacts_interactions (ASPIRATIONAL -- endpoint not built)

Full schema in snappy-knowledge/schemas.md#interaction-schema. Until built, store summaries in contacts.notes.

FieldTypeNotes
idintPK
contact_idintFK
datedatetimeWhen
channelstringChannel vocabulary
directionstringinbound / outbound
topicstringSubject line
summarystringKey takeaways
sentimentstringpositive, warm, neutral, cold, negative
action_itemsarray<string>Follow-ups
logged_bystringmanual / auto
transcript_idstringKrisp meeting ID
krisp_search_urlstringDeep link back to Krisp

companies (ASPIRATIONAL -- table not built)

Full schema in snappy-knowledge/schemas.md#company-schema.

Sales pipeline

leads

FieldTypeNotes
idintPK
namestringRequired
emailstringRequired
sourcestringwebsite_form, skool_dm, linkedin_message, email_reply, referral
scorenumberLead score 0-5 (see snappy-sales lead scoring)
stagestringlead, qualified, call_booked, call_completed, negotiation, closed_won, closed_lost
notesstringFreeform
contact_idint nullableFK to contacts once promoted
created_atdatetime--
updated_atdatetime--

Endpoints used: POST /api:PB9UH7b9/leads, PATCH /api:PB9UH7b9/leads/{id}, GET /api:PB9UH7b9/leads, GET /api:PB9UH7b9/leads?stage=..., GET /api:PB9UH7b9/leads/pipeline.

applications [INFERRED -- VERIFY]

FieldTypeNotes
idintPK
lead_idint nullableFK to leads
application_dataobject (json)Full form payload
statusstringsubmitted, reviewing, accepted, rejected
submitted_atdatetime--

Endpoint: POST /api:PB9UH7b9/applications.

Website + acquisition

contact_submissions

FieldTypeNotes
idintPK
namestring--
emailstring--
messagestringBody of contact form
utm_sourcestringUTM tracking
utm_mediumstringUTM tracking
utm_campaignstringUTM tracking
pagestringWhere they submitted
created_atdatetime--

Endpoints: POST /api:PB9UH7b9/contact/submit, GET /api:PB9UH7b9/contact/submissions.

Calendar

calendar_events [INFERRED -- VERIFY: Google Calendar mirror]

FieldTypeNotes
idintPK
google_event_idstringSource-of-truth ID
summarystringEvent title
start_timedatetimeUTC
end_timedatetimeUTC
attendeesarray<string>Email addresses
descriptionstringBody
statusstringconfirmed, tentative, cancelled
created_atdatetime--

Endpoints: GET /api:PB9UH7b9/calendar/events?days=N, POST /api:PB9UH7b9/calendar/create, POST /api:PB9UH7b9/calendar/event/update, GET /api:PB9UH7b9/calendar/availability.

FreshBooks mirror

Authoritative reference: snappy-freshbooks/api-reference.md.

freshbooks_clients

FieldTypeNotes
idstringFreshBooks client ID (string from FB)
namestring--
emailstring--
phonestring--
organizationstring--
vis_stateint0=active, 1=archived, 2=deleted
created_atdatetime--

Endpoints: GET /api:ACdo1OLG/freshbooks/clients, POST /api:ACdo1OLG/freshbooks_get_or_create_client.

freshbooks_invoices

FieldTypeNotes
idstringFreshBooks invoice ID
invoice_numberstringVisible to client
clientstringClient name (or client_id FK)
amountnumberDollars (NOT cents)
statusstringdraft, sent, viewed, paid, partial, overdue, disputed, void
issue_datedate--
due_datedate--
payment_datedate nullableSet on paid
payment_methodstringwire, cc, ach, etc.
descriptionstringLine item summary
recurring_idstring nullableFK to freshbooks_recurring if from a profile

Endpoints: GET /api:PB9UH7b9/freshbooks/invoices, POST /api:PB9UH7b9/freshbooks/invoice/create, POST /api:ACdo1OLG/freshbooks/send-invoice, POST /api:PB9UH7b9/freshbooks/invoice/mark-paid.

freshbooks_time_entries [INFERRED -- VERIFY]

FieldTypeNotes
idstring--
clientstring--
hoursnumberDecimal allowed
descriptionstring--
datedate--
billedboolTrue if attached to an invoice
invoice_idstring nullableFK to freshbooks_invoices

Endpoints: POST /api:PB9UH7b9/freshbooks/time-entry/create, GET /api:PB9UH7b9/freshbooks/time-entries.

freshbooks_expenses [INFERRED -- VERIFY]

FieldTypeNotes
idstring--
vendorstring--
amountnumberDollars
categorystringOne of software_saas, contractors, ads, tools_infra, professional, travel, office, misc
datedate--
notesstring--
currencystringISO 4217 (USD, CAD)

Endpoints: POST /api:PB9UH7b9/freshbooks/expense/create, GET /api:PB9UH7b9/freshbooks/expenses.

freshbooks_recurring [INFERRED -- VERIFY]

FieldTypeNotes
idstring--
clientstring--
amountnumberDollars
descriptionstring--
frequencystringweekly, monthly, quarterly, yearly
start_datedate--
auto_sendboolAuto-deliver each cycle
activeboolFalse = stopped

Endpoints: POST /api:PB9UH7b9/freshbooks/recurring/create, POST /api:PB9UH7b9/freshbooks/recurring/stop.

Email

email_threads [INFERRED -- VERIFY]

FieldTypeNotes
idint--
gmail_thread_idstringGmail thread ID
subjectstring--
fromstring--
tostringComma-separated recipients
snippetstringFirst N chars
labelstringInbox / triage label
processedboolSmart inbox handled it
received_atdatetime--

Endpoints: POST /api:OehldiTW/email/smart-inbox, POST /api:OehldiTW/email/triage.

email_drafts [INFERRED -- VERIFY]

FieldTypeNotes
idint--
tostring--
subjectstring--
bodystring (html)--
statusstringdraft, sent, discarded
created_atdatetime--

Endpoint: POST /api:OehldiTW/email/draft.

email_send_queue [INFERRED -- VERIFY]

FieldTypeNotes
idint--
typestringe.g. email_send
payloadobject (json)Full email body
statusstringqueued, processing, sent, failed
attemptsintRetry counter
created_atdatetime--
sent_atdatetime nullable--

Endpoint: POST /api:8wuQ86By/queue/add.

emails_sent [INFERRED -- VERIFY]

FieldTypeNotes
idint--
to_emailstring--
subjectstring--
bodystring--
dry_runboolTrue = preview only
sent_atdatetime--

Endpoints: POST /api:PB9UH7b9/emails/send, GET /api:PB9UH7b9/emails/list.

LinkedIn

linkedin_posts [INFERRED -- VERIFY]

FieldTypeNotes
idint--
textstringPost body
post_typestringtext, image, carousel, video, article
media_urlstring nullableImage / video URL
slidesarray<object> nullableCarousel slide data
linkedin_post_idstringLinkedIn-side ID for tracking
posted_atdatetime--

Endpoints: POST /api:PB9UH7b9/linkedin/post, linkedin/post-image, linkedin/post-carousel, linkedin/post-video, linkedin/post-article.

YouTube

youtube_videos [INFERRED -- VERIFY]

FieldTypeNotes
idint--
youtube_video_idstringYouTube ID
titlestring--
descriptionstring--
video_urlstringSource URL used for upload
statusstringpending, uploaded, failed
uploaded_atdatetime--

Endpoint: POST /api:hZB4Dj0c/youtube-video-uploader.

youtube_video_stats [INFERRED -- VERIFY]

FieldTypeNotes
idint--
youtube_video_idstringFK to youtube_videos
viewsint--
watch_timenumberHours
ctrnumberPercent
avdnumberPercent of video length
subs_gainedintNet delta
snapshot_atdatetime--

Endpoint: GET /api:PB9UH7b9/youtube/video-stats?video_id=....

youtube_comments [INFERRED -- VERIFY]

FieldTypeNotes
idint--
youtube_video_idstringFK
comment_idstringYouTube comment ID
authorstringDisplay name
textstringComment body
processedboolTrue if responder handled
created_atdatetime--

Endpoints: GET /api:hZB4Dj0c/youtube-comment-reader, POST /api:hZB4Dj0c/youtube-comment-responder.

Ads

ads_metrics [INFERRED -- VERIFY]

FieldTypeNotes
idint--
periodstringlast_7_days, last_30_days, last_90_days
spendnumberDollars
impressionsint--
clicksint--
ctrnumberPercent
cplnumberCost per lead
cp_callnumberCost per booked call
roasnumberReturn on ad spend
snapshot_atdatetime--

Endpoint: GET /api:PB9UH7b9/ads/metrics?period=....

ads_conversion [INFERRED -- VERIFY]

FieldTypeNotes
idint--
sourcestringAd campaign / placement
lead_idint nullableFK to leads
valuenumberEstimated value of conversion
attributionstringfirst_touch, last_touch, multi_touch
created_atdatetime--

Endpoint: POST /api:PB9UH7b9/ads/conversion.

Slack + WhatsApp

slack_messages [INFERRED -- VERIFY: log of bot-sent messages]

FieldTypeNotes
idint--
channel_idstringSlack channel C-id
textstringMessage body
message_tsstringSlack timestamp
sent_atdatetime--

Endpoints: POST /api:hZB4Dj0c/slack/bot-message, POST /api:hZB4Dj0c/slack-notify-robert, POST /api:XOwEm4wm/slack/notification, POST /api:XOwEm4wm/slack/messages, POST /api:XOwEm4wm/slack/thread-reply.

slack_channels [INFERRED -- VERIFY]

FieldTypeNotes
idint--
channel_idstringSlack C-id
namestringWithout #
purposestringChannel purpose
created_atdatetime--

Endpoint: POST /api:XOwEm4wm/slack/channels.

Pre-cached IDs (in snappy-infra/SKILL.md -- never look up at runtime):

whatsapp_messages [INFERRED -- VERIFY]

FieldTypeNotes
idint--
tostringPhone number +1...
messagestringBody
media_urlstring nullableIf sent as media
statusstringsent, failed
sent_atdatetime--

Endpoints: POST /api:hZB4Dj0c/whatsapp-send-message, whatsapp-send-media, whatsapp-notify-robert.

Content pipeline

content_atoms

NOTE: This table lives on rb-content-engine.fly.dev (Neon Postgres), NOT the Xano MAIN workspace. Access via POST /sql with {"query": "..."}.
FieldTypeNotes
idintPK, auto
typestringconvergence, tool-mention, sharp-line, market-signal, analogy, number
meeting_idstring nullableKrisp meeting ID (null for convergence nuggets spanning multiple)
source_meetingsarray<string>All meeting IDs this nugget derives from
speakerstring nullableWho said it -- for tagging/credit
verbatim_textstringRaw quote or observation from transcript
draftstringRobert-voice draft (2-5 sentences)
topicstring nullablePrimary topic (required for convergence)
tagsarray<string>Content tags for retrieval
frequencyint nullableConversation count (convergence nuggets)
content_hashstringSHA256 of verbatim_text -- dedup key
times_usedintDefault 0. Incremented when used in a post/carousel
statusstringdraft, approved, posted, rejected
mined_atdatetimeWhen extracted
created_atdatetimeUTC
updated_atdatetimeUTC
deleted_atdatetime nullableSoft delete

Owner: snappy-mine (W). Readers: snappy-content (R), snappy-linkedin (R), snappy-image (R), snappy-ops (R), snappy-analytics (R).

Dedup: content_hash prevents duplicate nuggets from re-mining same transcript. Re-mining is encouraged (models improve), but identical extractions are skipped.

Query via POST https://rb-content-engine.fly.dev/sql with {"query": "SELECT * FROM content_atoms WHERE status = 'draft'"}.

Auth / users

users [INFERRED -- VERIFY]

FieldTypeNotes
idint--
emailstring--
namestring--
api_keystringBearer token
created_atdatetime--

Endpoints: api:e6emygx3/login, api:e6emygx3/me.


Workspace 2: Orbiter ENRICHMENT (xh2o-yths-38lt)

Owner Xano instance: https://xh2o-yths-38lt.n7c.xano.io

Authoritative reference: snappy-pipeline/data-flow-map.md. Read-only from Snappy -- Mark Lewis owns writes via the Orbiter enrichment processes.

Person canonical

master_person (table 139)

FieldTypeNotes
idintPK
namestringFull name
sexstringFrom EL gender
avatarstringAvatar URL pointer
visibilityboolFalse = stuck in pipeline
created_atdatetime--

person_enrich_data (table 500)

JSON blob storage from each enrichment source. Documented in snappy-pipeline/data-flow-map.md.

FieldTypeNotes
idintPK
master_person_idintFK to master_person
people_data_labsobject (json)PDL response (data_source_id 91)
enrich_layer_dataobject (json)EL response (data_source_id 94)
fundableobject (json)Fundable / BigQuery (data_source_id 89)
scrapecreator_personobjectLegacy ScrapeCreator
linkedin_profileobjectDirect LinkedIn
contactout_dataobjectContactOut emails
scrapin_dataobjectScrapin LinkedIn data
email_signatureobjectPassive email parsing
raw_linkedinstringRaw LinkedIn HTML archive
raw_linkedin_emailstringLinkedIn email archive
clado_dataobjectClado source
created_atdatetime--

enrich_history_person

FieldTypeNotes
idintPK
master_person_idintFK
data_source_idintSee source enum below
source_namestringHuman readable (llm_biography, base_person_enrich, etc.)
enrich_successbool--
processingboolTrue = stuck if old
created_atdatetime--

Source ID enum:

Person multi-value tables

TableIDFieldsSource(s)
master_email155master_person_id, address, sourcePDL, Fundable, ContactOut
master_phone151master_person_id, number, sourcePDL, Fundable
master_link166master_person_id, url, typePDL profiles, Fundable bio_links
master_avatar227master_person_id, url, is_placeholder, mainEL profile_pic_url, Fundable profile_image
skills_join325master_person_id, skill_id (or name), data_source_idPDL, EL
education_experience230master_person_id, school_name, degree, major, start_date, end_date, master_company_id, data_source_idPDL, EL
work_experience147master_person_id, title, company_name, start_date, end_date, is_primary, master_company_id, data_source_idPDL, EL, Fundable
certification283master_person_id, name, data_source_idPDL, EL
volunteering577master_person_id, organization, role, data_source_idEL only
honor573master_person_id, title, data_source_idEL only
project575master_person_id, title, data_source_idEL only
publication574master_person_id, name, data_source_idEL only
interest_join327master_person_id, interest_name, data_source_idPDL, EL
language_join326master_person_id, language_name, data_source_idPDL, EL
linkedin_follower495master_person_id, follower_countEL only
about_person365master_person_id, aboutFundable

Company canonical

TableIDFields
master_company(varies)id, name, domain, linkedin_url, ...
company_funding_round201master_company_id, round, amount, date
company_investor265master_company_id, master_person_id (investor), round
company_financial287master_company_id, total_raised, valuation

Pipeline operational

TableIDFieldsNotes
queue_enrich_person(varies)id, master_person_id, processing, created_atJob queue -- graduated thresholds: >500 MEDIUM, >1000 HIGH
queue_enrich_company(varies)id, master_company_id, processing, created_at>5000 MEDIUM, >10000 HIGH
crash_log(varies)id, function_name, error_message, master_person_id, created_atCurrently empty -- awaiting Mark's re-run with crash capture

QA endpoints (read-only): api:Bd_dCiOz/qa/* -- full registry in snappy-pipeline/endpoints.md.


Field Convention Reference

See xano-conventions.md for the full vocabulary tables (tags, sentiments, channels, statuses, categories) and naming rules. This file is the schema; that file is the controlled vocabularies.