Einstellungen
Firmenprofil, eigene Domains und Buchungslinks
Eigene Domains auflisten
/v1/domainsread:accountRecht: Outreach PlattformliestDie eigenen Domains für Landingpages, wie sie in der App unter Einrichtung, Domain stehen, älteste zuerst. Ist eine Domain aktiv, bauen dealsky und diese API die Links der persönlichen Landingpages darauf auf (https://{hostname}/{slug}), sonst auf {workspace}.dealsky.app.
status: verifying heißt, der A-Record fehlt noch (Ziel steht in dns_target). ssl_pending: DNS stimmt, das Zertifikat wird eingerichtet. active: in Betrieb. error: Einrichtung gescheitert, Grund in error_message.
Anlegen, prüfen und entfernen geht nur in der App.
Query-Parameter
limitintegerab 1bis 100Einträge pro Seite (Standard 25, höchstens 100)
cursorstringmax. 200 ZeichenWert aus meta.next_cursor der vorigen Seite
Felder der Antwort
idstring (uuid)ID der eigenen Domain
hostnamestringDomain, z. B. angebot.beispiel.de
statusstringverifying: der A-Record fehlt noch. ssl_pending: DNS stimmt, das Zertifikat wird eingerichtet. active: in Betrieb. error: Einrichtung gescheitert, Grund in error_message. Weitere Werte sind möglich
ssl_activebooleanHTTPS-Zertifikat eingerichtet
dns_targetstring, kann null seinIP-Adresse, auf die der A-Record der Domain zeigen muss
error_messagestring, kann null seinGrund bei status error, sonst null
activated_atstring (date-time), kann null seinWann die Domain zuletzt als aktiv gemeldet wurde (DNS geprüft, SSL eingerichtet). null, solange sie nie aktiv war
created_atstring (date-time), kann null seinZeitpunkt, an dem die Domain in dealsky angelegt wurde
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/domains" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/domains", {
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/domains",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"id": "8c9d0e1f-2a3b-4c4d-8e5f-6a7b8c9d0e1f",
"hostname": "angebot.beispiel.de",
"status": "active",
"ssl_active": true,
"dns_target": "203.0.113.24",
"error_message": null,
"activated_at": "2026-09-03T11:20:00.000Z",
"created_at": "2026-09-03T10:05:00.000Z"
},
{
"id": "9d0e1f2a-3b4c-4d5e-9f6a-7b8c9d0e1f2a",
"hostname": "termin.beispiel.de",
"status": "verifying",
"ssl_active": false,
"dns_target": "203.0.113.24",
"error_message": null,
"activated_at": null,
"created_at": "2026-10-17T15:42:00.000Z"
}
],
"meta": {
"request_id": "req_7f3a…",
"next_cursor": null,
"has_more": false
}
}Buchungslinks auflisten
/v1/booking-linksread:crmRecht: Nur InboxliestDie Buchungslinks des Kontos (Kalender von Calendly, TidyCal, Cal.com oder eigene Buchungsseiten), wie sie unter Einrichtung, Kalender und im Termin-Menü des Postfachs stehen. Standard-Kalender zuerst, dann nach Name. Kostet nichts.
url ist die Adresse, die die App beim Öffnen und Kopieren nimmt; bei eingebetteten Kalendern liest sie die API aus dem Embed-Code. Für eine vorausgefüllte Buchungsseite wie beim Kopieren aus dem Postfach können name, first_name, last_name, email und company als Query-Parameter angehängt werden (Calendly, TidyCal und Cal.com lesen name und email). Direktbuchungs-Kalender (tidycal_direct, calendly_direct) haben keinen öffentlichen Link (url ist null) und sind nur in der App buchbar.
Für Nachrichten an Leads sind die Links mit show_in_inbox = true gedacht: Die gibt der Kunde für das Postfach frei. Recht wie in der App: Wer das Postfach öffnen darf (outreach.inbox), sieht dort alle Buchungslinks. Zugangsdaten zu Kalendern und den Embed-Code gibt die API nicht heraus. Anlegen und ändern geht nur in der App.
Query-Parameter
limitintegerab 1bis 100Einträge pro Seite (Standard 25, höchstens 100)
cursorstringmax. 200 ZeichenWert aus meta.next_cursor der vorigen Seite
categoryListe aus stringmax. 3 EinträgeEine oder mehrere Kategorien, kommagetrennt. landingpage enthält auch alte Einträge ohne Kategorie
landingpageoncallinboxcalendar_typeListe aus stringmax. 4 EinträgeEine oder mehrere Arten, kommagetrennt, z. B. link,embed (die mit öffentlichem Link)
linkembedtidycal_directcalendly_directshow_in_inboxbooleanNur Links, die für das Postfach freigegeben sind (true) bzw. nicht (false)
show_in_crmbooleanNur Links, die im Lead-Panel zur Direktbuchung freigegeben sind (true) bzw. nicht (false)
Felder der Antwort
idstring (uuid)ID des Buchungslinks
namestringName, wie er in der App steht
calendar_typestringArt: link (externe Buchungsseite), embed (eingebetteter Kalender), tidycal_direct oder calendly_direct (Direktbuchung in der App, ohne öffentlichen Link)
linkembedtidycal_directcalendly_directurlstring, kann null seinÖffentliche Buchungsseite, wie die App sie öffnet und kopiert (bei embed aus dem Embed-Code gelesen). null, wenn es keine gibt, z. B. bei Direktbuchung
categorystringlandingpage: Kalender für Landingpages und Lead-Panel, oncall: Telefon-Termine, inbox: nur im Termin-Menü des Postfachs angelegt
landingpageoncallinboxis_defaultbooleanStandard-Kalender der Landingpages
show_in_crmbooleanIm Lead-Panel zur Direktbuchung freigegeben
show_in_inboxbooleanIm Termin-Menü des Postfachs freigegeben. Für Nachrichten an Leads sind das die Links, die der Kunde dafür vorgesehen hat
created_atstring (date-time), kann null seinZeitpunkt 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/booking-links" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/booking-links", {
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/booking-links",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"id": "4e5f6a7b-8c9d-4e0f-9a1b-2c3d4e5f6a7b",
"name": "Erstgespräch 30 Minuten",
"calendar_type": "link",
"url": "https://calendly.com/beispiel-gmbh/erstgespraech",
"category": "landingpage",
"is_default": true,
"show_in_crm": false,
"show_in_inbox": true,
"created_at": "2026-09-02T10:15:00.000Z",
"updated_at": "2026-10-01T08:30:00.000Z"
},
{
"id": "5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c",
"name": "Demo mit Anna",
"calendar_type": "embed",
"url": "https://cal.com/anna-beispiel/demo",
"category": "landingpage",
"is_default": false,
"show_in_crm": false,
"show_in_inbox": false,
"created_at": "2026-09-10T14:00:00.000Z",
"updated_at": "2026-09-10T14:00:00.000Z"
},
{
"id": "6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d",
"name": "Setting-Call (TidyCal)",
"calendar_type": "tidycal_direct",
"url": null,
"category": "landingpage",
"is_default": false,
"show_in_crm": true,
"show_in_inbox": false,
"created_at": "2026-09-12T09:00:00.000Z",
"updated_at": "2026-09-12T09:00:00.000Z"
}
],
"meta": {
"request_id": "req_7f3a…",
"next_cursor": null,
"has_more": false
}
}Einen Buchungslink abrufen
/v1/booking-links/{id}read:crmRecht: Nur InboxliestEin Buchungslink mit denselben Feldern wie in der Liste. 404, wenn es die ID im Konto nicht gibt. Kostet nichts.
Pfad-Parameter
idstring (uuid)PflichtID des Buchungslinks
Felder der Antwort
idstring (uuid)ID des Buchungslinks
namestringName, wie er in der App steht
calendar_typestringArt: link (externe Buchungsseite), embed (eingebetteter Kalender), tidycal_direct oder calendly_direct (Direktbuchung in der App, ohne öffentlichen Link)
linkembedtidycal_directcalendly_directurlstring, kann null seinÖffentliche Buchungsseite, wie die App sie öffnet und kopiert (bei embed aus dem Embed-Code gelesen). null, wenn es keine gibt, z. B. bei Direktbuchung
categorystringlandingpage: Kalender für Landingpages und Lead-Panel, oncall: Telefon-Termine, inbox: nur im Termin-Menü des Postfachs angelegt
landingpageoncallinboxis_defaultbooleanStandard-Kalender der Landingpages
show_in_crmbooleanIm Lead-Panel zur Direktbuchung freigegeben
show_in_inboxbooleanIm Termin-Menü des Postfachs freigegeben. Für Nachrichten an Leads sind das die Links, die der Kunde dafür vorgesehen hat
created_atstring (date-time), kann null seinZeitpunkt 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/booking-links/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/booking-links/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/booking-links/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": {
"id": "4e5f6a7b-8c9d-4e0f-9a1b-2c3d4e5f6a7b",
"name": "Erstgespräch 30 Minuten",
"calendar_type": "link",
"url": "https://calendly.com/beispiel-gmbh/erstgespraech",
"category": "landingpage",
"is_default": true,
"show_in_crm": false,
"show_in_inbox": true,
"created_at": "2026-09-02T10:15:00.000Z",
"updated_at": "2026-10-01T08:30:00.000Z"
},
"meta": {
"request_id": "req_7f3a…"
}
}Firmenprofil und Firmenwissen
/v1/company-profileread:accountRecht: Inhaber oder AdminliestWas der Kunde in dealsky über seine Firma hinterlegt hat und was die KI-Texte der App nutzen: Firmendaten (Einrichtung, Unternehmen) und das Firmenwissen mit Marke, Angebot und Zielgruppe, Ansprache und Tonalität sowie weiteren Notizen (z. B. Schreibstil). Kostet nichts.
Die festen Felder entsprechen den Reitern Brand, Produkt & ICP und Guidelines des Firmenwissens; nicht gepflegte Felder sind null bzw. eine leere Liste. Notizen mit linkedin_account_id gelten nur für dieses LinkedIn-Konto und gehen dort dem allgemeinen Eintrag gleichen Namens vor. Höchstens die 300 zuletzt geänderten Einträge, wie in der App.
Wie die Einstellungsseiten in der App nur für Inhaber und Admins. Ändern geht nur in der App.
Felder der Antwort
companyobjectFirmendaten wie unter Einrichtung, Unternehmen
Felder anzeigen
namestringFirmenname des Kontos
website_urlstring, kann null seinWebsite aus Einrichtung, Unternehmen
logo_urlstring, kann null seinLogo aus Einrichtung, Unternehmen (nur http(s)-Adressen)
brandobjectMarke wie im Reiter Brand des Firmenwissens. Nicht gepflegt: null bzw. leere Liste
Felder anzeigen
namestring, kann null seinMarkenname (Firmenwissen
firmenname)descriptionstring, kann null seinBeschreibung (Firmenwissen
brand_description, früherdescription)websitestring, kann null seinURL (Firmenwissen
website)industrystring, kann null seinBranche (Firmenwissen
branche)languagesListe aus stringSprache(n) (Firmenwissen
brand_languages). Liste, in der App als Komma-Liste gepflegtcompetitorsListe aus stringWettbewerber (Firmenwissen
brand_competitors). Liste, in der App als Komma-Liste gepflegtcolorsListe aus stringFarben (Firmenwissen
brand_colors). Hex-Farben wie #FF6B00logo_urlstring, kann null seinLogo (Firmenwissen
brand_logo, früherlogo). Nur http(s)-Adressen
productobjectAngebot und Zielgruppe wie im Reiter Produkt & ICP
Felder anzeigen
offerstring, kann null seinAngebot (Firmenwissen
hauptangebot, früheroffering,angebot_website)target_audiencestring, kann null seinICP / Zielgruppe (Firmenwissen
zielgruppe, früheraudience)unique_selling_pointstring, kann null seinUSP / Alleinstellung (Firmenwissen
unique_mechanism)pain_pointsstring, kann null seinSchmerzpunkte (Firmenwissen
pain, früheremotional_pain)
guidelinesobjectAnsprache und Tonalität wie im Reiter Guidelines
Felder anzeigen
salutationstring, kann null seinAnsprache (Firmenwissen
ansprache)tonestring, kann null seinTonalität & Do/Don’ts (Firmenwissen
guidelines)
notesListe aus objectWeitere Notizen, neueste zuerst, z. B. Schreibstil, Ist-Zustand, Fallstudie. Leere Einträge und technische Zwischenstände fehlen
Felder anzeigen
keystringSchlüssel im Firmenwissen. Beginnt mit acct:<Konto>: bei Einträgen für ein LinkedIn-Konto
labelstringName, wie ihn die App unter „Weitere Notizen“ zeigt
categorystring, kann null seinKategorie, z. B. stil, angebot, sonstiges
contentstringInhalt
linkedin_account_idstring, kann null seinGilt nur für dieses LinkedIn-Konto (ID wie in /v1/linkedin/accounts) und geht dort dem allgemeinen Eintrag mit gleichem Namen vor. null: gilt für die ganze Firma
updated_atstring (date-time), kann null seinZeitpunkt der letzten Änderung des Eintrags
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/company-profile" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/company-profile", {
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/company-profile",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": {
"company": {
"name": "Beispiel GmbH",
"website_url": "https://beispiel.de",
"logo_url": "https://imagedelivery.net/beispiel/tenants/logo/public"
},
"brand": {
"name": "Beispiel",
"description": "Wir bringen mittelständischen Maschinenbauern planbar neue Anfragen über LinkedIn.",
"website": "https://beispiel.de",
"industry": "B2B-Dienstleistung",
"languages": [
"Deutsch"
],
"competitors": [
"Agentur Muster",
"Vertriebsprofis AG"
],
"colors": [
"#FF6B00",
"#1A1A1A"
],
"logo_url": "https://imagedelivery.net/beispiel/tenants/logo/public"
},
"product": {
"offer": "LinkedIn-Akquise als Komplettpaket: Zielgruppe, Ansprache und Termine in den Kalender des Vertriebs.",
"target_audience": "Geschäftsführer und Vertriebsleiter im Maschinenbau, 20 bis 500 Mitarbeitende, DACH",
"unique_selling_point": "Persönliche Videos je Lead statt Massennachrichten",
"pain_points": "Neukunden kommen nur über Empfehlungen, der Vertrieb hat keine planbaren Termine"
},
"guidelines": {
"salutation": "Sie-Form",
"tone": "Sachlich und kurz. Keine Emojis, keine Superlative, kein Fachchinesisch."
},
"notes": [
{
"key": "writing_style",
"label": "Schreibstil",
"category": "stil",
"content": "Kurze Sätze, direkte Frage am Ende, per Sie.",
"linkedin_account_id": null,
"updated_at": "2026-10-12T09:00:00.000Z"
},
{
"key": "acct:7c8d9e0f-1a2b-4c3d-8e4f-5a6b7c8d9e0f:writing_style",
"label": "Schreibstil",
"category": "stil",
"content": "Locker, per Du, mit kurzem Bezug auf den letzten Beitrag.",
"linkedin_account_id": "7c8d9e0f-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
"updated_at": "2026-10-12T09:00:00.000Z"
},
{
"key": "before_state",
"label": "Ist-Zustand",
"category": "zielgruppe",
"content": "Akquise läuft nur über Messen und Empfehlungen.",
"linkedin_account_id": null,
"updated_at": "2026-09-30T16:20:00.000Z"
}
]
},
"meta": {
"request_id": "req_7f3a…"
}
}