Attach & Score a List
curl --request POST \
--url https://api.opennous.cloud/v2/lead-lists/attach \
--header 'Content-Type: application/json' \
--data '
{
"rows": [
{}
],
"name": "<string>",
"lead_list_id": "<string>",
"source": "<string>",
"import_duplicates": true
}
'import requests
url = "https://api.opennous.cloud/v2/lead-lists/attach"
payload = {
"rows": [{}],
"name": "<string>",
"lead_list_id": "<string>",
"source": "<string>",
"import_duplicates": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
rows: [{}],
name: '<string>',
lead_list_id: '<string>',
source: '<string>',
import_duplicates: true
})
};
fetch('https://api.opennous.cloud/v2/lead-lists/attach', 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.opennous.cloud/v2/lead-lists/attach",
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([
'rows' => [
[
]
],
'name' => '<string>',
'lead_list_id' => '<string>',
'source' => '<string>',
'import_duplicates' => true
]),
CURLOPT_HTTPHEADER => [
"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.opennous.cloud/v2/lead-lists/attach"
payload := strings.NewReader("{\n \"rows\": [\n {}\n ],\n \"name\": \"<string>\",\n \"lead_list_id\": \"<string>\",\n \"source\": \"<string>\",\n \"import_duplicates\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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.opennous.cloud/v2/lead-lists/attach")
.header("Content-Type", "application/json")
.body("{\n \"rows\": [\n {}\n ],\n \"name\": \"<string>\",\n \"lead_list_id\": \"<string>\",\n \"source\": \"<string>\",\n \"import_duplicates\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.opennous.cloud/v2/lead-lists/attach")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"rows\": [\n {}\n ],\n \"name\": \"<string>\",\n \"lead_list_id\": \"<string>\",\n \"source\": \"<string>\",\n \"import_duplicates\": true\n}"
response = http.request(request)
puts response.read_bodyLeads
Attach & Score a List
Score a whole list you built somewhere else in one call. Nous creates the list, resolves every row, and scores each against your ICP model and intent.
POST
/
v2
/
lead-lists
/
attach
Attach & Score a List
curl --request POST \
--url https://api.opennous.cloud/v2/lead-lists/attach \
--header 'Content-Type: application/json' \
--data '
{
"rows": [
{}
],
"name": "<string>",
"lead_list_id": "<string>",
"source": "<string>",
"import_duplicates": true
}
'import requests
url = "https://api.opennous.cloud/v2/lead-lists/attach"
payload = {
"rows": [{}],
"name": "<string>",
"lead_list_id": "<string>",
"source": "<string>",
"import_duplicates": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
rows: [{}],
name: '<string>',
lead_list_id: '<string>',
source: '<string>',
import_duplicates: true
})
};
fetch('https://api.opennous.cloud/v2/lead-lists/attach', 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.opennous.cloud/v2/lead-lists/attach",
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([
'rows' => [
[
]
],
'name' => '<string>',
'lead_list_id' => '<string>',
'source' => '<string>',
'import_duplicates' => true
]),
CURLOPT_HTTPHEADER => [
"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.opennous.cloud/v2/lead-lists/attach"
payload := strings.NewReader("{\n \"rows\": [\n {}\n ],\n \"name\": \"<string>\",\n \"lead_list_id\": \"<string>\",\n \"source\": \"<string>\",\n \"import_duplicates\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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.opennous.cloud/v2/lead-lists/attach")
.header("Content-Type", "application/json")
.body("{\n \"rows\": [\n {}\n ],\n \"name\": \"<string>\",\n \"lead_list_id\": \"<string>\",\n \"source\": \"<string>\",\n \"import_duplicates\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.opennous.cloud/v2/lead-lists/attach")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"rows\": [\n {}\n ],\n \"name\": \"<string>\",\n \"lead_list_id\": \"<string>\",\n \"source\": \"<string>\",\n \"import_duplicates\": true\n}"
response = http.request(request)
puts response.read_bodyScore a whole list you built somewhere else, a Google Sheet, a CRM export, a Clay table, in a single call. Nous creates a lead list, resolves each row to a person or company (deduped against the workspace), and scores every row against your ICP model and current intent. The spreadsheet stays yours. Nous keeps the roster so the scores stay current and every other agent can read them.
This is the batch counterpart to
Each row accepts
Rows are deduped against the workspace, so re-attaching the same sheet reuses existing records instead of forking duplicates. Scoring an already-scored row never stacks duplicate predictions.
/v2/score. Send the rows once, get the whole list scored into the graph.
attach needs a scoring model. Build one first with build_icp_model.Request
curl -X POST https://api.opennous.cloud/v2/lead-lists/attach \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "Q3 sheet",
"source": "google_sheet",
"rows": [
{ "email": "sarah@acme.com", "name": "Sarah Chen", "company": "Acme" },
{ "email": "tom@globex.io" }
]
}'
Body
object[]
required
The list rows. Each row needs an
email or a linkedin_url. Max 200 per call. Loop for a larger sheet.string
Name for the new list. Required unless you pass
lead_list_id.string
Add to an existing list instead of creating one.
string
default:"external"
Where the list came from, for example
google_sheet or crm_export.boolean
default:"false"
Force-insert rows already in the list.
email, linkedin_url, domain, company, and name.
Response
{
"lead_list_id": "06167031-...",
"inserted": 187,
"duplicate_skipped": 13,
"skipped": 13,
"scored": 142,
"awaiting_enrichment": 45,
"unresolved": 0,
"results": [
{ "identifier": "sarah@acme.com", "resolved": true, "scored": true, "icp": { "score": 84, "tier": "tier_1" }, "intent": { "score": 64, "band": "Warm" } },
{ "identifier": "tom@globex.io", "resolved": true, "scored": false, "reason": "awaiting_enrichment" }
]
}
What happens to each row
| Outcome | Meaning |
|---|---|
| scored | Resolved and scored. The ICP fit and intent are on the account |
| awaiting_enrichment | Resolved, but Nous has no scoreable facts yet. Enrich, then re-attach |
| unresolved | No email or LinkedIn URL on the row, so it could not be added |
Keep a sheet current
Run this on a cadence, a weekly job over your sheet, and both the roster and every score stay current. Pass the samelead_list_id each run to add new rows to the same list. Rows that came back awaiting_enrichment will score once you enrich them and re-attach.
When to call it
- You built a list somewhere else and want the whole thing scored into the graph in one pass
- On a cadence over a sheet, so the roster and every score stay current
- For a single row, use
/v2/score