Signals

Create Person Connections signal

Get the people in the LinkedIn networks of the people you name — your whole team and your happy clients, your investors, advisors, champions, or any industry figure, up to 500 people in one signal — filtered to the roles and companies you sell to, each lead with the person who can introduce you. Two parts, which you can use together or apart: a one-time extract of their existing connections, delivered as fast as they are read, then, if you want, the people who newly connect with them, every day.

Input: linkedinProfileUrls (1-500 LinkedIn profile URLs of the people to watch, required; a person known to several of them is delivered and billed once, with the first watched person whose network it was read in); oneTimeExtractCount (how many people to deliver once from their existing connections, counted in leads delivered after your filters, across all watched people; 0-25,000, defaults to 500; when their networks hold fewer matching people, everyone who matches is delivered; not metered by dailyLeadLimit); dailyNewConnections (true to keep delivering new connections after the one-time extract, up to dailyLeadLimit a day: only people who connect with a watched person after the signal started watching them; defaults to false, which stops the signal once the one-time extract is complete). Existing connections are delivered only by the one-time extract, up to oneTimeExtractCount: with 0, none is delivered or billed; optional persona targeting (targetPersonas, customPersonaTitles); optional ICP filters (companySizeFilters, locations, industryFilters, excludedLocations, excludedCompanySizeFilters, excludedIndustryFilters, excludedTitles, excludedCompanyUrls) — with no filter at all, everyone is delivered; optional restrictToCompanies to deliver only people who work today at your target accounts (see Only at your target accounts below); optional enrichment toggles (getEmails, getPhones, getSireneData, detectTechnologies, getHomepageContent); webhookUrl, dailyLeadLimit, duplicateHandling, status. Each lead is billed as it is delivered: 3 credits per lead for the one-time extract, then 5 credits per lead for the daily new connections. Activating with status: active checks that your balance covers the one-time extract (oneTimeExtractCount × 3 credits) and answers 402 with the estimate when it does not. A watched person who hides their connection list on LinkedIn cannot be read.

Only at your target accounts (restrictToCompanies): your team's network, limited to the accounts you are working. Send your account list and only the connections whose CURRENT employer is on it are delivered; a connection who only worked there before is not. Everyone else is left out before billing: no lead, no credit, and it does not count toward oneTimeExtractCount. Each entry is a domain ("payfit.com"), a LinkedIn company page ("https://www.linkedin.com/company/doctolib"), a numeric LinkedIn company id ("10426145") or a Sales Navigator company link, a company name, or an object {name, domain, linkedinUrl}; send every identifier you have, the domain and the LinkedIn page are the most reliable. Matching is exact (case, punctuation and legal suffixes such as SAS or GmbH ignored), never fuzzy. Set it when you create the signal: the list then becomes the signal's company list, read and edited at GET|POST|DELETE /api/v1/watchlists/{signalId}/companies (up to 10,000 entries per call), and is not echoed in config. An empty or missing restrictToCompanies means no restriction; once a signal is restricted, removing every company from its list delivers nothing until you add some back. restrictToProfiles (LinkedIn profile URLs) works the same way for named people, and a person on either list is delivered. Example config: {"linkedinProfileUrls": ["https://www.linkedin.com/in/julie-moreau-sales/"], "restrictToCompanies": ["payfit.com", "https://www.linkedin.com/company/doctolib", {"name": "Alan", "domain": "alan.com"}], "oneTimeExtractCount": 1000}.

Output: each matching person is pushed to your webhookUrl as an enriched person lead: the contact (name, email if enriched, phone if enriched, title, location, LinkedIn profile URL, matched persona), their employer (company name, website, LinkedIn URL, plus tech stack and homepage content when those enrichments are enabled), and signal.tracked_contact — the watched person whose network the lead belongs to, so a signal watching several people tells you which one produced each lead. signal.tracked_company is always empty. The single-signal responses report progress in applied.oneTimeExtract (target, delivered, status).

Use cases:

  • Intro paths from your team and happy clients - put every salesperson, founder and satisfied customer in one signal (up to 500 people) and get the people in their networks who match your ICP, each with the name of the person who can introduce you.
  • Warm-network prospecting - reach the people around your investors, advisors, customers or champions, filtered to the roles and companies you sell to, instead of cold lists.
  • Your team's network, only at your target accounts - add restrictToCompanies with your account list (domains, LinkedIn company pages or names) and get only the people your team knows who work there today, each with who can introduce you; everyone else is left out before billing.
  • Account mapping from one contact - watch a key decision maker and get the colleagues and peers in their network who match your ICP.
  • Event and ecosystem follow-up - watch a speaker, a co-marketing ally or an industry figure and turn their audience of peers into a targeted list, then keep receiving the people who join it.
