Gnoll Docs Back to Dashboard
Quick Start
Getting Started

Import / Export

Move data in and out of Gnoll. Export as JSONL, import from Gnoll JSONL, GitHub CSV, or Linear CSV with automatic format detection.

Exporting Issues

POST /api/v1/import-export/export

Exports all issues in your project scope as JSONL (one JSON object per line). Includes comments, labels, and dependencies based on options.

{
  "projectId": "f702cb1a",
  "includeComments": true,
  "includeLabels": true,
  "includeDependencies": true,
  "status": "open"
}

Importing Issues

POST /api/v1/import-export/import

Upload a file to import issues. Supports multiple formats:

FormatValueDescription
Auto-detectautoAutomatically detects the format from file content and headers
GnolljsonlNative JSONL format (from Gnoll export)
GitHubgithub_csvGitHub Issues CSV export
Linearlinear_csvLinear CSV export

The endpoint accepts multipart/form-data with these fields:

FieldRequiredDescription
fileYesThe file to import (max 10 MB)
formatYesFormat string (see table above) — use auto for detection
projectIdYesTarget project ID
dryRunNoSet to true to preview without importing

Auto-Detection

When format=auto, Gnoll examines the file to determine its type:

The response includes the detectedFormat so you know what was identified.

Example: Import with curl

curl -X POST "https://app.gnoll.ai/api/v1/import-export/import" \
     -H "Authorization: Bearer gkey_..." \
     -F "file=@github-issues.csv" \
     -F "format=auto" \
     -F "projectId=f702cb1a"

Preview Import

POST /api/v1/import-export/import/preview

Preview what columns were detected and see the first 10 rows before committing to an import.

Field Mapping

Each format maps fields to Gnoll's model:

GitHub CSV

GitHub ColumnGnoll Field
Titletitle
Bodydescription
Statestatus (open/closed)
Labelslabels (comma-separated)
Assigneesassignee

Linear CSV

Linear ColumnGnoll Field
Titletitle
Descriptiondescription
Prioritypriority (Urgent→4, High→3, Medium→2, Low→1)
Statusstatus (Done/Completed→closed, In Progress→in_progress)
Labelslabels
Assigneeassignee
IDs are regenerated on import. New IDs are assigned to avoid conflicts. Labels are auto-created if they don't already exist.

JSONL Format

The native format is newline-delimited JSON. Each line is one issue:

{"title":"Set up CI pipeline","type":"task","priority":3,"description":"Configure GitHub Actions","status":"open"}
{"title":"Fix login redirect bug","type":"bug","priority":4,"status":"open","labels":["frontend","auth"]}

JSONL import also supports comments, labels, dependencies, and parent references. IDs are remapped to new values, and parent/dependency relationships are preserved.