dealsky.ioDocs
Zur App
API-Referenz

Landingpages

Vorlagen, persönliche Landingpages je Lead und ihre Links

#

Landingpage-Vorlagen auflisten

GET/v1/landing-page-templates
Scope read:assetsRecht: Outreach Plattformliest

Die Vorlagen, die in dealsky unter Assets, Landingpages stehen und in Kampagnen wählbar sind (status active), neueste zuerst. Ohne den Aufbau der Seite; den liefert der Abruf einer einzelnen Vorlage.

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

    Suche im Namen (Teilstring, Groß/Klein egal)

Felder der Antwort
  • idstring (uuid)

    ID der Vorlage (template_id bei den persönlichen Seiten)

  • namestring

    Name der Vorlage wie in der App

  • descriptionstring, kann null sein

    Beschreibung der Vorlage, null wenn keine hinterlegt ist

  • statusstring, kann null sein

    active = in Kampagnen und im Impact Studio wählbar

  • thumbnail_urlstring, kann null sein

    Vorschaubild der Vorlage

  • preview_urlstring

    Vorschau mit Beispiel-Lead in dealsky (braucht eine Anmeldung in dealsky). Vorlagen selbst haben keine öffentliche Adresse.

  • created_atstring (date-time)

    Anlagezeitpunkt der Vorlage (ISO 8601, UTC)

  • updated_atstring (date-time), kann null sein

    Letzte Änderung der Vorlage (ISO 8601, UTC)

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/landing-page-templates" \
  -H "X-API-Key: $DEALSKY_API_KEY"
const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/landing-page-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/landing-page-templates",
    headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json())
Antwort 200
{
  "ok": true,
  "data": [
    {
      "id": "7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "name": "Outreach Geschäftsführer",
      "description": null,
      "status": "active",
      "thumbnail_url": "https://imagedelivery.net/k3Xr9aQ/system/lp-template-variant1/public",
      "preview_url": "https://app.dealsky.io/preview/demo-landing/7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "created_at": "2026-09-02T10:15:00.000Z",
      "updated_at": "2026-10-14T16:40:00.000Z"
    }
  ],
  "meta": {
    "request_id": "req_7f3a…",
    "next_cursor": null,
    "has_more": false
  }
}
#

Eine Landingpage-Vorlage abrufen

GET/v1/landing-page-templates/{id}
Scope read:assetsRecht: Outreach Plattformliest

Mit dem Aufbau der Seite (Abschnitte, Blocktypen, Buchungs- und Danke-Seite, Art des Videos) und der Zahl der daraus erzeugten persönlichen Seiten. Texte, Farben und Stile aus dem Editor gibt die API nicht heraus. Gelöschte Vorlagen antworten 404.

Pfad-Parameter

  • idstring (uuid)Pflicht

    ID der Vorlage

Felder der Antwort
  • idstring (uuid)

    ID der Vorlage (template_id bei den persönlichen Seiten)

  • namestring

    Name der Vorlage wie in der App

  • descriptionstring, kann null sein

    Beschreibung der Vorlage, null wenn keine hinterlegt ist

  • statusstring, kann null sein

    active = in Kampagnen und im Impact Studio wählbar

  • thumbnail_urlstring, kann null sein

    Vorschaubild der Vorlage

  • preview_urlstring

    Vorschau mit Beispiel-Lead in dealsky (braucht eine Anmeldung in dealsky). Vorlagen selbst haben keine öffentliche Adresse.

  • created_atstring (date-time)

    Anlagezeitpunkt der Vorlage (ISO 8601, UTC)

  • updated_atstring (date-time), kann null sein

    Letzte Änderung der Vorlage (ISO 8601, UTC)

  • structureobject

    Aufbau der Vorlage ohne Editor-Daten (Texte, Farben, Stile): Abschnitte, Blöcke, Video-Art, SEO-Angaben

    Felder anzeigen
    • layoutstring, kann null sein

      Grundaufbau: variant1 oder variant2

    • sectionsListe aus string, kann null sein

      Sichtbare Abschnitte unter dem Kopfbereich mit Video in ihrer Reihenfolge, z. B. comparison, cta, approach, faq, finalCta. null = Standardreihenfolge der Vorlage

    • hidden_sectionsListe aus string

      Ausgeblendete Abschnitte

    • blocksListe aus object

      Zusätzliche Blöcke auf der Hauptseite je Typ

      Felder anzeigen
      • typestring

        Blocktyp, z. B. text, image, explainer_video, video_personalized, calendar_embed, testimonial

      • countinteger

        Anzahl Blöcke dieses Typs

    • booking_page_blocksListe aus string

      Blocktypen der Buchungsseite. Leer, wenn ein externer CTA-Link aktiv ist.

    • thank_you_page_blocksListe aus string

      Blocktypen der Danke-Seite. Leer, wenn ein externer CTA-Link aktiv ist.

    • hero_video_typestring, kann null sein

      personalized = je Lead ein eigenes Video, static = dasselbe Video für alle

    • external_cta_urlstring, kann null sein

      Ziel der Buttons, wenn sie auf eine externe Seite statt auf die Buchungsseite führen

    • seo_titlestring, kann null sein

      Titel für Suchmaschinen und Link-Vorschau, Platzhalter wie {{first_name}} werden je Lead ersetzt

    • seo_descriptionstring, kann null sein

      Beschreibung für Suchmaschinen und Link-Vorschau, null wenn keine hinterlegt ist

  • landing_pages_countinteger

    Persönliche Landingpages, die aus dieser Vorlage erzeugt wurden

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/landing-page-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/landing-page-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/landing-page-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
    headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json())
