Saltar al contenido principal

API de Gestión de Tiendas

La API de Gestión de Tiendas permite administrar la información de las tiendas en la plataforma Nilo. Estos endpoints ayudan a crear, actualizar y recuperar datos de las tiendas, incluyendo detalles de la tienda, usuarios, información de crédito y configuraciones.

Entendiendo las Tiendas​

Las tiendas en Nilo representan los puntos de venta que pueden realizar pedidos:

  • Estructura de la Tienda

    • Código interno único (coincide con ERP)
    • Información del propietario y legal
    • Datos de dirección y ubicación
    • Asociaciones de usuarios (vía teléfono o email)
    • Estado de crédito y pagos
    • Configuraciones y ajustes
    • Asociaciones de grupo (listas de precios, stock, promociones)
  • Jerarquía de la Tienda

    • Entidades independientes con identificadores únicos
    • Pueden tener múltiples usuarios asociados
    • Mantienen su propio estado de crédito
    • Pueden pertenecer a diferentes agrupadores
    • Soportan operaciones por lotes para actualizaciones

Consideraciones Importantes​

  1. Códigos Únicos: Cada tienda requiere un código interno único que coincida con su sistema ERP
  2. Gestión de Usuarios: Los usuarios se asocian vía número de teléfono (con código de país) o email
  3. Sistema de Crédito: Las tiendas tienen límites de crédito y seguimiento del estado de pagos
  4. Datos de Ubicación: Las tiendas requieren información precisa de dirección y geolocalización
  5. Múltiples Agrupadores: Las tiendas pueden pertenecer a múltiples agrupadores de promoción si está configurado
  6. Operaciones por Lotes: Soporte para actualizar eficientemente múltiples tiendas

Operaciones Individuales de Tienda​

Crear Tienda​

POST/store

Crear una nueva tienda en la plataforma Nilo. Este endpoint se utiliza para registrar todos los detalles de la tienda incluyendo:

  • Información de la tienda (nombre del propietario, detalles legales)
  • Datos de dirección y ubicación
  • Información de contacto
  • Asociaciones de grupo

Parámetros del Cuerpo de la Solicitud​

ParámetroTipoRequeridoDescripción
namestringSíNombre de la tienda
internalCodestringSíCódigo interno que coincide con el ERP
addressesarraySíLista de direcciones de la tienda
legalNamestringSíNombre legal del negocio
legalIdstringSíIdentificador legal del negocio (CUIT/RUT)
promotionGrouperCodestringNoCódigo del grupo de promociones
stockGrouperCodestringNoCódigo del grupo de stock
deliveryConfigCodestringNoCódigo de configuración de entrega a asignar. Si se omite, no cambia la asignación actual
pricelistCodestringNoCódigo de la lista de precios
enabledbooleanNoEstado de habilitación de la tienda
creditLimitnumberNoLímite de crédito de la tienda

Parámetros de Dirección​

ParámetroTipoRequeridoDescripción
addressstringSíDirección completa
zipCodestringSíCódigo postal
latitudenumberNoLatitud de la ubicación
longitudenumberNoLongitud de la ubicación

Ejemplo del Cuerpo de la Solicitud​

{
"ownerName": "Owner name",
"ownerIdentifier": "Owner identifier",
"internalCode": "1234",
"addresses": [
{
"internalCode": "1234",
"addressLine": "25 de mayo 1200, Buenos aires, Argentina",
"apartmentNumber": "2",
"zipCode": "2400"
}
],
"latitude": "-34.545278°",
"longitude": "-58.449722",
"addressFormat": "Av. Pres. Figueroa Alcorta 7597, C1428 Cdad. Autónoma de Buenos Aires",
"legalName": "legal name",
"legalId": "legal id",
"supportContactEmail": "string",
"supportContactPhone": "string",
"promotionGrouperCode": "1234",
"stockGrouperCode": "6789",
"deliveryConfigCode": "DELIVERY-1",
"pricelistCode": "1222",
"routeCode": "1234",
"settings": {
"dropSize": {
"amount": 1000,
"currency": "USD"
}
}
}

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
name: "Nombre del Propietario",
internalCode: "1234",
addresses: [
{
address: "25 de mayo 1200, Buenos Aires, Argentina",
zipCode: "2400",
latitude: -34.545278,
longitude: -58.449722,
},
],
legalName: "Nombre Legal",
legalId: "ID Legal",
promotionGrouperCode: "1234",
stockGrouperCode: "6789",
pricelistCode: "1222",
enabled: true,
creditLimit: 50000,
};

