Skip to content

List cards

GET/v1/cards
Authorization
AuthorizationBearer token (OAuth access token or teakapi_ API key) · headerrequired

Bearer token. Accepts either an OAuth 2.0 access token (obtained via browser sign-in; expires after 1 hour and is refreshable) or a teakapi_ API key.

Query parameters
qstring

Search text with optional qualifiers: tag:design or #design, type:link, is:fav, is:pinned (cards pinned to the top), is:archived, is:done (links marked done), is:todo (articles, books, films, shows, podcasts, music, products, recipes, courses, events, apps and games not yet done), site:github.com, folder:"Reading list", like:<cardId> (the cards closest in meaning to that card), mood:"moody brutalist" (images by mood), price:<100 (also >, <=, >= and =, on the amount in any currency; only links with a price match), text:"total due" (only the words Teak read in images, video thumbnails, link previews and scanned PDFs) and "quoted phrases". A - before a word, phrase or qualifier leaves those cards out (design -figma, -tag:old, -is:archived; not like: or mood:), uppercase OR matches either side (tag:fonts OR tag:type), and parentheses group ((site:github.com OR site:gitlab.com) -is:archived). A - binds tightest, then a space, then OR; lowercase or and a - inside a word (to-do) are plain text. Qualifiers combine with the other parameters; several price: bounds make a range. Cards tagged secret or hidden (isHidden) are left out of every list unless the search names one of those tags: q=#secret, q=tag:hidden or tag=secret (-tag:hidden never shows them, and tag:hidden OR tag:x shows them only through the tag:hidden side). The plain word secret does not show them.

similarTostring

A card id: only the cards closest to it in meaning, of any type, never the card itself (the same as like:<id> in q). Other parameters narrow them and sort orders them. A malformed id returns 400 INVALID_INPUT; a card in Trash or not found returns no items with similarity: "unavailable".

modestring

How q finds cards: hybrid (default) matches words and meaning, so cozy reading nook also finds a photo of an armchair by a window; keyword matches words only; semantic matches meaning only. Filters, qualifiers and sort apply in every mode. The response's searchMode says which ran.

default: "hybrid"
Allowed:hybridkeywordsemantic
limitinteger

Page size, default 50. A whole number above 100 returns 100; anything that isn't a whole number from 1 up is 400 INVALID_INPUT.

min 1 · max 100
cursorstring
sortstring

Order by the date each card was last saved (savedAt): newest (default) or oldest. Saving a link that's already in Teak moves its card to the top of newest; an imported card keeps its original date. Or shuffle: a stable random order picked by shuffleSeed. A search, tag or folder shuffles its matches (a search its best 400, a tag or folder its newest 2,000). Or relevance (Best match), with q: the search's top 64 results by how well they match its words, then the rest in search order. Without q it is newest. The response's relevanceRanked says whether the top results were scored; the first page decides, and every later page keeps its order.

Allowed:newestoldestrelevanceshuffle
shuffleSeedinteger

Required with sort=shuffle: a whole number from 0 to 2147483647. The same seed gives the same order on every page and device; pick a new one to reshuffle. A cursor only works with the seed that issued it.

min 0 · max 2147483647
typestring[]

Repeat to match any selected card type, for example type=image&type=link.

tagstring
favoritedboolean
pinnedboolean

Only cards pinned to the top of the library, like q=is:pinned. Without a search, the pinned cards come back in their pinned order as one page.

trashedboolean

List only cards in Trash when true.

folderstring

Only cards in this folder; for a smart folder, the cards its search matches (combined with q). An unknown folder returns 404.

archivedstring

Archived cards to list: exclude (the default) leaves them out, only lists just them, include lists them with the rest. Trash lists every trashed card whatever this says.

Allowed:excludeonlyinclude
stylestring[]

Repeat to match any selected value within this filter.

huestring[]

Repeat to match any selected value within this filter.

hexstring[]

Repeat to match any selected value within this filter.

createdAfternumber
createdBeforenumber
includestring

Comma-separated values: content, metadata, processing

Responses
200

Paginated card list

itemsCardListItem[]required
Show properties
Array of CardListItem
aiSummarystring | null
aiTagsstring[]required
aiTranscriptstring | null

What is said in the card: an audio or video file's transcript, a Vimeo video's captions, or a podcast episode's transcript.

appUrlstring<uri>required
archiveobject | null

