Prompts und Ausführungen

Erstellen Sie gespeicherte Prompts mit ihren Variablen, füllen Sie sie aus, führen Sie sie mit einem oder mehreren Modellen aus, streamen Sie das Ergebnis und teilen Sie Prompts - alles über die REST-API.

19 Min. Lesezeit · Aktualisiert am 28. September 2026

Ein gespeicherter Prompt ist eine wiederverwendbare Vorlage aus Ihrer Prompt-Bibliothek. Sein Text enthält {{variables}}, die Sie bei jeder Ausführung neu befüllen. Mit der REST-API erstellen Sie Prompts per Code, führen sie mit frischen Werten auf dem Modell Ihrer Wahl aus und lesen die Ergebnisse zurück. Jeder Request läuft im Namen des Benutzers, dem der API-Schlüssel gehört.

Alle Pfade sind relativ zu https://api.stickyprompts.com/api/v1. Request-Bodys sind JSON.

Grundbegriffe

Ein Prompt ist eine benannte Vorlage. Sein Text steckt in einer Prompt-Version: Pro Prompt gibt es genau eine Version, und neuer Inhalt überschreibt sie. Eine Version hat Variablen, die im Text als {{slug}} referenziert werden, zum Beispiel Write a {{tone}} summary of: {{text}}.

Um einen Prompt auszuführen, füllen Sie seine Variablen aus. Dabei entsteht eine Instanz: eine unveränderliche Kopie der Vorlage, in die die Werte eingesetzt sind. Mit dieser Instanz starten Sie dann eine Ausführung auf einem oder mehreren Modellen. Jede Ausführung legt eine Unterhaltung an (in der API conversation_context genannt), in der Sie über die Endpunkte unter Unterhaltungen und Nachrichten weiterchatten können.

prompt -> prompt_version (content with {{slug}} placeholders) -> variables
                    |
                    +-> instance (variable values, parsed content) -> run -> conversation

Die Abkürzungs-Endpunkte unter /run/prompt/... legen die Instanz an und führen sie in einem einzigen Aufruf aus. POST /run schickt reinen Text an ein Modell, ganz ohne Prompt.

Konventionen

  • Paginierung. Wo angegeben, senden Sie page (Standard 1) und size (Standard 10). Die Response-Header X-Page, X-Page-Size und X-Total-Count beschreiben das Ergebnis. Siehe Fehler, Paginierung und Kontingente.
  • Projektbezug. Mehrere Endpunkte lesen einen optionalen Header X-Project-ID: <numeric id>. Ein nicht numerischer Wert gilt als nicht gesetzt.
  • Schreibweise der Felder. Datenbankobjekte verwenden großgeschriebene ID, CreatedAt, UpdatedAt und DeletedAt neben Feldern in snake_case. Das RunHistory-Ergebnis verwendet kleingeschriebene id und created_at.
  • Gerenderter Text. Die Felder result und thinking einer Ausführung enthalten HTML, das aus dem Markdown des Modells gerendert wurde, nicht das rohe Markdown.
  • Fehler haben die Form {"error": "..."}. Kontingentfehler lauten 429 {"error":"Quota exceeded","reason":"..."}. Sperren durch Guardrails enthalten zusätzlich einen maschinenlesbaren Code, zum Beispiel {"error": "...", "code": "SENSITIVE_DATA_BLOCKED"}. Fehler wegen der Datenresidenz verwenden die Codes EU_INFERENCE_REQUIRED, ZERO_RETENTION_REQUIRED, NO_PROVIDER_ASSIGNED und NO_ENDPOINT_AVAILABLE.

Das Prompt-Objekt

{
  "ID": 42,
  "CreatedAt": "2026-09-20T10:15:00Z",
  "UpdatedAt": "2026-09-20T10:15:00Z",
  "DeletedAt": null,
  "name": "Renewal check-in email",
  "slug": "k3j9x2qa",
  "user_id": 7,
  "project_id": null,
  "shared_with_workspace_id": null,
  "current_version_id": 88,
  "current_version": null,
  "ai_model_id": 12,
  "description": "Friendly renewal reminder for a Northwind customer",
  "is_favorite": false,
  "category_id": 3,
  "category": null,
  "example_output": "",
  "duplicated_from_id": null,
  "file_data": [],
  "tools": [{ "name": "web_search", "use": true }],
  "mcp_servers": [],
  "ai_style": "prompty"
}
  • current_version hat im geladenen Zustand die Form {ID, ..., prompt_id, content, variables[], current_instance_id, current_instance}; die meisten Listen-Endpunkte lassen es auf null.
  • category hat im geladenen Zustand die Form {ID, CreatedAt, UpdatedAt, DeletedAt, name}.
  • file_data ist im geladenen Zustand ein Array aus File-Objekten, sonst null. Ein File hat die Form {ID, CreatedAt, UpdatedAt, DeletedAt, name, path, preview_path, public_path, user_id, workspace_id, project_id, fileType, partial}; beachten Sie das camelCase-Feld fileType.
  • tools ist [{"name", "use"}] oder null. Tool-Namen: web_search, image_generation, video_generation, speech_generation, music_generation, remote_mcp.
  • mcp_servers ist ein Array aus IDs von Remote-MCP-Servern.

Prompts

GET /prompt

GET /api/v1/prompt
Berechtigung prompts_get MCP-Tool list_prompts

Listet Ihre eigenen Prompts auf, die keinem Projekt angehören, die neuesten zuerst. Mit X-Project-ID werden stattdessen die Prompts dieses Projekts aufgelistet.

Query-Parameter
search string in query optional
Wird mit Name und Beschreibung abgeglichen.
page integer in query optional Standard 1
Seitennummer.
size integer in query optional Standard 10
Einträge pro Seite.
X-Project-ID integer in header optional
Listet die Prompts dieses Projekts auf.

Antwort. 200 mit einem Array aus Prompt-Objekten (current_version, category und file_data nicht geladen). Mit X-Project-ID hat jedes Element zusätzlich "can_delete": bool. Der Wert ist nur dann true, wenn Sie die Prompts des Projekts verwalten dürfen und Ihnen der Prompt gehört.

