{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/linear/refs/heads/main/json-schema/linear-issue-schema.json",
"title": "Linear Issue",
"description": "A Linear issue representing a unit of work within a team",
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Unique UUID identifier for the issue"
},
"identifier": {
"type": "string",
"description": "Human-readable identifier like ENG-123",
"pattern": "^[A-Z]+-[0-9]+$"
},
"title": {
"type": "string",
"description": "Title of the issue",
"minLength": 1,
"maxLength": 512
},
"description": {
"type": "string",
"description": "Markdown description of the issue"
},
"priority": {
"type": "integer",
"description": "Priority: 0=No Priority, 1=Urgent, 2=High, 3=Medium, 4=Low",
"enum": [0, 1, 2, 3, 4]
},
"estimate": {
"type": "number",
"description": "Story point estimate"
},
"state": {
"$ref": "#/$defs/WorkflowState"
},
"assignee": {
"$ref": "#/$defs/User"
},
"creator": {
"$ref": "#/$defs/User"
},
"team": {
"$ref": "#/$defs/Team"
},
"project": {
"$ref": "#/$defs/Project"
},
"cycle": {
"$ref": "#/$defs/Cycle"
},
"labels": {
"type": "array",
"items": {
"$ref": "#/$defs/IssueLabel"
}
},
"url": {
"type": "string",
"format": "uri",
"description": "Direct URL to the issue in Linear"
},
"branchName": {
"type": "string",
"description": "Suggested git branch name for the issue"
},
"dueDate": {
"type": "string",
"format": "date",
"description": "Due date for the issue"
},
"completedAt": {
"type": ["string", "null"],
"format": "date-time",
"description": "Timestamp when the issue was completed"
},
"canceledAt": {
"type": ["string", "null"],
"format": "date-time",
"description": "Timestamp when the issue was canceled"
},
"startedAt": {
"type": ["string", "null"],
"format": "date-time",
"description": "Timestamp when work on the issue started"
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Timestamp when the issue was created"
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Timestamp when the issue was last updated"
},
"number": {
"type": "integer",
"description": "Sequential number within the team"
},
"trashed": {
"type": "boolean",
"description": "Whether the issue is in the trash"
}
},
"required": ["id", "identifier", "title", "createdAt", "updatedAt"],
"$defs": {
"WorkflowState": {
"type": "object",
"description": "Workflow state of an issue",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" },
"type": {
"type": "string",
"enum": ["triage", "backlog", "unstarted", "started", "completed", "cancelled"]
},
"color": {
"type": "string",
"description": "Hex color code",
"pattern": "^#[0-9a-fA-F]{6}$"
}
},
"required": ["id", "name", "type"]
},
"User": {
"type": "object",
"description": "A Linear user",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" },
"email": { "type": "string", "format": "email" },
"displayName": { "type": "string" },
"avatarUrl": { "type": "string", "format": "uri" },
"active": { "type": "boolean" }
},
"required": ["id", "name"]
},
"Team": {
"type": "object",
"description": "A Linear team",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" },
"key": {
"type": "string",
"description": "Short team identifier used in issue identifiers"
},
"description": { "type": "string" }
},
"required": ["id", "name", "key"]
},
"Project": {
"type": "object",
"description": "A Linear project grouping related issues",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" },
"description": { "type": "string" },
"state": {
"type": "string",
"enum": ["planned", "started", "paused", "completed", "cancelled"]
},
"progress": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Completion progress from 0 to 1"
}
},
"required": ["id", "name"]
},
"Cycle": {
"type": "object",
"description": "A sprint cycle in Linear",
"properties": {
"id": { "type": "string" },
"number": { "type": "integer" },
"name": { "type": "string" },
"startsAt": { "type": "string", "format": "date-time" },
"endsAt": { "type": "string", "format": "date-time" }
},
"required": ["id", "number"]
},
"IssueLabel": {
"type": "object",
"description": "A label applied to an issue",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" },
"color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }
},
"required": ["id", "name"]
}
}
}