A link's saved copy of its page, which Teak keeps privately and opens when the original is gone: full (text, styles and images, up to 20 MB) or text_only (the page was too large), its size in bytes and when it was taken. Null until the copy is saved, and for other cards. The copy itself stays in the app.

Show properties
One of:
object
bytesnumberrequired
capturedAtnumberrequired
kindstringrequired
Allowed:fulltext_only
null
null
articleobject | null

A link's article, taken from its saved copy: its length in words and minutes to read. Null for other cards, until the article is ready, and for pages that aren't articles. Read it with GET /v1/cards/{cardId}/content?kind=article.

Show properties
One of:
object
readingMinutesnumberrequired
wordCountnumberrequired
null
null
highlightCountnumber

Passages highlighted in a link's article, up to 200; 0 for other cards. List them with GET /v1/cards/{cardId}/highlights.

compactUrlstring | null

256px rendition URL for small cards; present for image uploads.

contentstring
colorsobject[]
Show properties
Array of object
hexstringrequired
namestring
createdAtnumberrequired
detailUrlstring | null
fileNamestring | null
fileSizenumber | null
mimeTypestring | null
fileExtensionstring | null
fileKindstring | null
fileLanguagestring | null
filePreviewobject | null
fileHeightnumber | null
fileWidthnumber | null
audioWaveformobject | null

Audio bar heights from 0 to 100: 45 for a grid card and 200 for a player. Null for other cards and audio saved before waveforms.

Show properties
detailnumber[]required
gridnumber[]required
videoScrubobject | null

A horizontal JPEG strip of evenly spaced video frames for hover previews, frames * frameWidth wide. The URL is signed and expires. Null for other cards and videos saved before scrub strips.

Show properties
frameHeightnumberrequired
frameWidthnumberrequired
framesnumberrequired
urlstringrequired
fileUrlstring | null
idstringrequired
isDeletedboolean
isArchivedbooleanrequired

Archived cards are hidden from the library and listings unless you ask for them with archived.

completedAtnumber | null

When the link was marked read, watched, bought or otherwise done (POST /v1/cards/{cardId}/done), or null when it isn't. is:done and is:todo in q filter on it.

folderIdsstring[]

Ids of the folders the card is in (at most 50).

isFavoritedbooleanrequired
isPinnedboolean

True while the card is pinned to the top of the library, at most 12 cards. Archiving or trashing a card unpins it.

isHiddenboolean

True when one of the card's tags is secret or hidden (any case). Hidden cards are left out of every list and search unless the search names one of those tags, as q=#secret, q=tag:hidden or tag=secret. Getting the card by id, /v1/cards/changes and exports still include it. Read-only: change the tags to change it.

linkPreviewImageUrlstring | null
linkPreviewDescriptionstring | null
linkFactsobject[]
Show properties
Array of object
labelstringrequired
valuestringrequired
linkFaviconUrlstring | null
linkPreviewTitlestring | null
linkCategorystring | null

What a link is, such as article, movie, product or game, or null before Teak has read it. A plain string: new categories are added over time, so accept values you don't know.

linkPriceobject | null

A product link's price, read from the page: amount in the page's currency and currency as an ISO 4217 code, or null when the page didn't say which. Null for cards without a price. price: in q compares amount.

Show properties
amountnumberrequired
currencystring | nullrequired
linkPreviewMediaobject[]
Show properties
Array of object
typestringrequired
Allowed:imagevideo
urlstringrequired
contentTypestring
widthnumber
heightnumber
posterUrlstring
posterContentTypestring
posterWidthnumber
posterHeightnumber
linkSiteNamestring | null
linkAuthorstring | null
linkPublisherstring | null
linkPublishedAtstring | null
metadataDescriptionstring | null
metadataTitlestring | null
notesstring | null
placeholderUrlstring | null

48px loading-placeholder rendition URL; present for image uploads.

metadataStatusstring | null
processingStatusobject | null

Per-stage processing state (classify, categorize, metadata, renderables, screenshot, archive, article), or null once nothing is tracked.

savedAtnumber

When the card was last saved. It starts equal to createdAt and moves to the time of the save when you save the same link again (POST /v1/cards answers resaved: true). sort=newest and sort=oldest order by it. createdAt stays the date the card was first saved.

screenshotUrlstring | null
sourceTitlestring | null

The title of the page the card was saved from, beside sourceUrl.

sourceUrlstring | null

