TaskNotes NLP API
The NLP API parses natural-language task text and optionally creates a task.
Endpoints
POST /api/nlp/parsePOST /api/nlp/create
Both endpoints require a JSON body with text.
Request Format
{
"text": "Review PR #123 tomorrow high priority @work"
}
Notes:
textis required and must be a string.- Per-request
localeis not currently supported. - Parser language comes from TaskNotes settings (
nlpLanguage).
POST /api/nlp/parse
Parses text and returns two objects:
parsed: direct parser outputtaskData: normalized task payload that would be used for creation
Example response (shape):
{
"success": true,
"data": {
"parsed": {
"title": "Review PR",
"tags": ["123"],
"contexts": ["work"],
"projects": [],
"priority": "high",
"status": null,
"dueDate": "2026-02-22",
"scheduledDate": null,
"dueTime": null,
"scheduledTime": null,
"recurrence": null,
"estimate": null,
"isCompleted": false
},
"taskData": {
"title": "Review PR",
"priority": "high",
"status": "open",
"tags": ["123"],
"contexts": ["work"],
"projects": [],
"due": "2026-02-22",
"scheduled": null,
"recurrence": null,
"timeEstimate": null
}
}
}
If parser does not detect status, taskData.status falls back to your default status workflow.
POST /api/nlp/create
Parses text and creates a task in one call.
Returns HTTP 201 on success.
Example:
curl -X POST http://localhost:8080/api/nlp/create \
-H "Content-Type: application/json" \
-d '{"text":"Call mom due friday 2pm #personal"}'
Response fields:
data.task(created task)data.parsed(parser output)
What the Parser Extracts
The parser can extract:
- Dates and times (
tomorrow,friday 2pm, ISO dates) - Priority terms (
high priority,urgent, symbol patterns) - Status terms (mapped to your configured statuses)
- Tags (
#tag) - Contexts (
@context) - Projects (
+project) - Time estimates (
2h,30min,estimate 45m) - Recurrence (
daily,weekly,every monday)
Exact parsing behavior depends on your TaskNotes NLP settings and trigger configuration.
Error Responses
Common errors:
400: missing/invalidtext401: auth required (if API token is enabled)500: parse/processing error
Error shape:
{
"success": false,
"error": "Text field is required and must be a string"
}
Client Examples
JavaScript
async function parseTask(text) {
const response = await fetch("http://localhost:8080/api/nlp/parse", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text })
});
return response.json();
}
async function createTaskFromText(text) {
const response = await fetch("http://localhost:8080/api/nlp/create", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text })
});
return response.json();
}
Python
import requests
def parse_task(text):
response = requests.post(
"http://localhost:8080/api/nlp/parse",
json={"text": text},
)
return response.json()
def create_task_from_text(text):
response = requests.post(
"http://localhost:8080/api/nlp/create",
json={"text": text},
)
return response.json()
Authentication
If API auth token is enabled, include bearer token:
Authorization: Bearer YOUR_TOKEN