Conversation data export
Freeday can export conversation data to your storage bucket as it happens: messages, CSAT ratings, classification labels, and skill executions. Use it to feed your data warehouse, BI tooling, or quality monitoring without calling the API.
File format
Exports are written as NDJSON: one JSON object per line, one line per
event. Validate each line against the JSON Schema (Draft 2020-12) — browse the
fields in the Data export event schema
reference. Every field carries a description, so validators and code
generators surface field-level documentation automatically.
Event types
A line's event_type selects which shape applies (a oneOf discriminated
union in the schema):
event_type |
extra fields |
|---|---|
message_sent |
role, text |
csat_received |
rating (1–5), feedback (nullable), rating_source |
message_classified |
classification_label |
skill_executed |
name, end_state |
Every event also carries the shared envelope: schema_version ("v1"),
event_id, company_id, digital_employee_id, conversation_id,
message_id, occurred_at.
Example records
One line per record, exactly as written to the bucket (formatting added here for readability — in the file each object is on a single line):
{"schema_version":"v1","event_type":"message_sent","event_id":"44f2…:message","company_id":"8e93b6ae-…","digital_employee_id":"9ec14f36-…","conversation_id":"39d60872-…","message_id":"44f2…","occurred_at":"2026-07-02T16:23:01.488680Z","role":"digital_employee","text":"Hoi! Kan ik je ergens mee helpen?"}
{"schema_version":"v1","event_type":"skill_executed","event_id":"44f2…:skill:4465…","company_id":"8e93b6ae-…","digital_employee_id":"9ec14f36-…","conversation_id":"39d60872-…","message_id":"44f2…","occurred_at":"2026-07-02T16:23:01.488680Z","name":"Small talk","end_state":"success"}
{"schema_version":"v1","event_type":"message_classified","event_id":"1979…:classified:1199…","company_id":"8e93b6ae-…","digital_employee_id":"9ec14f36-…","conversation_id":"1cc07a85-…","message_id":"1979…","occurred_at":"2026-07-02T18:09:45.034173Z","classification_label":"freeday"}
{"schema_version":"v1","event_type":"csat_received","event_id":"fd36…:csat:48d7…","company_id":"38dc728d-…","digital_employee_id":"9137d8b7-…","conversation_id":"fe11c421-…","message_id":"fd36…","occurred_at":"2026-07-02T19:54:34.175924Z","rating":5,"feedback":"Friendly and quick.","rating_source":"ai"}
event_id embeds the message_id plus the record kind (e.g. …:message,
…:skill:<uuid>) — that keeps it unique per record while message_id stays
shared across the events of one message.
Integration guidelines
- Delivery is at-least-once — deduplicate on
event_id. - Use
message_idto rejoin events that fanned out from the same message. -
Ignore unknown
event_typevalues — new event types may be added without a version bump. -
A breaking shape change ships as a new schema (
export-event.v2.schema.json, withschema_versionmoving to"v2");v1stays stable.
Contact the Freeday team to enable the export for your environment.