Antwort 200
{
  "ok": true,
  "data": {
    "id": "7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "name": "Outreach Geschäftsführer",
    "description": null,
    "status": "active",
    "thumbnail_url": "https://imagedelivery.net/k3Xr9aQ/system/lp-template-variant1/public",
    "preview_url": "https://app.dealsky.io/preview/demo-landing/7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "created_at": "2026-09-02T10:15:00.000Z",
    "updated_at": "2026-10-14T16:40:00.000Z",
    "structure": {
      "layout": "variant1",
      "sections": [
        "comparison",
        "cta",
        "approach",
        "finalCta"
      ],
      "hidden_sections": [
        "faq"
      ],
      "blocks": [
        {
          "type": "text",
          "count": 2
        },
        {
          "type": "testimonial",
          "count": 1
        }
      ],
      "booking_page_blocks": [
        "heading",
        "calendar_embed"
      ],
      "thank_you_page_blocks": [
        "heading",
        "text"
      ],
      "hero_video_type": "personalized",
      "external_cta_url": null,
      "seo_title": "Ein Video für {{first_name}}",
      "seo_description": "Eine persönliche Nachricht von Beispiel GmbH"
    },
    "landing_pages_count": 42
  },
  "meta": {
    "request_id": "req_7f3a…"
  }
}
#

Landingpage-Vorlage umbenennen, SEO-Titel und -Beschreibung ändern

PATCH/v1/landing-page-templates/{id}
Scope write:assetsRecht: Outreach Plattformschreibt

Ändert, was die App im Landingpage-Editor außerhalb der Blöcke ändert: den Namen und den SEO-Titel und die SEO-Beschreibung (Bereich SEO im Design). Texte, Blöcke, Design, Video und Kalender ändert die API nicht; dafür gibt es den Editor in dealsky. Aktivieren und Deaktivieren gibt es in der App nicht, darum auch nicht hier (Löschen: DELETE). Nur übergebene Felder werden geändert; Werte, die schon so gespeichert sind, schreiben nichts.

Wirkung: Der Name ist nur Anzeige. Ein neuer SEO-Titel gilt für Seiten, die ab jetzt aus der Vorlage erzeugt werden, auch in laufenden Kampagnen. Bereits erzeugte persönliche Seiten behalten ihren Titel, weil die Vorlage beim Erzeugen kopiert wird. Den Abgleich mit vorhandenen Seiten bietet die App nur an, wenn der Titel im Editor geändert wird.

Gleichzeitige Bearbeitung: Der Editor der App speichert immer die ganze Seite. Ist die Vorlage gerade in dealsky geöffnet, überschreibt das nächste Speichern dort diese Änderung. Beim SEO-Titel und der SEO-Beschreibung schreibt die API die Seite nur, wenn sie sich seit dem Lesen nicht geändert hat, sonst antwortet sie 409 mit details.reason = concurrent_update; dann einfach erneut senden.

Die Antwort hat das Format von GET /v1/landing-page-templates/{id}. Gelöschte oder fremde Vorlagen antworten 404. Fehlt der Vorlage das Design (nie im Editor gespeichert), lässt sich der SEO-Titel nicht setzen: 422 mit details.reason = invalid_template.

Pfad-Parameter

  • idstring (uuid)Pflicht

    ID der Vorlage

Body

  • namestringmind. 1 Zeichenmax. 200 Zeichen

    Name der Vorlage, wie unter Assets, Landingpages angezeigt, muss nicht eindeutig sein

  • seo_titlestringmax. 300 Zeichen

    Seitentitel für Suchmaschinen und Link-Vorschau (structure.seo_title). Platzhalter wie {{first_name}} werden je Lead ersetzt

  • seo_descriptionstringmax. 1000 Zeichen

    Beschreibung für Suchmaschinen und Link-Vorschau (structure.seo_description), ebenfalls mit Platzhaltern

