Carga masiva
Carga de miles de productos o documentos en un archivo, con validación previa y confirmación.
En esta página
Para miles de registros, un archivo es más rápido y más seguro que miles de llamadas: Chainlink valida todo el archivo, informa qué filas tienen errores y solo aplica los cambios después de la confirmación.
Requisitos: carga masiva activa en Configuración › Operación; alcance products:write (cliente de integración) o permiso imports.run (token de usuario).
Tipos de carga
kind | Contenido |
|---|---|
products | Productos (alta y actualización por código) |
entry_documents | Documentos de entrada, una fila por línea |
exit_documents | Documentos de salida, una fila por línea |
transfer_orders | Órdenes de transferencia |
pick_faces | Ubicaciones de surtido por producto |
La plantilla de cada tipo se descarga en la web, en Carga masiva. Se aceptan archivos .xlsx y .csv de hasta 5 MB. Filas por archivo: 2,000 en Essentials, 10,000 en Professional y 100,000 en Enterprise; hasta 500 documentos por archivo.
1. Subir y validar
La respuesta es 202 con el resultado de la validación: status (validated o invalid), filas válidas y con error, y error_report_url, un archivo de Excel con cada fila rechazada y su motivo. En este paso no se aplica ningún cambio.
curl -X POST "https://empresa.chainlink.mx/api/v1/imports" \
-H "Authorization: Bearer $CHAINLINK_TOKEN" \
-H "Accept: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-F "kind=products" \
-F "file=@catalogo.xlsx"
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://empresa.chainlink.mx/api/v1/imports', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('CHAINLINK_TOKEN'),
'Accept' => 'application/json',
'Idempotency-Key' => (string) \Ramsey\Uuid\Uuid::uuid4(),
],
'multipart' => [
['name' => 'kind', 'contents' => 'products'],
['name' => 'file', 'contents' => fopen('catalogo.xlsx', 'r')],
],
]);
$data = json_decode((string) $response->getBody(), true);
import fs from 'node:fs';
const form = new FormData();
form.append('kind', 'products');
form.append('file', new Blob([fs.readFileSync('catalogo.xlsx')]), 'catalogo.xlsx');
const response = await fetch('https://empresa.chainlink.mx/api/v1/imports', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CHAINLINK_TOKEN}`,
Accept: 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: form,
});
const data = await response.json();
import os
import uuid
import requests
response = requests.post(
"https://empresa.chainlink.mx/api/v1/imports",
headers={
"Authorization": f"Bearer {os.environ['CHAINLINK_TOKEN']}",
"Accept": "application/json",
"Idempotency-Key": str(uuid.uuid4()),
},
data={"kind": "products"},
files={"file": open("catalogo.xlsx", "rb")},
)
data = response.json()
2. Confirmar
POST /imports/{id}/commit aplica las filas válidas y responde 202. Consulte GET /imports/{id} hasta que status sea committed.
- Si el archivo trae documentos existentes,
options[on_duplicate]=skiplos omite yfaillos marca como error. - Subir de nuevo el mismo archivo agrega un aviso en
warning. - Una carga que ya se está confirmando o que no tiene filas válidas responde
409 import_refused.
curl -X POST "https://empresa.chainlink.mx/api/v1/imports/101/commit" \
-H "Authorization: Bearer $CHAINLINK_TOKEN" \
-H "Accept: application/json" \
-H "Idempotency-Key: $(uuidgen)"
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://empresa.chainlink.mx/api/v1/imports/101/commit', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('CHAINLINK_TOKEN'),
'Accept' => 'application/json',
'Idempotency-Key' => (string) \Ramsey\Uuid\Uuid::uuid4(),
],
]);
$data = json_decode((string) $response->getBody(), true);
const response = await fetch('https://empresa.chainlink.mx/api/v1/imports/101/commit', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CHAINLINK_TOKEN}`,
Accept: 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
});
const data = await response.json();
import os
import uuid
import requests
response = requests.post(
"https://empresa.chainlink.mx/api/v1/imports/101/commit",
headers={
"Authorization": f"Bearer {os.environ['CHAINLINK_TOKEN']}",
"Accept": "application/json",
"Idempotency-Key": str(uuid.uuid4()),
},
)
data = response.json()