curl --request POST \
--url https://api.olostep.com/v1/feedbacks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"note": "The markdown drops the pricing comparison table; expected all 4 rows.",
"issues": [
"missing_content",
"broken_formatting"
],
"affected_endpoint": "POST /v1/scrapes",
"related_object_id": "scrape_abc1234567",
"url": "https://example.com/pricing"
}
'import requests
url = "https://api.olostep.com/v1/feedbacks"
payload = {
"note": "The markdown drops the pricing comparison table; expected all 4 rows.",
"issues": ["missing_content", "broken_formatting"],
"affected_endpoint": "POST /v1/scrapes",
"related_object_id": "scrape_abc1234567",
"url": "https://example.com/pricing"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
note: 'The markdown drops the pricing comparison table; expected all 4 rows.',
issues: ['missing_content', 'broken_formatting'],
affected_endpoint: 'POST /v1/scrapes',
related_object_id: 'scrape_abc1234567',
url: 'https://example.com/pricing'
})
};
fetch('https://api.olostep.com/v1/feedbacks', 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.olostep.com/v1/feedbacks",
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([
'note' => 'The markdown drops the pricing comparison table; expected all 4 rows.',
'issues' => [
'missing_content',
'broken_formatting'
],
'affected_endpoint' => 'POST /v1/scrapes',
'related_object_id' => 'scrape_abc1234567',
'url' => 'https://example.com/pricing'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api.olostep.com/v1/feedbacks"
payload := strings.NewReader("{\n \"note\": \"The markdown drops the pricing comparison table; expected all 4 rows.\",\n \"issues\": [\n \"missing_content\",\n \"broken_formatting\"\n ],\n \"affected_endpoint\": \"POST /v1/scrapes\",\n \"related_object_id\": \"scrape_abc1234567\",\n \"url\": \"https://example.com/pricing\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.olostep.com/v1/feedbacks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"note\": \"The markdown drops the pricing comparison table; expected all 4 rows.\",\n \"issues\": [\n \"missing_content\",\n \"broken_formatting\"\n ],\n \"affected_endpoint\": \"POST /v1/scrapes\",\n \"related_object_id\": \"scrape_abc1234567\",\n \"url\": \"https://example.com/pricing\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.olostep.com/v1/feedbacks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"note\": \"The markdown drops the pricing comparison table; expected all 4 rows.\",\n \"issues\": [\n \"missing_content\",\n \"broken_formatting\"\n ],\n \"affected_endpoint\": \"POST /v1/scrapes\",\n \"related_object_id\": \"scrape_abc1234567\",\n \"url\": \"https://example.com/pricing\"\n}"
response = http.request(request)
puts response.read_body{
"object": "feedback",
"id": "feedback_019e70f9-214a-74fc-a1ae-26fd3318be3e",
"category": "<string>",
"issues": [
"<string>"
],
"note": "<string>",
"created_at": "2026-10-23T00:00:00.000Z",
"affected_endpoint": "<string>",
"related_object_id": "<string>",
"url": "<string>"
}Feedback einreichen
Teile uns mit, wenn die API etwas falsch gemacht hat. Kostet keine Credits.
curl --request POST \
--url https://api.olostep.com/v1/feedbacks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"note": "The markdown drops the pricing comparison table; expected all 4 rows.",
"issues": [
"missing_content",
"broken_formatting"
],
"affected_endpoint": "POST /v1/scrapes",
"related_object_id": "scrape_abc1234567",
"url": "https://example.com/pricing"
}
'import requests
url = "https://api.olostep.com/v1/feedbacks"
payload = {
"note": "The markdown drops the pricing comparison table; expected all 4 rows.",
"issues": ["missing_content", "broken_formatting"],
"affected_endpoint": "POST /v1/scrapes",
"related_object_id": "scrape_abc1234567",
"url": "https://example.com/pricing"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
note: 'The markdown drops the pricing comparison table; expected all 4 rows.',
issues: ['missing_content', 'broken_formatting'],
affected_endpoint: 'POST /v1/scrapes',
related_object_id: 'scrape_abc1234567',
url: 'https://example.com/pricing'
})
};
fetch('https://api.olostep.com/v1/feedbacks', 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.olostep.com/v1/feedbacks",
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([
'note' => 'The markdown drops the pricing comparison table; expected all 4 rows.',
'issues' => [
'missing_content',
'broken_formatting'
],
'affected_endpoint' => 'POST /v1/scrapes',
'related_object_id' => 'scrape_abc1234567',
'url' => 'https://example.com/pricing'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api.olostep.com/v1/feedbacks"
payload := strings.NewReader("{\n \"note\": \"The markdown drops the pricing comparison table; expected all 4 rows.\",\n \"issues\": [\n \"missing_content\",\n \"broken_formatting\"\n ],\n \"affected_endpoint\": \"POST /v1/scrapes\",\n \"related_object_id\": \"scrape_abc1234567\",\n \"url\": \"https://example.com/pricing\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.olostep.com/v1/feedbacks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"note\": \"The markdown drops the pricing comparison table; expected all 4 rows.\",\n \"issues\": [\n \"missing_content\",\n \"broken_formatting\"\n ],\n \"affected_endpoint\": \"POST /v1/scrapes\",\n \"related_object_id\": \"scrape_abc1234567\",\n \"url\": \"https://example.com/pricing\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.olostep.com/v1/feedbacks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"note\": \"The markdown drops the pricing comparison table; expected all 4 rows.\",\n \"issues\": [\n \"missing_content\",\n \"broken_formatting\"\n ],\n \"affected_endpoint\": \"POST /v1/scrapes\",\n \"related_object_id\": \"scrape_abc1234567\",\n \"url\": \"https://example.com/pricing\"\n}"
response = http.request(request)
puts response.read_body{
"object": "feedback",
"id": "feedback_019e70f9-214a-74fc-a1ae-26fd3318be3e",
"category": "<string>",
"issues": [
"<string>"
],
"note": "<string>",
"created_at": "2026-10-23T00:00:00.000Z",
"affected_endpoint": "<string>",
"related_object_id": "<string>",
"url": "<string>"
}id des Objekts, von dem es stammt, und wir können es bis zur genauen Anfrage zurückverfolgen.
Das Einreichen von Feedback ist kostenlos und funktioniert auch dann, wenn die Credits deines Teams aufgebraucht sind.
Was zu senden ist
| Feld | Erforderlich | Hinweise |
|---|---|---|
category | ja | Eine von output_quality, reliability, performance, documentation, api_usability, feature_gap, other |
note | ja | Was schiefgelaufen ist und was du stattdessen erwartet hast, bis zu 4.000 Zeichen |
issues | nein | Bis zu 20 snake_case Symptomcodes, wie missing_content oder timeout. Die dokumentierten Codes sind im Schema aufgelistet; jeder andere Code derselben Form wird akzeptiert |
affected_endpoint | nein | METHOD /path, zum Beispiel POST /v1/scrapes |
related_object_id | nein | Die id des Scrapes, Batches, Crawls, der Antwort oder eines anderen Objekts, auf das sich das Feedback bezieht, oder die error_… id, wenn der Aufruf fehlgeschlagen ist |
url | nein | Die Seite, auf die sich das Feedback bezieht, wie die URL, die gescraped wurde |
Beispiel
curl -X POST https://api.olostep.com/v1/feedbacks \
-H "Authorization: Bearer <your_token>" \
-H "Content-Type: application/json" \
-d '{
"category": "output_quality",
"issues": ["missing_content", "broken_formatting"],
"note": "Die Markdown lässt die Preistabellen-Vergleichstabelle aus; erwartet wurden alle 4 Zeilen.",
"affected_endpoint": "POST /v1/scrapes",
"related_object_id": "scrape_abc1234567",
"url": "https://example.com/pricing"
}'
feedback Objekt mit seiner id und created_at. Es gibt noch keinen Listen- oder Abruf-Endpunkt; Feedback wird auf unserer Seite gelesen.Autorisierungen
Bearer-Authentifizierungsheader in der Form Bearer , wobei dein Authentifizierungstoken ist.
Body
Der allgemeine Grund für das Feedback.
output_quality, reliability, performance, documentation, api_usability, feature_gap, other Was schiefgelaufen ist und was du stattdessen erwartet hast.
1 - 4000"The markdown drops the pricing comparison table; expected all 4 rows."
Spezifische Symptome, als Kleinbuchstaben snake_case Codes. Dokumentierte Codes: missing_content, incorrect_content, incomplete_content, broken_formatting, irrelevant_results, duplicate_results, stale_content, request_failed, timeout, slow_response, inconsistent_result, docs_mismatch, broken_example, confusing_schema, confusing_error, unsupported_website, unsupported_format. Jeder andere Code in derselben Form wird akzeptiert.
20^[a-z0-9](?:[a-z0-9_]{0,78}[a-z0-9])?$["missing_content", "broken_formatting"]
Der Endpoint, auf den sich das Feedback bezieht, als METHOD /path mit dem kanonischen Pluralpfad.
1 - 200"POST /v1/scrapes"
Die ID des Objekts, das die API zurückgegeben hat und auf das sich das Feedback bezieht: eine scrape_…, batch_… oder ähnliche Ressourcen-ID, oder die ID des Fehlerobjekts (error_…), wenn der Aufruf fehlgeschlagen ist.
1 - 128"scrape_abc1234567"
Die Seite, auf die sich das Feedback bezieht, wie die URL, die gescrapt wurde.
2048"https://example.com/pricing"
Antwort
Das gespeicherte Feedback.
feedback "feedback_019e70f9-214a-74fc-a1ae-26fd3318be3e"
"2026-10-23T00:00:00.000Z"
War diese Seite hilfreich?