Build on TaskInSync

A scoped-key REST API, a zero-dependency JavaScript SDK, HMAC-signed webhooks — and a 47-tool MCP server for AI agents.

Authentication

Create an API key in the app under Settings → API keys, then send it on every request as the x-api-key header. Keys are scoped:

REST endpoints — base URL https://tasknest-production-8f56.up.railway.app/api/v1 · OpenAPI 3.0 spec

MethodPathScopeWhat it does
GET/projectsreadList your projects
GET/projects/:idreadOne project (includes tasks)
GET/projects/:id/tasksreadList a project's tasks
GET/projects/:id/tasks/:taskIdreadOne task
POST/projects/:id/taskswriteCreate a task
PATCH/projects/:id/tasks/:taskIdwriteUpdate task fields
PATCH/projects/:id/tasks/:taskId/statuswriteMove a task (workflow rules apply)
DELETE/projects/:id/tasks/:taskIdwriteDelete a task

Responses use the envelope { "success": true, "data": … }; errors are { "success": false, "error": "…" } with a matching HTTP status.

Quickstart — curl

curl -H "x-api-key: tn_live_XXXX" \
  https://tasknest-production-8f56.up.railway.app/api/v1/projects

curl -X POST -H "x-api-key: tn_live_XXXX" -H "Content-Type: application/json" \
  -d '{"title":"Ship the integration","priority":"High"}' \
  https://tasknest-production-8f56.up.railway.app/api/v1/projects/PROJECT_ID/tasks

Quickstart — JavaScript SDK

Zero dependencies, works in Node 18+ and the browser. Download tasknest-sdk.js or import it straight from this site:

import { TaskInSync } from 'https://taskinsync.com/sdk/tasknest-sdk.js';

const tn = new TaskInSync({ apiKey: 'tn_live_XXXX' });

const projects = await tn.projects.list();
const task     = await tn.tasks.create(projects[0].id, {
  title: 'Created from the SDK', priority: 'High', tags: ['api'],
});
await tn.tasks.updateStatus(projects[0].id, task.id, 'In Progress');
Errors: every method rejects with a TaskInSyncError carrying { status, code, message } — e.g. a read-scope key calling a write endpoint rejects with status: 403.

GraphQL

One endpoint — POST https://tasknest-production-8f56.up.railway.app/api/graphql with your JWT (Authorization: Bearer …) and a body of { "query": "…" }. Queries: me, projects, project(id:), wikiPages(projectId:), search(q:). Mutations: createTask, updateTask, deleteTask — same validation and workflow rules as REST.

{ projects { id, name, taskCount } }

mutation {
  createTask(projectId: "PROJECT_ID", title: "From GraphQL", priority: "High") { id, title, status }
}
Limits: depth ≤ 8, ≤ 200 fields per query — the executor is dependency-free and hand-bounded, so malformed or hostile queries fail fast with a GraphQL-style errors array.

Also on the platform

Get started free →