curl --request POST \
--url https://api.laneapp.co/api/records/feedback \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"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"
}
'import requests
url = "https://api.laneapp.co/api/records/feedback"
payload = {
"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"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
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'
})
};
fetch('https://api.laneapp.co/api/records/feedback', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.laneapp.co/api/records/feedback",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'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'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.laneapp.co/api/records/feedback"
payload := strings.NewReader("{\n \"title\": \"CSV export is too slow\",\n \"description\": \"Exporting a large report times out after 30 seconds.\",\n \"customer_email\": \"jane@gmail.com\",\n \"customer_name\": \"Jane Doe\",\n \"company_domain\": \"acme.com\",\n \"created_at\": \"2026-03-04\",\n \"source\": \"Zapier\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.laneapp.co/api/records/feedback")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"CSV export is too slow\",\n \"description\": \"Exporting a large report times out after 30 seconds.\",\n \"customer_email\": \"jane@gmail.com\",\n \"customer_name\": \"Jane Doe\",\n \"company_domain\": \"acme.com\",\n \"created_at\": \"2026-03-04\",\n \"source\": \"Zapier\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.laneapp.co/api/records/feedback")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"CSV export is too slow\",\n \"description\": \"Exporting a large report times out after 30 seconds.\",\n \"customer_email\": \"jane@gmail.com\",\n \"customer_name\": \"Jane Doe\",\n \"company_domain\": \"acme.com\",\n \"created_at\": \"2026-03-04\",\n \"source\": \"Zapier\"\n}"
response = http.request(request)
puts response.read_body{
"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": []
}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):
company_domain: the company with that website domain, added if Lane doesn’t have it yet.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.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.
curl --request POST \
--url https://api.laneapp.co/api/records/feedback \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"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"
}
'import requests
url = "https://api.laneapp.co/api/records/feedback"
payload = {
"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"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
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'
})
};
fetch('https://api.laneapp.co/api/records/feedback', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.laneapp.co/api/records/feedback",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'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'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.laneapp.co/api/records/feedback"
payload := strings.NewReader("{\n \"title\": \"CSV export is too slow\",\n \"description\": \"Exporting a large report times out after 30 seconds.\",\n \"customer_email\": \"jane@gmail.com\",\n \"customer_name\": \"Jane Doe\",\n \"company_domain\": \"acme.com\",\n \"created_at\": \"2026-03-04\",\n \"source\": \"Zapier\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.laneapp.co/api/records/feedback")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"CSV export is too slow\",\n \"description\": \"Exporting a large report times out after 30 seconds.\",\n \"customer_email\": \"jane@gmail.com\",\n \"customer_name\": \"Jane Doe\",\n \"company_domain\": \"acme.com\",\n \"created_at\": \"2026-03-04\",\n \"source\": \"Zapier\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.laneapp.co/api/records/feedback")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"CSV export is too slow\",\n \"description\": \"Exporting a large report times out after 30 seconds.\",\n \"customer_email\": \"jane@gmail.com\",\n \"customer_name\": \"Jane Doe\",\n \"company_domain\": \"acme.com\",\n \"created_at\": \"2026-03-04\",\n \"source\": \"Zapier\"\n}"
response = http.request(request)
puts response.read_body{
"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": []
}Authorizations
Your Lane API key, sent in the x-api-key header.
Body
Short title of the feedback. Required and must not be blank.
The body of the feedback. When present, the feedback is queued for AI insight extraction.
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.
"jane@acme.com"
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.
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.
"acme.com"
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.
"Acme"
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.
"2026-03-04"
Origin label for the feedback (for example, "Zapier" or "Chrome"). Normalized against the allowed set; defaults to "Manual".
Response
Feedback created.
Workflow status label.
The name of the company the feedback is linked to, if any.
The email of who the feedback is from, as sent.
When the feedback was given: created_at if you sent one, otherwise when it was created.
When the feedback was last changed. For new feedback, when it was created.
What Lane couldn't use from the request and why, in plain sentences. Empty when everything was used as sent.
Was this page helpful?
