curl --request POST \
--url https://api.b2bsignals.ai/api/v1/intake/people \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"linkedin_url": "<string>",
"name": "<string>",
"title": "<string>",
"company_name": "<string>",
"company_domain": "<string>",
"reason": "<string>",
"signal": "<string>",
"evidence_url": "<string>",
"custom": {},
"workflow_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"force": false,
"test": false
}
'import requests
url = "https://api.b2bsignals.ai/api/v1/intake/people"
payload = {
"linkedin_url": "<string>",
"name": "<string>",
"title": "<string>",
"company_name": "<string>",
"company_domain": "<string>",
"reason": "<string>",
"signal": "<string>",
"evidence_url": "<string>",
"custom": {},
"workflow_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"force": False,
"test": False
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
linkedin_url: '<string>',
name: '<string>',
title: '<string>',
company_name: '<string>',
company_domain: '<string>',
reason: '<string>',
signal: '<string>',
evidence_url: '<string>',
custom: {},
workflow_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
force: false,
test: false
})
};
fetch('https://api.b2bsignals.ai/api/v1/intake/people', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.b2bsignals.ai/api/v1/intake/people",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'linkedin_url' => '<string>',
'name' => '<string>',
'title' => '<string>',
'company_name' => '<string>',
'company_domain' => '<string>',
'reason' => '<string>',
'signal' => '<string>',
'evidence_url' => '<string>',
'custom' => [
],
'workflow_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'force' => false,
'test' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.b2bsignals.ai/api/v1/intake/people"
payload := strings.NewReader("{\n \"linkedin_url\": \"<string>\",\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"company_name\": \"<string>\",\n \"company_domain\": \"<string>\",\n \"reason\": \"<string>\",\n \"signal\": \"<string>\",\n \"evidence_url\": \"<string>\",\n \"custom\": {},\n \"workflow_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"force\": false,\n \"test\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.b2bsignals.ai/api/v1/intake/people")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"linkedin_url\": \"<string>\",\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"company_name\": \"<string>\",\n \"company_domain\": \"<string>\",\n \"reason\": \"<string>\",\n \"signal\": \"<string>\",\n \"evidence_url\": \"<string>\",\n \"custom\": {},\n \"workflow_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"force\": false,\n \"test\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.b2bsignals.ai/api/v1/intake/people")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"linkedin_url\": \"<string>\",\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"company_name\": \"<string>\",\n \"company_domain\": \"<string>\",\n \"reason\": \"<string>\",\n \"signal\": \"<string>\",\n \"evidence_url\": \"<string>\",\n \"custom\": {},\n \"workflow_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"force\": false,\n \"test\": false\n}"
response = http.request(request)
puts response.read_body{
"action": "<string>",
"lead_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"enrolled": false,
"enroll_status": "<string>",
"test": false,
"would": "<string>",
"reason_code": "<string>",
"do_not_contact": true,
"message": "<string>",
"person": {
"name": "<string>",
"title": "<string>",
"company": "<string>",
"linkedin_url": "<string>",
"found_by": "<string>"
}
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}Add one person
Adds or updates one person. Give a LinkedIn URL, or a name with a company name or domain. The same person sent twice is updated, not duplicated. Add workflow_id to also start them in a campaign. ?test=true checks the row and saves nothing. People on Do not contact are saved but never contacted.
curl --request POST \
--url https://api.b2bsignals.ai/api/v1/intake/people \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"linkedin_url": "<string>",
"name": "<string>",
"title": "<string>",
"company_name": "<string>",
"company_domain": "<string>",
"reason": "<string>",
"signal": "<string>",
"evidence_url": "<string>",
"custom": {},
"workflow_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"force": false,
"test": false
}
'import requests
url = "https://api.b2bsignals.ai/api/v1/intake/people"
payload = {
"linkedin_url": "<string>",
"name": "<string>",
"title": "<string>",
"company_name": "<string>",
"company_domain": "<string>",
"reason": "<string>",
"signal": "<string>",
"evidence_url": "<string>",
"custom": {},
"workflow_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"force": False,
"test": False
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
linkedin_url: '<string>',
name: '<string>',
title: '<string>',
company_name: '<string>',
company_domain: '<string>',
reason: '<string>',
signal: '<string>',
evidence_url: '<string>',
custom: {},
workflow_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
force: false,
test: false
})
};
fetch('https://api.b2bsignals.ai/api/v1/intake/people', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.b2bsignals.ai/api/v1/intake/people",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'linkedin_url' => '<string>',
'name' => '<string>',
'title' => '<string>',
'company_name' => '<string>',
'company_domain' => '<string>',
'reason' => '<string>',
'signal' => '<string>',
'evidence_url' => '<string>',
'custom' => [
],
'workflow_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'force' => false,
'test' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.b2bsignals.ai/api/v1/intake/people"
payload := strings.NewReader("{\n \"linkedin_url\": \"<string>\",\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"company_name\": \"<string>\",\n \"company_domain\": \"<string>\",\n \"reason\": \"<string>\",\n \"signal\": \"<string>\",\n \"evidence_url\": \"<string>\",\n \"custom\": {},\n \"workflow_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"force\": false,\n \"test\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.b2bsignals.ai/api/v1/intake/people")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"linkedin_url\": \"<string>\",\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"company_name\": \"<string>\",\n \"company_domain\": \"<string>\",\n \"reason\": \"<string>\",\n \"signal\": \"<string>\",\n \"evidence_url\": \"<string>\",\n \"custom\": {},\n \"workflow_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"force\": false,\n \"test\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.b2bsignals.ai/api/v1/intake/people")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"linkedin_url\": \"<string>\",\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"company_name\": \"<string>\",\n \"company_domain\": \"<string>\",\n \"reason\": \"<string>\",\n \"signal\": \"<string>\",\n \"evidence_url\": \"<string>\",\n \"custom\": {},\n \"workflow_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"force\": false,\n \"test\": false\n}"
response = http.request(request)
puts response.read_body{
"action": "<string>",
"lead_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"enrolled": false,
"enroll_status": "<string>",
"test": false,
"would": "<string>",
"reason_code": "<string>",
"do_not_contact": true,
"message": "<string>",
"person": {
"name": "<string>",
"title": "<string>",
"company": "<string>",
"linkedin_url": "<string>",
"found_by": "<string>"
}
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Your workspace's API key. It starts with b2b_sk_.
Query Parameters
true checks the row and saves nothing.
clay marks rows sent from a Clay table. They count as tests until you turn Clay on. Leave it out for other tools.
Body
The person's LinkedIn profile URL. It must be a profile link, with /in/.
Full name. Needed, with a company name or domain, when there is no LinkedIn URL.
Job title.
Company name.
Company website domain.
Why you picked this person. It shows as their reason. Up to 500 characters.
500A short label for the event, such as Website visit. Up to 120 characters.
120A link that backs up the reason. Up to 1000 characters.
1000Your own fields. Use them in messages as {{custom.name}}.
A campaign id to start this person in.
Start them even if they are active in another campaign. Do not contact still applies.
true checks the row and saves nothing.
Response
Success
created, updated or test.
true when the person started in the campaign you named.
What happened with the campaign, such as enrolled or skipped_suppressed.
On a test: create, update or reject.
On a test that would be rejected: a short code for why.
On a test: true when the person is on Do not contact. A real send saves them, never contacts them.
Show child attributes
Show child attributes