---
title: "Export conversations (v3)"
method: GET
path: "/api/v1/discovery/conversations/export-v3"
tags: ["discovery"]
---

# Export conversations (v3)

`GET /api/v1/discovery/conversations/export-v3`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/discovery/conversations/export-v3`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

Export a campaign's conversations of a date range as CSV (one row per conversation, no transcripts), JSONL, or Markdown (both with transcripts), optionally filtered: each conversation measured for the campaign's results, dated by the UTC day it ended. Answers the campaign's results window over the range (`scope`) and the file's name, type and size with a short-lived `url` to GET it (fetch it before `expiresAt`; call again for a fresh export). A campaign without results exports an empty file. Every export is audited.

## Query parameters

- `campaignId` string, uuid, required: Discovery campaign id.
- `format` 'csv' | 'jsonl' | 'markdown': `csv`: one row per conversation, no transcripts. `jsonl`: one JSON conversation per line, with its transcript. `markdown`: readable transcripts.
- `engine` string: Only assistants whose name contains this text (text filters ignore case).
- `sentiment` 'positive' | 'neutral' | 'mixed' | 'negative': Only conversations of this overall sentiment.
- `topic` string: Only conversations with a topic containing this text.
- `label` string: Only conversations whose win reason, loss reason, or decision factor contains this text.
- `source` string: Only conversations with a source whose URL or site name contains this text.
- `outcome` 'won' | 'lost' | 'mentioned' | 'absent': Only conversations your brand won, lost, was mentioned in, or was absent from.
- `labels` string: Only customers on a list (Labels) whose name contains this text.
- `product` string: Only conversations about a product (revenue line) whose name contains this text.
- `audience` string: Only customers of an audience whose name contains this text.
- `channel` string: Only customers of a channel whose name contains this text.
- `market` string: Only customers of a market whose name contains this text.
- `dateRange` string, nullable: The days whose conversations the file holds: `all`, a preset id, or `yyyy-MM-dd..yyyy-MM-dd`. Omit for the campaign's default range.

## Headers

- `Point11-Organization` string, uuid

## Response `200`

Success.

- DiscoveryConversationsExportV3Response
  - `filename` string, required: Suggested file name for saving the bytes
  - `contentType` string, required
  - `byteLength` integer, required
  - `url` string, uri, nullable, required: Short-lived presigned URL that GETs the bytes; null when this deployment cannot sign the object
  - `expiresAt` string, date-time, nullable, required: When url stops working (minutes after the call); null with url
  - `exportId` string, uuid, required: This export's id, recorded on its audit row.
  - `rowCount` integer, required: Conversations in the file.
  - `format` 'csv' | 'jsonl' | 'markdown', required
  - `scope` DiscoveryScope, required
    - `campaignId` string, required
    - `state` 'ready' | 'running' | 'failed' | 'out-of-range' | 'no-campaign', required: `ready` carries results; every other state carries none.
    - `failureReason` string, nullable, required
    - `perspective` object, nullable, required: The brand lens applied; null when the report honors no lens or carries no results.
      - `brand` string, required: The brand the results were read as.
      - `isOwnBrand` boolean, required: Whether that brand is the campaign's own.
    - `window` object, nullable, required: The results window; null unless `state` is `ready`.
      - `from` string, date, required: The first UTC day a trend plots: the range's, never before the first interaction.
      - `to` string, date, required: The last UTC day a trend plots: the range's end, never past today.
      - `asOf` string, date, required: The UTC day every single value is as of: its value is the average over the campaign's interactions dated in the 30 days ending with it. The range's end, or, when those 30 days hold none, the last day with an interaction.
      - `comparedTo` string, date, required: The day a change compares with: 30 days before asOf.
      - `interactionCount` integer, required: The interactions dated in the 30 days ending asOf, under the scope.
      - `customerCount` integer, required: The distinct customers of those interactions.

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

---

[API](https://skmtc.dev/point11/apis/point11-api.md) · [All operations](https://skmtc.dev/point11/apis/point11-api/llms.txt) · [OpenAPI document](https://skmtc.dev/point11/apis/point11-api/revisions/36a84c7aca11?raw)
