- Socio: el TMS, corredor o sistema de remitente que envía las licitaciones.
- Administrador del transportista: la persona que configura la conexión en la cuenta de Alvys del transportista.
Obtener acceso a la API
- Los clientes existentes de Alvys pueden conseguir acceso a la API contactando a su representante de cuenta.
- Los proveedores independientes de software (ISV) deben ponerse en contacto con el equipo de asociación de Alvys.
Lo que necesita
Para el socio y el administrador del transportista.
El plan del transportista debe incluir acceso a la API pública. Si no lo incluye, todas las llamadas devuelven
402.
Alcances
La credencial determina los alcances. El camposcope de la solicitud de token no puede reducirlos. Pida al administrador del transportista que asigne estos alcances:
Todas las rutas siguientes son relativas a la URL base
https://integrations.alvys.com. Los endpoints de licitaciones, webhooks, ubicaciones y subsidiarias usan v1.0. Los endpoints de cargas usan v2.0. Consulte Versionado.
Enrutamiento de transportista y cliente
Para el socio y el administrador del transportista. Cada licitación lleva seis ID de enrutamiento. Indican a Alvys a qué conexión de transportista pertenece la licitación y, a través de esa conexión, para cuál de los clientes del transportista es la carga.
El transportista almacena esos mismos seis valores en una conexión en Alvys. Alvys los compara como cadenas exactas. Cuentan las mayúsculas, los espacios y el relleno.
ZZ y zz son valores distintos.
Una conexión es de uno de dos tipos:
- Conexión por cliente. La conexión nombra a un cliente. Toda licitación que coincida con sus seis ID se asigna a ese cliente.
- Conexión general (catch-all). Una sola conexión recibe licitaciones de cualquier remitente. Alvys asigna cada licitación al cliente cuyo Company Number sea igual al
SenderGsIdde la licitación. Exactamente un cliente debe tener ese Company Number.
- Una conexión cuyos seis ID sean todos iguales a los seis ID de la licitación.
- Si no existe, la conexión general del transportista.
- Si tampoco existe, la solicitud falla con
Integration is missing.
ShipmentIdes su identificador de la licitación. Alvys lo usa para encontrar la licitación cuando usted envía una actualización o una cancelación. Se convierte en el número de orden de la carga.SCACse almacena en la licitación. No enruta la licitación.- Los valores
IdCodede las paradas no seleccionan una ubicación. Alvys hace coincidir las ubicaciones de las paradas por dirección y nombre.
Sin EDI: elija los ID de enrutamiento
Para el socio y el administrador del transportista. No necesita una identidad X12. Acuerde seis valores con el transportista y el transportista los ingresa en la conexión. Use el calificadorZZ (definido mutuamente) y ID cortos, en mayúsculas y sin espacios.
Con EDI: reutilice sus ID X12
Para socios que ya intercambian EDI 204. Envíe sus ISA ID y GS ID reales y sus calificadores. Los endpoints JSON se corresponden con los códigos de propósito del 204:
Diferencias con el X12 clásico sobre VAN o AS2:
Lista de verificación de configuración del transportista
Para el administrador del transportista.- Cree las credenciales de cliente de la API para el socio en Admin → API Access y asigne los alcances indicados arriba.
- Cree el cliente para el que son las cargas. Si usa una conexión general, establezca el Company Number del cliente con el
SenderGsIdacordado. - Vaya a Manage → EDI & Visibility y agregue una conexión para el socio:
- Establezca el transporte en Public API.
- Ingrese los seis ID de enrutamiento.
- Elija el cliente, o conviértala en una conexión general.
- Elija la subsidiaria a la que pertenecen las cargas.
- Decida cómo se aceptan las licitaciones. Para aceptarlas automáticamente, active Auto-Accept EDI Tenders en el cliente. Si usa flotas, establezca también la flota predeterminada del cliente.
- Envíe al socio los seis ID de enrutamiento y su SCAC.
Flujo de trabajo
Para el socio.
Una licitación pasa por estos estados:
1. Obtenga un token
Solicite un token con el flujo de credenciales de cliente y envíelo comoAuthorization: Bearer <token> en cada llamada. Guarde el token en caché hasta que expire. Consulte Autenticarse con la API pública de Alvys.
2. Suscríbase a los eventos de licitaciones y cargas
Cree la suscripción antes de enviar la primera licitación, para no perdertender.created.
- Liste cada evento por su nombre exacto. No hay comodines.
- Envíe exactamente uno de
SubsidiaryIdsoAllSubsidiaries.SubsidiaryIdestá obsoleto. Obtenga los id de subsidiaria en List subsidiaries. - Una suscripción puede contener hasta 50 eventos.
201 incluye Secret. Guárdelo. Las llamadas de obtención y listado lo devuelven enmascarado. Úselo para verificar las firmas.
3. Cree una licitación
POST /api/p/v1.0/tenders crea una licitación en la cuenta del transportista. La licitación válida más pequeña tiene los ID de enrutamiento, SCAC, ShipmentId y dos paradas:
201 Created con un cuerpo vacío. El encabezado Location apunta a la nueva licitación:
L, TV, BM, PU, DO) son valores X12 comunes. Alvys no los valida.
Reglas para el cuerpo de la licitación:
- Envíe al menos dos paradas. El
Typede cada parada esPickupoDelivery. - Incluya al menos una recogida y una entrega cuyo
Entitytenga ciudad y estado. Si no, Alvys igualmente devuelve201, pero la licitación no se puede aceptar hasta que el transportista la corrija en Alvys. - Establezca
Typeen cada referencia con el nombre de referencia que usa el transportista, por ejemploBOL Number. El nombre se convierte en el nombre de la referencia en la carga. Una referencia sinTypepuede descartarse. Ratese convierte en la tarifa de línea y de facturación de la carga. No puede enviar recargo por combustible ni cargos accesorios en una licitación.- La respuesta no incluye la licitación. Léala en el paso siguiente.
Fechas y zonas horarias
Envíe cada fecha como la hora local de reloj en la parada o en el cliente. Alvys conserva la hora de reloj que usted envía y aplica la zona horaria que resuelve para la licitación. Por lo tanto, una marca de tiempo UTC, como una que termina enZ, puede desplazarse varias horas.
Alvys ignora el desfase de sus marcas de tiempo. El -06:00 de los ejemplos de esta página no tiene efecto. Si Alvys no puede resolver una zona horaria para la licitación, descarta ExpirationDate, y la licitación no muestra un plazo de respuesta.
4. Encuentre el id de su licitación
Necesita el id de la licitación para leerla y para aceptarla o rechazarla. Obténgalo de una de tres maneras:- El encabezado
Locationde la respuesta de creación. data.tenderIden el webhooktender.created.- Una búsqueda por
ShipmentId:
Items, Total, Page y PageSize. Cada elemento es una licitación con su Id, Status, ShipmentId y paradas.
5. Acepte la licitación
Una licitación se acepta de una de tres maneras. El transportista elige cuál.
Cuando Alvys crea una carga a partir de la licitación, envía
tender.accepted con el loadId y el loadNumber de la nueva carga. La nueva carga recibe el id de la licitación, por lo que loadId es igual a tenderId:
data.tender anterior está abreviada. Tiene los mismos campos que Get tender, en camelCase. Consulte Tender events.
Si la aceptación automática falla, por ejemplo porque no se puede hacer coincidir la ubicación de una parada o porque el cliente no tiene flota predeterminada, la licitación permanece en
New. El motivo se muestra al transportista en Alvys. No aparece en la respuesta de la API.Aceptar a través de la API
-
Obtenga la licitación y lea el
StopIdde cada parada: - Encuentre el id de ubicación de Alvys de cada parada con Get location o Search locations. La ubicación ya debe existir. Aceptar a través de la API no crea ubicaciones.
-
Acepte con un vínculo para cada parada de la licitación.
FleetIdes opcional.
200 con la licitación. Status es Accepted y LoadNumber está establecido. Si acepta una licitación que ya está aceptada, Alvys la devuelve sin cambios.
6. Lea la carga
Después de la aceptación, la licitación tiene una carga. Obtenga la carga por su número de orden, que es suShipmentId, o por el loadNumber de tender.accepted. Envíe exactamente un parámetro de consulta.
7. Envíe cambios y cancelaciones
Envíe un cambio aPOST /api/p/v1.0/tenders/update y una cancelación a POST /api/p/v1.0/tenders/cancel.
- Envíe el cuerpo completo de la licitación cada vez, con los mismos ID de enrutamiento y
ShipmentId, y la lista completa de paradas. Para una cancelación, envíe el cuerpo de la última licitación que envió. - Ambos devuelven
201con un cuerpo vacío, igual que la creación. - Si no existe una licitación para el
ShipmentId, o la última licitación fue cancelada, una actualización crea una licitación nueva. - Si no existe una licitación para el
ShipmentId, una cancelación crea una licitación y la cancela, para que el transportista vea la cancelación en Alvys. - Si vuelve a enviar una creación para un
ShipmentIdcuya última licitación no está cancelada ni rechazada, Alvys la trata como una actualización. Esto incluye una licitación que ya fue aceptada. Si la última licitación fue cancelada o rechazada, o su carga fue cancelada, Alvys crea una licitación nueva.
- Actualización. Alvys envía
tender.change.created. SiqueuedForReviewestrue, el transportista revisa el cambio en Alvys y usted recibetender.change.acceptedcuando se aplica. Si esfalse, el cambio se aplicó directamente. - Cancelación, licitación aún no aceptada. La licitación se cancela. Usted recibe
tender.cancelled. - Cancelación, licitación aceptada. De forma predeterminada, el transportista confirma la cancelación y luego la carga se cancela. Algunas conexiones cancelan la carga de inmediato, sin la confirmación del transportista. Usted recibe
tender.cancelled. - Cancelación, sin licitación para el
ShipmentId. Alvys crea una licitación y la cancela. Usted recibetender.createdy luegotender.cancelled.
8. Rechace una licitación
Para el transportista, o un socio que actúa en nombre del transportista.POST /api/p/v1.0/tenders/{tenderId}/reject rechaza una licitación. Establezca CancelLinkedLoad en true para cancelar también una carga que ya se haya creado a partir de ella.
A13 (otros motivos), EQU (sin equipo disponible), CPU (capacidad acordada excedida), LL1 (la carga no nos pertenece) y LL2 (no se puede completar la carga). El socio recibe tender.rejected.
9. Siga el estado y los documentos
- Estado.
load.status.changedincluyepreviousStatus,statusy la carga. Consulte Load events. - Actualizaciones de parada.
tender.stop.arrived,tender.stop.departedytender.stop.eta_updatedinforman el progreso de las paradas respecto a la licitación. Consulte Tender events. - Documentos.
load.document.uploadedincluye el número de carga y undocumentcon undownloadUrl. El enlace es válido por 10 minutos. Para obtener un enlace nuevo, llame aGET /api/p/v2.0/loads/{loadNumber}/documents. Consulte Document events. - Cargar documentos.
POST /api/p/v2.0/loads/{loadNumber}/documentcarga un archivo a la carga. Consulte Upload load document.
X-Alvys-Event-Id para ignorar duplicados. Para recuperar eventos perdidos, consulte periódicamente Get load y la lista de documentos. Consulte Event delivery reliability.
La API REST usa nombres de propiedad en PascalCase, por ejemplo
LoadNumber. Los payloads de webhook usan camelCase, por ejemplo loadNumber, y omiten las propiedades que no tienen valor.Errores comunes
Los errores se listan con los más frecuentes primero. Los errores de “conflicto” devuelven400, no 409. Algunos errores devuelven una cadena JSON simple en lugar de un objeto de problema.
Si ninguno coincide, contacte a support@alvys.com con el
ShipmentId, la hora de la llamada y el cuerpo de la respuesta.
Recursos relacionados
- Referencia de la API de licitaciones
- Tender events
- Load events
- Document events
- Verificación de firmas de webhook
- Integraciones EDI: mapee las transacciones EDI propias de un transportista a la API
- Versionado