> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usefini.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get source

> Fetch one source record by ID. Returns the same shape as the list endpoint, scoped to a single source.

Returns one source record by ID. The response shape is identical to a single entry in [List sources](/en/api-reference/list-sources) — same fields, same semantics. Use this endpoint when you have a source ID and want a focused payload, especially for polling `linkedJobStatus` during ingestion.

<Tip>
  For the end-to-end flow, see [Sources](/en/api-reference/sources). For polling guidance, see [Ingest sources](/en/api-reference/ingest-sources#polling-for-completion).
</Tip>

<Note>
  The route path and response object still use `document` naming because that is the current API contract. This page uses **source** terminology for the product model.
</Note>

## Headers

<ParamField header="Authorization" type="string" required>
  Bearer token containing your Fini workspace API key. Format: `Bearer fini_...`
</ParamField>

## Path parameters

<ParamField path="id" type="string" required>
  Source ID. Get this from [List sources](/en/api-reference/list-sources) or from the response of [Ingest sources](/en/api-reference/ingest-sources) and [Register provider resources](/en/api-reference/register-provider-resources).
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api-prod.usefini.com/v2/documents/public/5d9f67a8-d853-4af4-b7ce-23ebba1245e5' \
    --header 'Authorization: Bearer fini_your_api_key'
  ```

  ```python Python theme={null}
  import requests

  source_id = "5d9f67a8-d853-4af4-b7ce-23ebba1245e5"
  response = requests.get(
      f"https://api-prod.usefini.com/v2/documents/public/{source_id}",
      headers={"Authorization": "Bearer fini_your_api_key"},
  )
  source = response.json()
  ```

  ```javascript Node.js theme={null}
  const sourceId = "5d9f67a8-d853-4af4-b7ce-23ebba1245e5";

  const response = await fetch(
    `https://api-prod.usefini.com/v2/documents/public/${sourceId}`,
    {
      headers: {
        Authorization: "Bearer fini_your_api_key",
      },
    }
  );
  const source = await response.json();
  ```
</RequestExample>

## Response

The response is a single `Document` object. See [List sources → Document](/en/api-reference/list-sources#document) for the full field reference. In the product model, this object represents one source record.

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "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
  }
  ```

  ```json 404 Not Found theme={null}
  {
    "statusCode": 404,
    "message": "Document not found",
    "error": "Not Found"
  }
  ```
</ResponseExample>

## Errors

<AccordionGroup>
  <Accordion title="400 Bad Request" icon="circle-exclamation">
    The `id` path parameter is not a valid UUID.
  </Accordion>

  <Accordion title="401 Unauthorized" icon="lock">
    The API key is missing, malformed, revoked, or invalid. Confirm `Authorization: Bearer fini_...` with the full key.
  </Accordion>

  <Accordion title="403 Forbidden" icon="shield-halved">
    The API key doesn't include the `read` scope, or the source belongs to a different workspace than the key.
  </Accordion>

  <Accordion title="404 Not Found" icon="circle-question">
    No source exists with that ID in the workspace tied to the key. Confirm the ID and that you're authenticating against the right workspace.
  </Accordion>
</AccordionGroup>
