curl --request POST \
--url https://client-api.salesfinity.co/v2/notes \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"type": "person",
"user_id": "507f1f77bcf86cd799439011",
"content": "Mentioned moving back from Lisbon next quarter.",
"linkedin_url": "https://linkedin.com/in/johndoe",
"email": "[email protected]",
"crm_id": "salesforce:003XXX",
"phone": "+14155552671",
"company_name": "Acme Corp",
"company_website": "https://acme.com",
"website_url": "https://acme.com",
"name": "Acme Corp"
}
'import requests
url = "https://client-api.salesfinity.co/v2/notes"
payload = {
"type": "person",
"user_id": "507f1f77bcf86cd799439011",
"content": "Mentioned moving back from Lisbon next quarter.",
"linkedin_url": "https://linkedin.com/in/johndoe",
"email": "[email protected]",
"crm_id": "salesforce:003XXX",
"phone": "+14155552671",
"company_name": "Acme Corp",
"company_website": "https://acme.com",
"website_url": "https://acme.com",
"name": "Acme Corp"
}
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({
type: 'person',
user_id: '507f1f77bcf86cd799439011',
content: 'Mentioned moving back from Lisbon next quarter.',
linkedin_url: 'https://linkedin.com/in/johndoe',
email: '[email protected]',
crm_id: 'salesforce:003XXX',
phone: '+14155552671',
company_name: 'Acme Corp',
company_website: 'https://acme.com',
website_url: 'https://acme.com',
name: 'Acme Corp'
})
};
fetch('https://client-api.salesfinity.co/v2/notes', 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://client-api.salesfinity.co/v2/notes",
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([
'type' => 'person',
'user_id' => '507f1f77bcf86cd799439011',
'content' => 'Mentioned moving back from Lisbon next quarter.',
'linkedin_url' => 'https://linkedin.com/in/johndoe',
'email' => '[email protected]',
'crm_id' => 'salesforce:003XXX',
'phone' => '+14155552671',
'company_name' => 'Acme Corp',
'company_website' => 'https://acme.com',
'website_url' => 'https://acme.com',
'name' => 'Acme Corp'
]),
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://client-api.salesfinity.co/v2/notes"
payload := strings.NewReader("{\n \"type\": \"person\",\n \"user_id\": \"507f1f77bcf86cd799439011\",\n \"content\": \"Mentioned moving back from Lisbon next quarter.\",\n \"linkedin_url\": \"https://linkedin.com/in/johndoe\",\n \"email\": \"[email protected]\",\n \"crm_id\": \"salesforce:003XXX\",\n \"phone\": \"+14155552671\",\n \"company_name\": \"Acme Corp\",\n \"company_website\": \"https://acme.com\",\n \"website_url\": \"https://acme.com\",\n \"name\": \"Acme Corp\"\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://client-api.salesfinity.co/v2/notes")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"person\",\n \"user_id\": \"507f1f77bcf86cd799439011\",\n \"content\": \"Mentioned moving back from Lisbon next quarter.\",\n \"linkedin_url\": \"https://linkedin.com/in/johndoe\",\n \"email\": \"[email protected]\",\n \"crm_id\": \"salesforce:003XXX\",\n \"phone\": \"+14155552671\",\n \"company_name\": \"Acme Corp\",\n \"company_website\": \"https://acme.com\",\n \"website_url\": \"https://acme.com\",\n \"name\": \"Acme Corp\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://client-api.salesfinity.co/v2/notes")
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 \"type\": \"person\",\n \"user_id\": \"507f1f77bcf86cd799439011\",\n \"content\": \"Mentioned moving back from Lisbon next quarter.\",\n \"linkedin_url\": \"https://linkedin.com/in/johndoe\",\n \"email\": \"[email protected]\",\n \"crm_id\": \"salesforce:003XXX\",\n \"phone\": \"+14155552671\",\n \"company_name\": \"Acme Corp\",\n \"company_website\": \"https://acme.com\",\n \"website_url\": \"https://acme.com\",\n \"name\": \"Acme Corp\"\n}"
response = http.request(request)
puts response.read_body{
"_id": "507f1f77bcf86cd799439011",
"team": "507f1f77bcf86cd799439012",
"author": {
"_id": "507f1f77bcf86cd799439011",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"image": "<string>"
},
"content": "<string>",
"is_pinned": true,
"pinned_at": "2023-11-07T05:31:56Z",
"pinned_by": "<string>",
"contact": "<string>",
"company": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"message": [
"limit must not be greater than 100"
],
"error": "Bad Request",
"statusCode": 400
}{
"message": "Forbidden resource",
"error": "Forbidden",
"statusCode": 403
}{
"message": "Too many requests",
"error": "Too Many Requests",
"statusCode": 429
}{
"message": "Internal server error",
"error": "Internal Server Error",
"statusCode": 500
}Create a Note
Creates a note attached to a person (Contact) or company (Company), identified by domain identifiers rather than by list/contact IDs. For a person, supply at least one of linkedin_url, email, crm_id, or phone. For a company, supply at least one of website_url or name. If no matching record exists yet, a minimal Contact or Company is created on the fly and the note is attached to its stable ID.
curl --request POST \
--url https://client-api.salesfinity.co/v2/notes \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"type": "person",
"user_id": "507f1f77bcf86cd799439011",
"content": "Mentioned moving back from Lisbon next quarter.",
"linkedin_url": "https://linkedin.com/in/johndoe",
"email": "[email protected]",
"crm_id": "salesforce:003XXX",
"phone": "+14155552671",
"company_name": "Acme Corp",
"company_website": "https://acme.com",
"website_url": "https://acme.com",
"name": "Acme Corp"
}
'import requests
url = "https://client-api.salesfinity.co/v2/notes"
payload = {
"type": "person",
"user_id": "507f1f77bcf86cd799439011",
"content": "Mentioned moving back from Lisbon next quarter.",
"linkedin_url": "https://linkedin.com/in/johndoe",
"email": "[email protected]",
"crm_id": "salesforce:003XXX",
"phone": "+14155552671",
"company_name": "Acme Corp",
"company_website": "https://acme.com",
"website_url": "https://acme.com",
"name": "Acme Corp"
}
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({
type: 'person',
user_id: '507f1f77bcf86cd799439011',
content: 'Mentioned moving back from Lisbon next quarter.',
linkedin_url: 'https://linkedin.com/in/johndoe',
email: '[email protected]',
crm_id: 'salesforce:003XXX',
phone: '+14155552671',
company_name: 'Acme Corp',
company_website: 'https://acme.com',
website_url: 'https://acme.com',
name: 'Acme Corp'
})
};
fetch('https://client-api.salesfinity.co/v2/notes', 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://client-api.salesfinity.co/v2/notes",
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([
'type' => 'person',
'user_id' => '507f1f77bcf86cd799439011',
'content' => 'Mentioned moving back from Lisbon next quarter.',
'linkedin_url' => 'https://linkedin.com/in/johndoe',
'email' => '[email protected]',
'crm_id' => 'salesforce:003XXX',
'phone' => '+14155552671',
'company_name' => 'Acme Corp',
'company_website' => 'https://acme.com',
'website_url' => 'https://acme.com',
'name' => 'Acme Corp'
]),
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://client-api.salesfinity.co/v2/notes"
payload := strings.NewReader("{\n \"type\": \"person\",\n \"user_id\": \"507f1f77bcf86cd799439011\",\n \"content\": \"Mentioned moving back from Lisbon next quarter.\",\n \"linkedin_url\": \"https://linkedin.com/in/johndoe\",\n \"email\": \"[email protected]\",\n \"crm_id\": \"salesforce:003XXX\",\n \"phone\": \"+14155552671\",\n \"company_name\": \"Acme Corp\",\n \"company_website\": \"https://acme.com\",\n \"website_url\": \"https://acme.com\",\n \"name\": \"Acme Corp\"\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://client-api.salesfinity.co/v2/notes")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"person\",\n \"user_id\": \"507f1f77bcf86cd799439011\",\n \"content\": \"Mentioned moving back from Lisbon next quarter.\",\n \"linkedin_url\": \"https://linkedin.com/in/johndoe\",\n \"email\": \"[email protected]\",\n \"crm_id\": \"salesforce:003XXX\",\n \"phone\": \"+14155552671\",\n \"company_name\": \"Acme Corp\",\n \"company_website\": \"https://acme.com\",\n \"website_url\": \"https://acme.com\",\n \"name\": \"Acme Corp\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://client-api.salesfinity.co/v2/notes")
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 \"type\": \"person\",\n \"user_id\": \"507f1f77bcf86cd799439011\",\n \"content\": \"Mentioned moving back from Lisbon next quarter.\",\n \"linkedin_url\": \"https://linkedin.com/in/johndoe\",\n \"email\": \"[email protected]\",\n \"crm_id\": \"salesforce:003XXX\",\n \"phone\": \"+14155552671\",\n \"company_name\": \"Acme Corp\",\n \"company_website\": \"https://acme.com\",\n \"website_url\": \"https://acme.com\",\n \"name\": \"Acme Corp\"\n}"
response = http.request(request)
puts response.read_body{
"_id": "507f1f77bcf86cd799439011",
"team": "507f1f77bcf86cd799439012",
"author": {
"_id": "507f1f77bcf86cd799439011",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"image": "<string>"
},
"content": "<string>",
"is_pinned": true,
"pinned_at": "2023-11-07T05:31:56Z",
"pinned_by": "<string>",
"contact": "<string>",
"company": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"message": [
"limit must not be greater than 100"
],
"error": "Bad Request",
"statusCode": 400
}{
"message": "Forbidden resource",
"error": "Forbidden",
"statusCode": 403
}{
"message": "Too many requests",
"error": "Too Many Requests",
"statusCode": 429
}{
"message": "Internal server error",
"error": "Internal Server Error",
"statusCode": 500
}Request Body
| Field | Type | Required | Max Length | Description |
|---|---|---|---|---|
type | string | Yes | — | person or company. Determines which identifier fields are required. |
user_id | string | Yes | — | ID of the team member authoring the note. Must be a member of the team that owns the API key. |
content | string | Yes | 10,000 | Plain text content of the note. |
Person identifiers (type: "person")
Supply at least one of:
| Field | Type | Max Length | Description |
|---|---|---|---|
linkedin_url | string | 500 | LinkedIn profile URL. Username is extracted automatically. |
email | string | 320 | Email address. |
crm_id | string | 200 | External CRM identifier (e.g. salesforce:003XXX). |
phone | string | 50 | Phone number in E.164 format. |
| Field | Type | Max Length | Description |
|---|---|---|---|
company_name | string | 300 | Company name to link to the person. |
company_website | string | 500 | Company website to link to the person. |
Company identifiers (type: "company")
Supply at least one of:
| Field | Type | Max Length | Description |
|---|---|---|---|
website_url | string | 500 | Company website URL. Normalized to hostname for matching. |
name | string | 300 | Company name. Case-insensitive match against the company name list. |
Example Request — person
{
"type": "person",
"user_id": "507f1f77bcf86cd799439033",
"content": "Mentioned moving back from Lisbon next quarter.",
"email": "[email protected]",
"company_name": "Acme Corp"
}
Example Request — company
{
"type": "company",
"user_id": "507f1f77bcf86cd799439033",
"content": "Renewal owner is the new VP of Ops — loop in before Q3.",
"website_url": "https://acme.com"
}
Response (201)
Returns the created note object. For a person note,contact is set; for a company note, company is set.
Errors
| Status | Description |
|---|---|
| 400 | Validation failed (e.g. no identifier supplied for the chosen type), or user_id is not a member of the team |
Authorizations
Team-scoped API key generated in the Salesfinity dashboard under Settings -> Connections & API. A missing or invalid key returns HTTP 403.
Body
Target type. Determines which identifier fields are required.
person, company "person"
ID of the team member authoring the note. Must be a member of the team that owns the API key.
"507f1f77bcf86cd799439011"
Plain text content of the note
10000"Mentioned moving back from Lisbon next quarter."
LinkedIn profile URL (person only). Username is extracted automatically. Person notes require at least one of linkedin_url, email, crm_id, or phone.
500"https://linkedin.com/in/johndoe"
External CRM identifier (person only)
200"salesforce:003XXX"
Phone number in E.164 format (person only)
50"+14155552671"
Company name to link to the person if a new Contact is created. Ignored if the person already exists. (person only)
300"Acme Corp"
Company website to link to the person if a new Contact is created. Ignored if the person already exists. (person only)
500"https://acme.com"
Company website URL (company only). Normalized to hostname for matching. Company notes require at least one of website_url or name.
500"https://acme.com"
Company name (company only). Case-insensitive match against the company name list.
300"Acme Corp"
Response
Note created successfully
"507f1f77bcf86cd799439011"
"507f1f77bcf86cd799439012"
Note author. Populated when available; otherwise just the user ID under _id.
Show child attributes
Show child attributes
Plain text content of the note
Whether this note is pinned to the top
Contact this note is attached to (mutually exclusive with company)
Company this note is attached to (mutually exclusive with contact)