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

# Article 50 Transparency Evidence

> Record AI disclosure and content-marking evidence for EU AI Act Article 50

MeshAI can record whether an application reports that it disclosed an AI interaction or marked AI-generated content. The evidence is attached to OpenTelemetry spans, evaluated by governance policies, and retained with the span audit trail.

<Warning>
  These signals prove what MeshAI received in telemetry. They do not prove that a disclosure was visible to a person, that a content mark is valid, or that an application complies with Article 50. Treat missing attributes as missing evidence, not proof of non-compliance.
</Warning>

## Record disclosure evidence

Add the following attributes to the span that represents the generated output:

| Attribute                                         | Type    | Meaning                                                               |
| ------------------------------------------------- | ------- | --------------------------------------------------------------------- |
| `dev.meshai.gen_ai.output.ai_disclosure.provided` | boolean | The application reports that it provided an AI-interaction disclosure |
| `dev.meshai.gen_ai.output.content_marking.type`   | string  | The application reports the content-marking mechanism, such as `c2pa` |

The names use MeshAI's provisional reverse-domain namespace while the relevant OpenTelemetry semantic conventions are not standardized.

```python Python theme={null}
span.set_attribute(
    "dev.meshai.gen_ai.output.ai_disclosure.provided",
    True,
)
span.set_attribute(
    "dev.meshai.gen_ai.output.content_marking.type",
    "c2pa",
)
```

Send the attributes on the output span rather than on an unrelated parent span. MeshAI evaluates the evidence on the span where it appears.

## Enable evidence checks

Create policies from these built-in templates:

* `article-50-ai-disclosure-evidence`
* `article-50-content-marking-evidence`

The checks are observe-only. They record evaluation results for governance review but do not block proxy traffic. This avoids treating an absent telemetry attribute as proof that a user-facing control was absent.

## Record the served model

For an auditable GPAI model inventory, emit the standard `gen_ai.response.model` attribute when the provider returns the model identifier it actually served. MeshAI stores that value separately from the requested model.

```python Python theme={null}
span.set_attribute("gen_ai.request.model", "gpt-4.1")
span.set_attribute("gen_ai.response.model", response.model)
```

Inventory rows have one of two attribution sources:

* `response`: the emitter supplied `gen_ai.response.model`.
* `request_fallback`: MeshAI only knows the requested or directly reported model. This does not confirm the exact version served by the provider.

See the [Compliance API](/api-reference/compliance#gpai-model-inventory) to query or export the inventory.

## Generate an evidence pack

Professional and higher plans can generate an Article 50 recorded-evidence pack from the dashboard or API.

In the dashboard, open **Governance → Compliance**, choose a 24-hour, 7-day, or 30-day window, then click **Generate evidence pack**. The dashboard does not request the report until you click Generate. It presents recorded gaps first, followed by the disclosure and content-marking track summaries and a compact model inventory. Any retention clamp, request-fallback attribution, or truncation warning remains visible.

Click **Download JSON** to create a dated JSON file in your browser from the generated report. The download does not make a separate export request.

For automation, call `GET /api/v1/compliance/article-50/evidence-pack` with the `governance:read` scope. See the [Compliance API](/api-reference/compliance#article-50-evidence-pack) for date-range behavior and response semantics.

<Warning>
  The report's applicability is `not_determined` and its coverage is `unquantified`. A passing track means MeshAI recorded passing evaluations without recorded failures in the effective window. It does not prove that the obligation applies, that every output was observed, or that the user-facing control worked.
</Warning>

The evidence pack reports an explicit status for each track:

* `check_not_configured`: no enabled check or evaluation was recorded
* `no_recorded_evidence`: no passing evidence was recorded
* `gaps_recorded`: one or more evaluated interactions recorded a failure
* `evidence_recorded`: passing evidence was recorded with no recorded failures

An interaction can appear in both pass and fail counts if multiple policies disagree about the same span. Start with the `gaps` array and the track statements rather than treating counts as a compliance score.

Requested dates are clamped to retained telemetry. The report preserves both requested and effective dates and sets `retention_clamped` when they differ.

## Evidence boundary

Keep supporting application evidence alongside MeshAI's telemetry, including screenshots or UX tests for disclosures and verifier output for content credentials. MeshAI provides the received telemetry, policy evaluation, timestamps, and attribution needed to join those records into an audit package.

Hash-chain heads and checkpoint receipts in the pack cover policy evaluations and audit events only. They do not provide integrity coverage for token usage records or the model inventory.
