Contact usTry for free
Developer documentation API keys
Developers/REST API

TargetWise REST API · v1

The API reference.

Eleven JSON endpoints for contact details, professional background, company profiles and candidate discovery. Choose an operation, send one request and handle the result explicitly.

Authenticate with your workspace key.

Generate a named key in Dashboard → Developers. Store it in your backend’s environment or secret manager. The full secret is shown once; revoke and replace it if needed.

Request headers
Authorization: Bearer YOUR_TARGETWISE_KEY
Content-Type: application/json

The examples below expect TARGETWISE_BASE_URL to contain the gateway URL ending in /api/v1, without a trailing slash, and TARGETWISE_API_KEY to contain your workspace key. Example identities are fictional and will not necessarily return a match.

Choose an endpoint.

OperationPOST path
Find companies by identity/api/v1/companies/search
Search employees/api/v1/employees/search
Get employee details/api/v1/employees/details
Autocomplete company fields/api/v1/autocomplete/company
Find a work email/api/v1/contacts/find-work-email
Find a business phone/api/v1/contacts/find-phone
Enrich a contact/api/v1/contacts/enrich
Enrich a company/api/v1/companies/enrich
Reverse email lookup/api/v1/reverse-email
Search companies/api/v1/prospecting/companies/search
Search contacts/api/v1/prospecting/contacts/search

Find companies by identity

POST/api/v1/companies/search

Search company names, websites or registration numbers before selecting a record to enrich.

Inputs. Supply name, website_url or registration_number; country_code is optional. page: 1–10, limit: 1–5.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/companies/search" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"name":"Tesco","country_code":"GB","limit":1}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
namestringSee schema
website_urlstringSee schema
registration_numberstringSee schema
country_codestringSee schema
pageintegerMin: 1 · Max: 10
limitintegerMin: 1 · Max: 5
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "anyOf": [
    {
      "required": [
        "name"
      ]
    },
    {
      "required": [
        "website_url"
      ]
    },
    {
      "required": [
        "registration_number"
      ]
    }
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200
    },
    "website_url": {
      "type": "string",
      "format": "uri",
      "minLength": 8,
      "maxLength": 500,
      "pattern": "^https?://"
    },
    "registration_number": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "country_code": {
      "type": "string",
      "pattern": "^[A-Z]{2}$"
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5
    }
  }
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "pagination",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "prospecting_result"
    },
    "operation": {
      "type": "string",
      "const": "company_search"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "not_found"
      ]
    },
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "company_id": {
            "type": "string"
          },
          "company_name": {
            "type": "string"
          }
        }
      }
    },
    "pagination": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "page",
        "per_page",
        "total_results",
        "total_pages",
        "has_more"
      ],
      "properties": {
        "page": {
          "type": "integer",
          "minimum": 1,
          "maximum": 10
        },
        "per_page": {
          "type": "integer",
          "minimum": 1,
          "maximum": 25
        },
        "total_results": {
          "type": "integer",
          "minimum": 0
        },
        "total_pages": {
          "type": "integer",
          "minimum": 0
        },
        "has_more": {
          "type": "boolean"
        }
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "const": "not_available"
        }
      }
    }
  }
}

Search employees

POST/api/v1/employees/search

Find employees by company ID, name, job title, department or seniority. Search returns identifiers and names, without automatically revealing contact details.

Inputs. filters needs at least one of company_id, full_name, job_titles, department_ids or seniority_ids. Use company and nomenclature IDs returned by the provider. page: 1–10; limit: 1–25.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/employees/search" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"filters":{"company_id":"17937983"},"limit":2}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
pageintegerMin: 1 · Max: 10
limitintegerMin: 1 · Max: 25
filtersobjectSee schema
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "filters"
  ],
  "properties": {
    "page": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    },
    "filters": {
      "type": "object",
      "additionalProperties": false,
      "minProperties": 1,
      "properties": {
        "company_id": {
          "type": "string",
          "pattern": "^[0-9]+$"
        },
        "full_name": {
          "type": "string",
          "minLength": 2,
          "maxLength": 200
        },
        "job_titles": {
          "type": "array",
          "minItems": 1,
          "maxItems": 20,
          "items": {
            "type": "string",
            "maxLength": 200
          }
        },
        "department_ids": {
          "type": "array",
          "minItems": 1,
          "maxItems": 20,
          "items": {
            "type": "integer",
            "minimum": 1
          }
        },
        "seniority_ids": {
          "type": "array",
          "minItems": 1,
          "maxItems": 20,
          "items": {
            "type": "integer",
            "minimum": 1
          }
        }
      }
    }
  }
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "pagination",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "prospecting_result"
    },
    "operation": {
      "type": "string",
      "const": "employee_prospecting"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "not_found"
      ]
    },
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "person_id": {
            "type": "string"
          },
          "full_name": {
            "type": "string"
          },
          "first_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "seniority": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "linkedin_url": {
            "type": "string",
            "format": "uri"
          },
          "location": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "company_id": {
            "type": "string"
          },
          "company_name": {
            "type": "string"
          },
          "company_website": {
            "type": "string"
          },
          "company_linkedin_url": {
            "type": "string"
          }
        }
      }
    },
    "pagination": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "page",
        "per_page",
        "total_results",
        "total_pages",
        "has_more"
      ],
      "properties": {
        "page": {
          "type": "integer",
          "minimum": 1,
          "maximum": 10
        },
        "per_page": {
          "type": "integer",
          "minimum": 1,
          "maximum": 25
        },
        "total_results": {
          "type": "integer",
          "minimum": 0
        },
        "total_pages": {
          "type": "integer",
          "minimum": 0
        },
        "has_more": {
          "type": "boolean"
        }
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "const": "not_available"
        }
      }
    }
  }
}