Fehler. 404 {"error":"Project not found"}, 403 {"error":"You don't have access to this project"}.

GET /prompt/all

GET /api/v1/prompt/all
Berechtigung prompts_get

Gibt Ihre eigenen Prompts, mit Ihnen geteilte Prompts und Ihre favorisierten Prompts in einer einzigen Liste zurück, sortiert danach, wann Sie den jeweiligen Prompt zuletzt ausgeführt haben (ersatzweise nach dem Erstellungszeitpunkt). Prompts in Projekten sind ausgeschlossen.

Query-Parameter
search string in query optional
Wird mit Name und Beschreibung abgeglichen.
page integer in query optional Standard 1
Seitennummer.
size integer in query optional Standard 10
Einträge pro Seite.
showWorkspaceShared string in query optional
"true" bezieht auch Prompts ein, die mit Ihrem Workspace geteilt sind.

Antwort. 200 mit einem Array aus Prompt-Objekten mit geladenem file_data, oder [].

GET /prompt/last_used

GET /api/v1/prompt/last_used
Berechtigung prompts_get

Gibt bis zu 8 Prompts zurück, die Sie ausgeführt haben, die zuletzt ausgeführten zuerst, mit geladenem file_data. Prompts, die Sie nie ausgeführt haben, fehlen. Paginierungs-Header werden gesetzt, page und size aber ignoriert.

GET /prompt/most_used

GET /api/v1/prompt/most_used
Berechtigung prompts_get

Gibt bis zu 8 Prompts zurück, sortiert danach, wie oft Sie sie ausgeführt haben. Keine Paginierungs-Header.

GET /prompt/recently_added

GET /api/v1/prompt/recently_added
Berechtigung prompts_get

Gibt bis zu 8 Ihrer eigenen Prompts zurück, die neuesten zuerst, mit geladenem file_data.

POST /prompt

POST /api/v1/prompt
Berechtigung prompts_manage

Legt einen Prompt an. Er beginnt ohne Version: Rufen Sie als Nächstes POST /prompt_version auf, um ihm Inhalt zu geben. Das Modell stammt aus Ihren Voreinstellungen (sonst das erste Modell im Katalog), ai_style ebenfalls aus Ihren Voreinstellungen (sonst prompty). Um eines davon zu ändern, rufen Sie anschließend PUT /prompt/:id auf.

Body
name string optional
Wird beim Anlegen nicht validiert, senden Sie ihn aber trotzdem mit.
description string optional
Wird auf der Prompt-Karte angezeigt.
example_output string optional
Beispielausgabe.
category_id uint optional
ID der Prompt-Kategorie oder null.
tools array optional
Standard-Tools, [{"name", "use"}].
mcp_servers uint[] optional
IDs von Remote-MCP-Servern.
X-Project-ID integer in header optional
Legt den Prompt in diesem Projekt an. Sie benötigen die Berechtigung, die Prompts des Projekts zu verwalten.

ai_model_id, ai_style und slug werden beim Anlegen ignoriert; der Server erzeugt einen zufälligen Slug.

curl -X POST https://api.stickyprompts.com/api/v1/prompt \
  -H "Authorization: Bearer $STICKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Renewal check-in email", "description": "Friendly renewal reminder" }'

Antwort. 201 mit dem Prompt-Objekt.

Fehler. 400 bei fehlerhaftem JSON, 404 {"error":"Project not found"}, 403 {"error":"You don't have access to manage prompts of this project"}, 409 {"error":"Entity already exists"}.

PUT /prompt/:id

PUT /api/v1/prompt/:id
Berechtigung prompts_manage

Ersetzt die bearbeitbaren Felder eines Prompts. Nur bei Ihren eigenen Prompts möglich.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.
Body
name string erforderlich
Darf nicht leer sein.
description string optional
Wird überschrieben.
ai_model_id uint optional
Wird überschrieben. Fehlt der Wert oder ist er 0, wird 0 gespeichert.
example_output string optional
Wird überschrieben.
category_id uint optional
Wird überschrieben.
ai_style string optional
Wird überschrieben.
tools array optional
Wird nur geändert, wenn vorhanden.
mcp_servers uint[] optional
Wird nur geändert, wenn vorhanden.

Alle Felder name, description, ai_model_id, example_output, category_id und ai_style werden überschrieben. Senden Sie daher immer die aktuellen Werte der Felder mit, die Sie nicht ändern möchten.

Antwort. 200 mit dem Prompt-Objekt. Fehler. 404 {"error":"Prompt not found"}, 400 {"error":"Name is required"}.

POST /prompt_version

POST /api/v1/prompt_version
Berechtigung prompts_manage

Legt den Vorlageninhalt eines Prompts fest. Der erste Aufruf erstellt die Version und macht sie zur aktuellen; spätere Aufrufe überschreiben content in derselben Version. Variablen legen Sie mit POST /variable an, nicht über diesen Body.

Body
prompt_id uint erforderlich
Einer Ihrer eigenen Prompts.
content string erforderlich
Der Vorlagentext. Variablen referenzieren Sie als {{slug}}.

Antwort. 201 beim Anlegen wie beim Aktualisieren:

{
  "ID": 88, "CreatedAt": "...", "UpdatedAt": "...", "DeletedAt": null,
  "prompt_id": 42,
  "content": "Write a renewal check-in email to {{customer_name}} about their {{plan}} plan.",
  "variables": null,
  "current_instance_id": null,
  "current_instance": null
}

variables wird beim Aktualisieren nicht geladen. Fehler. 400 bei fehlerhaftem JSON, 404 {"error":"Prompt not found"}.

DELETE /prompt/:id

DELETE /api/v1/prompt/:id
Berechtigung prompts_delete

Löscht einen Ihrer eigenen Prompts per Soft Delete und entfernt seine Freigaben sowie die Favoriten-Markierungen aller Benutzer.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.

