dealsky.ioDocs
Zur App
API-Referenz

Vorlagen

Nachrichten- und Sequenz-Vorlagen und die Platzhalter, die Texte in Kampagnen und im Postfach erlauben

#

Platzhalter für Texte

GET/v1/placeholders
Scope read:campaignsRecht: Übersicht und Statistiken ansehenliest

Welche 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

  • usagestring

    campaign (Standard) für Kampagnen-Texte, message_template für Nachrichtenvorlagen im Postfach

    campaign message_template
Felder der Antwort
  • keystring

    Name ohne Klammern

  • tokenstring

    So steht er im Text, z. B. {{first_name}}

  • labelstring

    Name in der App

  • meaningstring

    Was beim Versand bzw. im Postfach eingesetzt wird

  • examplestring

    Beispielwert, wie er im Text stehen könnte

  • categorystring

    campaign: personal, company, address, outreach. message_template zusätzlich grammar und sender

  • usable_via_apiboolean

    false: der Versand kennt ihn, über die API lässt er sich noch nicht verwenden (Grund in note)

  • notestring, kann null sein

    Hinweis, warum der Platzhalter über die API noch nicht verwendbar ist. Sonst null

Mögliche Fehler

400 VALIDATION_ERROR401 INVALID_API_KEY402 PLAN_REQUIRED403 SCOPE_MISSING429 RATE_LIMITED
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())
Antwort 200
{
  "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

GET/v1/message-templates
Scope read:campaignsRecht: Outreach Plattformliest

Die 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 100

    Einträge pro Seite (Standard 25, höchstens 100)

  • cursorstringmax. 200 Zeichen

    Wert aus meta.next_cursor der vorigen Seite

  • qstringmax. 200 Zeichen

    Teil des Namens (Groß/Klein egal)

  • categorystringmax. 100 Zeichen

    Nur Vorlagen dieser Kategorie (gespeicherter Wert)

Felder der Antwort
  • idstring (uuid)

    ID der Vorlage

  • namestring

    Name der Vorlage

  • bodystring

    Text mit Platzhaltern wie {{first_name}}. Leer bei einer Vorlage, die nur eine Sprachnachricht trägt

  • categorystring, kann null sein

    Kategorie, wie gespeichert (fester Wert wie opener oder ein frei angelegter Name)

  • category_labelstring, kann null sein

    Name der Kategorie, wie die App ihn zeigt

  • placeholdersListe aus string

    Platzhalter im Text, ohne Klammern und klein geschrieben

  • attachmentobject, kann null sein

    Anhang aus dem Postfach-Editor (Sprachnachricht, Bild oder Dokument). Nur lesbar

    Felder anzeigen
    • kindstring, kann null sein

      audio, image oder document

    • urlstring

      Adresse der angehängten Datei

    • namestring, kann null sein

      Dateiname des Anhangs

    • mimestring, kann null sein

      MIME-Typ des Anhangs

    • sizeinteger, kann null sein

      Größe in Byte

  • shortcutstring, kann null sein

    Altes Tastenkürzel im Postfach (nur lesbar)

  • created_atstring (date-time)

    Zeitpunkt der Anlage

  • updated_atstring (date-time), kann null sein

    Zeitpunkt der letzten Änderung

Mögliche Fehler

400 VALIDATION_ERROR401 INVALID_API_KEY402 PLAN_REQUIRED403 SCOPE_MISSING429 RATE_LIMITED
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())
Antwort 200
{
  "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

POST/v1/message-templates
Scope write:campaignsRecht: Outreach Plattformschreibt

Legt 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 Zeichen

    Name der Vorlage

  • bodystringPflichtmind. 1 Zeichenmax. 8000 Zeichen

    Text, bis 8000 Zeichen. Nur Platzhalter aus GET /v1/placeholders?usage=message_template (Schreibweise {{first_name}}), keine Spintax

  • categorystring, kann null seinmax. 100 Zeichen

    Vorhandene Kategorie (Name, Groß/Klein egal). null entfernt die Kategorie

Mögliche Fehler

400 VALIDATION_ERROR401 INVALID_API_KEY402 PLAN_REQUIRED403 SCOPE_MISSING409 CONFLICT429 RATE_LIMITED
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())
Antwort 201
{
  "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

GET/v1/message-templates/{id}
Scope read:campaignsRecht: Outreach Plattformliest

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).

Pfad-Parameter

  • idstring (uuid)Pflicht

    ID der Vorlage

