Dauerläufe
LinkedIn-Dauerläufe (Signale): Einstellungen, gefundene Personen und Kontingent lesen
LinkedIn-Dauerläufe auflisten
/v1/engage/flowsread:campaignsRecht: Dauerlauf: Übersicht und StatistikenliestDie Dauerläufe der Seite LinkedIn Dauerlauf, neueste zuerst, mit denselben Angaben wie die Kacheln: Status, Konto, aktive Signalquellen, Zielgruppe, Zielliste, Kampagne, Tagesziel und Kennzahlen. Sichtbar wie in der App unter LinkedIn Dauerlauf: Inhaber und Admins sehen alle Dauerläufe, Mitglieder nur die auf ihren zugewiesenen LinkedIn-Konten. Ein Dauerlauf auf einem anderen Konto ergibt 404. Liest nur gespeicherte Daten: kein Aufruf bei LinkedIn, es wird kein Kontingent verbraucht.
Query-Parameter
limitintegerab 1bis 25Einträge pro Seite (Standard und höchstens 25, je Dauerlauf werden Kennzahlen gezählt)
cursorstringmax. 200 ZeichenWert aus meta.next_cursor der vorigen Seite
statusListe aus stringEin oder mehrere Status, kommagetrennt
draftactivepausedthrottledexhaustederroraccount_idstring (uuid)Nur Dauerläufe dieses LinkedIn-Kontos
Felder der Antwort
idstring (uuid)ID des Dauerlaufs
namestringName des Dauerlaufs
statusstringdraft: Entwurf, läuft nicht. active: läuft. paused: pausiert. throttled: von LinkedIn gebremst. exhausted: keine neuen Quellen mehr. error: gestoppt, Grund in status_message.
draftactivepausedthrottledexhaustederrorlinkedin_accountobjectLinkedIn-Konto, mit dem der Dauerlauf sucht
Felder anzeigen
idstring (uuid)Siehe GET /v1/linkedin/accounts/{id}
namestring, kann null seinAnzeigename des Kontos, null, wenn nicht bekannt
source_kindsListe aus stringAktive Signalquellen. keyword_posts: Reaktionen auf ein Thema. keyword_authors: Verfasser zu einem Thema. profile_engagers: Reaktionen auf bestimmte Profile. company_engagers: Reaktionen auf Unternehmensseiten. relations: eigene Kontakte reaktivieren. hiring_companies: Firmen, die einstellen. icp_search: direkt nach Zielgruppe suchen. profile_followers: Follower eines Profils. job_posts: Stellenanzeigen als Signal.
keyword_postskeyword_authorsprofile_engagerscompany_engagersrelationshiring_companiesicp_searchprofile_followersjob_postsicpobjectZielgruppe wie im Abschnitt Zielgruppe der App
Felder anzeigen
modestringStrenge der KI-Prüfung: precision (streng), broad (großzügig), off (keine Prüfung, jeder Kontakt wird behalten)
precisionbroadoffdescriptionstring, kann null seinZielgruppe in eigenen Worten (Maßstab der KI-Bewertung)
offerstring, kann null seinEigenes Angebot, gegen das die KI die Person liest
titlesListe aus stringJobtitel der Zielgruppe
keywordsListe aus stringStichwörter im Profil der Zielperson
industriesListe aus stringBranchen
locationsListe aus stringOrte und Regionen
company_sizesListe aus stringFirmengrößen nach Mitarbeitern: A = 1, B = 2 bis 10, C = 11 bis 50, D = 51 bis 200, E = 201 bis 500, F = 501 bis 1.000, G = 1.001 bis 5.000, H = 5.001 bis 10.000, I = mehr als 10.000
ABCDEFGHIprofile_languagestring, kann null seinProfilsprache (de, en, fr, es, it, nl, pt, pl, tr)
required_keywordsListe aus stringPflicht-Stichwörter aus einer früheren Fassung. In der App nicht mehr einstellbar, filtern bei Altbeständen aber weiter.
required_keywords_modestringany: eines der Pflicht-Stichwörter reicht. all: alle müssen vorkommen.
anyallexcluded_keywordsListe aus stringAusschluss-Stichwörter: wer sie im Profil hat, wird aussortiert
include_connectionsbooleantrue: schon mit dem Konto vernetzte Personen werden übernommen. false (Standard): sie werden aussortiert.
target_listobject, kann null seinLead-Liste, in die übernommene Kontakte kommen. null ohne Zielliste
Felder anzeigen
idstring (uuid)ID der Zielliste
namestring, kann null seinName der Zielliste
campaignobject, kann null seinVerknüpfte Kampagne. null, wenn übernommene Kontakte in keine Kampagne gehen
Felder anzeigen
idstring (uuid)ID der Kampagne, in die übernommene Kontakte automatisch eingeschrieben werden
namestring, kann null seinName der Kampagne, in die übernommene Kontakte automatisch eingeschrieben werden
daily_lead_targetintegerAngepeilte neue Kontakte pro Tag
statsobjectZähler des Dauerlaufs, wie die App sie am Dauerlauf zeigt
Felder anzeigen
imported_todayintegerHeute übernommene Kontakte (UTC-Tag, wie das Tagesziel)
imported_totalintegerAlle je übernommenen Kontakte
imported_7dintegerÜbernommen, in den letzten 7 Tagen gefunden
matched_7dintegerPassend bewertet, in den letzten 7 Tagen gefunden
rejected_7dintegerAussortiert, in den letzten 7 Tagen gefunden
backlogintegerRückstau: passend bewertete Kontakte, die auf einen freien Platz im Tagesziel warten (ohne Zeitfenster). Ab dem Doppelten des Tagesziels sucht der Dauerlauf nichts Neues, bis der Rückstau abgebaut ist.
salutation_pendingintegerKontakte mit unsicherer Anrede. Sie gehen erst nach einer Entscheidung in der App in Liste und Kampagne.
profile_checks_pendingintegerPersonen, deren Profil noch besucht wird, um Position oder Ort zu prüfen
pending_companiesintegerVon „Firmen, die einstellen“ gefundene Firmen, deren Entscheider der nächste Lauf sucht
sources_activeintegerAktive Signalquellen
next_run_atstring (date-time), kann null seinNächster Lauf: früheste Fälligkeit der aktiven Quellen. Leer, wenn der Dauerlauf nicht aktiv ist.
last_run_atstring (date-time), kann null seinLetzter Lauf des Dauerlaufs, null vor dem ersten Lauf
search_throttled_untilstring (date-time), kann null seinSuche gebremst bis (LinkedIn-Grenze erreicht)
status_messagestring, kann null seinHinweis oder Stopp-Grund, wie ihn die App am Dauerlauf zeigt
created_bystring (uuid), kann null seinTeam-Mitglied, das den Dauerlauf angelegt hat (siehe /v1/team)
created_atstring (date-time)Angelegt am
updated_atstring (date-time)Zuletzt geändert am
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/engage/flows" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/engage/flows", {
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/engage/flows",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"id": "8d2f4a1c-3b5e-4f6a-9c7d-1e2f3a4b5c6d",
"name": "Geschäftsführer Logistik NRW",
"status": "active",
"linkedin_account": {
"id": "4c8e2a1b-7d3f-4e5a-9b6c-1d2e3f4a5b6c",
"name": "Anna Beispiel"
},
"source_kinds": [
"keyword_posts",
"icp_search"
],
"icp": {
"mode": "precision",
"description": "Geschäftsführer und Inhaber von Speditionen mit 20 bis 500 Mitarbeitern in Nordrhein-Westfalen",
"offer": "Wir digitalisieren die Disposition von Speditionen, ohne dass das Team neue Software lernen muss.",
"titles": [
"Geschäftsführer",
"Inhaber",
"Leiter Disposition"
],
"keywords": [
"Spedition",
"Logistik"
],
"industries": [
"Transport und Logistik"
],
"locations": [
"Nordrhein-Westfalen, Deutschland"
],
"company_sizes": [
"C",
"D",
"E"
],
"profile_language": "de",
"required_keywords": [],
"required_keywords_mode": "any",
"excluded_keywords": [
"Student",
"Recruiter"
],
"include_connections": false
},
"target_list": {
"id": "1f4e2d3c-7b6a-4c5d-9e8f-0a1b2c3d4e5f",
"name": "Dauerlauf Logistik NRW"
},
"campaign": {
"id": "ca6b1f2e-3d4c-4b5a-8e9f-0a1b2c3d4e5f",
"name": "Geschäftsführer Logistik"
},
"daily_lead_target": 15,
"stats": {
"imported_today": 6,
"imported_total": 214,
"imported_7d": 52,
"matched_7d": 18,
"rejected_7d": 140,
"backlog": 9,
"salutation_pending": 2,
"profile_checks_pending": 3,
"pending_companies": 0,
"sources_active": 2
},
"next_run_at": "2026-10-18T10:40:00+00:00",
"last_run_at": "2026-10-18T10:30:12+00:00",
"search_throttled_until": null,
"status_message": null,
"created_by": "7f1e2d3c-4b5a-4968-8776-5a4b3c2d1e0f",
"created_at": "2026-09-02T08:15:00+00:00",
"updated_at": "2026-10-18T10:30:12+00:00"
}
],
"meta": {
"request_id": "req_7f3a…",
"next_cursor": null,
"has_more": false
}
}Einen LinkedIn-Dauerlauf abrufen
/v1/engage/flows/{id}read:campaignsRecht: Dauerlauf: Übersicht und StatistikenliestWie die Detailseite eines Dauerlaufs: alle Angaben der Liste, dazu alle Signalquellen mit Einstellungen, Takt und Auffälligkeiten sowie das heutige Kontingent des LinkedIn-Kontos. Sichtbar wie in der App unter LinkedIn Dauerlauf: Inhaber und Admins sehen alle Dauerläufe, Mitglieder nur die auf ihren zugewiesenen LinkedIn-Konten. Ein Dauerlauf auf einem anderen Konto ergibt 404. Liest nur gespeicherte Daten: kein Aufruf bei LinkedIn, es wird kein Kontingent verbraucht.
Pfad-Parameter
idstring (uuid)PflichtID des Dauerlaufs
Felder der Antwort
idstring (uuid)ID des Dauerlaufs
namestringName des Dauerlaufs
statusstringdraft: Entwurf, läuft nicht. active: läuft. paused: pausiert. throttled: von LinkedIn gebremst. exhausted: keine neuen Quellen mehr. error: gestoppt, Grund in status_message.
draftactivepausedthrottledexhaustederrorlinkedin_accountobjectLinkedIn-Konto, mit dem der Dauerlauf sucht
Felder anzeigen
idstring (uuid)Siehe GET /v1/linkedin/accounts/{id}
namestring, kann null seinAnzeigename des Kontos, null, wenn nicht bekannt
source_kindsListe aus stringAktive Signalquellen. keyword_posts: Reaktionen auf ein Thema. keyword_authors: Verfasser zu einem Thema. profile_engagers: Reaktionen auf bestimmte Profile. company_engagers: Reaktionen auf Unternehmensseiten. relations: eigene Kontakte reaktivieren. hiring_companies: Firmen, die einstellen. icp_search: direkt nach Zielgruppe suchen. profile_followers: Follower eines Profils. job_posts: Stellenanzeigen als Signal.
keyword_postskeyword_authorsprofile_engagerscompany_engagersrelationshiring_companiesicp_searchprofile_followersjob_postsicpobjectZielgruppe wie im Abschnitt Zielgruppe der App
Felder anzeigen
modestringStrenge der KI-Prüfung: precision (streng), broad (großzügig), off (keine Prüfung, jeder Kontakt wird behalten)
precisionbroadoffdescriptionstring, kann null seinZielgruppe in eigenen Worten (Maßstab der KI-Bewertung)
offerstring, kann null seinEigenes Angebot, gegen das die KI die Person liest
titlesListe aus stringJobtitel der Zielgruppe
keywordsListe aus stringStichwörter im Profil der Zielperson
industriesListe aus stringBranchen
locationsListe aus stringOrte und Regionen
company_sizesListe aus stringFirmengrößen nach Mitarbeitern: A = 1, B = 2 bis 10, C = 11 bis 50, D = 51 bis 200, E = 201 bis 500, F = 501 bis 1.000, G = 1.001 bis 5.000, H = 5.001 bis 10.000, I = mehr als 10.000
ABCDEFGHIprofile_languagestring, kann null seinProfilsprache (de, en, fr, es, it, nl, pt, pl, tr)
required_keywordsListe aus stringPflicht-Stichwörter aus einer früheren Fassung. In der App nicht mehr einstellbar, filtern bei Altbeständen aber weiter.
required_keywords_modestringany: eines der Pflicht-Stichwörter reicht. all: alle müssen vorkommen.
anyallexcluded_keywordsListe aus stringAusschluss-Stichwörter: wer sie im Profil hat, wird aussortiert
include_connectionsbooleantrue: schon mit dem Konto vernetzte Personen werden übernommen. false (Standard): sie werden aussortiert.
target_listobject, kann null seinLead-Liste, in die übernommene Kontakte kommen. null ohne Zielliste
Felder anzeigen
idstring (uuid)ID der Zielliste
namestring, kann null seinName der Zielliste
campaignobject, kann null seinVerknüpfte Kampagne. null, wenn übernommene Kontakte in keine Kampagne gehen
Felder anzeigen
idstring (uuid)ID der Kampagne, in die übernommene Kontakte automatisch eingeschrieben werden
namestring, kann null seinName der Kampagne, in die übernommene Kontakte automatisch eingeschrieben werden
daily_lead_targetintegerAngepeilte neue Kontakte pro Tag
statsobjectZähler des Dauerlaufs, wie die App sie am Dauerlauf zeigt
Felder anzeigen
imported_todayintegerHeute übernommene Kontakte (UTC-Tag, wie das Tagesziel)
imported_totalintegerAlle je übernommenen Kontakte
imported_7dintegerÜbernommen, in den letzten 7 Tagen gefunden
matched_7dintegerPassend bewertet, in den letzten 7 Tagen gefunden
rejected_7dintegerAussortiert, in den letzten 7 Tagen gefunden
backlogintegerRückstau: passend bewertete Kontakte, die auf einen freien Platz im Tagesziel warten (ohne Zeitfenster). Ab dem Doppelten des Tagesziels sucht der Dauerlauf nichts Neues, bis der Rückstau abgebaut ist.
salutation_pendingintegerKontakte mit unsicherer Anrede. Sie gehen erst nach einer Entscheidung in der App in Liste und Kampagne.
profile_checks_pendingintegerPersonen, deren Profil noch besucht wird, um Position oder Ort zu prüfen
pending_companiesintegerVon „Firmen, die einstellen“ gefundene Firmen, deren Entscheider der nächste Lauf sucht
sources_activeintegerAktive Signalquellen
next_run_atstring (date-time), kann null seinNächster Lauf: früheste Fälligkeit der aktiven Quellen. Leer, wenn der Dauerlauf nicht aktiv ist.
last_run_atstring (date-time), kann null seinLetzter Lauf des Dauerlaufs, null vor dem ersten Lauf
search_throttled_untilstring (date-time), kann null seinSuche gebremst bis (LinkedIn-Grenze erreicht)
status_messagestring, kann null seinHinweis oder Stopp-Grund, wie ihn die App am Dauerlauf zeigt
created_bystring (uuid), kann null seinTeam-Mitglied, das den Dauerlauf angelegt hat (siehe /v1/team)
created_atstring (date-time)Angelegt am
updated_atstring (date-time)Zuletzt geändert am
sourcesListe aus objectAlle Signalquellen, auch pausierte
Felder anzeigen
idstring (uuid)ID der Signalquelle
kindstringkeyword_posts: Reaktionen auf ein Thema. keyword_authors: Verfasser zu einem Thema. profile_engagers: Reaktionen auf bestimmte Profile. company_engagers: Reaktionen auf Unternehmensseiten. relations: eigene Kontakte reaktivieren. hiring_companies: Firmen, die einstellen. icp_search: direkt nach Zielgruppe suchen. profile_followers: Follower eines Profils. job_posts: Stellenanzeigen als Signal.
keyword_postskeyword_authorsprofile_engagerscompany_engagersrelationshiring_companiesicp_searchprofile_followersjob_postsstatusstringactive: läuft mit. paused: pausiert. exhausted: Schlafphase, meldet sich von selbst zurück. error: gestoppt.
activepausedexhaustederrorconfigobjectEinstellungen der Quelle wie im Assistenten der App, je Art verschieden (z. B. keywords, profiles, companies, location). Interne Laufdaten (Cursor, bekannte Beiträge) sind nicht enthalten.
next_run_atstring (date-time), kann null seinFälligkeit. Zählt nur, solange Quelle und Dauerlauf aktiv sind.
last_run_atstring (date-time), kann null seinLetzter Lauf dieser Quelle, null vor dem ersten Lauf
consecutive_failuresintegerFehlversuche in Folge; danach wartet die Quelle länger
consecutive_empty_runsintegerLäufe ohne Neues in Folge; danach schaut die Quelle seltener nach
errorstring, kann null seinLetzte Auffälligkeit der Quelle, wie in der App
quotaobjectHeutiges LinkedIn-Kontingent des Kontos, das der Dauerlauf nutzt
Felder anzeigen
account_idstring (uuid)LinkedIn-Konto. Das Kontingent gilt je Konto, alle Dauerläufe des Kontos teilen es.
datestring (date)Tag der Zähler (UTC)
readsobjectLese-Abrufe bei LinkedIn (Reaktionen und Kommentare)
Felder anzeigen
usedintegerheute verbraucht, alle Wege zusammen
limitintegerTagesgrenze
background_usedintegerdavon durch Dauerläufe im Hintergrund
background_limitintegerGrenze für Dauerläufe im Hintergrund, innerhalb der Tagesgrenze
search_readsobjectSuchtreffer, geteilt mit der LinkedIn-Suche der App
Felder anzeigen
usedintegerheute verbraucht, alle Wege zusammen
limitintegerTagesgrenze
background_usedintegerdavon durch Dauerläufe im Hintergrund
background_limitintegerGrenze für Dauerläufe im Hintergrund, innerhalb der Tagesgrenze
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/engage/flows/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/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": {
"id": "8d2f4a1c-3b5e-4f6a-9c7d-1e2f3a4b5c6d",
"name": "Geschäftsführer Logistik NRW",
"status": "active",
"linkedin_account": {
"id": "4c8e2a1b-7d3f-4e5a-9b6c-1d2e3f4a5b6c",
"name": "Anna Beispiel"
},
"source_kinds": [
"keyword_posts",
"icp_search"
],
"icp": {
"mode": "precision",
"description": "Geschäftsführer und Inhaber von Speditionen mit 20 bis 500 Mitarbeitern in Nordrhein-Westfalen",
"offer": "Wir digitalisieren die Disposition von Speditionen, ohne dass das Team neue Software lernen muss.",
"titles": [
"Geschäftsführer",
"Inhaber",
"Leiter Disposition"
],
"keywords": [
"Spedition",
"Logistik"
],
"industries": [
"Transport und Logistik"
],
"locations": [
"Nordrhein-Westfalen, Deutschland"
],
"company_sizes": [
"C",
"D",
"E"
],
"profile_language": "de",
"required_keywords": [],
"required_keywords_mode": "any",
"excluded_keywords": [
"Student",
"Recruiter"
],
"include_connections": false
},
"target_list": {
"id": "1f4e2d3c-7b6a-4c5d-9e8f-0a1b2c3d4e5f",
"name": "Dauerlauf Logistik NRW"
},
"campaign": {
"id": "ca6b1f2e-3d4c-4b5a-8e9f-0a1b2c3d4e5f",
"name": "Geschäftsführer Logistik"
},
"daily_lead_target": 15,
"stats": {
"imported_today": 6,
"imported_total": 214,
"imported_7d": 52,
"matched_7d": 18,
"rejected_7d": 140,
"backlog": 9,
"salutation_pending": 2,
"profile_checks_pending": 3,
"pending_companies": 0,
"sources_active": 2
},
"next_run_at": "2026-10-18T10:40:00+00:00",
"last_run_at": "2026-10-18T10:30:12+00:00",
"search_throttled_until": null,
"status_message": null,
"created_by": "7f1e2d3c-4b5a-4968-8776-5a4b3c2d1e0f",
"created_at": "2026-09-02T08:15:00+00:00",
"updated_at": "2026-10-18T10:30:12+00:00",
"sources": [
{
"id": "5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d",
"kind": "keyword_posts",
"status": "active",
"config": {
"keywords": [
"Disposition",
"Spedition digitalisieren"
],
"sort_by": "date",
"include_reactions": true,
"include_comments": true,
"max_posts_per_run": 2
},
"next_run_at": "2026-10-18T10:40:00+00:00",
"last_run_at": "2026-10-18T10:30:12+00:00",
"consecutive_failures": 0,
"consecutive_empty_runs": 1,
"error": null
}
],
"quota": {
"account_id": "4c8e2a1b-7d3f-4e5a-9b6c-1d2e3f4a5b6c",
"date": "2026-10-18",
"reads": {
"used": 23,
"limit": 80,
"background_used": 17,
"background_limit": 40
},
"search_reads": {
"used": 310,
"limit": 900,
"background_used": 120,
"background_limit": 250
}
}
},
"meta": {
"request_id": "req_7f3a…"
}
}Treffer eines LinkedIn-Dauerlaufs auflisten
/v1/engage/flows/{id}/hitsread:campaignsRecht: Dauerlauf: Übersicht und StatistikenliestDie Personen, die der Dauerlauf gefunden hat, neueste zuerst, wie die Reiter Leads und Aussortiert der Detailseite. Filter decision wie die Auswahl in der App (z. B. imported für Leads, rejected für Aussortiert). Angaben zur Person nur so weit, wie die App sie zeigt: Name, Headline, Firma, Profil-Link, Profilbild und verknüpfter Lead. Interne LinkedIn-Kennungen der Person, KI-Punktwert und erkannte Absicht gibt die API nicht heraus. Sichtbar wie in der App unter LinkedIn Dauerlauf: Inhaber und Admins sehen alle Dauerläufe, Mitglieder nur die auf ihren zugewiesenen LinkedIn-Konten. Ein Dauerlauf auf einem anderen Konto ergibt 404. Liest nur gespeicherte Daten: kein Aufruf bei LinkedIn, es wird kein Kontingent verbraucht.
Pfad-Parameter
idstring (uuid)PflichtID des Dauerlaufs
Query-Parameter
limitintegerab 1bis 100Einträge pro Seite (Standard 25, höchstens 100)
cursorstringmax. 200 ZeichenWert aus meta.next_cursor der vorigen Seite
decisionListe aus stringEine oder mehrere Entscheidungen, kommagetrennt
pendingmatchedrejectedduplicateexcludedblocked_topicimportedneeds_salutationconnected
Felder der Antwort
idstring (uuid)ID des Treffers
decisionstringimported: übernommen (Reiter Leads). matched: passend, wartet auf einen Platz im Tagesziel. needs_salutation: Anrede unsicher, wartet auf Entscheidung. rejected: von der KI aussortiert. duplicate: schon als Lead vorhanden. excluded: Ausschlussliste oder von Hand ausgeschlossen. blocked_topic: Thema gesperrt. connected: schon mit dem Konto vernetzt. pending: noch nicht bewertet.
pendingmatchedrejectedduplicateexcludedblocked_topicimportedneeds_salutationconnectedreasonstring, kann null seinBegründung der KI-Bewertung im Wortlaut, wie in der Spalte „Begründung im Wortlaut“
manual_decisionstring, kann null seinVon Hand korrigiert: promoted = trotz Aussortierung übernommen, excluded = von Hand ausgeschlossen. Leer: die KI hat entschieden.
promotedexcludedmanual_atstring (date-time), kann null seinZeitpunkt der Korrektur von Hand, null ohne manual_decision
source_kindstring, kann null seinSignalquelle, die die Person gefunden hat. Leer bei Altzeilen ohne Quellenbezug.
keyword_postskeyword_authorsprofile_engagerscompany_engagersrelationshiring_companiesicp_searchprofile_followersjob_postscreated_atstring (date-time)Gefunden am
decided_atstring (date-time), kann null seinZeitpunkt der Entscheidung, bei imported der Übernahme
personobjectAngaben zur Person, so weit die App sie in der Trefferliste zeigt
Felder anzeigen
namestring, kann null seinName der Person, null, wenn nicht bekannt
headlinestring, kann null seinLinkedIn-Headline
companystring, kann null seinFirma der Person, null, wenn nicht bekannt
profile_urlstring, kann null seinLinkedIn-Profil
avatar_urlstring, kann null seinProfilbild aus dem Profil-Cache, leer wenn keins vorliegt
lead_idstring (uuid), kann null seinLead, sobald die Person übernommen wurde oder schon Lead war (siehe GET /v1/leads/{id})
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/hits" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/hits", {
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/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/hits",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
"decision": "imported",
"reason": "Geschäftsführer einer Spedition mit 80 Mitarbeitern, passt zur Zielgruppe.",
"manual_decision": null,
"manual_at": null,
"source_kind": "keyword_posts",
"created_at": "2026-10-18T09:12:40+00:00",
"decided_at": "2026-10-18T09:20:03+00:00",
"person": {
"name": "Jonas Beispiel",
"headline": "Geschäftsführer bei Beispiel Logistik GmbH",
"company": "Beispiel Logistik GmbH",
"profile_url": "https://www.linkedin.com/in/jonas-beispiel",
"avatar_url": "https://imagedelivery.net/beispiel/linkedin-avatar-jonas/public",
"lead_id": "5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10"
}
}
],
"meta": {
"request_id": "req_7f3a…",
"next_cursor": null,
"has_more": false
}
}Heutiges Kontingent eines LinkedIn-Dauerlaufs
/v1/engage/flows/{id}/quotaread:campaignsRecht: Dauerlauf: Übersicht und StatistikenliestWie der Kasten Heutiges Kontingent im Reiter Aktivität: Lese-Abrufe und Suchtreffer des LinkedIn-Kontos am heutigen Tag (UTC), jeweils gesamt und der Anteil der Dauerläufe, gegen die Tagesgrenzen. Das Kontingent gilt je Konto, alle Dauerläufe des Kontos und die LinkedIn-Suche teilen es. Sichtbar wie in der App unter LinkedIn Dauerlauf: Inhaber und Admins sehen alle Dauerläufe, Mitglieder nur die auf ihren zugewiesenen LinkedIn-Konten. Ein Dauerlauf auf einem anderen Konto ergibt 404. Liest nur gespeicherte Daten: kein Aufruf bei LinkedIn, es wird kein Kontingent verbraucht.
Pfad-Parameter
idstring (uuid)PflichtID des Dauerlaufs
Felder der Antwort
account_idstring (uuid)LinkedIn-Konto. Das Kontingent gilt je Konto, alle Dauerläufe des Kontos teilen es.
datestring (date)Tag der Zähler (UTC)
readsobjectLese-Abrufe bei LinkedIn (Reaktionen und Kommentare)
Felder anzeigen
usedintegerheute verbraucht, alle Wege zusammen
limitintegerTagesgrenze
background_usedintegerdavon durch Dauerläufe im Hintergrund
background_limitintegerGrenze für Dauerläufe im Hintergrund, innerhalb der Tagesgrenze
search_readsobjectSuchtreffer, geteilt mit der LinkedIn-Suche der App
Felder anzeigen
usedintegerheute verbraucht, alle Wege zusammen
limitintegerTagesgrenze
background_usedintegerdavon durch Dauerläufe im Hintergrund
background_limitintegerGrenze für Dauerläufe im Hintergrund, innerhalb der Tagesgrenze
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/quota" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/quota", {
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/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/quota",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": {
"account_id": "4c8e2a1b-7d3f-4e5a-9b6c-1d2e3f4a5b6c",
"date": "2026-10-18",
"reads": {
"used": 23,
"limit": 80,
"background_used": 17,
"background_limit": 40
},
"search_reads": {
"used": 310,
"limit": 900,
"background_used": 120,
"background_limit": 250
}
},
"meta": {
"request_id": "req_7f3a…"
}
}Lauf-Protokoll eines LinkedIn-Dauerlaufs
/v1/engage/flows/{id}/activityread:campaignsRecht: Dauerlauf: Übersicht und StatistikenliestWie das Lauf-Protokoll im Reiter Aktivität der Detailseite: eine Zeile je Lauf und Signalquelle, neueste zuerst, ausdrücklich auch Läufe ohne Treffer. Je Lauf: geprüfte Personen, in die Zielliste übernommen, an die Kampagne übergeben, Anrede offen, wartend auf einen Platz im Tagesziel, aussortiert, dazu der Hinweis des Laufs im Klartext und ein Fehler, falls einer auftrat. Mitglieder sehen wie in der App nur Läufe auf ihren zugewiesenen LinkedIn-Konten; Läufe aus der Zeit vor einem Kontowechsel können deshalb fehlen. Die Personen eines Laufs stehen unter GET /v1/engage/flows/{id}/hits. Sichtbar wie in der App unter LinkedIn Dauerlauf: Inhaber und Admins sehen alle Dauerläufe, Mitglieder nur die auf ihren zugewiesenen LinkedIn-Konten. Ein Dauerlauf auf einem anderen Konto ergibt 404. Liest nur gespeicherte Daten: kein Aufruf bei LinkedIn, es wird kein Kontingent verbraucht.
Pfad-Parameter
idstring (uuid)PflichtID des Dauerlaufs
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 des Laufs
started_atstring (date-time)Zeitpunkt des Laufs
source_kindstringSignalquelle, die gelaufen ist. keyword_posts: Reaktionen auf ein Thema. keyword_authors: Verfasser zu einem Thema. profile_engagers: Reaktionen auf bestimmte Profile. company_engagers: Reaktionen auf Unternehmensseiten. relations: eigene Kontakte reaktivieren. hiring_companies: Firmen, die einstellen. icp_search: direkt nach Zielgruppe suchen. profile_followers: Follower eines Profils. job_posts: Stellenanzeigen als Signal.
keyword_postskeyword_authorsprofile_engagerscompany_engagersrelationshiring_companiesicp_searchprofile_followersjob_postslinkedin_accountobject, kann null seinLinkedIn-Konto, mit dem der Lauf gesucht hat. Leer bei Altzeilen ohne Konto.
Felder anzeigen
idstring (uuid)ID des LinkedIn-Kontos (siehe GET /v1/linkedin/accounts/{id})
namestring, kann null seinAnzeigename des Kontos, null, wenn nicht bekannt
checkedintegerGeprüfte Personen
importedintegerIn die Zielliste übernommen
enrolledintegerAn die Kampagne übergeben (0, wenn keine Kampagne verknüpft ist)
needs_salutationintegerAnrede unsicher, wartet auf eine Entscheidung in der App
matchedintegerPassend, wartet auf einen freien Platz im Tagesziel
rejectedintegerAussortiert
notestring, kann null seinHinweis des Laufs im Klartext, wie in der App (mehrere Hinweise mit · getrennt). Bei einem Lauf ohne Treffer die einzige Auskunft, z. B. gefundene Firmen, deren Entscheider der nächste Lauf sucht.
errorstring, kann null seinFehler des Laufs, wie ihn die App zeigt
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/activity" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/activity", {
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/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/activity",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"id": "3e4f5a6b-7c8d-4e9f-8a0b-1c2d3e4f5a6b",
"started_at": "2026-10-18T10:30:12+00:00",
"source_kind": "keyword_posts",
"linkedin_account": {
"id": "4c8e2a1b-7d3f-4e5a-9b6c-1d2e3f4a5b6c",
"name": "Anna Beispiel"
},
"checked": 14,
"imported": 2,
"enrolled": 2,
"needs_salutation": 0,
"matched": 1,
"rejected": 11,
"note": "2 Beiträge gelesen, 14 Reaktionen geprüft. · 2 Leads an die Kampagne „Geschäftsführer Logistik“ übergeben.",
"error": null
},
{
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"started_at": "2026-10-18T08:50:03+00:00",
"source_kind": "hiring_companies",
"linkedin_account": {
"id": "4c8e2a1b-7d3f-4e5a-9b6c-1d2e3f4a5b6c",
"name": "Anna Beispiel"
},
"checked": 0,
"imported": 0,
"enrolled": 0,
"needs_salutation": 0,
"matched": 0,
"rejected": 0,
"note": "10 Firmen gefunden, die einstellen. Die Entscheider sucht der nächste Lauf.",
"error": null
}
],
"meta": {
"request_id": "req_7f3a…",
"next_cursor": null,
"has_more": false
}
}Offene Profilprüfungen eines LinkedIn-Dauerlaufs
/v1/engage/flows/{id}/profile-checksread:campaignsRecht: Dauerlauf: Übersicht und StatistikenliestWie der Reiter Überprüfen der Detailseite: Personen, deren LinkedIn-Profil der Dauerlauf noch besucht, um Position und Standort zu prüfen, weil die KI sie ohne den Besuch nicht sicher einordnen kann. Bis dahin kommen sie weder in die Zielliste noch in eine Kampagne. Der Besuch ist für die Person sichtbar und läuft gedrosselt: nur bei aktivem Dauerlauf, in den Suchzeiten des Kontos, mit Abstand zwischen den Besuchen und mit eigener Tagesgrenze je Konto innerhalb des Limits für Profilbesuche, das sich Prüfungen und Kampagnen teilen. Reihenfolge wie die Warteschlange: beste KI-Bewertung zuerst, dann älteste. Ist das Profil geprüft, entscheidet der nächste Lauf, die Person verschwindet aus dieser Liste und steht mit ihrer Entscheidung unter GET /v1/engage/flows/{id}/hits. Die Gesamtzahl steht in stats.profile_checks_pending des Dauerlaufs. Angaben zur Person nur Name und Headline, wie in der App. Sichtbar wie in der App unter LinkedIn Dauerlauf: Inhaber und Admins sehen alle Dauerläufe, Mitglieder nur die auf ihren zugewiesenen LinkedIn-Konten. Ein Dauerlauf auf einem anderen Konto ergibt 404. Liest nur gespeicherte Daten: kein Aufruf bei LinkedIn, es wird kein Kontingent verbraucht.
Pfad-Parameter
idstring (uuid)PflichtID des Dauerlaufs
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 Prüfung
created_atstring (date-time)Zur Prüfung vorgemerkt am
personobjectAngaben zur Person, so weit die App sie im Reiter Überprüfen zeigt
Felder anzeigen
namestring, kann null seinName der Person, null, wenn nicht bekannt
headlinestring, kann null seinLinkedIn-Headline. Leer, wenn LinkedIn keine geliefert hat (dann klärt erst der Profilbesuch die Rolle).
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/profile-checks" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/profile-checks", {
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/engage/flows/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/profile-checks",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"id": "7d6c5b4a-3f2e-4d1c-9b0a-8f7e6d5c4b3a",
"created_at": "2026-10-18T09:12:40+00:00",
"person": {
"name": "Sabine Muster",
"headline": "Leitung Disposition und Fuhrpark"
}
},
{
"id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
"created_at": "2026-10-18T09:12:40+00:00",
"person": {
"name": "Thomas Beispiel",
"headline": null
}
}
],
"meta": {
"request_id": "req_7f3a…",
"next_cursor": null,
"has_more": false
}
}