Get employee details

POST/api/v1/employees/details

Expand one selected employee. Email and phone are returned only when requested; a phone is not guaranteed to be a mobile.

Inputs. employee_id must come from Employees search, not domain contact search. include_email and include_phone default to true.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/employees/details" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"employee_id":"EMPLOYEE_ID_FROM_SEARCH","include_email":true,"include_phone":false}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
employee_idstringSee schema
include_emailbooleanDefault: true
include_phonebooleanDefault: true
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "employee_id"
  ],
  "properties": {
    "employee_id": {
      "type": "string",
      "pattern": "^[0-9]+$"
    },
    "include_email": {
      "type": "boolean",
      "default": true
    },
    "include_phone": {
      "type": "boolean",
      "default": true
    }
  }
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "unresolved_fields",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "enrichment_result"
    },
    "operation": {
      "type": "string",
      "const": "employee_details"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "partial",
        "not_found"
      ]
    },
    "data": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "person_id": {
              "type": "string"
            },
            "full_name": {
              "type": "string"
            },
            "first_name": {
              "type": "string"
            },
            "last_name": {
              "type": "string"
            },
            "headline": {
              "type": "string",
              "description": "Professional headline, returned when include_profile is true and the field is available."
            },
            "role": {
              "type": "string"
            },
            "seniority": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "departments": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "work_email": {
              "type": "string",
              "format": "email"
            },
            "business_phone": {
              "type": "string"
            },
            "phone_type": {
              "type": "string",
              "const": "unknown",
              "description": "The source returns a generic phone field without classifying it as mobile or landline."
            },
            "linkedin_url": {
              "type": "string",
              "format": "uri"
            },
            "location": {
              "type": "string",
              "description": "Professional location, such as city, region and country; requires include_profile."
            },
            "country": {
              "type": "string"
            },
            "company_id": {
              "type": "string"
            },
            "company_name": {
              "type": "string"
            },
            "company_website": {
              "type": "string"
            },
            "company_linkedin_url": {
              "type": "string"
            },
            "work_experience": {
              "type": "array",
              "maxItems": 25,
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "company_name": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "title": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "location": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "description": {
                    "type": "string",
                    "maxLength": 2000
                  },
                  "started_on": {
                    "type": "string",
                    "maxLength": 40,
                    "description": "Reported start date; may contain only a year or month and year."
                  },
                  "ended_on": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 40,
                    "description": "Reported end date. An explicit null identifies a current role; an omitted value is unknown."
                  },
                  "is_current": {
                    "type": "boolean",
                    "description": "Returned when the source explicitly identifies a current or past role."
                  }
                }
              },
              "description": "Available employment history when include_profile is true."
            },
            "education": {
              "type": "array",
              "maxItems": 25,
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "institution_name": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "study": {
                    "type": "string",
                    "maxLength": 300,
                    "description": "Reported course or qualification, preserved without inferring a separate degree or subject."
                  },
                  "degree": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "field_of_study": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "started_on": {
                    "type": "string",
                    "maxLength": 40
                  },
                  "ended_on": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 40
                  }
                }
              },
              "description": "Available institutions, studies and dates when include_profile is true."
            },
            "skills": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Reported professional skills when include_profile is true."
            }
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "unresolved_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "enum": [
            "included",
            "not_available"
          ]
        }
      }
    }
  }
}

Autocomplete company fields

POST/api/v1/autocomplete/company

Populate form fields with a company profile from an initial identifier. This is company resolution, not a keystroke suggestion list.

Inputs. Supply name, website_url or registration_number; country_code is optional. include_provenance defaults to true.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/autocomplete/company" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"website_url":"https://www.tesco.com","include_provenance":true}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
namestringSee schema
website_urlstringSee schema
registration_numberstringSee schema
country_codestringSee schema
include_provenancebooleanDefault: true
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "anyOf": [
    {
      "required": [
        "name"
      ]
    },
    {
      "required": [
        "website_url"
      ]
    },
    {
      "required": [
        "registration_number"
      ]
    }
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200
    },
    "website_url": {
      "type": "string",
      "format": "uri",
      "minLength": 8,
      "maxLength": 500,
      "pattern": "^https?://"
    },
    "registration_number": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "country_code": {
      "type": "string",
      "pattern": "^[A-Z]{2}$"
    },
    "include_provenance": {
      "type": "boolean",
      "default": true
    }
  }
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "unresolved_fields",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "enrichment_result"
    },
    "operation": {
      "type": "string",
      "const": "company_autocomplete"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "partial",
        "not_found"
      ]
    },
    "data": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "company_id": {
              "type": "string"
            },
            "legal_name": {
              "type": "string"
            },
            "registration_number": {
              "type": "string"
            },
            "vat_number": {
              "type": "string"
            },
            "country_code": {
              "type": "string"
            },
            "country_name": {
              "type": "string"
            },
            "status": {
              "type": "string"
            },
            "legal_form": {
              "type": "string"
            },
            "founded_on": {
              "type": "string"
            },
            "employee_count": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                }
              ]
            },
            "brands": {
              "type": "string"
            },
            "website": {
              "type": "string"
            },
            "company_emails": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "company_phones": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "address": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "street": {
                  "type": "string"
                },
                "line_2": {
                  "type": "string"
                },
                "city": {
                  "type": "string"
                },
                "region": {
                  "type": "string"
                },
                "postal_code": {
                  "type": "string"
                }
              }
            },
            "industries": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "sic_codes": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "linkedin_url": {
              "type": "string"
            },
            "twitter_url": {
              "type": "string"
            },
            "facebook_url": {
              "type": "string"
            },
            "provenance": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "field": {
                    "type": "string"
                  },
                  "source_path": {
                    "type": "string"
                  },
                  "id": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "number"
                      }
                    ]
                  },
                  "category": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  },
                  "comment": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "unresolved_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "enum": [
            "included",
            "not_available"
          ]
        }
      }
    }
  }
}

