GET/v1/cards
List cards
list_cards
Returns cards with filters, sorting and pagination. With preview=1 (for the tile view), each card also has preview (the first 200 characters of text) and preview_tables (sheets with their row counts), within your data profile.
Authentication
Send an API key in the Authorization header: Authorization: Bearer <key>.
Query parameters
collectionstring | nullfolderstring | null<folder ID>returns the cards of the folder and all its subfolders.nonereturns the cards of the collection that are not in any folder and requirescollection(otherwise400 cards.invalid_folder_filter). If the folder does not exist or is not visible to you, the request returns404 folders.not_found.length ≤ 64
statusstring | nullAllowed values:
processingreadyerrorarchivedallownerstring | nullme,noneor a user ID.owner_idinteger | nullverificationstring | nullAllowed values:
verifiedneeds_verificationstalekindCardKindtypestring | nulltablereturns cards with fact tables,textreturns cards without them.Allowed values:
tabletexttagsstring | nullComma-separated tags (a card must have all of them).
idsstring | nullComma-separated card IDs.
searchstring | nullcategorystring | nullsensitiveboolean | nullsortCardSortDefault: "created_at"
orderstringAllowed values:
ascdescDefault: "desc"
limitintegerDefault: 200
offsetintegerDefault: 0
previewbooleantrueaddspreview(the first 200 characters) andpreview_tablesfor the tile view.Default: false
updated_sincestring (date-time)Only cards with
updated_atat or after this moment (RFC 3339 with an offset), for synchronization. Without explicitsortandorder, the list is sorted byupdated_atascending, then byid. Deleted cards are not listed: deletions come as events.metadatamap of stringFilter by
metadata:metadata[<key>]=<value>matches exactly. Up to 3 conditions, and all of them must match (?metadata[team]=support&metadata[crm_id]=A-1042). More than 3 conditions or an invalid key returns400 api.metadata_invalid.collection_idintegerCollection by ID. When
collectionis passed too,collection_idwins. A collection that does not exist in the organization or is not visible returns404 collections.not_found.external_idstringOnly the card with this
external_id.cursorstringCursor of the next page from
X-Next-Cursorornext_cursorof the previous response with the same filters; it carries the page size. Together withoffset:422 validation.failed; a cursor of another list, other filters or a malformed one:400 api.cursor_invalid.length ≤ 512
expand[]array of stringRelated objects to include in the response (since 1.62.0): a path from the
x-expandablelist of the operation. Repeat the parameter up to 10 times. A path has up to 2 segments separated by a dot (collection.default_owner). In a list, the path starts withdata.and applies to every item of the page (expand[]=data.owner). An expanded object goes into theexpandedobject of the item, and the ID field stays. An object that the caller may not see under the checks of its own read operation is expanded asnull. An unknown path, more than 10 paths or a path deeper than 2 segments returns400 api.expand_invalid.items ≤ 10
Header parameters
X-View-AsstringFor API keys with the
adminrole only. Makes the request as the data profile<profile>[:viewer|verifier|editor], for exampleemployee:viewer. The installation key cannot use this header (403).
Cookie parameters
kb_view_asstringCookie of the “View as” mode for a session.
POST /auth/view-assets it andDELETE /auth/view-asclears it.
Responses
200OK
Response headers
LinkAddress of the next page,
<…>; rel="next". No header means this is the last page.X-Next-CursorCursor of the next page for the
cursorparameter. No header means this is the last page.RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
expandedCardExpandedpermissionsObjectPermissionListaccessstringAllowed values:
wholepartialaccess_contactstringWhom to contact for access (only when
access=partial).aclobjectFields
verifybooleanrequiredwritebooleanrequired
categorystringrequiredcategory_confidencenumber | nullrequiredcategory_lockedbooleanrequiredcategory_reviewbooleanrequiredcollectionstringrequiredcollection_idintegerrequiredcollection_titlestringcommentsarray of CardCommentcontent_jsonContentJSON | nullEditor content of the latest published version. The field can be absent; in that case, get the editor content from a draft (
POST /v1/draftswithcard_id).editing_lockEditingLock | nullActive editing lock. The field can be absent; in that case, the editor learns who holds the lock from
409 cards.lockedonPOST /v1/cards/{card_id}/lock.created_atstring (date-time)requireddays_since_verifiedintegerrequirederrorstring | nullrequiredeventsarray of CardEventfeedback_negintegerrequiredfeedback_posintegerrequiredfoldersarray of CardFolderRefCard list only: the folders that contain the card (those visible to the user), with their paths from the collection root. An empty list means the card is not in any folder.
has_tablesbooleanCard list only.
hidden_partsbooleanidstringrequiredjobJob | nullorg_idintegerrequiredowner_activeboolean | nullowner_idinteger | nullrequiredowner_namestring | nullrequiredpagesinteger | nullrequiredparserstring | nullrequiredDocument parser as a neutral code:
document(full structure: pages, headings, tables, scanned pages),pdf(the PDF text layer),docx,xlsx,csv,markdown,html,text. The list can grow.sensitivebooleanrequiredsha256string | nullrequiredsizeintegerrequiredsnoozed_atstring (date-time) | nullsnoozed_byinteger | nullsnoozed_untilstring | nullsource_changedbooleanrequiredsource_pathstring | nullrequiredsource_urlstring | nullrequiredstatusstringrequiredAllowed values:
processingreadyerrorarchivedtablesarray of CardTabletagsarray of stringrequiredtitlestringrequiredtrustnumberrequiredtrust_if_verifiednumberupdated_atstring (date-time)requiredverified_atstring (date-time) | nullrequiredverified_byinteger | nullrequiredverified_by_namestring | nullverifier_idsarray of integerrequiredverifiersarray of objectFields
activebooleanrequiredidintegerrequirednamestringrequired
verify_interval_daysintegerrequiredversionintegerrequiredversionsarray of CardVersionsource_archiveArchiveSourcecreated_byinteger | nullmanual_optionsobjectManual parsing settings (preview).
doc_kindDocKind | nullDocument type.
nullif the type is not determined (for example, for cards indexed before document types were introduced).doc_kind_confidencenumber | nullConfidence in the document type, from 0 to 1.
doc_kind_sourcestring | nullWhat determined the type: rules (
rules), a user (manual) or automatic classification. The list can grow: treat an unknown value as automatic classification.Allowed values:
rulesmanualnullinvoiceDocInvoiceExtraction | nullFields of an invoice, credit note or receipt (only for these types, and only in the card, not in the list).
nullif you do not have access to the whole document, because the fields are extracted from the whole document.warningsarray of ReviewWarningDocument parsing warnings (
ReviewWarning; only in the card, not in the list).enrichmentCardEnrichmentStatus | nullEnrichment status (only in the card, not in the list). The document type, invoice fields and financial records are added in the background after indexing and can be recalculated later; they appear in the card when they are ready.
nullmeans no status is available (the card was indexed without background enrichment).external_idstring | nullID of the card in the integrator's system. It is unique in the organization among cards that do not come from sources;
nullmeans it is not set./v1/cards-by-external-id/{external_id}reads and replaces the card by it.length ≤ 512
metadataMetadata
400The request is invalid: a parameter value or the state of the object does not allow the action (`detail` is a message).
Response headers
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
401No credentials were sent (neither a session cookie nor an API key), or the key was not found.
Response headers
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
403The action is not allowed: the role is insufficient, there is no access to the collection or card, the request runs in “View as” mode, or the organization is suspended or deleted (`detail` is an object with `code: org_suspended | org_deleted`).
Response headers
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
404The object does not exist or is not available to you. The API does not confirm that a restricted object exists.
Response headers
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
422Validation error: the body or parameters do not match the schema (`detail` is a list of validation errors), or a parameter value is out of range (`detail` is a message).
Response headers
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
429Too many requests (`api.rate_limited`), the organization's quota for the minute, day or month is used up (`api.quota_exceeded`; `error.details` holds `quota`, `limit` and `reset_at`), the organization's limit is reached, or the answer service is busy (`answers.engine_busy`). Wait for the time in the `Retry-After` header.
Response headers
Retry-AfterNumber of seconds to wait before you retry the request.
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
Error codes
Codes this endpoint can return in error.code, besides the general codes of every request.
- 400api.expand_invalid
- 400api.metadata_invalid
- 401auth.not_authenticated
- 403auth.system_scope
- 400cards.invalid_folder_filter
- 400cards.invalid_kind_filter
- 400cards.invalid_order
- 400cards.invalid_owner_filter
- 400cards.invalid_sort
- 400cards.invalid_status_filter
- 400cards.invalid_type_filter
- 400cards.invalid_verification_filter
- 400categories.unknown
- 403collections.no_access
- 404collections.not_found
- 404folders.not_found
- 403org.deleted
- 403org.suspended
- 403view_as.read_only
Rate limits
Responses carry the RateLimit and RateLimit-Policy headers and the earlier X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. A 429 response has Retry-After in seconds: wait and retry.