Saldos por endereço
Consulta o saldo por endereço, registra contagens físicas, move unidades entre endereços e lê o histórico desses lançamentos.
Listar saldos por endereço
Mostra quantas unidades de cada produto há em cada endereço. Só aparecem endereços não apagados. Não há paginação.
/api/v1/vendor/erp/wms/stockSellerLista o saldo por endereço
Parâmetros de consulta
warehouse_iduuidlocation_iduuidproduct_iduuidExemplo de requisição: Listar saldos por endereço
curl "$BASE_URL/api/v1/vendor/erp/wms/stock?location_id=252212c1-0771-450f-b2e3-a31edfb30fe3" \
-H "Authorization: Bearer $TOKEN"Resposta: Listar saldos por endereço
{
"stock": [
{
"id": "7b3c2a10-5d1e-4f60-8a9b-0c1d2e3f4a5b",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"location_id": "252212c1-0771-450f-b2e3-a31edfb30fe3",
"location_code": "A-01-03",
"location_type": "bin",
"warehouse_id": "8204b8b8-e7e2-4b96-bba8-5a937fe001c8",
"warehouse_name": "Depósito Central",
"product_id": "94e6917e-8733-4ddc-b446-ed85977117e8",
"product_name": "Camiseta Básica Preta M",
"qty": 12,
"updated_at": "2026-10-11T14:30:00Z"
}
],
"total": 1
}Campos da resposta
stockarrayLinhas de saldo.
iduuidvendor_iduuidlocation_iduuidlocation_codestringlocation_typestringaisleshelfbinwarehouse_iduuidwarehouse_namestringproduct_iduuidproduct_namestringqtyintegerupdated_atdatetimetotalintegerErros: Listar saldos por endereço
| Status | Quando | Corpo |
|---|---|---|
| 500 | Um filtro de id não é um UUID válido (a plataforma devolve 500, não 400). | {"error":"failed to list bin stock","detail":"o valor \"xyz\" não é um uuid válido. Envie o identificador completo, com os 36 caracteres e os hífens. Corrija o campo e reenvie."} |
| 401 | Cabeçalho Authorization ausente, token inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador). | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a um seller, ou o cadastro do seller ainda está em análise (vendor_pending_review). | {"error":"no vendor account associated with this user"} |
Registrar contagem
Informa quantas unidades de um produto existem de fato num endereço (inventário). O saldo do endereço passa a ser exatamente qty. Se a contagem difere do esperado, a diferença também é lançada como ajuste no saldo do depósito do ERP de estoque.
/api/v1/vendor/erp/wms/stock/countSellerRegistra uma contagem física
Corpo da requisição
location_iduuidobrigatórioproduct_iduuidobrigatórioqtyintegerobrigatórioExemplo de requisição: Registrar contagem
curl -X POST "$BASE_URL/api/v1/vendor/erp/wms/stock/count" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"location_id": "252212c1-0771-450f-b2e3-a31edfb30fe3",
"product_id": "94e6917e-8733-4ddc-b446-ed85977117e8",
"qty": 12
}'Resposta: Registrar contagem
{
"id": "7b3c2a10-5d1e-4f60-8a9b-0c1d2e3f4a5b",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"location_id": "252212c1-0771-450f-b2e3-a31edfb30fe3",
"location_code": "A-01-03",
"location_type": "bin",
"warehouse_id": "8204b8b8-e7e2-4b96-bba8-5a937fe001c8",
"warehouse_name": "Depósito Central",
"product_id": "94e6917e-8733-4ddc-b446-ed85977117e8",
"product_name": "Camiseta Básica Preta M",
"qty": 12,
"updated_at": "2026-10-11T14:30:00Z"
}Campos da resposta
iduuidvendor_iduuidlocation_iduuidlocation_codestringlocation_typestringaisleshelfbinwarehouse_iduuidwarehouse_namestringproduct_iduuidproduct_namestringqtyintegerupdated_atdatetimeErros: Registrar contagem
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo não é um JSON válido. | {"error":"invalid request body","detail":"invalid character 'b' looking for beginning of object key string"} |
| 400 | location_id ausente. | {"error":"vendorerp: location_id required"} |
| 400 | product_id ausente. | {"error":"vendorerp: product_id required"} |
| 400 | qty negativa. | {"error":"vendorerp: qty must be >= 0"} |
| 404 | O endereço não existe ou é de outro seller. | {"error":"location not found"} |
| 401 | Cabeçalho Authorization ausente, token inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador). | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a um seller, ou o cadastro do seller ainda está em análise (vendor_pending_review). | {"error":"no vendor account associated with this user"} |
Mover entre endereços
Tira unidades de um endereço e põe em outro, na mesma transação. Se os dois endereços estão em depósitos diferentes, a plataforma também transfere o saldo entre os depósitos no ERP de estoque.
/api/v1/vendor/erp/wms/stock/moveSellerMove unidades entre endereços
Corpo da requisição
product_iduuidobrigatóriofrom_location_iduuidobrigatórioto_location_iduuidobrigatórioqtyintegerobrigatórioExemplo de requisição: Mover entre endereços
curl -X POST "$BASE_URL/api/v1/vendor/erp/wms/stock/move" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"product_id": "94e6917e-8733-4ddc-b446-ed85977117e8",
"from_location_id": "252212c1-0771-450f-b2e3-a31edfb30fe3",
"to_location_id": "4e7b0a0f-1c11-4c3d-b402-6860b2bd6460",
"qty": 3
}'Resposta: Mover entre endereços
{
"id": "7b3c2a10-5d1e-4f60-8a9b-0c1d2e3f4a5b",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"location_id": "4e7b0a0f-1c11-4c3d-b402-6860b2bd6460",
"location_code": "A-01-04",
"location_type": "bin",
"warehouse_id": "8204b8b8-e7e2-4b96-bba8-5a937fe001c8",
"warehouse_name": "Depósito Central",
"product_id": "94e6917e-8733-4ddc-b446-ed85977117e8",
"product_name": "Camiseta Básica Preta M",
"qty": 3,
"updated_at": "2026-10-11T14:30:00Z"
}Campos da resposta
iduuidvendor_iduuidlocation_iduuidlocation_codestringlocation_typestringaisleshelfbinwarehouse_iduuidwarehouse_namestringproduct_iduuidproduct_namestringqtyintegerupdated_atdatetimeErros: Mover entre endereços
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo não é um JSON válido. | {"error":"invalid request body","detail":"invalid character 'b' looking for beginning of object key string"} |
| 400 | Falta um dos endereços. | {"error":"vendorerp: from_location_id and to_location_id required"} |
| 400 | Origem igual ao destino. | {"error":"vendorerp: from and to must differ"} |
| 400 | qty menor ou igual a zero. | {"error":"vendorerp: qty must be positive"} |
| 400 | A origem não tem unidades suficientes do produto. | {"error":"insufficient stock at source location"} |
| 404 | O endereço não existe ou é de outro seller. | {"error":"location not found"} |
| 401 | Cabeçalho Authorization ausente, token inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador). | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a um seller, ou o cadastro do seller ainda está em análise (vendor_pending_review). | {"error":"no vendor account associated with this user"} |
Listar histórico
O histórico guarda cada contagem e cada movimentação entre endereços, do mais novo para o mais antigo.
/api/v1/vendor/erp/wms/movementsSellerLista o histórico de lançamentos de endereço
Parâmetros de consulta
warehouse_iduuidlocation_iduuidproduct_iduuidkindstringcountmove_inmove_outpageintegerpadrão: 1per_pageintegerpadrão: 50Exemplo de requisição: Listar histórico
curl "$BASE_URL/api/v1/vendor/erp/wms/movements?kind=count" \
-H "Authorization: Bearer $TOKEN"Resposta: Listar histórico
{
"movements": [
{
"id": "743a1bc1-8989-4755-b27a-6818c219ab7c",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"location_id": "252212c1-0771-450f-b2e3-a31edfb30fe3",
"location_code": "A-01-03",
"warehouse_id": "8204b8b8-e7e2-4b96-bba8-5a937fe001c8",
"warehouse_name": "Depósito Central",
"product_id": "94e6917e-8733-4ddc-b446-ed85977117e8",
"product_name": "Camiseta Básica Preta M",
"kind": "count",
"delta": -2,
"balance_after": 12,
"expected_qty": 14,
"counted_qty": 12,
"stock_synced": true,
"reason": "Contagem física",
"reference": "",
"created_at": "2026-10-11T14:30:00Z"
}
],
"total": 1
}Campos da resposta
movementsarrayLançamentos da página.
iduuidvendor_iduuidlocation_iduuidlocation_codestringwarehouse_iduuidwarehouse_namestringproduct_iduuidproduct_namestringkindstringcountmove_inmove_outdeltaintegerbalance_afterintegerexpected_qtyintegercount: o saldo que o sistema esperava antes da contagem. Ausente nos demais.counted_qtyintegercount: a quantidade contada. Ausente nos demais.stock_syncedbooleantrue quando o lançamento também mexeu no saldo do depósito do ERP de estoque.reasonstringreferencestringBINMOVE-<origem>-<destino>; vazio nos demais.created_atdatetimetotalintegerErros: Listar histórico
| Status | Quando | Corpo |
|---|---|---|
| 500 | Um filtro de id não é um UUID válido (a plataforma devolve 500, não 400). | {"error":"failed to list bin movements","detail":"o valor \"xyz\" não é um uuid válido. Envie o identificador completo, com os 36 caracteres e os hífens. Corrija o campo e reenvie."} |
| 401 | Cabeçalho Authorization ausente, token inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador). | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a um seller, ou o cadastro do seller ainda está em análise (vendor_pending_review). | {"error":"no vendor account associated with this user"} |