Find a work email

POST/api/v1/contacts/find-work-email

Retrieve the available work email for one known person. This operation does not request a phone number or verify email deliverability.

Inputs. Supply a LinkedIn profile URL, or first_name + last_name with exactly one of company_domain or company_name.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/contacts/find-work-email" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"first_name":"Alex","last_name":"Reed","company_domain":"example.com"}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
linkedin_urlstringThe person's public LinkedIn profile URL.
first_namestringSee schema
last_namestringSee schema
company_namestringSee schema
company_domainstringCompany domain, such as example.com.
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "linkedin_url": {
      "type": "string",
      "format": "uri",
      "minLength": 8,
      "maxLength": 500,
      "pattern": "^https?://",
      "description": "The person's public LinkedIn profile URL."
    },
    "first_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "last_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "company_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "company_domain": {
      "type": "string",
      "minLength": 3,
      "maxLength": 253,
      "description": "Company domain, such as example.com."
    }
  },
  "oneOf": [
    {
      "required": [
        "linkedin_url"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "first_name"
            ]
          },
          {
            "required": [
              "last_name"
            ]
          },
          {
            "required": [
              "company_name"
            ]
          },
          {
            "required": [
              "company_domain"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "first_name",
        "last_name",
        "company_name"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "company_domain"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "first_name",
        "last_name",
        "company_domain"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "company_name"
            ]
          }
        ]
      }
    }
  ]
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "unresolved_fields",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "enrichment_result"
    },
    "operation": {
      "type": "string",
      "const": "work_email_lookup"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "partial",
        "not_found"
      ]
    },
    "data": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "person_id": {
              "type": "string"
            },
            "full_name": {
              "type": "string"
            },
            "first_name": {
              "type": "string"
            },
            "last_name": {
              "type": "string"
            },
            "role": {
              "type": "string"
            },
            "seniority": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "departments": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "work_email": {
              "type": "string",
              "format": "email"
            },
            "linkedin_url": {
              "type": "string",
              "format": "uri"
            },
            "company_id": {
              "type": "string"
            },
            "company_name": {
              "type": "string"
            }
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "unresolved_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "enum": [
            "included",
            "not_available"
          ]
        }
      }
    }
  }
}

Find a business phone

POST/api/v1/contacts/find-phone

Retrieve the available business phone for one known person. Email reveal is off. The current response uses phone_type: unknown; a mobile classification is not guaranteed.

Inputs. Use the same person identifiers as work-email lookup. Do not combine LinkedIn and name-based identifiers.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/contacts/find-phone" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"linkedin_url":"https://www.linkedin.com/in/example"}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
linkedin_urlstringThe person's public LinkedIn profile URL.
first_namestringSee schema
last_namestringSee schema
company_namestringSee schema
company_domainstringCompany domain, such as example.com.
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "linkedin_url": {
      "type": "string",
      "format": "uri",
      "minLength": 8,
      "maxLength": 500,
      "pattern": "^https?://",
      "description": "The person's public LinkedIn profile URL."
    },
    "first_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "last_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "company_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "company_domain": {
      "type": "string",
      "minLength": 3,
      "maxLength": 253,
      "description": "Company domain, such as example.com."
    }
  },
  "oneOf": [
    {
      "required": [
        "linkedin_url"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "first_name"
            ]
          },
          {
            "required": [
              "last_name"
            ]
          },
          {
            "required": [
              "company_name"
            ]
          },
          {
            "required": [
              "company_domain"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "first_name",
        "last_name",
        "company_name"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "company_domain"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "first_name",
        "last_name",
        "company_domain"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "company_name"
            ]
          }
        ]
      }
    }
  ]
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "unresolved_fields",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "enrichment_result"
    },
    "operation": {
      "type": "string",
      "const": "phone_lookup"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "partial",
        "not_found"
      ]
    },
    "data": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "person_id": {
              "type": "string"
            },
            "full_name": {
              "type": "string"
            },
            "first_name": {
              "type": "string"
            },
            "last_name": {
              "type": "string"
            },
            "role": {
              "type": "string"
            },
            "seniority": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "departments": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "business_phone": {
              "type": "string"
            },
            "phone_type": {
              "type": "string",
              "const": "unknown",
              "description": "The source returns a generic phone field without classifying it as mobile or landline."
            },
            "linkedin_url": {
              "type": "string",
              "format": "uri"
            },
            "company_id": {
              "type": "string"
            },
            "company_name": {
              "type": "string"
            }
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "unresolved_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "enum": [
            "included",
            "not_available"
          ]
        }
      }
    }
  }
}

