> ## Documentation Index
> Fetch the complete documentation index at: https://docs.userorbit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Feedback (Public)

> Create new feedback from public widget. Requires authenticated subscriber via JWT token.

## Authentication

This endpoint requires subscriber authentication. Use the JWT token from `subscriber.identify` in the `Authorization` header or `publicAccessToken` cookie.

```bash theme={null}
Authorization: Bearer SUBSCRIBER_JWT_TOKEN
```

## Request Body

<ParamField body="title" type="string" required>
  Feedback title. Brief summary of the feedback.
</ParamField>

<ParamField body="text" type="string">
  Detailed description of the feedback. Supports plain text.
</ParamField>

<ParamField body="type" type="string">
  Custom feedback type. Can be used for categorization.
</ParamField>

<ParamField body="boardId" type="string">
  UUID of the feedback board to post to. If not provided, feedback won't be assigned to a specific board.
</ParamField>

<ParamField body="meta" type="object">
  Custom metadata object. Can store any additional information.
</ParamField>

## Response

<ResponseField name="data" type="object">
  Created feedback object

  <Expandable title="Feedback Object">
    <ResponseField name="id" type="string">Feedback ID (UUID)</ResponseField>
    <ResponseField name="urlId" type="string">Short URL identifier</ResponseField>
    <ResponseField name="url" type="string">URL path (/title-urlId)</ResponseField>
    <ResponseField name="title" type="string">Feedback title</ResponseField>
    <ResponseField name="text" type="string">Feedback description</ResponseField>
    <ResponseField name="status" type="string">Status: in\_review, in\_progress, planned, completed, closed</ResponseField>
    <ResponseField name="priority" type="string">Priority: low, medium, high, urgent</ResponseField>
    <ResponseField name="boardId" type="string">Board ID (if assigned)</ResponseField>
    <ResponseField name="creatorId" type="string">Subscriber ID who created it</ResponseField>
    <ResponseField name="teamId" type="string">Team ID</ResponseField>
    <ResponseField name="feedbackVotesCount" type="number">Number of votes</ResponseField>
    <ResponseField name="feedbackCommentsCount" type="number">Number of comments</ResponseField>
    <ResponseField name="publishedAt" type="string">Publication timestamp (ISO 8601)</ResponseField>
    <ResponseField name="createdAt" type="string">Creation timestamp</ResponseField>
    <ResponseField name="updatedAt" type="string">Last update timestamp</ResponseField>
    <ResponseField name="subscriber" type="object">Creator subscriber object</ResponseField>
    <ResponseField name="tags" type="array">Array of tag objects</ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --location --request POST 'https://api.userorbit.com/v1/public/feedbacks.create' \
  --header 'Authorization: Bearer SUBSCRIBER_JWT_TOKEN' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "title": "Add dark mode support",
    "text": "It would be great to have a dark mode option for the dashboard. This would reduce eye strain during late-night work sessions.",
    "boardId": "33333333-1234-1234-1234-123456789012"
  }'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://api.userorbit.com/v1/public/feedbacks.create', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer SUBSCRIBER_JWT_TOKEN',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      title: 'Add dark mode support',
      text: 'It would be great to have a dark mode option for the dashboard.',
      boardId: '33333333-1234-1234-1234-123456789012'
    })
  });

  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      'https://api.userorbit.com/v1/public/feedbacks.create',
      headers={
          'Authorization': 'Bearer SUBSCRIBER_JWT_TOKEN',
          'Content-Type': 'application/json'
      },
      json={
          'title': 'Add dark mode support',
          'text': 'It would be great to have a dark mode option for the dashboard.',
          'boardId': '33333333-1234-1234-1234-123456789012'
      }
  )

  data = response.json()
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "data": {
      "id": "22222222-1234-1234-1234-123456789012",
      "urlId": "abc123def456",
      "url": "/add-dark-mode-support-abc123def456",
      "title": "Add dark mode support",
      "text": "It would be great to have a dark mode option for the dashboard.",
      "status": "in_review",
      "priority": "medium",
      "boardId": "33333333-1234-1234-1234-123456789012",
      "creatorId": "87654321-1234-1234-1234-123456789012",
      "teamId": "11111111-1234-1234-1234-123456789012",
      "feedbackVotesCount": 0,
      "feedbackCommentsCount": 0,
      "publishedAt": "2024-01-15T10:30:00Z",
      "createdAt": "2024-01-15T10:30:00Z",
      "updatedAt": "2024-01-15T10:30:00Z",
      "archivedAt": null,
      "lastModifiedById": null,
      "meta": {},
      "subscriber": {
        "id": "87654321-1234-1234-1234-123456789012",
        "name": "John Doe",
        "email": "john@example.com",
        "source": "widget",
        "meta": {},
        "avatarUrl": null,
        "createdAt": "2024-01-10T08:00:00Z",
        "lastUpdated": "2024-01-15T10:30:00Z"
      },
      "lastModifiedBy": null,
      "tags": []
    }
  }
  ```
</ResponseExample>

## Behavior

* **Moderation**: If team has `publicBoardModeration` enabled, feedback starts unpublished and requires approval
* **Default Status**: New feedback defaults to `in_review` status
* **Default Priority**: New feedback defaults to `medium` priority
* **Auto-subscribe**: Creator is automatically subscribed to notifications
* **Webhooks**: Triggers `feedbacks.create` event for Zapier integrations

## Use Cases

* **Feature Requests**: Users suggest new features
* **Bug Reports**: Users report issues
* **General Feedback**: Users provide product feedback
* **Ideas**: Users share product ideas

## Notes

* Subscriber must belong to the same team as the board
* Board must exist and belong to the team
* Empty title will fail validation
* URL is auto-generated from title and urlId
* Feedback is immediately visible to team (unless moderation is enabled)