Felder der Antwort
  • idstring (uuid)

    ID der Vorlage (template_id bei den persönlichen Seiten)

  • namestring

    Name der Vorlage wie in der App

  • descriptionstring, kann null sein

    Beschreibung der Vorlage, null wenn keine hinterlegt ist

  • statusstring, kann null sein

    active = in Kampagnen und im Impact Studio wählbar

  • thumbnail_urlstring, kann null sein

    Vorschaubild der Vorlage

  • preview_urlstring

    Vorschau mit Beispiel-Lead in dealsky (braucht eine Anmeldung in dealsky). Vorlagen selbst haben keine öffentliche Adresse.

  • created_atstring (date-time)

    Anlagezeitpunkt der Vorlage (ISO 8601, UTC)

  • updated_atstring (date-time), kann null sein

    Letzte Änderung der Vorlage (ISO 8601, UTC)

  • structureobject

    Aufbau der Vorlage ohne Editor-Daten (Texte, Farben, Stile): Abschnitte, Blöcke, Video-Art, SEO-Angaben

    Felder anzeigen
    • layoutstring, kann null sein

      Grundaufbau: variant1 oder variant2

    • sectionsListe aus string, kann null sein

      Sichtbare Abschnitte unter dem Kopfbereich mit Video in ihrer Reihenfolge, z. B. comparison, cta, approach, faq, finalCta. null = Standardreihenfolge der Vorlage

    • hidden_sectionsListe aus string

      Ausgeblendete Abschnitte

    • blocksListe aus object

      Zusätzliche Blöcke auf der Hauptseite je Typ

      Felder anzeigen
      • typestring

        Blocktyp, z. B. text, image, explainer_video, video_personalized, calendar_embed, testimonial

      • countinteger

        Anzahl Blöcke dieses Typs

    • booking_page_blocksListe aus string

      Blocktypen der Buchungsseite. Leer, wenn ein externer CTA-Link aktiv ist.

    • thank_you_page_blocksListe aus string

      Blocktypen der Danke-Seite. Leer, wenn ein externer CTA-Link aktiv ist.

    • hero_video_typestring, kann null sein

      personalized = je Lead ein eigenes Video, static = dasselbe Video für alle

    • external_cta_urlstring, kann null sein

      Ziel der Buttons, wenn sie auf eine externe Seite statt auf die Buchungsseite führen

    • seo_titlestring, kann null sein

      Titel für Suchmaschinen und Link-Vorschau, Platzhalter wie {{first_name}} werden je Lead ersetzt

    • seo_descriptionstring, kann null sein

      Beschreibung für Suchmaschinen und Link-Vorschau, null wenn keine hinterlegt ist

  • landing_pages_countinteger

    Persönliche Landingpages, die aus dieser Vorlage erzeugt wurden

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/landing-page-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10" \
  -H "X-API-Key: $DEALSKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Outreach Geschäftsführer Herbst"
}'
const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/landing-page-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": "Outreach Geschäftsführer Herbst"
  }),
});
const { ok, data, error } = await res.json();
import os, requests

res = requests.request(
    "PATCH",
    "https://api.dealsky.io/functions/v1/api/v1/landing-page-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
    headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
    json={
        "name": "Outreach Geschäftsführer Herbst"
    },
)
print(res.json())
Antwort 200
{
  "ok": true,
  "data": {
    "id": "7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "name": "Outreach Geschäftsführer Herbst",
    "description": null,
    "status": "active",
    "thumbnail_url": "https://imagedelivery.net/k3Xr9aQ/system/lp-template-variant1/public",
    "preview_url": "https://app.dealsky.io/preview/demo-landing/7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "created_at": "2026-09-02T10:15:00.000Z",
    "updated_at": "2026-10-18T09:40:00.000Z",
    "structure": {
      "layout": "variant1",
      "sections": [
        "comparison",
        "cta",
        "approach",
        "finalCta"
      ],
      "hidden_sections": [
        "faq"
      ],
      "blocks": [
        {
          "type": "text",
          "count": 2
        },
        {
          "type": "testimonial",
          "count": 1
        }
      ],
      "booking_page_blocks": [
        "heading",
        "calendar_embed"
      ],
      "thank_you_page_blocks": [
        "heading",
        "text"
      ],
      "hero_video_type": "personalized",
      "external_cta_url": null,
      "seo_title": "Ein Video für {{first_name}}",
      "seo_description": "Eine persönliche Nachricht von Beispiel GmbH"
    },
    "landing_pages_count": 42
  },
  "meta": {
    "request_id": "req_7f3a…"
  }
}
#

Landingpage-Vorlage löschen