Felder der Antwort
  • idstring (uuid)

    ID der Vorlage

  • namestring

    Name der Vorlage

  • bodystring

    Text mit Platzhaltern wie {{first_name}}. Leer bei einer Vorlage, die nur eine Sprachnachricht trägt

  • categorystring, kann null sein

    Kategorie, wie gespeichert (fester Wert wie opener oder ein frei angelegter Name)

  • category_labelstring, kann null sein

    Name der Kategorie, wie die App ihn zeigt

  • placeholdersListe aus string

    Platzhalter im Text, ohne Klammern und klein geschrieben

  • attachmentobject, kann null sein

    Anhang aus dem Postfach-Editor (Sprachnachricht, Bild oder Dokument). Nur lesbar

    Felder anzeigen
    • kindstring, kann null sein

      audio, image oder document

    • urlstring

      Adresse der angehängten Datei

    • namestring, kann null sein

      Dateiname des Anhangs

    • mimestring, kann null sein

      MIME-Typ des Anhangs

    • sizeinteger, kann null sein

      Größe in Byte

  • shortcutstring, kann null sein

    Altes Tastenkürzel im Postfach (nur lesbar)

  • created_atstring (date-time)

    Zeitpunkt der Anlage

  • updated_atstring (date-time), kann null sein

    Zeitpunkt der letzten Änderung

Mögliche Fehler

400 VALIDATION_ERROR401 INVALID_API_KEY402 PLAN_REQUIRED403 SCOPE_MISSING404 NOT_FOUND429 RATE_LIMITED
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())
Antwort 200
{
  "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

PATCH/v1/message-templates/{id}
Scope 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)Pflicht

    ID der Vorlage

Body

  • namestringmind. 1 Zeichenmax. 200 Zeichen

    Name der Vorlage

  • bodystringmind. 1 Zeichenmax. 8000 Zeichen

    Text, bis 8000 Zeichen. Nur Platzhalter aus GET /v1/placeholders?usage=message_template (Schreibweise {{first_name}}), keine Spintax

  • categorystring, kann null seinmax. 100 Zeichen

    Vorhandene Kategorie (Name, Groß/Klein egal). null entfernt die Kategorie

Felder der Antwort
  • idstring (uuid)

    ID der Vorlage

  • namestring

    Name der Vorlage

  • bodystring

    Text mit Platzhaltern wie {{first_name}}. Leer bei einer Vorlage, die nur eine Sprachnachricht trägt

  • categorystring, kann null sein

    Kategorie, wie gespeichert (fester Wert wie opener oder ein frei angelegter Name)

  • category_labelstring, kann null sein

    Name der Kategorie, wie die App ihn zeigt

  • placeholdersListe aus string

    Platzhalter im Text, ohne Klammern und klein geschrieben

  • attachmentobject, kann null sein

    Anhang aus dem Postfach-Editor (Sprachnachricht, Bild oder Dokument). Nur lesbar

    Felder anzeigen
    • kindstring, kann null sein

      audio, image oder document

    • urlstring

      Adresse der angehängten Datei

    • namestring, kann null sein

      Dateiname des Anhangs

    • mimestring, kann null sein

      MIME-Typ des Anhangs

    • sizeinteger, kann null sein

      Größe in Byte

  • shortcutstring, kann null sein

    Altes Tastenkürzel im Postfach (nur lesbar)

  • created_atstring (date-time)

    Zeitpunkt der Anlage

  • updated_atstring (date-time), kann null sein

    Zeitpunkt der letzten Änderung

Mögliche Fehler

400 VALIDATION_ERROR401 INVALID_API_KEY402 PLAN_REQUIRED403 SCOPE_MISSING404 NOT_FOUND409 CONFLICT429 RATE_LIMITED
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())
Antwort 200
{
  "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

DEL/v1/message-templates/{id}
Scope write:campaignsRecht: Outreach Plattformschreibt

Lö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)Pflicht

    ID der Vorlage

Felder der Antwort
  • deletedboolean

    true: Die Vorlage wurde gelöscht (ausgeblendet)

  • idstring (uuid)

    ID der gelöschten Vorlage

Mögliche Fehler

400 VALIDATION_ERROR401 INVALID_API_KEY402 PLAN_REQUIRED403 SCOPE_MISSING404 NOT_FOUND429 RATE_LIMITED
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())
Antwort 200
{
  "ok": true,
  "data": {
    "deleted": true,
    "id": "6a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d"
  },
  "meta": {
    "request_id": "req_7f3a…"
  }
}
#

Sequenz-Vorlagen auflisten

GET/v1/sequence-templates
Scope read:campaignsRecht: Bearbeiten und erstellenliest

Die 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 100

    Einträge pro Seite (Standard 25, höchstens 100)

  • cursorstringmax. 200 Zeichen

    Wert aus meta.next_cursor der vorigen Seite

  • qstringmax. 200 Zeichen

    Teil des Namens (Groß/Klein egal)

  • statusListe aus string

    Ein oder mehrere Status, kommagetrennt

    draft active paused archived
  • sourceListe aus string

    system, template, own; kommagetrennt

    system template own
