# AI Office

Source: https://opvs.ai/docs/api/ai-office

## `GET` /api/v1/office/offices

**List Offices**

```bash
curl -X GET 'https://app.opvs.ai/api/v1/office/offices' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

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

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices", {
  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/office/offices", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `200` — Successful Response

## `POST` /api/v1/office/offices

**Create Office**

```bash
curl -X POST 'https://app.opvs.ai/api/v1/office/offices' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

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

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices", {
  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/office/offices", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

- `201` — Successful Response

## `GET` /api/v1/office/offices/{office_id}

**Get Office**

**Parameters**

- `office_id` (path, string, required)

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

```python
import httpx

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

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}", {
  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/office/offices/{office_id}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

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

## `PATCH` /api/v1/office/offices/{office_id}

**Update Office**

**Parameters**

- `office_id` (path, string, required)

```bash
curl -X PATCH 'https://app.opvs.ai/api/v1/office/offices/{office_id}' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

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

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

```go
package main

import (
	"net/http"
)

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

**Responses**

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

## `DELETE` /api/v1/office/offices/{office_id}

**Delete Office**

**Parameters**

- `office_id` (path, string, required)

```bash
curl -X DELETE 'https://app.opvs.ai/api/v1/office/offices/{office_id}' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

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

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

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("DELETE", "https://app.opvs.ai/api/v1/office/offices/{office_id}", 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/office/offices/{office_id}/roles

**List Roles**

**Parameters**

- `office_id` (path, string, required)

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

```python
import httpx

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

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/roles", {
  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/office/offices/{office_id}/roles", 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/office/offices/{office_id}/roles

**Create Role**

**Parameters**

- `office_id` (path, string, required)

```bash
curl -X POST 'https://app.opvs.ai/api/v1/office/offices/{office_id}/roles' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.post(
    "https://app.opvs.ai/api/v1/office/offices/{office_id}/roles",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/roles", {
  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/office/offices/{office_id}/roles", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

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

## `GET` /api/v1/office/offices/{office_id}/roles/{role_id}

**Get Role**

**Parameters**

- `office_id` (path, string, required)
- `role_id` (path, string, required)

```bash
curl -X GET 'https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

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

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}", {
  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/office/offices/{office_id}/roles/{role_id}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

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

## `PATCH` /api/v1/office/offices/{office_id}/roles/{role_id}

**Update Role**

**Parameters**

- `office_id` (path, string, required)
- `role_id` (path, string, required)

```bash
curl -X PATCH 'https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.patch(
    "https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}", {
  method: "PATCH",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

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

**Responses**

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

## `DELETE` /api/v1/office/offices/{office_id}/roles/{role_id}

**Delete Role**

**Parameters**

- `office_id` (path, string, required)
- `role_id` (path, string, required)

```bash
curl -X DELETE 'https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.delete(
    "https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}", {
  method: "DELETE",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("DELETE", "https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}", 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/office/offices/{office_id}/relationships

**List Relationships**

**Parameters**

- `office_id` (path, string, required)

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

```python
import httpx

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

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships", {
  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/office/offices/{office_id}/relationships", 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/office/offices/{office_id}/relationships

**Create Relationship**

**Parameters**

- `office_id` (path, string, required)

```bash
curl -X POST 'https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.post(
    "https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships", {
  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/office/offices/{office_id}/relationships", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

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

## `GET` /api/v1/office/offices/{office_id}/relationships/{rel_id}

**Get Relationship**

**Parameters**

- `office_id` (path, string, required)
- `rel_id` (path, string, required)

```bash
curl -X GET 'https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships/{rel_id}' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

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

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships/{rel_id}", {
  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/office/offices/{office_id}/relationships/{rel_id}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

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

## `DELETE` /api/v1/office/offices/{office_id}/relationships/{rel_id}

**Delete Relationship**

**Parameters**

- `office_id` (path, string, required)
- `rel_id` (path, string, required)

```bash
curl -X DELETE 'https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships/{rel_id}' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.delete(
    "https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships/{rel_id}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships/{rel_id}", {
  method: "DELETE",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
```

```go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("DELETE", "https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships/{rel_id}", 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/office/offices/{office_id}/approvals

**List Approvals**

**Parameters**

- `office_id` (path, string, required)

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

```python
import httpx

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

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals", {
  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/office/offices/{office_id}/approvals", 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/office/offices/{office_id}/approvals

**Create Approval**

**Parameters**

- `office_id` (path, string, required)

```bash
curl -X POST 'https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.post(
    "https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals", {
  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/office/offices/{office_id}/approvals", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

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

## `GET` /api/v1/office/offices/{office_id}/approvals/role/{role_id}/pending

**Get Pending For Role**

**Parameters**

- `office_id` (path, string, required)
- `role_id` (path, string, required)

```bash
curl -X GET 'https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/role/{role_id}/pending' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.get(
    "https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/role/{role_id}/pending",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/role/{role_id}/pending", {
  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/office/offices/{office_id}/approvals/role/{role_id}/pending", 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/office/offices/{office_id}/approvals/{approval_id}

**Get Approval**

**Parameters**

- `office_id` (path, string, required)
- `approval_id` (path, string, required)

```bash
curl -X GET 'https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

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

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}", {
  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/office/offices/{office_id}/approvals/{approval_id}", 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/office/offices/{office_id}/approvals/{approval_id}/decide

**Decide Approval**

**Parameters**

- `office_id` (path, string, required)
- `approval_id` (path, string, required)

```bash
curl -X POST 'https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}/decide' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.post(
    "https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}/decide",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}/decide", {
  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/office/offices/{office_id}/approvals/{approval_id}/decide", 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/office/offices/{office_id}/approvals/{approval_id}/cancel

**Cancel Approval**

**Parameters**

- `office_id` (path, string, required)
- `approval_id` (path, string, required)

```bash
curl -X POST 'https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}/cancel' \
  -H 'Authorization: Bearer <token>'
```

```python
import httpx

resp = httpx.post(
    "https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}/cancel",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const resp = await fetch("https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}/cancel", {
  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/office/offices/{office_id}/approvals/{approval_id}/cancel", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

**Responses**

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

## List Offices

`GET https://app.opvs.ai/api/v1/office/offices`

## Create Office

`POST https://app.opvs.ai/api/v1/office/offices`

## Get Office

`GET https://app.opvs.ai/api/v1/office/offices/{office_id}`

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

## Update Office

`PATCH https://app.opvs.ai/api/v1/office/offices/{office_id}`

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

## Delete Office

`DELETE https://app.opvs.ai/api/v1/office/offices/{office_id}`

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

## List Roles

`GET https://app.opvs.ai/api/v1/office/offices/{office_id}/roles`

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

## Create Role

`POST https://app.opvs.ai/api/v1/office/offices/{office_id}/roles`

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

## Get Role

`GET https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}`

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

## Update Role

`PATCH https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}`

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

## Delete Role

`DELETE https://app.opvs.ai/api/v1/office/offices/{office_id}/roles/{role_id}`

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

## List Relationships

`GET https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships`

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

## Create Relationship

`POST https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships`

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

## Get Relationship

`GET https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships/{rel_id}`

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

## Delete Relationship

`DELETE https://app.opvs.ai/api/v1/office/offices/{office_id}/relationships/{rel_id}`

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

## List Approvals

`GET https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals`

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

## Create Approval

`POST https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals`

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

## Get Pending For Role

`GET https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/role/{role_id}/pending`

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

## Get Approval

`GET https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}`

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

## Decide Approval

`POST https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}/decide`

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

## Cancel Approval

`POST https://app.opvs.ai/api/v1/office/offices/{office_id}/approvals/{approval_id}/cancel`

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