Antwort. 204. 404 mit leerem Body, wenn der Prompt nicht existiert oder Ihnen nicht gehört.

POST /prompt/:id/duplicate

POST /api/v1/prompt/:id/duplicate
Berechtigung prompts_manage

Kopiert einen Prompt, der Ihnen gehört oder auf den Sie Zugriff haben (der öffentliche Katalog, mit Ihnen geteilte Prompts, mit Ihrem Workspace geteilte Prompts). Die Kopie umfasst Name, Beschreibung, Modell, Beispielausgabe, Tools, Stil, Kategorie, Versionsinhalt und Variablen (name, slug, description, data_type, default_value, required, sort, is_primary, is_multi_select, options). Nicht kopiert werden mcp_servers, angehängte Dateien sowie file_types und default_file_id der einzelnen Variablen.

Pfadparameter
id string in path erforderlich
Numerische Prompt-ID oder Slug.
Header
X-Project-ID integer in header optional
Legt die Kopie in diesem Projekt an und behält den ursprünglichen Namen bei. Ohne diesen Header wird " (copy)" an den Namen angehängt.

Antwort. 200 mit dem neuen Prompt-Objekt, current_version.variables ist befüllt.

Fehler. 404 {"error":"Prompt not found"}, 403 {"error":"You don't have access to this prompt"}, 404 {"error":"Project not found"}, 403 {"error":"You don't have access to manage prompts of this project"}.

PUT /prompt/:id/move-to-project

PUT /api/v1/prompt/:id/move-to-project
Berechtigung prompts_manage

Verschiebt einen Prompt in ein Projekt, zwischen Projekten oder aus einem Projekt heraus. Kein Body. Sie benötigen für jedes beteiligte Projekt die Berechtigung, Prompts zu verwalten, und ein Prompt, den Sie in ein Projekt verschieben, muss Ihnen gehören.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.
Header
X-Project-ID integer in header optional
Das Zielprojekt. Lassen Sie den Header weg, um den Prompt aus seinem Projekt zu entfernen.

Antwort. 200 mit dem Prompt-Objekt, project geladen.

Fehler. 404 {"error":"Prompt not found"} oder {"error":"Prompt not found or you don't have access to it"}, 400 {"error":"Prompt is already not in a project"}, 400 {"error":"Prompt is already in this project"}, 404 {"error":"Project not found"}, 403 ohne Projektberechtigungen.

PUT /prompt/:id/share_with_workspace

PUT /api/v1/prompt/:id/share_with_workspace
Berechtigung prompts_manage

Macht einen Ihrer eigenen Prompts für Ihren gesamten Workspace sichtbar oder wieder privat.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.
Body
shared bool erforderlich
true, um ihn mit dem Workspace zu teilen, false, um ihn privat zu machen.

Antwort. 200 mit dem Prompt-Objekt; shared_with_workspace_id ist Ihre Workspace-ID oder null. Fehler. 404 {"error":"Prompt not found"}, 400 {"error":"User is not part of a workspace"}.

Favoriten

GET /prompt/favorite

GET /api/v1/prompt/favorite
Berechtigung prompts_get

Gibt Ihre favorisierten Prompts in der Reihenfolge zurück, in der Sie sie favorisiert haben (älteste zuerst). Jedes Element hat "is_favorite": true; Version, Kategorie und Dateien werden nicht geladen. Keine Paginierung.

POST /prompt/:id/favorite

POST /api/v1/prompt/:id/favorite
Berechtigung prompts_manage

Markiert einen Prompt als Favoriten. Er muss Ihnen gehören, direkt mit Ihnen geteilt sein oder ein öffentlicher Katalog-Prompt sein. Ein Prompt, der nur mit Ihrem Workspace geteilt ist, ergibt 403.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.

Antwort. 201. Der Schlüssel des verschachtelten Prompts heißt tatsächlich großgeschrieben Prompt:

{ "ID": 311, "CreatedAt": "2026-09-28T09:00:00Z", "UpdatedAt": "2026-09-28T09:00:00Z", "DeletedAt": null,
  "user_id": 7, "prompt_id": 42, "Prompt": null }

Fehler. 404 {"error":"Prompt not found"}, 403 {"error":"You don't have access to this prompt"}, 409 {"error":"This prompt is already marked as favorite"}.

DELETE /prompt/:id/favorite

DELETE /api/v1/prompt/:id/favorite
Berechtigung prompts_manage

Entfernt einen Favoriten.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.

Antwort. 204. Fehler. 404 {"error":"Prompt not found in favorites"}.

Variablen

Variablen gehören zu einer Prompt-Version. Der slug muss einem Platzhalter {{slug}} im Inhalt entsprechen und innerhalb der Version eindeutig sein. Wie sich Variablen in der App verhalten, lesen Sie unter Prompt-Variablen.

{
  "ID": 301, "CreatedAt": "...", "UpdatedAt": "...", "DeletedAt": null,
  "prompt_version_id": 88,
  "name": "Customer name",
  "slug": "customer_name",
  "description": "Who the email is addressed to",
  "data_type": "short_text",
  "default_value": "",
  "required": true,
  "sort": 0,
  "is_primary": true,
  "is_multi_select": false,
  "options": null,
  "file_types": "",
  "default_file_id": null,
  "default_file": null
}
  • data_type ist short_text, long_text, select, number, json oder lov.
  • options (für Auswahlvariablen) hat die Form [{"label": "...", "value": "..."}].
  • is_primary markiert die Variable, die die Abkürzungen /run/prompt/last und /run/prompt/:id befüllen.

POST /variable

POST /api/v1/variable

Fügt einer Prompt-Version eine Variable hinzu. Der Prompt muss Ihnen gehören. Der Body ist das Variable-Objekt ohne ID und Zeitstempel; der Server validiert nur die folgenden drei Pflichtfelder.

