Abas
Lista, cria, consulta, edita e apaga as abas de dashboard do seller.
Uma aba agrupa cards. Estas cinco rotas cuidam do ciclo de vida da aba em si; os cards têm as próprias rotas.
Listar abas
Devolve as abas que o seller pode ver: as próprias e as abas do administrador publicadas para sellers (somente leitura, panel: A). Na primeira chamada de um seller sem abas, cria e devolve a aba de fábrica.
/api/v1/vendor/dashboardsSellerListar abas
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Exemplo de requisição
curl -X GET "$BASE_URL/api/v1/vendor/dashboards" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"dashboards": [
{
"id": "931b3fc7-e703-4cac-bcbc-5c79690f02a8",
"slug": "fabrica",
"name": "Dashboard",
"panel": "V",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"visibility": "P",
"is_system": true,
"is_default": true,
"position": 0,
"icon": "atividade",
"color": "#0044FF",
"default_period": {
"mode": "preset",
"preset": "last30"
},
"created_at": "2026-10-11T21:04:17.245533Z",
"updated_at": "2026-10-11T21:04:17.245533Z",
"version": 1791752657246,
"is_owner": true,
"permission": "W",
"kind": "normal"
}
]
}Campos da resposta
dashboardsobject[]As abas, ordenadas por position e depois por nome.
iduuidslugstringfabrica.namestringpanelstringVAV para abas do painel do seller, A para uma aba do administrador publicada para sellers.vendor_iduuidowner_user_iduuidvisibilitystringPSGP privada (padrão), S compartilhada, G global da loja.is_systembooleantrue na aba de fábrica: não pode ser renomeada nem apagada.is_defaultbooleantrue na aba que abre primeiro.positionintegericonstringcolorstring#0044FF.default_periodobjectcreated_atstringupdated_atstringversionintegerupdated_at). Envie-a em Salvar layout para detectar edição concorrente.is_ownerbooleantrue se quem chama é dono da aba.permissionstringWRW pode editar, R somente leitura (aba publicada por outra pessoa).kindstringnormalvi_insightsnormal ou vi_insights (a aba de insights).Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente, inválido, expirado ou revogado. | invalid or expired token |
| 403 | O token não é de um usuário seller, ou a loja ainda está em análise de cadastro. | {"error":"vendor_pending_review"} |
Criar aba
Cria uma aba vazia, privada e dona do seller. Ela nasce sem cards: use Cards ou Layout e modelos em seguida.
/api/v1/vendor/dashboardsSellerCriar aba
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Corpo da requisição
namestringobrigatórioiconstringcolorstringvisibilitystringPSGP privada, S compartilhada, G global. Outro valor causa erro 500.positioninteger0 coloca a aba na frente; omitido, não muda.default_periodobjectquery.period (veja Formato do card).Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/dashboards" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Vendas da semana", "icon": "atividade", "color": "#1baf7a"}'Resposta
{
"id": "5d3c2f6a-1b0e-4b6a-9d55-0c7a4c1f2e11",
"slug": "d8c4a4a0-0f6b-4a11-9a52-3f0f3c0c9a77",
"name": "Vendas da semana",
"panel": "V",
"owner_user_id": "0fd409fb-9869-4c50-a18c-a810a19abeed",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"visibility": "P",
"is_system": false,
"is_default": false,
"position": 0,
"icon": "atividade",
"color": "#1baf7a",
"default_period": {
"mode": "preset",
"preset": "last30"
},
"created_at": "2026-10-11T21:30:00Z",
"updated_at": "2026-10-11T21:30:00Z",
"version": 1791754200000,
"is_owner": false
}Campos da resposta
(campos / fields)objectis_owner vem sempre false e permission não vem: releia a aba para obter os valores reais.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo que não é JSON. | {"error":"invalid request body"} |
| 422 | name ausente ou vazio. | {"error":"name is required"} |
| 500 | visibility fora de P, S, G, ou falha ao gravar. | {"error":"failed to create dashboard","detail":"..."} |
| 401 | Token ausente, inválido, expirado ou revogado. | invalid or expired token |
| 403 | O token não é de um usuário seller, ou a loja ainda está em análise de cadastro. | {"error":"vendor_pending_review"} |
Consultar aba com seus cards
Devolve a aba e as definições dos cards (spec e layout). Não executa nada: para os números, use Executar dados.
/api/v1/vendor/dashboards/{id}SellerConsultar aba com seus cards
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl -X GET "$BASE_URL/api/v1/vendor/dashboards/931b3fc7-e703-4cac-bcbc-5c79690f02a8" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"dashboard": {
"id": "931b3fc7-e703-4cac-bcbc-5c79690f02a8",
"slug": "fabrica",
"name": "Dashboard",
"panel": "V",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"visibility": "P",
"is_system": true,
"is_default": true,
"position": 0,
"icon": "atividade",
"color": "#0044FF",
"default_period": {
"mode": "preset",
"preset": "last30"
},
"created_at": "2026-10-11T21:04:17.245533Z",
"updated_at": "2026-10-11T21:04:17.245533Z",
"version": 1791752657246,
"is_owner": true,
"permission": "W",
"kind": "normal"
},
"cards": [
{
"id": "94c6b3ff-de9c-4552-8a12-e199e8427f57",
"dashboard_id": "931b3fc7-e703-4cac-bcbc-5c79690f02a8",
"spec": {
"spec_version": 1,
"kind": "query",
"title": "Receita do Mês",
"viz": {
"type": "kpi",
"snippet_id": "seller-kpi-revenue-month",
"icon": "cifrao",
"accent": "#0044FF",
"number_format": {
"style": "currency_cents"
}
},
"query": {
"entity": "orders",
"period": {
"mode": "preset",
"preset": "thisMonth"
},
"metrics": [
{
"id": "receita",
"kind": "catalog",
"ref": "orders.revenue"
}
]
}
},
"spec_version": 1,
"kind": "Q",
"title": "Receita do Mês",
"grid_row": 0,
"grid_col": 0,
"width": 1,
"height": 1,
"order": 0,
"status": "A",
"source": "T",
"template_slug": "fab-v-kpi-revenue-month",
"created_at": "2026-10-11T21:04:20.327443Z",
"updated_at": "2026-10-11T21:04:20.327443Z"
}
]
}Campos da resposta
dashboardobjectkind).cardsobject[]Os cards da aba.
iduuiddashboard_iduuidspecobjectspec_versioninteger1.kindstringQSCVTQ consulta, S SQL, C componente, V serviço, T texto.titlestringspec.title).grid_rowintegergrid_colintegerwidthintegerheightintegerorderintegerstatusstringADXA ativo, D rascunho, X degradado (card SQL desligado após falhas repetidas). Só cards ativos são executados.sourcestringMITM manual, I criado por insight, T criado de um modelo.template_slugstringsource é T.created_byuuidcreated_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 404 | A aba não existe, é de outro seller ou você não pode vê-la. A API responde 404 nos três casos para não revelar que ela existe. | {"error":"dashboard not found"} |
| 401 | Token ausente, inválido, expirado ou revogado. | invalid or expired token |
| 403 | O token não é de um usuário seller, ou a loja ainda está em análise de cadastro. | {"error":"vendor_pending_review"} |
Editar aba
Altera nome, ícone, cor, visibilidade, período padrão ou posição. É uma edição parcial: o que você não enviar (ou enviar vazio) continua como está.
/api/v1/vendor/dashboards/{id}SellerEditar aba
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
namestringiconstringcolorstringvisibilitystringPSGP privada, S compartilhada, G global. Outro valor causa erro 500.positioninteger0 coloca a aba na frente; omitido, não muda.default_periodobjectquery.period (veja Formato do card).Exemplo de requisição
curl -X PUT "$BASE_URL/api/v1/vendor/dashboards/931b3fc7-e703-4cac-bcbc-5c79690f02a8" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"position": 0, "color": "#eb6834"}'Resposta
{
"id": "931b3fc7-e703-4cac-bcbc-5c79690f02a8",
"slug": "fabrica",
"name": "Dashboard",
"panel": "V",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"visibility": "P",
"is_system": true,
"is_default": true,
"position": 0,
"icon": "atividade",
"color": "#eb6834",
"default_period": {
"mode": "preset",
"preset": "last30"
},
"created_at": "2026-10-11T21:04:17.245533Z",
"updated_at": "2026-10-11T21:04:17.245533Z",
"version": 1791752657246,
"is_owner": true,
"permission": "W",
"kind": "normal"
}Campos da resposta
(campos / fields)objectErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 404 | A aba não existe, é de outro seller ou você não pode vê-la. A API responde 404 nos três casos para não revelar que ela existe. | {"error":"dashboard not found"} |
| 400 | Corpo que não é JSON. | {"error":"invalid request body"} |
| 409 | Tentativa de renomear a aba de fábrica. | {"error":"system_dashboard_immutable","detail":"dashboards: is_system dashboard cannot be renamed or deleted"} |
| 500 | Falha ao gravar. | {"error":"failed to update dashboard"} |
| 401 | Token ausente, inválido, expirado ou revogado. | invalid or expired token |
| 403 | O token não é de um usuário seller, ou a loja ainda está em análise de cadastro. | {"error":"vendor_pending_review"} |
Apagar aba
Apaga a aba e seus cards da visão do seller (remoção lógica). A aba de fábrica não pode ser apagada.
/api/v1/vendor/dashboards/{id}SellerApagar aba
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/vendor/dashboards/5d3c2f6a-1b0e-4b6a-9d55-0c7a4c1f2e11" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"message": "dashboard deleted"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 404 | A aba não existe, é de outro seller ou você não pode vê-la. A API responde 404 nos três casos para não revelar que ela existe. | {"error":"dashboard not found"} |
| 409 | A aba é a de fábrica. | {"error":"system_dashboard_immutable"} |
| 500 | Falha ao apagar. | {"error":"failed to delete dashboard"} |
| 401 | Token ausente, inválido, expirado ou revogado. | invalid or expired token |
| 403 | O token não é de um usuário seller, ou a loja ainda está em análise de cadastro. | {"error":"vendor_pending_review"} |