Vorlagen
Nachrichten- und Sequenz-Vorlagen und die Platzhalter, die Texte in Kampagnen und im Postfach erlauben
Platzhalter für Texte
/v1/placeholdersread:campaignsRecht: Übersicht und Statistiken ansehenliestWelche Platzhalter ein Text enthalten darf und was dealsky dafür einsetzt. usage=campaign (Standard): Texte von Kampagnen-Schritten (POST /v1/campaigns, PUT /v1/campaigns/{id}/steps). Es ist genau die Liste, gegen die diese Routen prüfen; Platzhalter mit usable_via_api: false kennt der Versand, die API lehnt sie beim Anlegen aber noch ab. In Kampagnen-Texten ist zusätzlich Spintax erlaubt, z. B. {Hallo|Hi}. usage=message_template: Nachrichtenvorlagen, die das Postfach beim Einfügen ersetzt (ohne Spintax). Gemeinsam haben beide unter anderem {{first_name}}, {{last_name}}, {{salutation}}, {{company}} und {{city}}; ein Text nur mit diesen passt überall. Platzhalter immer ohne Leerzeichen in den Klammern schreiben.
Query-Parameter
usagestringcampaign (Standard) für Kampagnen-Texte, message_template für Nachrichtenvorlagen im Postfach
campaignmessage_template
Felder der Antwort
keystringName ohne Klammern
tokenstringSo steht er im Text, z. B. {{first_name}}
labelstringName in der App
meaningstringWas beim Versand bzw. im Postfach eingesetzt wird
examplestringBeispielwert, wie er im Text stehen könnte
categorystringcampaign: personal, company, address, outreach. message_template zusätzlich grammar und sender
usable_via_apibooleanfalse: der Versand kennt ihn, über die API lässt er sich noch nicht verwenden (Grund in note)
notestring, kann null seinHinweis, warum der Platzhalter über die API noch nicht verwendbar ist. Sonst null
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/placeholders" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/placeholders", {
method: "GET",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.dealsky.io/functions/v1/api/v1/placeholders",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"key": "first_name",
"token": "{{first_name}}",
"label": "Vorname",
"meaning": "Vorname des Leads. Ist das Feld beim Lead leer, steht an der Stelle nichts.",
"example": "Max",
"category": "personal",
"usable_via_api": true,
"note": null
},
{
"key": "landing_page_url",
"token": "{{landing_page_url}}",
"label": "Landingpage URL",
"meaning": "Link zur persönlichen Landingpage, die dealsky je Lead aus der Landingpage-Vorlage der Kampagne erzeugt.",
"example": "https://app.de/lp/max",
"category": "outreach",
"usable_via_api": false,
"note": "Braucht eine Landingpage-Vorlage am Link, die sich über die API noch nicht einrichten lässt. Die Kampagne ohne den Link anlegen und ihn in dealsky im Builder ergänzen."
}
],
"meta": {
"request_id": "req_7f3a…"
}
}Nachrichtenvorlagen auflisten
/v1/message-templatesread:campaignsRecht: Outreach PlattformliestDie Text-Vorlagen des Kontos, wie die App sie unter Nachrichtenvorlagen und im Postfach (Vorlagen im Eingabefeld) anbietet, neueste zuerst. Gelöschte fehlen. Weitere Arten (Sprachnachricht, Video, Landingpage, Bild, Dokument, Postfach-Sequenz) zeigt die App nur dealsky-Admins, sie fehlen hier. Eingesetzt werden Nachrichtenvorlagen im Postfach: Die App ersetzt die Platzhalter beim Einfügen in das Eingabefeld, die Person prüft den Text und sendet. Spintax löst das Postfach nicht auf. Für Kampagnen-Texte gelten andere Platzhalter (GET /v1/placeholders).
Query-Parameter
limitintegerab 1bis 100Einträge pro Seite (Standard 25, höchstens 100)
cursorstringmax. 200 ZeichenWert aus meta.next_cursor der vorigen Seite
qstringmax. 200 ZeichenTeil des Namens (Groß/Klein egal)
categorystringmax. 100 ZeichenNur Vorlagen dieser Kategorie (gespeicherter Wert)
Felder der Antwort
idstring (uuid)ID der Vorlage
namestringName der Vorlage
bodystringText mit Platzhaltern wie {{first_name}}. Leer bei einer Vorlage, die nur eine Sprachnachricht trägt
categorystring, kann null seinKategorie, wie gespeichert (fester Wert wie opener oder ein frei angelegter Name)
category_labelstring, kann null seinName der Kategorie, wie die App ihn zeigt
placeholdersListe aus stringPlatzhalter im Text, ohne Klammern und klein geschrieben
attachmentobject, kann null seinAnhang aus dem Postfach-Editor (Sprachnachricht, Bild oder Dokument). Nur lesbar
Felder anzeigen
kindstring, kann null seinaudio, image oder document
urlstringAdresse der angehängten Datei
namestring, kann null seinDateiname des Anhangs
mimestring, kann null seinMIME-Typ des Anhangs
sizeinteger, kann null seinGröße in Byte
shortcutstring, kann null seinAltes Tastenkürzel im Postfach (nur lesbar)
created_atstring (date-time)Zeitpunkt der Anlage
updated_atstring (date-time), kann null seinZeitpunkt der letzten Änderung
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/message-templates" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/message-templates", {
method: "GET",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.dealsky.io/functions/v1/api/v1/message-templates",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"id": "6a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"name": "Nachfassen nach der Messe",
"body": "Hallo {{first_name}}, schön, dass wir uns auf der Messe gesprochen haben. Passt es Ihnen, wenn ich Ihnen kurz zeige, wie {{company}} damit mehr Termine gewinnt?",
"category": "followup",
"category_label": "Follow-Up",
"placeholders": [
"first_name",
"company"
],
"attachment": null,
"shortcut": null,
"created_at": "2026-10-01T08:00:00.000Z",
"updated_at": "2026-10-18T09:12:00.000Z"
}
],
"meta": {
"request_id": "req_7f3a…",
"next_cursor": null,
"has_more": false
}
}Nachrichtenvorlage anlegen
/v1/message-templateswrite:campaignsRecht: Outreach PlattformschreibtLegt eine Text-Vorlage an, mit denselben Spalten wie die App unter Nachrichtenvorlagen (Name, Text, Kurzbeschreibung aus dem Text, verwendete Platzhalter, Kategorie). Sie steht danach sofort im Postfach zur Auswahl; sonst passiert nichts, es wird nichts gesendet und es kostet nichts. Strenger als die App: Platzhalter, die das Postfach nicht ersetzt, und Spintax werden mit 400 abgelehnt, weil sie sonst wörtlich beim Kontakt ankämen. category muss eine vorhandene Kategorie sein (neue legt man in dealsky an). Ein Anhang lässt sich über die API nicht anlegen. Mit Test-Key: dieselben Prüfungen, nichts wird geschrieben.
Body
namestringPflichtmind. 1 Zeichenmax. 200 ZeichenName der Vorlage
bodystringPflichtmind. 1 Zeichenmax. 8000 ZeichenText, bis 8000 Zeichen. Nur Platzhalter aus GET /v1/placeholders?usage=message_template (Schreibweise {{first_name}}), keine Spintax
categorystring, kann null seinmax. 100 ZeichenVorhandene Kategorie (Name, Groß/Klein egal). null entfernt die Kategorie
Mögliche Fehler
curl -X POST "https://api.dealsky.io/functions/v1/api/v1/message-templates" \
-H "X-API-Key: $DEALSKY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Nachfassen nach der Messe",
"body": "Hallo {{first_name}}, schön, dass wir uns auf der Messe gesprochen haben. Passt es Ihnen, wenn ich Ihnen kurz zeige, wie {{company}} damit mehr Termine gewinnt?",
"category": "followup"
}'const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/message-templates", {
method: "POST",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Nachfassen nach der Messe",
"body": "Hallo {{first_name}}, schön, dass wir uns auf der Messe gesprochen haben. Passt es Ihnen, wenn ich Ihnen kurz zeige, wie {{company}} damit mehr Termine gewinnt?",
"category": "followup"
}),
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.dealsky.io/functions/v1/api/v1/message-templates",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
json={
"name": "Nachfassen nach der Messe",
"body": "Hallo {{first_name}}, schön, dass wir uns auf der Messe gesprochen haben. Passt es Ihnen, wenn ich Ihnen kurz zeige, wie {{company}} damit mehr Termine gewinnt?",
"category": "followup"
},
)
print(res.json()){
"ok": true,
"data": {
"id": "6a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"name": "Nachfassen nach der Messe",
"body": "Hallo {{first_name}}, schön, dass wir uns auf der Messe gesprochen haben. Passt es Ihnen, wenn ich Ihnen kurz zeige, wie {{company}} damit mehr Termine gewinnt?",
"category": "followup",
"category_label": "Follow-Up",
"placeholders": [
"first_name",
"company"
],
"attachment": null,
"shortcut": null,
"created_at": "2026-10-01T08:00:00.000Z",
"updated_at": "2026-10-18T09:12:00.000Z"
},
"meta": {
"request_id": "req_7f3a…"
}
}Eine Nachrichtenvorlage abrufen
/v1/message-templates/{id}read:campaignsRecht: Outreach PlattformliestEingesetzt werden Nachrichtenvorlagen im Postfach: Die App ersetzt die Platzhalter beim Einfügen in das Eingabefeld, die Person prüft den Text und sendet. Spintax löst das Postfach nicht auf. Für Kampagnen-Texte gelten andere Platzhalter (GET /v1/placeholders).
Pfad-Parameter
idstring (uuid)PflichtID der Vorlage
Felder der Antwort
idstring (uuid)ID der Vorlage
namestringName der Vorlage
bodystringText mit Platzhaltern wie {{first_name}}. Leer bei einer Vorlage, die nur eine Sprachnachricht trägt
categorystring, kann null seinKategorie, wie gespeichert (fester Wert wie opener oder ein frei angelegter Name)
category_labelstring, kann null seinName der Kategorie, wie die App ihn zeigt
placeholdersListe aus stringPlatzhalter im Text, ohne Klammern und klein geschrieben
attachmentobject, kann null seinAnhang aus dem Postfach-Editor (Sprachnachricht, Bild oder Dokument). Nur lesbar
Felder anzeigen
kindstring, kann null seinaudio, image oder document
urlstringAdresse der angehängten Datei
namestring, kann null seinDateiname des Anhangs
mimestring, kann null seinMIME-Typ des Anhangs
sizeinteger, kann null seinGröße in Byte
shortcutstring, kann null seinAltes Tastenkürzel im Postfach (nur lesbar)
created_atstring (date-time)Zeitpunkt der Anlage
updated_atstring (date-time), kann null seinZeitpunkt der letzten Änderung
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/message-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/message-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10", {
method: "GET",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.dealsky.io/functions/v1/api/v1/message-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": {
"id": "6a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"name": "Nachfassen nach der Messe",
"body": "Hallo {{first_name}}, schön, dass wir uns auf der Messe gesprochen haben. Passt es Ihnen, wenn ich Ihnen kurz zeige, wie {{company}} damit mehr Termine gewinnt?",
"category": "followup",
"category_label": "Follow-Up",
"placeholders": [
"first_name",
"company"
],
"attachment": null,
"shortcut": null,
"created_at": "2026-10-01T08:00:00.000Z",
"updated_at": "2026-10-18T09:12:00.000Z"
},
"meta": {
"request_id": "req_7f3a…"
}
}Nachrichtenvorlage ändern
/v1/message-templates/{id}write:campaignsRecht: Outreach PlattformschreibtÄndert Name, Text oder Kategorie. Nur übergebene Felder; unveränderte Werte schreiben nichts. Prüfung des Texts wie beim Anlegen. Anhang und Tastenkürzel bleiben erhalten. Eine Vorlage mit Sprachnachricht hat wie in der App keinen Text (422 voice_template_without_text). Hat jemand die Vorlage zwischen Lesen und Schreiben geändert, kommt 409 concurrent_update. Mit Test-Key: dieselben Prüfungen, would_update nennt die Felder, die sich ändern würden.
Pfad-Parameter
idstring (uuid)PflichtID der Vorlage
Body
namestringmind. 1 Zeichenmax. 200 ZeichenName der Vorlage
bodystringmind. 1 Zeichenmax. 8000 ZeichenText, bis 8000 Zeichen. Nur Platzhalter aus GET /v1/placeholders?usage=message_template (Schreibweise {{first_name}}), keine Spintax
categorystring, kann null seinmax. 100 ZeichenVorhandene Kategorie (Name, Groß/Klein egal). null entfernt die Kategorie
Felder der Antwort
idstring (uuid)ID der Vorlage
namestringName der Vorlage
bodystringText mit Platzhaltern wie {{first_name}}. Leer bei einer Vorlage, die nur eine Sprachnachricht trägt
categorystring, kann null seinKategorie, wie gespeichert (fester Wert wie opener oder ein frei angelegter Name)
category_labelstring, kann null seinName der Kategorie, wie die App ihn zeigt
placeholdersListe aus stringPlatzhalter im Text, ohne Klammern und klein geschrieben
attachmentobject, kann null seinAnhang aus dem Postfach-Editor (Sprachnachricht, Bild oder Dokument). Nur lesbar
Felder anzeigen
kindstring, kann null seinaudio, image oder document
urlstringAdresse der angehängten Datei
namestring, kann null seinDateiname des Anhangs
mimestring, kann null seinMIME-Typ des Anhangs
sizeinteger, kann null seinGröße in Byte
shortcutstring, kann null seinAltes Tastenkürzel im Postfach (nur lesbar)
created_atstring (date-time)Zeitpunkt der Anlage
updated_atstring (date-time), kann null seinZeitpunkt der letzten Änderung
Mögliche Fehler
curl -X PATCH "https://api.dealsky.io/functions/v1/api/v1/message-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10" \
-H "X-API-Key: $DEALSKY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Nachfassen nach der Messe (kurz)",
"category": null
}'const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/message-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10", {
method: "PATCH",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Nachfassen nach der Messe (kurz)",
"category": null
}),
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"PATCH",
"https://api.dealsky.io/functions/v1/api/v1/message-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
json={
"name": "Nachfassen nach der Messe (kurz)",
"category": None
},
)
print(res.json()){
"ok": true,
"data": {
"id": "6a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"name": "Nachfassen nach der Messe (kurz)",
"body": "Hallo {{first_name}}, schön, dass wir uns auf der Messe gesprochen haben. Passt es Ihnen, wenn ich Ihnen kurz zeige, wie {{company}} damit mehr Termine gewinnt?",
"category": null,
"category_label": null,
"placeholders": [
"first_name",
"company"
],
"attachment": null,
"shortcut": null,
"created_at": "2026-10-01T08:00:00.000Z",
"updated_at": "2026-10-18T09:12:00.000Z"
},
"meta": {
"request_id": "req_7f3a…"
}
}Nachrichtenvorlage löschen
/v1/message-templates/{id}write:campaignsRecht: Outreach PlattformschreibtLöscht die Vorlage wie die App: Sie wird ausgeblendet (is_active false) und steht nicht mehr zur Auswahl. Bereits gesendete Nachrichten und Kampagnen bleiben unberührt, denn die App kopiert den Text beim Einfügen. Mit Test-Key: would_delete, nichts wird geschrieben.
Pfad-Parameter
idstring (uuid)PflichtID der Vorlage
Felder der Antwort
deletedbooleantrue: Die Vorlage wurde gelöscht (ausgeblendet)
idstring (uuid)ID der gelöschten Vorlage
Mögliche Fehler
curl -X DELETE "https://api.dealsky.io/functions/v1/api/v1/message-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/message-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10", {
method: "DELETE",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"DELETE",
"https://api.dealsky.io/functions/v1/api/v1/message-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": {
"deleted": true,
"id": "6a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d"
},
"meta": {
"request_id": "req_7f3a…"
}
}Sequenz-Vorlagen auflisten
/v1/sequence-templatesread:campaignsRecht: Bearbeiten und erstellenliestDie wiederverwendbaren LinkedIn-Sequenzen des Kontos, wie die App sie unter Kampagnen-Sequenzen als „Wiederverwendbare Vorlagen“ zeigt und im Kampagnen-Builder unter „Bestehende Sequenz wählen“ anbietet: die von dealsky mitgelieferten Systemsequenzen und selbst angelegte Sequenzen ohne Kampagne. Neueste zuerst. Sequenzen, die zu einer Kampagne gehören, stehen unter GET /v1/campaigns/{id}/steps. Nur lesen.
Query-Parameter
limitintegerab 1bis 100Einträge pro Seite (Standard 25, höchstens 100)
cursorstringmax. 200 ZeichenWert aus meta.next_cursor der vorigen Seite
qstringmax. 200 ZeichenTeil des Namens (Groß/Klein egal)
statusListe aus stringEin oder mehrere Status, kommagetrennt
draftactivepausedarchivedsourceListe aus stringsystem, template, own; kommagetrennt
systemtemplateown
Felder der Antwort
idstring (uuid)ID der Sequenz-Vorlage
namestringName der Sequenz-Vorlage
descriptionstring, kann null seinBeschreibung der Sequenz-Vorlage
statusstringdraft, active, paused oder archived. Der Kampagnen-Builder bietet nur active zur Auswahl an
categorystring, kann null seinconnection = Vernetzung, outreach = Nachrichten
connectionoutreachcampaign_typestring, kann null seinKampagnenart, die zu den Schritten passt (wie bei GET /v1/campaigns)
connect_onlyconnect_and_messagemessage_onlysourcestringsystem = von dealsky mitgeliefert (in der App nur ansehen und duplizieren), template = Vorlage, own = selbst angelegt
systemtemplateownsteps_countintegerSchritte ohne Wartezeiten, wie die Liste der App
created_atstring (date-time)Zeitpunkt der Anlage
updated_atstring (date-time), kann null seinZeitpunkt der letzten Änderung
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/sequence-templates" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/sequence-templates", {
method: "GET",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.dealsky.io/functions/v1/api/v1/sequence-templates",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"id": "4c590b42-1f2e-4d3c-8b4a-5e6f7a8b9c0d",
"name": "Sequenz Vernetzung (Vorlage)",
"description": null,
"status": "draft",
"category": "connection",
"campaign_type": "connect_only",
"source": "system",
"steps_count": 3,
"created_at": "2026-09-01T08:00:00.000Z",
"updated_at": "2026-09-01T08:00:00.000Z"
}
],
"meta": {
"request_id": "req_7f3a…",
"next_cursor": null,
"has_more": false
}
}Eine Sequenz-Vorlage mit Schritten abrufen
/v1/sequence-templates/{id}read:campaignsRecht: Bearbeiten und erstellenliestVorlage mit allen Schritten im Format von GET /v1/campaigns/{id}/steps (Hauptpfad, dann if_yes, dann if_no). Um daraus eine Kampagne anzulegen, die Schritte an POST /v1/campaigns übergeben: action_type, branch, wait_minutes (bei wait und withdraw_connection), text, audio_urls, reactions; bei A/B-Tests text = Variante A und variants = [Text von Variante B]. Schritte mit Video oder KI-Opener sowie Texte mit {{landing_page_url}} lassen sich über die API noch nicht anlegen (GET /v1/placeholders). 404 auch für Sequenzen, die zu einer Kampagne gehören.
Pfad-Parameter
idstring (uuid)PflichtID der Vorlage
Felder der Antwort
idstring (uuid)ID der Sequenz-Vorlage
namestringName der Sequenz-Vorlage
descriptionstring, kann null seinBeschreibung der Sequenz-Vorlage
statusstringdraft, active, paused oder archived. Der Kampagnen-Builder bietet nur active zur Auswahl an
categorystring, kann null seinconnection = Vernetzung, outreach = Nachrichten
connectionoutreachcampaign_typestring, kann null seinKampagnenart, die zu den Schritten passt (wie bei GET /v1/campaigns)
connect_onlyconnect_and_messagemessage_onlysourcestringsystem = von dealsky mitgeliefert (in der App nur ansehen und duplizieren), template = Vorlage, own = selbst angelegt
systemtemplateownsteps_countintegerSchritte ohne Wartezeiten, wie die Liste der App
created_atstring (date-time)Zeitpunkt der Anlage
updated_atstring (date-time), kann null seinZeitpunkt der letzten Änderung
stepsListe aus objectSchritte im Format von GET /v1/campaigns/{id}/steps
Felder anzeigen
idstring (uuid)ID des Schritts
step_orderintegerReihenfolge innerhalb der Sequenz
branchstringmain = Hauptpfad, if_yes = nach Annahme der Vernetzung, if_no = nicht angenommen
mainif_yesif_noaction_typestringview_profile, send_connection, send_message, send_voice, send_video, ai_opener, react_post, comment_post, follow, wait, withdraw_connection
labelstringName des Schritts wie im Editor
wait_minutesintegerWartezeit in Minuten (bei wait), bzw. Frist bis zum Zurückziehen (bei withdraw_connection)
wait_minutes_maxinteger, kann null seinObergrenze der zufälligen Wartezeit
randomizedbooleanWartezeit wird je Lead zufällig zwischen wait_minutes und wait_minutes_max gewählt
textstring, kann null seinText mit Platzhaltern wie {{first_name}} oder {{landing_page_url}}; bei ai_opener die Begrüßung
variantsListe aus object, kann null seinA/B-Test: alle Varianten, A ist text
Felder anzeigen
keystringKennung der Variante, A ist der Haupttext, danach B, C …
textstringText der Variante mit Platzhaltern
audio_urlsListe aus string, kann null seinSprachnachrichten (je Lead wird eine zufällig gewählt)
videoobject, kann null seinVideo-Einstellungen, nur bei send_video
Felder anzeigen
modestringstatic: ein festes Video für alle, personalized: Video wird je Lead erzeugt
staticpersonalizedvideo_urlstring, kann null seinURL des festen Videos, nur bei static
thumbnail_urlstring, kann null seinVorschaubild des festen Videos, nur bei static
templatestring, kann null seinVorlage des personalisierten Videos, nur bei personalized
reactionsListe aus string, kann null seinReaktionen bei react_post (je Lead eine zufällig)
comment_image_urlstring, kann null seinBild zum Kommentar, nur bei comment_post und comment_post_image
ai_openerobject, kann null seinEinstellungen des KI-Openers ({{ai_opener}} im Text oder Schritt ai_opener). Leer = Standard.
ai_opener_questionstring, kann null seinFrage, die als zweite Nachricht folgt
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/sequence-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/sequence-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10", {
method: "GET",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.dealsky.io/functions/v1/api/v1/sequence-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": {
"id": "4c590b42-1f2e-4d3c-8b4a-5e6f7a8b9c0d",
"name": "Sequenz Vernetzung (Vorlage)",
"description": null,
"status": "draft",
"category": "connection",
"campaign_type": "connect_only",
"source": "system",
"steps_count": 3,
"created_at": "2026-09-01T08:00:00.000Z",
"updated_at": "2026-09-01T08:00:00.000Z",
"steps": [
{
"wait_minutes": 0,
"wait_minutes_max": null,
"randomized": false,
"text": null,
"variants": null,
"audio_urls": null,
"video": null,
"reactions": null,
"comment_image_url": null,
"ai_opener": null,
"ai_opener_question": null,
"id": "7b1c2d3e-0000-4000-8000-000000000001",
"step_order": 1,
"branch": "main",
"action_type": "view_profile",
"label": "Profil ansehen"
},
{
"wait_minutes": 1440,
"wait_minutes_max": 2160,
"randomized": true,
"text": null,
"variants": null,
"audio_urls": null,
"video": null,
"reactions": null,
"comment_image_url": null,
"ai_opener": null,
"ai_opener_question": null,
"id": "7b1c2d3e-0000-4000-8000-000000000002",
"step_order": 2,
"branch": "main",
"action_type": "wait",
"label": "Warten"
},
{
"wait_minutes": 0,
"wait_minutes_max": null,
"randomized": false,
"text": null,
"variants": null,
"audio_urls": null,
"video": null,
"reactions": [
"like"
],
"comment_image_url": null,
"ai_opener": null,
"ai_opener_question": null,
"id": "7b1c2d3e-0000-4000-8000-000000000003",
"step_order": 3,
"branch": "main",
"action_type": "react_post",
"label": "Beitrag reagieren"
},
{
"wait_minutes": 0,
"wait_minutes_max": null,
"randomized": false,
"text": null,
"variants": null,
"audio_urls": null,
"video": null,
"reactions": null,
"comment_image_url": null,
"ai_opener": null,
"ai_opener_question": null,
"id": "7b1c2d3e-0000-4000-8000-000000000004",
"step_order": 4,
"branch": "main",
"action_type": "send_connection",
"label": "Vernetzungsanfrage"
}
]
},
"meta": {
"request_id": "req_7f3a…"
}
}