Create your first issue and execute basic queries with the Linear API.
@linear/sdk)import { LinearClient } from "@linear/sdk";
const client = new LinearClient({ apiKey: process.env.LINEAR_API_KEY });
// Get all teams you have access to
const teams = await client.teams();
console.log("Your teams:");
teams.nodes.forEach(team => {
console.log(` - ${team.name} (${team.key})`);
});
// Get the first team
const team = teams.nodes[0];
// Create an issue
const issueCreate = await client.createIssue({
teamId: team.id,
title: "My first Linear issue from the API",
description: "This issue was created using the Linear SDK!",
});
if (issueCreate.success) {
const issue = await issueCreate.issue;
console.log(`Created issue: ${issue?.identifier} - ${issue?.title}`);
console.log(`URL: ${issue?.url}`);
}
// Get recent issues from your team
const issues = await client.issues({
filter: {
team: { key: { eq: team.key } },
},
first: 10,
});
console.log("Recent issues:");
issues.nodes.forEach(issue => {
console.log(` ${issue.identifier}: ${issue.title} [${issue.state?.name}]`);
});
| Error | Cause | Solution |
|---|---|---|
Team not found |
Invalid team ID or no access | Use client.teams() to list accessible teams |
Validation error |
Missing required fields | Ensure title and teamId are provided |
Permission denied |
Insufficient permissions | Check API key scope in Linear settings |
Rate limited |
Too many requests | Add delays between requests |
import { LinearClient } from "@linear/sdk";
async function helloLinear() {
const client = new LinearClient({
apiKey: process.env.LINEAR_API_KEY
});
// 1. Get current user
const viewer = await client.viewer;
console.log(`Hello, ${viewer.name}!`);
// 2. List teams
const teams = await client.teams();
const team = teams.nodes[0];
console.log(`Using team: ${team.name}`);
// 3. Create issue
const result = await client.createIssue({
teamId: team.id,
title: "Hello from Linear SDK!",
description: "Testing the Linear API integration.",
priority: 2, // Medium priority
});
if (result.success) {
const issue = await result.issue;
console.log(`Created: ${issue?.identifier}`);
}
// 4. Query issues
const issues = await client.issues({ first: 5 });
console.log(`\nYour latest ${issues.nodes.length} issues:`);
issues.nodes.forEach(i => console.log(` - ${i.identifier}: ${i.title}`));
}
helloLinear().catch(console.error);
const query = `
query Me {
viewer {
id
name
email
}
}
`;
const response = await fetch("https://api.linear.app/graphql", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": process.env.LINEAR_API_KEY,
},
body: JSON.stringify({ query }),
});
const data = await response.json();
console.log(data);
After creating your first issue, proceed to linear-sdk-patterns for best practices.