Qualitative export
Export messages
Export chat messages as an NDJSON stream for qualitative analysis with anonymized IDs
GET
Description
Exports chat messages as an NDJSON (Newline-Delimited JSON) stream for qualitative analysis. All person IDs are automatically anonymized using HMAC-SHA256.Authentication header
Your Mindo API Key. Two types are accepted:
- Global (cross-company):
mindo_global_<key>— access to all companies - Company-scoped:
mindo_xxxxxxxxxxxxxxxxxxxxxxxx— limited to the associated company
Query parameters
Company ID. Accepts a single integer or comma-separated list:
42 or 42,57.Start date/time (ISO-8601, inclusive). Example:
2026-04-01T00:00:00Z.End date/time (ISO-8601, exclusive). Must be greater than
from. Maximum 31-day range.Platform filter:
whatsapp, instagram, messenger, all.Filter by AI agent. A single integer or CSV list:
5 or 5,12.Message direction:
incoming, outgoing, all.Extra fields to include (CSV):
classifications, extractions, tool_calls, trace_id.Pagination cursor obtained from
next_cursor in the previous response.Maximum number of rows per call. Range: 1–10000.
Response
The response is an NDJSON stream. Each line is a JSON object with the following fields:Anonymized message ID (
msg_<24 hex chars>).Anonymized chat ID (
conv_<24 hex chars>).ISO-8601 timestamp of when the message was sent.
Platform:
META_WHATSAPP, WHATSAPP_EVOLUTION, INSTAGRAM, MESSENGER, MANYCHAT_WHATSAPP, MANYCHAT_INSTAGRAM."inbound" (from contact) or "outbound" (from system/agent/operator).Who sent the message.
AI agent data (only if the message was generated by an agent).
Message content.
Conversation context.
Export data.
Optional fields (include parameter)
These fields only appear if requested in the include parameter.
Classifications applied to the message (included by default).
Data extracted from the message by custom field extractors.
Tools executed by the AI agent during message generation.
Langfuse trace ID for debugging. Only has a value for outgoing messages generated by an AI agent.
Pagination
Pagination is cursor-based. If there are more results, the last line of the stream is a sentinel:cursor=<next_cursor> to get the next page. When there is no sentinel, all data has been returned.
ID anonymization
| Prefix | Represents |
|---|---|
msg_ | Message ID |
conv_ | Conversation ID |
ctc_ | Contact ID |
agt_ | Agent ID (in author) |
op_ | Human operator ID |
cmp_ | Company ID (in metadata) |
Channel mapping
channel parameter value | Included platforms |
|---|---|
whatsapp | META_WHATSAPP, WHATSAPP_EVOLUTION, MANYCHAT_WHATSAPP |
instagram | INSTAGRAM, MANYCHAT_INSTAGRAM |
messenger | MESSENGER |
all | All platforms |
Mid-stream errors
If an error occurs after the stream has already started, it is emitted as an additional NDJSON line:Limits
| Restriction | Value |
|---|---|
| Maximum date range | 31 days |
| Maximum rows per request | 10,000 |
| Default rows per request | 5,000 |
| Deleted messages | Automatically excluded |
Use cases
Agent response quality analysis
Agent response quality analysis
Export only outgoing messages from a specific agent with tool_calls to evaluate which tools were used and how successfully:
Training dataset for classifiers
Training dataset for classifiers
Export incoming messages with their classifications to evaluate or retrain models:
Cross-platform audit
Cross-platform audit
Export all messages from multiple companies for comparative audit:
Agent debugging with Langfuse
Agent debugging with Langfuse
Export messages with
trace_id to correlate with Langfuse traces:
