curl --request POST \
--url https://api.tryfuse.ai/api/v1/business/lists/{listId}/contacts \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"contacts": [
{
"firstName": "<string>",
"lastName": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"linkedinUrl": "<string>",
"jobTitle": "<string>",
"companyName": "<string>",
"companyDomain": "<string>"
}
]
}
'import requests
url = "https://api.tryfuse.ai/api/v1/business/lists/{listId}/contacts"
payload = { "contacts": [
{
"firstName": "<string>",
"lastName": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"linkedinUrl": "<string>",
"jobTitle": "<string>",
"companyName": "<string>",
"companyDomain": "<string>"
}
] }
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contacts: [
{
firstName: '<string>',
lastName: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
linkedinUrl: '<string>',
jobTitle: '<string>',
companyName: '<string>',
companyDomain: '<string>'
}
]
})
};
fetch('https://api.tryfuse.ai/api/v1/business/lists/{listId}/contacts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"addedCount": 2,
"contactIds": [
"68a1f4109c41d20014b3ea01",
"68a1f4109c41d20014b3ea02"
]
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}Upload new contact data into a list (RAW upload)
Creates new contacts from the supplied data and adds them to the list, the same path a CSV upload takes (no enrichment runs and no credits are spent). Every row becomes a new contact — there is no de-duplication against contacts already in the workspace, so retrying a call duplicates rows. Emails are stored as the primary email with status valid without verification, phones are normalised to E.164 (US assumed when no country code is given), and LinkedIn URLs are normalised to linkedin.com/in/<slug> so the contact can later be found with POST /business/contacts/resolve. The returned contactIds are the new rows’ ids, usable with columns/{columnId}/values, enrich and crm-push. Up to 500 contacts per call.
Errors:
404LIST_NOT_FOUND— No list with that id is visible to the token owner.422CONTACT_LIST_REQUIRED— The list is a company list; contact rows cannot be written into it.422VALIDATION_FAILED— contacts missing/empty/over 500, a row with none of email/linkedinUrl/firstName/lastName, a malformed email, or an unknown key.429RATE_LIMITED— The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted.
Requires one of the following token scopes: lists.
curl --request POST \
--url https://api.tryfuse.ai/api/v1/business/lists/{listId}/contacts \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"contacts": [
{
"firstName": "<string>",
"lastName": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"linkedinUrl": "<string>",
"jobTitle": "<string>",
"companyName": "<string>",
"companyDomain": "<string>"
}
]
}
'import requests
url = "https://api.tryfuse.ai/api/v1/business/lists/{listId}/contacts"
payload = { "contacts": [
{
"firstName": "<string>",
"lastName": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"linkedinUrl": "<string>",
"jobTitle": "<string>",
"companyName": "<string>",
"companyDomain": "<string>"
}
] }
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contacts: [
{
firstName: '<string>',
lastName: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
linkedinUrl: '<string>',
jobTitle: '<string>',
companyName: '<string>',
companyDomain: '<string>'
}
]
})
};
fetch('https://api.tryfuse.ai/api/v1/business/lists/{listId}/contacts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"addedCount": 2,
"contactIds": [
"68a1f4109c41d20014b3ea01",
"68a1f4109c41d20014b3ea02"
]
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}Authorizations
Your API token (af_…) as the Basic-auth username, with an empty password.
Path Parameters
24-character hex id of the list (from GET /business/lists).
Body
Contacts to create as new rows in the list, at most 500 per call. The entries do not combine: each one becomes its own new contact, in the order sent, and there is no de-duplication — against the workspace or within the call, so the same person sent twice lands twice. Every field is free text stored as given (only linkedinUrl and phone are normalised); nothing is enriched or verified on upload.
1 - 500 elementsShow child attributes
Show child attributes