Skip to content

Pagination & Filtering

All list endpoints use a consistent pagination and filtering interface.

Offset-based pagination with two parameters:

ParameterTypeDefaultDescription
limitinteger20Records per page. Maximum: 100
offsetinteger0Number of records to skip
GET /api/v1/notes?limit=20&offset=40

Returns records 41–60. The meta.total field indicates the total count (excluding soft-deleted records unless explicitly requested).

All list endpoints accept:

ParameterTypeDefaultDescription
sortstringcreated_atField to sort by. Valid fields depend on the domain (documented per endpoint)
orderstringdescDirection: asc or desc

The ?fields= parameter selects which fields to return in data, reducing response size.

GET /api/v1/events?fields=title,start_at,end_at,location

Rules:

RuleBehavior
No ?fields=Returns all fields (default)
idAlways included automatically
Envelope fields (meta, tier)Never filtered — always present
Nested fields (attendees.email)Not supported. Use the root field name (attendees)
?fields= + ?format=compactMutually exclusive → 400 INVALID_QUERY
Non-GET methods?fields= is silently ignored
DomainFields
Notesid, title, content, content_format, tags, pinned, archived, custom_fields, source, source_id, created_at, updated_at, synced_at, deleted_at
Eventsid, title, description, location, start_at, end_at, all_day, recurrence, status, calendar_name, reminders, attendees, custom_fields, source, source_id, created_at, updated_at, synced_at, deleted_at
Contactsid, display_name, first_name, last_name, emails, phones, company, job_title, addresses, notes, avatar_path, tags, custom_fields, source, source_id, created_at, updated_at, synced_at, deleted_at
Emailsid, message_id, thread_id, subject, from_address, from_name, to_addresses, cc_addresses, body_plain, body_html, has_attachments, folder, is_read, is_starred, received_at, account_id, status, created_at, updated_at, deleted_at
Filesid, filename, filepath, mime_type, size_bytes, parent_folder, is_directory, metadata, tags, custom_fields, created_at, updated_at, deleted_at
Diaryid, entry_date, content, mood, tags, weather, custom_fields, is_draft, created_at, updated_at, deleted_at

Request:

GET /api/v1/events?date=today&fields=title,start_at,end_at,location

Response (200 OK):

{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Standup",
"start_at": "2026-02-18T09:00:00Z",
"end_at": "2026-02-18T09:30:00Z",
"location": "Discord"
}
],
"meta": {
"total": 1,
"limit": 20,
"offset": 0
},
"tier": "free"
}