DEL/v1/landing-page-templates/{id}
Scope write:assetsRecht: Outreach Plattformschreibt

Löscht die Vorlage wie „Löschen“ unter Assets, Landingpages: Sie verschwindet aus der Liste und aus der Auswahl in Kampagnen und ist in dealsky nicht wiederherstellbar. Bereits erzeugte persönliche Seiten bleiben unverändert online (landing_pages_count in der Antwort), Bilder und Videos bleiben erhalten.

Schutz laufender Arbeit: Anders als die App löscht die API keine Vorlage, die noch genutzt wird, und antwortet dann 409 mit details.reason = template_in_use und details.used_by. Genutzt heißt: eine Kampagne im Status draft, active oder paused mit dieser Vorlage, eine nicht abgeschlossene Briefkampagne, ein laufender Landingpage-Lauf für eine Liste oder eine laufende Postfach-Sequenz bzw. wartende Video-Nachricht mit dieser Vorlage. error.details.used_by nennt je Fund type (campaign, letter_campaign, landing_page_job, inbox_sequence, inbox_video_send), id, name (Kampagnenname, sonst null), status und je nach Art campaign_id, list_id oder lead_id. Der Test-Key prüft dasselbe.

Die Antwort hat das Format von GET /v1/landing-page-templates/{id} mit status: deleted; ein späterer Abruf antwortet 404. Gelöschte oder fremde Vorlagen antworten 404.

Pfad-Parameter

  • idstring (uuid)Pflicht

    ID der Vorlage

Felder der Antwort
  • idstring (uuid)

    ID der Vorlage (template_id bei den persönlichen Seiten)

  • namestring

    Name der Vorlage wie in der App

  • descriptionstring, kann null sein

    Beschreibung der Vorlage, null wenn keine hinterlegt ist

  • statusstring, kann null sein

    active = in Kampagnen und im Impact Studio wählbar

  • thumbnail_urlstring, kann null sein

    Vorschaubild der Vorlage

  • preview_urlstring

    Vorschau mit Beispiel-Lead in dealsky (braucht eine Anmeldung in dealsky). Vorlagen selbst haben keine öffentliche Adresse.

  • created_atstring (date-time)

    Anlagezeitpunkt der Vorlage (ISO 8601, UTC)

  • updated_atstring (date-time), kann null sein

    Letzte Änderung der Vorlage (ISO 8601, UTC)

  • structureobject

    Aufbau der Vorlage ohne Editor-Daten (Texte, Farben, Stile): Abschnitte, Blöcke, Video-Art, SEO-Angaben

    Felder anzeigen
    • layoutstring, kann null sein

      Grundaufbau: variant1 oder variant2

    • sectionsListe aus string, kann null sein

      Sichtbare Abschnitte unter dem Kopfbereich mit Video in ihrer Reihenfolge, z. B. comparison, cta, approach, faq, finalCta. null = Standardreihenfolge der Vorlage

    • hidden_sectionsListe aus string

      Ausgeblendete Abschnitte

    • blocksListe aus object

      Zusätzliche Blöcke auf der Hauptseite je Typ

      Felder anzeigen
      • typestring

        Blocktyp, z. B. text, image, explainer_video, video_personalized, calendar_embed, testimonial

      • countinteger

        Anzahl Blöcke dieses Typs

    • booking_page_blocksListe aus string

      Blocktypen der Buchungsseite. Leer, wenn ein externer CTA-Link aktiv ist.

    • thank_you_page_blocksListe aus string

      Blocktypen der Danke-Seite. Leer, wenn ein externer CTA-Link aktiv ist.

    • hero_video_typestring, kann null sein

      personalized = je Lead ein eigenes Video, static = dasselbe Video für alle

    • external_cta_urlstring, kann null sein

      Ziel der Buttons, wenn sie auf eine externe Seite statt auf die Buchungsseite führen

    • seo_titlestring, kann null sein

      Titel für Suchmaschinen und Link-Vorschau, Platzhalter wie {{first_name}} werden je Lead ersetzt

    • seo_descriptionstring, kann null sein

      Beschreibung für Suchmaschinen und Link-Vorschau, null wenn keine hinterlegt ist

  • landing_pages_countinteger

    Persönliche Landingpages, die aus dieser Vorlage erzeugt wurden

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/landing-page-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/landing-page-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/landing-page-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
    headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json())
