# Board Inbox

Source: https://opvs.ai/docs/api/board-inbox

## `POST` /api/v1/board/{board_id}/inbox/enable

**Enable Inbox**

Enable public inbox on a board. Generates token + optional slug.

**Parameters**

- `board_id` (path, string, required)

**Request body**

```bash
curl -X POST 'https://app.opvs.ai/api/v1/board/{board_id}/inbox/enable' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "slug": "string",
  "default_column_id": "string",
  "default_labels": [
    "string"
  ],
  "require_email": false,
  "opvs_address": "string"
}'
```

```python
import httpx

resp = httpx.post(
    "https://app.opvs.ai/api/v1/board/{board_id}/inbox/enable",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"slug": "string", "default_column_id": "string", "default_labels": ["string"], "require_email": false, "opvs_address": "string"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/board/{board_id}/inbox/enable", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"slug": "string", "default_column_id": "string", "default_labels": ["string"], "require_email": false, "opvs_address": "string"})
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"slug": "string", "default_column_id": "string", "default_labels": ["string"], "require_email": false, "opvs_address": "string"}`)
	req, _ := http.NewRequest("POST", "https://app.opvs.ai/api/v1/board/{board_id}/inbox/enable", body)
	req.Header.Set("Authorization", "Bearer <token>")
	req.Header.Set("Content-Type", "application/json")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## `POST` /api/v1/board/{board_id}/inbox/rotate-token

**Rotate Token**

Rotate the inbox token. Old token stops working immediately.

**Parameters**

- `board_id` (path, string, required)

```bash
curl -X POST 'https://app.opvs.ai/api/v1/board/{board_id}/inbox/rotate-token' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.post(
    "https://app.opvs.ai/api/v1/board/{board_id}/inbox/rotate-token",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/board/{board_id}/inbox/rotate-token", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("POST", "https://app.opvs.ai/api/v1/board/{board_id}/inbox/rotate-token", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## `POST` /api/v1/board/{board_id}/inbox/opvs/register

**Register Opvs Address**

Register an OPVS address for a board inbox. Auto-generates if address is None.

**Parameters**

- `board_id` (path, string, required)
- `address` (query, any, optional)

```bash
curl -X POST 'https://app.opvs.ai/api/v1/board/{board_id}/inbox/opvs/register' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.post(
    "https://app.opvs.ai/api/v1/board/{board_id}/inbox/opvs/register",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/board/{board_id}/inbox/opvs/register", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("POST", "https://app.opvs.ai/api/v1/board/{board_id}/inbox/opvs/register", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## `GET` /api/v1/board/{board_id}/inbox

**Get Inbox Config**

Get current inbox config for a board (owner view with token).

**Parameters**

- `board_id` (path, string, required)

```bash
curl -X GET 'https://app.opvs.ai/api/v1/board/{board_id}/inbox' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.get(
    "https://app.opvs.ai/api/v1/board/{board_id}/inbox",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/board/{board_id}/inbox", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://app.opvs.ai/api/v1/board/{board_id}/inbox", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## `GET` /api/v1/board/{board_id}/inbox/submissions

**List Submissions**

Get paginated submission audit log for a board.

**Parameters**

- `board_id` (path, string, required)
- `page` (query, integer, optional)
- `per_page` (query, integer, optional)
- `channel` (query, any, optional)

```bash
curl -X GET 'https://app.opvs.ai/api/v1/board/{board_id}/inbox/submissions' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.get(
    "https://app.opvs.ai/api/v1/board/{board_id}/inbox/submissions",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/board/{board_id}/inbox/submissions", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://app.opvs.ai/api/v1/board/{board_id}/inbox/submissions", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## `POST` /api/v1/public/inbox/{token}/submit

**Public Submit By Token**

Submit a task to a board via inbox token. No auth required.

**Parameters**

- `token` (path, string, required)

**Request body**

```bash
curl -X POST 'https://app.opvs.ai/api/v1/public/inbox/{token}/submit' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "string",
  "description": "string",
  "submitter_email": "string",
  "submitter_name": "string",
  "priority": "medium",
  "labels": [
    "string"
  ],
  "custom_fields": {},
  "website": "string",
  "captcha_token": "string",
  "channel": "api"
}'
```

```python
import httpx

resp = httpx.post(
    "https://app.opvs.ai/api/v1/public/inbox/{token}/submit",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"title": "string", "description": "string", "submitter_email": "string", "submitter_name": "string", "priority": "medium", "labels": ["string"], "custom_fields": {}, "website": "string", "captcha_token": "string", "channel": "api"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/public/inbox/{token}/submit", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"title": "string", "description": "string", "submitter_email": "string", "submitter_name": "string", "priority": "medium", "labels": ["string"], "custom_fields": {}, "website": "string", "captcha_token": "string", "channel": "api"})
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"title": "string", "description": "string", "submitter_email": "string", "submitter_name": "string", "priority": "medium", "labels": ["string"], "custom_fields": {}, "website": "string", "captcha_token": "string", "channel": "api"}`)
	req, _ := http.NewRequest("POST", "https://app.opvs.ai/api/v1/public/inbox/{token}/submit", body)
	req.Header.Set("Authorization", "Bearer <token>")
	req.Header.Set("Content-Type", "application/json")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## `POST` /api/v1/public/inbox/s/{slug}/submit

**Public Submit By Slug**

Submit a task to a board via inbox slug. No auth required.

**Parameters**

- `slug` (path, string, required)

**Request body**

```bash
curl -X POST 'https://app.opvs.ai/api/v1/public/inbox/s/{slug}/submit' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "string",
  "description": "string",
  "submitter_email": "string",
  "submitter_name": "string",
  "priority": "medium",
  "labels": [
    "string"
  ],
  "custom_fields": {},
  "website": "string",
  "captcha_token": "string",
  "channel": "api"
}'
```

```python
import httpx

resp = httpx.post(
    "https://app.opvs.ai/api/v1/public/inbox/s/{slug}/submit",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"title": "string", "description": "string", "submitter_email": "string", "submitter_name": "string", "priority": "medium", "labels": ["string"], "custom_fields": {}, "website": "string", "captcha_token": "string", "channel": "api"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/public/inbox/s/{slug}/submit", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"title": "string", "description": "string", "submitter_email": "string", "submitter_name": "string", "priority": "medium", "labels": ["string"], "custom_fields": {}, "website": "string", "captcha_token": "string", "channel": "api"})
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"title": "string", "description": "string", "submitter_email": "string", "submitter_name": "string", "priority": "medium", "labels": ["string"], "custom_fields": {}, "website": "string", "captcha_token": "string", "channel": "api"}`)
	req, _ := http.NewRequest("POST", "https://app.opvs.ai/api/v1/public/inbox/s/{slug}/submit", body)
	req.Header.Set("Authorization", "Bearer <token>")
	req.Header.Set("Content-Type", "application/json")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## `GET` /api/v1/public/inbox/{token}/config

