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

# Add Feedback to Release

> ### POST /releases/{id}/feedback

<Note>
  This endpoint requires authentication. Include your Bearer token in the Authorization header.
</Note>

## Description

This endpoint allows users to add feedback to a release. Admins can add internal feedback that is only visible to other admins.

**API Key Support:** When using API keys, you can optionally specify a `fromUserId` to attribute the feedback to a specific user in the workspace. The specified user must exist, be active, and have access to the release.

## Code Examples

<CodeGroup>
  ```javascript Node.js theme={null}
  const response = await fetch('https://api.royalti.io/releases/example-id/feedback', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      "message": "sample-message",
      "isInternal": true,
      "fromUserId": "sample-fromUserId"
    })
  });

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

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

  response = requests.post(
    'https://api.royalti.io/releases/example-id/feedback',
    headers={
      'Authorization': f'Bearer {token}'
    },
    json={"message":"sample-message","isInternal":true,"fromUserId":"sample-fromUserId"}
  )

  data = response.json()
  print(data)
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.royalti.io/releases/example-id/feedback \
    -H "Authorization: Bearer YOUR_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"message":"sample-message","isInternal":true,"fromUserId":"sample-fromUserId"}'

  ```
</CodeGroup>


## OpenAPI

````yaml post /releases/{id}/feedback
openapi: 3.0.0
info:
  title: Royalti.io API
  description: "# Royalti API\r\n\r\nThis is the Royalti music royalty management platform API server.\r\n\r\n## Overview\r\n\r\nThe Royalti API provides comprehensive music royalty management services including:\r\n- Music publishing and writer management\r\n- Royalty processing and analytics\r\n- DDEX integration for music industry standards\r\n- File processing and pattern recognition\r\n- Payment processing and distribution\r\n\r\n## Authentication\r\n\r\nThe API uses JWT-based authentication with multiple protection levels:\r\n- Public endpoints for basic operations\r\n- Protected endpoints requiring valid JWT tokens\r\n- Admin endpoints for administrative functions\r\n\r\n## Features\r\n\r\n- Multi-dimensional royalty analytics\r\n- CWR (Collective Works Registration) support\r\n- DDEX integration for music metadata\r\n- Advanced file processing with pattern recognition\r\n- Real-time data processing with queue system"
  version: 2.6.0
  contact:
    name: Royalti.io Support
    email: support@royalti.io
    url: https://royalti.io
  license:
    name: Proprietary
    url: https://royalti.io/terms
servers:
  - url: https://api.royalti.io
    description: Production server
  - url: https://api-dev.royalti.io
    description: Development server
  - url: http://localhost:8084
    description: Local development
security:
  - bearerAuth: []
tags:
  - name: Accounting
    description: Accounting and financial transaction operations
  - name: DDEX
    description: DDEX operations (ERN/MEAD, messages, delivery, providers)
  - name: Label
    description: Label management operations
  - name: Internal Webhooks
    description: Internal system webhooks for royalty processing and downloads
  - name: Payment Webhooks
    description: Payment processor webhook endpoints
  - name: Billing Webhooks
    description: Stripe billing and subscription webhooks
  - name: Infrastructure Webhooks
    description: Cloudflare domain and SSL webhooks
  - name: Distribution Webhooks
    description: Digital distribution platform webhooks (FUGA)
paths:
  /releases/{id}/feedback:
    post:
      tags:
        - Release
      summary: Add Feedback to Release
      description: >-
        ### POST /releases/{id}/feedback


        This endpoint allows users to add feedback to a release. Admins can add
        internal feedback that is only visible to other admins.


        **API Key Support:** When using API keys, you can optionally specify a
        `fromUserId` to attribute the feedback to a specific user in the
        workspace. The specified user must exist, be active, and have access to
        the release.
      parameters:
        - name: id
          in: path
          required: true
          description: Release ID
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                message:
                  type: string
                  description: Feedback message
                isInternal:
                  type: boolean
                  description: Whether the feedback is internal (admin only)
                  default: false
                fromUserId:
                  type: string
                  format: uuid
                  description: >
                    Optional: TenantUserId to attribute the feedback to.

                    If not provided, defaults to the authenticated user.

                    The specified user must exist in the workspace, be active,
                    and have access to the release.
              required:
                - message
              example:
                message: >-
                  Great track! The production quality is excellent. Consider
                  adjusting the mix on the bridge section.
                isInternal: false
                fromUserId: 550e8400-e29b-41d4-a716-446655440000
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: Feedback added successfully
                  data:
                    $ref: '#/components/schemas/ReleaseFeedback'
        '400':
          description: Bad Request - Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    ReleaseFeedback:
      type: object
      properties:
        id:
          type: string
          format: uuid
        TenantId:
          type: integer
        ReleaseId:
          type: string
          format: uuid
        TenantUserId:
          type: string
          format: uuid
        comment:
          type: string
        status:
          type: string
          description: Status of the feedback (e.g. pending, approved, etc.)
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - TenantId
        - ReleaseId
        - TenantUserId
        - comment
        - status
        - createdAt
        - updatedAt
    Error:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            details:
              type: array
              items:
                type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        JWT Authorization header using the Bearer scheme. Format: "Bearer
        {token}"

````