Integraciones Sigero - Business Central
Propuesta Técnica
Sección titulada «Propuesta Técnica»Flujos de Inserción vía Service Bus + Logic Apps
Sección titulada «Flujos de Inserción vía Service Bus + Logic Apps»Lineamiento de Integración
Sección titulada «Lineamiento de Integración»Garantía de Entrega Asíncrona: Sigero depositará las transacciones en colas de mensajería independientes de la disponibilidad inmediata de Business Central. Esto asegura que la operación nunca se pierda por saturación del ERP.
Confirmación de Recepción en Cola: El servicio de mensajería emitirá un acuse de recibo inmediato cada vez que una inserción sea depositada correctamente en la cola. Esta notificación actúa como una garantía de persistencia, permitiendo que el sistema externo confirme el envío y libere la transacción.
Identificación Única de Mensajes y Trazabilidad: Cada mensaje depositado en la cola recibirá un identificador único global generado por la infraestructura de mensajería. Este ID servirá como la referencia de seguimiento compartida entre ambos sistemas, permitiendo realizar consultas posteriores sobre el estado de la integración (En espera, Procesado o Fallido).
Gestión de Bloqueos y Resiliencia: Ante bloqueos temporales de tablas en Business Central, la lógica de integración aplicará ciclos de reintento automático con tiempos de espera exponenciales. El proceso solo se dará por fallido tras agotar los intentos configurados, protegiendo la continuidad operativa.
Aislamiento y Trazabilidad de Errores: Aquellas transacciones que contengan errores lógicos o de datos serán desviadas a una cola de mensajes fallidos para su inspección. Esto permite que el resto del flujo continúe operando sin interrupciones.
Librerías y Recursos
Sección titulada «Librerías y Recursos»Azure SDK
Sección titulada «Azure SDK»La interacción con el bus de servicio debe realizarse obligatoriamente a través del SDK oficial de Azure, descartando el uso de llamadas REST genéricas.
Flujo General del proceso
Sección titulada «Flujo General del proceso»- Se recibe una solicitud desde Service Bus.
- Si la recepción se procesa correctamente se envía una respuesta 201 al remitente.
- En paralelo los datos recibidos son procesados por la lógica del flujo en Logic App para derivarlo a Business Central. Cada proceso tiene definida una cola para evitar que los mensajes se solapen o un flujo elevado afecte una única cola.
Sincronización de Maestros vía Webhooks
Sección titulada «Sincronización de Maestros vía Webhooks»Es un mecanismo que envía una notificación HTTP automática a una URL cada vez que ocurre un cambio (Crear, Modificar o Eliminar) en una tabla de Business Central. Business Central avisa proactivamente al ecosistema en el segundo exacto en que se crea o modifica un registro, eliminando la necesidad de consultas constantes (polling) que ralentizan el ERP.
Entidades a utilizar
- Artículos.
- Unidades de Medida.
- Clientes.
- Proveedores.
- Almacenes.
- Transportistas.
- Códigos de motivo.
Lineamiento de Integración
Sección titulada «Lineamiento de Integración»Notificación de Eventos en Business Central: En el momento en que se produzca una creación o modificación en Business Central, el Webhook disparará una notificación hacia Sigero. Vinculación de Identidades (ID Único): Todo registro guardado en Sigero (Clientes, Artículos, Proveedores, etc.) debe contener obligatoriamente el ID del registro original de Business Central (SystemId/GUID) Suscripción por Entidad: Se configurará un Webhook independiente por cada entidad maestra (por compañía y ambiente). Renovación de suscripción: El sistema debe enviar una petición a la API de suscripciones de Business Central para actualizar la fecha y hora de expiración de cada Webhook activo. Gestión de Seguridad: Sigero debe validar el token o Client State incluido en el Webhook para confirmar que la petición proviene exclusivamente de nuestra instancia de Business Central.
Consumo Manual vía API OData/REST
Sección titulada «Consumo Manual vía API OData/REST»Complementando la arquitectura de eventos, habilitaremos el consumo manual de datos a través de las APIs estándar de Business Central (v2.0). El acceso está protegido mediante el protocolo de autorización moderno de Microsoft, garantizando que solo aplicaciones registradas en Azure AD puedan consumir los datos.
Lineamiento de Integración
Sección titulada «Lineamiento de Integración»Herramientas de Consumo: El acceso podrá realizarse mediante herramientas de prueba de APIs (como Postman), scripts de administración o desde la propia interfaz de consulta de Sigero, siempre bajo intervención humana. Autenticación Individual: Cada consulta debe estar respaldada por un token de acceso seguro (OAuth 2.0), asegurando que solo personal autorizado pueda “leer” los datos del ERP. Restricción de Operaciones: Por seguridad, el acceso manual vía API se configurará preferentemente en modo “Solo Lectura” (GET) para las entidades maestras. Cualquier inserción de datos deberá seguir el canal oficial del Service Bus para mantener la trazabilidad.
Puntos Previos
Sección titulada «Puntos Previos»Configuración de credenciales de Business Central
Sección titulada «Configuración de credenciales de Business Central»Antes de poder utilizar las APIs, Webhooks e integrar aplicaciones externas con Business Central, es fundamental contar con las credenciales de acceso necesarias.
Credenciales requeridas
Sección titulada «Credenciales requeridas»- URL del ambiente de Business Central
- URL de producción o ambiente de pruebas
- Ejemplo: https://api.businesscentral.dynamics.com/v2.0/[tenantId]/[environmentName]/company([companyId])
- TenantId: Identificador único del Proveedor.
- environmentName: Nombre del ambiente a trabajar.
- companyId: Identificador de la compañía
- Credenciales OAuth 2.0
- Client ID (Aplicación ID): Identificador de la aplicación registrada
- Client Secret: Clave secreta de la aplicación.
- Credenciales de Azure AD
- Shared Access Signature (SAS) o certificado para autenticación segura.
- Permisos y alcances (Scopes)
- Definir los permisos necesarios para acceder a las APIs
- Ejemplo: https://api.businesscentral.dynamics.com/.default
- Token de acceso (OAuth 2.0)
Recursos para pruebas
Sección titulada «Recursos para pruebas»Para facilitar la integración y pruebas de los Webhook de Business Central, está disponible un espacio de trabajo en Postman. Esto permite interactuar con la API sin necesidad de desarrollar código de cliente de manera inmediata.
Compañías de Business Central
Sección titulada «Compañías de Business Central»Antes de trabajar con cualquier entidad en Business Central, es necesario conocer el Company ID de la compañía con la que se desea interactuar. Este es un paso fundamental ya que todas las operaciones posteriores requieren este identificador.
Consultar lista de Compañías (API Rest)
Sección titulada «Consultar lista de Compañías (API Rest)»GEThttps://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environmentName}/api/v2.0/companiesContent-Type: application/jsonAuthorization: Bearer {access_token}Respuesta esperada
Sección titulada «Respuesta esperada»{ "@odata.context": "{{https://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environmentName}/api/v2.0/$metadata#companies}}", "value": [ { "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "systemVersion": "25000", "timestamp": 45887, "name": "CRONUS", "displayName": "CRONUS International Ltd.", "businessProfileId": "", "systemCreatedAt": "2023-01-15T10:30:00Z", "systemCreatedBy": "a25fcdd5-5d7d-4986-b6da-2e09aa08c17f", "systemModifiedAt": "2024-06-20T14:45:00Z", "systemModifiedBy": "a25fcdd5-5d7d-4986-b6da-2e09aa08c17f", }, { "id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy", "systemVersion": "25000", "timestamp": 45887, "name": "CRONUS", "displayName": "Mi Empresa S.A.", "businessProfileId": "", "systemCreatedAt": "2023-01-15T10:30:00Z", "systemCreatedBy": "a25fcdd5-5d7d-4986-b6da-2e09aa08c17f", "systemModifiedAt": "2024-06-20T14:45:00Z", "systemModifiedBy": "a25fcdd5-5d7d-4986-b6da-2e09aa08c17f", } ]}Campos de la respuesta
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | La URL que define el esquema y el origen de los datos | |
| id | Guid | ID único de la compañia |
| systemVersion | Integer | Versión del sistema |
| timestamp | Integer | segundos del sistema |
| name | Text[30] | Nombre interno de la compañía. |
| displayName | Text[250] | Nombre para mostrar de la compañía. |
| businessProfileId | Guid | ID del perfil de negocio (si aplica). |
| systemCreatedAt | Datetime | Fecha de creación de la compañía en el sistema. |
| systemCreatedBy | Guid | ID del usuario cuando se creó |
| systemModifiedBy | Guid | ID del usuario cuando se modificó. |
| systemModifiedAt | Datetime | Fecha de última modificación. |
Uso de la API en Business Central
Sección titulada «Uso de la API en Business Central»Para interactuar con una API de Business Central, normalmente sigues estos pasos:
• Configuración en Azure: Debes registrar una aplicación en el portal de Azure para obtener un Client ID y un Secret. • Identificar el Endpoint:
-
La URL suele tener esta estructura: https://api.businesscentral.dynamics.com/v2.0/{tenant_id}/{environment}/api/v2.0/companies({id})/customers
-
Realizar la petición (Verbos HTTP)
- GET: Para leer datos.
- POST: Para crear registros nuevos.
- PATCH: Para actualizar parcialmente un registro.
- DELETE: Para eliminar (con precaución).
El límite de consultas
Sección titulada «El límite de consultas»Business Central utiliza un sistema de cuotas basado en el tiempo. Si se exceden, la API devolverá un error HTTP 429 (Demasiadas Solicitudes).
| ConceptoLímite (SaaS) | Solicitudes Concurrentes |
|---|---|
| Máximo solicitudes simultaneas | 100 solicitudes simultáneas por entorno. |
| Solicitudes por Minuto | Máximo 6,000 por minuto. |
El límite de registros por consulta
Sección titulada «El límite de registros por consulta»Business Central puede un máximo de 20,000 registros por petición. Si tu consulta supera ese número, Business Central cortará la respuesta.
Error 429 (Demasiadas Solicitudes)
Sección titulada «Error 429 (Demasiadas Solicitudes)»Al realizar consultas directas vía API, el sistema emisor es el responsable único de gestionar la saturación del ERP. Para prevenir errores 429 (Demasiadas Solicitudes),
el cliente debe implementar una cola local de reintentos que respete el encabezado Retry-After de Business Central. Esta propiedad indica el tiempo recomendado que el cliente debe esperar antes de volver a intentar la solicitud.
Uso de $select
Sección titulada «Uso de $select»Por defecto, si llamas a un endpoint como /customers, Business central te devuelve todos los campos (nombre, dirección, saldo, correos, etc.). Si solo quieres el nombre y el saldo, añades el parámetro a la URL:
.../api/v2.0/companies(id)/customers?$select=number,displayName,balancedeben escribirse exactamente como aparecen en la definición de la API. Usa comas para separar los campos, sin espacios.
Uso del @odata.nextLink
Sección titulada «Uso del @odata.nextLink»es una propiedad de control que contiene una URL de continuación. Representa un curso de estado en el servidor que permite al cliente recuperar el siguiente subconjunto de resultados (página) de una consulta masiva. Se genera automáticamente cuando el volumen de datos excede el límite de registros por respuesta.
Ejemplo de Petición
GEThttps://api.businesscentral.dynamics.com/v2.0/.../items?$select=number,displayName&$top=2Ejemplo de JSON de Respuesta
{ "@odata.context":"https://api.businesscentral.dynamics.com/v2.0/.../$metadata#items(number,displayName)","value": [ { "@odata.etag": "W/\"JzQ0OzE2MTI5ODc1NDI2MzI0ODExOzAwOyc=\"", "number": "1896-S", "displayName": "Escritorio ATHENS"},{ "@odata.etag": "W/\"JzQ0OzE5MDU2ODc1NDI2MzI0ODExOzAwOyc=\"", "number": "1900-S", "displayName": "Silla PARIS"} ], "@odata.nextLink": "https://api.businesscentral.dynamics.com/v2.0/.../items?$select=number,displayName&$skiptoken=X'08100000005349500000'"}Uso de $top
Sección titulada «Uso de $top»Define el límite superior de registros que el servidor debe retornar en el cuerpo de la respuesta.
ejemplo: Obtener los primeros 5 registros de los artículos.
/items?$top=5Se utiliza para omitir un número específico de registros de una colección antes de devolver los resultados restantes. Es el complemento directo de $top y es fundamental para implementar la lógica de paginación
GET .../items?$top=10&$skip=0 GET .../items?$top=10&$skip=10Uso de $orderby
Sección titulada «Uso de $orderby»Especifica los criterios de clasificación de los recursos de una colección. Si no se incluye, Business Central devuelve los datos basándose en la Clave Primaria (Primary Key) de la tabla por defecto.
GET .../salesOrders?$orderby=orderDate desc, customerName ascUso de Webhook con Business Central
Sección titulada «Uso de Webhook con Business Central»Los Webhooks son mecanismos de comunicación que permiten la integración en tiempo real entre Business Central y aplicaciones externas.
Creación de suscripción
Sección titulada «Creación de suscripción»Para implementar Webhooks con Business Central, es necesario seguir un proceso de configuración que incluye la creación del endpoint y la suscripción a eventos. Pasos para la configuración:
- Creación de la Suscripción mediante API
POSThttps://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environmentName}/api/v2.0/subscriptionsContent-Type: application/jsonAuthorization: Bearer {access_token}body: { "notificationUrl": "https://tu-servidor.com/webhook/endpoint", "resource": "companies(companyid) /purchaseOrders", "clientState": "OptionalSecretToken123",}Parámetros de la suscripción:
- notificationUrl: URL de tu
endpointque recibirá las notificaciones. - resource: Entidad a la que te suscribes. Ejemplo:
- companies(companyId)/purchaseOrders - Órdenes de compra.
- clientState: Token secreto opcional para validar que las notificaciones vienen de BC.
Respuesta esperada (JSON)
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/TEST/api/v2.0/$metadata#subscriptions/$entity", "@odata.etag": "W/\"JzE5Ozg3OTQ1NDA5NjgxOTE4MzYyOTMxOzAwOyc=\"", "subscriptionId": "a10b670ba93149c98c89fa574762ab2b", "notificationUrl": "https://funcionesdesarrollovog-b7aaazc5dmgzctbx.canadacentral-01.azurewebsites.net/api/FunctionHttpTrigger?code=C2u", "resource": "api/v2.0/companies(9c2a3721-0c80-ef11-ac21-0022483842ea)/customers", "timestamp": 6465970, "userId": "79d10a1b-ea16-483b-964d-5d547971cf47", "lastModifiedDateTime": "2026-02-05T18:37:57Z", "clientState": "optionalValueOf2048", "expirationDateTime": "2026-02-08T18:37:57Z", "systemCreatedAt": "2026-02-05T18:38:01.4Z", "systemCreatedBy": "79d10a1b-ea16-483b-964d-5d547971cf47", "systemModifiedAt": "2026-02-05T18:38:01.4Z", "systemModifiedBy": "79d10a1b-ea16-483b-964d-5d547971cf47"}Campos de la respuesta
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | String (URL) | La URL que define el esquema y el origen de los datos. |
| @odata.etag | String | Identificador de versión del registro para el control de concurrencia optimista. |
| subscriptionId | GUID | Identificador único de la suscripción de Webhook creada. |
| notificationUrl | Text[250] | Dirección URL donde Business Central enviará las notificaciones. |
| resource | Text[250] | Ruta de la API que define el recurso monitoreado. |
| timestamp | bigint | Número interno de control de versiones de la base de datos SQL. |
| userId | GUID | Identificador único del usuario de Business Central que originó la suscripción. |
| lastModifiedDateTime | DateTime | Fecha y hora de la última modificación de los parámetros de suscripción. |
| clientState | Text[250] | Secreto compartido para validar la autenticidad de las notificaciones. |
| expirationDateTime | DateTime | Fecha y hora exacta en la que el Webhook dejará de estar activo. |
| systemCreatedAt | DateTime | Marca de tiempo exacta de la creación del registro en el sistema. |
| systemCreatedBy | GUID | Identificador del usuario o servicio que creó el registro. |
| systemModifiedAt | DateTime | Marca de tiempo de la última modificación registrada por el sistema. |
| systemModifiedBy | DateTime | Identificador del usuario o servicio que realizó la última modificación en el sistema. |
Renovación de suscripciones:
Sección titulada «Renovación de suscripciones:»Las suscripciones expiran máximo en 3 días, por lo que debes renovarlas periódicamente. Para renovar, debes enviar una solicitud PATCH al endpoint de la suscripción específica. No es necesario esperar a que venza; puedes hacerlo de forma proactiva.
PATCHhttps://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environmentName}/api/v2.0/subscriptions({subscriptionId})Content-Type: application/jsonIf-Match: @odata.etag (o el ETag específico de la suscripción)Authorization: Bearer {access_token}Respuesta esperada (JSON)
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/TEST/api/v2.0/$metadata#subscriptions/$entity", "@odata.etag": "W/\"JzE5Ozg3NjQ5MTcyMDMyMDAwODMwNjcxOzAwOyc=\"", "subscriptionId": "a10b670ba93149c98c89fa574762ab2b", "notificationUrl": "https://funcionesdesarrollovog-b7aaazc5dmgzctbx.canadacentral-01.azurewebsites.net/api/FunctionHttpTrigger?code=", "resource": "api/v2.0/companies(9c2a3721-0c80-ef11-ac21-0022483842ea)/customers", "timestamp": 6466168, "userId": "79d10a1b-ea16-483b-964d-5d547971cf47", "lastModifiedDateTime": "2026-02-05T19:09:46Z", "clientState": "optionalValueOf2048", "expirationDateTime": "2026-02-08T19:09:46Z", "systemCreatedAt": "2026-02-05T18:38:01.4Z", "systemCreatedBy": "79d10a1b-ea16-483b-964d-5d547971cf47", "systemModifiedAt": "2026-02-05T19:09:48.653Z", "systemModifiedBy": "79d10a1b-ea16-483b-964d-5d547971cf47"}Campos de la respuesta
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | String (URL) | URL que define el esquema y el origen de los datos. |
| @odata.etag | String | Identificador de versión del registro para control de concurrencia optimista (usar en If-Match). |
| subscriptionId | GUID | Identificador único de la suscripción de Webhook. |
| notificationUrl | String (URL) | Dirección URL donde Business Central enviará las notificaciones. |
| resource | String | Ruta de la API que define el recurso monitoreado. |
| timestamp | BigInt / Integer | Valor interno de control de versiones de la base de datos. |
| userId | GUID | Identificador del usuario que creó o autorizó la suscripción. |
| lastModifiedDateTime | DateTime | Fecha y hora de la última modificación de la suscripción. |
| clientState | String | Secreto compartido definido por el cliente para validar notificaciones. |
| expirationDateTime | DateTime | Fecha y hora en la que la suscripción expirará. |
| systemCreatedAt | DateTime | Marca temporal de creación del registro en el sistema. |
| systemCreatedBy | GUID | Identificador del usuario o servicio que creó el registro. |
| systemModifiedAt | DateTime | Marca temporal de la última modificación técnica registrada. |
| systemModifiedBy | GUID | Identificador del usuario o servicio que realizó la última modificación. |
Listar suscripciones activas
Sección titulada «Listar suscripciones activas»Para listar las suscripciones activas en el entorno de Business Central realiza una petición GET al recurso de subscriptions.
GET {{https://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environmentName}/api/v2.0/subscriptions}}Authorization: Bearer {access_token}Respuesta esperada (JSON)
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/TEST/api/v2.0/$metadata#subscriptions", "value": [ { "@odata.etag": "W/\"JzE5Ozg3NjQ5MTcyMDMyMDAwODMwNjcxOzAwOyc=\"", "subscriptionId": "a10b670ba93149c98c89fa574762ab2b", "notificationUrl": "https://funcionesdesarrollovog-b7aaazc5dmgzctbx.canadacentral-01.azurewebsites.net/api/FunctionHttpTrigger?code=", "resource": "api/v2.0/companies(9c2a3721-0c80-ef11-ac21-0022483842ea)/customers", "timestamp": 6466168, "userId": "79d10a1b-ea16-483b-964d-5d547971cf47", "lastModifiedDateTime": "2026-02-05T19:09:46Z", "clientState": "optionalValueOf2048", "expirationDateTime": "2026-02-08T19:09:46Z", "systemCreatedAt": "2026-02-05T18:38:01.4Z", "systemCreatedBy": "79d10a1b-ea16-483b-964d-5d547971cf47", "systemModifiedAt": "2026-02-05T19:09:48.653Z", "systemModifiedBy": "79d10a1b-ea16-483b-964d-5d547971cf47" } ]}Campos de la respuesta
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | String (URL) | Indica el origen de los metadatos y el esquema de la respuesta. |
| value | Array | Contenedor con las suscripciones encontradas. |
| @odata.etag | String | Sello de versión del registro; usar para If-Match en actualizaciones. |
| subscriptionId | GUID | Identificador único de la suscripción (usado para PATCH/DELETE). |
| notificationUrl | String (URL) | URL que recibirá las notificaciones de cambios. |
| resource | String | Entidad o ruta de la API que se está monitoreando. |
| timestamp | BigInt / Integer | Valor interno de control de versiones en la base de datos. |
| userId | GUID | ID del usuario que creó o autorizó la suscripción. |
| lastModifiedDateTime | DateTime | Fecha y hora de la última modificación de la suscripción. |
| clientState | String | Valor secreto definido por el cliente para validar notificaciones. |
| expirationDateTime | DateTime | Fecha y hora en la que la suscripción expirará. |
| systemCreatedAt | DateTime | Marca temporal de creación del registro en el sistema. |
| systemCreatedBy | GUID | Identificador del usuario o servicio que creó el registro. |
| systemModifiedAt | DateTime | Marca temporal de la última modificación técnica registrada. |
| systemModifiedBy | GUID | Identificador del usuario o servicio que realizó la última modificación. |
Eliminar una suscripción
Sección titulada «Eliminar una suscripción»Para eliminar la suscripción que tienes activa, debes realizar una petición DELETE apuntando específicamente al subscriptionId que tienes en tu JSON.
DELETEhttps://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environmentName}/api/v2.0/subscriptions({subscriptionId})Authorization: Bearer {access_token}Content-Type: application/jsonIf-Match: @odata.etag (o el ETag específico de la suscripción)Cuando lanzas el DELETE con éxito, la respuesta de Business Central no contiene texto, solo un código de estado:
- Código HTTP: 204 No Content
- Significado: La operación se realizó correctamente y la suscripción ha sido borrada permanentemente. No hay cuerpo (body) en la respuesta porque el recurso ya no existe.
Notificaciones y tipos de cambios
Sección titulada «Notificaciones y tipos de cambios»Cada notificación enviada al suscriptor (notificationUrl) puede contener múltiples notificaciones de diferentes suscripciones. Aquí tienes un ejemplo de carga útil de notificación:
{ "value": [ { "subscriptionId": "webhookItemsId", "clientState": "someClientState", "expirationDateTime": "2018-10-29T07:52:31Z", "resource": "api/v2.0/companies(b18aed47-c385-49d2-b954-dbdf8ad71780)/items(26814998-936a-401c-81c1-0e848a64971d)", "changeType": "updated", "lastModifiedDateTime": "2018-10-26T12:54:20.467Z" }, { "subscriptionId": "webhookCustomersId", "clientState": "someClientState", "expirationDateTime": "2018-10-29T12:50:30Z", "resource": "api/v2.0/companies(b18aed47-c385-49d2-b954-dbdf8ad71780)/customers(130bbd17-dbb9-4790-9b12-2b0e9c9d22c3)", "changeType": "created", "lastModifiedDateTime": "2018-10-26T12:54:26.057Z" }, { "subscriptionId": "webhookCustomersId", "clientState": "someClientState", "expirationDateTime": "2018-10-29T12:50:30Z", "resource": "api/v2.0/companies(b18aed47-c385-49d2-b954-dbdf8ad71780)/customers(4b4f31f0-dc1c-4033-b2aa-ab03ca1d6ebc)", "changeType": "deleted", "lastModifiedDateTime": "2018-10-26T12:54:30.503Z" }, { "subscriptionId": "salesInvoice", "clientState": "someClientState", "expirationDateTime": "2018-10-20T10:55:01Z", "resource": "/api/v2.0/companies(7dbba574-5f69-4167-a43e-fb975045de15)/salesInvoices?$filter=lastDateTimeModified%20gt%202018-10-15T11:00:00Z", "changeType": "collection", "lastModifiedDateTime": "2018-10-26T12:54:30.503Z" } ]}El parámetro “changeType” indica el tipo de cambio:
- Created: Se creo un nuevo registro
- Updated: Se modifico el registro.
- Deleted: Se elimino el registro.
- Collection: Significa que Business Central envía una notificación de que se han creado o cambiado muchos registros. Se aplica un filtro al recurso, lo que permite al suscriptor solicitar a todas las entidades que cumplan con el filtro.
Integración de Tickets
Sección titulada «Integración de Tickets»Estructura básica de la integración
Sección titulada «Estructura básica de la integración»{ "type": 1, "code": "2232326E3", "DocumentNo": "C-PDA0000258", "sessionID": 0, "locationCode":"ALMACEN 1", "destinationLocation": "", "shippingAgentCode": "CDGD", "shippingVehicleCode": "PRUEBA", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "reasonCode": "PRUEBA", "locationCode": "EAST", "DestinationLocation":"", "quantity": 1, "netWeight": 56.9, "tareWeight": 0, "totalCost": 123.56, "originCompany": "", "DestinationCompany": "", "lots":[ { "lot": "gdgdgdg", "quantity": 2 }, { "lot": "gdgdgdgdsd", "quantity": 3 } ]
}, { "itemNo": "1000", "unitMeasure":"PCS", "quantity": 1, "locationCode": "EAST", "destinationLocation":"", "reasonCode": "PRUEBA", "netWeight": 56.9, "totalCost": 123.56, "originCompany": "", "destinationCompany": "" } ]}Campos de la integración
Sección titulada «Campos de la integración»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| sessionID | Integer | Identificador del lote de produccion. |
| locationCode | Text[20] | Código del almacén de origen. |
| destinationLocation | Text[20] | Código del almacén de destino. |
| shippingAgentCode | Text[10] | Código del transportista. |
| shippingVehicleCode | Text[15] | Código del vehículo de transporte. |
| originalDatetime | DateTime | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| reasonCode | Text[50] | Código de razón para el movimiento. |
| locationCode | Text[20] | Código del almacén de origen para la línea. |
| destinationLocation | Text[20] | Código del almacén de destino para la línea. |
| quantity | Decimal | Cantidad de artículos en la línea. |
| newWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. |
| totalCost | Decimal | Costo total de los artículos en la línea. |
| originCompany | Text[30] | Código de la compañía de origen para la línea. |
| destinationCompany | Text[30] | Código de la compañía de destino para la línea. |
Tipos de movimiento
Sección titulada «Tipos de movimiento»- Transferencia
- Recepción de compra
- Transferencia entrante
- Despacho de venta
- Transferencia intercompañia
- Entrada - Prestamo recibidos
- Salida - Prestamo recibidos
- Devolución de ventas
- Recibo de producción
- Registro de merma
Para la integración de tickets, se dividirán los procesos por tipo de movimiento; para cada uno se tendrá un endpoint específico que será consumido por el sistema externo.
Los tipos de movimiento son los siguientes:
- Transferencia de inventario/ en transito
- Recepción de compra
- Transferencia entrante
- Despacho de venta
- Transferencia intercompañia
- Entrada - Prestamo recibidos
- Salida - Prestamo recibidos
- Entrada - Prestamo otorgados
- Salida - Prestamo otorgados
- Devolución de ventas
- Recibo de producción
- Registro de merma
Transferencias Simples / En tránsito
Sección titulada «Transferencias Simples / En tránsito»Las transferencias simples o en tránsito son aquellas que se realizan entre almacenes de la misma compañía, sin involucrar a terceros. Este tipo de movimiento permite trasladar inventario de un lugar a otro dentro de la misma organización.
Campos requeridos
Sección titulada «Campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. Debe ser 1 para transferencias simples. |
| code | Text[255] | Código único del ticket. |
| locationCode | Text[20] | Código del almacén de origen. |
| destinationLocation | Text[20] | Código del almacén de destino. (opcional) |
| shippingAgentCode | Text[10] | Código del transportista |
| shippingVehicleCode | Text[15] | Código del vehículo de transporte |
| originalDatetime | DateTime | Fecha y hora original del ticket. (opcional) |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| reasonCode | Text[50] | Código de razón para el movimiento. (opcional) |
| locationCode | Text[20] | Código del almacén de origen para la línea. |
| quantity | Decimal | Cantidad de artículos en la línea. |
| newWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje}body{ "type": 1, "code": "223232E3", "locationCode":"ALMACEN 1", "destinationLocation": "", "shippingAgentCode": "CDGD", "shippingVehicleCode": "", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "reasonCode": "PRUEBA", "quantity": 1, "netWeight": 56.9, "tareWeight": 0 }, { "itemNo": "1000", "unitMeasure":"PCS", "quantity": 1, "reasonCode": "PRUEBA", "netWeight": 56.9, "tareWeight": 0 } ]}Recepcion de compra
Sección titulada «Recepcion de compra»las recepciones de compra son los movimientos de inventario que se generan al recibir productos adquiridos a través de órdenes de compra. Este proceso implica registrar la entrada de mercancía en el sistema, asegurando que el inventario se actualice correctamente y que los productos estén disponibles para su uso o venta.
campos requeridos
Sección titulada «campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| DocumentNo | Text[20] | Número del documento de compra asociado. |
| LocationCode | Text[20] | Código del almacén de origen. |
| OriginalDatetime | DateTime | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| reasonCode | Text[50] | Código de razón para el movimiento. (opcional) |
| locationCode | Text[20] | Código del almacén de origen para la línea. |
| quantity | Decimal | Cantidad de artículos en la línea. |
| netWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyId: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje
}body{ "type": 2, "code": "223232E3", "DocumentNo": "C-PDA0000258", "locationCode":"ALMACEN 1", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "reasonCode": "PRUEBA", "locationCode":"ALMACEN 1", "quantity": 1, "netWeight": 56.9, "tareWeight": 0 }, { "itemNo": "1000", "unitMeasure":"PCS", "quantity": 1, "locationCode":"ALMACEN 1", "reasonCode": "PRUEBA", "netWeight": 56.9, "tareWeight": 0 } ]}Transferencia Entrante
Sección titulada «Transferencia Entrante»las transferencias entrantes son movimientos de inventario que se producen cuando los productos se reciben desde otra ubicación o almacén, ya sea dentro de la misma compañía o desde un proveedor externo. Este tipo de movimiento asegura que el inventario se actualice correctamente al recibir mercancía en el sistema.
Campos requeridos
Sección titulada «Campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| DocumentNo | Text[20] | Número del documento de transferencia asociado. |
| locationCode | Text[20] | Código del almacén de origen. |
| shippingAgentCode | Text[10] | Código del transportista. |
| shippingVehicleCode | Text[15] | Código del vehículo de transporte. |
| OriginalDatetime | DateTime | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| reasonCode | Text[50] | Código de razón para el movimiento. (opcional) |
| quantity | Decimal | Cantidad de artículos en la línea. |
| netWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje}body{ "type": 3, "code": "223232E3", "DocumentNo": "1006", "locationCode":"ALMACEN 1", "shippingAgentCode": "CDGD", "shippingVehicleCode": "DR4356", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "reasonCode": "PRUEBA", "quantity": 1, "netWeight": 56.9, "tareWeight": 0 }, { "itemNo": "1000", "unitMeasure":"PCS", "quantity": 1, "reasonCode": "PRUEBA", "netWeight": 56.9, "tareWeight": 0 } ]}Despacho de Venta
Sección titulada «Despacho de Venta»El despacho de venta es el proceso mediante el cual los productos se envían desde el almacén o centro de distribución hacia el cliente final. Este movimiento implica la preparación, embalaje y transporte de los artículos vendidos, asegurando que lleguen en buen estado y dentro del plazo acordado. Los despachos de venta debe reflejar los lotes de los productos que se están enviando.
Campos requeridos
Sección titulada «Campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| DocumentNo | Text[20] | Número del documento de venta asociado. |
| ShippingAgentCode | Text[10] | Código del transportista. |
| ShippingVehicleCode | Text[15] | Código del vehículo de transporte. |
| OriginalDatetime | Date | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| reasonCode | Text[50] | Código de razón para el movimiento. (opcional) |
| locationCode | Text[20] | Código del almacén de origen para la línea. |
| quantity | Decimal | Cantidad de artículos en la línea. |
| netWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| lot | Text[20] | Número de lote del artículo. (opciona) |
| quantity | Decimal | Cantidad de artículos en el lote. (opcional) |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje
}body{ "type": 4, "code": "223232E3", "DocumentNo": "101002", "shippingAgentCode": "CDGD", "shippingVehicleCode": "DR4356", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN 1", "reasonCode": "PRUEBA", "quantity": 3, "netWeight": 56.9, "tareWeight": 0, "ticketLinelots":[ { "lot": "gdgdgdg", "quantity": 1 }, { "lot": "gdgdgdgdsd", "quantity": 2 } ] }, { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN 1", "reasonCode": "PRUEBA", "quantity": 1, "netWeight": 56.9, "tareWeight": 0, "lots":[ { "lot": "gdgdgdg", "quantity": 1 } ] } ]}Transferencia Intercompañia
Sección titulada «Transferencia Intercompañia»Las transferencias intercompañía son movimientos de inventario que se realizan entre diferentes entidades legales dentro de la misma organización. Este tipo de movimiento permite trasladar productos de un almacén o ubicación de una compañía a otra.
campos requeridos
Sección titulada «campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| OriginalDatetime | Date | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| locationCode | Text[20] | Código del almacén de origen para la línea. |
| destinationLocation | Text[20] | Código del almacén de destino para la línea. |
| originCompany | Text[30] | Código de la compañía de origen para la línea. |
| destinationCompany | Text[30] | Código de la compañía de destino para la línea. |
| quantity | Decimal | Cantidad de artículos en la línea. |
| netWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
| totalCost | Decimal | Costo total de los artículos en la línea. |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje}body{ "type": 5, "code": "223232E3", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN 1", "DestinationLocation": "ALMACEN 2", "originCompany": "ALIB5", "DestinationCompany": "IDTE3", "quantity": 3, "netWeight": 56.9, "tareWeight": 0, "totalCost": 0,
}, { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN 1", "DestinationLocation": "ALMACEN 2", "originCompany": "ALIB5", "DestinationCompany": "IDTE3", "quantity": 1, "netWeight": 56.9, "tareWeight": 0, "totalCost": 0, } ]}Entrada - Prestamos recibidos
Sección titulada «Entrada - Prestamos recibidos»Las entrada - prestamo recibidos son movimientos de inventario que se generan cuando se reciben productos prestados de otra compañía o entidad. Este tipo de movimiento permite registrar la entrada temporal de mercancía en el sistema. Los prestamos recibido se registrara como un ajuste de inventario.
Campos requeridos
Sección titulada «Campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| OriginalDatetime | Date | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| locationCode | Text[10] | Código de ubicación del artículo. |
| quantity | Decimal | Cantidad de artículos en la línea. |
| netWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
| totalCost | Decimal | Costo total de los artículos en la línea. |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje}body{ "type": 6, "code": "223232E3", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN 1", "quantity": 1, "netWeight": 56.9, "tareWeight": 0, "totalCost": 0,
}, { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN PTO", "quantity": 1, "netWeight": 56.9, "tareWeight": 0, "totalCost": 0, } ]}Salida - Prestamo recibidos
Sección titulada «Salida - Prestamo recibidos»Las salida - prestamo recibidos son movimientos de inventario que se generan cuando se devuelven productos prestados a otra compañía o entidad. Este tipo de movimiento permite registrar la salida de inventario del almacen del prestamo recibido. Los prestamos recibido se registrara como un ajuste de inventario.
Campos requeridos
Sección titulada «Campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| OriginalDatetime | Date | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción | | : — | :— | :— | | itemNo | Text[20] | Número de artículo. | | unitMeasure | Text[10] | Unidad de medida del artículo. | | locationCode | Text[10] | Código de ubicación del artículo. | | quantity | Decimal | Cantidad de artículos en la línea. | | netWeight | Decimal | Peso neto de los artículos en la línea. | | tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) | | totalCost | Decimal | Costo total de los artículos en la línea. (opcional) |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensajes}body{ "type": 7, "code": "223232E3", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN 1", "quantity": 1, "netWeight": 56.9, "tareWeight": 0, "totalCost": 0,
}, { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN PTO", "quantity": 1, "netWeight": 56.9, "tareWeight": 0, "totalCost": 0, } ]}Entrada - Prestamo otorgados
Sección titulada «Entrada - Prestamo otorgados»La entrada - prestamo otorgados son movimientos de inventario que se generan cuando se reciben productos prestados a otra compañía o entidad. Este tipo de movimiento permite registrar la entrada de mercancía en el sistema. Los prestamos otorgados se registrara como un ajuste de inventario.
Campos requeridos
Sección titulada «Campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| locationCode | Text[20] | Código del almacén de origen. |
| destinationLocation | Text[20] | Código del almacén de destino. |
| shippingAgentCode | Text[10] | Código del transportista. |
| shippingVehicleCode | Text[15] | Código del vehículo de transporte. |
| OriginalDatetime | Date | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| reasonCode | Text[50] | Código de razón para el movimiento. (opcional) |
| quantity | Decimal | Cantidad de artículos en la línea. |
| netWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje}body{ "type": 1, "code": "223232E3", "locationCode":"ALMACEN PTO", "destinationLocation": "ALMACEN 1", "shippingAgentCode": "CDGD", "shippingVehicleCode": "", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "reasonCode": "PRUEBA", "quantity": 1, "netWeight": 56.9, "tareWeight": 0
}, { "itemNo": "1000", "unitMeasure":"PCS", "quantity": 1, "reasonCode": "PRUEBA", "netWeight": 56.9, "tareWeight": 0 } ]}Salida - Prestamo otorgados
Sección titulada «Salida - Prestamo otorgados»La Salida - prestamo otorgados son movimientos de inventario que se generan cuando se entragan productos prestados a otra compañía o entidad. Este tipo de movimiento permite registrar la salida de inventario del almacen al almacen de prestamo otorgado. Los prestamos otorgados se registrara como un ajuste de inventario.
Campos requeridos
Sección titulada «Campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| locationCode | Text[20] | Código del almacén de origen. |
| destinationLocation | Text[20] | Código del almacén de destino. |
| shippingAgentCode | Text[10] | Código del transportista. |
| shippingVehicleCode | Text[15] | Código del vehículo de transporte. |
| OriginalDatetime | Date | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| reasonCode | Text[50] | Código de razón para el movimiento. (opcional) |
| quantity | Decimal | Cantidad de artículos en la línea. |
| netWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje}body{ "type": 1, "code": "223232E3", "locationCode":"ALMACEN 1", "destinationLocation": "ALMACEN PTO", "shippingAgentCode": "CDGD", "shippingVehicleCode": "", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "reasonCode": "PRUEBA", "quantity": 1, "netWeight": 56.9, "tareWeight": 0 }, { "itemNo": "1000", "unitMeasure":"PCS", "quantity": 1, "reasonCode": "PRUEBA", "netWeight": 56.9, "tareWeight": 0 } ]}Devolucion de ventas
Sección titulada «Devolucion de ventas»La devolucion de ventas es el proceso mediante el cual los productos vendidos son devueltos por el cliente al almacén o centro de distribución. Este movimiento implica registrar la entrada de mercancía devuelta en el sistema.
Campos requeridos
Sección titulada «Campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| DocumentNo | Text[20] | Número del documento de venta asociado. |
| OriginalDatetime | Date | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| reasonCode | Text[50] | Código de razón para el movimiento. (opcional) |
| locationCode | Text[20] | Código del almacén de origen para la línea. |
| quantity | Decimal | Cantidad de artículos en la línea. |
| netWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje}body{ "type": 8, "code": "223232E3", "DocumentNo": "1006", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "reasonCode": "PRUEBA", "locationCode":"ALMACEN 1", "quantity": 1, "netWeight": 56.9, "tareWeight": 0 }, { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN 1", "quantity": 1, "reasonCode": "PRUEBA", "netWeight": 56.9, "tareWeight": 0 } ]}Recibo de Produccion
Sección titulada «Recibo de Produccion»El recibo de producción es el proceso mediante el cual los productos fabricados o ensamblados se registran como entrada de inventario de productos terminados en el sistema. Este movimiento asegura que el inventario refleje correctamente la cantidad de productos terminados en las ordenes de produccion.
Campos requeridos
Sección titulada «Campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| documentNo | Text[20] | Número del documento de producción asociado. |
| locationCode | Text[20] | Código del almacén de origen. |
| OriginalDatetime | Date | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| quantity | Decimal | Cantidad de artículos en la línea. |
| netWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje}body{ "type": 9, "code": "223232E3", "documentNo": "1006", "locationCode":"ALMACEN 1", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "quantity": 1, "netWeight": 56.9, "tareWeight": 0 }, { "itemNo": "1000", "unitMeasure":"PCS", "quantity": 1, "netWeight": 56.9, "tareWeight": 0 } ]}Registro de merma
Sección titulada «Registro de merma»EL registro de merma es el proceso mediante el cual se documenta la pérdida de inventario debido a factores como deterioro, caducidad, daños o errores en el manejo de los productos. Este movimiento permite ajustar el inventario para reflejar con precisión la cantidad disponible de productos.
Campos requeridos
Sección titulada «Campos requeridos»Encabezado
Sección titulada «Encabezado»| Campo | Tipo de dato | Descripción |
|---|---|---|
| type | Integer | Tipo de movimiento. |
| code | Text[255] | Código único del ticket. |
| OriginalDatetime | Date | Fecha y hora original del ticket. |
| Campo | Tipo de dato | Descripción |
|---|---|---|
| itemNo | Text[20] | Número de artículo. |
| unitMeasure | Text[10] | Unidad de medida del artículo. |
| locationCode | Text[20] | Código del almacén de origen para la línea. |
| quantity | Decimal | Cantidad de artículos en la línea. |
| netWeight | Decimal | Peso neto de los artículos en la línea. |
| tareWeight | Decimal | Peso tara de los artículos en la línea. (opcional) |
Creación de ticket
Sección titulada «Creación de ticket»POSThttps://devnamespacevog.servicebus.windows.netHeader{ Content-Type: application/json Authorization: Bearer {SharedAccessSignature} companyID: {companyID} // Id de la compañía en Business Central environment: {environment} // Nombre del ambiente en Business Central operationType: "POST" // Tipo de operacion requestId: {requestId} // Id de mensaje}body{ "type": 10, "code": "223232E3", "originalDatetime": "2026-07-17T14:20:00Z", "ticketsLines":[ { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN 1", "quantity": 1, "netWeight": 56.9, "tareWeight": 0 }, { "itemNo": "1000", "unitMeasure":"PCS", "locationCode":"ALMACEN 1", "quantity": 1, "netWeight": 56.9, "tareWeight": 0 } ]}Consumo Transferencias Entrantes
Sección titulada «Consumo Transferencias Entrantes»Obtener lista de Transferencias Entrantes
Sección titulada «Obtener lista de Transferencias Entrantes»Consumir Endpoints
Para consultar manualmente las órdenes de compra, puedes consumir el endpoint estándar de Business Central.
GEThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/virtualOfficeGroup/integration/v1.0/companies({{companyId}})/outboundTransfers?$expand=outboundTransferLinesContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.etag": "W/\"JzIwOzE3NTc3MDU2MzU1NDI0MDgwMDU3MTswMDsn\"", "id": "4635d57c-171e-f111-8405-7ced8da8a20f", "documentNo": "1006", "locationCode": "ALMACEN 1", "lastModifiedDateTime": "2026-07-23T13:04:36.757Z", "outboundTransferLines": [ { "@odata.etag": "W/\"JzE5OzYxMTAyMTk0Mzg4NjUwMzk4MTMxOzAwOyc=\"", "id": "8750226e-171e-f111-8405-7ced8da8a20f", "documentNo": 10000, "locationCode": "MPPA01090", "variantCode": "", "description": "Alimento para Pollos", "quantity": 100, "netWeight": 0, "quantityReceived": 50, "quantityOutstanding": 50, "quantityShipped": 50, "lastModifiedDateTime": "2026-07-23T13:04:36.587Z" } ]},Campos de la respuesta (Encabezado)
| Nombre | Tipo | Descripción |
|---|---|---|
| @odata.etag | Identificador de versión para control de concurrencia. | |
| id | GUID | Identificador único universal del registro. |
| documentNo | Text[20] | Número del documento de transferencia entrante. |
| locationCode | Text[20] | Código del almacén. |
| lastModifiedDateTime | DateTime | Fecha y hora de la última modificación del registro. |
Campos de la respuesta (Lineas)
| Nombre | Tipo | Descripción |
|---|---|---|
| @odata.etag | String | Identificador de versión para control de concurrencia. |
| id | GUID | Identificador único de la línea de documento. |
| documentNo | GUID | ID del documento principal (cabecera) al que pertenece. |
| locationCode | String | Código del almacén. |
| variantCode | String | Código de variante del producto. |
| description | String | Descripción del producto. |
| quantity | Decimal | Cantidad total solicitada. |
| netWeight | Decimal | Peso neto del producto. |
| quantityReceived | Decimal | Cantidad recibida. |
| quantityOutstanding | Decimal | Cantidad pendiente de recibir. |
| quantityShipped | Decimal | Cantidad enviada |
| lastModifiedDateTime | DateTime | Fecha y hora de la última modificación del registro. |
Consumo Pedidos de Compra
Sección titulada «Consumo Pedidos de Compra»Obtener lista de Pedidos de Compra
Sección titulada «Obtener lista de Pedidos de Compra»Suscripción de webhook
El consumo de pedidos de compra puede integrarse mediante webhook para detectar cambios sobre el recurso en Business Central.
POST https://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/v2.0/subscriptionsContent-Type: application/jsonAuthorization: Bearer {access_token}
{ "notificationUrl": "%UrlNotificationId%", "resource": "api/v2.0/companies({{companyId}})/purchaseOrders", "clientState": ""}Consumir Endpoints
Para consultar manualmente las órdenes de compra, puedes consumir el endpoint estándar de Business Central.
GEThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/virtualOfficeGroup/integration/v1.0/companies({{companyId}})/ShippingAgents?$expand=shippingAgentsPlatesContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.etag": "W/\"JzE5OzIzNzg3NTQxMzQ1MDAzNzUwODExOzAwOyc=\"", "id": "78741a08-9f86-f111-8072-002248360983", "documentNo": "106012", "locationCode": "ALMACEN 2", "lastModifiedDateTime": "2026-07-23T14:01:42.917Z", "purchaseOrderLines": [ { "@odata.etag": "W/\"JzE5OzU5NDQxNzUyNzM1ODMwMTQ0ODcxOzAwOyc=\"", "id": "1c4f18fd-9e86-f111-8072-002248360983", "documentId": "106012", "sequence": 10000, "lineType": "Item", "lineObjectNumber": "1000", "description": "MORTADELA TIPO 1", "description2": "", "unitOfMeasureCode": "PCS", "locationCode": "ALMACEN 2", "quantity": 10, "directUnitCost": 65.391, "receivedQuantity": 0, "invoicedQuantity": 0, "invoiceQuantity": 0, "receiveQuantity": 0 } ] }Campos de la respuesta (Encabezado)
| Nombre | Tipo | Descripción |
|---|---|---|
| @odata.etag | Identificador de versión para control de concurrencia. | |
| id | GUID | Identificador único universal del registro. |
| documentNo | Text[20] | Número del documento de compra. |
| locationCode | Text[20] | Código del almacén. |
| lastModifiedDateTime | DateTime | Fecha y hora de la última modificación del registro. |
Campos de la respuesta (Lineas)
| Nombre | Tipo | Descripción |
|---|---|---|
| @odata.etag | String | Identificador de versión para control de concurrencia. |
| id | GUID | Identificador único de la línea de documento. |
| documentId | GUID | ID del documento principal (cabecera) al que pertenece. |
| sequence | Integer | Orden de aparición de la línea en el documento (10000). |
| itemId | GUID | Identificador único del producto en el sistema. |
| lineType | String | Tipo de línea (ej. Item/Producto). |
| lineObjectNumber | String | Código de referencia del producto (PROD007). |
| description | String | Descripción del producto (SULFATO DE SODIO). |
| description2 | String | Información adicional o secundaria del producto. |
| unitOfMeasureCode | String | Código de la unidad de medida (KG). |
| quantity | Decimal | Cantidad total solicitada (300). |
| directUnitCost | Decimal | Costo unitario directo del producto. |
| receivedQuantity | Decimal | Cantidad física ya recibida (295). |
| invoicedQuantity | Decimal | Cantidad que ya ha sido facturada. |
| invoiceQuantity | Decimal | Cantidad pendiente o lista para facturar (295). |
| receiveQuantity | Decimal | Cantidad pendiente por recibir físicamente. |
Consumo Pedidos de Venta
Sección titulada «Consumo Pedidos de Venta»Obtener lista de Pedidos de Venta
Sección titulada «Obtener lista de Pedidos de Venta»Suscripción de webhook
El consumo de pedidos de venta puede integrarse mediante webhook para detectar cambios sobre el recurso en Business Central.
POSThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/virtualOfficeGroup/integration/v1.0/subscriptionsContent-Type: application/jsonAuthorization: Bearer {access_token}
{ "notificationUrl": "UrlNotificationId", "resource": "/virtualOfficeGroup/vog/v1.0/companies({{companyId}})/salesOrders", "clientState": ""}Consumir Endpoints
Para consultar manualmente las órdenes de venta, puedes consumir el endpoint estándar de Business Central.
GEThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/virtualOfficeGroup/integration/v1.0/companies({{companyId}})/salesOrder?$expand=salesOrderLinesContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/DEMO/api/virtualOfficeGroup/integration/v1.0/$metadata#companies(db22931c-25f2-f011-8405-000d3a88d306)/salesOrders", "value": [ { "@odata.etag": "W/\"JzE5OzI4NTEyNDcwNjYxOTg5MjE5ODExOzAwOyc=\"", "id": "e44d1923-4f60-f111-ab09-7ced8da80af9", "number": "101015", "orderDate": "2025-11-15", "postingDate": "2025-11-15", "customerNumber": "10000", "customerName": "Adatum Corporation", "currencyCode": "", "priceIncludeTax": false, "status": "Released", "lastModifiedDateTime": "2026-07-23T13:44:41.733Z", "salesOrderLines": [ { "@odata.etag": "W/\"JzE5Ozk1ODEzNDIxMDAxNjM0NzAwNTYxOzAwOyc=\"", "id": "f5893329-4f60-f111-ab09-7ced8da80af9", "documentId": "101015", "sequence": 10000, "lineType": "Item", "lineObjectNumber": "PTCM01001", "description": "Pollo Beneficiado Grado A Embolsado F", "description2": "", "unitOfMeasureCode": "KG", "locationCode": "ALMACEN 2", "quantity": 10, "shippedQuantity": 0, "invoicedQuantity": 0 } ] }, { "@odata.etag": "W/\"JzE4Ozg1NDI1NDg5MTM0ODk0NTg3NTE7MDA7Jw==\"", "id": "8559d70f-a186-f111-8072-002248360983", "number": "101016", "orderDate": "2025-11-15", "postingDate": "2025-11-15", "customerNumber": "10000", "customerName": "Adatum Corporation", "currencyCode": "", "priceIncludeTax": false, "status": "Released", "lastModifiedDateTime": "2026-07-23T14:16:55.747Z", "salesOrderLines": [ { "@odata.etag": "W/\"JzE5OzUwNjU3NDA3NDEwMTM0NzMyNTExOzAwOyc=\"", "id": "14b21b18-a186-f111-8072-002248360983", "documentId": "101016", "sequence": 10000, "lineType": "Item", "lineObjectNumber": "1000", "description": "MORTADELA TIPO 1", "description2": "", "unitOfMeasureCode": "PCS", "locationCode": "ALMACEN 2", "quantity": 100, "shippedQuantity": 0, "invoicedQuantity": 0 } ] } ]}Campos de la respuesta (Encabezado)
| Nombre | Tipo | Descripción |
|---|---|---|
| @odata.context | String (URL) | La URL que define el esquema y el origen de los datos. |
| @odata.etag | String | Un identificador de versión del registro (concurrencia). |
| id | Guid | El GUID (Identificador Único Global) interno de Business Central. |
| number | Text[20] | Es el código de pedido de venta. |
| orderDate | Date | Fecha de emisión del documento. |
| postingDate | Date | Fecha contable del registro. |
| customerNumber | Text[20] | Código del cliente. |
| customerName | Text[100] | Nombre o razón social del cliente. |
| currencyCode | Text[10] | Código ISO de la moneda. |
| priceIncludeTax | Boolean | precios incluyen impuestos |
| status | Text[30] | Estado del documento |
| lastModifiedDateTime | DateTime | Sello de tiempo de la última edición. |
Campos de la respuesta (Lineas)
| Nombre | Tipo | Descripción |
|---|---|---|
| id | Guid | El GUID (Identificador Único Global) interno de Business Central. |
| documentId | Guid | ID del documento principal (cabecera) al que pertenece. |
| sequence | Integer | Orden de aparición de la línea en el documento. |
| lineType | Text[20] | Tipo de línea (ej. Item/Producto). |
| lineObjectNumber | Text[20] | Código de referencia del producto. |
| description | Text[100] | Descripción del producto. |
| description2 | Text[50] | Descripción del producto 2. |
| unitOfMeasureCode | Text[10] | Código de la unidad de medida. |
| locationCode | Text[20] | Código del almacén. |
| quantity | Decimal | Cantidad solicitada. |
| shippedQuantity | Decimal | Cantidad ya enviada. |
| invoicedQuantity | Decimal | Cantidad facturada. |
Consumo Pedidos Devoluciones de Venta
Sección titulada «Consumo Pedidos Devoluciones de Venta»Obtener lista de Pedidos Devoluciones de Venta
Sección titulada «Obtener lista de Pedidos Devoluciones de Venta»Consumir Endpoints
Para consultar manualmente las órdenes de devolucion de venta, puedes consumir el endpoint estándar de Business Central.
GEThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/virtualOfficeGroup/integration/v1.0/companies({{companyId}})/salesReturnOrders?$expand=salesReturnOrderLinesContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.etag": "W/\"JzIwOzE2NzU5MTI1NzE2MTQzMjk1Mzc5MTswMDsn\"", "id": "2208fd50-9886-f111-8072-7ced8db0e8e8", "documentNo": "1001", "locationCode": "ALMACEN 2", "systemModifiedAt": "2026-07-23T13:13:41.187Z", "salesReturnOrderLines": [ { "@odata.etag": "W/\"JzE5OzMwNjU3NjYzNTI0OTY0NTc3NjMxOzAwOyc=\"", "id": "ff24dcf5-c860-ef11-a672-000d3ac04166", "documentId": "1001", "sequence": 10000, "lineType": "Item", "lineObjectNumber": "1936-S", "description": "BERLIN Guest Chair, yellow", "description2": "", "unitOfMeasureCode": "PCS", "locationCode": "", "quantity": 10, "shippedQuantity": 0, "invoicedQuantity": 0 } ]}Campos de la respuesta (Encabezado)
| Nombre | Tipo | Descripción |
|---|---|---|
| @odata.etag | String | Un identificador de versión del registro (concurrencia). |
| id | Guid | El GUID (Identificador Único Global) interno de Business Central. |
| documentNo | Text[20] | codigo del numero de pedido de devolucion |
| locationCode | Text[20] | codigo del almacen |
| lastModifiedDateTime | DateTime | Sello de tiempo de la última edición. |
Campos de la respuesta (Lineas)
| Datos | Tipo | Descripción |
|---|---|---|
| id | Guid | El GUID (Identificador Único Global) interno de Business Central. |
| documentId | Text[20] | codigo del numero de pedido de devolucion |
| sequence | Integer | Orden de aparición de la línea en el documento. |
| lineType | Text[20] | Tipo de línea (ej. Item/Producto). |
| lineObjectNumber | Text[20] | Código de referencia del producto. |
| description | Text[100] | Descripción del producto. |
| description2 | Text[50] | Descripción del producto 2. |
| unitOfMeasureCode | Text[10] | Código de la unidad de medida. |
| locationCode | Text[20] | Codigo del almacen |
| quantity | decimal | Cantidad solicitada. |
| shippedQuantity | decimal | Cantidad ya enviada. |
| invoicedQuantity | decimal | Cantidad facturada. |
Consumo Ordenes de produccion
Sección titulada «Consumo Ordenes de produccion»Obtener lista de Ordenes de produccion
Sección titulada «Obtener lista de Ordenes de produccion»Consumir Endpoints
Para consultar manualmente las órdenes de producción, puedes consumir el endpoint estándar de Business Central.
GEThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/virtualOfficeGroup/integration/v1.0/companies({{companyId}})/prodOrders?$expand=prodOrderLinesContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.etag": "W/\"JzE5OzM3MDAwNDA0MTM0NjI1MDI1NjAxOzAwOyc=\"", "id": "0f5b4ba5-9074-f111-8070-002248360983", "status": "Released", "code": "F-OPL0237", "description": "Pechuga de Pollo Punta de Monte 1Und * 800gr", "description2": "", "sourceType": "Item", "sourceNo": "PTCM10021", "dueDate": "2026-07-01", "systemModifiedAt": "2026-06-30T14:33:25.2Z", "prodOrderLines": [ { "@odata.etag": "W/\"JzIwOzEzMDkzODA3OTgyNTU5MTYzMzE4MTswMDsn\"", "id": "105b4ba5-9074-f111-8070-002248360983", "lineNo": 10000, "itermNo": "PTCM10021", "description": "Pechuga de Pollo Punta de Monte 1Und * 800gr", "description2": "", "unitMeasureCode": "UND", "quantity": 100, "remainingQuantity": 100, "finishedQuantity": 0, "systemModifiedAt": "2026-06-30T14:33:24.58Z" } ]}Campos de la respuesta (Encabezado)
| Nombre | Tipo | Descripción |
|---|---|---|
| @odata.etag | String | Un identificador de versión del registro (concurrencia). |
| id | Guid | El GUID (Identificador Único Global) interno de Business Central. |
| status | Text[20] | Estado del documento. |
| code | Text[20] | Código de la orden de producción. |
| description | Text[100] | Descripción de la orden de producción. |
| description2 | Text[50] | Descripción secundaria de la orden de producción. |
| sourceType | Text[20] | Tipo de fuente de la orden de producción. |
| sourceNo | Text[20] | Número de fuente de la orden de producción. |
| dueDate | Date | Fecha límite de entrega de |
| systemModifiedAt | DateTime | Sello de tiempo de la última edición. |
Campos de la respuesta (Lineas)
| Nombre | Tipo | Descripción |
|---|---|---|
| @odata.etag | String | Un identificador de versión del registro (concurrencia). |
| id | Guid | El GUID (Identificador Único Global) interno de Business Central. |
| lineNo | Integer | Número de línea de la orden de producción. |
| itermNo | Text[20] | Número de artículo de la orden de producción. |
| description | Text[100] | Descripción del artículo de la orden de producción. |
| description2 | Text[50] | Descripción secundaria del artículo de la orden de producción. |
| unitMeasureCode | Text[10] | Código de la unidad de medida del artículo. |
| quantity | Decimal | Cantidad solicitada del artículo. |
| remainingQuantity | Decimal | Cantidad restante del artículo. |
| finishedQuantity | Decimal | Cantidad finalizada del artículo. |
| systemModifiedAt | DateTime | Sello de tiempo de la última edición. |
Consumo de Maestros de Datos
Sección titulada «Consumo de Maestros de Datos»Maestro de Artículos
Sección titulada «Maestro de Artículos»El maestro de artículos contiene toda la información relacionada con los productos que maneja la empresa.
Suscripción del recurso por webhook
POSThttps://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environmentName}/api/v2.0/subscriptionsContent-Type: application/jsonAuthorization: Bearer {access_token}body{ "notificationUrl": "%UrlNotificationId%", "resource": "/api/v2.0/companies({{companyId}})/Items", "clientState": ""}Endpoint para Listado de Articulos (Sincronización Manual)
GEThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/v2.0/companies({{companyId}})/itemsContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/TEST/api/v2.0/$metadata#companies(41cc1c74-5021-f011-9af7-000d3ac04986)/items", "value": [ { "@odata.etag": "W/\"JzE5OzE3Mzg5MzEwMDE1NjQyNjE0OTExOzAwOyc=\"", "id": "1ea0551c-7378-f011-8eef-002248de9fb5", "number": "ALQUILER", "displayName": "Alquiler de inmueble", "displayName2": "", "type": "Service", "itemCategoryId": "00000000-0000-0000-0000-000000000000", "itemCategoryCode": "", "blocked": false, "gtin": "", "inventory": 0, "unitPrice": 0, "priceIncludesTax": false, "unitCost": 0, "taxGroupId": "00000000-0000-0000-0000-000000000000", "taxGroupCode": "", "baseUnitOfMeasureId": "5bcfdbef-5021-f011-9af7-002248dfda48", "baseUnitOfMeasureCode": "UND", "generalProductPostingGroupId": "6dcfdbef-5021-f011-9af7-002248dfda48", "generalProductPostingGroupCode": "SERVICIOS", "inventoryPostingGroupId": "00000000-0000-0000-0000-000000000000", "inventoryPostingGroupCode": "", "lastModifiedDateTime": "2025-08-13T18:28:16.41Z" } ]}Campos de la respuesta
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | String (URL) | La URL que define el esquema y el origen de los datos. |
| @odata.etag | String | Un identificador de versión del registro (concurrencia). |
| id | Guid | El GUID (Identificador Único Global) interno de Business Central. |
| number | Text[20] | Es el código de producto (No. de artículo). |
| displayName | Text[100] | El nombre principal del artículo que aparecerá en los documentos. |
| displayName2 | Text[50] | Descripción secundaria o extendida para nombres en otros idiomas o detalles técnicos. |
| type | Enum/Text[20] | Define el tipo de productos (Inventory, Service o Non-Inventory). |
| itemCategoryId | Guid | ID de la categoría del producto. |
| itemCategoryCode | text[20] | Código de la categoría asignada. |
| blocked | Boolean | Si es true, el ítem está deshabilitado para transacciones. |
| gtin | Text[14] | Código de barras estándar internacional. |
| inventory | Decimal | Cantidad física actual en existencias. |
| unitPrice | Decimal | Precio de venta unitario antes de impuestos. |
| priceIncludesTax | Boolean | Indica si el valor en unitPrice ya contiene el impuesto (IVA/VAT). |
| unitCost | Decimal | Costo unitario del producto. |
| taxGroupId | Guid | ID del grupo de impuestos. |
| taxGroupCode | Text[20] | Código que vincula el producto con una configuración de impuestos específica. |
| baseUnitOfMeasureId | Guid | ID de la unidad de medida base. |
| baseUnitOfMeasureCode | Text[10] | Código de la unidad de medida (ej. PZ, UND, KG). |
| generalProductPostingGroupId | Guid | ID del grupo de registro de producto (General). |
| generalProductPostingGroupCode | Text[20] | Determina las cuentas de ingresos y gastos en el Libro Mayor. |
| inventoryPostingGroupId | Guid | ID del grupo de registro de inventario. |
| inventoryPostingGroupCode | Text[20] | Determina la cuenta de activos (Inventario) en el balance. |
| lastModifiedDateTime | Datetime | Marca de tiempo (UTC) de la última modificación del registro. |
Maestro de Clientes
Sección titulada «Maestro de Clientes»El maestro de clientes contiene toda la información relacionada con los clientes registrados en la empresa.
Suscripción del recurso por webhook
POSThttps://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environmentName}/api/v2.0/subscriptionsContent-Type: application/jsonAuthorization: Bearer {access_token}body{ "notificationUrl": "UrlNotificationId", "resource": "/api/v2.0/companies({{companyId}})/customers", "clientState": ""}Endpoint para Listado de clientes (Sincronización Manual)
GEThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/v2.0/companies({{companyId}})/customersContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/TEST/api/v2.0/$metadata#companies(41cc1c74-5021-f011-9af7-000d3ac04986)/customers", "value": [ { "@odata.etag": "W/\"JzE5OzQyMzIwNDQ4NTc1OTY5Njg3ODkxOzAwOyc=\"", "id": "edceedac-2825-f011-9af7-6045bd39528a", "number": "V-CLI0000025", "displayName": "CLIENTE MODIFICADO", "type": "Company", "addressLine1": "", "addressLine2": "", "city": "", "state": "", "country": "", "postalCode": "", "phoneNumber": "", "email": "", "website": "", "salespersonCode": "", "balanceDue": 0, "creditLimit": 0, "taxLiable": false, "taxAreaId": "e9cfdbef-5021-f011-9af7-002248dfda48", "taxAreaDisplayName": "Clientes Nacionales", "taxRegistrationNumber": "", "currencyId": "7d2ee4e9-5021-f011-9af7-002248dfda48", "currencyCode": "USD", "paymentTermsId": "6f2ee4e9-5021-f011-9af7-002248dfda48", "shipmentMethodId": "00000000-0000-0000-0000-000000000000", "paymentMethodId": "00000000-0000-0000-0000-000000000000", "blocked": "_x0020_", "lastModifiedDateTime": "2026-02-03T14:31:47.067Z"}Campos de la respuesta
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | String (URL) | La URL que define el esquema y el origen de los datos. |
| @odata.etag | String | Un identificador de versión del registro (control de concurrencia). |
| id | Guid | El GUID (Identificador Único Global) interno del cliente. |
| number | Text[20] | Es el código de cliente (No. de cliente). |
| displayName | Text[100] | El nombre principal del cliente que aparecerá en los documentos. |
| type | Enum | Define el tipo de cliente (Person o Company). |
| addressLine1 | Text[100] | Campo para la dirección principal. |
| addressLine2 | Text[50] | Campo para información adicional de la dirección. |
| city | Text[30] | Nombre de la ciudad de residencia o de despacho del cliente. |
| state | Text[30] | Estado, provincia, departamento o región administrativa. |
| country | Text[10] | Código ISO del país. |
| postalCode | Text[20] | Código o zona postal. |
| phoneNumber | Text[30] | Número telefónico de contacto del cliente. |
| Text[80] | Dirección de correo electrónico principal. | |
| website | Text[255] | Dirección URL del portal web del cliente. |
| salespersonCode | Text[20] | Código del vendedor o asesor comercial responsable. |
| balanceDue | Decimal | Monto total de las facturas vencidas e impagadas. |
| creditLimit | Decimal | Límite de crédito financiero otorgado al cliente. |
| taxLiable | Boolean | Si es true, el sistema calcula impuestos en sus ventas. |
| taxAreaId | Guid | ID del área de impuestos asociada al cliente. |
| taxAreaDisplayName | Text[100] | Nombre legible de la configuración de impuestos. |
| taxRegistrationNumber | Text[20] | Número de identificación tributaria legal (RUC/NIT/RIF). |
| currencyId | Guid | Identificador técnico (GUID) de la moneda del cliente. |
| currencyCode | Text[10] | Código internacional de la moneda (ej. USD, EUR). |
| paymentTermsId | Guid | ID que define las condiciones y días de crédito. |
| shipmentMethodId | Guid | ID que define la logística o método de entrega. |
| paymentMethodId | Guid | ID que indica la forma de pago habitual del cliente. |
| blocked | Text[10] | Estado de bloqueo administrativo (ej. Blank, Ship, Invoice, All). |
| lastModifiedDateTime | Datetime | Marca de tiempo (UTC) de la última modificación del registro. |
Maestro de Almacenes
Sección titulada «Maestro de Almacenes»El maestro de almacenes contiene toda la información relacionada con los sitios registrados en la empresa.
Suscripción del recurso por webhook
POSThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/virtualOfficeGroup/integration/v1.0/subscriptionsContent-Type: application/jsonAuthorization: Bearer {access_token}body{ "notificationUrl": "UrlNotificationId", "resource": "/api/v2.0/companies({{companyId}})/customers", "clientState": ""}Endpoint para Listado de almacenes (Sincronización Manual)
GEThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/v2.0/companies({{companyId}})/LocationsContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/DEMO/api/v2.0/$metadata#companies(eceb62c5-e5e3-ef11-9345-000d3ac0ed1a)/locations/$entity", "@odata.etag": "W/\"JzE4OzQ4MjAwODI0MzQ3MTA3NDI1ODE7MDA7Jw==\"", "id": "a0fd5182-c860-ef11-a672-000d3ac04166", "code": "EAST", "displayName": "East Warehouse", "contact": "Jack Potter", "addressLine1": "Great Eastern Street, 80", "addressLine2": "", "city": "London", "state": "", "country": "GB", "postalCode": "EC2A 3JL", "phoneNumber": "+44-(0)30 9874 1299", "email": "", "website": "", "lastModifiedDateTime": "2024-08-25T22:49:58.143Z"}Campos de la respuesta
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | String (URL) | La URL que define el esquema y el origen de los datos |
| @odata.etag | String | Un identificador de versión del registro. |
| id | Guid | ID del almacén. |
| code | Text[10] | Es el código del almacén. |
| displayName | Text[100] | Nombre descriptivo del almacén. |
| contact | Text[100] | Nombre del contacto. |
| addressLine1 | Text[100] | Campo para la dirección principal. |
| addressLine2 | Text[50] | Campo para información adicional de la dirección. |
| city | Text[30] | Nombre de la ciudad de residencia o de despacho. |
| state | Text[30] | Estado, provincia, departamento o región administrativa. |
| country | Text[30] | Código del país. |
| postalCode | Text[20] | Código o zona postal. |
| phoneNumber | Text[30] | Número telefónico de contacto. |
| Text[80] | Dirección de correo electrónico. | |
| website | Text[255] | Dirección URL del almacén. |
| lastModifiedDateTime | Datetime | Marca de tiempo (UTC) de la última vez que se realizó un cambio en cualquier campo de este registro. |
Maestro de Proveedores
Sección titulada «Maestro de Proveedores»El maestro de proveedores contiene toda la información relacionada con todos los proveedores registrados en la empresa.
Suscripción del recurso por webhook
POSThttps://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environmentName}/api/v2.0/subscriptionsContent-Type: application/jsonAuthorization: Bearer {access_token}body{ "notificationUrl": "UrlNotificationId", "resource": "/api/v2.0/companies({{companyId}})/vendors", "clientState": ""}Endpoint para Listado de proveedores (Sincronización Manual)
GEThttps://api.businesscentral.dynamics.com/v2.0/%TenantID%/%enviromentName%/api/v2.0/companies(%companyId%)/vendorsContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/TEST/api/v2.0/$metadata#companies(41cc1c74-5021-f011-9af7-000d3ac04986)/vendors/$entity", "@odata.etag": "W/\"JzIwOzEyNDExOTE4NjY5ODI1NDc2OTA2MTswMDsn\"", "id": "8797deb4-5121-f011-9af7-002248dfda48", "number": "C-PROV0000008", "displayName": "PROVEEDOR 1", "addressLine1": "", "addressLine2": "", "city": "Caracas", "state": "Distrito Capital", "country": "VE", "postalCode": "1010", "phoneNumber": "", "email": "", "website": "", "taxRegistrationNumber": "", "currencyId": "7d2ee4e9-5021-f011-9af7-002248dfda48", "currencyCode": "USD", "irs1099Code": "", "paymentTermsId": "00000000-0000-0000-0000-000000000000", "paymentMethodId": "00000000-0000-0000-0000-000000000000", "taxLiable": false, "blocked": "_x0020_", "balance": 3840813.19, "lastModifiedDateTime": "2026-02-05T00:00:07.777Z"}Campos de la respuesta
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | String (URL) | La URL que define el esquema y el origen de los datos. |
| @odata.etag | String | Un identificador de versión del registro. |
| id | Guid | ID de unidad. |
| number | Text[20] | Es el código del proveedor. |
| displayName | Text[100] | Nombre descriptivo del proveedor. |
| addressLine1 | Text[100] | Campo para la dirección principal. |
| addressLine2 | Text[50] | Campo para información adicional de la dirección. |
| city | Text[30] | Nombre de la ciudad de residencia o de despacho del cliente. |
| state | Text[30] | Estado, provincia, departamento o región administrativa. |
| country | Text[10] | Código del país. |
| postalCode | Text[20] | Código o zona postal. |
| phoneNumber | Text[30] | Número telefónico de contacto. |
| Text[80] | Dirección de correo electrónico. | |
| website | Text[255] | Dirección URL del almacén. |
| taxRegistrationNumber | Text[50] | Es el identificador fiscal. |
| taxLiable | Boolean | Define si el proveedor está sujeto a impuestos. |
| currencyId | Guid | Identificador técnico (GUID) de la moneda que el cliente. |
| currencyCode | Text[10] | Código internacional de la moneda. |
| balance | Decimal | Es la suma de todos los movimientos contables abiertos. |
| blocked | Boolean | Estado de bloqueo administrativo. |
| paymentTermsId | Guid | Identificador técnico (GUID) que define los días de crédito. |
| paymentMethodId | Guid | Identificador (GUID) que indica cómo suele pagar el proveedor. |
| irs1099Code | Text[50] | Específico para la localización de EE. UU. |
| lastModifiedDateTime | Datetime | Marca de tiempo (UTC) de la última vez que se realizó un cambio en cualquier campo de este registro. |
Maestro de Unidades de Medida
Sección titulada «Maestro de Unidades de Medida»El maestro de unidades contiene toda la información relacionada con todas las unidades de medidas utilizadas en los artículos registrados en la empresa.
Suscripción del recurso por webhook
POSThttps://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environmentName}/api/v2.0/subscriptionsContent-Type: application/jsonAuthorization: Bearer {access_token}{ "notificationUrl": "UrlNotificationId", "resource": "/api/v2.0/companies({companyId})/unitsOfMeasure", "clientState": ""}Endpoint para Listado de unidades de medida (Sincronización Manual)
GEThttps://api.businesscentral.dynamics.com/v2.0/{TenantID}/{enviromentName}/api/v2.0/companies({companyId})/unitsOfMeasureContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/TEST/api/v2.0/$metadata#companies(41cc1c74-5021-f011-9af7-000d3ac04986)/unitsOfMeasure/$entity", "@odata.etag": "W/\"JzIwOzExODk2NTgyNjA1MDcwOTE1NjE4MTswMDsn\"", "id": "4acfdbef-5021-f011-9af7-002248dfda48", "code": "BOTELLA", "displayName": "Botella", "internationalStandardCode": "BOTELLA", "symbol": "", "lastModifiedDateTime": "2025-04-24T21:13:43.817Z"}Campos de la respuesta
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | String (URL) | La URL que define el esquema y el origen de los datos |
| @odata.etag | String | Un identificador de versión del registro. |
| id | Guid | ID de unidad. |
| code | Text[10] | Es el identificador que el usuario ve y utiliza. |
| displayName | Text[50] | El nombre descriptivo de la unidad. |
| internationalStandardCode | Text[50] | Código estándar internacional de la unidad. |
| symbol | Text[10] | El símbolo gráfico de la unidad. |
| lastModifiedDateTime | Datetime | Marca de tiempo (UTC) de la última vez que se realizó un cambio en cualquier campo de este registro. |
Maestro de Transportistas
Sección titulada «Maestro de Transportistas»El maestro de transportistas contiene toda la información relacionada con el listado de transportistas registrados en la empresa.
Suscripción del recurso por webhook
POSThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/virtualOfficeGroup/integration/v1.0/subscriptionsContent-Type: application/jsonAuthorization: Bearer {access_token}{ "notificationUrl": UrlNotificationId, "resource": "/virtualOfficeGroup/vog/v1.0/companies({{companyId}})/shippingAgents", "clientState": ""}Endpoint para Listado de transportistas (Sincronización Manual)
Sección titulada «Endpoint para Listado de transportistas (Sincronización Manual)»GEThttps://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/api/virtualOfficeGroup/integration/v1.0/companies({{companyId}})/shippingAgents?$expand=shippingAgentsVehiclesContent-Type: application/jsonAuthorization: Bearer {access_token}Datos obtenidos
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/TEST/api/virtualOfficeGroup/integration/v1.0/$metadata#companies(41cc1c74-5021-f011-9af7-000d3ac04986)/shippingAgents", "value": [ { "@odata.etag": "W/\"JzE5OzkxODk1OTg3MzM5OTY4NDE4NzUxOzAwOyc=\"", "id": "b057d38a-c006-f111-8405-7ced8da9239b", "code": "CM3SRL", "name": "Camiones", "vendor": "C-PROV0000008", "vendorName": "", "lastModifiedDateTime": "2026-06-11T19:18:00.637Z", "shippingAgentsVehicles": [ { "@odata.etag": "W/\"JzE5Ozk2NzIyNDU0NDUwMzUyMDQxODkxOzAwOyc=\"", "id": "5eec9a56-ca65-f111-ab09-7ced8da8a516", "code": "AD543ED", "description": "CAMION", "systemModifiedAt": "2026-06-11T19:18:35.167Z" }, ] } ]}Campos de la respuesta (encabezado)
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | La URL que define el esquema y el origen de los datos | |
| @odata.etag | Un identificador de versión del registro. | |
| id | Guid | ID del Transportista. |
| code | Code[10] | Es el código del transportista. |
| name | Text[50] | Nombre del transportista. |
| vendor | Text[100] | codigo de proveedor |
| vendorName | Text[100] | Nombre del proveedor |
| lastModifiedDateTime | Datetime | Marca de tiempo (UTC) de la última vez que se realizó un cambio en cualquier campo de este registro. |
Campos de la respuesta (placas)
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | La URL que define el esquema y el origen de los datos | |
| id | Guid | ID del vehiculo. |
| code | Text[15] | codigo del vehiculo |
| description | Text[100] | descripcion del vehiculo |
| lastModifiedDateTime | Datetime | Fecha de la ultima modificacion |
Maestro de Códigos de motivo
Sección titulada «Maestro de Códigos de motivo»El maestro de código motivo contiene toda la información relacionada con el listado de códigos de motivo utilizados en ajustes de inventario y transferencia de pedidos.
Suscripción del recurso por webhook
{ "notificationUrl": "UrlNotificationId", "resource": "/virtualOfficeGroup/vog/v1.0/companies({{companyId}})/reasonCodes", "clientState": ""}Endpoint para Listado (Sincronización Manual)
GET
https://api.businesscentral.dynamics.com/v2.0/{{TenantID}}/{{enviromentName}}/ODataV4/Company('{{companyId}}')/ReasonCodesContent-Type: application/json Authorization: Bearer {access_token}
Datos obtenidos
{ "@odata.context": "https://api.businesscentral.dynamics.com/v2.0/30eb258d-51a4-4f58-9c88-bf72d4d3325a/TEST/ODataV4/$metadata#Company('41cc1c74-5021-f011-9af7-000d3ac04986')/ReasonCodes", "value": [ { "@odata.etag": "W/\"JzE4OzU4Nzk3ODU4NjA2OTE2OTgyNTE7MDA7Jw==\"", "code": "ACTIVO", "description": "CODIGO ACTIVO", "status": true, "adjustment": false, "accountNo": "", "itemTransfer": true, "inTransit": false, "id": "3a0342ee-4013-f111-8341-002248d31bd2", "systemCreatedAt": "2026-02-26T18:28:31.28Z", "systemModifiedAt": "2026-02-26T18:38:34.72Z" } ]}Campos de la respuesta
| Nombre | Tipo de dato | Descripción |
|---|---|---|
| @odata.context | La URL que define el esquema y el origen de los datos | |
| @odata.etag | Un identificador de versión del registro. | |
| id | Guid | ID del recurso. |
| code | Text[10] | Código de motivo |
| description | Text[50] | Descripción del motivo. |
| status | Boolean | Estado del código de motivo |
| adjustment | Boolean | Si está activo para ajuste de inventario |
| accountNo | Text[20] | Cuenta contable asociada |
| itemTransfer | Boolean | Si está activo para artículos en transferencias |
| inTransit | Boolean | Si está activo para transferencia en tránsito |
| systemCreatedAt | Datetime | Marca de tiempo (UTC) de la fecha en que se registró el código de motivo |
| systemModifiedAt | Datetime | Marca de tiempo (UTC) de la última vez que se realizó un cambio en cualquier campo de este registro. |
