API
¿Cómo creo productos con la API de Xubio?
Todos los llamados van a https://xubio.com/API/1.1/ y necesitan el token que obtuviste con tus credenciales. El token dura una hora.
Creá un producto
POST /API/1.1/ProductoVentaBean
Ejemplo
{
"nombre": "Servicio de mantenimiento mensual",
"codigo": "SERV-001",
"categoria": 1,
"cuentaContable": { "codigo": "VENTA_DE_BIENES" },
"tasaIva": { "codigo": "IVA21" }
}
Respuesta
{
"productoid": 3529585,
"nombre": "Servicio de mantenimiento mensual",
"codigo": "SERV-001",
"usrcode": "SERV-XB2636",
"unidadMedida": { "ID": 1, "nombre": "Unidad (U)", "codigo": "07" },
"categoria": 1,
"stockNegativo": false,
"tasaIva": { "ID": 1, "nombre": "Iva 21%", "codigo": "IVA21" },
"cuentaContable": { "ID": -10, "nombre": "Venta de Bienes", "codigo": "VENTA_DE_BIENES" },
"catFormIVA2002": -1,
"activo": 1
}
Guardate el productoid que te devuelve: es el id con el que después modificás o eliminás el producto.
| Campo | Formato | Qué es |
|---|---|---|
nombre |
Texto | El nombre del producto o servicio |
codigo |
Texto | Tu código interno. Si no lo mandás, el llamado falla con un error 500 |
cuentaContable |
Referencia → GET /cuenta |
La cuenta donde se imputa la venta. Si no la mandás, el llamado falla con un error 500 |
tasaIva |
Referencia → GET /tasaImpositiva |
La alícuota de IVA. Sin esto no vas a poder facturarlo |
| Campo | Formato | Qué es |
|---|---|---|
categoria |
Número | Qué tipo de producto es. Si no la mandás queda en 0, bienes de cambio (ver la tabla de abajo) |
unidadMedida |
Referencia → GET /unidadMedida |
Si no la mandás, se usa Unidad (U) |
usrcode |
Texto | Tu SKU. Si no lo mandás, Xubio genera uno con las primeras 4 letras del código, -XB y 4 dígitos, como SERV-XB2636 |
codigoBarra |
Texto | El código de barras del producto |
stockNegativo |
true / false |
Si el producto puede quedar con stock en negativo |
activo |
1 / 0 |
Si el producto está habilitado. Se crea en 1 |
Qué pasa si el SKU, el nombre o el código ya existen
Xubio nunca rechaza el alta por duplicado: resuelve cada caso solo, así que conviene que sepas con qué te vas a encontrar.
| Si mandás… | Xubio… |
|---|---|
Un usrcode que ya existe |
No crea nada nuevo: te devuelve el producto que ya tenías, con su productoid y sus datos actuales. Compara sin distinguir mayúsculas |
Un nombre que ya existe |
Crea el producto, pero le pasa el nombre a mayúsculas y le agrega un número: SERVICIO DE MANTENIMIENTO MENSUAL (1) |
Un codigo que ya existe |
Crea el producto, pero le pasa el código a mayúsculas y le agrega un número: SERV-001 (1) |
Por eso, si estás sincronizando un catálogo, mandá siempre el usrcode: es el único campo que evita que se te duplique el producto.
Categorías de producto
| Valor | Categoría |
|---|---|
0 |
Bienes de cambio |
1 |
Servicios de venta |
2 |
Servicios de compra |
11 |
Bienes de uso |
15 |
Venta de combo |
16 |
Materia prima |
Cualquier otro valor se rechaza con el mensaje “La categoría indicada para … es inválida”.
Buscá un producto
GET /API/1.1/ProductoVentaBean
Los filtros son opcionales y van en la URL. Sin parámetros te trae todos los productos de tu cuenta.
| Parámetro | Valores |
|---|---|
id |
El productoid del producto |
nombre |
El nombre exacto, con las mismas mayúsculas y minúsculas. No busca por fragmentos |
usrcode |
Tu SKU exacto, con las mismas mayúsculas y minúsculas |
categoriaProducto |
El número de la categoría |
tasaIVAProducto |
El ID de la alícuota, no su código: 1 para IVA 21%. Lo sacás de GET /tasaImpositiva |
activo |
1 activos, 0 inactivos |
Ejemplo
curl "https://xubio.com/API/1.1/ProductoVentaBean?usrcode=SERV-XB2636" \
-H "Authorization: Bearer TU_TOKEN"
Respuesta
[
{
"productoid": 3529585,
"nombre": "Servicio de mantenimiento mensual",
"codigo": "SERVICIO_DE_MANTENIMIENTO_MENSUAL",
"usrcode": "SERV-XB2636",
"categoria": 1,
"tasaIva": { "ID": 1, "nombre": "Iva 21%", "codigo": "IVA21" },
"cuentaContable": { "ID": -10, "nombre": "Venta de Bienes", "codigo": "VENTA_DE_BIENES" },
"activo": 1
}
]
La respuesta es siempre una lista, aunque filtres por id y venga un solo producto. Si no hay coincidencias te devuelve una lista vacía.
0, 1, 11 y 16. Los servicios de compra (2) y las ventas de combo (15) quedan afuera. Para verlos tenés que pedir el listado completo, sin ningún parámetro.
No existe GET /ProductoVentaBean/{id}: para traer un producto puntual usá el filtro id.
Modificá o eliminá un producto
PUT /API/1.1/ProductoVentaBean/3529585
PATCH /API/1.1/ProductoVentaBean/3529585
DELETE /API/1.1/ProductoVentaBean/3529585
PUT y PATCH exigen que mandes el productoid dentro del cuerpo y que coincida con el id de la URL. Si no, el llamado se rechaza con “No se puede actualizar el registro, ids diferentes”.
A diferencia de otros recursos, el producto admite modificación parcial: con PATCH mandás solo los campos que cambian y el resto queda como estaba. Con PUT tenés que mandar el producto completo, porque como mínimo necesita nombre, cuentaContable y tasaIva.
Ejemplo
{
"productoid": 3529585,
"codigoBarra": "7790001000019"
}
Respuesta
{
"productoid": 3529585,
"codigoBarra": "7790001000019"
}
Las dos operaciones te devuelven de vuelta el cuerpo que mandaste, no el producto guardado. Para ver cómo quedó el registro, pedilo con GET /ProductoVentaBean?id=3529585.
PUT y en cada PATCH, Xubio reescribe el codigo a partir del nombre, en mayúsculas y con guiones bajos en vez de espacios. Un producto llamado "Servicio de mantenimiento mensual" queda con el código SERVICIO_DE_MANTENIMIENTO_MENSUAL, aunque en el cuerpo mandes otro. El codigo que elegís vos solo se respeta en el alta.
DELETE no lleva cuerpo y responde 204 sin contenido. Borra el producto: no lo deja inactivo. Si volvés a pedir la baja del mismo id, te contesta “El producto de venta cuyo ID es: … no existe”. Si lo que querés es sacarlo de circulación pero conservar el historial, hacé un PATCH con "activo": 0 en vez de eliminarlo.