curl --request POST \
--url https://api.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact": {
"name": "Maria Souza",
"phone": "+5511999998888",
"email": "maria.souza@exemplo.com.br",
"job_title": "Gerente de Compras"
},
"fields": {
"origem": "site"
}
}
'import requests
url = "https://api.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact"
payload = {
"contact": {
"name": "Maria Souza",
"phone": "+5511999998888",
"email": "maria.souza@exemplo.com.br",
"job_title": "Gerente de Compras"
},
"fields": { "origem": "site" }
}
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({
contact: {
name: 'Maria Souza',
phone: '+5511999998888',
email: 'maria.souza@exemplo.com.br',
job_title: 'Gerente de Compras'
},
fields: {origem: 'site'}
})
};
fetch('https://api.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact', 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.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact",
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([
'contact' => [
'name' => 'Maria Souza',
'phone' => '+5511999998888',
'email' => 'maria.souza@exemplo.com.br',
'job_title' => 'Gerente de Compras'
],
'fields' => [
'origem' => 'site'
]
]),
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.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact"
payload := strings.NewReader("{\n \"contact\": {\n \"name\": \"Maria Souza\",\n \"phone\": \"+5511999998888\",\n \"email\": \"maria.souza@exemplo.com.br\",\n \"job_title\": \"Gerente de Compras\"\n },\n \"fields\": {\n \"origem\": \"site\"\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.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact\": {\n \"name\": \"Maria Souza\",\n \"phone\": \"+5511999998888\",\n \"email\": \"maria.souza@exemplo.com.br\",\n \"job_title\": \"Gerente de Compras\"\n },\n \"fields\": {\n \"origem\": \"site\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact")
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 \"contact\": {\n \"name\": \"Maria Souza\",\n \"phone\": \"+5511999998888\",\n \"email\": \"maria.souza@exemplo.com.br\",\n \"job_title\": \"Gerente de Compras\"\n },\n \"fields\": {\n \"origem\": \"site\"\n }\n}"
response = http.request(request)
puts response.read_body{}Inscribir un contacto en la campaña
Crea el contacto si aún no existe y lo inscribe en la campaña. Identifique por contact.phone (E.164) y/o contact.linkedin_identifier — al menos uno; una campaña de WhatsApp exige phone, una de LinkedIn exige linkedin. Solo campañas ACTIVE (409 en caso contrario). Una conversación activa o un canal incompatible devuelven status: "skipped". contact.external_id sobrescribe el vínculo de CRM del contacto.
curl --request POST \
--url https://api.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact": {
"name": "Maria Souza",
"phone": "+5511999998888",
"email": "maria.souza@exemplo.com.br",
"job_title": "Gerente de Compras"
},
"fields": {
"origem": "site"
}
}
'import requests
url = "https://api.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact"
payload = {
"contact": {
"name": "Maria Souza",
"phone": "+5511999998888",
"email": "maria.souza@exemplo.com.br",
"job_title": "Gerente de Compras"
},
"fields": { "origem": "site" }
}
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({
contact: {
name: 'Maria Souza',
phone: '+5511999998888',
email: 'maria.souza@exemplo.com.br',
job_title: 'Gerente de Compras'
},
fields: {origem: 'site'}
})
};
fetch('https://api.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact', 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.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact",
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([
'contact' => [
'name' => 'Maria Souza',
'phone' => '+5511999998888',
'email' => 'maria.souza@exemplo.com.br',
'job_title' => 'Gerente de Compras'
],
'fields' => [
'origem' => 'site'
]
]),
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.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact"
payload := strings.NewReader("{\n \"contact\": {\n \"name\": \"Maria Souza\",\n \"phone\": \"+5511999998888\",\n \"email\": \"maria.souza@exemplo.com.br\",\n \"job_title\": \"Gerente de Compras\"\n },\n \"fields\": {\n \"origem\": \"site\"\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.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact\": {\n \"name\": \"Maria Souza\",\n \"phone\": \"+5511999998888\",\n \"email\": \"maria.souza@exemplo.com.br\",\n \"job_title\": \"Gerente de Compras\"\n },\n \"fields\": {\n \"origem\": \"site\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nuvia.ai/v1/campaigns/{campaignId}/enrollments/from-contact")
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 \"contact\": {\n \"name\": \"Maria Souza\",\n \"phone\": \"+5511999998888\",\n \"email\": \"maria.souza@exemplo.com.br\",\n \"job_title\": \"Gerente de Compras\"\n },\n \"fields\": {\n \"origem\": \"site\"\n }\n}"
response = http.request(request)
puts response.read_body{}Autorizaciones
Token JWT de autenticación
Parámetros de ruta
ID de la campaña (debe estar ACTIVE)
Cuerpo
Contacto a inscribir. Informe phone y/o linkedin_identifier: al menos uno es obligatorio.
Show child attributes
Show child attributes
Campos personalizados del contacto, por slug: { "slug": valor }. Un slug sin custom field de contacto se ignora.
Show child attributes
Show child attributes
Si es true y el contacto ya concluyó la campaña, reactiva la inscripción para un nuevo envío. No afecta una inscripción en curso.
Si es true, contact.name reemplaza el nombre de un contacto que ya existe. Por defecto, el nombre solo se guarda en la creación.
Respuesta
The response is of type object.