# Content Negotiation

Bindly supports content negotiation on all public pages. This means the same URL can return different formats depending on how you request it.

## How It Works

Every public URL at `bind.ly/@{space}/{binding}` can return either **HTML** or **Markdown**.

### Priority Order

1. **`?format=md` query parameter** — Always returns markdown (highest priority)
2. **`Accept: text/markdown` header** — Returns markdown
3. **`Accept: text/plain` header** — Returns markdown
4. **Default (text/html)** — Returns styled HTML with OG tags and JSON-LD

## Examples

### Get markdown content (for LLMs)

```
GET https://bind.ly/@my-space/my-binding?format=md
```

Or with headers:

```
GET https://bind.ly/@my-space/my-binding
Accept: text/markdown
```

### Get HTML content (for browsers)

```
GET https://bind.ly/@my-space/my-binding
```

Returns a styled HTML page with:
- Open Graph meta tags (for social media previews)
- JSON-LD structured data (for search engines)
- Canonical URL
- Full rendered content

## Temporary Share Links

Share links (`bind.ly/b/{shareId}` and `bind.ly/s/{shareId}`) also support content negotiation with the same rules.

## Help Pages

All `/help/*` pages support content negotiation too:

```
GET https://bind.ly/help/mcp/tools?format=md
```

This is useful for LLMs that want to read Bindly documentation in a structured format.

## For LLM Developers

If you're building an integration that reads Bindly content:
- Always use `?format=md` for the most reliable markdown output
- The `Accept` header approach works but `?format=md` takes precedence
- Public content requires no authentication
- Rate limiting applies to all requests
