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

# Azure Content Understanding

> Learn how to monitor Azure Content Understanding with Openlayer

![Azure Content Understanding hero](https://mintcdn.com/openlayer-44/YzKZvaj8TAhXCo9t/images/integrations/acu_hero.png?fit=max\&auto=format\&n=YzKZvaj8TAhXCo9t\&q=85\&s=7c198e1bed60500aae14f962bdbb7519)

Openlayer integrates with [Azure Content Understanding](https://learn.microsoft.com/en-us/azure/ai-services/content-understanding/overview), Microsoft's service for extracting structured data and insights from documents, images, audio, and video using LLMs.

## Monitoring Azure Content Understanding

To use [monitoring mode](https://docs.openlayer.com/monitoring/overview.md), instrument your code to publish the analysis requests your AI system makes to the Openlayer platform. Each `begin_analyze` → `poller.result()` call is automatically traced and published with inputs, outputs, latency, token usage, and the underlying model used.

### Setup

Instrument your client:

```python Python theme={null}
import os
from azure.ai.contentunderstanding import ContentUnderstandingClient
from azure.ai.contentunderstanding.models import AnalysisInput
from azure.core.credentials import AzureKeyCredential

# 1. Set the environment variables
os.environ["OPENLAYER_API_KEY"] = "YOUR_OPENLAYER_API_KEY_HERE"
os.environ["OPENLAYER_INFERENCE_PIPELINE_ID"] = "YOUR_OPENLAYER_INFERENCE_PIPELINE_ID_HERE"

# 2. Call `init` to auto-instrument the installed LLM SDKs (Content Understanding, etc.)
from openlayer.lib import init

# Set attachment options if you want to upload documents to Openlayer storage
init(
    attachment_upload_enabled=True,   # upload binary/file attachments
    url_upload_enabled=True,          # also download & re-upload external URLs
)

client = ContentUnderstandingClient(  # auto-traced by Openlayer
    endpoint="YOUR_AZURE_CONTENT_UNDERSTANDING_ENDPOINT_HERE",
    credential=AzureKeyCredential("YOUR_AZURE_CONTENT_UNDERSTANDING_KEY_HERE"),
    api_version="2025-11-01",
)

# 3. Use the client normally — tracing happens automatically
poller = client.begin_analyze(
    analyzer_id="prebuilt-invoice",
    inputs=[AnalysisInput(url="https://example.com/invoice.pdf")],
)
result = poller.result()
```

> [card] [See full Python example](https://colab.research.google.com/github/openlayer-ai/openlayer-python/blob/main/examples/tracing/azure-content-understanding/azure_content_understanding_tracing.ipynb)

Once instrumented, every analysis call is automatically published to Openlayer.
In the "Data" page of your Openlayer data source, you can see the traces for each request.

![Azure Content Understanding traces](https://mintcdn.com/openlayer-44/YzKZvaj8TAhXCo9t/images/integrations/acu_traces.png?fit=max\&auto=format\&n=YzKZvaj8TAhXCo9t\&q=85\&s=b3a3bfccebeae0117790a3c6da62dba2)

After your AI system requests are continuously published and logged by Openlayer, you can
[create tests](https://docs.openlayer.com/tests/overview.md) that run at a regular cadence on top of them.

> [!TIP]
>
> To store the source files alongside your traces in Openlayer, enable
> attachment uploads in `init()` by setting `attachment_upload_enabled=True`
> (for binary inputs) and `url_upload_enabled=True` (to also fetch and persist
> URL-referenced files).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.