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

# Create feedback

> Creates a piece of feedback in Lane, linked to the customer it came from when you say who that is: the company (by `company_domain` or `company_name`) and the person who gave it (by `customer_email`). When a `description` is present, the feedback is queued for AI processing (insight extraction).

**Which company the feedback counts for** (the first that applies):

1. `company_domain`: the company with that website domain, added if Lane doesn't have it yet.
2. `company_name`: the one company with exactly that name (ignoring case), added if there's none. If several companies share the name, the name isn't used.
3. `customer_email`: the company the person already belongs to in Lane; otherwise the one their email's domain names, added if new. Personal domains such as gmail.com don't name a company.

Send `company_domain` whenever you have it: a domain identifies a company exactly, a name may not.

**The person.** `customer_email` links the person who gave the feedback, added if new. A person who already belongs to another company than the one you name stays where they are: the feedback is linked to your company, with their email and name kept as who it's from.

**Nothing about the customer or the date fails the call.** A value Lane can't use (a personal domain in `company_domain`, an email that isn't one, a date it can't read) is skipped, the feedback is still created, and `warnings` in the response says what happened.



## OpenAPI

````yaml /openapi.json post /records/feedback
openapi: 3.1.0
info:
  title: Lane Public API
  version: 1.0.0
  description: >-
    Programmatic access to Lane — create customer feedback and read your
    signals. This is the same API that powers the Lane Zapier app and Chrome
    extension, and you can use it for any custom integration.


    All requests are scoped to the workspace that owns the API key. The Public
    API is available on the Pro plan (and during the trial).
servers:
  - url: https://api.laneapp.co/api
    description: Production
security:
  - ApiKeyHeader: []
  - BearerAuth: []
tags:
  - name: Connection
    description: Test that your API key is valid.
  - name: Feedback
    description: Create customer feedback in Lane.
  - name: Signals
    description: Read the signals detected in your workspace.
paths:
  /records/feedback:
    post:
      tags:
        - Feedback
      summary: Create feedback
      description: >-
        Creates a piece of feedback in Lane, linked to the customer it came from
        when you say who that is: the company (by `company_domain` or
        `company_name`) and the person who gave it (by `customer_email`). When a
        `description` is present, the feedback is queued for AI processing
        (insight extraction).


        **Which company the feedback counts for** (the first that applies):


        1. `company_domain`: the company with that website domain, added if Lane
        doesn't have it yet.

        2. `company_name`: the one company with exactly that name (ignoring
        case), added if there's none. If several companies share the name, the
        name isn't used.

        3. `customer_email`: the company the person already belongs to in Lane;
        otherwise the one their email's domain names, added if new. Personal
        domains such as gmail.com don't name a company.


        Send `company_domain` whenever you have it: a domain identifies a
        company exactly, a name may not.


        **The person.** `customer_email` links the person who gave the feedback,
        added if new. A person who already belongs to another company than the
        one you name stays where they are: the feedback is linked to your
        company, with their email and name kept as who it's from.


        **Nothing about the customer or the date fails the call.** A value Lane
        can't use (a personal domain in `company_domain`, an email that isn't
        one, a date it can't read) is skipped, the feedback is still created,
        and `warnings` in the response says what happened.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateFeedbackRequest'
            example:
              title: CSV export is too slow
              description: Exporting a large report times out after 30 seconds.
              customer_email: jane@gmail.com
              customer_name: Jane Doe
              company_domain: acme.com
              created_at: '2026-03-04'
              source: Zapier
      responses:
        '200':
          description: Feedback created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Feedback'
              examples:
                linked:
                  summary: Linked to a company
                  value:
                    id: 66a1b2c3d4e5f6a7b8c9d0e1
                    title: CSV export is too slow
                    description: >-
                      <p>Exporting a large report times out after 30
                      seconds.</p>
                    status: Triage
                    customer: Acme
                    customer_email: jane@gmail.com
                    source: Zapier
                    createdAt: '2026-03-04T00:00:00.000Z'
                    updatedAt: '2026-10-04T10:00:00.000Z'
                    company:
                      id: 65f0c1d2e3f4a5b6c7d8e9f0
                      name: Acme
                      domain: acme.com
                      created: false
                    warnings: []
                warning:
                  summary: With a warning
                  value:
                    id: 66a1b2c3d4e5f6a7b8c9d0e2
                    title: CSV export is too slow
                    description: >-
                      <p>Exporting a large report times out after 30
                      seconds.</p>
                    status: Triage
                    customer: null
                    customer_email: null
                    source: Zapier
                    createdAt: '2026-10-04T10:00:00.000Z'
                    updatedAt: '2026-10-04T10:00:00.000Z'
                    company: null
                    warnings:
                      - >-
                        company_domain "gmail.com" is a personal email domain,
                        so it was ignored.
        '400':
          description: >-
            A missing or blank title. Nothing about the customer or the date
            returns a 400: see `warnings` on the 200 response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Title is required and must be a non-empty string.
        '401':
          description: No API key was sent.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: API Key is required
        '403':
          description: The API key isn't valid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Invalid API Key