fetch("https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store", {
method: "POST",
headers: headers,
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Obtener Todas las Tiendas​

GET/store

Recuperar una lista paginada de todas las tiendas. Este endpoint es útil para:

  • Navegar por el catálogo de tiendas
  • Implementar paginación
  • Filtrar tiendas por estado habilitado

Cuando una tienda tiene una configuración de entrega asignada, su respuesta incluye:

{
"deliveryConfig": {
"name": "Entrega semanal",
"internalCode": "DELIVERY-1"
}
}

La propiedad deliveryConfig se omite cuando la tienda no tiene una configuración de entrega asignada.

Parámetros de Consulta​

ParámetroTipoRequeridoDescripción
takenumberNoNúmero de elementos por página (default: 50, max: 50)
pagestringNoNúmero de página (default: 1)
cursorstringNoCursor de paginación para recorrer resultados
enabledbooleanNoFiltrar por estado habilitado

Ejemplo de Respuesta​

{
"data": [
{
"ownerName": "María Pérez",
"internalCode": "TIENDA-1234",
"ownerIdentifier": "PROPIETARIO-42",
"legalName": "Mercado María Pérez SRL",
"legalId": "CUIT-123456",
"addressFormat": "Calle Principal 123, Salta",
"addresses": [
{
"internalCode": "DIRECCION-1",
"addressLine": "Calle Principal 123",
"apartmentNumber": "Local 2",
"zipCode": "4400"
}
],
"latitude": "-24.7821",
"longitude": "-65.4232",
"enabled": true,
"deleted": false,
"users": [
{
"username": "maria@example.com",
"name": "María Pérez",
"phone": "3871234567",
"countryCode": "+54",
"lastLoginAt": "2026-07-31T20:46:14.325Z"
}
],
"credit": { "amount": 5000, "currency": "ARS" },
"priceList": { "name": "Minorista", "internalCode": "PRECIO-1" },
"promotionGroup": {
"name": "Promociones generales",
"internalCode": "GRUPO-PROMO-1"
},
"stockGroup": {
"name": "Stock principal",
"internalCode": "GRUPO-STOCK-1"
},
"deliveryConfig": {
"name": "Entrega semanal",
"internalCode": "DELIVERY-1"
},
"settings": {
"supportContactEmail": "soporte@example.com",
"supportContactPhone": "+543871234567",
"dropSize": { "value": 1000, "text": "ARS 1.000,00" }
},
"commertialRoute": {
"name": "Ruta norte",
"internalCode": "RUTA-1"
}
}
],
"page": {
"pageBased": {
"count": 1
}
}
}

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store?take=10&page=1&enabled=true",
{
method: "GET",
headers: headers,
},
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Obtener Detalles de Tienda​

GET/store/{code}

Recuperar información detallada sobre una tienda específica. Este endpoint devuelve:

  • Metadatos de la tienda
  • Información de dirección
  • Asociaciones de usuarios
  • Estado de crédito
  • Asociaciones de grupo
  • La configuración de entrega asignada, cuando existe

La propiedad opcional deliveryConfig tiene la misma forma en este endpoint y en GET /store: { "name": string, "internalCode": string }. Se omite cuando no existe una configuración de entrega asignada.

Parámetros de Ruta​

ParámetroTipoRequeridoDescripción
codestringSíCódigo interno de la tienda (coincide con ERP)

Ejemplo de Respuesta​

{
"ownerName": "María Pérez",
"internalCode": "TIENDA-1234",
"ownerIdentifier": "PROPIETARIO-42",
"legalName": "Mercado María Pérez SRL",
"legalId": "CUIT-123456",
"addressFormat": "Calle Principal 123, Salta",
"addresses": [
{
"internalCode": "DIRECCION-1",
"addressLine": "Calle Principal 123",
"apartmentNumber": "Local 2",
"zipCode": "4400"
}
],
"latitude": "-24.7821",
"longitude": "-65.4232",
"enabled": true,
"deleted": false,
"users": [
{
"username": "maria@example.com",
"name": "María Pérez",
"phone": "3871234567",
"countryCode": "+54",
"lastLoginAt": "2026-07-31T20:46:14.325Z"
}
],
"credit": { "amount": 5000, "currency": "ARS" },
"priceList": { "name": "Minorista", "internalCode": "PRECIO-1" },
"promotionGroup": {
"name": "Promociones generales",
"internalCode": "GRUPO-PROMO-1"
},
"stockGroup": {
"name": "Stock principal",
"internalCode": "GRUPO-STOCK-1"
},
"deliveryConfig": {
"name": "Entrega semanal",
"internalCode": "DELIVERY-1"
},
"settings": {
"supportContactEmail": "soporte@example.com",
"supportContactPhone": "+543871234567",
"dropSize": { "value": 1000, "text": "ARS 1.000,00" }
},
"commertialRoute": {
"name": "Ruta norte",
"internalCode": "RUTA-1"
}
}

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
};

fetch("https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234", {
method: "GET",
headers: headers,
})
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Actualizar Tienda​

PUT/store/{code}

Actualizar la información de una tienda existente. Este endpoint permite:

  • Modificar detalles de la tienda
  • Actualizar información de dirección
  • Cambiar asociaciones de grupo
  • Ajustar configuraciones

Parámetros de Ruta​

ParámetroTipoRequeridoDescripción
codestringSíCódigo interno de la tienda (coincide con ERP)

Ejemplo del Cuerpo de la Solicitud para Actualización​

{
"ownerName": "Owner name",
"ownerIdentifier": "Owner identifier",
"addresses": [
{
"internalCode": "1234",
"addressLine": "25 de mayo 1200, Buenos aires, Argentina",
"apartmentNumber": "2",
"zipCode": "2400"
}
],
"latitude": "-34.545278°",
"longitude": "-58.449722",
"addressFormat": "Av. Pres. Figueroa Alcorta 7597, C1428 Cdad. Autónoma de Buenos Aires",
"legalName": "legal name",
"legalId": "legal id",
"enabled": true,
"supportContactEmail": "string",
"supportContactPhone": "string",
"promotionGrouperCode": "1234",
"stockGrouperCode": "6789",
"deliveryConfigCode": "DELIVERY-1",
"pricelistCode": "1222",
"routeCode": "1234",
"latePayer": true,
"settings": {
"dropSize": {
"amount": 1000,
"currency": "USD"
}
}
}

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
name: "Nombre del Propietario Actualizado",
addresses: [
{
address: "Nueva Dirección",
zipCode: "2401",
},
],
legalName: "Nuevo Nombre Legal",
promotionGrouperCode: "5678",
};

