Inventory transactions report
curl --request GET \
--url https://api.cubbo.com/v1/reports/inventory-transactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cubbo.com/v1/reports/inventory-transactions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cubbo.com/v1/reports/inventory-transactions', 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.cubbo.com/v1/reports/inventory-transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cubbo.com/v1/reports/inventory-transactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cubbo.com/v1/reports/inventory-transactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cubbo.com/v1/reports/inventory-transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"cnpj": "00.000.000/0001-00",
"store_name": "Example Store",
"transaction_type": "inbound",
"invoice_access_key": "00000000000000000000000000000000000000000000",
"invoice_number": "S1 N1001",
"order_number": "5678",
"inventory_type": "physical",
"inbound_outbound": "inbound",
"warehouse_code": "WH-SP-01",
"warehouse_name": "Sao Paulo",
"sku_cph": "SKU-RED-M",
"name": "Widget Pro Black",
"material_sku": "SKU-RED-M",
"volume": 50,
"quantity": 50,
"balance_after": 50,
"timestamp": "2026-06-02T10:15:00-03:00",
"quality": "good",
"quality_source": null
},
{
"cnpj": "00.000.000/0001-00",
"store_name": "Example Store",
"transaction_type": "sale",
"invoice_access_key": "00000000000000000000000000000000000000000001",
"invoice_number": "S1 N1002",
"order_number": "ORD-0001",
"inventory_type": "physical",
"inbound_outbound": "outbound",
"warehouse_code": "WH-SP-01",
"warehouse_name": "Sao Paulo",
"sku_cph": "SKU-RED-M",
"name": "Widget Pro Black",
"material_sku": "SKU-RED-M",
"volume": -2,
"quantity": 2,
"balance_after": 48,
"timestamp": "2026-06-03T16:40:12-03:00",
"quality": "good",
"quality_source": null
},
{
"cnpj": "00.000.000/0001-00",
"store_name": "Example Store",
"transaction_type": "lost",
"invoice_access_key": null,
"invoice_number": null,
"order_number": "ORD-0002",
"inventory_type": "virtual",
"inbound_outbound": "inbound",
"warehouse_code": "WH-SP-01",
"warehouse_name": "Sao Paulo",
"sku_cph": "SKU-RED-M",
"name": "Widget Pro Black",
"material_sku": "SKU-RED-M",
"volume": 1,
"quantity": 1,
"balance_after": 1,
"timestamp": "2026-06-10T09:00:00-03:00",
"quality": "lost",
"quality_source": "RETURN"
}
],
"meta": {
"row_count": 3,
"from": "2026-06-01T00:00:00-03:00",
"to": "2026-06-30T23:59:59-03:00"
}
}
Reports
Inventory transactions report
Returns every inventory movement of a store in a date range as data rows: the same rows the inventory transactional CSV report carries, with numbers as numbers and timestamps in ISO 8601. Each row is one movement (inbound, sale, return, damaged, lost, transfer) with its signed volume, the product’s balance after the movement, the warehouse, and the Brazilian invoice (NF-e) linked to it when there is one.
- This report must be enabled for your store by Cubbo. Until it is, every call returns 422 with code
REPORT_NOT_ENABLED. fromandtoaccept a date (YYYY-MM-DD) or a timestamp. A bare date covers the whole day in the report’s time zone (America/Sao_Paulo); a timestamp is used as sent. Both must be complete dates (year, month and day).- The range may not exceed 92 days, and
frommust be on or beforeto. - At most 10000 rows are returned per call. Larger results are refused with
RESULT_TOO_LARGErather than truncated, becausebalance_afteris absolute and a narrower range is still correct: split the range and call again. skus[]restricts the rows to the given SKUs of the store.- Rows are in chronological order. The data comes from a replica, so very recent movements can lag.
- A store that does not exist or that your token cannot access returns 404 with code
STORE_NOT_FOUND; the two cases are deliberately indistinguishable.
GET
/
reports
/
inventory-transactions
Inventory transactions report
curl --request GET \
--url https://api.cubbo.com/v1/reports/inventory-transactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cubbo.com/v1/reports/inventory-transactions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cubbo.com/v1/reports/inventory-transactions', 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.cubbo.com/v1/reports/inventory-transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cubbo.com/v1/reports/inventory-transactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cubbo.com/v1/reports/inventory-transactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cubbo.com/v1/reports/inventory-transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"cnpj": "00.000.000/0001-00",
"store_name": "Example Store",
"transaction_type": "inbound",
"invoice_access_key": "00000000000000000000000000000000000000000000",
"invoice_number": "S1 N1001",
"order_number": "5678",
"inventory_type": "physical",
"inbound_outbound": "inbound",
"warehouse_code": "WH-SP-01",
"warehouse_name": "Sao Paulo",
"sku_cph": "SKU-RED-M",
"name": "Widget Pro Black",
"material_sku": "SKU-RED-M",
"volume": 50,
"quantity": 50,
"balance_after": 50,
"timestamp": "2026-06-02T10:15:00-03:00",
"quality": "good",
"quality_source": null
},
{
"cnpj": "00.000.000/0001-00",
"store_name": "Example Store",
"transaction_type": "sale",
"invoice_access_key": "00000000000000000000000000000000000000000001",
"invoice_number": "S1 N1002",
"order_number": "ORD-0001",
"inventory_type": "physical",
"inbound_outbound": "outbound",
"warehouse_code": "WH-SP-01",
"warehouse_name": "Sao Paulo",
"sku_cph": "SKU-RED-M",
"name": "Widget Pro Black",
"material_sku": "SKU-RED-M",
"volume": -2,
"quantity": 2,
"balance_after": 48,
"timestamp": "2026-06-03T16:40:12-03:00",
"quality": "good",
"quality_source": null
},
{
"cnpj": "00.000.000/0001-00",
"store_name": "Example Store",
"transaction_type": "lost",
"invoice_access_key": null,
"invoice_number": null,
"order_number": "ORD-0002",
"inventory_type": "virtual",
"inbound_outbound": "inbound",
"warehouse_code": "WH-SP-01",
"warehouse_name": "Sao Paulo",
"sku_cph": "SKU-RED-M",
"name": "Widget Pro Black",
"material_sku": "SKU-RED-M",
"volume": 1,
"quantity": 1,
"balance_after": 1,
"timestamp": "2026-06-10T09:00:00-03:00",
"quality": "lost",
"quality_source": "RETURN"
}
],
"meta": {
"row_count": 3,
"from": "2026-06-01T00:00:00-03:00",
"to": "2026-06-30T23:59:59-03:00"
}
}