Skip to main content
GET
/
v2
/
documents
/
public
curl --request GET \
  --url 'https://api-prod.usefini.com/v2/documents/public?limit=25&source=notion' \
  --header 'Authorization: Bearer fini_your_api_key'
{
  "documents": [
    {
      "id": "5d9f67a8-d853-4af4-b7ce-23ebba1245e5",
      "originalUrl": "https://www.notion.so/fini/Billing-FAQ-123456",
      "title": "Billing FAQ",
      "storageUrl": "gs://example/documents/5d9f67a8-d853-4af4-b7ce-23ebba1245e5",
      "source": "notion",
      "externalId": "123456",
      "english": true,
      "baser": false,
      "paragraphs": [
        "You can update your billing email from Settings."
      ],
      "oldParagraphs": [],
      "success": true,
      "error": "",
      "createdAt": "2026-05-22T06:05:34.221Z",
      "updatedAt": "2026-05-22T06:10:58.710Z",
      "mimeType": "text/markdown",
      "type": "page",
      "linkedJobId": "9f347ddb-1f90-43a2-ac9f-4f77f37a2c26",
      "linkedKnowledgeId": "8a4bb11a-0ef2-45df-9956-631e41e6cf16",
      "linkedOperation": "UPDATE_ARTICLE",
      "linkedReason": null,
      "linkedJobStatus": "COMPLETED",
      "changed": false
    }
  ],
  "hasMore": false
}
Returns source records in the workspace tied to your API key, ordered by updatedAt descending then externalId descending. Use it to enumerate sources, inspect ingestion status, and find source IDs to pass back to Ingest sources.
For the end-to-end model, see Sources. For async polling guidance, see Ingest sources.
The response field is still named documents because that is the current API contract. On this page, each entry is described as a source record.

Headers

Authorization
string
required
Bearer token containing your Fini workspace API key. Format: Bearer fini_...

Query parameters

limit
integer
default:"50"
Maximum number of source records to return.
cursor
string
Source ID to paginate from. Use the last source’s id from the previous response to fetch the next page, or the first source’s id to fetch the previous page.
direction
string
default:"next"
Pagination direction when a cursor is supplied. Note the inverted mapping: next moves toward older sources; previous moves back toward newer ones. This is because results are sorted by updatedAt descending.
source
string
Optional source-type filter. Supported values: web, files, googledrive, zendesk, notion, confluence.
english
boolean
Optional English-processing filter.
id
string
Exact source ID filter.
title
string
Case-insensitive partial match on the source title.
url
string
Case-insensitive partial match on the original source URL.
articleId
string
Filter by linked article or knowledge node ID.
linkedOperation
string
Filter by linked knowledge operation. Supported values: ADD_ARTICLE_TO_FOLDER, UPDATE_ARTICLE, DO_NOTHING.
changed
boolean
Return only linked sources flagged as changed. This is the key filter for the source-refresh workflow before Bulk generate knowledge.
The response includes hasMore but not a nextCursor field. Use the last or first source id from the returned array as the cursor for the next call.
curl --request GET \
  --url 'https://api-prod.usefini.com/v2/documents/public?limit=25&source=notion' \
  --header 'Authorization: Bearer fini_your_api_key'

Response

documents
array
Array of Document objects.
hasMore
boolean
Whether more results exist beyond the current page.
{
  "documents": [
    {
      "id": "5d9f67a8-d853-4af4-b7ce-23ebba1245e5",
      "originalUrl": "https://www.notion.so/fini/Billing-FAQ-123456",
      "title": "Billing FAQ",
      "storageUrl": "gs://example/documents/5d9f67a8-d853-4af4-b7ce-23ebba1245e5",
      "source": "notion",
      "externalId": "123456",
      "english": true,
      "baser": false,
      "paragraphs": [
        "You can update your billing email from Settings."
      ],
      "oldParagraphs": [],
      "success": true,
      "error": "",
      "createdAt": "2026-05-22T06:05:34.221Z",
      "updatedAt": "2026-05-22T06:10:58.710Z",
      "mimeType": "text/markdown",
      "type": "page",
      "linkedJobId": "9f347ddb-1f90-43a2-ac9f-4f77f37a2c26",
      "linkedKnowledgeId": "8a4bb11a-0ef2-45df-9956-631e41e6cf16",
      "linkedOperation": "UPDATE_ARTICLE",
      "linkedReason": null,
      "linkedJobStatus": "COMPLETED",
      "changed": false
    }
  ],
  "hasMore": false
}

Nested objects

Document

Document is the wire-format object returned by the sources read routes. In the product model, each Document is one source record.
id
string
Source ID. Also used as the pagination cursor.
originalUrl
string
Original provider URL or web link.
title
string
Source title.
storageUrl
string | null
Internal storage URL when the source has been uploaded into Fini’s storage layer.
source
string
Source type. One of web, files, googledrive, notion, zendesk, or confluence.
externalId
string
Provider-specific external identifier, or the URL itself for web.
english
boolean
Whether English processing is enabled for the source.
baser
boolean
Whether BASER processing is enabled for the source.
success
boolean
Whether the latest ingestion or refresh run succeeded.
error
string
Latest processing error, if any. Empty string when the last run succeeded.
createdAt
string
ISO 8601 creation timestamp.
updatedAt
string
ISO 8601 last-update timestamp. Used as the sort key.
mimeType
string
Source MIME type.
type
string | null
Provider-specific type, when available, for example Notion page.
linkedKnowledgeId
string | null
Linked article or knowledge node ID, if this source has already been turned into knowledge.
linkedOperation
string | null
Operation used when the source last linked into knowledge. One of ADD_ARTICLE_TO_FOLDER, UPDATE_ARTICLE, DO_NOTHING.
linkedReason
string | null
Additional reason metadata for the linked operation, when present.
linkedJobId
string | null
Background job ID for the latest queued ingest or refresh.
linkedJobStatus
string | null
Background job status. One of PENDING, IN_PROGRESS, COMPLETED, FAILED.
changed
boolean
Whether the latest refresh detected a meaningful change compared with the previously linked content. This is the key field for the source-refresh workflow.
paragraphs
array
Extracted paragraph payload, if the source has been processed. Can be large. Use Get source when you need one source and want a focused payload.
oldParagraphs
array
Previous paragraph snapshot used for change detection, when available.

Pagination

Cursor pagination uses source IDs directly:
  • pass the last source’s id from the previous response with direction=next to move toward older sources
  • pass the first source’s id with direction=previous to move back toward newer sources
If you omit cursor, the API starts from the most recently updated sources.

Errors

Query parameters are invalid. Common causes: unsupported source value, unsupported linkedOperation value, malformed UUID in id or articleId.
The API key is missing, malformed, revoked, or invalid. Confirm Authorization: Bearer fini_... with the full key.
The API key doesn’t include the read scope, or it’s scoped to a different workspace.
Either the workspace has no sources matching your filters, or no sources at all. Drop filters one at a time to confirm which one is excluding results.