**Public Config By Token**

Get public-safe inbox config for widget/landing page initialization.

**Parameters**

- `token` (path, string, required)

```bash
curl -X GET 'https://app.opvs.ai/api/v1/public/inbox/{token}/config' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.get(
    "https://app.opvs.ai/api/v1/public/inbox/{token}/config",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/public/inbox/{token}/config", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://app.opvs.ai/api/v1/public/inbox/{token}/config", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## `GET` /api/v1/public/inbox/s/{slug}/config

**Public Config By Slug**

Get public-safe inbox config by slug.

**Parameters**

- `slug` (path, string, required)

```bash
curl -X GET 'https://app.opvs.ai/api/v1/public/inbox/s/{slug}/config' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.get(
    "https://app.opvs.ai/api/v1/public/inbox/s/{slug}/config",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/public/inbox/s/{slug}/config", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://app.opvs.ai/api/v1/public/inbox/s/{slug}/config", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## `GET` /api/v1/public/inbox/widget.js

**Widget Js**

Serve the embeddable inbox widget JavaScript.

```bash
curl -X GET 'https://app.opvs.ai/api/v1/public/inbox/widget.js' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.get(
    "https://app.opvs.ai/api/v1/public/inbox/widget.js",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/public/inbox/widget.js", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://app.opvs.ai/api/v1/public/inbox/widget.js", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response

## `GET` /api/v1/public/inbox/s/{slug}

**Landing Page By Slug**

Serve the public inbox landing page by slug.

**Parameters**

- `slug` (path, string, required)

```bash
curl -X GET 'https://app.opvs.ai/api/v1/public/inbox/s/{slug}' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.get(
    "https://app.opvs.ai/api/v1/public/inbox/s/{slug}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/public/inbox/s/{slug}", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://app.opvs.ai/api/v1/public/inbox/s/{slug}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## `GET` /api/v1/public/inbox/{token}

**Landing Page By Token**

Serve the public inbox landing page by token.

**Parameters**

- `token` (path, string, required)

```bash
curl -X GET 'https://app.opvs.ai/api/v1/public/inbox/{token}' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.get(
    "https://app.opvs.ai/api/v1/public/inbox/{token}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/public/inbox/{token}", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://app.opvs.ai/api/v1/public/inbox/{token}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response
- `422` — Validation Error

## Enable Inbox

`POST https://app.opvs.ai/api/v1/board/{board_id}/inbox/enable`

Enable public inbox on a board. Generates token + optional slug.

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |

## Rotate Token

`POST https://app.opvs.ai/api/v1/board/{board_id}/inbox/rotate-token`

Rotate the inbox token. Old token stops working immediately.

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |

## Register Opvs Address

`POST https://app.opvs.ai/api/v1/board/{board_id}/inbox/opvs/register`

Register an OPVS address for a board inbox. Auto-generates if address is None.

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |

## Get Inbox Config

`GET https://app.opvs.ai/api/v1/board/{board_id}/inbox`

Get current inbox config for a board (owner view with token).

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |

## List Submissions

`GET https://app.opvs.ai/api/v1/board/{board_id}/inbox/submissions`

Get paginated submission audit log for a board.

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |

## Public Submit By Token

`POST https://app.opvs.ai/api/v1/public/inbox/{token}/submit`

Submit a task to a board via inbox token. No auth required.

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |

## Public Submit By Slug

`POST https://app.opvs.ai/api/v1/public/inbox/s/{slug}/submit`

Submit a task to a board via inbox slug. No auth required.

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |

## Public Config By Token

`GET https://app.opvs.ai/api/v1/public/inbox/{token}/config`

Get public-safe inbox config for widget/landing page initialization.

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |

## Public Config By Slug

`GET https://app.opvs.ai/api/v1/public/inbox/s/{slug}/config`

Get public-safe inbox config by slug.

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |

## Widget Js

`GET https://app.opvs.ai/api/v1/public/inbox/widget.js`

Serve the embeddable inbox widget JavaScript.

## Landing Page By Slug

`GET https://app.opvs.ai/api/v1/public/inbox/s/{slug}`

Serve the public inbox landing page by slug.

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |

## Landing Page By Token

`GET https://app.opvs.ai/api/v1/public/inbox/{token}`

Serve the public inbox landing page by token.

| Code | When | What to do |
| --- | --- | --- |
| 422 | Validation Error |  |
