# Support

Report a problem or suggest a feature to the vendor from a self-hosted install, and see the vendor's status and replies (self-hosted installs only).

Generated from `apps/api/openapi.json`. HTML version: https://docs.institflow.com/en/reference/support

5 operations.

## GET /api/v1/support/submissions

What this institute sent the vendor, newest first (cursor-paginated): the text, whether it has left the install, what the vendor did with it and the vendor’s replies. Self-hosted only.

- Operation id: `SupportSubmissionsController_list_v1`
- Permission: `support.submit`
- Auth: credential required
- `Idempotency-Key`: not required

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `cursor` | query | string | no |  |
| `limit` | query | integer | no | 1–100 · default: 25 |

### Responses

**200** — A page of submissions.

| Property | Type | Required | Constraints |
| --- | --- | --- | --- |
| `data` | array<object> | yes |  |
| `nextCursor` | string \| null | yes |  |

Every other status answers with the shared `ErrorEnvelope` — see
https://docs.institflow.com/md/en/error-codes.md

### Example request

```bash
curl -X GET "https://your-institute.example/api/v1/support/submissions" \
  -H "Authorization: Bearer $INSTITFLOW_API_KEY"
```

## POST /api/v1/support/submissions

Report a problem or suggest a feature to the vendor. Saved here first and sent in the background, retried if the vendor cannot be reached. Do not include personal data. Self-hosted only.

- Operation id: `SupportSubmissionsController_create_v1`
- Permission: `support.submit`
- Auth: credential required
- `Idempotency-Key`: required for API-key callers

### Request body

| Property | Type | Required | Constraints |
| --- | --- | --- | --- |
| `kind` | enum: "problem" \| "feature" | yes |  |
| `category` | enum: "login_access" \| "people" \| "attendance" \| "billing" \| "courses_content" \| "notifications" \| "updates_backups" \| "performance" \| "other" | yes |  |
| `title` | string | yes | 1–120 chars |
| `text` | string | yes | 1–4000 chars |

```json
{
  "kind": "problem",
  "category": "login_access",
  "title": "Midterm Exam",
  "text": "string"
}
```

### Responses

**201** — The saved submission, queued.

| Property | Type | Required | Constraints |
| --- | --- | --- | --- |
| `id` | string (uuid) | yes |  |
| `kind` | enum: "problem" \| "feature" | yes |  |
| `category` | enum: "login_access" \| "people" \| "attendance" \| "billing" \| "courses_content" \| "notifications" \| "updates_backups" \| "performance" \| "other" | yes |  |
| `title` | string | yes |  |
| `body` | string | yes |  |
| `delivery` | enum: "queued" \| "sent" \| "failed" | yes |  |
| `lastError` | string \| null | yes |  |
| `remoteStatus` | enum: "new" \| "acknowledged" \| "in_progress" \| "resolved" \| "declined" \| "duplicate" \| null \| null | yes |  |
| `createdAt` | string (date-time) | yes |  |
| `sentAt` | string (date-time) \| null | yes |  |
| `syncedAt` | string (date-time) \| null | yes |  |
| `replies` | array<object> | yes |  |

Every other status answers with the shared `ErrorEnvelope` — see
https://docs.institflow.com/md/en/error-codes.md

### Example request

```bash
curl -X POST "https://your-institute.example/api/v1/support/submissions" \
  -H "Authorization: Bearer $INSTITFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "kind": "problem",
    "category": "login_access",
    "title": "Midterm Exam",
    "text": "string"
  }'
```

## GET /api/v1/support/submissions/{id}

One submission with the vendor’s replies. Self-hosted only.

- Operation id: `SupportSubmissionsController_get_v1`
- Permission: `support.submit`
- Auth: credential required
- `Idempotency-Key`: not required

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes |  |

### Responses

**200** — The submission.

| Property | Type | Required | Constraints |
| --- | --- | --- | --- |
| `id` | string (uuid) | yes |  |
| `kind` | enum: "problem" \| "feature" | yes |  |
| `category` | enum: "login_access" \| "people" \| "attendance" \| "billing" \| "courses_content" \| "notifications" \| "updates_backups" \| "performance" \| "other" | yes |  |
| `title` | string | yes |  |
| `body` | string | yes |  |
| `delivery` | enum: "queued" \| "sent" \| "failed" | yes |  |
| `lastError` | string \| null | yes |  |
| `remoteStatus` | enum: "new" \| "acknowledged" \| "in_progress" \| "resolved" \| "declined" \| "duplicate" \| null \| null | yes |  |
| `createdAt` | string (date-time) | yes |  |
| `sentAt` | string (date-time) \| null | yes |  |
| `syncedAt` | string (date-time) \| null | yes |  |
| `replies` | array<object> | yes |  |

Every other status answers with the shared `ErrorEnvelope` — see
https://docs.institflow.com/md/en/error-codes.md

### Example request

```bash
curl -X GET "https://your-institute.example/api/v1/support/submissions/37386ae0-3738-7738-8386-37386ae03738" \
  -H "Authorization: Bearer $INSTITFLOW_API_KEY"
```

## POST /api/v1/support/submissions/{id}/retry

Send a submission that failed (or is stuck) again. A submission already sent is final. Self-hosted only.

- Operation id: `SupportSubmissionsController_retry_v1`
- Permission: `support.submit`
- Auth: credential required
- `Idempotency-Key`: required for API-key callers

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes |  |

### Responses

**200** — The submission, queued again.

| Property | Type | Required | Constraints |
| --- | --- | --- | --- |
| `id` | string (uuid) | yes |  |
| `kind` | enum: "problem" \| "feature" | yes |  |
| `category` | enum: "login_access" \| "people" \| "attendance" \| "billing" \| "courses_content" \| "notifications" \| "updates_backups" \| "performance" \| "other" | yes |  |
| `title` | string | yes |  |
| `body` | string | yes |  |
| `delivery` | enum: "queued" \| "sent" \| "failed" | yes |  |
| `lastError` | string \| null | yes |  |
| `remoteStatus` | enum: "new" \| "acknowledged" \| "in_progress" \| "resolved" \| "declined" \| "duplicate" \| null \| null | yes |  |
| `createdAt` | string (date-time) | yes |  |
| `sentAt` | string (date-time) \| null | yes |  |
| `syncedAt` | string (date-time) \| null | yes |  |
| `replies` | array<object> | yes |  |

Every other status answers with the shared `ErrorEnvelope` — see
https://docs.institflow.com/md/en/error-codes.md

### Example request

```bash
curl -X POST "https://your-institute.example/api/v1/support/submissions/37386ae0-3738-7738-8386-37386ae03738/retry" \
  -H "Authorization: Bearer $INSTITFLOW_API_KEY"
```

## POST /api/v1/support/submissions/refresh

Ask the vendor now what became of these submissions (a pass of the background mirror). Self-hosted only.

- Operation id: `SupportSubmissionsController_refresh_v1`
- Permission: `support.submit`
- Auth: credential required
- `Idempotency-Key`: required for API-key callers

### Responses

**200** — The newest submissions after the pass.

| Property | Type | Required | Constraints |
| --- | --- | --- | --- |
| `data` | array<object> | yes |  |
| `nextCursor` | string \| null | yes |  |

Every other status answers with the shared `ErrorEnvelope` — see
https://docs.institflow.com/md/en/error-codes.md

### Example request

```bash
curl -X POST "https://your-institute.example/api/v1/support/submissions/refresh" \
  -H "Authorization: Bearer $INSTITFLOW_API_KEY"
```
