# 451 Unavailable For Legal Reasons

> The requested resource is unavailable due to legal demands. Learn about 451 status code used for censorship and content blocking.

Source: https://howhttpworks.com/status-codes/451
Last reviewed: 2026-10-04

> **TL;DR:** Content blocked due to legal requirements like court orders, DMCA takedowns, or government censorship. Check the legal notice link for details.

## What is 451 Unavailable For Legal Reasons?

A **451 Unavailable For Legal Reasons** status code indicates that the requested resource cannot be served due to legal restrictions, such as government censorship, court orders, or compliance with local regulations. The name is a reference to Ray Bradbury's novel "Fahrenheit 451" about censorship and book burning.

Think of it like a library having to remove certain books due to a court order—the books existed and were accessible before, but legal requirements now prevent their distribution.

## When Does This Happen?

You'll see a 451 Unavailable For Legal Reasons response in these situations:

**1. Geographic Content Restrictions**

```text
User accessing content from restricted region
→ DMCA takedown request honored
→ Content blocked with 451 response
```

**2. Government Censorship**

```text
Content deemed illegal in specific country
→ Government mandates blocking
→ Returns 451 instead of content
```

**3. Court Orders**

```text
Legal injunction against content
→ Platform legally required to block
→ 451 response with legal explanation
```

**4. Copyright Restrictions**

```text
DMCA or copyright claim filed
→ Content removed pending review
→ 451 with takedown notice reference
```

**5. Privacy Regulation Compliance**

```text
GDPR "right to be forgotten" request
→ Content must be delisted
→ 451 with regulatory reference
```

## Example Responses

**Basic 451 Response:**

```http
HTTP/1.1 451 Unavailable For Legal Reasons
Content-Type: text/html
Link: <https://example.com/legal/dmca-notice-123>; rel="blocked-by"
Content-Length: 324

<!DOCTYPE html>
<html>
<head><title>Content Unavailable</title></head>
<body>
  <h1>451: Unavailable For Legal Reasons</h1>
  <p>This content is not available due to legal restrictions.</p>
  <p>For more information, see our <a href="/legal/dmca-notice-123">legal notice</a>.</p>
</body>
</html>
```

**Geographic Restriction:**

```http
HTTP/1.1 451 Unavailable For Legal Reasons
Content-Type: application/json
Link: <https://example.com/legal/geo-restrictions>; rel="blocked-by"
Vary: CF-IPCountry

{
  "error": "Unavailable For Legal Reasons",
  "message": "This content is not available in your region due to legal restrictions",
  "details": {
    "reason": "Geographic licensing restrictions",
    "your_location": "DE",
    "blocked_in": ["DE", "FR", "IT"],
    "available_in": ["US", "CA", "GB"]
  },
  "legal_reference": "https://example.com/legal/geo-restrictions",
  "contact": "legal@example.com"
}
```

**DMCA Takedown:**

```http
HTTP/1.1 451 Unavailable For Legal Reasons
Content-Type: application/json
Link: <https://lumendatabase.org/notices/12345>; rel="blocked-by"

{
  "error": "Unavailable For Legal Reasons",
  "message": "This content has been removed in response to a legal request",
  "details": {
    "reason": "DMCA Takedown Notice",
    "notice_id": "DMCA-2026-001234",
    "date_removed": "2026-01-15",
    "complainant": "Copyright Holder Inc.",
    "legal_basis": "17 U.S.C. § 512(c)"
  },
  "transparency": {
    "notice_url": "https://lumendatabase.org/notices/12345",
    "counter_notice_info": "https://example.com/dmca/counter-notice"
  },
  "contact": {
    "email": "dmca@example.com",
    "form": "https://example.com/legal/counter-notice-form"
  }
}
```

**Government Censorship:**