Enrich a contact

POST/api/v1/contacts/enrich

Request email, phone and optional professional context in a single call for a known person. Available fields depend on the record and your account permissions.

Inputs. Choose one person identifier pattern. include_email and include_phone default to true; include_profile defaults to false. Set the switches explicitly to control the fields you request.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/contacts/enrich" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"first_name":"Alex","last_name":"Reed","company_domain":"example.com","include_email":true,"include_phone":false,"include_profile":true}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
linkedin_urlstringThe person's public LinkedIn profile URL.
first_namestringSee schema
last_namestringSee schema
company_namestringSee schema
company_domainstringCompany domain, such as example.com.
include_emailbooleanDefault: true
include_phonebooleanDefault: true
include_profilebooleanDefault: false · Request available location, headline, work history, education and skills. Account permission may be required.
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "linkedin_url": {
      "type": "string",
      "format": "uri",
      "minLength": 8,
      "maxLength": 500,
      "pattern": "^https?://",
      "description": "The person's public LinkedIn profile URL."
    },
    "first_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "last_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "company_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "company_domain": {
      "type": "string",
      "minLength": 3,
      "maxLength": 253,
      "description": "Company domain, such as example.com."
    },
    "include_email": {
      "type": "boolean",
      "default": true
    },
    "include_phone": {
      "type": "boolean",
      "default": true
    },
    "include_profile": {
      "type": "boolean",
      "default": false,
      "description": "Request available location, headline, work history, education and skills. Account permission may be required."
    }
  },
  "oneOf": [
    {
      "required": [
        "linkedin_url"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "first_name"
            ]
          },
          {
            "required": [
              "last_name"
            ]
          },
          {
            "required": [
              "company_name"
            ]
          },
          {
            "required": [
              "company_domain"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "first_name",
        "last_name",
        "company_name"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "company_domain"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "first_name",
        "last_name",
        "company_domain"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "company_name"
            ]
          }
        ]
      }
    }
  ],
  "not": {
    "required": [
      "include_email",
      "include_phone"
    ],
    "properties": {
      "include_email": {
        "const": false
      },
      "include_phone": {
        "const": false
      },
      "include_profile": {
        "const": false
      }
    }
  }
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "unresolved_fields",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "enrichment_result"
    },
    "operation": {
      "type": "string",
      "const": "contact_enrichment"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "partial",
        "not_found"
      ]
    },
    "data": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "person_id": {
              "type": "string"
            },
            "full_name": {
              "type": "string"
            },
            "first_name": {
              "type": "string"
            },
            "last_name": {
              "type": "string"
            },
            "headline": {
              "type": "string",
              "description": "Professional headline, returned when include_profile is true and the field is available."
            },
            "role": {
              "type": "string"
            },
            "seniority": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "departments": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "work_email": {
              "type": "string",
              "format": "email"
            },
            "business_phone": {
              "type": "string"
            },
            "phone_type": {
              "type": "string",
              "const": "unknown",
              "description": "The source returns a generic phone field without classifying it as mobile or landline."
            },
            "linkedin_url": {
              "type": "string",
              "format": "uri"
            },
            "location": {
              "type": "string",
              "description": "Professional location, such as city, region and country; requires include_profile."
            },
            "country": {
              "type": "string"
            },
            "company_id": {
              "type": "string"
            },
            "company_name": {
              "type": "string"
            },
            "company_website": {
              "type": "string"
            },
            "company_linkedin_url": {
              "type": "string"
            },
            "work_experience": {
              "type": "array",
              "maxItems": 25,
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "company_name": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "title": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "location": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "description": {
                    "type": "string",
                    "maxLength": 2000
                  },
                  "started_on": {
                    "type": "string",
                    "maxLength": 40,
                    "description": "Reported start date; may contain only a year or month and year."
                  },
                  "ended_on": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 40,
                    "description": "Reported end date. An explicit null identifies a current role; an omitted value is unknown."
                  },
                  "is_current": {
                    "type": "boolean",
                    "description": "Returned when the source explicitly identifies a current or past role."
                  }
                }
              },
              "description": "Available employment history when include_profile is true."
            },
            "education": {
              "type": "array",
              "maxItems": 25,
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "institution_name": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "study": {
                    "type": "string",
                    "maxLength": 300,
                    "description": "Reported course or qualification, preserved without inferring a separate degree or subject."
                  },
                  "degree": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "field_of_study": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "started_on": {
                    "type": "string",
                    "maxLength": 40
                  },
                  "ended_on": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 40
                  }
                }
              },
              "description": "Available institutions, studies and dates when include_profile is true."
            },
            "skills": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Reported professional skills when include_profile is true."
            }
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "unresolved_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "enum": [
            "included",
            "not_available"
          ]
        }
      }
    }
  }
}

Enrich a company

POST/api/v1/companies/enrich