Antwort 200
{
  "ok": true,
  "data": {
    "id": "7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "name": "Outreach Geschäftsführer",
    "description": null,
    "status": "deleted",
    "thumbnail_url": "https://imagedelivery.net/k3Xr9aQ/system/lp-template-variant1/public",
    "preview_url": "https://app.dealsky.io/preview/demo-landing/7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "created_at": "2026-09-02T10:15:00.000Z",
    "updated_at": "2026-10-18T09:50:00.000Z",
    "structure": {
      "layout": "variant1",
      "sections": [
        "comparison",
        "cta",
        "approach",
        "finalCta"
      ],
      "hidden_sections": [
        "faq"
      ],
      "blocks": [
        {
          "type": "text",
          "count": 2
        },
        {
          "type": "testimonial",
          "count": 1
        }
      ],
      "booking_page_blocks": [
        "heading",
        "calendar_embed"
      ],
      "thank_you_page_blocks": [
        "heading",
        "text"
      ],
      "hero_video_type": "personalized",
      "external_cta_url": null,
      "seo_title": "Ein Video für {{first_name}}",
      "seo_description": "Eine persönliche Nachricht von Beispiel GmbH"
    },
    "landing_pages_count": 42
  },
  "meta": {
    "request_id": "req_7f3a…"
  }
}
#

Persönliche Landingpages auflisten

GET/v1/landing-pages
Scope read:assetsRecht: Outreach Plattformliest

Die persönlichen Seiten je Lead, wie im Impact Studio unter Inhalte, neueste zuerst, jeweils mit öffentlichem Link. Kennzahlen stehen beim Abruf einer einzelnen Seite. Für alle Seiten einer Liste oder Kampagne eignet sich GET /v1/leads?list_id=… bzw. ?campaign_id=…: jeder Lead trägt seinen Link in landing_page_url.

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

  • lead_idstring (uuid)

    Nur Seiten dieses Leads (ein Lead kann mehrere haben, wenn neu erzeugt wurde)

  • template_idstring (uuid)

    Nur Seiten aus dieser Vorlage

  • statusstringmax. 50 Zeichen

    Nur Seiten mit diesem Status, z. B. active

  • created_afterstring (date-time)

    Nur Seiten, die seitdem erzeugt wurden (für Abgleiche)

Felder der Antwort
  • idstring (uuid)

    ID der persönlichen Landingpage

  • lead_idstring (uuid), kann null sein

    Lead, dem die Seite gehört, null bei Seiten ohne Lead

  • template_idstring (uuid), kann null sein

    Vorlage, aus der die Seite erzeugt wurde

  • slugstring

    Letzter Teil der Adresse. Format nach Einstellung unter Rechtliches (anonym, Vorname, Vor- und Nachname, Firma)

  • urlstring, kann null sein

    Öffentliche Adresse: eigene Domain, wenn eine aktiv ist, sonst {workspace}.dealsky.app. null, wenn keine Domain eingerichtet ist

  • lead_namestring, kann null sein

    Name des Leads, wie er beim Erzeugen auf die Seite geschrieben wurde

  • company_namestring, kann null sein

    Firma des Leads, wie sie beim Erzeugen auf die Seite geschrieben wurde

  • statusstring, kann null sein

    Status der Seite, z. B. active. Gelöschte Seiten liefert die API nicht

  • expires_atstring (date-time), kann null sein

    Danach wird die Seite automatisch gelöscht. null = ohne Ablauf

  • video_urlstring, kann null sein

    Video oben auf der Seite (bei personalisierten Vorlagen das Video des Leads)

  • video_poster_urlstring, kann null sein

    Vorschaubild zum Video oben auf der Seite, null ohne Vorschaubild

  • created_atstring (date-time)

    Erzeugt am (ISO 8601, UTC); ab hier zählen die Kennzahlen

  • updated_atstring (date-time), kann null sein

    Letzte Änderung der Seite (ISO 8601, UTC)

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/landing-pages" \
  -H "X-API-Key: $DEALSKY_API_KEY"
const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/landing-pages", {
  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/landing-pages",
    headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json())
Antwort 200
{
  "ok": true,
  "data": [
    {
      "id": "3e8f1a2b-5c6d-4e7f-8a9b-0c1d2e3f4a5b",
      "lead_id": "5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
      "template_id": "7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "slug": "max-mustermann",
      "url": "https://beispiel.dealsky.app/max-mustermann",
      "lead_name": "Max Mustermann",
      "company_name": "Beispiel GmbH",
      "status": "active",
      "expires_at": null,
      "video_url": "https://cdn.dealskycloud.com/tenants/9d2c4b1a-0e3f-4a5b-8c7d-6e5f4a3b2c1d/videos/personalized/max-mustermann.mp4",
      "video_poster_url": "https://cdn.dealskycloud.com/tenants/9d2c4b1a-0e3f-4a5b-8c7d-6e5f4a3b2c1d/videos/personalized/max-mustermann.jpg",
      "created_at": "2026-10-14T09:00:00.000Z",
      "updated_at": "2026-10-14T09:00:00.000Z"
    }
  ],
  "meta": {
    "request_id": "req_7f3a…",
    "next_cursor": null,
    "has_more": false
  }
}
#