Body
prompt_version_id uint erforderlich
Die Version, zu der die Variable hinzukommt.
name string erforderlich
Anzeigename.
slug string erforderlich
Entspricht {{slug}} im Inhalt.
description string optional
Hilfetext.
data_type string optional
short_text, long_text, select, number, json oder lov.
default_value string optional
Wird verwendet, wenn kein Wert gesendet wird.
required bool optional
Wird von POST /instance erzwungen.
sort integer optional
Anzeigereihenfolge.
is_primary bool optional
Die Variable, die die Abkürzungs-Endpunkte befüllen.
is_multi_select bool optional
Erlaubt mehrere Optionen.
options array optional
[{"label", "value"}].
file_types string optional
Zulässige Dateitypen.
default_file_id uint optional
Standarddatei.

Antwort. 201 mit dem Variable-Objekt.

Fehler. 400 bei fehlerhaftem JSON, 404 {"error":"Prompt version not found"}, 403 {"error":"You are not allowed to add variables to this prompt"}, 409 {"error":"Entity already exists"} (doppelter Slug).

PUT /variable/:id

PUT /api/v1/variable/:id

Ersetzt die Felder einer Variablen. Die Aktualisierung überschreibt jedes Feld, senden Sie also alle mit: name, slug, description, data_type, default_value, required, sort, is_primary, is_multi_select, options, file_types und default_file_id.

Pfadparameter
id integer in path erforderlich
Variablen-ID.

Der Verlauf bleibt erhalten: Ändern Sie name oder slug einer Variablen, für die bereits Werte aus früheren Ausführungen gespeichert sind, archiviert der Server zuerst die alte Variable (eine per Soft Delete gelöschte Kopie, deren Slug das Suffix _deleted_<timestamp> erhält), verschiebt diese Werte dorthin und aktualisiert dann die Variable an Ort und Stelle. In diesem Fall werden file_types und default_file_id nicht aktualisiert.

Antwort. 200 mit dem Variable-Objekt. Fehler. 404 {"error":"Variable not found"}, 403 {"error":"You are not allowed to update variables of this prompt"}.

DELETE /variable/:id

DELETE /api/v1/variable/:id

Löscht eine Variable.

Pfadparameter
id integer in path erforderlich
Variablen-ID.

Antwort. 204. Fehler. 404 {"error":"Variable not found"}, 403 {"error":"You are not allowed to delete variables of this prompt"}.

Instanzen

Eine Instanz ist die Vorlage mit eingesetzten Werten. Jedes {{slug}} wird durch den gesendeten Wert ersetzt oder, wenn der Wert leer ist oder fehlt, durch den default_value der Variablen. Platzhalter, zu denen keine Variable passt, bleiben unverändert. Hat Ihr Workspace Guardrails, werden sie auf die Werte und den geparsten Inhalt angewendet, bevor etwas gespeichert wird. Werte können daher geschwärzt zurückkommen.

{
  "ID": 5120, "CreatedAt": "...", "UpdatedAt": "...", "DeletedAt": null,
  "prompt_version_id": 88,
  "content": "Write a renewal check-in email to Northwind Traders about their Business plan.",
  "variable_values": [
    { "ID": 9001, "variable_id": 301, "prompt_version_instance_id": 5120, "value": "Northwind Traders", "file_id": null, "file": null }
  ]
}

POST /instance

POST /api/v1/instance
Berechtigung prompts_manage

Füllt die Variablen einer Version aus und speichert das Ergebnis als neue Instanz, die zugleich zur aktuellen Instanz der Version wird.

Body
prompt_version_id uint erforderlich
Die auszufüllende Version.
variable_values array optional
Elemente {"variable_id": uint, "value": string, "file_id": uint | null}. Erforderlich, wenn die Version Pflichtvariablen hat.
curl -X POST https://api.stickyprompts.com/api/v1/instance \
  -H "Authorization: Bearer $STICKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt_version_id":88,"variable_values":[{"variable_id":301,"value":"Northwind Traders"},{"variable_id":302,"value":"Business"}]}'

Antwort. 201 mit dem Instanzobjekt.

Fehler. 404 {"error":"Prompt version not found"}, 400 {"error":"Invalid instance request"}, wenn eine Pflichtvariable leer bleibt, 400 {"error":"...","code":"SENSITIVE_DATA_BLOCKED"}, wenn eine Guardrail die Eingabe blockiert.

GET /instance/:id

GET /api/v1/instance/:id
Berechtigung prompts_get

Gibt eine Instanz mit ihren variable_values zurück. 404 mit leerem Body, wenn sie nicht existiert.

Pfadparameter
id integer in path erforderlich
Instanz-ID.

Prompts ausführen

So wird das Modell gewählt

EndpunktVerwendetes Modell
POST /instance/:id/run und /run/streamJede ID in ai_model_ids. Es gibt keinen Standard und keinen Wert "auto": Ohne IDs wird nichts ausgeführt. Mit agent_id oder beim Fortsetzen einer Unterhaltung, zu der ein Agent gehört, ersetzt das Modell des Agenten ai_model_ids.
POST /run/prompt/last und POST /run/prompt/:idDas Modell der wiederholten Ausführung. Hat /run/prompt/:id noch keine frühere Ausführung, das eigene ai_model_id des Prompts.
POST /run/prompt/:id/variablesDas ai_model_id des Prompts.
POST /runai_model_id oder das Modell, dessen version (die Modellkennung des Anbieters) mit ai_model_name übereinstimmt.

Keiner dieser Endpunkte nutzt die automatische Modellwahl; sie gehört zu den Endpunkten für Unterhaltungen. Jeder Ausführungs-Endpunkt prüft das gewählte Modell gegen die Regeln Ihres Workspace für Modellzugriff (400 {"error":"The selected AI model has been restricted by your organization"}, bei den Abkürzungen leicht anders formuliert) und für Datenresidenz (400 mit einem code zur Datenresidenz).

Das RunHistory-Objekt

