API — Enrichment

Search Profiles & Companies

Find people or organizations and see what data already exists for them, so you can decide what is worth paying for before spending a credit.

  • Endpoint:
    POST /v1/contact/search
  • Mode: Synchronous — results are returned in the same response.
  • Cost: Free. This endpoint never triggers enrichment and never consumes credits.
Authorization

A valid API key is required in the request header.

  • Authorization: Bearer
    < your_api_key >
  • Content-Type:
    application/json
Request Body

All search filters are passed inside a params object.

  • type (string)
    Use company to search organizations. Any other value — or omitting the field — searches people.
  • name (string)
    People only. Ignored for company searches.
    Example: "John Doe"
  • title (string)
    People only. Ignored for company searches.
    Example: "Chief Information Officer"
  • companyName (string)
    Valid for both people and company searches.
  • companyIndustry (string)
    Valid for both people and company searches.
  • page (number)
    Defaults to 1. Values below 1 are raised to 1.
  • limit (number)
    Defaults to 10 and is capped at 10 — higher values are silently reduced.
  • At least one filter is required. For people that is any of name, title, companyName or companyIndustry. For companies it must be companyName or companyIndustry. Filters combine with AND, so adding filters narrows results sharply.
Response — People

200 OK – Successful Request

  • page (number)
    – The page that was returned.
  • limit (number)
    – The page size that was applied.
  • total (number)
    – The full match count, which may far exceed what a single page can return.
  • data (object[])
    – One row per matching profile.

Example Response:

{
  "message": "success",
  "page": 1,
  "limit": 10,
  "total": 4,
  "data": [
    {
      "contactId": "5f18f116e2cd24da81189ced5adcc710",
      "name": "John Doe",
      "linkedinUrl": "linkedin.com/in/qwerty",
      "has_education": true,
      "has_experience": true,
      "has_organization": true,
      "has_title": true,
      "has_city": false,
      "has_state": true,
      "has_country": true,
      "has_location": true,
      "has_certification": false,
      "has_industry": true,
      "has_summary": false
    }
  ]
}

The has_* booleans are the core of this endpoint. Each one says whether that field currently holds data for the profile — true means a /details call would return it. They are presence flags, not quality or freshness indicators, and they never contain the value itself.

Response — Companies

Company rows carry identifiers only. None of the has_* flags apply, because they describe person-profile fields.

{
  "contactId": "9418b43ab39f0f0f14577df7ba4fbcd7",
  "name": " Deepenrich",
  "linkedinUrl": "linkedin.com/company/deepenrich"
}
Paging

total is the full match count, which may far exceed what is reachable in one call. With a hard limit of 10 rows per page, deep result sets are paged through with page.

Errors
  • 422 Unprocessable
    – No usable filter was supplied. The message differs for people and company searches.
  • 402 Payment Required
    "Search daily limit have been exhausted" — your account's daily search allowance has been reached.
  • 400 Bad Request
    "Please provide valid api key" — the header is missing, malformed, or the key is not recognised.
  • 404 Not Found
    "User not found" — the key is valid but the owning account is missing.

 

 

 

curl --request POST \
  --url 'https://app.deepenrich.com/api/v1/contact/search' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "params": {
    "title": "Chief Information Officer",
    "companyName": " Deepenrich",
    "companyIndustry": "it services and it consulting",
    "page": 1,
    "limit": 10
  }
}'
import requests

url = "https://app.deepenrich.com/api/v1/contact/search"

payload = {
  "params": {
    "title": "Chief Information Officer",
    "companyName": " Deepenrich",
    "companyIndustry": "it services and it consulting",
    "page": 1,
    "limit": 10
  }
}

headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json'},
  body: '{"params":{"title":"Chief Information Officer","companyName":" Deepenrich","companyIndustry":"it services and it consulting","page":1,"limit":10}}'
};

fetch('https://app.deepenrich.com/api/v1/contact/search', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://app.deepenrich.com/api/v1/contact/search",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\n  \"params\": {\n    \"title\": \"Chief Information Officer\",\n    \"companyName\": \" Deepenrich\",\n    \"companyIndustry\": \"it services and it consulting\",\n    \"page\": 1,\n    \"limit\": 10\n  }\n}",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer YOUR_API_KEY",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"strings"
)

func main() {

	url := "https://app.deepenrich.com/api/v1/contact/search"

	payload := strings.NewReader("{\n  \"params\": {\n    \"title\": \"Chief Information Officer\",\n    \"companyName\": \" Deepenrich\",\n    \"companyIndustry\": \"it services and it consulting\",\n    \"page\": 1,\n    \"limit\": 10\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer YOUR_API_KEY")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://app.deepenrich.com/api/v1/contact/search")
  .header("Authorization", "Bearer YOUR_API_KEY")
  .header("Content-Type", "application/json")
  .body("{\n  \"params\": {\n    \"title\": \"Chief Information Officer\",\n    \"companyName\": \" Deepenrich\",\n    \"companyIndustry\": \"it services and it consulting\",\n    \"page\": 1,\n    \"limit\": 10\n  }\n}")
  .asString();
{
  "message": "success",
  "page": 1,
  "limit": 10,
  "total": 4,
  "data": [
    {
      "contactId": "5f18f116e2cd24da81189ced5adcc710",
      "name": "John Doe",
      "linkedinUrl": "linkedin.com/in/qwerty",
      "has_education": true,
      "has_experience": true,
      "has_organization": true,
      "has_title": true,
      "has_city": false,
      "has_state": true,
      "has_country": true,
      "has_location": true,
      "has_certification": false,
      "has_industry": true,
      "has_summary": false
    }
  ]
}
{
  "message": "at least one filter (name, title, companyName, companyIndustry) is required"
}
{
  "message": "Search daily limit have been exhausted"
}
{
  "message": "Please provide valid api key"
}
{
  "message": "User not found"
}