Empujar productos
curl --request POST \
--url https://api.automationhub.one/api:07fkGLk_/v1/catalog/items \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"event_id": "pos-evt-20260730-001",
"occurred_at": "2026-07-30T13:00:00-03:00",
"action": "upsert",
"items": [
{
"codigo": "1001",
"nombre": "Kilo de helado",
"categoria": "Helados",
"precio": 16000,
"deshabilitado": false
}
]
}
'import requests
url = "https://api.automationhub.one/api:07fkGLk_/v1/catalog/items"
payload = {
"event_id": "pos-evt-20260730-001",
"occurred_at": "2026-07-30T13:00:00-03:00",
"action": "upsert",
"items": [
{
"codigo": "1001",
"nombre": "Kilo de helado",
"categoria": "Helados",
"precio": 16000,
"deshabilitado": False
}
]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
event_id: 'pos-evt-20260730-001',
occurred_at: '2026-07-30T13:00:00-03:00',
action: 'upsert',
items: [
{
codigo: '1001',
nombre: 'Kilo de helado',
categoria: 'Helados',
precio: 16000,
deshabilitado: false
}
]
})
};
fetch('https://api.automationhub.one/api:07fkGLk_/v1/catalog/items', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.automationhub.one/api:07fkGLk_/v1/catalog/items",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'event_id' => 'pos-evt-20260730-001',
'occurred_at' => '2026-07-30T13:00:00-03:00',
'action' => 'upsert',
'items' => [
[
'codigo' => '1001',
'nombre' => 'Kilo de helado',
'categoria' => 'Helados',
'precio' => 16000,
'deshabilitado' => false
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.automationhub.one/api:07fkGLk_/v1/catalog/items"
payload := strings.NewReader("{\n \"event_id\": \"pos-evt-20260730-001\",\n \"occurred_at\": \"2026-07-30T13:00:00-03:00\",\n \"action\": \"upsert\",\n \"items\": [\n {\n \"codigo\": \"1001\",\n \"nombre\": \"Kilo de helado\",\n \"categoria\": \"Helados\",\n \"precio\": 16000,\n \"deshabilitado\": false\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.automationhub.one/api:07fkGLk_/v1/catalog/items")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"event_id\": \"pos-evt-20260730-001\",\n \"occurred_at\": \"2026-07-30T13:00:00-03:00\",\n \"action\": \"upsert\",\n \"items\": [\n {\n \"codigo\": \"1001\",\n \"nombre\": \"Kilo de helado\",\n \"categoria\": \"Helados\",\n \"precio\": 16000,\n \"deshabilitado\": false\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.automationhub.one/api:07fkGLk_/v1/catalog/items")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"event_id\": \"pos-evt-20260730-001\",\n \"occurred_at\": \"2026-07-30T13:00:00-03:00\",\n \"action\": \"upsert\",\n \"items\": [\n {\n \"codigo\": \"1001\",\n \"nombre\": \"Kilo de helado\",\n \"categoria\": \"Helados\",\n \"precio\": 16000,\n \"deshabilitado\": false\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"duplicate": true,
"accepted": 123,
"skipped_stale": 123,
"rejected": [
{
"codigo": "<string>",
"error": "<string>"
}
]
}{
"code": "ERROR_CODE_ACCESS_DENIED",
"message": "Invalid API key.",
"payload": ""
}API Reference
Empujar productos
Alta, modificación o baja de productos, en lote. Idempotente por event_id;
los eventos más viejos que lo ya aplicado se descartan (skipped_stale);
un ítem inválido no rechaza el lote (rejected por ítem).
action: "delete" desactiva los productos listados (no se borran: los
pedidos históricos siguen siendo legibles).
POST
/
v1
/
catalog
/
items
Empujar productos
curl --request POST \
--url https://api.automationhub.one/api:07fkGLk_/v1/catalog/items \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"event_id": "pos-evt-20260730-001",
"occurred_at": "2026-07-30T13:00:00-03:00",
"action": "upsert",
"items": [
{
"codigo": "1001",
"nombre": "Kilo de helado",
"categoria": "Helados",
"precio": 16000,
"deshabilitado": false
}
]
}
'import requests
url = "https://api.automationhub.one/api:07fkGLk_/v1/catalog/items"
payload = {
"event_id": "pos-evt-20260730-001",
"occurred_at": "2026-07-30T13:00:00-03:00",
"action": "upsert",
"items": [
{
"codigo": "1001",
"nombre": "Kilo de helado",
"categoria": "Helados",
"precio": 16000,
"deshabilitado": False
}
]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
event_id: 'pos-evt-20260730-001',
occurred_at: '2026-07-30T13:00:00-03:00',
action: 'upsert',
items: [
{
codigo: '1001',
nombre: 'Kilo de helado',
categoria: 'Helados',
precio: 16000,
deshabilitado: false
}
]
})
};
fetch('https://api.automationhub.one/api:07fkGLk_/v1/catalog/items', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.automationhub.one/api:07fkGLk_/v1/catalog/items",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'event_id' => 'pos-evt-20260730-001',
'occurred_at' => '2026-07-30T13:00:00-03:00',
'action' => 'upsert',
'items' => [
[
'codigo' => '1001',
'nombre' => 'Kilo de helado',
'categoria' => 'Helados',
'precio' => 16000,
'deshabilitado' => false
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.automationhub.one/api:07fkGLk_/v1/catalog/items"
payload := strings.NewReader("{\n \"event_id\": \"pos-evt-20260730-001\",\n \"occurred_at\": \"2026-07-30T13:00:00-03:00\",\n \"action\": \"upsert\",\n \"items\": [\n {\n \"codigo\": \"1001\",\n \"nombre\": \"Kilo de helado\",\n \"categoria\": \"Helados\",\n \"precio\": 16000,\n \"deshabilitado\": false\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.automationhub.one/api:07fkGLk_/v1/catalog/items")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"event_id\": \"pos-evt-20260730-001\",\n \"occurred_at\": \"2026-07-30T13:00:00-03:00\",\n \"action\": \"upsert\",\n \"items\": [\n {\n \"codigo\": \"1001\",\n \"nombre\": \"Kilo de helado\",\n \"categoria\": \"Helados\",\n \"precio\": 16000,\n \"deshabilitado\": false\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.automationhub.one/api:07fkGLk_/v1/catalog/items")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"event_id\": \"pos-evt-20260730-001\",\n \"occurred_at\": \"2026-07-30T13:00:00-03:00\",\n \"action\": \"upsert\",\n \"items\": [\n {\n \"codigo\": \"1001\",\n \"nombre\": \"Kilo de helado\",\n \"categoria\": \"Helados\",\n \"precio\": 16000,\n \"deshabilitado\": false\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"duplicate": true,
"accepted": 123,
"skipped_stale": 123,
"rejected": [
{
"codigo": "<string>",
"error": "<string>"
}
]
}{
"code": "ERROR_CODE_ACCESS_DENIED",
"message": "Invalid API key.",
"payload": ""
}Authorizations
Key por sucursal provista por Xenda (formato xnd_...).
Body
application/json
ID único del evento en tu sistema. Reintentar con el mismo event_id es seguro.
Cuándo ocurrió el cambio en tu sistema. Define el orden entre eventos.
Show child attributes
Show child attributes
Opcional. Verificación cruzada contra la sucursal de la key (403 si no coincide).
Available options:
upsert, delete 