{
  "id": 7781,
  "created_at": "2026-09-28T09:12:03Z",
  "result": "<p>Hi Northwind team, your Business plan renews on ...</p>\n",
  "raw_text": null,
  "thinking": "",
  "runtime": 4210,
  "ai_model_id": 12,
  "input_prompt": "Write a renewal check-in email to {{customer_name}} about their {{plan}} plan.",
  "variables": [],
  "conversation_context_id": 16044,
  "conversation_context_slug": "q8w2m1zc",
  "conversation_context_name": "",
  "is_interactive": true,
  "input_file_data": [],
  "output_file_data": [],
  "error_text": null,
  "error_id": null,
  "run_status": "success"
}
FeldBedeutung
resultDie Antwort des Modells, aus Markdown in HTML gerendert. <think>-Blöcke werden entfernt.
raw_textHier immer null. Das rohe Markdown erhalten Sie aus der Unterhaltung (GET /conversation/:id) oder aus raw_text im Stream.
thinkingAls HTML gerenderter Denktext oder "".
runtimeMillisekunden vom Start bis zum Ende. 0, solange die Ausführung nicht fertig ist, zum Beispiel in der Streaming-Antwort.
input_promptDie ungeparste Vorlage. Der Text mit eingesetzten Werten ist der content der Instanz.
variablesElemente {id, variable_id, name, slug, value}. Bei den Ausführungs-Endpunkten leer; befüllt von GET /prompt/:id/run_history.
conversation_context_id, _slug, _nameDie Unterhaltung, die diese Ausführung angelegt oder fortgesetzt hat.
is_interactiveOb sich die Unterhaltung fortsetzen lässt. false bei Ausführungen im Vergleichsmodus.
input_file_data, output_file_dataDateien als {id, name, path}: die an die Benutzernachricht angehängten und die vom Modell erzeugten.
run_statuspending, dann generating, dann success oder error.
error_text, error_idGesetzt, wenn der Aufruf beim Anbieter fehlgeschlagen ist.

Nutzung und Credits sind in keiner Antwort einer Ausführung enthalten.

POST /instance/:id/run

POST /api/v1/instance/:id/run
Berechtigung run_prompt

Führt eine Instanz aus und wartet, bis das Modell fertig ist. Dabei entsteht eine neue Unterhaltung mit der Benutzernachricht (dem geparsten Instanzinhalt) und der KI-Antwort, es sei denn, Sie übergeben conversation_context_id. Läuft in dieser Unterhaltung ein aktiver Modellvergleich, wird die Instanz in jedem Thread einmal ausgeführt, und Sie erhalten alle Ergebnisse zurück.

Pfadparameter
id integer in path erforderlich
Instanz-ID aus POST /instance.
Query-Parameter
comparison_mode string in query optional Standard false
"true" markiert die Unterhaltung als nicht interaktiv; ein eingeschränktes Modell führt dann zu „One of the selected AI models has been restricted by your organization“.
X-Project-ID integer in header optional
Die Dateien des Projekts werden den Anhängen der Ausführung hinzugefügt, und die Unterhaltung wird dem Projekt zugeordnet.
Body
ai_model_ids uint[] erforderlich
Eine Ausführung pro Modell-ID. In der Praxis erforderlich: Ein leeres Array führt nichts aus und gibt 200 null zurück. Die Anzahl der IDs ist durch die Serverkonfiguration begrenzt (Standard 1); bei Überschreitung kommt 503 {"error":"cannot run this many models in parallel"}. Im Free-Tarif ist nur eine einzige ID möglich: 503 {"error":"free tier does not support comparison mode"}.
ai_style string optional
Antwortstil, zum Beispiel prompty. Wird nicht automatisch aus dem Prompt übernommen, übergeben Sie also das ai_style des Prompts.
attachments array optional
Elemente {"id": uint, "type": "file" | "transcription", "temp": bool}. Dateien mit einer Endung, die das Modell nicht unterstützt, werden stillschweigend übersprungen.
conversation_context_id uint optional
Setzt diese Unterhaltung fort, statt eine neue anzulegen.
is_prompt_studio bool optional
Kennzeichnet die Unterhaltung als Ausführung aus dem Prompt Studio (Quelle studio). Nur Studio-Ausführungen erscheinen in GET /prompt/:id/run_history.
flash_mode bool optional
Wird an die Modellausführung weitergereicht.
reasoning_effort string optional
Für Reasoning-Modelle, zum Beispiel low, medium oder high. Die erlaubten Werte hängen vom Modell ab; unbekannte Werte fallen auf den Standard des Modells zurück.
knowledge_base_ids uint[] optional
Wissensdatenbanken, aus denen Kontext abgerufen wird. Verwendet werden nur Datenbanken, auf die Sie zugreifen dürfen.
knowledge_base_limit_node_ids uint[] optional
Beschränkt den Abruf auf diese Knoten.
world_knowledge bool optional
Legt bei Wissensdatenbanken fest, ob das Modell auch allgemeines Wissen nutzen darf.
agent_id uint optional
Führt die Instanz als dieser Agent aus. Modell, Systemprompt, Dateien, Tools, MCP-Server und Wissensdatenbanken des Agenten haben Vorrang vor den Feldern im Request.
tools array optional
Elemente {"name", "use", "mcp_tool_id"}. mcp_tool_id wird nur für remote_mcp benötigt.
curl -X POST https://api.stickyprompts.com/api/v1/instance/5120/run \
  -H "Authorization: Bearer $STICKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ai_model_ids":[12],"ai_style":"prompty","tools":[{"name":"web_search","use":true}]}'
import os, requests

r = requests.post(
    "https://api.stickyprompts.com/api/v1/instance/5120/run",
    headers={"Authorization": f"Bearer {os.environ['STICKY_API_KEY']}"},
    json={"ai_model_ids": [12], "ai_style": "prompty",
          "tools": [{"name": "web_search", "use": True}]},
    timeout=300,
)
r.raise_for_status()
for run in r.json():
    if run["run_status"] == "error":
        print("Failed:", run["error_text"], run["error_id"])
    else:
        print(run["conversation_context_id"], run["result"])  # result is HTML
