curl --request POST \
--url https://api.enrichloops.com/v1/loops/{id}/run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"domain": "stripe.com",
"linkedinUrl": "https://www.linkedin.com/company/stripe",
"email": "jane.doe@acme.com",
"fullName": "<string>",
"title": "<string>",
"location": "<string>"
}
'import requests
url = "https://api.enrichloops.com/v1/loops/{id}/run"
payload = {
"domain": "stripe.com",
"linkedinUrl": "https://www.linkedin.com/company/stripe",
"email": "jane.doe@acme.com",
"fullName": "<string>",
"title": "<string>",
"location": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
domain: 'stripe.com',
linkedinUrl: 'https://www.linkedin.com/company/stripe',
email: 'jane.doe@acme.com',
fullName: '<string>',
title: '<string>',
location: '<string>'
})
};
fetch('https://api.enrichloops.com/v1/loops/{id}/run', 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.enrichloops.com/v1/loops/{id}/run",
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([
'domain' => 'stripe.com',
'linkedinUrl' => 'https://www.linkedin.com/company/stripe',
'email' => 'jane.doe@acme.com',
'fullName' => '<string>',
'title' => '<string>',
'location' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.enrichloops.com/v1/loops/{id}/run"
payload := strings.NewReader("{\n \"domain\": \"stripe.com\",\n \"linkedinUrl\": \"https://www.linkedin.com/company/stripe\",\n \"email\": \"jane.doe@acme.com\",\n \"fullName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.enrichloops.com/v1/loops/{id}/run")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain\": \"stripe.com\",\n \"linkedinUrl\": \"https://www.linkedin.com/company/stripe\",\n \"email\": \"jane.doe@acme.com\",\n \"fullName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.enrichloops.com/v1/loops/{id}/run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain\": \"stripe.com\",\n \"linkedinUrl\": \"https://www.linkedin.com/company/stripe\",\n \"email\": \"jane.doe@acme.com\",\n \"fullName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"task": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object_type": "company",
"operation": "enrich",
"status": "queued",
"target": "<string>",
"credits_charged": 123,
"created_at": "2023-11-07T05:31:56Z",
"input": {},
"loop_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"idempotency_key": "<string>",
"queued_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
},
"error": {
"code": "not_found",
"message": "<string>",
"candidates": 123,
"hintsAccepted": [
"<string>"
]
}
}{
"task": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object_type": "company",
"operation": "enrich",
"status": "queued",
"target": "<string>",
"credits_charged": 123,
"created_at": "2023-11-07T05:31:56Z",
"input": {},
"loop_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"idempotency_key": "<string>",
"queued_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
},
"error": {
"code": "not_found",
"message": "<string>",
"candidates": 123,
"hintsAccepted": [
"<string>"
]
}
}{
"error": "<string>"
}"Unauthorized"{
"error": "<string>",
"code": "credits_expired",
"creditsRemaining": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"code": "idempotency_key_reused"
}{
"error": "<string>",
"code": "queue_full",
"queuedTasks": 123
}{
"error": "<string>",
"requestId": "<string>"
}Send a record to a Loop
Behaves like the matching direct endpoint (POST /v1/companies/enrich for a company Loop, POST /v1/people/enrich
for a person Loop). Same task response, same 200 or 202
semantics, still pollable. Two differences: the object type comes from
the Loop’s configuration rather than the URL, and once the task
settles, the result is also POSTed to the Loop’s webhook.
The body is the input the matching direct endpoint takes. A company
Loop accepts domain or linkedinUrl. A person Loop accepts
linkedinUrl or email, plus the optional email tie-break hints.
curl --request POST \
--url https://api.enrichloops.com/v1/loops/{id}/run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"domain": "stripe.com",
"linkedinUrl": "https://www.linkedin.com/company/stripe",
"email": "jane.doe@acme.com",
"fullName": "<string>",
"title": "<string>",
"location": "<string>"
}
'import requests
url = "https://api.enrichloops.com/v1/loops/{id}/run"
payload = {
"domain": "stripe.com",
"linkedinUrl": "https://www.linkedin.com/company/stripe",
"email": "jane.doe@acme.com",
"fullName": "<string>",
"title": "<string>",
"location": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
domain: 'stripe.com',
linkedinUrl: 'https://www.linkedin.com/company/stripe',
email: 'jane.doe@acme.com',
fullName: '<string>',
title: '<string>',
location: '<string>'
})
};
fetch('https://api.enrichloops.com/v1/loops/{id}/run', 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.enrichloops.com/v1/loops/{id}/run",
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([
'domain' => 'stripe.com',
'linkedinUrl' => 'https://www.linkedin.com/company/stripe',
'email' => 'jane.doe@acme.com',
'fullName' => '<string>',
'title' => '<string>',
'location' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.enrichloops.com/v1/loops/{id}/run"
payload := strings.NewReader("{\n \"domain\": \"stripe.com\",\n \"linkedinUrl\": \"https://www.linkedin.com/company/stripe\",\n \"email\": \"jane.doe@acme.com\",\n \"fullName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.enrichloops.com/v1/loops/{id}/run")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain\": \"stripe.com\",\n \"linkedinUrl\": \"https://www.linkedin.com/company/stripe\",\n \"email\": \"jane.doe@acme.com\",\n \"fullName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.enrichloops.com/v1/loops/{id}/run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain\": \"stripe.com\",\n \"linkedinUrl\": \"https://www.linkedin.com/company/stripe\",\n \"email\": \"jane.doe@acme.com\",\n \"fullName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"task": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object_type": "company",
"operation": "enrich",
"status": "queued",
"target": "<string>",
"credits_charged": 123,
"created_at": "2023-11-07T05:31:56Z",
"input": {},
"loop_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"idempotency_key": "<string>",
"queued_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
},
"error": {
"code": "not_found",
"message": "<string>",
"candidates": 123,
"hintsAccepted": [
"<string>"
]
}
}{
"task": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object_type": "company",
"operation": "enrich",
"status": "queued",
"target": "<string>",
"credits_charged": 123,
"created_at": "2023-11-07T05:31:56Z",
"input": {},
"loop_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"idempotency_key": "<string>",
"queued_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
},
"error": {
"code": "not_found",
"message": "<string>",
"candidates": 123,
"hintsAccepted": [
"<string>"
]
}
}{
"error": "<string>"
}"Unauthorized"{
"error": "<string>",
"code": "credits_expired",
"creditsRemaining": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"code": "idempotency_key_reused"
}{
"error": "<string>",
"code": "queue_full",
"queuedTasks": 123
}{
"error": "<string>",
"requestId": "<string>"
}Authorizations
Pass your API key as a bearer token: Authorization: Bearer YOUR_API_KEY. Generate and manage keys from your dashboard under
Settings → API Keys.
Headers
As on the direct endpoints: reusing a key replays the original
task, and reusing one with a different body is rejected with
422.
255Path Parameters
Body
A company domain. company Loops only.
"stripe.com"
A LinkedIn company page URL for a company Loop, or a
LinkedIn profile URL for a person Loop.
"https://www.linkedin.com/company/stripe"
A work email address. person Loops only.
"jane.doe@acme.com"
Optional tie-break hint for email lookups. See POST /v1/people/enrich.
200Optional tie-break hint for email lookups.
200Optional tie-break hint for email lookups.
200Response
The task settled inside the request.
Never carries data. Carries error only if the task already failed
inside the request. Fetch the result from GET /v1/tasks/{id} or a
Loop webhook.