fetch("https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234", {
method: "PUT",
headers: headers,
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Cambiar Estado de Tienda​

PUT/store/{code}/status

Habilitar o deshabilitar una tienda. Este endpoint permite:

  • Controlar la visibilidad de la tienda
  • Gestionar el acceso a la tienda
  • Actualizar el estado operativo

Parámetros de Ruta​

ParámetroTipoRequeridoDescripción
codestringSíCódigo interno de la tienda (coincide con ERP)

Parámetros del Cuerpo de la Solicitud​

ParámetroTipoRequeridoDescripción
enabledbooleanSíSi la tienda debe estar habilitada

Ejemplo del Cuerpo de la Solicitud​

{
"enabled": true
}

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
enabled: true,
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/status",
{
method: "PUT",
headers: headers,
body: JSON.stringify(data),
},
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Gestión de Usuarios de Tienda​

Agregar Usuarios​

PUT/store/{code}/add/user

Agregar usuarios a una tienda. Este endpoint permite:

  • Asociar nuevos usuarios con la tienda
  • Configurar acceso de usuarios
  • Gestionar personal de la tienda

Parámetros de Ruta​

ParámetroTipoRequeridoDescripción
codestringSíCódigo interno de la tienda (coincide con ERP)

Parámetros del Cuerpo de la Solicitud​

ParámetroTipoRequeridoDescripción
usersarraySíArray de IDs de usuario a agregar

Ejemplo del Cuerpo de la Solicitud​

{
"users": ["usuario123", "usuario456"]
}

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
users: ["usuario123", "usuario456"],
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/add/user",
{
method: "PUT",
headers: headers,
body: JSON.stringify(data),
},
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Eliminar Usuarios​

PUT/store/{code}/remove/user

Eliminar usuarios de una tienda. Este endpoint permite:

  • Eliminar asociaciones de usuarios
  • Gestionar control de acceso
  • Actualizar personal de la tienda

Parámetros de Ruta​

ParámetroTipoRequeridoDescripción
codestringSíCódigo interno de la tienda (coincide con ERP)

Parámetros del Cuerpo de la Solicitud​

ParámetroTipoRequeridoDescripción
usersarraySíArray de IDs de usuario a eliminar

Ejemplo del Cuerpo de la Solicitud​

{
"users": ["usuario123", "usuario456"]
}

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
users: ["usuario123", "usuario456"],
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/remove/user",
{
method: "PUT",
headers: headers,
body: JSON.stringify(data),
},
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Gestión de Crédito de Tienda​

POST/store/{code}/credit

Actualizar información de crédito de la tienda. Este endpoint permite:

  • Establecer límites de crédito
  • Gestionar disponibilidad de crédito
  • Actualizar términos de pago

Parámetros de Ruta​

ParámetroTipoRequeridoDescripción
codestringSíCódigo interno de la tienda (coincide con ERP)

Parámetros del Cuerpo de la Solicitud​

ParámetroTipoRequeridoDescripción
amountnumberSíMonto de crédito para la tienda

Ejemplo del Cuerpo de la Solicitud​

{
"amount": 5000
}

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
amount: 5000,
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/credit",
{
method: "POST",
headers: headers,
body: JSON.stringify(data),
},
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Gestión de Estado de Pago​

Marcar como Moroso​

POST/store/{code}/debtor

Marcar una tienda como morosa. Cuando una tienda se marca como morosa:

  • Se bloquean nuevos pedidos
  • Se restringe el acceso al crédito
  • Se actualiza el estado de pago

Parámetros de Ruta​

ParámetroTipoRequeridoDescripción
codestringSíCódigo interno de la tienda (coincide con ERP)

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/debtor",
{
method: "POST",
headers: headers,
},
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Marcar como Pagador Tardío​

POST/store/{code}/latepayer

Marcar una tienda como pagador tardío. Este estado significa:

  • La tienda puede realizar nuevos pedidos
  • El acceso al crédito está restringido
  • Se monitorea el estado de pago

Parámetros de Ruta​

ParámetroTipoRequeridoDescripción
codestringSíCódigo interno de la tienda (coincide con ERP)

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/latepayer",
{
method: "POST",
headers: headers,
},
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Operaciones por Lotes​

Asignar Tiendas a Configuraciones de Entrega​

POST/batch/delivery-config/stores

Agrega o quita tiendas de configuraciones de entrega de forma asíncrona. Cada operación identifica la configuración con groupInternalCode y la tienda con storeInternalCode.

{
"add": {
"stores": [
{
"groupInternalCode": "2345",
"storeInternalCode": "124f"
}
]
},
"remove": {
"stores": []
}
}

Debe existir al menos un elemento entre add.stores y remove.stores. Se permiten arrays vacíos para el lado que no tenga operaciones. La respuesta es 202 Accepted con IDs de batch separados:

{
"code": 202,
"batchIds": {
"add": ["550e8400-e29b-41d4-a716-446655440000"],
"remove": []
},
"message": "Operation in processing"
}

En POST /store, PUT /store/{code} y PUT /store, deliveryConfigCode es opcional:

  • Si se omite, Nilo no modifica la asignación actual.
  • Si se envía un código válido, Nilo asigna o reasigna la tienda luego de validar que la configuración pertenece al supplier autenticado.
  • Enviar null explícitamente es inválido y no desasigna.
  • Para desasignar una tienda se debe usar la operación remove de este endpoint batch.

Permiso requerido: supplier/grouper.bulkwrite.

Cambiar Estado de Tiendas en Lote​

POST/batch/store/status

Habilita o deshabilita múltiples tiendas de forma asíncrona. Cada ítem requiere code y enabled. La respuesta devuelve 202 Accepted con batchIds, que se pueden seguir desde la API de Operaciones por Lotes.

{
"items": [
{ "code": "STORE-001", "enabled": true },
{ "code": "STORE-002", "enabled": false }
]
}

Permiso requerido: supplier/store.bulkwrite.

Actualizar Configuraciones de Tienda​

POST/batch/store/setting

Actualizar configuraciones para múltiples tiendas simultáneamente. Este endpoint es útil para:

  • Actualizaciones de configuración masivas
  • Estandarizar configuraciones de tienda
  • Gestión eficiente de tiendas

Parámetros del Cuerpo de la Solicitud​

ParámetroTipoRequeridoDescripción
storesarraySíArray de configuraciones de tienda a actualizar

Ejemplo del Cuerpo de la Solicitud para Batch Store Settings​

{
"stores": [
{
"storeCode": "1234",
"settings": {
"credit": 5000,
"debtor": false,
"latePayer": false,
"allowPartialDelivery": true,
"minimumOrderAmount": 1000
}
},
{
"storeCode": "5678",
"settings": {
"credit": 10000,
"debtor": true,
"latePayer": true,
"allowPartialDelivery": false,
"minimumOrderAmount": 2000
}
}
]
}

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
stores: [
{
storeCode: "1234",
settings: {
credit: 5000,
debtor: false,
latePayer: false,
allowPartialDelivery: true,
minimumOrderAmount: 1000,
},
},
{
storeCode: "5678",
settings: {
credit: 10000,
debtor: true,
latePayer: true,
allowPartialDelivery: false,
minimumOrderAmount: 2000,
},
},
],
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/batch/store/setting",
{
method: "POST",
headers: headers,
body: JSON.stringify(data),
},
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Actualizaciones por Lotes de Tienda​

POST/batch/store

Realizar actualizaciones en múltiples tiendas simultáneamente. Este endpoint permite:

  • Crear múltiples tiendas
  • Actualizar tiendas existentes
  • Insertar/actualizar datos de tienda

Parámetros del Cuerpo de la Solicitud​

ParámetroTipoRequeridoDescripción
upsertarrayNoArray de tiendas para crear o actualizar
removearrayNoArray de códigos de tienda para eliminar

Ejemplo del Cuerpo de la Solicitud para Batch Store​

{
"create": [
{
"ownerName": "Owner name",
"ownerIdentifier": "Owner identifier",
"internalCode": "1234",
"addresses": [
{
"internalCode": "1234",
"addressLine": "25 de mayo 1200, Buenos aires, Argentina",
"apartmentNumber": "2",
"zipCode": "2400"
}
],
"latitude": "-34.545278°",
"longitude": "-58.449722",
"addressFormat": "Av. Pres. Figueroa Alcorta 7597, C1428 Cdad. Autónoma de Buenos Aires",
"legalName": "legal name",
"legalId": "legal id",
"supportContactEmail": "string",
"supportContactPhone": "string",
"promotionGrouperCode": "1234",
"stockGrouperCode": "6789",
"pricelistCode": "1222",
"routeCode": "1234",
"settings": {
"dropSize": {
"amount": 1000,
"currency": "USD"
}
}
}
],
"update": [
{
"ownerName": "Owner name updated",
"ownerIdentifier": "Owner identifier updated",
"internalCode": "5678",
"addresses": [
{
"internalCode": "5678",
"addressLine": "Nueva dirección",
"apartmentNumber": "3",
"zipCode": "2401"
}
],
"latitude": "-34.545278°",
"longitude": "-58.449722",
"addressFormat": "Nueva dirección completa",
"legalName": "nuevo nombre legal",
"legalId": "nuevo id legal",
"enabled": true,
"supportContactEmail": "nuevo@email.com",
"supportContactPhone": "1234567890",
"promotionGrouperCode": "PROMO2",
"stockGrouperCode": "STOCK2",
"pricelistCode": "PRICE2",
"routeCode": "ROUTE2",
"latePayer": true,
"settings": {
"dropSize": {
"amount": 2000,
"currency": "USD"
}
}
}
],
"upsert": [
{
"internalCode": "9012",
"ownerName": "Owner name upsert",
"ownerIdentifier": "Owner identifier upsert",
"addresses": [
{
"internalCode": "9012",
"addressLine": "Dirección upsert",
"apartmentNumber": "4",
"zipCode": "2402"
}
],
"latitude": "-34.545278°",
"longitude": "-58.449722",
"addressFormat": "Dirección completa upsert",
"legalName": "nombre legal upsert",
"legalId": "id legal upsert",
"enabled": true,
"supportContactEmail": "upsert@email.com",
"supportContactPhone": "0987654321",
"promotionGrouperCode": "PROMO3",
"stockGrouperCode": "STOCK3",
"pricelistCode": "PRICE3",
"routeCode": "ROUTE3",
"latePayer": false,
"settings": {
"dropSize": {
"amount": 3000,
"currency": "USD"
}
}
}
]
}

Ejemplo de Uso​

const headers = {
Authorization: "TU_TOKEN_DE_AUTH",
"x-api-key": "TU_API_KEY",
"Content-Type": "application/json",
};

const data = {
create: [
{
ownerName: "Owner name",
ownerIdentifier: "Owner identifier",
internalCode: "1234",
addresses: [
{
internalCode: "1234",
addressLine: "25 de mayo 1200, Buenos aires, Argentina",
apartmentNumber: "2",
zipCode: "2400",
},
],
latitude: "-34.545278°",
longitude: "-58.449722",
addressFormat:
"Av. Pres. Figueroa Alcorta 7597, C1428 Cdad. Autónoma de Buenos Aires",
legalName: "legal name",
legalId: "legal id",
supportContactEmail: "string",
supportContactPhone: "string",
promotionGrouperCode: "1234",
stockGrouperCode: "6789",
pricelistCode: "1222",
routeCode: "1234",
settings: {
dropSize: {
amount: 1000,
currency: "USD",
},
},
},
],
update: [
{
ownerName: "Owner name updated",
ownerIdentifier: "Owner identifier updated",
internalCode: "5678",
addresses: [
{
internalCode: "5678",
addressLine: "Nueva dirección",
apartmentNumber: "3",
zipCode: "2401",
},
],
latitude: "-34.545278°",
longitude: "-58.449722",
addressFormat: "Nueva dirección completa",
legalName: "nuevo nombre legal",
legalId: "nuevo id legal",
enabled: true,
supportContactEmail: "nuevo@email.com",
supportContactPhone: "1234567890",
promotionGrouperCode: "PROMO2",
stockGrouperCode: "STOCK2",
pricelistCode: "PRICE2",
routeCode: "ROUTE2",
latePayer: true,
settings: {
dropSize: {
amount: 2000,
currency: "USD",
},
},
},
],
upsert: [
{
internalCode: "9012",
ownerName: "Owner name upsert",
ownerIdentifier: "Owner identifier upsert",
addresses: [
{
internalCode: "9012",
addressLine: "Dirección upsert",
apartmentNumber: "4",
zipCode: "2402",
},
],
latitude: "-34.545278°",
longitude: "-58.449722",
addressFormat: "Dirección completa upsert",
legalName: "nombre legal upsert",
legalId: "id legal upsert",
enabled: true,
supportContactEmail: "upsert@email.com",
supportContactPhone: "0987654321",
promotionGrouperCode: "PROMO3",
stockGrouperCode: "STOCK3",
pricelistCode: "PRICE3",
routeCode: "ROUTE3",
latePayer: false,
settings: {
dropSize: {
amount: 3000,
currency: "USD",
},
},
},
],
};

fetch(
"https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/batch/store",
{
method: "POST",
headers: headers,
body: JSON.stringify(data),
},
)
.then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));