const res = await fetch("https://api.stickyprompts.com/api/v1/instance/5120/run", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.STICKY_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    ai_model_ids: [12],
    ai_style: "prompty",
    tools: [{ name: "web_search", use: true }],
  }),
});
const runs = await res.json(); // one RunHistory per model
for (const run of runs) console.log(run.run_status, run.error_id ?? run.result);

Antwort. 200 mit einem Array aus RunHistory-Objekten, eines pro Modell.

Fehler

StatusWann
400Ungültiges JSON; eingeschränktes Modell; Verstoß gegen die Datenresidenz (mit code); Wissensdatenbank nicht gefunden; ungültiges Projekt ({"error":"Invalid project ID"}); Sperre wegen sensibler Daten (code: SENSITIVE_DATA_BLOCKED); MCP-Fehler ({"error": "...", "error_code": "..."}).
404Instanz nicht gefunden (leerer Body), {"error":"ConversationContext not found"}, {"error":"Agent not found"}, {"error":"Project not found"}.
429Kontingent überschritten.
503Andere Fehler vor dem Modellaufruf, etwa das Modelllimit oder die Einschränkung im Free-Tarif.

POST /instance/:id/run/stream

POST /api/v1/instance/:id/run/stream
Berechtigung run_prompt

Akzeptiert denselben Pfad, dieselben Query-Parameter, Header und denselben Body wie /run und führt dieselbe Validierung aus, streamt aber nicht über diese HTTP-Antwort. Stattdessen läuft es so ab:

  1. Der Server legt die Ausführungen und die Unterhaltung an, startet die Generierung im Hintergrund und gibt sofort 200 zurück, mit einem Array aus RunHistory-Objekten im Zustand run_status: "pending", result: "", runtime: 0, jedes mit einer gültigen conversation_context_id.
  2. Die Tokens gehen an den WebSocket der Unterhaltung, GET /conversation/{conversation_context_id}/ws. Er erwartet denselben Header Authorization: Bearer und benötigt die Berechtigung conversations_get. Serverseitige Clients können diesen Header senden, Browser nicht.
  3. Jeder Frame ist eine JSON-Textnachricht {"type": ..., "data": ...}:
typedataHinweise
messageMessage-ObjektEin vollständiger Snapshot der bisherigen KI-Nachricht, kein Delta. text ist die HTML-Darstellung und raw_text das Markdown; dazu kommen parts, thinking, citations, status (thinking, generating, finished) und ai_model_id. Ersetzen Sie Ihre Kopie bei jedem Frame.
run_dataRunHistoryWird zusammen mit den Aktualisierungen der Nachricht gesendet. result enthält das bisherige HTML, run_status den aktuellen Status.
ai_message_endkeineDie Generierung wurde erfolgreich beendet.
error_messageMessage-ObjektDie Generierung ist fehlgeschlagen; siehe error_text, error_id und error_code. Abschließend.
ai_model_change{ai_model_id, ai_style, auto_model_type, reasoning_effort}Die Einstellungen der Unterhaltung wurden geändert. Nicht spezifisch für Prompt-Ausführungen.
  1. Lesen Sie nach ai_message_end den Endzustand mit GET /conversation/:id.

Events, die gesendet werden, bevor sich ein Client verbindet, werden gepuffert und der ersten Verbindung nachgeliefert. Sie können den Socket also direkt nach der Rückkehr des POST öffnen. Ihre eigene Benutzernachricht wird nicht zurückgespielt. Sobald der POST mit 200 zurückgekehrt ist, kommen Anbieterfehler nur noch als error_message-Frames; Fehler vor der Generierung (Modelllimit, Free-Tarif, Datenresidenz) kommen mit den Statuscodes ungleich 200, die für /run aufgeführt sind. Der veraltete SSE-Endpunkt GET /conversation/:id/stream leitet für diese Ausführungen keine Nachrichten-Snapshots weiter, verwenden Sie also den WebSocket. Alle Details zum WebSocket und Client-Beispiele finden Sie unter Unterhaltungen und Nachrichten.

POST /run/prompt/last

POST /api/v1/run/prompt/last
Berechtigung run_prompt

Wiederholt Ihre letzte Prompt-Ausführung mit neuen „Primärdaten“. Gedacht für schnelle Wiederholungen, zum Beispiel aus einer Browsererweiterung. Der Endpunkt nimmt die neueste Ausführung eines beliebigen Prompts, der Ihnen gehört oder mit Ihnen geteilt ist. Daraus baut er eine neue Instanz: Die primäre Variable (oder die einzige Variable) erhält data, jede andere Variable behält ihren Wert aus dieser Ausführung (oder ihren Standardwert). Ausgeführt wird sie mit demselben Modell, denselben Tools und dem ai_style des Prompts. Dabei entsteht eine neue interaktive Unterhaltung (Quelle extension).

Body
data string erforderlich
Neuer Text für die primäre Variable.

Antwort. 200 mit einem einzelnen RunHistory-Objekt, nicht mit einem Array.

Fehler. 404 {"error":"No runs found"}, 400 {"error":"Invalid instance request"}, wenn eine Pflichtvariable am Ende leer ist, 400 bei einem eingeschränkten Modell oder einer Sperre wegen Datenresidenz oder sensibler Daten, 429 bei überschrittenem Kontingent. Schlägt der Modellaufruf fehl, bevor eine Ausführung gespeichert ist, scheitert der Request mit 500.

POST /run/prompt/:id

POST /api/v1/run/prompt/:id
Berechtigung run_prompt

Wie /run/prompt/last, aber für einen bestimmten Prompt. Der Endpunkt wiederholt die letzte Ausführung des Prompts mit data in der primären Variablen. Wurde der Prompt noch nie ausgeführt und ist er Ihr eigener, wird eine erste Ausführung aus den Standardwerten der Variablen und dem ai_model_id des Prompts gebildet. Wiederholt wird die insgesamt letzte Ausführung des Prompts, nicht nur Ihre eigene. Bei einem geteilten Prompt können die nicht primären Werte daher aus der letzten Ausführung eines anderen Benutzers stammen.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.
Body
data string erforderlich
Neuer Text für die primäre Variable.
curl -X POST https://api.stickyprompts.com/api/v1/run/prompt/42 \
  -H "Authorization: Bearer $STICKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data":"Northwind Traders"}'

