> ## 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_...` The key needs `read` scope.
</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": "4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3",
"source": "web",
"url": "https://help.example.com/refunds",
"title": "Refund policy",
"success": true,
"changed": false,
"linkedJobStatus": "COMPLETED",
"linkedKnowledgeId": "7fa27325-e2f6-4420-b705-436f9106f908",
"createdAt": "2026-07-28T08:55:32.000Z",
"updatedAt": "2026-07-28T09:10:18.000Z"
}
~~~
</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>
## Related topics
- [Ingest sources](/en/api-reference/ingest-sources.md)
- [Overview](/en/api-reference/sources.md)
- [Bulk generate knowledge](/en/api-reference/bulk-generate-knowledge.md)
This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.
Sources