Tipos de Respuesta​

Respuesta Exitosa​

{
"code": 200,
"message": "Operación exitosa",
"data": {
"name": "Nombre de la tienda",
"internalCode": "1234",
"addresses": [
{
"address": "25 de mayo 1200, Buenos Aires, Argentina",
"zipCode": "2400",
"latitude": -34.603722,
"longitude": -58.381592
}
],
"legalName": "Nombre Legal SRL",
"legalId": "30-12345678-9",
"promotionGrouperCode": "PROMO1",
"stockGrouperCode": "STOCK1",
"pricelistCode": "PRICE1",
"enabled": true,
"creditLimit": 50000,
"isDebtor": false,
"isLatePayer": false
}
}

Ejemplos de Respuesta de Error​

Tienda No Encontrada​

{
"code": 404,
"message": "Tienda no encontrada"
}

Error de Validación​

{
"code": 400,
"message": "Datos de tienda inválidos",
"errors": [
{
"field": "internalCode",
"message": "El código interno es requerido"
}
]
}

Mejores Prácticas​

  1. Gestión de Tiendas

    • Usar convenciones de nombres consistentes
    • Mantener información precisa de direcciones
    • Implementar gestión adecuada de estados
    • Mantener actualizada la información de la tienda
  2. Gestión de Usuarios

    • Validar información de usuarios
    • Mantener registros de acceso de usuarios
    • Documentar cambios de usuarios
    • Implementar procedimientos de eliminación de usuarios
  3. Gestión de Crédito

    • Monitorear límites de crédito
    • Rastrear historial de pagos
    • Documentar cambios de estado
    • Implementar verificaciones de crédito
  4. Optimización de Rendimiento

    • Usar operaciones por lotes para múltiples actualizaciones
    • Implementar estrategias de caché
    • Monitorear uso de API
    • Optimizar sincronización de datos

