> For the complete documentation index, see [llms.txt](https://docs.dbnl.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dbnl.com/v0.31.x/configuration/data-connections/sdk-log-ingestion.md).

# SDK Log Ingestion

Push data manually or as part of a daily orchestration job using our [Python SDK](https://github.com/dbnlAI/docs/blob/main/reference/python-sdk.md). This ingestion method allows for the most flexibility, but requires the most off-platform coding.

{% hint style="info" %}
See the [Python SDK docs](https://github.com/dbnlAI/docs/blob/main/reference/python-sdk.md) for more detailed information about SDK installation and functions.
{% endhint %}

The following fields are required regardless of which ingestion method you are using:

* `input`: The text input to the LLM as a `string`.
* `output`: The text response from the LLM as a `string`.
* `timestamp`: The UTC timecode associated with the LLM call. Must be a timezone-aware datetime in UTC (Python: `datetime` with `tzinfo=UTC` or pandas: `datetime64[us, UTC]`).

{% hint style="info" %}
See the [DBNL Semantic Convention](/v0.31.x/configuration/dbnl-semantic-convention.md) for other semantically recognized fields. Only columns defined in the DBNL Semantic Convention are supported — arbitrary custom columns are not ingested. To attach custom metadata, use span attributes via the [OpenInference semantic convention](https://github.com/Arize-ai/openinference).
{% endhint %}

## Example Code

Check out the [Quickstart](/v0.31.x/get-started/quickstart.md) for an example of using the SDK Log Ingestion as a Data Connection.

{% file src="/files/Kqs6FEy6wUzKVscFpcEb" %}