Eine persönliche Landingpage abrufen

GET/v1/landing-pages/{id}
Scope read:assetsRecht: Outreach Plattformliest

Mit öffentlichem Link, Domain und Kennzahlen (Aufrufe, Video, Klicks, Buchungen). Gezählt wird ab dem Erzeugen dieser Seite.

Pfad-Parameter

  • idstring (uuid)Pflicht

    ID der persönlichen Landingpage

Felder der Antwort
  • idstring (uuid)

    ID der persönlichen Landingpage

  • lead_idstring (uuid), kann null sein

    Lead, dem die Seite gehört, null bei Seiten ohne Lead

  • template_idstring (uuid), kann null sein

    Vorlage, aus der die Seite erzeugt wurde

  • slugstring

    Letzter Teil der Adresse. Format nach Einstellung unter Rechtliches (anonym, Vorname, Vor- und Nachname, Firma)

  • urlstring, kann null sein

    Öffentliche Adresse: eigene Domain, wenn eine aktiv ist, sonst {workspace}.dealsky.app. null, wenn keine Domain eingerichtet ist

  • lead_namestring, kann null sein

    Name des Leads, wie er beim Erzeugen auf die Seite geschrieben wurde

  • company_namestring, kann null sein

    Firma des Leads, wie sie beim Erzeugen auf die Seite geschrieben wurde

  • statusstring, kann null sein

    Status der Seite, z. B. active. Gelöschte Seiten liefert die API nicht

  • expires_atstring (date-time), kann null sein

    Danach wird die Seite automatisch gelöscht. null = ohne Ablauf

  • video_urlstring, kann null sein

    Video oben auf der Seite (bei personalisierten Vorlagen das Video des Leads)

  • video_poster_urlstring, kann null sein

    Vorschaubild zum Video oben auf der Seite, null ohne Vorschaubild

  • created_atstring (date-time)

    Erzeugt am (ISO 8601, UTC); ab hier zählen die Kennzahlen

  • updated_atstring (date-time), kann null sein

    Letzte Änderung der Seite (ISO 8601, UTC)

  • domainstring, kann null sein

    Domain der Adresse

  • domain_sourcestring, kann null sein

    custom_domain = eigene Domain, workspace_subdomain = {workspace}.dealsky.app

    custom_domain workspace_subdomain
  • statsobject

    Kennzahlen seit dem Erzeugen der Seite. Ist das Tracking in den Einstellungen aus, wird nichts gezählt.

    Felder anzeigen
    • visitsinteger

      Seitenaufrufe (ohne erkannte Bots und Link-Vorschauen)

    • unique_visitorsinteger, kann null sein

      Verschiedene Leads mit mindestens einem Aufruf, gezählt wie in der Kampagnen-Statistik der App. Eine persönliche Seite gehört genau einem Lead, darum 0 oder 1. dealsky speichert keine Besucherkennung, mehrere Geräte desselben Leads zählen also als ein Besucher. null bei Seiten ohne Lead.

    • video_viewsinteger

      Video gestartet (Hauptvideo der Seite)

    • cta_clicksinteger

      Klicks auf die Buttons der Seite (Kopf, Mitte, Ende, Erklärvideo)

    • booking_page_opensinteger

      Buchungsseite geöffnet

    • bookingsinteger

      Termine über die Seite gebucht

    • first_visit_atstring (date-time), kann null sein

      Erster Seitenaufruf (ISO 8601, UTC), null ohne Aufruf

    • last_visit_atstring (date-time), kann null sein

      Letzter Seitenaufruf (ISO 8601, UTC), null ohne Aufruf

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/landing-pages/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10" \
  -H "X-API-Key: $DEALSKY_API_KEY"
const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/landing-pages/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/landing-pages/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
    headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json())
Antwort 200
{
  "ok": true,
  "data": {
    "id": "3e8f1a2b-5c6d-4e7f-8a9b-0c1d2e3f4a5b",
    "lead_id": "5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
    "template_id": "7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "slug": "max-mustermann",
    "url": "https://beispiel.dealsky.app/max-mustermann",
    "lead_name": "Max Mustermann",
    "company_name": "Beispiel GmbH",
    "status": "active",
    "expires_at": null,
    "video_url": "https://cdn.dealskycloud.com/tenants/9d2c4b1a-0e3f-4a5b-8c7d-6e5f4a3b2c1d/videos/personalized/max-mustermann.mp4",
    "video_poster_url": "https://cdn.dealskycloud.com/tenants/9d2c4b1a-0e3f-4a5b-8c7d-6e5f4a3b2c1d/videos/personalized/max-mustermann.jpg",
    "created_at": "2026-10-14T09:00:00.000Z",
    "updated_at": "2026-10-14T09:00:00.000Z",
    "domain": "beispiel.dealsky.app",
    "domain_source": "workspace_subdomain",
    "stats": {
      "visits": 4,
      "unique_visitors": 1,
      "video_views": 2,
      "cta_clicks": 1,
      "booking_page_opens": 1,
      "bookings": 1,
      "first_visit_at": "2026-10-15T08:31:12.000Z",
      "last_visit_at": "2026-10-17T19:04:55.000Z"
    }
  },
  "meta": {
    "request_id": "req_7f3a…"
  }
}
#