components:
  schemas:
    CreateFeedbackRequest:
      type: object
      required:
        - title
      properties:
        title:
          type: string
          description: Short title of the feedback. Required and must not be blank.
        description:
          type: string
          description: >-
            The body of the feedback. When present, the feedback is queued for
            AI insight extraction.
        customer_email:
          type: string
          description: >-
            The email of the person who gave the feedback. Links the feedback to
            that person (added if new) and, when no company is named, to their
            company: the one they already belong to in Lane, or the one their
            email's domain names (added if new). Personal domains such as
            gmail.com don't name a company.
          example: jane@acme.com
        customer_name:
          type: string
          description: >-
            The person's name. Kept on the feedback as who it's from, and saved
            on the person in Lane when they have no name yet. A name already set
            is never changed.
        company_domain:
          type: string
          description: >-
            The website domain of the company the feedback is from. Lane uses
            the company with that domain, or adds it. A URL works too:
            `https://www.acme.com/pricing` is read as `acme.com`. The most
            reliable way to name a company. Skipped, with a warning, when it's a
            personal email domain or not a domain.
          example: acme.com
        company_name:
          type: string
          description: >-
            The company's name, for when you don't have its domain. Matched
            exactly, ignoring case and extra spaces; added as a new company when
            none matches. Skipped, with a warning, when several companies share
            the name. Sent with `company_domain`, it's the name given to the
            company if Lane adds it.
          example: Acme
        created_at:
          type: string
          description: >-
            When the feedback was given, if not now. An ISO 8601 date
            (`2026-03-04`, read as midnight UTC) or date-time
            (`2026-03-04T10:00:00Z`, or with an offset such as `+05:30`; with no
            offset it's read as UTC). Saved as the feedback's `createdAt`, so
            trends and lists place it on that date. Left out, the feedback is
            dated when it's created.


            A value Lane can't use is skipped with a warning, and the feedback
            is dated when it's created: another format (`03/04/2026`), a day
            that doesn't exist, a date before 2000, or one more than a week in
            the future. A date up to a week ahead (from a timezone ahead of UTC)
            is dated now without a warning.
          example: '2026-03-04'
        source:
          type: string
          description: >-
            Origin label for the feedback (for example, "Zapier" or "Chrome").
            Normalized against the allowed set; defaults to "Manual".
    Feedback:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        description:
          type: string
        status:
          type: string
          description: Workflow status label.
        customer:
          type: string
          nullable: true
          description: The name of the company the feedback is linked to, if any.
        customer_email:
          type: string
          nullable: true
          description: The email of who the feedback is from, as sent.
        source:
          type: string
        createdAt:
          type: string
          format: date-time
          description: >-
            When the feedback was given: `created_at` if you sent one, otherwise
            when it was created.
        updatedAt:
          type: string
          format: date-time
          description: >-
            When the feedback was last changed. For new feedback, when it was
            created.
        company:
          type: object
          nullable: true
          description: The company the feedback is linked to, or null.
          properties:
            id:
              type: string
            name:
              type: string
            domain:
              type: string
              nullable: true
            created:
              type: boolean
              description: True when Lane added the company with this call.
        warnings:
          type: array
          items:
            type: string
          description: >-
            What Lane couldn't use from the request and why, in plain sentences.
            Empty when everything was used as sent.
    Error:
      type: object
      properties:
        success:
          type: boolean
        error:
          type: string
        message:
          type: string
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: x-api-key
      description: Your Lane API key, sent in the `x-api-key` header.
    BearerAuth:
      type: http
      scheme: bearer
      description: 'Your Lane API key, sent as `Authorization: Bearer <key>`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.