---
title: "Export tickets as CSV"
url: https://docs.gleap.ai/en/reference/rest-api/export-tickets-as-csv
method: GET
path: "/tickets/csv-export"
api: "API Reference"
tag: "Ticket"
operationId: "ExportTicketsAsCSV"
updatedAt: "2026-11-01T18:40:15.677Z"
language: en
---

# Export tickets as CSV

`GET https://api.gleap.io/v3/tickets/csv-export`

Streams the project's tickets as a CSV download (`tickets.csv`, `text/csv`), with no row cap. For a JSON export use GET /tickets/export instead.

**Rows:** `type` narrows the export to one type or a comma-separated list such as `BUG,INQUIRY,BOT` (`BOT` is the Kai conversations lane). Without `type`, tickets of every type are exported, including types whose board was deleted and survey responses. Archived tickets (`ignoreArchived` is accepted and ignored), spam and merged duplicates are included. `startDate`/`endDate` (ISO 8601, inclusive) filter on `createdAt`; to filter on the update time use `updatedAt>=2026-10-01T00:00:00Z&updatedAt<=2026-10-08T00:00:00Z` (UTC with a `Z` suffix: a `+hh:mm` offset is decoded as a space and matches nothing). The usual ticket filters apply; `sort`, `skip` and `limit` are ignored and rows come in `_id` order.

**Columns:** pass `projection[]` to pick fields (see GET /tickets/export-fields). Without it, the columns are the listed types' export fields, or the `BUG` board's fields when `type` is omitted.

Exports ticket records only, not their conversations. Retention limits which tickets still exist — see GET /tickets. If the export fails after the download has started, the connection is aborted rather than ended, so a download that completes without a transfer error contains every matching row.

## Authorization

- `Authorization` (header, required): `Bearer <token>`

## Headers

- `project` (string, required)

## Example request

```bash
curl --request GET \
  --url https://api.gleap.io/v3/tickets/csv-export \
  --header 'Authorization: Bearer <token>' \
  --header 'project: <project>'
```

## Responses

### 200 (`application/json`)

Ok