The page the card was saved from, such as the page a quote was selected on. Set when the card is created; site: matches its host when the card has no url. Not the same as source, the free label sent at create.

tagsstring[]required
thumbnailOverriddenboolean

True when linkPreviewImageUrl is an image chosen for this link (PUT /v1/cards/{cardId}/thumbnail) rather than the one Teak found.

thumbnailUrlstring | null
typestringrequired
updatedAtnumberrequired
urlstring | null
pageInfoCardPageInforequired
Show properties
hasMorebooleanrequired
nextCursorstring | nullrequired

Opaque cursor for the next page, or null on the last page. Pages resume after the last item returned, so cards added or removed between requests never repeat or skip items. Pass it back unchanged with the same filters; an invalid cursor returns 400.

similaritystring

With similarTo, like: or mood:: pending while the card is still being read (try again in a moment), unavailable for a card in Trash or not found.

Allowed:okpendingunavailable
searchModestring

With q: how the search found cards. keyword when meaning search was not used: mode=keyword, no words to search by meaning, or the meaning service was slow, down or rate-limited.

Allowed:hybridkeywordsemantic
relevanceRankedboolean

With q and sort=relevance: whether the search's top results are ordered by how well they match. false when scoring was slow, failed, rate-limited, or AI is turned off for the account; the results then keep the search order.

400

Invalid request

codestringrequired
errorstringrequired
retryAtnumber | null
Try it
Server
Authorization
Parameters
Request
curl -X GET 'https://teakvault.com/api/v1/cards' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Accept: application/json'
Response
{
  "items": [
    {
      "aiSummary": "string",
      "aiTags": [
        "string"
      ],
      "aiTranscript": "string",
      "appUrl": "http://example.com",
      "archive": {
        "bytes": 0,
        "capturedAt": 0,
        "kind": "full"
      },
      "article": {
        "readingMinutes": 0,
        "wordCount": 0
      },
      "highlightCount": 0,
      "compactUrl": "string",
      "content": "string",
      "colors": [
        {
          "hex": "string",
          "name": "string"
        }
      ],
      "createdAt": 0,
      "detailUrl": "string",
      "fileName": "string",
      "fileSize": 0,
      "mimeType": "string",
      "fileExtension": "string",
      "fileKind": "string",
      "fileLanguage": "string",
      "filePreview": {},
      "fileHeight": 0,
      "fileWidth": 0,
      "audioWaveform": {
        "detail": [
          0
        ],
        "grid": [
          0
        ]
      },
      "videoScrub": {
        "frameHeight": 0,
        "frameWidth": 0,
        "frames": 0,
        "url": "string"
      },
      "fileUrl": "string",
      "id": "string",
      "isDeleted": true,
      "isArchived": true,
      "completedAt": 0,
      "folderIds": [
        "string"
      ],
      "isFavorited": true,
      "isPinned": true,
      "isHidden": true,
      "linkPreviewImageUrl": "string",
      "linkPreviewDescription": "string",
      "linkFacts": [
        {
          "label": "string",
          "value": "string"
        }
      ],
      "linkFaviconUrl": "string",
      "linkPreviewTitle": "string",
      "linkCategory": "string",
      "linkPrice": {
        "amount": 0,
        "currency": "string"
      },
      "linkPreviewMedia": [
        {
          "type": "image",
          "url": "string",
          "contentType": "string",
          "width": 0,
          "height": 0,
          "posterUrl": "string",
          "posterContentType": "string",
          "posterWidth": 0,
          "posterHeight": 0
        }
      ],
      "linkSiteName": "string",
      "linkAuthor": "string",
      "linkPublisher": "string",
      "linkPublishedAt": "string",
      "metadataDescription": "string",
      "metadataTitle": "string",
      "notes": "string",
      "placeholderUrl": "string",
      "metadataStatus": "string",
      "processingStatus": {},
      "savedAt": 0,
      "screenshotUrl": "string",
      "sourceTitle": "string",
      "sourceUrl": "string",
      "tags": [
        "string"
      ],
      "thumbnailOverridden": true,
      "thumbnailUrl": "string",
      "type": "string",
      "updatedAt": 0,
      "url": "string"
    }
  ],
  "pageInfo": {
    "hasMore": true,
    "nextCursor": "string"
  },
  "similarity": "ok",
  "searchMode": "hybrid",
  "relevanceRanked": true
}

Was this page helpful?