Retrieve a company profile from a website, company ID, LinkedIn company page or legal identifier. Source information is returned when available for the selected route.

Inputs. Supply one of company_id, website_url, linkedin_url, registration_number, vat_number or ticker. Legal identifiers require country_code; US legal lookups also require state. include_provenance defaults to true.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/companies/enrich" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"website_url":"https://example.com","include_provenance":true}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
company_idstringSee schema
website_urlstringThe company's public website URL.
linkedin_urlstringThe company's public LinkedIn page URL.
registration_numberstringSee schema
vat_numberstringSee schema
tickerstringSee schema
country_codestringISO 3166-1 alpha-2 country code. Required with registration number, VAT number or ticker.
statestringUS state. Required for US legal-identifier lookups.
include_provenancebooleanDefault: true
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "company_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "website_url": {
      "type": "string",
      "format": "uri",
      "minLength": 8,
      "maxLength": 500,
      "pattern": "^https?://",
      "description": "The company's public website URL."
    },
    "linkedin_url": {
      "type": "string",
      "format": "uri",
      "minLength": 8,
      "maxLength": 500,
      "pattern": "^https?://",
      "description": "The company's public LinkedIn page URL."
    },
    "registration_number": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "vat_number": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "ticker": {
      "type": "string",
      "minLength": 1,
      "maxLength": 30
    },
    "country_code": {
      "type": "string",
      "pattern": "^[A-Za-z]{2}$",
      "description": "ISO 3166-1 alpha-2 country code. Required with registration number, VAT number or ticker."
    },
    "state": {
      "type": "string",
      "minLength": 2,
      "maxLength": 100,
      "description": "US state. Required for US legal-identifier lookups."
    },
    "include_provenance": {
      "type": "boolean",
      "default": true
    }
  },
  "oneOf": [
    {
      "required": [
        "company_id"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "website_url"
            ]
          },
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "registration_number"
            ]
          },
          {
            "required": [
              "vat_number"
            ]
          },
          {
            "required": [
              "ticker"
            ]
          },
          {
            "required": [
              "country_code"
            ]
          },
          {
            "required": [
              "state"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "website_url"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "company_id"
            ]
          },
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "registration_number"
            ]
          },
          {
            "required": [
              "vat_number"
            ]
          },
          {
            "required": [
              "ticker"
            ]
          },
          {
            "required": [
              "country_code"
            ]
          },
          {
            "required": [
              "state"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "linkedin_url"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "company_id"
            ]
          },
          {
            "required": [
              "website_url"
            ]
          },
          {
            "required": [
              "registration_number"
            ]
          },
          {
            "required": [
              "vat_number"
            ]
          },
          {
            "required": [
              "ticker"
            ]
          },
          {
            "required": [
              "country_code"
            ]
          },
          {
            "required": [
              "state"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "registration_number",
        "country_code"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "company_id"
            ]
          },
          {
            "required": [
              "website_url"
            ]
          },
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "vat_number"
            ]
          },
          {
            "required": [
              "ticker"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "vat_number",
        "country_code"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "company_id"
            ]
          },
          {
            "required": [
              "website_url"
            ]
          },
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "registration_number"
            ]
          },
          {
            "required": [
              "ticker"
            ]
          }
        ]
      }
    },
    {
      "required": [
        "ticker",
        "country_code"
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "company_id"
            ]
          },
          {
            "required": [
              "website_url"
            ]
          },
          {
            "required": [
              "linkedin_url"
            ]
          },
          {
            "required": [
              "registration_number"
            ]
          },
          {
            "required": [
              "vat_number"
            ]
          }
        ]
      }
    }
  ],
  "allOf": [
    {
      "if": {
        "required": [
          "country_code"
        ],
        "properties": {
          "country_code": {
            "pattern": "^[Uu][Ss]$"
          }
        }
      },
      "then": {
        "required": [
          "state"
        ]
      }
    }
  ]
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "unresolved_fields",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "enrichment_result"
    },
    "operation": {
      "type": "string",
      "const": "company_enrichment"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "partial",
        "not_found"
      ]
    },
    "data": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "company_id": {
              "type": "string"
            },
            "legal_name": {
              "type": "string"
            },
            "registration_number": {
              "type": "string"
            },
            "vat_number": {
              "type": "string"
            },
            "country_code": {
              "type": "string"
            },
            "country_name": {
              "type": "string"
            },
            "status": {
              "type": "string"
            },
            "legal_form": {
              "type": "string"
            },
            "founded_on": {
              "type": "string"
            },
            "employee_count": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                }
              ]
            },
            "brands": {
              "type": "string"
            },
            "website": {
              "type": "string"
            },
            "company_emails": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "company_phones": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "address": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "street": {
                  "type": "string"
                },
                "line_2": {
                  "type": "string"
                },
                "city": {
                  "type": "string"
                },
                "region": {
                  "type": "string"
                },
                "postal_code": {
                  "type": "string"
                }
              }
            },
            "industries": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "sic_codes": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "linkedin_url": {
              "type": "string"
            },
            "twitter_url": {
              "type": "string"
            },
            "facebook_url": {
              "type": "string"
            },
            "provenance": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "field": {
                    "type": "string"
                  },
                  "source_path": {
                    "type": "string"
                  },
                  "id": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "number"
                      }
                    ]
                  },
                  "category": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  },
                  "comment": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "unresolved_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "enum": [
            "included",
            "not_available"
          ]
        }
      }
    }
  }
}

