curl --request PATCH \
--url https://api.revem.ai/products/public/v1/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"price": 1390000,
"Estado": "Vendida"
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({price: 1390000, Estado: 'Vendida'})
};
fetch('https://api.revem.ai/products/public/v1/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.revem.ai/products/public/v1/{id}"
payload = {
"price": 1390000,
"Estado": "Vendida"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"ok": true,
"id": "3f2b6c1e-8d4a-4f0b-9c2e-7a1d5e6f8b90",
"warnings": []
}{
"error": "<string>",
"ok": false,
"message": "<string>",
"unknownAttributes": [
"<string>"
],
"missingAttributes": [
"<string>"
]
}{
"error": "Unauthorized",
"message": "Invalid API key"
}{
"ok": false,
"error": "Forbidden",
"message": "This endpoint is not available to API keys"
}{
"ok": false,
"error": "Not Found",
"message": "No existe un producto con ese id"
}{
"ok": false,
"error": "Conflict",
"message": "El SKU \"CONT-20ST\" ya pertenece a otro producto"
}{
"error": "<string>",
"ok": false,
"message": "<string>",
"unknownAttributes": [
"<string>"
],
"missingAttributes": [
"<string>"
]
}{
"ok": false,
"error": "Too many requests. Retry in 1 minute."
}Actualizar un producto por id
Actualiza por el id que devolvió el upsert. Es la vía para cambiarle el SKU a un producto sin crear uno nuevo: el upsert resuelve por SKU, así que enviarle uno distinto crearía un segundo producto.
Una clave ausente deja el valor guardado como está, y un cuerpo que no cambia ningún campo responde 200 sin tocar nada — un sync idempotente puede reenviarlo.
De los atributos obligatorios sólo se revisan los que la solicitud nombra: uno que no mencionas pasa, y enviarlo en null (o en "") responde 422, porque eso es pedir borrarlo.
curl --request PATCH \
--url https://api.revem.ai/products/public/v1/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"price": 1390000,
"Estado": "Vendida"
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({price: 1390000, Estado: 'Vendida'})
};
fetch('https://api.revem.ai/products/public/v1/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.revem.ai/products/public/v1/{id}"
payload = {
"price": 1390000,
"Estado": "Vendida"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"ok": true,
"id": "3f2b6c1e-8d4a-4f0b-9c2e-7a1d5e6f8b90",
"warnings": []
}{
"error": "<string>",
"ok": false,
"message": "<string>",
"unknownAttributes": [
"<string>"
],
"missingAttributes": [
"<string>"
]
}{
"error": "Unauthorized",
"message": "Invalid API key"
}{
"ok": false,
"error": "Forbidden",
"message": "This endpoint is not available to API keys"
}{
"ok": false,
"error": "Not Found",
"message": "No existe un producto con ese id"
}{
"ok": false,
"error": "Conflict",
"message": "El SKU \"CONT-20ST\" ya pertenece a otro producto"
}{
"error": "<string>",
"ok": false,
"message": "<string>",
"unknownAttributes": [
"<string>"
],
"missingAttributes": [
"<string>"
]
}{
"ok": false,
"error": "Too many requests. Retry in 1 minute."
}Authorizations
La API key de tu organización, con la forma rvm_<prefijo>.<secreto>, enviada como Authorization: Bearer rvm_…. Revem la emite y sólo se muestra una vez; si la pierdes se reemplaza, no se recupera.
Path Parameters
Id del producto en Revem.
Body
Todos los campos son opcionales y una clave ausente deja el valor guardado como está. Los atributos personalizados van al mismo nivel que los campos fijos, identificados por su nombre en Revem (sin distinguir mayúsculas). Tienen que estar definidos para productos: un nombre sin definición responde 422 con la lista en unknownAttributes, y un valor que no calza con el tipo declarado —o una opción que no está en un select— también responde 422. Un null quita el atributo. Hasta 100 atributos por solicitud.
Identificador del producto en tu sistema. Único dentro del tenant; es la identidad con la que el upsert resuelve. Opcional: reemplaza el SKU actual. Si ya pertenece a otro producto responde 409.
1 - 255Nombre del producto, hasta 500 caracteres.
1 - 500Descripción, hasta 5000 caracteres. Una cadena vacía no borra la descripción guardada.
5000Precio, hasta dos decimales. Un tercer decimal responde 400 en vez de truncarse.
0 <= x <= 9999999999.99Código de moneda de 3 letras, por ejemplo CLP.
^[A-Za-z]{3}$UNIQUE, WEEKLY, MONTHLY, QUARTERLY, SEMI_ANNUAL o ANNUAL. Al crear, si se omite, queda en UNIQUE.
UNIQUE, WEEKLY, MONTHLY, QUARTERLY, SEMI_ANNUAL, ANNUAL UNIQUE para un cobro único o RECURRENT para uno recurrente.
UNIQUE, RECURRENT UNIT, HOUR, DAY, MONTH, KG, G, LITER, METER o M2.
UNIT, HOUR, DAY, MONTH, KG, G, LITER, METER, M2 Descuento máximo permitido, entero de 0 a 100.
0 <= x <= 100Impuesto aplicable, entero de 0 a 100.
0 <= x <= 100Si el producto está disponible. Esta API no borra productos: dar de baja es enviar active: false.
Enlace http o https a la imagen. Responde 409 si la administra la integración que importó el producto.
2000Enlace http o https donde se ve o se compra. Responde 409 si la administra la integración que importó el producto.
2000