Skip to content
WorkRoad home
REST API

Search everything

GET
/search

Finds notes (and their headings), lecture recordings, note files, study sets and their terms, tasks, timetables, copilot conversations and practice tests by their words, the same search as the app's command menu. Use it to turn something the user names ("my mitosis notes", "the Spanish verbs set") into an id, then read or change the record with its own tool. Hits come best match first, 20 a page, and only for the types this key may read: note and recording need notes:view, file files:view, set and term sets:view, task tasks:view, schedule schedule:view, conversation copilot:use, test tests:view. Without settings:view, a copilot conversation that read or proposed the user's settings is skipped. Shares the app's search limit of 60 a minute per user.

Required scopes: notes:view or files:view or sets:view or tasks:view or schedule:view or copilot:use or tests:view

Authorization

headerAuthorizationBearer <token>

Query Parameters

q*string

Words to find, 1-200 characters. Matches whole words and prefixes, ignores accents and case, and tolerates a typo in titles. "exact phrase" and -word work as in the app.

Length1 <= length <= 200
types?string

Comma-separated record types to search: note, recording, file, set, term, task, schedule, conversation, test. Omit for every type the key may read.

Lengthlength <= 200
subjectId?string

Only records filed under this subject.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
semantic?string

true also matches by meaning (hybrid search), for questions like how do cells make energy. Defaults to false, keyword search only.

Value in"true""false"
cursor?|

Opaque. Pass nextCursor from the previous page unchanged.

Response Body

OK

application/json
  1. response
data*array<>
nextCursor*|

Opaque. Pass as cursor with the same query for the next 20 hits. Null on the last page.

total*integer

Hits across every page.

Range-9007199254740991 <= value <= 9007199254740991
mode*string

hybrid when meaning matches were added. A semantic search falls back to keyword when embeddings are unavailable.

Value in"keyword""hybrid"
Example Request
curl -X GET 'https://workroad.app/api/v1/search?q=string' \  -H 'Authorization: Bearer $WORKROAD_API_KEY'
Example Response
{  "data": [    {      "type": "term",      "id": "2a1b0c9d-8e7f-4a6b-9c5d-4e3f2a1b0c9d",      "parentId": "7e6d5c4b-3a2f-4e1d-8c0b-9a8f7e6d5c4b",      "title": "Spanish verbs",      "snippet": "tener (yo): tuve",      "task": null,      "url": "https://workroad.app/set/get/7e6d5c4b-3a2f-4e1d-8c0b-9a8f7e6d5c4b?element=2a1b0c9d-8e7f-4a6b-9c5d-4e3f2a1b0c9d",      "updatedAt": "2026-02-01T12:00:00.000Z"    }  ],  "nextCursor": null,  "total": 1,  "mode": "keyword"}