Endpoints
API v1 endpoint reference.
All endpoints are under:
/api/v1Me
GET /meReturns the profile, enabled scopes, and credit status for the bearer token.
Collections
GET /collections
GET /collections/:idRequires collections:read.
Collection responses use public camelCase fields and omit internal owner fields:
{
"id": "collection-id",
"name": "AI Research",
"slug": "ai-research",
"description": "Articles and source updates about AI",
"nestornotesEmail": "ai-research@nnotes.me",
"defaultCollection": false,
"defaultSetNestornotesEmail": null,
"scheduleType": "daily",
"scheduleTime": 8,
"scheduleDay": null,
"scheduleTimezone": "Europe/Berlin",
"sendEmailSummaries": true
}Knowledge
GET /knowledge
GET /knowledge/:id
PATCH /knowledge/:idGET requires knowledge:read. PATCH requires knowledge:write.
List filters:
collection_idobject_typesummarizedbookmarkedarchivedseencreated_aftercreated_beforeupdated_afterupdated_beforelimitoffset
Mutable fields:
{
"seen": true,
"bookmarked": true,
"archived": false,
"include_in_digest": true
}Knowledge responses use public camelCase fields and omit internal owner fields:
{
"id": "knowledge-id",
"objectId": "article-id",
"objectType": "article",
"collectionId": "collection-id",
"summarized": true,
"includeInDigest": true,
"sentInDigest": false,
"seen": false,
"bookmarked": true,
"archived": false,
"storedInDocuments": false,
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-03T00:00:00.000Z"
}Tags
POST /knowledge/:id/tags
DELETE /knowledge/:id/tags/:tag_idRequires tags:write.
Create or attach a tag by name:
{
"name": "Important"
}Tag mutation responses return public camelCase link fields and omit owner fields:
{
"id": "knowledge-tag-link-id",
"knowledgeId": "knowledge-id",
"tagId": "tag-id",
"tag": {
"id": "tag-id",
"name": "Important",
"color": ""
}
}Search
POST /search/keyword
POST /search/semanticRequires search:read.
{
"query": "recent posts about vector databases",
"collection_id": "optional-collection-id",
"limit": 10
}Semantic search also accepts idempotency_key and consumes one credit.
Search responses return public result DTOs:
{
"id": "document-id",
"content": "A matching document snippet",
"metadata": {
"object_id": "article-id"
},
"similarity": 0.91
}Typed Content
Typed content endpoints expose the source-specific rows behind knowledge metadata.
GET /articles
GET /articles/:id
GET /emails
GET /emails/:id
GET /rss/items
GET /rss/items/:id
GET /youtube/videos
GET /youtube/videos/:id
GET /x/posts
GET /x/posts/:id
GET /linkedin/posts
GET /linkedin/posts/:id
GET /podcasts/episodes
GET /podcasts/episodes/:idRequired scopes:
| Endpoints | Scope |
|---|---|
/articles/** | articles:read |
/emails/** | emails:read |
/rss/items/** | rss:read |
/youtube/videos/** | youtube:read |
/x/posts/** | x:read |
/linkedin/posts/** | linkedin:read |
/podcasts/episodes/** | podcasts:read |
List filters:
collection_idarchivedbookmarkedsummarizedfromtolimitoffset
Source-specific list filters:
- RSS items:
channel_id - YouTube videos:
channel_id - X posts:
account_id - LinkedIn posts:
source_id - Podcast episodes:
show_id
Detail ids are profile-scoped item ids for source items: profile_item_id, profile_post_id, or profile_episode_id. Articles use article id; emails use incoming_email_id.
Typed content responses use public camelCase DTO fields. Article lists return metadata state, while article details return summary content:
{
"id": "article-id",
"name": "Saved article",
"collectionName": "AI Research",
"collectionId": "collection-id",
"knowledgeMetadataId": "knowledge-id",
"metadataTags": ["tag-id"],
"includeInDigest": true,
"storedInDocuments": false,
"createdAt": "2026-01-03T00:00:00.000Z"
}Email list responses omit the full HTML body; email detail responses include htmlEmail:
{
"incomingEmailId": "email-id",
"subject": "Product update",
"emailFrom": "sender@example.com",
"emailReceivedAt": "2026-01-05T00:00:00.000Z",
"includeInDigest": true,
"shortDescription": "A short summary"
}RSS item responses use profileItemId as the detail id and include worker-owned
fetch/fallback status fields:
{
"profileItemId": "rss-profile-item-id",
"id": "rss-item-id",
"rssChannelId": "rss-channel-id",
"title": "Feed item title",
"link": "https://example.com/post",
"pubDate": "2026-01-06T00:00:00.000Z",
"includeInDigest": true,
"processingStatus": "summarized",
"articleFetchStatus": "fetched",
"fallbackUsed": false,
"contentSource": "article"
}YouTube video responses use profileItemId as the detail id and expose public video
metadata plus summary state:
{
"profileItemId": "youtube-profile-item-id",
"id": "youtube-item-id",
"videoId": "youtube-video-id",
"youtubeChannelId": "youtube-channel-id",
"title": "Video title",
"publishedAt": "2026-01-06T00:00:00.000Z",
"thumbnailUrl": "https://img.youtube.com/vi/youtube-video-id/default.jpg",
"duration": "PT5M",
"viewCount": 100,
"includeInDigest": true
}X, LinkedIn, and podcast responses also expose public source metadata and summary state through camelCase fields. Provider raw blobs are omitted.
{
"profileItemId": "x-profile-item-id",
"id": "x-item-id",
"xAccountId": "x-account-id",
"title": "X post title",
"bodyText": "Post body text",
"postUrl": "https://x.com/example/status/123",
"sourceStatus": "fetched",
"sourceUrls": ["https://example.com/source"],
"includeInDigest": true
}{
"profilePostId": "linkedin-profile-post-id",
"id": "linkedin-post-id",
"linkedinSourceId": "linkedin-source-id",
"sourceName": "Example Company",
"postUrl": "https://www.linkedin.com/feed/update/...",
"text": "Post text",
"postedAt": "2026-01-08T00:00:00.000Z",
"includeInDigest": true
}{
"profileEpisodeId": "podcast-profile-episode-id",
"id": "podcast-episode-id",
"podcastShowId": "podcast-show-id",
"showTitle": "Example Podcast",
"title": "Episode title",
"publishedAt": "2026-01-09T00:00:00.000Z",
"transcriptStatus": "completed",
"transcriptProvider": "assemblyai",
"includeInDigest": true
}Credits And Usage
GET /credits
GET /usageGET /credits requires credits:read and returns the current credit status plus active action costs.
GET /usage requires usage:read.
Credit responses use public camelCase fields:
{
"status": {
"creditsRemaining": 10,
"creditsLimit": 10
},
"actionCosts": [
{
"actionType": "api_semantic_search",
"credits": 1,
"description": "Semantic search"
}
]
}Usage filters:
action_typefromtolimitoffset
Usage responses also use camelCase fields and omit internal owner fields:
{
"id": "usage-id",
"actionType": "api_semantic_search",
"credits": 1,
"objectType": "api_key",
"objectId": "api-key-id",
"idempotencyKey": "idempotency-key",
"metadata": {},
"periodStart": "2026-01-01T00:00:00.000Z",
"periodEnd": "2026-02-01T00:00:00.000Z",
"createdAt": "2026-01-07T00:00:00.000Z"
}