curl --request POST \
--url https://laso.finance/feedback \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"feedback": "order-intl-card was smooth but I wanted a way to see the fee before paying",
"what_they_want": "order an international card",
"how_it_went": "worked, minor confusion on fees",
"endpoint": "/order-intl-card",
"rating": 4
}
'import requests
url = "https://laso.finance/feedback"
payload = {
"feedback": "order-intl-card was smooth but I wanted a way to see the fee before paying",
"what_they_want": "order an international card",
"how_it_went": "worked, minor confusion on fees",
"endpoint": "/order-intl-card",
"rating": 4
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
feedback: 'order-intl-card was smooth but I wanted a way to see the fee before paying',
what_they_want: 'order an international card',
how_it_went: 'worked, minor confusion on fees',
endpoint: '/order-intl-card',
rating: 4
})
};
fetch('https://laso.finance/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://laso.finance/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([
'feedback' => 'order-intl-card was smooth but I wanted a way to see the fee before paying',
'what_they_want' => 'order an international card',
'how_it_went' => 'worked, minor confusion on fees',
'endpoint' => '/order-intl-card',
'rating' => 4
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$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://laso.finance/feedback"
payload := strings.NewReader("{\n \"feedback\": \"order-intl-card was smooth but I wanted a way to see the fee before paying\",\n \"what_they_want\": \"order an international card\",\n \"how_it_went\": \"worked, minor confusion on fees\",\n \"endpoint\": \"/order-intl-card\",\n \"rating\": 4\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<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://laso.finance/feedback")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"feedback\": \"order-intl-card was smooth but I wanted a way to see the fee before paying\",\n \"what_they_want\": \"order an international card\",\n \"how_it_went\": \"worked, minor confusion on fees\",\n \"endpoint\": \"/order-intl-card\",\n \"rating\": 4\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://laso.finance/feedback")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"feedback\": \"order-intl-card was smooth but I wanted a way to see the fee before paying\",\n \"what_they_want\": \"order an international card\",\n \"how_it_went\": \"worked, minor confusion on fees\",\n \"endpoint\": \"/order-intl-card\",\n \"rating\": 4\n}"
response = http.request(request)
puts response.read_body{
"ok": true
}{
"error": "The feedback field is required."
}{
"error": "Invalid or expired id token."
}{
"error": "You must complete a deposit, purchase, or withdrawal before submitting feedback."
}{
"error": "Feedback rate limit reached. You may submit at most 5 feedback entries per 24 hours."
}Send feedback about the API
Tell the humans running Laso what worked, what was confusing, and what you wish existed. It lands on their dashboard, so it is the best channel for API friction and feature requests.
Send the id_token from /auth or /get-card as a Bearer token.
Requires at least one completed real action (a settled deposit, purchase, or withdrawal); at most 5 entries per 24 hours.
curl --request POST \
--url https://laso.finance/feedback \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"feedback": "order-intl-card was smooth but I wanted a way to see the fee before paying",
"what_they_want": "order an international card",
"how_it_went": "worked, minor confusion on fees",
"endpoint": "/order-intl-card",
"rating": 4
}
'import requests
url = "https://laso.finance/feedback"
payload = {
"feedback": "order-intl-card was smooth but I wanted a way to see the fee before paying",
"what_they_want": "order an international card",
"how_it_went": "worked, minor confusion on fees",
"endpoint": "/order-intl-card",
"rating": 4
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
feedback: 'order-intl-card was smooth but I wanted a way to see the fee before paying',
what_they_want: 'order an international card',
how_it_went: 'worked, minor confusion on fees',
endpoint: '/order-intl-card',
rating: 4
})
};
fetch('https://laso.finance/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://laso.finance/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([
'feedback' => 'order-intl-card was smooth but I wanted a way to see the fee before paying',
'what_they_want' => 'order an international card',
'how_it_went' => 'worked, minor confusion on fees',
'endpoint' => '/order-intl-card',
'rating' => 4
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$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://laso.finance/feedback"
payload := strings.NewReader("{\n \"feedback\": \"order-intl-card was smooth but I wanted a way to see the fee before paying\",\n \"what_they_want\": \"order an international card\",\n \"how_it_went\": \"worked, minor confusion on fees\",\n \"endpoint\": \"/order-intl-card\",\n \"rating\": 4\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<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://laso.finance/feedback")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"feedback\": \"order-intl-card was smooth but I wanted a way to see the fee before paying\",\n \"what_they_want\": \"order an international card\",\n \"how_it_went\": \"worked, minor confusion on fees\",\n \"endpoint\": \"/order-intl-card\",\n \"rating\": 4\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://laso.finance/feedback")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"feedback\": \"order-intl-card was smooth but I wanted a way to see the fee before paying\",\n \"what_they_want\": \"order an international card\",\n \"how_it_went\": \"worked, minor confusion on fees\",\n \"endpoint\": \"/order-intl-card\",\n \"rating\": 4\n}"
response = http.request(request)
puts response.read_body{
"ok": true
}{
"error": "The feedback field is required."
}{
"error": "Invalid or expired id token."
}{
"error": "You must complete a deposit, purchase, or withdrawal before submitting feedback."
}{
"error": "Feedback rate limit reached. You may submit at most 5 feedback entries per 24 hours."
}Authorizations
Firebase ID token from /auth or any paid route, sent as a Bearer token: Authorization: Bearer <id_token> (the Bearer prefix is required).
Body
The main free-text feedback. Required. Sanitized and capped server-side (max 2000 characters).
"order-intl-card was smooth but I wanted a way to see the fee before paying"
What you were trying to do. Optional. Capped at 500 characters.
"order an international card"
How it went. Optional. Capped at 500 characters.
"worked, minor confusion on fees"
Which API endpoint or route the feedback is about. Optional. Capped at 120 characters.
"/order-intl-card"
A 1-5 satisfaction rating. Optional; ignored when not an integer in range.
1 <= x <= 54
Response
Feedback recorded
true
Was this page helpful?