Link der Landingpage eines Leads

GET/v1/leads/{id}/landing-page
Scope read:assetsRecht: Outreach Plattformliest

Der aktuelle öffentliche Link der neuesten Landingpage des Leads, gebildet wie in der App (eigene Domain, wenn eine aktiv ist, sonst {workspace}.dealsky.app/{slug}), dazu QR-Code, Video und Kennzahlen. Hat der Lead keine Seite (nie erzeugt, gelöscht oder abgelaufen), antwortet die API 404 mit error.details.reason = no_landing_page, auch wenn in landing_page_url des Leads noch eine alte Adresse steht.

Pfad-Parameter

  • idstring (uuid)Pflicht

    ID des Leads

Felder der Antwort
  • lead_idstring (uuid)

    ID des Leads

  • landing_page_idstring (uuid)

    ID der neuesten persönlichen Landingpage des Leads (wie GET /v1/landing-pages/{id})

  • urlstring, kann null sein

    Aktueller öffentlicher Link, gebildet wie in der App: eigene Domain, wenn eine aktiv ist, sonst {workspace}.dealsky.app/{slug}

  • domainstring, kann null sein

    Domain der Adresse, null wenn keine Domain eingerichtet ist

  • domain_sourcestring, kann null sein

    custom_domain = eigene Domain, workspace_subdomain = {workspace}.dealsky.app, null ohne Domain

    custom_domain workspace_subdomain
  • slugstring

    Letzter Teil der Adresse der Seite

  • template_idstring (uuid), kann null sein

    Vorlage, aus der die Seite erzeugt wurde

  • qr_code_urlstring, kann null sein

    QR-Code-Bild (PNG) zur Landingpage des Leads, entsteht beim Erzeugen für Briefe

  • video_urlstring, kann null sein

    Persönliches Video des Leads (Impact Studio)

  • video_thumbnail_urlstring, kann null sein

    Vorschaubild zum persönlichen Video des Leads, null ohne Video

  • page_video_urlstring, kann null sein

    Video oben auf der Seite (bei personalisierten Vorlagen dasselbe wie video_url, sonst das Video der Vorlage)

  • expires_atstring (date-time), kann null sein

    Danach wird die Seite automatisch gelöscht. null = ohne Ablauf

  • created_atstring (date-time)

    Erzeugt am (ISO 8601, UTC)

  • statsobject

    Kennzahlen seit dem Erzeugen der Seite. Ist das Tracking in den Einstellungen aus, wird nichts gezählt.

    Felder anzeigen
    • visitsinteger

      Seitenaufrufe (ohne erkannte Bots und Link-Vorschauen)

    • unique_visitorsinteger, kann null sein

      Verschiedene Leads mit mindestens einem Aufruf, gezählt wie in der Kampagnen-Statistik der App. Eine persönliche Seite gehört genau einem Lead, darum 0 oder 1. dealsky speichert keine Besucherkennung, mehrere Geräte desselben Leads zählen also als ein Besucher. null bei Seiten ohne Lead.

    • video_viewsinteger

      Video gestartet (Hauptvideo der Seite)

    • cta_clicksinteger

      Klicks auf die Buttons der Seite (Kopf, Mitte, Ende, Erklärvideo)

    • booking_page_opensinteger

      Buchungsseite geöffnet

    • bookingsinteger

      Termine über die Seite gebucht

    • first_visit_atstring (date-time), kann null sein

      Erster Seitenaufruf (ISO 8601, UTC), null ohne Aufruf

    • last_visit_atstring (date-time), kann null sein

      Letzter Seitenaufruf (ISO 8601, UTC), null ohne Aufruf

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/leads/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/landing-page" \
  -H "X-API-Key: $DEALSKY_API_KEY"
const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/leads/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/landing-page", {
  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/leads/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/landing-page",
    headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json())
