Search
Search everything at once.
On this page
Search everything
GET/search
Search people, projects, notes, tasks, calendar events, documents, task lists and folders.
The best matches of each type, as the web omnibar finds them: people by name or alias (prefix words,
misspellings), email, phone digits or link; projects by name (prefix words, misspellings) or reference, open ones first;
notes by title, tag names, mentioned people's names and aliases, referenced projects' names, or text; tasks by title (prefix
words, misspellings), open ones first, then the most recently closed; events (each occurrence on its own, as
GET /calendar gives it, ignored ones left out) by every word starting a word of their title or location, from
7 days before today to 7 after in the owner's time zone, nearest to now first; documents by name (prefix words,
misspellings); task lists and folders by name (prefix words). Case and accents don't matter. One group per
requested type in this order (person, project, note, task, event, document, task_list, folder), empty ones included. Not paginated:
limit is per type, and has_more says there are more (for notes, page through them with GET /notes?q=).
Results are a snapshot to look up by id, not records to sync. A blank q gives empty groups (but see on and
scope=link). Expired tasks are archived first.
on narrows every group to one day in the owner's time zone (the omnibar's when:): notes written that day;
tasks due or starting that day; events on that day, in order (one that runs into it from an earlier day
included); documents dated that day, or added that day without a date. People, projects, task lists and folders
have no day, so their groups are empty. With a blank q, each group lists that day's: notes and documents
newest first (without an email's attachments), tasks open ones first; with scope=content, a blank q gives
an empty group, as without on.
scope=content searches inside documents instead (the web omnibar's +): only the document group, with
documents whose text or summary has every word typed as a word's prefix, best match first. Each result's
subtitle is the document's type, if it's been analysed, and an excerpt around the first match.
scope=link finds what can be linked (the web linker): the person, project, note, task, event and
document groups only, and company when types asks for it (companies only here: by name, prefix words,
subtitle "Company"). They match as above, but documents by name, then those matching only by their text or
summary, newest first. A blank q (without on) gives the most recently added notes, documents (without an
email's attachments) and tasks (open ones first), newest first, and the events as above; people and projects
need words. A note's and a document's subtitle is its kind ("Note", "PDF", "Email" or "Image"), its date (a
note's creation, a document's dated_on, else the day it was added) in the owner's time zone ("3 Oct", with
the year unless it's this year's), then any detail: a titled note's start, a document's folder path, or an
excerpt around a text match ("PDF · 3 Oct · Home › Insurance"). A note's title is its name, so an untitled
one has its text's start.
curl "$NIFTY_URL/api/v1/search" \
-H "Authorization: Bearer $NIFTY_TOKEN"
Query parameters
| Name | Description |
|---|---|
qstring · optional | Longer, or containing a NUL, is 400. |
typesstring · optional | Comma-separated, e.g. person,note; the default is every type, person,project,note,task,event,document,task_list,folder. Anything else is 400. |
limitinteger · optional | Results per type. |
scopenames | content | link · optional | names (the default), content or link; with content, types may only be document, and with link, only person, project, note, task, event and document (its default), or company. Anything else is 400. |
ondate · optional | One day in the owner's time zone, YYYY-MM-DD (see above). Not a date is 400. |
Response
200 OK Errors: 400 401 429
{
"data": [
{
"type": "person",
"results": [
{
"id": "string",
"title": "Kitchen renovation",
"subtitle": "Active · due 12 Nov",
"event": {
"type_key": "string",
"received_via_api": {
"at": "2026-10-10T09:30:00Z",
"source": "Zapier"
},
"key": "string",
"link_key": "string",
"feed_id": "01j9zq3k8m5x2v7c4n6b0t1r9e",
"entry_id": "01j9zq3k8m5x2v7c4n6b0t1r9e",
"title": "Team stand-up",
"all_day": true,
"starts_at": "2026-10-10T09:30:00Z",
"ends_at": "2026-10-10T09:30:00Z",
"start_on": "2026-10-10",
"end_on": "2026-10-10",
"location": "Room 2",
"description": "Weekly check-in.",
"url": "string",
"meeting": {
"provider": "google_meet",
"url": "https://example.com"
},
"attendee_count": 0,
"attendee_names": [
"string"
],
"attendees": [
{
"name": "Maya Okafor",
"email": "[email protected]",
"organizer": true,
"person_id": "01j9zq3k8m5x2v7c4n6b0t1r9e"
}
],
"rrule": "FREQ=WEEKLY;BYDAY=MO,WE",
"repeats": true,
"series_key": "string",
"ignored": "event"
},
"leading": {
"type": "avatar",
"url": "https://example.com"
}
}
],
"has_more": true
}
]
}