```http
HTTP/1.1 451 Unavailable For Legal Reasons
Content-Type: text/html
Link: <https://example.com/transparency/blocking-order-456>; rel="blocked-by"

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Content Blocked</title>
</head>
<body>
  <h1>451: Unavailable For Legal Reasons</h1>

  <p>This content is unavailable in your jurisdiction due to a government blocking order.</p>

  <div class="legal-info">
    <h2>Legal Information</h2>
    <ul>
      <li><strong>Blocking Authority:</strong> [Country] Ministry of Communications</li>
      <li><strong>Order Number:</strong> GOV-2026-789</li>
      <li><strong>Date Issued:</strong> January 10, 2026</li>
      <li><strong>Legal Basis:</strong> Communications Act Section 12</li>
    </ul>
  </div>

  <div class="transparency">
    <h2>Transparency Report</h2>
    <p>View our <a href="/transparency/reports">transparency report</a> for more information about legal requests.</p>
  </div>

  <div class="appeal">
    <h2>Disagree with this blocking?</h2>
    <p>Contact the blocking authority or seek legal advice.</p>
  </div>
</body>
</html>
```

## Real-World Example

Imagine a video platform receiving a DMCA copyright complaint:

**User Request:**

```http
GET /videos/funny-cat-compilation HTTP/1.1
Host: videos.example.com
User-Agent: Mozilla/5.0...
Accept: text/html,application/xhtml+xml
Cookie: session=abc123
```

**451 DMCA Response:**

```http
HTTP/1.1 451 Unavailable For Legal Reasons
Content-Type: text/html; charset=utf-8
Link: <https://lumendatabase.org/notices/28394756>; rel="blocked-by"
Cache-Control: no-cache
Content-Length: 1456

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Video Unavailable - Copyright Claim</title>
  <style>
    body { font-family: Arial, sans-serif; max-width: 800px; margin: 50px auto; padding: 20px; }
    .notice { background: #fff3cd; border-left: 4px solid #ffc107; padding: 15px; margin: 20px 0; }
    .legal-ref { background: #f8f9fa; padding: 15px; margin: 20px 0; }
  </style>
</head>
<body>
  <h1>🚫 Video Unavailable</h1>

  <div class="notice">
    <h2>451: Unavailable For Legal Reasons</h2>
    <p>This video has been removed in response to a copyright claim.</p>
  </div>

  <div class="legal-ref">
    <h3>Copyright Notice Details</h3>
    <dl>
      <dt><strong>Notice Type:</strong></dt>
      <dd>DMCA Takedown (17 U.S.C. § 512)</dd>

      <dt><strong>Complainant:</strong></dt>
      <dd>Media Corporation LLC</dd>

      <dt><strong>Date Removed:</strong></dt>
      <dd>January 18, 2026</dd>

      <dt><strong>Notice ID:</strong></dt>
      <dd>DMCA-2026-001234</dd>

      <dt><strong>Transparency Database:</strong></dt>
      <dd><a href="https://lumendatabase.org/notices/28394756">View full notice on Lumen Database</a></dd>
    </dl>
  </div>

  <div class="info">
    <h3>What does this mean?</h3>
    <p>A copyright holder has submitted a legal complaint claiming this video contains their copyrighted material.
    Under the Digital Millennium Copyright Act (DMCA), we are required to remove the content.</p>

    <h3>If you believe this is a mistake</h3>
    <p>If you are the video uploader and believe this claim is incorrect, you can:</p>
    <ol>
      <li>Review the <a href="https://lumendatabase.org/notices/28394756">full copyright notice</a></li>
      <li>Submit a <a href="/legal/dmca-counter-notice">DMCA counter-notice</a> if you have rights to this content</li>
      <li>Contact our legal team at <a href="mailto:dmca@videos.example.com">dmca@videos.example.com</a></li>
    </ol>

    <h3>Learn More</h3>
    <ul>
      <li><a href="/help/copyright">Copyright Policy</a></li>
      <li><a href="/transparency">Transparency Report</a></li>
      <li><a href="/legal/dmca-process">DMCA Process</a></li>
    </ul>
  </div>
</body>
</html>
```

## 451 vs Other Error Codes