Reverse email lookup

POST/api/v1/reverse-email

Resolve a business email into available person, role and company information. This is identity enrichment, not proof of mailbox ownership.

Inputs. email is required. include_phone defaults to true; include_profile defaults to false. Turn phone off when your workflow only needs identity context.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/reverse-email" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"email":"alex@example.com","include_phone":false,"include_profile":true}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
emailstringSee schema
include_phonebooleanDefault: true
include_profilebooleanDefault: false · Request available location, headline, work history, education and skills. Account permission may be required.
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "format": "email",
      "minLength": 3,
      "maxLength": 320
    },
    "include_phone": {
      "type": "boolean",
      "default": true
    },
    "include_profile": {
      "type": "boolean",
      "default": false,
      "description": "Request available location, headline, work history, education and skills. Account permission may be required."
    }
  }
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "unresolved_fields",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "enrichment_result"
    },
    "operation": {
      "type": "string",
      "const": "reverse_email_lookup"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "partial",
        "not_found"
      ]
    },
    "data": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "person_id": {
              "type": "string"
            },
            "full_name": {
              "type": "string"
            },
            "first_name": {
              "type": "string"
            },
            "last_name": {
              "type": "string"
            },
            "headline": {
              "type": "string",
              "description": "Professional headline, returned when include_profile is true and the field is available."
            },
            "role": {
              "type": "string"
            },
            "seniority": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "departments": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "work_email": {
              "type": "string",
              "format": "email"
            },
            "business_phone": {
              "type": "string"
            },
            "phone_type": {
              "type": "string",
              "const": "unknown",
              "description": "The source returns a generic phone field without classifying it as mobile or landline."
            },
            "linkedin_url": {
              "type": "string",
              "format": "uri"
            },
            "location": {
              "type": "string",
              "description": "Professional location, such as city, region and country; requires include_profile."
            },
            "country": {
              "type": "string"
            },
            "company_id": {
              "type": "string"
            },
            "company_name": {
              "type": "string"
            },
            "company_website": {
              "type": "string"
            },
            "company_linkedin_url": {
              "type": "string"
            },
            "work_experience": {
              "type": "array",
              "maxItems": 25,
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "company_name": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "title": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "location": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "description": {
                    "type": "string",
                    "maxLength": 2000
                  },
                  "started_on": {
                    "type": "string",
                    "maxLength": 40,
                    "description": "Reported start date; may contain only a year or month and year."
                  },
                  "ended_on": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 40,
                    "description": "Reported end date. An explicit null identifies a current role; an omitted value is unknown."
                  },
                  "is_current": {
                    "type": "boolean",
                    "description": "Returned when the source explicitly identifies a current or past role."
                  }
                }
              },
              "description": "Available employment history when include_profile is true."
            },
            "education": {
              "type": "array",
              "maxItems": 25,
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "institution_name": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "study": {
                    "type": "string",
                    "maxLength": 300,
                    "description": "Reported course or qualification, preserved without inferring a separate degree or subject."
                  },
                  "degree": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "field_of_study": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "started_on": {
                    "type": "string",
                    "maxLength": 40
                  },
                  "ended_on": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 40
                  }
                }
              },
              "description": "Available institutions, studies and dates when include_profile is true."
            },
            "skills": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Reported professional skills when include_profile is true."
            }
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "unresolved_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "enum": [
            "included",
            "not_available"
          ]
        }
      }
    }
  }
}

Search companies

POST/api/v1/prospecting/companies/search

Discover company candidates using firmographic, industry, location, technology, incorporation or turnover filters. Select a company before enriching its profile.

Inputs. filters must contain at least one supported filter. page accepts 1–10; limit accepts 1–25 and defaults to 10. Keep returned company_id values as strings, including leading zeroes.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/prospecting/companies/search" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"filters":{"website_keywords":["artificial intelligence"],"employee_count":{"min":200}},"page":1,"limit":5}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
pageintegerDefault: 1 · Min: 1 · Max: 10
limitintegerDefault: 10 · Min: 1 · Max: 25
filtersobjectSee schema
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "filters"
  ],
  "properties": {
    "page": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 1
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25,
      "default": 10
    },
    "filters": {
      "type": "object",
      "additionalProperties": false,
      "minProperties": 1,
      "properties": {
        "status_ids": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "integer"
          }
        },
        "employee_count": {
          "type": "object",
          "additionalProperties": false,
          "minProperties": 1,
          "properties": {
            "min": {
              "type": "integer",
              "minimum": 0
            },
            "max": {
              "type": "integer",
              "minimum": 0
            }
          }
        },
        "legal_form_ids": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "integer"
          }
        },
        "industry_paths": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 253
          }
        },
        "website_keywords": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 253
          }
        },
        "nace_codes": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          }
        },
        "isic_codes": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          }
        },
        "country_paths": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "region_paths": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "postal_codes": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          }
        },
        "technology_ids": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          }
        },
        "incorporated": {
          "type": "object",
          "additionalProperties": false,
          "minProperties": 1,
          "properties": {
            "from": {
              "type": "string",
              "format": "date"
            },
            "to": {
              "type": "string",
              "format": "date"
            }
          }
        },
        "turnover": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "currency"
          ],
          "minProperties": 2,
          "properties": {
            "min": {
              "type": "number",
              "minimum": 0
            },
            "max": {
              "type": "number",
              "minimum": 0
            },
            "currency": {
              "type": "string",
              "pattern": "^[A-Za-z]{3}$"
            }
          }
        }
      }
    }
  }
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "pagination",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "prospecting_result"
    },
    "operation": {
      "type": "string",
      "const": "company_prospecting"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "not_found"
      ]
    },
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "company_id": {
            "type": "string"
          },
          "company_name": {
            "type": "string"
          }
        }
      }
    },
    "pagination": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "page",
        "per_page",
        "total_results",
        "total_pages",
        "has_more"
      ],
      "properties": {
        "page": {
          "type": "integer",
          "minimum": 1,
          "maximum": 10
        },
        "per_page": {
          "type": "integer",
          "minimum": 1,
          "maximum": 25
        },
        "total_results": {
          "type": "integer",
          "minimum": 0
        },
        "total_pages": {
          "type": "integer",
          "minimum": 0
        },
        "has_more": {
          "type": "boolean"
        }
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "const": "not_available"
        }
      }
    }
  }
}

