curl --request GET \
--url https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId} \
--header 'apikey: <api-key>'import requests
url = "https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}"
headers = {"apikey": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {apikey: '<api-key>'}};
fetch('https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}', 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.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"apikey: <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"
"net/http"
"io"
)
func main() {
url := "https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("apikey", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}")
.header("apikey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["apikey"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"kind": "contacts.load",
"operationId": "9f1c7e2a-4b3d-4a1e-9c8f-2d5b6e7a8c90",
"batchId": "3f8a1b2c-5d6e-4f70-8a9b-1c2d3e4f5a6b",
"type": "contacts.insert",
"status": "partial",
"requestedCount": 150,
"totalChunks": 3,
"chunksCompleted": 3,
"insertedCount": 140,
"invalidCount": 4,
"duplicateCount": 6,
"updatedCount": 0,
"recontactedCount": 0,
"errors": [
{
"identifier": "CLI-042",
"reason": "addresses[0]: formato inválido para tipo 'phone': '123' (debe contener solo dígitos, 7-15 caracteres)"
},
{
"identifier": "CLI-077",
"reason": "Duplicate of an existing contact, rejected by the batch policy (matched phone)"
}
],
"createdAt": "2026-08-10T12:00:00.000Z",
"completedAt": "2026-08-10T12:00:04.120Z"
}Consultar una operación
Consulta el estado y el resultado de una operación asíncrona.
curl --request GET \
--url https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId} \
--header 'apikey: <api-key>'import requests
url = "https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}"
headers = {"apikey": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {apikey: '<api-key>'}};
fetch('https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}', 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.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"apikey: <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"
"net/http"
"io"
)
func main() {
url := "https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("apikey", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}")
.header("apikey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.backend.inconcertcc.com/autocontact/api/v1/batches/operations/{operationId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["apikey"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"kind": "contacts.load",
"operationId": "9f1c7e2a-4b3d-4a1e-9c8f-2d5b6e7a8c90",
"batchId": "3f8a1b2c-5d6e-4f70-8a9b-1c2d3e4f5a6b",
"type": "contacts.insert",
"status": "partial",
"requestedCount": 150,
"totalChunks": 3,
"chunksCompleted": 3,
"insertedCount": 140,
"invalidCount": 4,
"duplicateCount": 6,
"updatedCount": 0,
"recontactedCount": 0,
"errors": [
{
"identifier": "CLI-042",
"reason": "addresses[0]: formato inválido para tipo 'phone': '123' (debe contener solo dígitos, 7-15 caracteres)"
},
{
"identifier": "CLI-077",
"reason": "Duplicate of an existing contact, rejected by the batch policy (matched phone)"
}
],
"createdAt": "2026-08-10T12:00:00.000Z",
"completedAt": "2026-08-10T12:00:04.120Z"
}operationId devuelto por una operación con respuesta 202 para seguir su progreso y recuperar su resultado.
Revisa primero el campo kind: contacts.load devuelve el desglose de los contactos cargados, mientras que batch.lifecycle informa del progreso y la etapa de una operación sobre el lote.
En una carga de contactos, recontactedCount indica cuántos contactos existentes se volvieron a poner en marcación mediante onDuplicate: "recontact".Authorizations
API key obtenida desde la interfaz de Inagent, dentro del marcador.
Path Parameters
Identificador de la operación, devuelto por la operación asíncrona que se desea consultar.
Response
Estado de la operación.
- Option 1
- Option 2
Una operación asincrónica. Las dos variantes se distinguen por kind: no son el mismo recurso
con campos opcionales, sino dos formas distintas que informan cosas distintas.
Identifica el tipo de operación. Utilice este campo para determinar la estructura de la respuesta.
contacts.load El lote sobre el que corrió la carga. Viaja en la respuesta para que no tengas que recordarlo.
contacts.insert partial significa que entró una parte de los contactos. En una carga masiva es un
desenlace normal, no un error.
pending, running, succeeded, partial, failed Número de contactos enviados en la petición.
150
Bloques en los que se partió la carga. La operación cierra cuando todos reportaron.
3
Bloques ya procesados. Con chunksCompleted < totalChunks los contadores todavía están
incompletos.
3
Contactos que entraron como nuevos.
Rechazados por validación de datos.
Descartados por la política de duplicados del lote.
Ya existían y se les aplicó lo enviado. Cubre tanto el merge como el reemplazo: la diferencia entre los dos la decide la política del lote, no el resultado de la carga.
Contactos existentes que volvieron a ponerse en marcación mediante
onDuplicate: recontact.
Muestra de rechazos, hasta 20. Los contadores son el dato preciso; esto sirve para entender por qué se rechazaron.
20Show child attributes
Show child attributes
Cuándo terminó de procesarse. null mientras status sea pending o running.
Was this page helpful?