Casos de Uso Comunes​

  1. Configuración Inicial de Tienda

    • Crear perfil de tienda
    • Configurar acceso de usuarios
    • Establecer límites de crédito
    • Configurar asociaciones de grupos
  2. Mantenimiento de Tienda

    • Actualizar información de tienda
    • Gestionar acceso de usuarios
    • Monitorear estado de crédito
    • Ajustar configuraciones de tienda
  3. Operaciones en Lote

    • Importar múltiples tiendas
    • Actualizar configuraciones de tienda
    • Modificar asociaciones de grupos
    • Sincronizar datos de tienda
  4. Gestión de Crédito

    • Monitorear estado de pagos
    • Actualizar límites de crédito
    • Manejar morosos
    • Procesar cambios de crédito

Guías de Implementación​

  1. Creación de Tienda

    • Validar campos requeridos
    • Verificar códigos duplicados
    • Procesar datos de dirección
    • Configurar ajustes iniciales
  2. Gestión de Usuarios

    • Validar credenciales de usuario
    • Manejar permisos de usuario
    • Gestionar asociaciones de usuario
    • Rastrear actividades de usuario
  3. Manejo de Crédito

    • Implementar verificaciones de crédito
    • Procesar estado de pago
    • Manejar actualizaciones de crédito
    • Monitorear uso de crédito
  4. Procesamiento por Lotes

    • Validar datos por lotes
    • Manejar fallos parciales
    • Implementar rollback
    • Reportar resultados de lotes