post/api/v1/signals/person-connections

Request

  • Base URL: https://api.rodz.io (the document declares no server; this is the origin it was published from)
  • URL: https://api.rodz.io/api/v1/signals/person-connections
  • Auth: HTTP bearer

Request body

namestring required

Name for this signal

webhookUrlstring nullable

Where each lead is POSTed as it is produced. Optional (since 2026-09-23): omit it when you read leads with GET /api/v1/signals/{signalId}/leads or route them to a connected CRM or sequencer with destinations on PATCH /api/v1/signals/{signalId}.

dailyLeadLimitinteger

Max leads per day for the daily part (dailyNewConnections). The one-time extract is bounded by oneTimeExtractCount instead.

duplicateHandlingstring nullable

Duplicate lead handling: 'refuse' (never accept), 'allow' (always accept), or 'Xd' (accept a duplicate after X days, e.g. '7d'). Optional — defaults to 'allow', so a contact who triggers this signal a second time is delivered a second time.

statusstring nullable

Initial status (default: draft). Accepts draft, active, or paused. If active, the config is validated and the balance must cover the one-time extract (oneTimeExtractCount x the price per lead), otherwise 402.

Example request

{
  "config": {
    "companySizeFilters": [
      "51-200",
      "201-500"
    ],
    "dailyNewConnections": true,
    "getEmails": true,
    "linkedinProfileUrls": [
      "https://www.linkedin.com/in/julie-moreau-sales/",
      "https://www.linkedin.com/in/thomas-bernard-founder/",
      "https://www.linkedin.com/in/camille-petit-client/"
    ],
    "locations": [
      "France"
    ],
    "oneTimeExtractCount": 5000,
    "targetPersonas": [
      "Sales Director",
      "Head of Growth"
    ]
  },
  "dailyLeadLimit": 50,
  "name": "Intros via our team and happy clients",
  "status": "active",
  "webhookUrl": "https://your-server.com/webhooks/rodz"
}

Response

Signal created

idstring required
namestring required
statusstring required
signalTypeIdstring required
webhookUrlstring nullable
configobject nullable

Signal-specific configuration

dailyLeadLimitinteger required
leadsTodayinteger required
leadsTotalinteger required
duplicateHandlingstring required

Duplicate lead handling: 'refuse' (never accept), 'allow' (always accept), or 'Xd' (accept after X days)

createdAtstring required
updatedAtstring required
lastLeadAtstring nullable
appliedobject

Settings this signal runs with where they differ from config, keyed like config. {} when every stored setting is applied as stored. A null value means the stored field is not used by this signal. Every entry is explained by a warning naming the same field.

Example response

{
  "applied": {
    "allowUnknownCompanySize": false,
    "maxJobAgeDays": 180
  },
  "config": {
    "companySizeFilters": [
      "201-500",
      "501-1000"
    ],
    "getEmails": true,
    "jobTitles": [
      "CTO"
    ],
    "locations": [
      "France"
    ],
    "maxJobAgeDays": 90
  },
  "createdAt": "2026-01-15T10:30:00Z",
  "dailyLeadLimit": 50,
  "duplicateHandling": "refuse",
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "lastLeadAt": "2026-03-15T14:22:00Z",
  "leadsToday": 3,
  "leadsTotal": 127,
  "name": "CTOs changing jobs in France",
  "signalTypeId": "job_changes",
  "status": "active",
  "updatedAt": "2026-03-16T08:00:00Z",
  "warnings": [
    {
      "code": "VALUE_BELOW_MINIMUM",
      "field": "maxJobAgeDays",
      "message": "`maxJobAgeDays` is 90; this signal applies 180. Job changes are delivered up to 180 days after the start date, and a shorter window is raised to that minimum.",
      "severity": "info",
      "values": [
        "90"
      ]
    }
  ],
  "webhookUrl": "https://your-server.com/webhooks/rodz"
}

Changes

No recorded changes to this operation across all 1 revision of this API.