Esta API está en Beta. El comportamiento puede cambiar. Contacta a developers@tread.io con preguntas o comentarios.
URL base y autenticación
Cada endpoint de Importador vive bajo el mismo host que el resto de la API, con un prefijo/ingest.
Content-Type depende del endpoint. Pedidos, Proyectos y Tickets toman JSON:
metadata opcional para tu propio seguimiento, como un ID de lote o nombre del sistema de origen. Tread lo almacena pero no actúa sobre él.
El modelo asincrónico
Pedidos, Proyectos y Tickets se procesan asincrónicamente. Una respuesta202 Accepted significa que Tread guardó tu payload y lo puso en cola para procesamiento. No significa que el registro haya sido creado o actualizado.
Dos formas de verificar un payload después de enviarlo:
- Reports > API Integrations en la app Tread. Muestra Imported For, Import Received At, State, Last Error, y el payload sin procesar que enviaste. Por defecto los últimos 7 días, los más recientes primero.
- Webhooks de error, si has configurado uno. Tread empuja un evento cuando un payload falla al procesarse. Consulta Webhooks.
Si un registro está
failed o exhausted, lee su campo last_error para la razón, corrige los datos de origen, y reenvía. Tread desduplicará automáticamente, así que reenviar el mismo payload es seguro.
El endpoint de Archivos es la única excepción — procesa sincrónicamente. Consulta Archivos.
Pedidos
POST /ingest/orders crea o actualiza Pedidos. La clave raíz es orders — envía un array, incluso para un registro individual.
Campos requeridos
Solicitud de ejemplo
Notas de comportamiento
- La coincidencia es por
external_id, limitada a tu empresa. Una coincidencia actualiza los campos raíz del pedido — nombre, cantidades, tarifas, notas, y más. customer,material,equipment_type, ysitesson registros anidados. Tread los crea si no existen pero no los actualiza en una coincidencia — consulta coincidencia external_id.foremenyvendorsson arrays. Cada payload reemplaza el array completo — no se fusiona con lo que ya está allí. Esto es verdad incluso si omites el campo: omitirforemenno preserva los foremen existentes. Envía el conjunto completo cada vez.- Si un pedido se cancela y luego envías un payload con el mismo
external_iden un estado no cancelado, Tread renombra elexternal_iddel pedido cancelado aX-{N}y crea un nuevo pedido. Esto es automático — no se necesita limpieza de tu parte.
Proyectos
POST /ingest/projects crea o actualiza Proyectos. La clave raíz es projects.
Campos requeridos
Solicitud de ejemplo
Notas de comportamiento
- La coincidencia es por
external_id. Una coincidencia actualiza campos raíz — nombre, fechas, notas, tarifas. - La sincronización de fases es destructiva. Cada payload reemplaza la lista de fases completa. Una fase omitida del payload se elimina. Siempre envía el conjunto completo, no solo lo que cambió.
- La sincronización de materiales es igual. Un material omitido del payload se elimina del proyecto.
- Los sitios necesitan una dirección. Cada sitio necesita
full_addressolat/lon. Si tus datos de origen solo tienen un nombre de sitio, establecefull_addressen ese nombre — Tread lo geocodifica automáticamente. Sin uno de estos, el sitio falla la validación y se descarta silenciosamente: el proyecto aún reporta éxito, pero ese recogida o entrega falta y no aparece error. Consulta Coordenadas de Sitios y Geocercas para el formato de coordenadas y cómo se construye la geocerca. foremenreemplazan en la actualización, igual que en Pedidos.- Si el nombre de un proyecto colisiona con el nombre de otro proyecto diferente, Tread le añade
-{external_id}para mantener ambos.
Tickets
POST /ingest/tickets crea Tickets — el registro de prueba de carga para una Carga. La clave raíz es tickets.
Campos requeridos
Solicitud de ejemplo
Notas de comportamiento
- Tread vincula un ticket a un pedido de dos formas:
tread_order_id(directo, preferido) odispatch_numbermás una fecha de inicio de trabajo coincidente (alternativa). Envíatread_order_idcuando lo tengas. - La normalización de
unit_of_measurees insensible a mayúsculas pero los valores exactos son más seguros."tons"se convierte en"Ton", pero una cadena que el sistema no reconoce puede caer silenciosamente a la predeterminada (Ton) en lugar de error. Usa el valor enum exacto. sitees un objeto individual en Tickets — a diferencia de Pedidos y Proyectos, dondesiteses un array.
Archivos
POST /ingest/files adjunta un archivo a un Pedido existente (o próximo a existir). Usa multipart/form-data, no JSON — todos los demás endpoints de Importador usan JSON.
Campos requeridos
Opcional:
category (Inspection Report, Site Map, Scale Ticket (External), Scale Ticket (Internal), Timesheet, o Other) y description. El tamaño máximo de archivo es 10 MB. Tipos aceptados: JPEG, PNG, WebP, GIF, y PDF.
Solicitud de ejemplo
Notas de comportamiento
Los archivos se procesan sincrónicamente — la única excepción entre las APIs de Importador.201 Created— el Pedido ya existe. Tread adjunta el archivo inmediatamente.202 Accepted— el Pedido aún no existe. Tread almacena el archivo y lo adjunta automáticamente una vez que llega un Pedido coincidente — los archivos y pedidos pueden llegar en cualquier orden. No se necesita llamada extra.422— el archivo falló la validación (tipo incorrecto o más de 10 MB).
Coincidencia external_id y comportamiento de upsert
Cada endpoint de Importador usaexternal_id — tu identificador del sistema — para decidir si crear un nuevo registro o actualizar uno existente. Está limitado por empresa y es sensible a mayúsculas.
Registros raíz (Pedido, Proyecto, Ticket) funcionan como era de esperar: encontrado por external_id → actualizar; no encontrado → crear.
Registros anidados (cliente, material, tipo de equipo, sitios, foremen) funcionan diferente. Tread los crea si no existen, pero generalmente no actualiza sus campos una vez coincidentes. Enviar un name diferente para un cliente que ya existe no lo renombra.
Para renombrar un cliente, material, u otro registro de datos maestros, usa los endpoints del REST API en otro lugar de esta referencia — no las APIs de Importador.
Los arrays siguen uno de tres patrones en actualización:
Referencia de enums
Valores exactos de cadena que Tread espera. Un valor fuera de esta lista se normaliza (unidad de medida) o se rechaza. Unidad de medida —Load, Tonne, Ton, Yard, Meter, Foot, Liter, Hour, Bushel, Gallon, CubicMeter, Mile, Kilometer, Barrel, Bag, Pallet. Predeterminado: Ton.
Tipo de tarifa — RatePerHour (predeterminado), RatePerDay, RatePerLoad, RatePerTon, RatePerTonne, RatePerYard, RatePerBushel, RateCommission, RateFlatCommission, RateFlatRate.
Waypoint del sitio — pickup, staging, drop_off, weigh_point.
Tipo de sitio — Plant, Quarry, JobSite, Depot, EquipmentHomeBase, Daily, Other (predeterminado).
Trampa comunes
202no significa que funcionó. Verifica el estado del registro importado antes de tratar un payload como completo.- Los registros anidados no se actualizan en la coincidencia. Renombrar un cliente o material en tu payload no tiene efecto una vez que ese registro ya existe. Usa el REST API para renombrarlo.
- Los sitios sin dirección se descartan, silenciosamente. Sin
full_addressolat/lonen un sitio significa que Tread lo descarta — y el Proyecto u Orden aún reporta éxito. Lo mismo ocurre al enviar una coordenada sin la otra. Consulta Coordenadas de Sitios y Geocercas. - Los números de teléfono inválidos se descartan, silenciosamente. Un teléfono que no se normaliza a E.164 se elimina del contacto. Sin error, sin entrada de
last_error. - Los payloads duplicados se omiten, no se reprocesa. Enviar el mismo payload exacto dos veces marca el segundo como
skipped. Esto es esperado, no un bug. - La sincronización de fases elimina lo que dejas fuera. Cada payload de Proyecto reemplaza la lista de fases completa, no solo las fases que estés cambiando.
- Los foremen y vendors reemplazan, no se fusionan. Cada payload con un array
foremenovendorsintercambia el todo, incluso si omites el campo. - La unidad de medida es exigente.
"tons"se normaliza a"Ton", pero una cadena que el sistema no reconoce cae silenciosamente al predeterminado (Ton) en lugar de error. Usa valores enum exactos.
Gestión de registros individuales
¿Necesitas crear, actualizar o eliminar un registro a la vez en lugar de carga en lote? Usa los endpoints del REST API en otro lugar de esta referencia. Son sincrónicos — un201 o 200 significa que está listo — y soportan actualizaciones de campo completas en registros anidados, incluyendo renombrar un cliente o material. Las APIs de Importador son solo para cargas en lote.
Continuar
Coordenadas de Sitios y Geocercas
Envía
lat/lon para que los Sitios importados obtengan una geocerca funcional.Autenticación
Obtén un token bearer para estos endpoints.
Webhooks
Recibe notificaciones cuando un payload importado falla al procesarse.
Pedidos y Proyectos
Cómo se ajusta la jerarquía de despacho.
Tickets y Partes de horas
Qué registra un Ticket, y cómo se convierte en una Liquidación.