Move data in and out of Gnoll. Export as JSONL, import from Gnoll JSONL, GitHub CSV, or Linear CSV with automatic format detection.
/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"
}
/api/v1/import-export/import
Upload a file to import issues. Supports multiple formats:
| Format | Value | Description |
|---|---|---|
| Auto-detect | auto | Automatically detects the format from file content and headers |
| Gnoll | jsonl | Native JSONL format (from Gnoll export) |
| GitHub | github_csv | GitHub Issues CSV export |
| Linear | linear_csv | Linear CSV export |
The endpoint accepts multipart/form-data with these fields:
| Field | Required | Description |
|---|---|---|
file | Yes | The file to import (max 10 MB) |
format | Yes | Format string (see table above) — use auto for detection |
projectId | Yes | Target project ID |
dryRun | No | Set to true to preview without importing |
When format=auto, Gnoll examines the file to determine its type:
{, it's treated as JSONLThe response includes the detectedFormat so you know what was identified.
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"
/api/v1/import-export/import/preview
Preview what columns were detected and see the first 10 rows before committing to an import.
Each format maps fields to Gnoll's model:
| GitHub Column | Gnoll Field |
|---|---|
| Title | title |
| Body | description |
| State | status (open/closed) |
| Labels | labels (comma-separated) |
| Assignees | assignee |
| Linear Column | Gnoll Field |
|---|---|
| Title | title |
| Description | description |
| Priority | priority (Urgent→4, High→3, Medium→2, Low→1) |
| Status | status (Done/Completed→closed, In Progress→in_progress) |
| Labels | labels |
| Assignee | assignee |
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.