# Reuse and licensing terms declared

> Declaring ai-train=no without stating a licensing path leaves both the publisher and the agent without an answer they can act on.

- Source: /checks/licensing-terms
- Site: AgenticWebScore
- Language: English

---
Declaring ai-train=no without stating a licensing path leaves both the publisher and the agent without an answer they can act on.

| Property | Value |
| --- | --- |
| Check id | `licensing-terms` |
| Dimension | Content Accessibility (22%) |
| Tier | Recommended — pool 20 pts |
| Weight inside tier | 2 |
| Impact | High |
| Maturity | Draft — A published specification that is not yet ratified. |
| Conditional | No |
| Publishing skill | `licensing` |
| Standards | TDM Reservation Protocol |

## What the scanner requests

- `/terms`
- `/licensing`
- `/.well-known/tdmrep.json`

It also reads documents it has already fetched: `$home`, `$robots`.

## What is measured

The scanner reads the homepage `/` response headers for `tdm-reservation` and `tdm-policy` and the homepage HTML head for `<meta name="tdm-reservation">` and `<meta name="tdm-policy">` - the two carriers that need no extra request; the site-wide `/.well-known/tdmrep.json` file is the third carrier the TDM Reservation Protocol defines and is read when that path is in the probe map. Values are resolved in the protocol's own precedence order, HTML meta over HTTP header over file. Pass when `tdm-reservation` is `1` or `0` and, if it is `1`, `tdm-policy` points at a reachable TDM policy or licensing page, so the agent knows both that mining is reserved and how to ask for a licence; partial when a declaration exists but `tdm-reservation` carries any other value, which the protocol defines as a protocol error that agents must treat as unset, or when rights are reserved with no licensing path at all; fail when none of the carriers is present. This profile-scoped check is reported as not scored and excluded from the denominator unless the publisher or institution profile has been positively identified.

## Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

```bash
DOMAIN="https://example.com"
curl -sSL -D - "$DOMAIN/" "$DOMAIN/.well-known/tdmrep.json" | grep -iE '^(HTTP/|tdm-)|tdm-(reservation|policy)'
```

## The fix

This is the artifact to ship. It is the complete change, not a description of one.

```nginx
# nginx: declare TDM rights on the responses agents actually fetch.
# tdm-reservation: 1 reserves TDM rights (the Article 4 opt-out) and tdm-policy is
# the licensing path an agent must read before mining. If you cannot set headers on
# your host, the same two values go in the HTML head instead, as
# <meta name="tdm-reservation" content="1"> and <meta name="tdm-policy" content="...">.
server {
    listen 443 ssl;
    server_name example.com;
    root /var/www/example.com;

    location / {
        add_header tdm-reservation "1" always;
        add_header tdm-policy "https://www.example.com/.well-known/tdm-policy.json" always;
    }

    # The licensing path: an ODRL 2.2 offer naming the rightsholder to contact.
    location = /.well-known/tdm-policy.json {
        default_type application/ld+json;
        return 200 '{"@context":["http://www.w3.org/ns/odrl.jsonld",{"tdm":"http://www.w3.org/ns/tdmrep#"}],"uid":"https://www.example.com/policies/tdm-1","@type":"Offer","profile":"http://www.w3.org/ns/tdmrep","assigner":{"uid":"https://www.example.com","vcard:fn":"Example Publishing Ltd","vcard:hasEmail":"mailto:licensing@example.com","vcard:hasURL":"https://www.example.com/licensing"},"permission":[{"action":"tdm:mine","duty":[{"action":"obtainConsent"}]}]}';
    }
}
```

> Only `0` and `1` are valid - every other value is a protocol error that agents must read as unset - and because adoption of the protocol is still early, the conservative form only pays off if the `tdm-policy` URL resolves today.

## Standards referenced

- `TDM Reservation Protocol`

## Related checks

| Check | Tier | Impact | Same skill |
| --- | --- | --- | --- |
| `markdown-negotiation` — Markdown content negotiation | Recommended | Critical | — |
| `headings` — Semantic heading structure | Essential | High | — |
| `meta` — Title and summary metadata | Essential | High | — |
| `jsonld` — JSON-LD structured data | Essential | Critical | — |
| `faq-schema` — FAQ / question-answer schema | Recommended | High | — |
| `breadcrumb` — Breadcrumb / navigation schema | Emerging | Low | — |
| `summary` — Prominent summary block | Recommended | Medium | — |
| `lang` — Language declaration and multilingual access | Recommended | Medium | — |