| Code    | Meaning           | Reason                          | Can Appeal                |
| ------- | ----------------- | ------------------------------- | ------------------------- |
| **451** | Legal restriction | Court order, law, regulation    | Possibly (counter-notice) |
| **403** | Forbidden         | Access denied by policy         | Depends on policy         |
| **404** | Not Found         | Resource doesn't exist          | No (doesn't exist)        |
| **410** | Gone              | Permanently removed (not legal) | No                        |

## Important Characteristics

**Transparency Requirement:**

```http
Link: <legal-notice-url>; rel="blocked-by"
↑
Should reference the legal basis for blocking
```

**Geographic Awareness:**

```http
HTTP/1.1 451 Unavailable For Legal Reasons
Vary: CF-IPCountry  ← May vary by location

Content blocked in: DE, FR
Content available in: US, GB
```

**Reversible (Sometimes):**

- DMCA counter-notices can restore content
- Court orders may be lifted
- Geographic restrictions may change
- Different from 410 Gone (permanent)

**Named After Literature:**

- Reference to "Fahrenheit 451" by Ray Bradbury
- Highlights censorship concerns
- Emphasizes free speech issues

## Common Mistakes

**❌ Using 403 instead of 451**

```http
HTTP/1.1 403 Forbidden  ← Implies policy violation
Should be: 451 Unavailable For Legal Reasons  ← Legal requirement
```

**❌ No legal reference**

```http
HTTP/1.1 451 Unavailable For Legal Reasons

Content blocked.  ← Doesn't explain why or legal basis
```

**❌ Fake legal blocks**

```http
HTTP/1.1 451 Unavailable For Legal Reasons
← Used for business reasons, not actual legal requirements
```

**✅ Correct usage**

```http
HTTP/1.1 451 Unavailable For Legal Reasons
Link: <https://example.com/legal/notice-123>; rel="blocked-by"

{
  "error": "Unavailable For Legal Reasons",
  "legal_notice": "https://example.com/legal/notice-123",
  "reason": "DMCA Takedown",
  "contact": "dmca@example.com"
}
```

## Getting 451 Unavailable For Legal Reasons right

**Provide Transparency:**

```javascript
app.get('/content/:id', async (req, res) => {
  const content = await db.getContent(req.params.id)

  if (content.legalBlock) {
    return res.status(451).set('Link', `<${content.legalNoticeUrl}>; rel="blocked-by"`).json({
      error: 'Unavailable For Legal Reasons',
      reason: content.blockReason,
      legal_notice: content.legalNoticeUrl,
      transparency_report: '/transparency/2026',
      contact: 'legal@example.com',
      date_blocked: content.blockDate
    })
  }

  res.json(content)
})
```

**Respect Geographic Restrictions:**

```javascript
const blockedCountries = ['DE', 'FR', 'IT']

app.get('/video/:id', (req, res) => {
  const userCountry = req.headers['cf-ipcountry'] || geoip.lookup(req.ip)?.country

  if (blockedCountries.includes(userCountry)) {
    return res.status(451).json({
      error: 'Unavailable For Legal Reasons',
      message: 'This content is not available in your region',
      your_location: userCountry,
      reason: 'Geographic licensing restrictions',
      legal_reference: '/legal/geo-restrictions'
    })
  }

  // Serve content...
})
```

**Maintain Transparency Reports:**

```javascript
// Track all 451 responses for transparency
app.use((req, res, next) => {
  const originalStatus = res.status.bind(res)

  res.status = function (code) {
    if (code === 451) {
      // Log for transparency report
      transparencyLog.record({
        url: req.url,
        date: new Date(),
        reason: res.locals.blockReason,
        country: req.headers['cf-ipcountry'],
        legal_reference: res.locals.legalReference
      })
    }
    return originalStatus(code)
  }

  next()
})
```

**Allow Counter-Notices:**