Search contacts

POST/api/v1/prospecting/contacts/search

Find professionals at specified company domains, optionally narrowed by seniority or location. Search results exclude email and phone; retrieve those after selecting a person.

Inputs. domains is required and accepts 1–20 domains. Optional filters: seniorities, company_locations and contact_locations. page accepts 1–10; limit accepts 1–25. A person_id is not an enrichment input: use the candidate’s LinkedIn URL or supported name and company context.

cURL
curl --fail-with-body "$TARGETWISE_BASE_URL/prospecting/contacts/search" \
  -H "Authorization: Bearer $TARGETWISE_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"domains":["example.com"],"seniorities":["vp","director"],"page":1,"limit":5}'
Parameters and exact JSON schemas

Use the identifier rules above alongside this field list. The schemas below include required combinations, defaults and allowed values.

ParameterTypeDefault / limits
domainsarrayUp to 20 items
company_locationsarrayUp to 50 items
contact_locationsarrayUp to 50 items
senioritiesarrayUp to 11 items
pageintegerDefault: 1 · Min: 1 · Max: 10
limitintegerDefault: 10 · Min: 1 · Max: 25
Input schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "domains"
  ],
  "properties": {
    "domains": {
      "type": "array",
      "minItems": 1,
      "maxItems": 20,
      "items": {
        "type": "string",
        "minLength": 3,
        "maxLength": 253
      }
    },
    "company_locations": {
      "type": "array",
      "minItems": 1,
      "maxItems": 50,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "contact_locations": {
      "type": "array",
      "minItems": 1,
      "maxItems": 50,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "seniorities": {
      "type": "array",
      "minItems": 1,
      "maxItems": 11,
      "items": {
        "type": "string",
        "enum": [
          "owner",
          "founder",
          "c_suite",
          "partner",
          "vp",
          "head",
          "director",
          "manager",
          "senior",
          "entry",
          "intern"
        ]
      }
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 1
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25,
      "default": 10
    }
  }
}
Output schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "object",
    "operation",
    "request_id",
    "status",
    "data",
    "pagination",
    "grounding"
  ],
  "properties": {
    "object": {
      "type": "string",
      "const": "prospecting_result"
    },
    "operation": {
      "type": "string",
      "const": "contact_prospecting"
    },
    "request_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "matched",
        "not_found"
      ]
    },
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "person_id": {
            "type": "string"
          },
          "full_name": {
            "type": "string"
          },
          "first_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "seniority": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "linkedin_url": {
            "type": "string",
            "format": "uri"
          },
          "location": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "company_id": {
            "type": "string"
          },
          "company_name": {
            "type": "string"
          },
          "company_website": {
            "type": "string"
          },
          "company_linkedin_url": {
            "type": "string"
          }
        }
      }
    },
    "pagination": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "page",
        "per_page",
        "total_results",
        "total_pages",
        "has_more"
      ],
      "properties": {
        "page": {
          "type": "integer",
          "minimum": 1,
          "maximum": 10
        },
        "per_page": {
          "type": "integer",
          "minimum": 1,
          "maximum": 25
        },
        "total_results": {
          "type": "integer",
          "minimum": 0
        },
        "total_pages": {
          "type": "integer",
          "minimum": 0
        },
        "has_more": {
          "type": "boolean"
        }
      }
    },
    "grounding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "retrieved_at",
        "source_provenance"
      ],
      "properties": {
        "retrieved_at": {
          "type": "string",
          "format": "date-time"
        },
        "source_provenance": {
          "type": "string",
          "const": "not_available"
        }
      }
    }
  }
}

Person enrichment

Request the professional profile you need.

Set include_profile: true on /contacts/enrich or /reverse-email to request location, professional headline, work experience, education and skills. The default is false.

Starting identifierPOST pathProfile option
LinkedIn person URL/api/v1/contacts/enrichlinkedin_url + include_profile: true
Name and company/api/v1/contacts/enrichfirst_name + last_name + company_name or company_domain + include_profile: true
Business email/api/v1/reverse-emailemail + include_profile: true
Profile-only request · POST /api/v1/contacts/enrich
{
  "first_name": "Alex",
  "last_name": "Reed",
  "company_domain": "example.com",
  "include_email": false,
  "include_phone": false,
  "include_profile": true
}