Antwort 200
{
  "ok": true,
  "data": {
    "lead_id": "5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
    "landing_page_id": "3e8f1a2b-5c6d-4e7f-8a9b-0c1d2e3f4a5b",
    "url": "https://angebot.beispiel.de/max-mustermann",
    "domain": "angebot.beispiel.de",
    "domain_source": "custom_domain",
    "slug": "max-mustermann",
    "template_id": "7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "qr_code_url": "https://cdn.dealskycloud.com/tenants/9d2c4b1a-0e3f-4a5b-8c7d-6e5f4a3b2c1d/qr-codes/Max-Mustermann.png",
    "video_url": "https://cdn.dealskycloud.com/tenants/9d2c4b1a-0e3f-4a5b-8c7d-6e5f4a3b2c1d/videos/personalized/max-mustermann.mp4",
    "video_thumbnail_url": "https://cdn.dealskycloud.com/tenants/9d2c4b1a-0e3f-4a5b-8c7d-6e5f4a3b2c1d/videos/personalized/max-mustermann.jpg",
    "page_video_url": "https://cdn.dealskycloud.com/tenants/9d2c4b1a-0e3f-4a5b-8c7d-6e5f4a3b2c1d/videos/personalized/max-mustermann.mp4",
    "expires_at": null,
    "created_at": "2026-10-14T09:00:00.000Z",
    "stats": {
      "visits": 4,
      "unique_visitors": 1,
      "video_views": 2,
      "cta_clicks": 1,
      "booking_page_opens": 1,
      "bookings": 1,
      "first_visit_at": "2026-10-15T08:31:12.000Z",
      "last_visit_at": "2026-10-17T19:04:55.000Z"
    }
  },
  "meta": {
    "request_id": "req_7f3a…"
  }
}
#

Landingpage-Vorlage duplizieren

POST/v1/landing-page-templates/{id}/duplicate
Scope write:assetsRecht: Outreach Plattformschreibt

Legt eine Kopie einer aktiven Vorlage an, wie „Duplizieren“ unter Assets, Landingpages: dieselbe Seite (Texte, Design, Blöcke, Buchungs- und Danke-Seite, Kalender, Rechtliches), Name mit dem Zusatz (Kopie), sofort aktiv und in Kampagnen wählbar. Wie in der App ohne Vorschaubild (thumbnail_url ist null, bis die Kopie im Editor gespeichert wird). Persönliche Seiten der Vorlage werden nicht kopiert. Kostet nichts.

Die Antwort hat das Format von GET /v1/landing-page-templates/{id}. Gelöschte oder fremde Vorlagen antworten 404, nicht aktive 422 mit details.reason = template_inactive.

Pfad-Parameter

  • idstring (uuid)Pflicht

    ID der Vorlage

Body

  • namestringmind. 1 Zeichenmax. 200 Zeichen

    Name der Kopie. Ohne Angabe wie in der App: Name der Vorlage mit dem Zusatz (Kopie)

Mögliche Fehler

400 VALIDATION_ERROR401 INVALID_API_KEY402 PLAN_REQUIRED403 SCOPE_MISSING404 NOT_FOUND409 CONFLICT429 RATE_LIMITED
curl -X POST "https://api.dealsky.io/functions/v1/api/v1/landing-page-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/duplicate" \
  -H "X-API-Key: $DEALSKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/landing-page-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/duplicate", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.DEALSKY_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});
const { ok, data, error } = await res.json();
import os, requests

res = requests.request(
    "POST",
    "https://api.dealsky.io/functions/v1/api/v1/landing-page-templates/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/duplicate",
    headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
    json={},
)
print(res.json())
Antwort 201
{
  "ok": true,
  "data": {
    "id": "8d2e3f4a-5b6c-4d7e-8f9a-0b1c2d3e4f5a",
    "name": "Outreach Geschäftsführer (Kopie)",
    "description": null,
    "status": "active",
    "thumbnail_url": null,
    "preview_url": "https://app.dealsky.io/preview/demo-landing/8d2e3f4a-5b6c-4d7e-8f9a-0b1c2d3e4f5a",
    "created_at": "2026-10-18T09:30:00.000Z",
    "updated_at": "2026-10-18T09:30:00.000Z",
    "structure": {
      "layout": "variant1",
      "sections": [
        "comparison",
        "cta",
        "approach",
        "finalCta"
      ],
      "hidden_sections": [
        "faq"
      ],
      "blocks": [
        {
          "type": "text",
          "count": 2
        },
        {
          "type": "testimonial",
          "count": 1
        }
      ],
      "booking_page_blocks": [
        "heading",
        "calendar_embed"
      ],
      "thank_you_page_blocks": [
        "heading",
        "text"
      ],
      "hero_video_type": "personalized",
      "external_cta_url": null,
      "seo_title": "Ein Video für {{first_name}}",
      "seo_description": "Eine persönliche Nachricht von Beispiel GmbH"
    },
    "landing_pages_count": 0
  },
  "meta": {
    "request_id": "req_7f3a…"
  }
}