Cadastros
/stores
Listar lojas
As lojas (e centros de distribuição) do cliente da chave. O code é o código de integração cadastrado no BIX: é por ele que os outros recursos identificam a loja.
Chave restrita a algumas lojas recebe só as lojas dela.
Parâmetros de consulta
-
store_codestring · lista -
Código de integração da loja.
Separe por vírgula, até 100 valores. Exemplo:0012 -
updated_sincestring (data-hora) -
Só registros alterados a partir desta data/hora (ISO 8601).
Exemplo:2026-11-10T06:00:00-03:00 -
include_inactiveboolean -
Inclui os registros desativados (
active: false). Use na sincronização incremental para saber o que saiu.Padrão:falseExemplo:false -
pageinteger -
Página, começando em 1.
Padrão:1Exemplo:1 -
page_sizeinteger -
Itens por página. Acima de 100 a chamada é recusada com
invalid_parameter(não é cortada em silêncio).Padrão:50Máximo:100Exemplo:50
Sobre a resposta
kind:store(loja),dc(centro de distribuição) oufactory(fábrica).codevazio: a loja não tem código de integração no BIX, e os filtros porstore_codenão a encontram. Peça ao administrador para cadastrar o mesmo código do ERP.
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X GET "https://demonstracao.appbix.com.br/external-api/v1/stores?store_code=0012&updated_since=2026-11-10T06:00:00-03:00&page_size=100" \
-H "Authorization: Bearer $BIX_API_KEY"
import os
import requests
response = requests.request(
"GET",
"https://demonstracao.appbix.com.br/external-api/v1/stores?store_code=0012&updated_since=2026-11-10T06:00:00-03:00&page_size=100",
headers={"Authorization": f"Bearer {os.environ['BIX_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch(
"https://demonstracao.appbix.com.br/external-api/v1/stores?store_code=0012&updated_since=2026-11-10T06:00:00-03:00&page_size=100",
{ method: "GET", headers: { Authorization: `Bearer ${process.env.BIX_API_KEY}` } }
);
if (!response.ok) throw new Error((await response.json()).code);
console.log(await response.json());
{
"data": [
{
"id": 12,
"code": "0012",
"name": "Loja Centro",
"cnpj": "12345678000190",
"number": "12",
"kind": "store",
"active": true,
"updated_at": "2026-11-10T08:30:00-03:00"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 1,
"total_pages": 1,
"has_next": false
}
}
/products
Listar produtos
O cadastro de produtos do cliente. Cada código de barras é um item: o mesmo internal_code pode aparecer com vários ean (a unidade, a caixa, um EAN alternativo).
Ordem estável por id. Para sincronizar, use updated_since com include_inactive=true.
Parâmetros de consulta
-
internal_codestring · lista -
Código interno do produto.
Separe por vírgula, até 100 valores. Exemplo:1001 -
eanstring · lista -
Código de barras.
Separe por vírgula, até 100 valores. Exemplo:7891234567890 -
updated_sincestring (data-hora) -
Só registros alterados a partir desta data/hora (ISO 8601).
Exemplo:2026-11-10T06:00:00-03:00 -
include_inactiveboolean -
Inclui os registros desativados (
active: false). Use na sincronização incremental para saber o que saiu.Padrão:falseExemplo:false -
pageinteger -
Página, começando em 1.
Padrão:1Exemplo:1 -
page_sizeinteger -
Itens por página. Acima de 100 a chamada é recusada com
invalid_parameter(não é cortada em silêncio).Padrão:50Máximo:100Exemplo:50
Sobre a resposta
category: os códigos da estrutura mercadológica (verGET /categories), nível a nível.supplierebuyersãonullquando o produto não tem fornecedor ou comprador.
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X GET "https://demonstracao.appbix.com.br/external-api/v1/products?internal_code=1001&ean=7891234567890&page_size=100" \
-H "Authorization: Bearer $BIX_API_KEY"
import os
import requests
response = requests.request(
"GET",
"https://demonstracao.appbix.com.br/external-api/v1/products?internal_code=1001&ean=7891234567890&page_size=100",
headers={"Authorization": f"Bearer {os.environ['BIX_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch(
"https://demonstracao.appbix.com.br/external-api/v1/products?internal_code=1001&ean=7891234567890&page_size=100",
{ method: "GET", headers: { Authorization: `Bearer ${process.env.BIX_API_KEY}` } }
);
if (!response.ok) throw new Error((await response.json()).code);
console.log(await response.json());
{
"data": [
{
"internal_code": "1001",
"ean": "7891234567890",
"description": "ARROZ TIPO 1 5KG",
"unit": "UN",
"multiplier": 1,
"price": 27.9,
"category": {
"n0": "",
"n1": "01",
"n2": "0105",
"n3": "",
"n4": ""
},
"reference_code": "",
"color_code": "",
"color_description": "",
"size": "",
"sales_curve": "A",
"supplier": {
"code": "12345678000190",
"name": "Fornecedor Exemplo"
},
"buyer": {
"code": "07",
"name": "Comprador Mercearia"
},
"id": 345,
"active": true,
"updated_at": "2026-11-10T08:30:00-03:00"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 1,
"total_pages": 1,
"has_next": false
}
}
/products
Enviar produtos (criar ou atualizar)
Cria ou atualiza produtos pela chave (internal_code, ean). Produto que já existe recebe só os campos enviados: o que não vier no item não é alterado. Para tirar um produto de linha, envie active: false.
Envie até 500 itens em {"items": [...]}. Use o cabeçalho Idempotency-Key para poder repetir a chamada (timeout, queda de rede) sem gravar duas vezes.
Corpo da requisição
Objeto JSON com items: uma lista de 1 a 500 itens. Cada item tem:
-
internal_codestring obrigatório -
Código interno no ERP.
Exemplo:1001 -
eanstring obrigatório -
Código de barras. Com o
internal_code, identifica o item.Exemplo:7891234567890 -
descriptionstring -
Descrição.
Exemplo:ARROZ TIPO 1 5KG -
unitstring -
Unidade de medida.
Exemplo:UN -
multiplierinteger -
Quantas unidades este código de barras representa (caixa com 12 =
12).Exemplo:1 -
pricenumber -
Preço de cadastro. O preço por loja vai em
POST /stock-prices.Exemplo:27.9 -
categoryobject -
Códigos da estrutura mercadológica, nível a nível (os mesmos de
POST /categories).-
n0string -
Código do nível N0.
-
n1string -
Código do nível N1.
-
n2string -
Código do nível N2.
-
n3string -
Código do nível N3.
-
n4string -
Código do nível N4.
-
-
reference_codestring -
Código de referência (informativo).
-
color_codestring -
Código da cor (informativo).
-
color_descriptionstring -
Descrição da cor (informativo).
-
sizestring -
Tamanho (informativo).
-
sales_curvestring -
Curva de venda da rede (A, B, C...).
Exemplo:A -
supplierobject -
Fornecedor. Criado se não existir.
-
codestring obrigatório -
Código no ERP.
-
namestring -
Nome. Só preenche o cadastro que está sem nome.
-
-
buyerobject -
Comprador. Criado se não existir.
-
codestring obrigatório -
Código no ERP.
-
namestring -
Nome. Só preenche o cadastro que está sem nome.
-
-
activeboolean -
falsetira o produto de linha;truereativa.Exemplo:true
Sobre a resposta
A chamada responde
200sempre que o lote foi processado, mesmo com itens recusados: confira ostatusde cada item emresults(created,updated,skippedouerror).resultsvem na ordem deitems;indexé a posição do item no lote, a partir de 0.Item com erro não impede os outros: cada um é gravado ou recusado sozinho.
Item recusado traz
codeedetail(por exemplo,invalid_parametercom o campo e o motivo).
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 400 | invalid_parameter | Parâmetro com valor inválido (o detail diz qual). |
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 409 | idempotency_key_reused | O Idempotency-Key já foi usado, nas últimas 24 horas, numa chamada com outro corpo. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X POST "https://demonstracao.appbix.com.br/external-api/v1/products" \
-H "Authorization: Bearer $BIX_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"items": [{"internal_code": "1001", "ean": "7891234567890", "description": "ARROZ TIPO 1 5KG", "unit": "UN", "multiplier": 1, "price": 27.9, "category": {"n0": "", "n1": "01", "n2": "0105", "n3": "", "n4": ""}, "sales_curve": "A", "supplier": {"code": "12345678000190", "name": "Fornecedor Exemplo"}}, {"internal_code": "1001", "ean": "17891234567897", "description": "ARROZ TIPO 1 5KG CX 6", "unit": "CX", "multiplier": 6}]}'
import os
import uuid
import requests
payload = {
"items": [
{
"internal_code": "1001",
"ean": "7891234567890",
"description": "ARROZ TIPO 1 5KG",
"unit": "UN",
"multiplier": 1,
"price": 27.9,
"category": {
"n0": "",
"n1": "01",
"n2": "0105",
"n3": "",
"n4": ""
},
"sales_curve": "A",
"supplier": {
"code": "12345678000190",
"name": "Fornecedor Exemplo"
}
},
{
"internal_code": "1001",
"ean": "17891234567897",
"description": "ARROZ TIPO 1 5KG CX 6",
"unit": "CX",
"multiplier": 6
}
]
}
response = requests.post(
"https://demonstracao.appbix.com.br/external-api/v1/products",
json=payload,
headers={
"Authorization": f"Bearer {os.environ['BIX_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
timeout=60,
)
response.raise_for_status()
for item in response.json()["results"]:
if item["status"] == "error":
print(item["index"], item["code"], item["detail"])
const payload = {
"items": [
{
"internal_code": "1001",
"ean": "7891234567890",
"description": "ARROZ TIPO 1 5KG",
"unit": "UN",
"multiplier": 1,
"price": 27.9,
"category": {
"n0": "",
"n1": "01",
"n2": "0105",
"n3": "",
"n4": ""
},
"sales_curve": "A",
"supplier": {
"code": "12345678000190",
"name": "Fornecedor Exemplo"
}
},
{
"internal_code": "1001",
"ean": "17891234567897",
"description": "ARROZ TIPO 1 5KG CX 6",
"unit": "CX",
"multiplier": 6
}
]
};
const response = await fetch("https://demonstracao.appbix.com.br/external-api/v1/products", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BIX_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify(payload),
});
const body = await response.json();
body.results.filter((r) => r.status === "error").forEach((r) => console.log(r));
{
"items": [
{
"internal_code": "1001",
"ean": "7891234567890",
"description": "ARROZ TIPO 1 5KG",
"unit": "UN",
"multiplier": 1,
"price": 27.9,
"category": {
"n0": "",
"n1": "01",
"n2": "0105",
"n3": "",
"n4": ""
},
"sales_curve": "A",
"supplier": {
"code": "12345678000190",
"name": "Fornecedor Exemplo"
}
},
{
"internal_code": "1001",
"ean": "17891234567897",
"description": "ARROZ TIPO 1 5KG CX 6",
"unit": "CX",
"multiplier": 6
}
]
}
{
"summary": {
"total": 2,
"created": 1,
"updated": 1,
"skipped": 0,
"errors": 0
},
"results": [
{
"index": 0,
"status": "updated",
"id": 345,
"code": null,
"detail": null
},
{
"index": 1,
"status": "created",
"id": 346,
"code": null,
"detail": null
}
]
}
/categories
Listar a estrutura mercadológica
Os ramos da estrutura mercadológica do cliente, em até cinco níveis (n0 a n4, por exemplo Empresa › Departamento › Seção › Grupo › Subgrupo). Cada item é um ramo: a combinação dos códigos dos cinco níveis.
Parâmetros de consulta
-
updated_sincestring (data-hora) -
Só registros alterados a partir desta data/hora (ISO 8601).
Exemplo:2026-11-10T06:00:00-03:00 -
include_inactiveboolean -
Inclui os registros desativados (
active: false). Use na sincronização incremental para saber o que saiu.Padrão:falseExemplo:false -
pageinteger -
Página, começando em 1.
Padrão:1Exemplo:1 -
page_sizeinteger -
Itens por página. Acima de 100 a chamada é recusada com
invalid_parameter(não é cortada em silêncio).Padrão:50Máximo:100Exemplo:50
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X GET "https://demonstracao.appbix.com.br/external-api/v1/categories?updated_since=2026-11-10T06:00:00-03:00&include_inactive=false&page_size=100" \
-H "Authorization: Bearer $BIX_API_KEY"
import os
import requests
response = requests.request(
"GET",
"https://demonstracao.appbix.com.br/external-api/v1/categories?updated_since=2026-11-10T06:00:00-03:00&include_inactive=false&page_size=100",
headers={"Authorization": f"Bearer {os.environ['BIX_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch(
"https://demonstracao.appbix.com.br/external-api/v1/categories?updated_since=2026-11-10T06:00:00-03:00&include_inactive=false&page_size=100",
{ method: "GET", headers: { Authorization: `Bearer ${process.env.BIX_API_KEY}` } }
);
if (!response.ok) throw new Error((await response.json()).code);
console.log(await response.json());
{
"data": [
{
"n0": {
"code": "",
"name": ""
},
"n1": {
"code": "01",
"name": "MERCEARIA"
},
"n2": {
"code": "0105",
"name": "ARROZ E FEIJÃO"
},
"n3": {
"code": "",
"name": ""
},
"n4": {
"code": "",
"name": ""
},
"id": 88,
"active": true,
"updated_at": "2026-11-10T08:30:00-03:00"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 1,
"total_pages": 1,
"has_next": false
}
}
/categories
Enviar a estrutura mercadológica
Cria ou atualiza ramos da estrutura. A chave é a combinação dos códigos dos cinco níveis: o mesmo ramo enviado de novo só atualiza os nomes. Nível que não existe no seu ERP pode ser omitido.
Envie até 500 itens em {"items": [...]}. Use o cabeçalho Idempotency-Key para poder repetir a chamada (timeout, queda de rede) sem gravar duas vezes.
Corpo da requisição
Objeto JSON com items: uma lista de 1 a 500 itens. Cada item tem:
-
n0object -
Nível N0 do ramo.
-
codestring obrigatório -
Código do nível no ERP.
-
namestring -
Nome do nível.
-
-
n1object -
Nível N1 do ramo.
-
codestring obrigatório -
Código do nível no ERP.
-
namestring -
Nome do nível.
-
-
n2object -
Nível N2 do ramo.
-
codestring obrigatório -
Código do nível no ERP.
-
namestring -
Nome do nível.
-
-
n3object -
Nível N3 do ramo.
-
codestring obrigatório -
Código do nível no ERP.
-
namestring -
Nome do nível.
-
-
n4object -
Nível N4 do ramo.
-
codestring obrigatório -
Código do nível no ERP.
-
namestring -
Nome do nível.
-
Sobre a resposta
A chamada responde
200sempre que o lote foi processado, mesmo com itens recusados: confira ostatusde cada item emresults(created,updated,skippedouerror).resultsvem na ordem deitems;indexé a posição do item no lote, a partir de 0.Item com erro não impede os outros: cada um é gravado ou recusado sozinho.
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 400 | invalid_parameter | Parâmetro com valor inválido (o detail diz qual). |
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 409 | idempotency_key_reused | O Idempotency-Key já foi usado, nas últimas 24 horas, numa chamada com outro corpo. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X POST "https://demonstracao.appbix.com.br/external-api/v1/categories" \
-H "Authorization: Bearer $BIX_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"items": [{"n1": {"code": "01", "name": "MERCEARIA"}, "n2": {"code": "0105", "name": "ARROZ E FEIJÃO"}}, {"n1": {"code": "01", "name": "MERCEARIA"}, "n2": {"code": "0106", "name": "MASSAS"}}]}'
import os
import uuid
import requests
payload = {
"items": [
{
"n1": {
"code": "01",
"name": "MERCEARIA"
},
"n2": {
"code": "0105",
"name": "ARROZ E FEIJÃO"
}
},
{
"n1": {
"code": "01",
"name": "MERCEARIA"
},
"n2": {
"code": "0106",
"name": "MASSAS"
}
}
]
}
response = requests.post(
"https://demonstracao.appbix.com.br/external-api/v1/categories",
json=payload,
headers={
"Authorization": f"Bearer {os.environ['BIX_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
timeout=60,
)
response.raise_for_status()
for item in response.json()["results"]:
if item["status"] == "error":
print(item["index"], item["code"], item["detail"])
const payload = {
"items": [
{
"n1": {
"code": "01",
"name": "MERCEARIA"
},
"n2": {
"code": "0105",
"name": "ARROZ E FEIJÃO"
}
},
{
"n1": {
"code": "01",
"name": "MERCEARIA"
},
"n2": {
"code": "0106",
"name": "MASSAS"
}
}
]
};
const response = await fetch("https://demonstracao.appbix.com.br/external-api/v1/categories", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BIX_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify(payload),
});
const body = await response.json();
body.results.filter((r) => r.status === "error").forEach((r) => console.log(r));
{
"items": [
{
"n1": {
"code": "01",
"name": "MERCEARIA"
},
"n2": {
"code": "0105",
"name": "ARROZ E FEIJÃO"
}
},
{
"n1": {
"code": "01",
"name": "MERCEARIA"
},
"n2": {
"code": "0106",
"name": "MASSAS"
}
}
]
}
{
"summary": {
"total": 2,
"created": 1,
"updated": 1,
"skipped": 0,
"errors": 0
},
"results": [
{
"index": 0,
"status": "updated",
"id": 88,
"code": null,
"detail": null
},
{
"index": 1,
"status": "created",
"id": 89,
"code": null,
"detail": null
}
]
}
/stock-prices
Listar preço e saldo por loja
O preço e o saldo de cada produto em cada loja, como o ERP informou (por depósito, quando o ERP separa). É o saldo do ERP, não o do WMS do BIX: para esse, use GET /wms/stock-balances.
Ordem estável por id.
Parâmetros de consulta
-
store_codestring · lista -
Código de integração da loja.
Separe por vírgula, até 100 valores. Exemplo:0012 -
store_idinteger · lista -
Id da loja no BIX.
Separe por vírgula, até 100 valores. Exemplo:12 -
internal_codestring · lista -
Código interno do produto.
Separe por vírgula, até 100 valores. Exemplo:1001 -
eanstring · lista -
Código de barras.
Separe por vírgula, até 100 valores. Exemplo:7891234567890 -
warehousestring -
Depósito, como o ERP envia.
Exemplo:01 -
pageinteger -
Página, começando em 1.
Padrão:1Exemplo:1 -
page_sizeinteger -
Itens por página. Acima de 100 a chamada é recusada com
invalid_parameter(não é cortada em silêncio).Padrão:50Máximo:100Exemplo:50
Sobre a resposta
price_offerénullquando não há oferta. Custo nunca informado vem0.updated_até informativo: a carga em lote do BIX não o atualiza em toda linha.Sem filtro por data de alteração: a carga em lote do BIX não marca a hora em toda linha, e um
updated_sinceaqui perderia mudanças. Leia por loja.
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X GET "https://demonstracao.appbix.com.br/external-api/v1/stock-prices?store_code=0012&store_id=12&page_size=100" \
-H "Authorization: Bearer $BIX_API_KEY"
import os
import requests
response = requests.request(
"GET",
"https://demonstracao.appbix.com.br/external-api/v1/stock-prices?store_code=0012&store_id=12&page_size=100",
headers={"Authorization": f"Bearer {os.environ['BIX_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch(
"https://demonstracao.appbix.com.br/external-api/v1/stock-prices?store_code=0012&store_id=12&page_size=100",
{ method: "GET", headers: { Authorization: `Bearer ${process.env.BIX_API_KEY}` } }
);
if (!response.ok) throw new Error((await response.json()).code);
console.log(await response.json());
{
"data": [
{
"id": 5012,
"store": {
"id": 12,
"code": "0012",
"name": "Loja Centro"
},
"product": {
"id": 345,
"internal_code": "1001",
"ean": "7891234567890",
"description": "ARROZ TIPO 1 5KG"
},
"warehouse": "01",
"balance": 48.0,
"price": 27.9,
"price_regular": 29.9,
"price_offer": 27.9,
"curve": "A",
"costs": {
"average_accounting": 18.4,
"average_no_tax": 16.9,
"average_with_tax": 19.2,
"last_purchase_gross": 20.5,
"last_purchase_net": 17.8
},
"updated_at": "2026-11-10T08:30:00-03:00"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 1,
"total_pages": 1,
"has_next": false
}
}
/stock-prices
Enviar preço e saldo por loja
Cria ou atualiza o preço e o saldo de produtos por loja, pela chave (loja, produto, depósito). É parcial: campo ausente não é alterado, então uma carga de preço e outra de saldo não apagam uma à outra.
A loja vem por store_code (código de integração) ou store_id; o produto, por ean ou internal_code. Um internal_code com vários EANs atualiza todos eles.
update_only: true só atualiza o que já existe: sem registro na loja, o item volta skipped. Use em carga que não traz preço nem saldo (só a curva, por exemplo), para não criar linha zerada.
Envie até 500 itens em {"items": [...]}. Use o cabeçalho Idempotency-Key para poder repetir a chamada (timeout, queda de rede) sem gravar duas vezes.
Corpo da requisição
Objeto JSON com items: uma lista de 1 a 500 itens. Cada item tem:
-
store_codestring -
Código de integração da loja. Ou
store_id.Exemplo:0012 -
store_idinteger -
Id da loja no BIX. Ou
store_code. -
eanstring -
Código de barras. Ou
internal_code. -
internal_codestring -
Código interno. Ou
ean.Exemplo:1001 -
warehousestring -
Depósito no ERP. Vazio quando o ERP não separa.
Exemplo:01 -
balancenumber -
Saldo.
Exemplo:48 -
pricenumber -
Preço de venda praticado.
Exemplo:27.9 -
price_regularnumber -
Preço regular (sem oferta). Tem prioridade na rebaixa.
Exemplo:29.9 -
price_offernumber -
Preço de oferta.
nullencerra a oferta.Exemplo:27.9 -
curvestring -
Curva do produto na loja (até 50 caracteres). Vazio limpa.
Exemplo:A -
costsobject -
Custos (opcionais).
-
average_accountingnumber -
Custo médio contábil.
-
average_no_taxnumber -
Custo médio sem impostos.
-
average_with_taxnumber -
Custo médio com impostos.
-
last_purchase_grossnumber -
Custo da última compra, bruto.
-
last_purchase_netnumber -
Custo da última compra, líquido.
-
-
update_onlyboolean -
Só atualiza registro existente.
Exemplo:false
Sobre a resposta
A chamada responde
200sempre que o lote foi processado, mesmo com itens recusados: confira ostatusde cada item emresults(created,updated,skippedouerror).resultsvem na ordem deitems;indexé a posição do item no lote, a partir de 0.Item com erro não impede os outros: cada um é gravado ou recusado sozinho.
store_not_allowed: a chave está restrita a algumas lojas e o item é de outra.
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 400 | invalid_parameter | Parâmetro com valor inválido (o detail diz qual). |
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 403 | store_not_allowed | A chave está restrita a algumas lojas e uma das pedidas não é delas. |
| 409 | idempotency_key_reused | O Idempotency-Key já foi usado, nas últimas 24 horas, numa chamada com outro corpo. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X POST "https://demonstracao.appbix.com.br/external-api/v1/stock-prices" \
-H "Authorization: Bearer $BIX_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"items": [{"store_code": "0012", "internal_code": "1001", "warehouse": "01", "balance": 48, "price": 27.9, "price_regular": 29.9}, {"store_code": "0012", "internal_code": "1001", "warehouse": "01", "curve": "A", "update_only": true}]}'
import os
import uuid
import requests
payload = {
"items": [
{
"store_code": "0012",
"internal_code": "1001",
"warehouse": "01",
"balance": 48,
"price": 27.9,
"price_regular": 29.9
},
{
"store_code": "0012",
"internal_code": "1001",
"warehouse": "01",
"curve": "A",
"update_only": true
}
]
}
response = requests.post(
"https://demonstracao.appbix.com.br/external-api/v1/stock-prices",
json=payload,
headers={
"Authorization": f"Bearer {os.environ['BIX_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
timeout=60,
)
response.raise_for_status()
for item in response.json()["results"]:
if item["status"] == "error":
print(item["index"], item["code"], item["detail"])
const payload = {
"items": [
{
"store_code": "0012",
"internal_code": "1001",
"warehouse": "01",
"balance": 48,
"price": 27.9,
"price_regular": 29.9
},
{
"store_code": "0012",
"internal_code": "1001",
"warehouse": "01",
"curve": "A",
"update_only": true
}
]
};
const response = await fetch("https://demonstracao.appbix.com.br/external-api/v1/stock-prices", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BIX_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify(payload),
});
const body = await response.json();
body.results.filter((r) => r.status === "error").forEach((r) => console.log(r));
{
"items": [
{
"store_code": "0012",
"internal_code": "1001",
"warehouse": "01",
"balance": 48,
"price": 27.9,
"price_regular": 29.9
},
{
"store_code": "0012",
"internal_code": "1001",
"warehouse": "01",
"curve": "A",
"update_only": true
}
]
}
{
"summary": {
"total": 2,
"created": 1,
"updated": 1,
"skipped": 0,
"errors": 0
},
"results": [
{
"index": 0,
"status": "created",
"code": null,
"detail": null
},
{
"index": 1,
"status": "updated",
"code": null,
"detail": null
}
]
}
/suppliers
Listar fornecedores
Os fornecedores do cliente. O code é o código do fornecedor no ERP (em geral o CNPJ) e é o mesmo que o produto usa em supplier.code.
Parâmetros de consulta
-
codestring · lista -
Código no ERP.
Separe por vírgula, até 100 valores. Exemplo:12345678000190 -
updated_sincestring (data-hora) -
Só registros alterados a partir desta data/hora (ISO 8601).
Exemplo:2026-11-10T06:00:00-03:00 -
include_inactiveboolean -
Inclui os registros desativados (
active: false). Use na sincronização incremental para saber o que saiu.Padrão:falseExemplo:false -
pageinteger -
Página, começando em 1.
Padrão:1Exemplo:1 -
page_sizeinteger -
Itens por página. Acima de 100 a chamada é recusada com
invalid_parameter(não é cortada em silêncio).Padrão:50Máximo:100Exemplo:50
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X GET "https://demonstracao.appbix.com.br/external-api/v1/suppliers?code=12345678000190&updated_since=2026-11-10T06:00:00-03:00&page_size=100" \
-H "Authorization: Bearer $BIX_API_KEY"
import os
import requests
response = requests.request(
"GET",
"https://demonstracao.appbix.com.br/external-api/v1/suppliers?code=12345678000190&updated_since=2026-11-10T06:00:00-03:00&page_size=100",
headers={"Authorization": f"Bearer {os.environ['BIX_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch(
"https://demonstracao.appbix.com.br/external-api/v1/suppliers?code=12345678000190&updated_since=2026-11-10T06:00:00-03:00&page_size=100",
{ method: "GET", headers: { Authorization: `Bearer ${process.env.BIX_API_KEY}` } }
);
if (!response.ok) throw new Error((await response.json()).code);
console.log(await response.json());
{
"data": [
{
"id": 31,
"code": "12345678000190",
"legal_name": "FORNECEDOR EXEMPLO LTDA",
"trade_name": "Exemplo",
"active": true,
"updated_at": "2026-11-10T08:30:00-03:00"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 1,
"total_pages": 1,
"has_next": false
}
}
/suppliers
Enviar fornecedores
Cria ou atualiza fornecedores pelo code. Aqui o ERP é a fonte: o nome enviado substitui o que está no BIX. Campo ausente não é alterado.
Envie até 500 itens em {"items": [...]}. Use o cabeçalho Idempotency-Key para poder repetir a chamada (timeout, queda de rede) sem gravar duas vezes.
Corpo da requisição
Objeto JSON com items: uma lista de 1 a 500 itens. Cada item tem:
-
codestring obrigatório -
Código do fornecedor no ERP (em geral o CNPJ).
Exemplo:12345678000190 -
legal_namestring -
Razão social.
Exemplo:FORNECEDOR EXEMPLO LTDA -
trade_namestring -
Nome fantasia.
Exemplo:Exemplo -
activeboolean -
falsedesativa.Exemplo:true
Sobre a resposta
A chamada responde
200sempre que o lote foi processado, mesmo com itens recusados: confira ostatusde cada item emresults(created,updated,skippedouerror).resultsvem na ordem deitems;indexé a posição do item no lote, a partir de 0.Item com erro não impede os outros: cada um é gravado ou recusado sozinho.
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 400 | invalid_parameter | Parâmetro com valor inválido (o detail diz qual). |
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 409 | idempotency_key_reused | O Idempotency-Key já foi usado, nas últimas 24 horas, numa chamada com outro corpo. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X POST "https://demonstracao.appbix.com.br/external-api/v1/suppliers" \
-H "Authorization: Bearer $BIX_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"items": [{"code": "12345678000190", "legal_name": "FORNECEDOR EXEMPLO LTDA", "trade_name": "Exemplo"}]}'
import os
import uuid
import requests
payload = {
"items": [
{
"code": "12345678000190",
"legal_name": "FORNECEDOR EXEMPLO LTDA",
"trade_name": "Exemplo"
}
]
}
response = requests.post(
"https://demonstracao.appbix.com.br/external-api/v1/suppliers",
json=payload,
headers={
"Authorization": f"Bearer {os.environ['BIX_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
timeout=60,
)
response.raise_for_status()
for item in response.json()["results"]:
if item["status"] == "error":
print(item["index"], item["code"], item["detail"])
const payload = {
"items": [
{
"code": "12345678000190",
"legal_name": "FORNECEDOR EXEMPLO LTDA",
"trade_name": "Exemplo"
}
]
};
const response = await fetch("https://demonstracao.appbix.com.br/external-api/v1/suppliers", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BIX_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify(payload),
});
const body = await response.json();
body.results.filter((r) => r.status === "error").forEach((r) => console.log(r));
{
"items": [
{
"code": "12345678000190",
"legal_name": "FORNECEDOR EXEMPLO LTDA",
"trade_name": "Exemplo"
}
]
}
{
"summary": {
"total": 1,
"created": 1,
"updated": 0,
"skipped": 0,
"errors": 0
},
"results": [
{
"index": 0,
"status": "created",
"id": 31,
"code": null,
"detail": null
}
]
}
/buyers
Listar compradores
Os compradores do cliente. O code é o mesmo que o produto usa em buyer.code.
Parâmetros de consulta
-
codestring · lista -
Código do comprador no ERP.
Separe por vírgula, até 100 valores. Exemplo:07 -
updated_sincestring (data-hora) -
Só registros alterados a partir desta data/hora (ISO 8601).
Exemplo:2026-11-10T06:00:00-03:00 -
include_inactiveboolean -
Inclui os registros desativados (
active: false). Use na sincronização incremental para saber o que saiu.Padrão:falseExemplo:false -
pageinteger -
Página, começando em 1.
Padrão:1Exemplo:1 -
page_sizeinteger -
Itens por página. Acima de 100 a chamada é recusada com
invalid_parameter(não é cortada em silêncio).Padrão:50Máximo:100Exemplo:50
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X GET "https://demonstracao.appbix.com.br/external-api/v1/buyers?code=07&updated_since=2026-11-10T06:00:00-03:00&page_size=100" \
-H "Authorization: Bearer $BIX_API_KEY"
import os
import requests
response = requests.request(
"GET",
"https://demonstracao.appbix.com.br/external-api/v1/buyers?code=07&updated_since=2026-11-10T06:00:00-03:00&page_size=100",
headers={"Authorization": f"Bearer {os.environ['BIX_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch(
"https://demonstracao.appbix.com.br/external-api/v1/buyers?code=07&updated_since=2026-11-10T06:00:00-03:00&page_size=100",
{ method: "GET", headers: { Authorization: `Bearer ${process.env.BIX_API_KEY}` } }
);
if (!response.ok) throw new Error((await response.json()).code);
console.log(await response.json());
{
"data": [
{
"id": 7,
"code": "07",
"name": "COMPRADOR MERCEARIA",
"active": true,
"updated_at": "2026-11-10T08:30:00-03:00"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 1,
"total_pages": 1,
"has_next": false
}
}
/buyers
Enviar compradores
Cria ou atualiza compradores pelo code. O nome enviado substitui o que está no BIX.
Envie até 500 itens em {"items": [...]}. Use o cabeçalho Idempotency-Key para poder repetir a chamada (timeout, queda de rede) sem gravar duas vezes.
Corpo da requisição
Objeto JSON com items: uma lista de 1 a 500 itens. Cada item tem:
-
codestring obrigatório -
Código do comprador no ERP.
Exemplo:07 -
namestring -
Nome.
Exemplo:COMPRADOR MERCEARIA -
activeboolean -
falsedesativa.Exemplo:true
Sobre a resposta
A chamada responde
200sempre que o lote foi processado, mesmo com itens recusados: confira ostatusde cada item emresults(created,updated,skippedouerror).resultsvem na ordem deitems;indexé a posição do item no lote, a partir de 0.Item com erro não impede os outros: cada um é gravado ou recusado sozinho.
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 400 | invalid_parameter | Parâmetro com valor inválido (o detail diz qual). |
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 409 | idempotency_key_reused | O Idempotency-Key já foi usado, nas últimas 24 horas, numa chamada com outro corpo. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X POST "https://demonstracao.appbix.com.br/external-api/v1/buyers" \
-H "Authorization: Bearer $BIX_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"items": [{"code": "07", "name": "COMPRADOR MERCEARIA"}]}'
import os
import uuid
import requests
payload = {
"items": [
{
"code": "07",
"name": "COMPRADOR MERCEARIA"
}
]
}
response = requests.post(
"https://demonstracao.appbix.com.br/external-api/v1/buyers",
json=payload,
headers={
"Authorization": f"Bearer {os.environ['BIX_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
timeout=60,
)
response.raise_for_status()
for item in response.json()["results"]:
if item["status"] == "error":
print(item["index"], item["code"], item["detail"])
const payload = {
"items": [
{
"code": "07",
"name": "COMPRADOR MERCEARIA"
}
]
};
const response = await fetch("https://demonstracao.appbix.com.br/external-api/v1/buyers", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BIX_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify(payload),
});
const body = await response.json();
body.results.filter((r) => r.status === "error").forEach((r) => console.log(r));
{
"items": [
{
"code": "07",
"name": "COMPRADOR MERCEARIA"
}
]
}
{
"summary": {
"total": 1,
"created": 1,
"updated": 0,
"skipped": 0,
"errors": 0
},
"results": [
{
"index": 0,
"status": "created",
"id": 31,
"code": null,
"detail": null
}
]
}
/store-groups
Listar grupos de lojas
Os grupos de lojas do cliente (regional, bandeira, cluster), usados para agendar tarefas e filtrar relatórios por um conjunto de lojas.
Parâmetros de consulta
-
updated_sincestring (data-hora) -
Só registros alterados a partir desta data/hora (ISO 8601).
Exemplo:2026-11-10T06:00:00-03:00 -
include_inactiveboolean -
Inclui os registros desativados (
active: false). Use na sincronização incremental para saber o que saiu.Padrão:falseExemplo:false -
pageinteger -
Página, começando em 1.
Padrão:1Exemplo:1 -
page_sizeinteger -
Itens por página. Acima de 100 a chamada é recusada com
invalid_parameter(não é cortada em silêncio).Padrão:50Máximo:100Exemplo:50
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X GET "https://demonstracao.appbix.com.br/external-api/v1/store-groups?updated_since=2026-11-10T06:00:00-03:00&include_inactive=false&page_size=100" \
-H "Authorization: Bearer $BIX_API_KEY"
import os
import requests
response = requests.request(
"GET",
"https://demonstracao.appbix.com.br/external-api/v1/store-groups?updated_since=2026-11-10T06:00:00-03:00&include_inactive=false&page_size=100",
headers={"Authorization": f"Bearer {os.environ['BIX_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch(
"https://demonstracao.appbix.com.br/external-api/v1/store-groups?updated_since=2026-11-10T06:00:00-03:00&include_inactive=false&page_size=100",
{ method: "GET", headers: { Authorization: `Bearer ${process.env.BIX_API_KEY}` } }
);
if (!response.ok) throw new Error((await response.json()).code);
console.log(await response.json());
{
"data": [
{
"id": 4,
"name": "REGIONAL SUL",
"description": "Lojas do RS e SC",
"stores": [
{
"id": 12,
"code": "0012",
"name": "Loja Centro"
}
],
"active": true,
"updated_at": "2026-11-10T08:30:00-03:00"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 1,
"total_pages": 1,
"has_next": false
}
}
/store-groups
Enviar grupos de lojas
Cria ou atualiza grupos pelo nome (sem diferenciar maiúsculas). stores, quando enviado, substitui as lojas do grupo: mande a lista completa.
Envie até 500 itens em {"items": [...]}. Use o cabeçalho Idempotency-Key para poder repetir a chamada (timeout, queda de rede) sem gravar duas vezes.
Corpo da requisição
Objeto JSON com items: uma lista de 1 a 500 itens. Cada item tem:
-
namestring obrigatório -
Nome do grupo (é a chave).
Exemplo:REGIONAL SUL -
descriptionstring -
Descrição.
Exemplo:Lojas do RS e SC -
storesarray -
Códigos de integração das lojas do grupo (lista completa).
Exemplo:['0012', '0020'] -
activeboolean -
falsedesativa.Exemplo:true
Sobre a resposta
A chamada responde
200sempre que o lote foi processado, mesmo com itens recusados: confira ostatusde cada item emresults(created,updated,skippedouerror).resultsvem na ordem deitems;indexé a posição do item no lote, a partir de 0.Item com erro não impede os outros: cada um é gravado ou recusado sozinho.
Erros possíveis
| HTTP | code | Quando |
|---|---|---|
| 400 | invalid_parameter | Parâmetro com valor inválido (o detail diz qual). |
| 401 | api_key_expired | A chave passou da data de expiração. |
| 401 | api_key_revoked | A chave foi revogada na Configuração Global › API. |
| 401 | invalid_api_key | A chave não existe neste ambiente ou está errada. |
| 401 | missing_api_key | A chamada veio sem o cabeçalho "Authorization: Bearer <chave>". |
| 403 | insufficient_scope | A chave não tem o acesso que este endpoint exige. |
| 409 | idempotency_key_reused | O Idempotency-Key já foi usado, nas últimas 24 horas, numa chamada com outro corpo. |
| 429 | rate_limited | Limite de chamadas por minuto da chave atingido. Respeite o Retry-After. |
| 500 | internal_error | Erro interno. Tente de novo; se persistir, fale com o suporte. |
curl -X POST "https://demonstracao.appbix.com.br/external-api/v1/store-groups" \
-H "Authorization: Bearer $BIX_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"items": [{"name": "REGIONAL SUL", "description": "Lojas do RS e SC", "stores": ["0012", "0020"]}]}'
import os
import uuid
import requests
payload = {
"items": [
{
"name": "REGIONAL SUL",
"description": "Lojas do RS e SC",
"stores": [
"0012",
"0020"
]
}
]
}
response = requests.post(
"https://demonstracao.appbix.com.br/external-api/v1/store-groups",
json=payload,
headers={
"Authorization": f"Bearer {os.environ['BIX_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
timeout=60,
)
response.raise_for_status()
for item in response.json()["results"]:
if item["status"] == "error":
print(item["index"], item["code"], item["detail"])
const payload = {
"items": [
{
"name": "REGIONAL SUL",
"description": "Lojas do RS e SC",
"stores": [
"0012",
"0020"
]
}
]
};
const response = await fetch("https://demonstracao.appbix.com.br/external-api/v1/store-groups", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BIX_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify(payload),
});
const body = await response.json();
body.results.filter((r) => r.status === "error").forEach((r) => console.log(r));
{
"items": [
{
"name": "REGIONAL SUL",
"description": "Lojas do RS e SC",
"stores": [
"0012",
"0020"
]
}
]
}
{
"summary": {
"total": 1,
"created": 1,
"updated": 0,
"skipped": 0,
"errors": 0
},
"results": [
{
"index": 0,
"status": "created",
"id": 31,
"code": null,
"detail": null
}
]
}