Email and phone remain separate switches. Contact search and /employees/details do not request the extended profile; use one of the enrichment routes above with a supported person identifier.

FieldResponse keyContains
Locationdata.locationThe professional’s available city, region and country.
Professional headlinedata.headlineA short description of the person’s role and professional focus.
Work experiencedata.work_experienceEmployers, roles, start and end dates, and current-role status where reported.
Educationdata.educationInstitutions, courses or qualifications, and dates where available.
Skillsdata.skillsReported professional skills, returned as a list.
Nested fieldMeaning
work_experience[].company_name / titleEmployer and role. Up to 25 history entries.
work_experience[].started_on / ended_onReported dates retain their precision, such as 2022 Sep or 2011. An explicit ended_on: null identifies a current role; a missing end date does not.
work_experience[].is_currentCurrent-role status when explicitly supplied or established by a reported null end date.
education[].institution_name / studyInstitution and reported course or qualification. Up to 25 entries. The study text is not split into an inferred degree and subject.
education[].started_on / ended_onReported education dates. degree and field_of_study are additional optional fields when separately supplied.
skills[]A list of skill names. These are reported profile attributes, not independently assessed proficiency.
Illustrative profile-only response
{
  "object": "enrichment_result",
  "operation": "contact_enrichment",
  "request_id": "example_profile_request",
  "status": "matched",
  "data": {
    "person_id": "example_person",
    "full_name": "Alex Reed",
    "role": "VP Revenue",
    "company_name": "Example Limited",
    "location": "London, England, United Kingdom",
    "country": "United Kingdom",
    "headline": "Revenue leader focused on enterprise software",
    "work_experience": [
      {
        "company_name": "Example Limited",
        "title": "VP Revenue",
        "started_on": "2022 Sep",
        "ended_on": null,
        "is_current": true
      }
    ],
    "education": [
      {
        "institution_name": "Example University",
        "study": "BSc Business Management",
        "started_on": "2008",
        "ended_on": "2011"
      }
    ],
    "skills": [
      "Revenue operations",
      "Enterprise sales"
    ]
  },
  "unresolved_fields": [],
  "grounding": {
    "retrieved_at": "2026-09-10T12:00:00.000Z",
    "source_provenance": "not_available"
  }
}

A partial profile keeps its available fields and lists missing ones in unresolved_fields. When none of the five profile fields is available, that list also contains extended_profile. A missing field can reflect record coverage or account access; the response cannot distinguish those causes.

Separate request success from data availability.

For enrichment, object is enrichment_result. The status describes whether the requested information was returned. For search, object is prospecting_result and data is a candidate array.

Illustrative no-match response
{
  "object": "enrichment_result",
  "operation": "work_email_lookup",
  "request_id": "example-request-id",
  "status": "not_found",
  "data": null,
  "unresolved_fields": [
    "person"
  ],
  "grounding": {
    "retrieved_at": "2026-09-07T10:00:00Z",
    "source_provenance": "not_available"
  }
}
FieldHow to use it
statusHandle matched, partial and not_found. Search has matched and not_found only.
dataEnrichment returns a record or null; search returns an array. Use fields actually present.
unresolved_fieldsEnrichment lists requested fields that could not be resolved.
request_idKeep this identifier with your application event for troubleshooting.
grounding.retrieved_atRetrieval time, not the last update date of every underlying record.
grounding.source_provenanceWhether source information was included for this result. Never infer missing provenance.

Keep candidate searches deliberate.

Set page and limit on each search. The response includes page, per_page, total_results, total_pages and has_more inside pagination.

  • Use a maximum of 25 candidates per page and pages 1–10.
  • Stop when has_more is false or your workflow’s page budget is reached.
  • Review the candidate identity before enrichment. Keep opaque IDs as strings.
  • Contact search accepts up to 20 company domains and omits email and phone.

Handle errors without creating repeat charges.

Error responses contain request_id and an error object with code, message and retryable. A retryable error is permission to consider a limited retry, not a reason to loop.

HTTPMeaningNext step
400Invalid requestCheck the identifier combination, field names and value types.
401Invalid or missing keyUse an active TargetWise workspace bearer key.
402Insufficient creditsReview your workspace balance in the dashboard.
403Inactive workspaceCheck workspace access. An HTML sign-in response can also mean the gateway is behind private site access.
404 / 405Unknown route / wrong methodUse the documented path and POST for data operations.
409Usage reservation conflictA short delayed retry may be appropriate; cap the number of attempts.
413 / 415Body too large / wrong content typeKeep the request within 64 KB and send application/json.
429Attempt or rate limit reachedStop the current burst. Review the error and workspace limits before resuming.
500 / 502Internal / provider response errorKeep the request ID. Review retryable before any limited retry.
503Connection unavailableThe service or provider connection needs configuration; retrying cannot fix that.
504Provider timeoutCheck the request ID and your retry policy. The provider timeout is 30 seconds.

Keep completed request state in your application. The API does not promise idempotent enrichment or duplicate suppression. Treat not_found as a completed outcome, and do not retry an unchanged lookup just because the field is missing.

Common questions