Organization
Train from closed deals
Train the ICP model on real won and lost deals. Nous enriches each domain, links the contacts it already has there, learns the signals that separate wins from losses, and rescores open accounts. Up to 40 deals per list.
POST
/
v2
/
icp
/
closed-deals
Train from closed deals
curl --request POST \
--url https://api.opennous.cloud/v2/icp/closed-deals \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"won": [
"acme.com",
{
"domain": "globex.com",
"amount": 48000,
"currency": "USD",
"closed_at": "2026-08-14"
}
],
"lost": [
"initech.com"
]
}
'import requests
url = "https://api.opennous.cloud/v2/icp/closed-deals"
payload = {
"won": [
"acme.com",
{
"domain": "globex.com",
"amount": 48000,
"currency": "USD",
"closed_at": "2026-08-14"
}
],
"lost": ["initech.com"]
}
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({
won: [
'acme.com',
{domain: 'globex.com', amount: 48000, currency: 'USD', closed_at: '2026-08-14'}
],
lost: ['initech.com']
})
};
fetch('https://api.opennous.cloud/v2/icp/closed-deals', 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/icp/closed-deals",
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([
'won' => [
'acme.com',
[
'domain' => 'globex.com',
'amount' => 48000,
'currency' => 'USD',
'closed_at' => '2026-08-14'
]
],
'lost' => [
'initech.com'
]
]),
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.opennous.cloud/v2/icp/closed-deals"
payload := strings.NewReader("{\n \"won\": [\n \"acme.com\",\n {\n \"domain\": \"globex.com\",\n \"amount\": 48000,\n \"currency\": \"USD\",\n \"closed_at\": \"2026-08-14\"\n }\n ],\n \"lost\": [\n \"initech.com\"\n ]\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.opennous.cloud/v2/icp/closed-deals")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"won\": [\n \"acme.com\",\n {\n \"domain\": \"globex.com\",\n \"amount\": 48000,\n \"currency\": \"USD\",\n \"closed_at\": \"2026-08-14\"\n }\n ],\n \"lost\": [\n \"initech.com\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.opennous.cloud/v2/icp/closed-deals")
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 \"won\": [\n \"acme.com\",\n {\n \"domain\": \"globex.com\",\n \"amount\": 48000,\n \"currency\": \"USD\",\n \"closed_at\": \"2026-08-14\"\n }\n ],\n \"lost\": [\n \"initech.com\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"won": 2,
"lost": 1,
"enriched": 3,
"surfaced": 2,
"mode": "lift",
"linked": [
{
"domain": "acme.com",
"name": "Sarah Chen"
}
],
"discovered": [
{
"label": "Employees 200-500",
"weight": 15,
"note": "on 2 of your 2 won deals"
}
]
}
Trains the ICP model on deals you actually won and lost, then rescores open accounts.
Pass domains, or objects with
amount, currency, and closed_at. One deal is enough to start. Won and lost together give the clearest signal.Authorizations
bearerAuthapiKeyHeader
Workspace API key. Create one in Settings → API keys.
Body
application/json
Response
What the model learned.
Companies enriched.
New signals added to the model.
lift compares won against lost. winners uses won deals only.
Available options:
lift, winners Show child attributes
Show child attributes
Show child attributes
Show child attributes
⌘I
Train from closed deals
curl --request POST \
--url https://api.opennous.cloud/v2/icp/closed-deals \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"won": [
"acme.com",
{
"domain": "globex.com",
"amount": 48000,
"currency": "USD",
"closed_at": "2026-08-14"
}
],
"lost": [
"initech.com"
]
}
'import requests
url = "https://api.opennous.cloud/v2/icp/closed-deals"
payload = {
"won": [
"acme.com",
{
"domain": "globex.com",
"amount": 48000,
"currency": "USD",
"closed_at": "2026-08-14"
}
],
"lost": ["initech.com"]
}
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({
won: [
'acme.com',
{domain: 'globex.com', amount: 48000, currency: 'USD', closed_at: '2026-08-14'}
],
lost: ['initech.com']
})
};
fetch('https://api.opennous.cloud/v2/icp/closed-deals', 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/icp/closed-deals",
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([
'won' => [
'acme.com',
[
'domain' => 'globex.com',
'amount' => 48000,
'currency' => 'USD',
'closed_at' => '2026-08-14'
]
],
'lost' => [
'initech.com'
]
]),
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.opennous.cloud/v2/icp/closed-deals"
payload := strings.NewReader("{\n \"won\": [\n \"acme.com\",\n {\n \"domain\": \"globex.com\",\n \"amount\": 48000,\n \"currency\": \"USD\",\n \"closed_at\": \"2026-08-14\"\n }\n ],\n \"lost\": [\n \"initech.com\"\n ]\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.opennous.cloud/v2/icp/closed-deals")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"won\": [\n \"acme.com\",\n {\n \"domain\": \"globex.com\",\n \"amount\": 48000,\n \"currency\": \"USD\",\n \"closed_at\": \"2026-08-14\"\n }\n ],\n \"lost\": [\n \"initech.com\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.opennous.cloud/v2/icp/closed-deals")
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 \"won\": [\n \"acme.com\",\n {\n \"domain\": \"globex.com\",\n \"amount\": 48000,\n \"currency\": \"USD\",\n \"closed_at\": \"2026-08-14\"\n }\n ],\n \"lost\": [\n \"initech.com\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"won": 2,
"lost": 1,
"enriched": 3,
"surfaced": 2,
"mode": "lift",
"linked": [
{
"domain": "acme.com",
"name": "Sarah Chen"
}
],
"discovered": [
{
"label": "Employees 200-500",
"weight": 15,
"note": "on 2 of your 2 won deals"
}
]
}