Antwort. 200 mit einem einzelnen RunHistory-Objekt. Fehler. 404 {"error":"Prompt not found"} sowie die Fehler von /run/prompt/last.

POST /run/prompt/:id/variables

POST /api/v1/run/prompt/:id/variables
Berechtigung run_prompt MCP-Tool run_prompt

Führt die aktuelle Version eines Prompts mit einem vollständigen Satz an Variablenwerten aus: Instanzerstellung und Ausführung in einem Aufruf. Verwendet ai_model_id und ai_style des Prompts. Die neue Instanz wird zur aktuellen Instanz der Version, und es entsteht eine neue interaktive Unterhaltung (Quelle extension).

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID. Der Prompt muss Ihnen gehören oder mit Ihnen geteilt sein.
Body
variable_values array optional
Elemente {"variable_id": uint, "value": string, "file_id": uint | null}. Fehlende oder leere Werte fallen auf den Standardwert zurück. required wird hier nicht erzwungen.
web_context string optional
Zusätzlicher Text, der dem geparsten Prompt vorangestellt wird, getrennt durch eine Leerzeile. Guardrails gelten auch dafür.
tools array optional
Gleiches Format wie bei POST /instance/:id/run.
curl -X POST https://api.stickyprompts.com/api/v1/run/prompt/42/variables \
  -H "Authorization: Bearer $STICKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"variable_values":[{"variable_id":301,"value":"Northwind Traders"},{"variable_id":302,"value":"Business"}]}'
import os, requests

r = requests.post(
    "https://api.stickyprompts.com/api/v1/run/prompt/42/variables",
    headers={"Authorization": f"Bearer {os.environ['STICKY_API_KEY']}"},
    json={"variable_values": [
        {"variable_id": 301, "value": "Northwind Traders"},
        {"variable_id": 302, "value": "Business"},
    ]},
    timeout=300,
)
run = r.json()
print(run["run_status"], run["result"])
const run = await fetch("https://api.stickyprompts.com/api/v1/run/prompt/42/variables", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.STICKY_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    variable_values: [
      { variable_id: 301, value: "Northwind Traders" },
      { variable_id: 302, value: "Business" },
    ],
  }),
}).then((r) => r.json());
console.log(run.run_status, run.result);

Antwort. 200 mit einem einzelnen RunHistory-Objekt.

Fehler. 404 {"error":"Prompt not found"}, 400 bei einem eingeschränkten Modell oder einer Sperre wegen Datenresidenz oder sensibler Daten, 429 bei überschrittenem Kontingent, 503 {"error":"..."}, wenn die Ausführung fehlschlägt.

Das MCP-Tool run_prompt erledigt dieselbe Aufgabe mit einer Zuordnung von Variablen-Slugs zu Werten; es gibt nur den Text zurück und legt keine interaktive Unterhaltung an.

POST /run

POST /api/v1/run
Berechtigung custom_run MCP-Tool custom_run

Schickt freien Text an ein Modell und gibt die Antwort zurück, ohne Prompt, ohne Variablen und ohne Unterhaltung. Der Aufruf ist synchron. Es werden weder Systemprompt noch Workspace-Prompt oder Projektanweisungen ergänzt, der Stil ist fest auf prompty eingestellt, und nichts wird als Unterhaltung gespeichert. Die Nutzung wird trotzdem erfasst.

Body
prompt string erforderlich
Der Text, der als einzige Benutzernachricht gesendet wird.
ai_model_id uint optional
Modell-ID. Senden Sie diesen Wert oder ai_model_name.
ai_model_name string optional
Wird mit dem Feld version des Modells abgeglichen, der Modellkennung auf Anbieterebene. Senden Sie diesen Wert oder ai_model_id.
curl -X POST https://api.stickyprompts.com/api/v1/run \
  -H "Authorization: Bearer $STICKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Suggest a subject line for a Northwind renewal email.","ai_model_id":12}'
import os, requests

r = requests.post(
    "https://api.stickyprompts.com/api/v1/run",
    headers={"Authorization": f"Bearer {os.environ['STICKY_API_KEY']}"},
    json={"prompt": "Suggest a subject line for a Northwind renewal email.", "ai_model_id": 12},
    timeout=300,
)
r.raise_for_status()
print(r.json()["text"])  # raw Markdown
const msg = await fetch("https://api.stickyprompts.com/api/v1/run", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.STICKY_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ prompt: "Suggest a subject line for a Northwind renewal email.", ai_model_id: 12 }),
}).then((r) => r.json());
console.log(msg.text); // raw Markdown

Antwort. 200 mit einem Message-Objekt, das nicht gespeichert wird: Seine ID ist 0, seine Zeitstempel sind Nullwerte. text enthält das rohe Markdown des Modells, anders als bei den Ausführungs-Endpunkten, die HTML zurückgeben.

{
  "ID": 0, "CreatedAt": "0001-01-01T00:00:00Z", "UpdatedAt": "0001-01-01T00:00:00Z", "DeletedAt": null,
  "conversation_context_id": null,
  "ai_model_id": 12,
  "text": "Your Northwind plan renews soon - here is what is new",
  "isUser": false,
  "error_text": null, "error_id": null,
  "ai_style": "prompty",
  "status": "finished",
  "type": "normal"
}

Fehler. 404 {"error":"AI model not found"}, 400 bei einem eingeschränkten Modell oder einer Sperre wegen Datenresidenz oder sensibler Daten, 429 bei überschrittenem Kontingent, 500 {"error":"..."}, wenn der Modellaufruf fehlschlägt (dieser Endpunkt verwendet 500, nicht 503).

GET /prompt/:id/run_history

GET /api/v1/prompt/:id/run_history
Berechtigung prompts_get