Felder der Antwort
  • idstring (uuid)

    ID der Sequenz-Vorlage

  • namestring

    Name der Sequenz-Vorlage

  • descriptionstring, kann null sein

    Beschreibung der Sequenz-Vorlage

  • statusstring

    draft, active, paused oder archived. Der Kampagnen-Builder bietet nur active zur Auswahl an

  • categorystring, kann null sein

    connection = Vernetzung, outreach = Nachrichten

    connection outreach
  • campaign_typestring, kann null sein

    Kampagnenart, die zu den Schritten passt (wie bei GET /v1/campaigns)

    connect_only connect_and_message message_only
  • sourcestring

    system = von dealsky mitgeliefert (in der App nur ansehen und duplizieren), template = Vorlage, own = selbst angelegt

    system template own
  • steps_countinteger

    Schritte ohne Wartezeiten, wie die Liste der App

  • created_atstring (date-time)

    Zeitpunkt der Anlage

  • updated_atstring (date-time), kann null sein

    Zeitpunkt der letzten Änderung

Mögliche Fehler

400 VALIDATION_ERROR401 INVALID_API_KEY402 PLAN_REQUIRED403 SCOPE_MISSING429 RATE_LIMITED
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())
Antwort 200
{
  "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

GET/v1/sequence-templates/{id}
Scope read:campaignsRecht: Bearbeiten und erstellenliest

Vorlage 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)Pflicht

    ID der Vorlage

Felder der Antwort
  • idstring (uuid)

    ID der Sequenz-Vorlage

  • namestring

    Name der Sequenz-Vorlage

  • descriptionstring, kann null sein

    Beschreibung der Sequenz-Vorlage

  • statusstring

    draft, active, paused oder archived. Der Kampagnen-Builder bietet nur active zur Auswahl an

  • categorystring, kann null sein

    connection = Vernetzung, outreach = Nachrichten

    connection outreach
  • campaign_typestring, kann null sein

    Kampagnenart, die zu den Schritten passt (wie bei GET /v1/campaigns)

    connect_only connect_and_message message_only
  • sourcestring

    system = von dealsky mitgeliefert (in der App nur ansehen und duplizieren), template = Vorlage, own = selbst angelegt

    system template own
  • steps_countinteger

    Schritte ohne Wartezeiten, wie die Liste der App

  • created_atstring (date-time)

    Zeitpunkt der Anlage

  • updated_atstring (date-time), kann null sein

    Zeitpunkt der letzten Änderung

  • stepsListe aus object

    Schritte im Format von GET /v1/campaigns/{id}/steps

    Felder anzeigen
    • idstring (uuid)

      ID des Schritts

    • step_orderinteger

      Reihenfolge innerhalb der Sequenz

    • branchstring

      main = Hauptpfad, if_yes = nach Annahme der Vernetzung, if_no = nicht angenommen

      main if_yes if_no
    • action_typestring

      view_profile, send_connection, send_message, send_voice, send_video, ai_opener, react_post, comment_post, follow, wait, withdraw_connection

    • labelstring

      Name des Schritts wie im Editor

    • wait_minutesinteger

      Wartezeit in Minuten (bei wait), bzw. Frist bis zum Zurückziehen (bei withdraw_connection)

    • wait_minutes_maxinteger, kann null sein

      Obergrenze der zufälligen Wartezeit

    • randomizedboolean

      Wartezeit wird je Lead zufällig zwischen wait_minutes und wait_minutes_max gewählt

    • textstring, kann null sein

      Text mit Platzhaltern wie {{first_name}} oder {{landing_page_url}}; bei ai_opener die Begrüßung

    • variantsListe aus object, kann null sein

      A/B-Test: alle Varianten, A ist text

      Felder anzeigen
      • keystring

        Kennung der Variante, A ist der Haupttext, danach B, C …

      • textstring

        Text der Variante mit Platzhaltern

    • audio_urlsListe aus string, kann null sein

      Sprachnachrichten (je Lead wird eine zufällig gewählt)

    • videoobject, kann null sein

      Video-Einstellungen, nur bei send_video

      Felder anzeigen
      • modestring

        static: ein festes Video für alle, personalized: Video wird je Lead erzeugt

        static personalized
      • video_urlstring, kann null sein

        URL des festen Videos, nur bei static

      • thumbnail_urlstring, kann null sein

        Vorschaubild des festen Videos, nur bei static

      • templatestring, kann null sein

        Vorlage des personalisierten Videos, nur bei personalized

    • reactionsListe aus string, kann null sein

      Reaktionen bei react_post (je Lead eine zufällig)

    • comment_image_urlstring, kann null sein

      Bild zum Kommentar, nur bei comment_post und comment_post_image

    • ai_openerobject, kann null sein

      Einstellungen des KI-Openers ({{ai_opener}} im Text oder Schritt ai_opener). Leer = Standard.

    • ai_opener_questionstring, kann null sein

      Frage, die als zweite Nachricht folgt

Mögliche Fehler

400 VALIDATION_ERROR401 INVALID_API_KEY402 PLAN_REQUIRED403 SCOPE_MISSING404 NOT_FOUND429 RATE_LIMITED
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())
Antwort 200
{
  "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…"
  }
}