Feedback zu Ihren Übersetzungen kommt selten per Klick im Dashboard. Es steckt in einer Zeile in Ihrem Support-Tool, einer Notiz von einem Prüfer oder einem Eintrag in Ihrer QA-Warteschlange – „Produktnamen nicht übersetzen“, „im Deutschen die formelle Anrede verwenden“. Die Engine Suggestions API macht aus diesem Freitext per Code konkrete Änderungen an der Engine: Sie senden das Feedback als Text, die Plattform wertet es aus, und Sie erhalten konkrete, strukturierte Änderungen für das Glossar, die Anweisungen oder die Markenstimme Ihrer Engine zur Übernahme zurück.
Das ist das programmatische Gegenstück zur Dashboard-Funktion. Dort werden Vorschläge automatisch generiert, wenn Ihre KI-Bewerter eine Übersetzung niedrig bewerten; hier liefern Sie das Signal in Form von Text. In beiden Fällen ist das Ergebnis dasselbe – ausstehende Vorschläge, die Sie prüfen und übernehmen.
Der Ablauf besteht aus zwei Teilen. Die Generierung ist asynchron – Sie übergeben Feedback, und die Plattform verarbeitet es im Hintergrund und legt ausstehende Vorschläge auf der Engine ab. Die Prüfung ist synchron – Sie listen die ausstehenden Vorschläge auf, lesen, was jeweils vorgeschlagen wird, und übernehmen oder verwerfen sie einzeln. Diese Seite behandelt beides. Für die Dashboard-Erfahrung – automatische Generierung aus niedrigen Prüfungswerten, den Tab „Suggestions“, Benachrichtigungen – siehe Engine Suggestions.
Ein Konfigurationsendpunkt, kein Übersetzungsendpunkt
Diese Endpunkte lesen und ändern die Konfiguration einer Engine – also Glossar, Anweisungen und Markenstimme. Sie sind über ihre :id auf genau eine Engine begrenzt und authentifizieren sich mit demselben organisationsbezogenen X-API-Key wie der Rest der API. Sie übersetzen niemals Inhalte und ändern keine früheren Übersetzungen; ein übernommener Vorschlag wirkt sich erst auf die nächste Übersetzung der Engine aus.
Authentifizierung
Übergeben Sie Ihren API-Schlüssel im Header X-API-Key. Schlüssel gelten organisationsweit und geben Zugriff auf jede Engine in der Organisation. Details finden Sie unter Authentifizierung; das Fehlermodell, das alle Endpunkte hier gemeinsam nutzen, ist unter Fehler und Statuscodes beschrieben.
Aus Feedback generieren#
POST /engines/:id/suggestions/from-textSenden Sie eine Klartextbeschreibung dessen, was die Engine falsch macht. Die Plattform wertet diesen Text zusammen mit der aktuellen Konfiguration der Engine aus und schlägt atomare Änderungen vor – etwas, das in der Engine bereits vorhanden ist, wird nicht erneut vorgeschlagen. Die Generierung läuft asynchron, daher kommt die Antwort sofort zurück, sobald die Aufgabe angenommen wurde, nicht erst dann, wenn die Vorschläge fertig sind.
| Parameter | Typ | Beschreibung |
|---|---|---|
id (Pfad) | string | Die Engine, für die Vorschläge generiert werden sollen. |
text | string | Freitext-Feedback zur Ausgabe der Engine. 1–10.000 Zeichen; muss mindestens ein Zeichen enthalten, das kein Leerraum ist. |
const response = await fetch(
`https://api.lingo.dev/engines/${engineId}/suggestions/from-text`,
{
method: "POST",
headers: {
"X-API-Key": process.env.LINGO_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
text: "Our German (de-DE) translations keep using the informal 'du'. For our B2B audience they must always use the formal 'Sie'.",
}),
},
);
const { enqueued } = await response.json();
console.log(enqueued); // true – generation accepted, running in the background{ "enqueued": true }enqueued: true bedeutet, dass die Plattform die Aufgabe angenommen hat – nicht, dass bereits Vorschläge vorliegen. Die Generierung ist ein einzelner Hintergrundschritt: Sie liest Ihren Text, wertet die Konfiguration aus, gleicht gegen bereits Vorhandenes ab und speichert alles, was sie vorschlägt. Es kann völlig legitim sein, dass ein Durchlauf nichts vorschlägt (etwa weil das Feedback zu vage war oder die Engine das bereits abdeckt). Rufen Sie die Ergebnisse ab, indem Sie kurz darauf die Vorschläge der Engine auflisten.
Leeres Feedback wird abgelehnt
text muss eine echte Nachricht enthalten. Eine leere Zeichenfolge oder nur Leerraum wird mit 400 abgelehnt – sie wird nicht stillschweigend in eine andere Art von Anfrage umgewandelt. Senden Sie etwas, das das Modell tatsächlich auswerten kann.
Stattdessen aus Prüfungswerten generieren
Derselbe Low-Score-Trigger, der das Dashboard antreibt, ist auch per Code verfügbar: POST /engines/:id/suggestions/generate (leerer Body) weist die Plattform an, stattdessen aus den jüngsten niedrig bewerteten KI-Bewertungen der Engine Änderungen vorzuschlagen. Dieselbe Antwort { "enqueued": true }, dieselben ausstehenden Vorschläge. Verwenden Sie from-text, wenn Sie konkretes schriftliches Feedback haben; verwenden Sie generate, um Vorschläge aus dem zu ziehen, was Ihre Prüfer bereits markiert haben.
Ausstehende Vorschläge auflisten#
GET /engines/:id/suggestionsGibt die Vorschläge der Engine zurück – also das Ergebnis jedes Generierungslaufs, egal ob er durch Text, die manuelle Schaltfläche oder automatisch durch niedrige Prüfungswerte ausgelöst wurde. Jeder Eintrag ist eine vorgeschlagene Änderung inklusive Begründung.
[
{
"id": "egs_A1b2C3d4E5f6G7h8",
"ownerOrganizationId": "org_X1y2Z3a4B5c6D7e8",
"ownerEngineId": "eng_X1y2Z3a4B5c6D7e8",
"actionType": "add_instruction",
"targetKind": "instruction",
"targetId": null,
"targetLocale": "de-DE",
"payload": { "instruction": "Use the formal 'Sie' form in all German translations; never use the informal 'du'." },
"reasoning": "Feedback states the B2B audience requires formal address, but the engine has no instruction enforcing it.",
"sourceReviewLogIds": [],
"status": "pending",
"appliedTargetId": null,
"createdAt": "2026-06-18T10:30:00.000Z"
}
]| Feld | Beschreibung |
|---|---|
id | Vorschlags-ID mit dem Präfix egs_. Übergeben Sie sie an apply oder dismiss. |
actionType | Eines von add_glossary_item, update_glossary_item, add_instruction, update_instruction, add_brand_voice, update_brand_voice. |
targetKind | Der Teil der Engine, den die Änderung betrifft: glossary_item, instruction oder brand_voice. |
targetId | Bei einer Aktion vom Typ update_* die ID des Eintrags, der geändert werden soll (gli_ / ins_ / bvc_). null bei einer Aktion vom Typ add_*. |
targetLocale | Die Sprache, für die der Vorschlag gilt. |
payload | Die direkt anwendbare Änderung. Welche Felder sie enthält, hängt von targetKind ab – sie entspricht exakt dem, was der Erstellungs-/Aktualisierungsvorgang benötigt. Deshalb erfordert das Übernehmen keine weiteren Eingaben von Ihnen. |
reasoning | Eine kurze Erklärung, warum diese Änderung vorgeschlagen wird. |
sourceReviewLogIds | Die Prüfungsprotokolle, deren Fehlschläge den Vorschlag ausgelöst haben (esrl_-IDs); leer, wenn der Vorschlag aus Feedback-Text stammt. |
status | pending, applied oder dismissed. |
appliedTargetId | Der Eintrag, der erstellt oder aktualisiert wird, sobald der Vorschlag übernommen wurde; null, solange er aussteht. |
Das payload ist das entscheidende Detail, das das Übernehmen so leichtgewichtig macht: Die vorgeschlagene Änderung ist bereits bei der Generierung vollständig strukturiert, daher ist das Übernehmen ein einfacher Schreibvorgang und keine weitere KI-Runde. Sie entscheiden; die Plattform bewertet nicht noch einmal neu.
Einen Vorschlag übernehmen#
POST /engine-suggestions/:id/applySchreibt die vorgeschlagene Änderung in die Engine und markiert den Vorschlag als applied. Das ist ein deterministischer Schreibvorgang des payload, das Sie bereits in der Liste gesehen haben – es gibt keinen zweiten KI-Aufruf. Was Sie geprüft haben, ist also genau das, was geschrieben wird. Ein Vorschlag vom Typ add_* erstellt einen neuen Glossareintrag, eine neue Anweisung oder eine neue Markenstimme; ein Vorschlag vom Typ update_* ändert den bestehenden Eintrag, der durch targetId referenziert ist.
const response = await fetch(
`https://api.lingo.dev/engine-suggestions/${suggestionId}/apply`,
{
method: "POST",
headers: { "X-API-Key": process.env.LINGO_API_KEY },
},
);
const applied = await response.json();
console.log(applied.status); // "applied"
console.log(applied.appliedTargetId); // "ins_…" – the instruction it just createdDie Antwort zeigt den Vorschlag im Status applied, wobei appliedTargetId jetzt auf den tatsächlichen Engine-Eintrag verweist, der erstellt oder aktualisiert wurde. Dieser Eintrag ist ab dann ein ganz normaler Glossareintrag, eine normale Anweisung oder eine normale Markenstimme – Sie können ihn wie jeden anderen öffnen, bearbeiten oder löschen.
Übernehmen ändert die Konfiguration, nicht vergangene Übersetzungen
Beim Übernehmen wird die Konfiguration der Engine geändert. Bereits übersetzte Inhalte behalten ihre aktuelle Ausgabe; die Änderung greift erst bei der nächsten Übersetzung durch die Engine. Apply lokalisiert nichts von selbst neu.
Einen Vorschlag verwerfen#
POST /engine-suggestions/:id/dismissVerwirft einen Vorschlag, den Sie nicht übernehmen möchten, markiert ihn als dismissed und lässt die Engine unverändert. Verwenden Sie dies, wenn ein Vorschlag für Ihr Produkt nicht passt – die Engine wird nicht geändert, und der Vorschlag erscheint nicht länger als ausstehend.
await fetch(
`https://api.lingo.dev/engine-suggestions/${suggestionId}/dismiss`,
{
method: "POST",
headers: { "X-API-Key": process.env.LINGO_API_KEY },
},
);
// The suggestion is now "dismissed"; nothing was written to the engine.Der Ablauf, von Anfang bis Ende#
Die vier Endpunkte bilden einen geschlossenen Zyklus, den Sie vollständig aus Ihrem Code steuern können: Feedback einspeisen, nachlesen, was vorgeschlagen wurde, und die Änderungen übernehmen, denen Sie zustimmen.
Generieren
POST …/suggestions/from-text mit Ihrem schriftlichen Feedback (oder …/suggestions/generate, um stattdessen Vorschläge aus niedrigen Prüfungswerten abzuleiten). Sie erhalten { "enqueued": true } sofort.
Auflisten
Rufen Sie kurz darauf GET /engines/:id/suggestions auf, um die ausstehenden Vorschläge zu lesen – jeweils mit ihrem payload und reasoning.
Übernehmen oder verwerfen
POST /engine-suggestions/:id/apply, um die Änderung zu übernehmen, oder …/dismiss, um sie zu verwerfen. Das Übernehmen wirkt sich auf die nächste Übersetzung der Engine aus.