Seguridad​

Todos los endpoints de la API requieren dos tipos de autenticación:

  1. API Key en el encabezado: x-api-key
  2. Token de autorización en el encabezado: Authorization

Permisos Requeridos​

Para los endpoints de gestión de tiendas, se requieren los siguientes permisos:

  • Para operaciones de lectura: supplier/store.read
  • Para operaciones de escritura: supplier/store.write
  • Para operaciones por lotes: supplier/store.bulkwrite
  • Para operaciones de crédito: supplier/credit.write

Manejo de Errores​

  1. Validación de Entrada

    • Validar códigos de tienda
    • Verificar datos de dirección
    • Comprobar información de usuario
    • Validar datos de crédito
  2. Respuestas de Error

    • Usar códigos HTTP apropiados
    • Proporcionar mensajes claros
    • Incluir errores a nivel de campo
    • Agregar seguimiento de errores
  3. Procedimientos de Recuperación

    • Manejar fallos de red
    • Implementar reintentos
    • Mantener consistencia de datos
    • Registrar detalles de errores
  4. Monitoreo

    • Rastrear tasas de error
    • Monitorear rendimiento de API
    • Alertar sobre errores críticos
    • Analizar patrones de error
Tana

Tana

Preguntame lo que quieras sobre la API de Nilo: endpoints, autenticación, guías de integración o ejemplos de código.

Buena práctica: validá contra la documentación oficial para tener los detalles más actualizados.