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

# Submit feedback to an organization's feedback URL

> Record feedback from an AI agent or integration by posting to the organization's feedback URL, as shown on the Feedback page in the dashboard. No credentials are required. Limited per source IP and per organization.



## OpenAPI

````yaml https://api.usenotra.com/openapi.json post /v1/feedback/{organizationSlug}
openapi: 3.1.1
info:
  title: Notra API
  version: 1.0.0
  description: >-
    OpenAPI schema for Notra content endpoints. Use GET /v1/status for public
    reachability. Error responses include recovery guidance.
servers:
  - url: https://api.usenotra.com
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Discovery
    description: Public API status and authenticated workspace discovery.
  - name: Content
    description: >-
      Manage posts, brand identities, and GitHub or Linear integrations, and
      queue content generation. Organization is inferred from the API key
      (identity.externalId).
  - name: Schedules
    description: >-
      Manage scheduled content generation. Organization is inferred from the API
      key (identity.externalId).
  - name: Event Triggers
    description: >-
      Manage event-based content generation triggered by GitHub webhooks.
      Organization is inferred from the API key (identity.externalId).
  - name: Chats
    description: >-
      Manage chat sessions. Organization is inferred from the API key
      (identity.externalId).
  - name: Skills
    description: >-
      Manage reusable writing skills. Organization is inferred from the API key
      (identity.externalId).
  - name: Feedback
    description: >-
      Collect and triage feedback submitted by AI agents. Agents post to the
      organization's feedback URL without credentials; reading and triage
      require an API key with feedback.read or feedback.write.
  - name: GEO
    description: >-
      Manage generative engine optimization: projects, tracking settings,
      prompts, prompt sequences, competitors, scans, visibility reads, content
      gaps and briefs, agent readiness and AI traffic. Project-scoped endpoints
      require the GEO plan entitlement in addition to their scope;
      organization-level ingest endpoints require only the traffic scope.
paths:
  /v1/feedback/{organizationSlug}:
    post:
      tags:
        - Feedback
      summary: Submit feedback to an organization's feedback URL
      description: >-
        Record feedback from an AI agent or integration by posting to the
        organization's feedback URL, as shown on the Feedback page in the
        dashboard. No credentials are required. Limited per source IP and per
        organization.
      operationId: submitOrganizationFeedback
      parameters:
        - schema:
            type: string
            minLength: 1
            maxLength: 63
            pattern: ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i
            description: >-
              Your organization slug, as shown in your feedback URL on the
              Feedback page.
            example: acme
          required: true
          description: >-
            Your organization slug, as shown in your feedback URL on the
            Feedback page.
          in: path
          name: organizationSlug
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitFeedbackRequest'
      responses:
        '202':
          description: Feedback accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitFeedbackResponse'
        '400':
          description: Invalid request body
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Feedback endpoint not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: >-
            Rate limit exceeded. This endpoint allows 30 requests per 10 minutes
            per IP address, plus 200 requests per hour per organization.
          headers:
            RateLimit-Limit:
              description: Maximum requests allowed in the current window.
              schema:
                type: integer
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the current window resets.
              schema:
                type: integer
            Retry-After:
              description: Seconds the client should wait before retrying.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitErrorResponse'
      security: []
components:
  schemas:
    SubmitFeedbackRequest:
      type: object
      properties:
        message:
          type: string
          minLength: 1
          maxLength: 4000
          description: The feedback itself.
          example: The search tool times out when the query has quotes.
        title:
          type: string
          minLength: 1
          maxLength: 200
          description: Short summary. When omitted, Notra writes one.
          example: Search times out on quoted queries
        kind:
          type: string
          enum:
            - bug
            - feature
            - praise
            - question
            - other
          description: What kind of feedback this is. When omitted, Notra classifies it.
          example: bug
        sentiment:
          type: string
          enum:
            - negative
            - neutral
            - positive
          description: >-
            Overall sentiment. When omitted, Notra classifies it from the
            message.
          example: negative
        source:
          type: string
          enum:
            - mcp
            - api
            - sdk
          default: api
          description: Channel the feedback arrived through.
          example: mcp
        projectId:
          type: string
          minLength: 1
          pattern: ^[A-Za-z0-9_-]{1,100}$
          description: Project to file the feedback under.
        agentClient:
          type: string
          minLength: 1
          maxLength: 200
          description: The agent or client that submitted the feedback.
          example: claude-code
        agentModel:
          type: string
          minLength: 1
          maxLength: 200
          example: claude-opus-5
        toolVersion:
          type: string
          minLength: 1
          maxLength: 200
          example: 1.2.0
        userAgent:
          type: string
          minLength: 1
          maxLength: 2048
        contextUrl:
          type: string
          maxLength: 2048
          format: uri
          description: Page or resource the feedback is about.
          example: https://docs.example.com/api/search
        externalId:
          type: string
          minLength: 1
          maxLength: 200
          description: Your own identifier for the user or session.
        idempotencyKey:
          type: string
          minLength: 1
          maxLength: 200
          description: >-
            Submitting the same key twice returns the original feedback instead
            of creating a duplicate.
        metadata:
          type: object
          additionalProperties: {}
          description: Arbitrary JSON attached to the feedback, up to 8 KB.
      required:
        - message
    SubmitFeedbackResponse:
      type: object
      properties:
        feedback:
          $ref: '#/components/schemas/Feedback'
        deduplicated:
          type: boolean
          description: >-
            True when an existing feedback with the same idempotencyKey was
            returned.
      required:
        - feedback
        - deduplicated
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        code:
          type: string
        recovery:
          type: string
      required:
        - error
    RateLimitErrorResponse:
      type: object
      properties:
        error:
          type: string
        limit:
          type: integer
          minimum: 1
        remaining:
          type: integer
          minimum: 0
        reset:
          type: integer
      required:
        - error
        - limit
        - remaining
        - reset
    Feedback:
      type: object
      properties:
        id:
          type: string
        projectId:
          type:
            - string
            - 'null'
        source:
          type: string
          enum:
            - mcp
            - api
            - sdk
          description: Channel the feedback arrived through.
          example: mcp
        kind:
          type: string
          enum:
            - bug
            - feature
            - praise
            - question
            - other
          description: What kind of feedback this is.
          example: bug
        sentiment:
          type:
            - string
            - 'null'
          enum:
            - negative
            - neutral
            - positive
            - null
          description: Overall sentiment of the feedback.
          example: negative
        status:
          type: string
          enum:
            - new
            - triaged
            - resolved
            - archived
          description: Triage status.
          example: new
        title:
          type:
            - string
            - 'null'
        message:
          type: string
        agentClient:
          type:
            - string
            - 'null'
        agentModel:
          type:
            - string
            - 'null'
        toolVersion:
          type:
            - string
            - 'null'
        userAgent:
          type:
            - string
            - 'null'
        contextUrl:
          type:
            - string
            - 'null'
        externalId:
          type:
            - string
            - 'null'
        idempotencyKey:
          type:
            - string
            - 'null'
        metadata:
          type:
            - object
            - 'null'
          additionalProperties: {}
        resolvedAt:
          type:
            - string
            - 'null'
        createdAt:
          type: string
        updatedAt:
          type: string
      required:
        - id
        - projectId
        - source
        - kind
        - sentiment
        - status
        - title
        - message
        - agentClient
        - agentModel
        - toolVersion
        - userAgent
        - contextUrl
        - externalId
        - idempotencyKey
        - metadata
        - resolvedAt
        - createdAt
        - updatedAt
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: Send your API key in the Authorization header as Bearer API_KEY.

````