Create Mutual Connections signal
Find the mutual connections between two LinkedIn profiles - the people connected to both. Name any two people: a decision maker you want to meet and someone on your side, two executives of the same account, an investor and a founder. Each person connected to both is delivered, filtered to the roles and companies you target. Two parts, which you can use together or apart: a one-time extract of the mutual connections in the two existing networks, then, if you want, the new mutual connections every day.
Input: linkedinProfileUrls (exactly two LinkedIn profile URLs, A and B, required); oneTimeExtractCount (how many mutual connections to deliver once, 0-25,000, defaults to 100; not metered by dailyLeadLimit); dailyNewConnections (true to keep delivering new mutual connections afterwards, up to dailyLeadLimit a day; defaults to false). Existing mutual 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); optional enrichment toggles (getEmails, getPhones, getSireneData, detectTechnologies, getHomepageContent); webhookUrl, dailyLeadLimit, duplicateHandling, status. Activating with status: active checks that the two profiles are set and that your balance covers the one-time extract (oneTimeExtractCount x the price per lead), and answers 402 with the estimate when it does not. A profile that hides its connection list on LinkedIn cannot be read. How many mutual connections exist is only final once both networks have been read: follow it with GET /api/v1/signals/{signalId}/mutual-connections. Each mutual connection is billed as it is delivered.
Output: each mutual connection 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), and signal.profile_a / signal.profile_b - the two profiles they are connected to. signal.tracked_company is always empty.
Use cases:
- Warm introductions - compare a decision maker you want to meet with someone on your side (a salesperson, a founder, an investor) and reach the people who know both, so the first touch is a referral instead of a cold message.
- Account mapping - compare two executives of the same account to find the people close to both, the ones who carry influence inside the buying group.
- Ecosystem plays - compare the leader of a company you work with and the leader of a target account to find who sits at the crossroads of the two networks.
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/mutual-connections
- Auth: HTTP bearer
Request body
Example request
{
"config": {
"dailyNewConnections": true,
"getEmails": true,
"linkedinProfileUrls": [
"https://www.linkedin.com/in/claire-martin-cfo/",
"https://www.linkedin.com/in/thomas-bernard-ceo/"
],
"locations": [
"France"
],
"oneTimeExtractCount": 100,
"targetPersonas": [
"Sales Director",
"Marketing Director"
]
},
"dailyLeadLimit": 10,
"name": "Mutual connections of Claire and Thomas",
"status": "active",
"webhookUrl": "https://your-server.com/webhooks/rodz"
}Response
Signal created
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.