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@acme.com",
"customer_name": "Jane Doe",
"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@acme.com",
"customer_name": "Jane Doe",
"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@acme.com',
customer_name: 'Jane Doe',
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@acme.com',
'customer_name' => 'Jane Doe',
'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@acme.com\",\n \"customer_name\": \"Jane Doe\",\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@acme.com\",\n \"customer_name\": \"Jane Doe\",\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@acme.com\",\n \"customer_name\": \"Jane Doe\",\n \"source\": \"Zapier\"\n}"
response = http.request(request)
puts response.read_body{
"id": "66a1b2c3d4e5f6a7b8c9d0e1",
"title": "CSV export is too slow",
"description": "Exporting a large report times out after 30 seconds.",
"status": "Triage",
"customer": "Acme Inc",
"customer_email": "jane@acme.com",
"source": "Zapier",
"importance": null,
"createdAt": "2026-07-04T10:00:00.000Z",
"updatedAt": "2026-07-04T10:00:00.000Z"
}{
"error": "Title is required"
}{
"success": true,
"error": "<string>",
"message": "<string>"
}Create feedback
Creates a piece of feedback in Lane. If a customer_email is supplied, Lane resolves the contact and account automatically — matching an existing contact by email, creating one if needed, and grouping it under a company by email domain. When a description is present, the feedback is queued for AI processing (insight extraction).
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@acme.com",
"customer_name": "Jane Doe",
"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@acme.com",
"customer_name": "Jane Doe",
"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@acme.com',
customer_name: 'Jane Doe',
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@acme.com',
'customer_name' => 'Jane Doe',
'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@acme.com\",\n \"customer_name\": \"Jane Doe\",\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@acme.com\",\n \"customer_name\": \"Jane Doe\",\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@acme.com\",\n \"customer_name\": \"Jane Doe\",\n \"source\": \"Zapier\"\n}"
response = http.request(request)
puts response.read_body{
"id": "66a1b2c3d4e5f6a7b8c9d0e1",
"title": "CSV export is too slow",
"description": "Exporting a large report times out after 30 seconds.",
"status": "Triage",
"customer": "Acme Inc",
"customer_email": "jane@acme.com",
"source": "Zapier",
"importance": null,
"createdAt": "2026-07-04T10:00:00.000Z",
"updatedAt": "2026-07-04T10:00:00.000Z"
}{
"error": "Title is required"
}{
"success": true,
"error": "<string>",
"message": "<string>"
}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.
If provided, links the feedback to a contact (matched or created by email) and to a company (by email domain).
Used alongside customer_email when creating a new contact.
Origin label for the feedback (for example, "Zapier" or "Chrome"). Normalized against the allowed set; defaults to "Manual".
Was this page helpful?
