Modificar Facturación
Permite modificar uno o múltiples productos facturados existentes en el sistema mediante una única petición. Este endpoint está diseñado para operaciones de actualización en lote (batch update), permitiendo actualizar hasta 10,000 registros por petición.
Método: POST
Endpoint
Sección titulada «Endpoint»https://api.ventasremotas.com/v1/invoicing/batch-updateEncabezados de la solicitud
Sección titulada «Encabezados de la solicitud»| Header | Valor | Descripción |
|---|---|---|
Content-Type |
application/json |
Indica que los datos se envían en formato JSON |
Accept |
application/json |
Indica que la respuesta debe estar en formato JSON |
Subscription-Key |
{subscription_key} |
Clave de suscripción para acceder a la API |
Authorization |
Bearer {access_token} |
Token de acceso obtenido del endpoint /token |
Parámetros del Cuerpo (Body)
Sección titulada «Parámetros del Cuerpo (Body)»El body debe ser un array de objetos, donde cada objeto representa un producto facturado a actualizar.
Límites
Sección titulada «Límites»| Parámetro | Valor | Descripción |
|---|---|---|
| Mínimo de items | 1 | El array no puede estar vacío |
| Máximo de items | 10,000 | Número máximo de productos facturados por petición |
El cuerpo (Body) de la solicitud debe enviarse en formato JSON y debe incluir un array con los siguientes parámetros.
| Campo | Tipo | Nulo | Restricciones | Descripción |
|---|---|---|---|---|
client_id |
string (max 18) | No | No permite: espacio, #, %, &, *, {, }, \, :, <, >, ?, /, +, . |
Código del cliente (identifica el registro a actualizar) |
seller_id |
string (max 18) | No | No permite: espacio, #, %, &, *, {`, `}, \, :, <, >, ?, /, +, . |
Código del vendedor asociado al pedido facturado |
order_code |
string (max 30) | No | Opcional | Código del pedido al que pertenece el producto facturado. Si se omite, se guarda vacío (""). No admite null |
item_number |
int | No | Mínimo: 1, Máximo: 999 |
Orden en que se facturó el producto (identifica el registro a actualizar) |
document_type |
string (max 50) | No | Tipo de documento de la factura (identifica el registro a actualizar) | |
document_number |
string (max 20) | No | Número de la factura (identifica el registro a actualizar) | |
invoice_date |
datetime | No | Formato: YYYY-MM-DD HH:MM:SS |
Fecha de emisión de la factura |
product_code |
string (max 20) | No | No permite: espacio, #, %, &, *, {, }, \, :, <, >, ?, /, +, . |
Código del producto (identifica el registro a actualizar) |
quantity |
decimal (18, 2) | No | Cantidad facturada del producto | |
factor |
decimal (18, 0) | No | Sin decimales | Factor (unidad de empaque) facturado |
price |
decimal (18, 2) | Sí | Precio unitario del producto en la factura | |
tax |
decimal (18, 2) | Sí | Impuesto aplicado al producto en la factura | |
charges |
decimal (18, 2) | Sí | Cargos en valor del producto (usualmente el impoconsumo) | |
discount |
decimal (18, 2) | Sí | Descuento aplicado al producto facturado | |
total |
decimal (18, 2) | No | Valor total facturado del producto |
Formato de tipos de dato
Sección titulada «Formato de tipos de dato»- string (max N): Cadena de texto con longitud máxima de
Ncaracteres. - int: Número entero dentro del rango indicado en las restricciones.
- decimal (p, s): Número decimal donde
pes la precisión total (dígitos enteros + decimales) yses la escala (dígitos decimales).- Ejemplo:
decimal (18, 2)permite hasta 16 dígitos enteros y 2 decimales (ej:9999999999999999.99) - Ejemplo:
decimal (18, 0)permite hasta 18 dígitos enteros y ningún decimal (ej:6)
- Ejemplo:
- datetime: Fecha y hora en formato
YYYY-MM-DD HH:MM:SS(ej:2024-06-15 10:30:00).
Ejemplo de Solicitud
Sección titulada «Ejemplo de Solicitud»Aquí tienes un ejemplo de cómo debería quedar el cuerpo de la solicitud en formato JSON:
[ { "client_id": "CLI-001", "seller_id": "VEN-010", "order_code": "PED-2024-000875", "item_number": 1, "document_type": "FACTURA", "document_number": "FV-2024-001520", "invoice_date": "2024-06-15 00:00:00", "product_code": "PROD-0001", "quantity": 10, "factor": 6, "price": 18500.0, "tax": 19.0, "charges": 0.0, "discount": 5.0, "total": 1051200.0 }]Ejemplo de Respuesta
Sección titulada «Ejemplo de Respuesta»{ "statusCode": 200, "message": "Invoicing updated successfully"}{ "statusCode": 400, "errors": [ { "message": "Invalid JSON in request body" } ]}{ "statusCode": 415, "errors": [ { "message": "Content-Type: application/json is required" } ]}Errores globales (estructura del body)
Sección titulada «Errores globales (estructura del body)»Si el body no es un array:
{ "statusCode": 422, "errors": [ { "message": "Request body must be an array" } ]}Si el array está vacío:
{ "statusCode": 422, "errors": [ { "message": "Request body cannot be empty" } ]}Si excede el límite de 10,000 items:
{ "statusCode": 422, "errors": [ { "message": "Array exceeds maximum limit of 10000 items" } ]}Errores por item (validación de campos)
Sección titulada «Errores por item (validación de campos)»Los errores se agrupan por el índice del item en el array:
{ "statusCode": 422, "errors": [ { "index": 0, "errors": [ { "field": "document_number", "message": "Field is required" }, { "field": "quantity", "message": "Field must be of type decimal" } ] }, { "index": 2, "errors": [ { "field": "item_number", "message": "Field must be greater than or equal to 1" } ] } ]}Tipos de Errores de Validación por Campo
Sección titulada «Tipos de Errores de Validación por Campo»Errores de presencia y nulidad:
| Error | Descripción |
|---|---|
Field is required |
El campo no fue enviado en el objeto (la clave no existe) |
Field cannot be null or empty |
El campo fue enviado con valor null o vacío y no acepta nulos |
Unknown field |
Se envió un campo que no existe en la configuración |
Item must be an object |
Un elemento del array no es un objeto JSON |
Errores de tipo de dato:
| Error | Descripción |
|---|---|
Field must be a string |
El valor no es una cadena de texto |
Field must be of type integer |
El valor no es un número entero |
Field must be a valid integer |
El formato del entero es inválido |
Field must be of type decimal |
El valor no es un número decimal válido |
Field must be a valid decimal (e.g., 1.5, 10.25) |
El formato del decimal es inválido |
Field must be a valid decimal number |
El valor no es un número decimal válido (NaN, Infinity) |
Field must be a valid datetime (YYYY-MM-DD HH:MM:SS) |
El valor no es una fecha/hora válida |
Errores de longitud, rango y precisión:
| Error | Descripción |
|---|---|
Field exceeds maximum length of X characters |
La cadena excede la longitud máxima permitida |
Field must be greater than or equal to 1 |
item_number es menor al mínimo permitido |
Field must be less than or equal to 999 |
item_number excede el máximo permitido |
Field exceeds maximum of X integer digits (precision: P, scale: S) |
El número excede los dígitos enteros permitidos |
Field exceeds maximum of X decimal places |
El número excede los decimales permitidos (factor no admite decimales) |
Errores de formato:
| Error | Descripción |
|---|---|
Field contains forbidden characters. The following are not allowed: space, #, %, &, *, {, }, \, :, <, >, ?, /, +, . |
Los campos client_id, seller_id o product_code contienen caracteres prohibidos |
{ "statusCode": 423, "errors": [ { "message": "Resource is locked and cannot be accessed." } ]}Error de conexión a base de datos
Sección titulada «Error de conexión a base de datos»{ "statusCode": 500, "errors": [ { "message": "Error connecting to database" } ]}Error de operación en base de datos
Sección titulada «Error de operación en base de datos»{ "statusCode": 500, "errors": [ { "message": "Database operation failed" } ]}Error en Redis
Sección titulada «Error en Redis»{ "statusCode": 500, "errors": [ { "message": "Redis operation failed" } ]}Error en validaciones
Sección titulada «Error en validaciones»{ "statusCode": 500, "errors": [ { "message": "Unexpected error in the validations" } ]}Error inesperado
Sección titulada «Error inesperado»{ "statusCode": 500, "errors": [ { "message": "Unexpected error" } ]}Error del Servidor
Estos errores indican problemas internos en el servidor, la base de datos o el servicio de cache. Si persisten, contacta al equipo de soporte.