```javascript
app.post('/legal/counter-notice', async (req, res) => {
  const { contentId, name, email, statement, signature } = req.body

  // Record counter-notice
  await db.createCounterNotice({
    contentId,
    submitter: { name, email },
    statement,
    signature,
    date: new Date()
  })

  // Notify legal team
  await notifyLegalTeam({
    type: 'dmca-counter-notice',
    contentId,
    details: req.body
  })

  res.json({
    success: true,
    message: 'Counter-notice received',
    next_steps: 'We will review within 10 business days',
    reference_id: counterNoticeId
  })
})
```

## Implementation Examples

**Express.js with Geographic Blocking:**

```javascript
const geoip = require('geoip-lite')

const geoBlockedContent = {
  '/movie/123': ['CN', 'RU', 'IR'],
  '/video/456': ['KP']
}

app.use((req, res, next) => {
  const geo = geoip.lookup(req.ip)
  const blockedCountries = geoBlockedContent[req.path]

  if (blockedCountries?.includes(geo?.country)) {
    return res.status(451).set('Link', '</legal/geo-block>; rel="blocked-by"').json({
      error: 'Unavailable For Legal Reasons',
      reason: 'Geographic restriction',
      your_country: geo.country,
      legal_reference: '/legal/geo-block'
    })
  }

  next()
})
```

**Django:**

```python
from django.http import JsonResponse
from django.views import View
import geoip2.database

class LegallyBlockedView(View):
    def get(self, request, content_id):
        content = Content.objects.get(id=content_id)

        if content.is_blocked:
            response = JsonResponse({
                'error': 'Unavailable For Legal Reasons',
                'reason': content.block_reason,
                'legal_notice': content.legal_notice_url,
                'date_blocked': content.block_date.isoformat(),
                'contact': 'legal@example.com'
            }, status=451)

            response['Link'] = f'<{content.legal_notice_url}>; rel="blocked-by"'
            return response

        return JsonResponse({'content': content.data})
```

**Nginx (Geographic Blocking):**

```nginx
geo $blocked_country {
    default 0;
    CN 1;  # China
    RU 1;  # Russia
    IR 1;  # Iran
}

server {
    location /restricted-content {
        if ($blocked_country) {
            return 451;
        }

        # Serve content...
    }

    error_page 451 /451.html;

    location = /451.html {
        internal;
        add_header Link '</legal/geo-block>; rel="blocked-by"';
        root /usr/share/nginx/html;
    }
}
```

## Transparency and Ethics

**Maintain Public Records:**

```javascript
// Publish transparency reports
app.get('/transparency/2026', async (req, res) => {
  const report = await db.getTransparencyReport(2026)

  res.json({
    year: 2026,
    total_requests: report.totalRequests,
    by_type: {
      dmca: report.dmcaCount,
      government: report.governmentCount,
      court_order: report.courtOrderCount
    },
    by_country: report.byCountry,
    compliance_rate: report.complianceRate,
    appeals: {
      submitted: report.appeals.submitted,
      successful: report.appeals.successful
    }
  })
})
```

## Try It Yourself

Visit our [request builder](https://howhttpworks.com/tools/playground) and see 451 in action:

1. Set method to **GET**
2. Set path to **/legal-blocked-demo**
3. Optionally set **X-Country** header to test geo-blocking
4. Click **Send request**
5. Observe 451 response with legal notice

## Try it with curl

```bash
curl -i https://www.example.com/blocked-page
```

Example output (illustrative, not captured from a real server):

```http
HTTP/2 451
link: <https://example.org/legal-notice>; rel="blocked-by"
content-type: text/html
```

RFC 7725 says the response should explain the legal demand in the body. `Link: rel="blocked-by"` is optional and identifies the entity that implemented the block, which is not necessarily the one that demanded it. Compare the result from a different network or region to confirm it is geographic.

## Related Status Codes

- [403 Forbidden](https://howhttpworks.com/status-codes/403) - Access denied (policy, not legal)
- [404 Not Found](https://howhttpworks.com/status-codes/404) - Resource doesn't exist
- [410 Gone](https://howhttpworks.com/status-codes/410) - Permanently removed (not legal reason)
- [200 OK](https://howhttpworks.com/status-codes/200) - Successful request (content available)
