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
- Códigos Únicos: Cada tienda requiere un código interno único que coincida con su sistema ERP
- Gestión de Usuarios: Los usuarios se asocian vía número de teléfono (con código de país) o email
- Sistema de Crédito: Las tiendas tienen límites de crédito y seguimiento del estado de pagos
- Datos de Ubicación: Las tiendas requieren información precisa de dirección y geolocalización
- Múltiples Agrupadores: Las tiendas pueden pertenecer a múltiples agrupadores de promoción si está configurado
- Operaciones por Lotes: Soporte para actualizar eficientemente múltiples tiendas
Operaciones Individuales de Tienda
Crear Tienda
/storeCrear 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| name | string | Sí | Nombre de la tienda |
| internalCode | string | Sí | Código interno que coincide con el ERP |
| addresses | array | Sí | Lista de direcciones de la tienda |
| legalName | string | Sí | Nombre legal del negocio |
| legalId | string | Sí | Identificador legal del negocio (CUIT/RUT) |
| promotionGrouperCode | string | No | Código del grupo de promociones |
| stockGrouperCode | string | No | Código del grupo de stock |
| pricelistCode | string | No | Código de la lista de precios |
| enabled | boolean | No | Estado de habilitación de la tienda |
| creditLimit | number | No | Límite de crédito de la tienda |
Parámetros de Dirección
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| address | string | Sí | Dirección completa |
| zipCode | string | Sí | Código postal |
| latitude | number | No | Latitud de la ubicación |
| longitude | number | No | Longitud 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",
"pricelistCode": "1222",
"routeCode": "1234",
"settings": {
"dropSize": {
"amount": 1000,
"currency": "USD"
}
}
}
Ejemplo de Uso
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY',
'Content-Type': 'application/json'
}
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
}
response = requests.post(url, headers=headers, json=data)
print(response.text)
Obtener Todas las Tiendas
/storeRecuperar 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
Parámetros de Consulta
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| take | number | No | Número de elementos por página (default: 50, max: 50) |
| page | string | No | Número de página (default: 1) |
| enabled | boolean | No | Filtrar por estado habilitado |
Ejemplo de Uso
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store"
params = {
"take": 10,
"page": 1,
"enabled": True
}
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY'
}
response = requests.get(url, headers=headers, params=params)
print(response.text)
Obtener Detalles de Tienda
/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
Parámetros de Ruta
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| code | string | Sí | Código interno de la tienda (coincide con ERP) |
Ejemplo de Uso
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY'
}
response = requests.get(url, headers=headers)
print(response.text)
Actualizar Tienda
/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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| code | string | Sí | 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",
"pricelistCode": "1222",
"routeCode": "1234",
"latePayer": true,
"settings": {
"dropSize": {
"amount": 1000,
"currency": "USD"
}
}
}
Ejemplo de Uso
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY',
'Content-Type': 'application/json'
}
data = {
"name": "Nombre del Propietario Actualizado",
"addresses": [
{
"address": "Nueva Dirección",
"zipCode": "2401"
}
],
"legalName": "Nuevo Nombre Legal",
"promotionGrouperCode": "5678"
}
response = requests.put(url, headers=headers, json=data)
print(response.text)
Cambiar Estado de Tienda
/store/{code}/statusHabilitar 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| code | string | Sí | Código interno de la tienda (coincide con ERP) |
Parámetros del Cuerpo de la Solicitud
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| enabled | boolean | Sí | Si la tienda debe estar habilitada |
Ejemplo del Cuerpo de la Solicitud
{
"enabled": true
}
Ejemplo de Uso
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/status"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY',
'Content-Type': 'application/json'
}
data = {
"enabled": True
}
response = requests.put(url, headers=headers, json=data)
print(response.text)
Gestión de Usuarios de Tienda
Agregar Usuarios
/store/{code}/add/userAgregar 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| code | string | Sí | Código interno de la tienda (coincide con ERP) |
Parámetros del Cuerpo de la Solicitud
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| users | array | Sí | Array de IDs de usuario a agregar |
Ejemplo del Cuerpo de la Solicitud
{
"users": ["usuario123", "usuario456"]
}
Ejemplo de Uso
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/add/user"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY',
'Content-Type': 'application/json'
}
data = {
"users": ["usuario123", "usuario456"]
}
response = requests.put(url, headers=headers, json=data)
print(response.text)
Eliminar Usuarios
/store/{code}/remove/userEliminar 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| code | string | Sí | Código interno de la tienda (coincide con ERP) |
Parámetros del Cuerpo de la Solicitud
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| users | array | Sí | Array de IDs de usuario a eliminar |
Ejemplo del Cuerpo de la Solicitud
{
"users": ["usuario123", "usuario456"]
}
Ejemplo de Uso
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/remove/user"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY',
'Content-Type': 'application/json'
}
data = {
"users": ["usuario123", "usuario456"]
}
response = requests.put(url, headers=headers, json=data)
print(response.text)
Gestión de Crédito de Tienda
/store/{code}/creditActualizar 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| code | string | Sí | Código interno de la tienda (coincide con ERP) |
Parámetros del Cuerpo de la Solicitud
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| amount | number | Sí | Monto de crédito para la tienda |
Ejemplo del Cuerpo de la Solicitud
{
"amount": 5000
}
Ejemplo de Uso
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/credit"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY',
'Content-Type': 'application/json'
}
data = {
"amount": 5000
}
response = requests.post(url, headers=headers, json=data)
print(response.text)
Gestión de Estado de Pago
Marcar como Moroso
/store/{code}/debtorMarcar 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| code | string | Sí | Código interno de la tienda (coincide con ERP) |
Ejemplo de Uso
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/debtor"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY'
}
response = requests.post(url, headers=headers)
print(response.text)
Marcar como Pagador Tardío
/store/{code}/latepayerMarcar 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| code | string | Sí | Código interno de la tienda (coincide con ERP) |
Ejemplo de Uso
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/store/1234/latepayer"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY'
}
response = requests.post(url, headers=headers)
print(response.text)
Operaciones por Lotes
Actualizar Configuraciones de Tienda
/batch/store/settingActualizar 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| stores | array | Sí | 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
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/batch/store/setting"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY',
'Content-Type': 'application/json'
}
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
}
}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.text)
Actualizaciones por Lotes de Tienda
/batch/storeRealizar 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ámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| upsert | array | No | Array de tiendas para crear o actualizar |
| remove | array | No | Array 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
- Javascript
- Python
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));
import requests
url = "https://tm0cs5kjs6.execute-api.us-east-1.amazonaws.com/dev/batch/store"
headers = {
'Authorization': 'TU_TOKEN_DE_AUTH',
'x-api-key': 'TU_API_KEY',
'Content-Type': 'application/json'
}
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"
}
}
}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.text)
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
-
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
-
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
-
Gestión de Crédito
- Monitorear límites de crédito
- Rastrear historial de pagos
- Documentar cambios de estado
- Implementar verificaciones de crédito
-
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
-
Configuración Inicial de Tienda
- Crear perfil de tienda
- Configurar acceso de usuarios
- Establecer límites de crédito
- Configurar asociaciones de grupos
-
Mantenimiento de Tienda
- Actualizar información de tienda
- Gestionar acceso de usuarios
- Monitorear estado de crédito
- Ajustar configuraciones de tienda
-
Operaciones en Lote
- Importar múltiples tiendas
- Actualizar configuraciones de tienda
- Modificar asociaciones de grupos
- Sincronizar datos de tienda
-
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
-
Creación de Tienda
- Validar campos requeridos
- Verificar códigos duplicados
- Procesar datos de dirección
- Configurar ajustes iniciales
-
Gestión de Usuarios
- Validar credenciales de usuario
- Manejar permisos de usuario
- Gestionar asociaciones de usuario
- Rastrear actividades de usuario
-
Manejo de Crédito
- Implementar verificaciones de crédito
- Procesar estado de pago
- Manejar actualizaciones de crédito
- Monitorear uso de crédito
-
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:
- API Key en el encabezado:
x-api-key - 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
-
Validación de Entrada
- Validar códigos de tienda
- Verificar datos de dirección
- Comprobar información de usuario
- Validar datos de crédito
-
Respuestas de Error
- Usar códigos HTTP apropiados
- Proporcionar mensajes claros
- Incluir errores a nivel de campo
- Agregar seguimiento de errores
-
Procedimientos de Recuperación
- Manejar fallos de red
- Implementar reintentos
- Mantener consistencia de datos
- Registrar detalles de errores
-
Monitoreo
- Rastrear tasas de error
- Monitorear rendimiento de API
- Alertar sobre errores críticos
- Analizar patrones de error