Gibt Ihren Ausführungsverlauf aus dem Prompt Studio für einen Prompt zurück, die neueste Unterhaltung zuerst. Enthalten sind nur Unterhaltungen, die Sie mit is_prompt_studio: true gestartet haben.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID. Der Prompt muss Ihnen gehören, mit Ihnen geteilt sein oder aus dem Katalog stammen.
Query-Parameter
page integer in query optional Standard 1
Seitennummer. Die Paginierungs-Header zählen Unterhaltungen.
size integer in query optional Standard 10
Unterhaltungen pro Seite.

Antwort. 200 mit einem Array aus Arrays von RunHistory-Objekten: ein inneres Array pro Unterhaltung, mit mehreren Elementen, wenn bei dieser Ausführung Modelle verglichen wurden. variables ist hier befüllt. [], wenn nichts vorhanden ist.

Prompt-Dateien

Dateien, die an den Prompt selbst angehängt sind. Modelle mit OpenAI-Protokoll nutzen sie über die Dateisuche, Together-Modelle erhalten sie als zusätzliche Benutzernachricht; wie andere Anbieter sie verwenden, ist nicht dokumentiert. Laden Sie Dateien zuerst mit POST /file hoch.

POST /prompt/:id/file

POST /api/v1/prompt/:id/file
Berechtigung prompts_manage

Verknüpft hochgeladene Dateien mit einem Prompt. Bereits verknüpfte Dateien bleiben verknüpft.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.
Body
file_ids uint[] erforderlich
IDs hochgeladener Dateien.

Antwort. 200 mit dem Prompt-Objekt; file_data listet nur die in diesem Aufruf hinzugefügten Dateien.

Fehler. 400 {"error":"Invalid request body"}, 400 {"error":"Invalid prompt ID"}, 404 {"error":"Prompt not found"}, 400 {"error":"File not found"}.

GET /prompt/:id/file

GET /api/v1/prompt/:id/file
Berechtigung prompts_get

Gibt ein Array aus File-Objekten zurück, die mit dem Prompt verknüpft sind. 400, wenn id nicht numerisch ist.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.

DELETE /prompt/:id/file/:fileId

DELETE /api/v1/prompt/:id/file/:fileId
Berechtigung prompts_manage

Löst eine Datei von einem Ihrer eigenen Prompts. Verwendet kein anderer Prompt und keine Nachricht die Datei, wird auch die gespeicherte Datei gelöscht.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.
fileId integer in path erforderlich
Datei-ID.

Antwort. 204. Fehler. 404 {"error":"Prompt not found"}, 403 {"error":"You do not have permission to delete this file from the prompt"}, 404 {"error":"File not found"}, 502 {"error":"Failed to delete file"}.

Mit einzelnen Benutzern teilen

GET /share

GET /api/v1/share
Berechtigung prompts_get

Gibt Prompts zurück, die mit Ihnen geteilt sind, die neuesten zuerst.

Query-Parameter
scope string in query optional Standard all
user (direkt mit Ihnen geteilt), workspace (mit Ihrem Workspace geteilt) oder all.
search string in query optional
Filtert nach Text.
page integer in query optional Standard 1
Seitennummer.
size integer in query optional Standard 10
Einträge pro Seite.

Antwort. 200 mit einem Array aus Prompt-Objekten, jedes mit einem shared_by-Objekt. scope=workspace ohne Workspace ergibt []; ein leeres Ergebnis in den anderen Bereichen ist null, nicht [].

[{ "ID": 42, "name": "Renewal check-in email", "...": "...",
   "shared_by": { "email": "john.smith@northwind.example", "first_name": "John", "last_name": "Smith" } }]

Fehler. 400 {"error":"Invalid scope parameter"}.

GET /prompt/:id/share

GET /api/v1/prompt/:id/share
Berechtigung prompts_get

Listet die Benutzer auf, mit denen ein Prompt geteilt ist. Jede Freigabe (Share) enthält ein vollständiges user-Objekt.

Pfadparameter
id integer in path erforderlich
Numerische Prompt-ID.
[{ "ID": 55, "CreatedAt": "...", "UpdatedAt": "...", "DeletedAt": null,
   "user_id": 19, "user": { "ID": 19, "email": "anna@northwind.example", "first_name": "Anna", "status": "active", "...": "..." },
   "prompt_id": 42, "read_only": true }]

POST /share/:id

POST /api/v1/share/:id
Berechtigung prompts_manage

Teilt den Prompt :id schreibgeschützt mit einem Benutzer, anhand seiner E-Mail-Adresse. Gibt es für diese Adresse noch kein Konto, legt der Server ein eingeladenes Konto an und verschickt eine Einladungs-E-Mail; ein bereits eingeladener Benutzer erhält die Einladung erneut.

Pfadparameter
id integer in path erforderlich
Prompt-ID.
Body
email string erforderlich
Die E-Mail-Adresse des Empfängers.

Antwort. 200 mit leerem Body. Fehler. 404 {"error":"prompt not found"}, 400 {"error":"invalid email format"}, 400 {"error":"share already exists"}, 400 {"error":"..."}, wenn die Einladung fehlschlägt.

POST /share/:id/resend

POST /api/v1/share/:id/resend
Berechtigung prompts_manage

Sendet die Einladungs-E-Mail erneut an einen Benutzer, der sich noch nicht registriert hat.

Pfadparameter
id integer in path erforderlich
Die ID des Prompts.
Body
email string erforderlich
Die eingeladene Adresse.

Antwort. 204. Fehler. 400 {"error":"invalid email format"}, 404 {"error":"prompt not found"}, 404 {"error":"user not found"}, 400 {"error":"user not invited or already registered"}, 404 {"error":"share not found"}.

DELETE /share/:id

DELETE /api/v1/share/:id
Berechtigung prompts_manage

Entfernt eine Freigabe und storniert alle ausstehenden Einladungen dieses Benutzers.

Pfadparameter
id integer in path erforderlich
Die ID der Freigabe (die ID aus GET /prompt/:id/share), nicht die Prompt-ID.

Antwort. 204. Fehler. 404 {"error":"share not found"}.