Skip to main content
POST
/
v2
/
dedup
Dedup
curl --request POST \
  --url https://api.opennous.cloud/v2/dedup \
  --header 'Content-Type: application/json' \
  --data '
{
  "emails": [
    "<string>"
  ],
  "linkedin_urls": [
    "<string>"
  ]
}
'
The “pre-flight before you pay” check. You’re about to scrape 10k leads on Apollo for $300 — paste in the LinkedIn URLs (visible for free in Apollo’s preview), get back which ones you already have. Buy only the difference.

Request

curl -X POST https://api.opennous.cloud/v2/dedup \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "linkedin_urls": [
      "https://linkedin.com/in/sarah-chen-vp",
      "https://linkedin.com/in/jamie-doe"
    ]
  }'
You can also pass emails, or both:
{
  "emails":        ["sarah@acme.com", "jamie@beta.com"],
  "linkedin_urls": ["https://linkedin.com/in/sarah-chen-vp"]
}

Body

emails
string[]
Up to 50,000 emails per call.
linkedin_urls
string[]
Up to 50,000 LinkedIn URLs per call.
At least one of the two is required. The API chunks internally, so there’s no URL-length cap to worry about.

Response

{
  "results": [
    {
      "kind": "linkedin_url",
      "value": "https://linkedin.com/in/sarah-chen-vp",
      "status": "engaged",
      "entity_id": "a1b2c3d4-...",
      "reason": "In active conversation — last touch 4 days ago"
    },
    {
      "kind": "linkedin_url",
      "value": "https://linkedin.com/in/jamie-doe",
      "status": "net_new"
    }
  ],
  "summary": {
    "net_new":      1,
    "engaged":      1,
    "recent":       0,
    "bounced":      0,
    "unsubscribed": 0,
    "suppressed":   0,
    "total":        2
  }
}

Status values

StatusMeaningWhat to do
net_newNo prior record.Safe to send / safe to buy.
engagedIn an active conversation.Don’t cold-send.
recentContacted in the last 30 days.Defer.
bouncedLast delivery bounced (email-only).Skip.
unsubscribedOpted out or marked do-not-contact.Skip.
suppressedWorkspace-level suppression policy.Skip.

Authentication note

Unlike the other v2 endpoints, /v2/dedup also accepts the workspace JWT — so the in-app Lists page can call it without going through the API key. External integrations use the API key as normal.

When to call it

  • Before paying Apollo / Lemlist for a list reveal — classify the LinkedIn URLs first
  • As a CSV pre-flight in your own workflow — drop a 5k-row list, send only the net_new rows
  • In a workspace audit — how much of last quarter’s $X list spend was already in our pipeline?