O que é

Produtos é o catálogo do tenant: itens à venda com preço, textos, fotos, categoria, marca, unidade e os modelos de impressora com que cada item é compatível.

Na prática: você lista e consulta produtos para sincronizar catálogo e alimentar integrações, ou cadastra o catálogo de um fornecedor inteiro — modelos de impressora, produtos com textos, fotos e preço em dólar, e a compatibilidade de cada um.

O que dá para fazer hoje

  • Listar o catálogo, com filtros por status, visibilidade, tipo, categoria e busca.
  • Consultar um produto com categoria, marca, unidade, textos e fotos.
  • Criar um produto de qualquer tipo, de forma idempotente, já com textos, fotos, preço em dólar e modelos compatíveis.
  • Atualizar (edição parcial) e arquivar um produto.
  • Criar e manter categorias, marcas e modelos de impressora.

Importante

  • A escrita reusa o mesmo serviço do painel: as regras por tipo (obrigatórios, Kit, montagem técnica, unicidade) valem igual.
  • Leitura expõe só o catálogo público; custo, preço em dólar e comissão nunca saem.
  • Qualquer gravação desliga a sincronização com o Mercado Livre, como no painel.
  • Leitura exige products:read; criar/editar/arquivar exige products:write e a permissão correspondente em Gestão de Produtos.

Disponibilidade na API

Endpoints de Produtos e Catálogo

Gerencie produtos e consulte os recursos auxiliares usados pelo catálogo. Os exemplos abaixo são gerados pelo contrato OpenAPI oficial.

GET /api/v1/products

Lista os produtos

Exige o escopo `products:read` e a permissão de ver em Gestão de Produtos. Retorna o catálogo com os filtros documentados.

Parâmetros

NomeTipoObrigatórioDescrição
statusquerybooleanNãoAtivo (true) ou inativo (false).
visibility_storequerybooleanNãoVisível na loja (true) ou não (false).
typequerystringNãoTipo do produto (produto-fisico, produto-digital, servico, kit, chave-codigo, assinatura, etc.).
category_idqueryintegerNãoFiltra por categoria.
brand_idqueryintegerNãoFiltra por marca.
referencequerystringNãoReferência (SKU) exata, para conferir se o item já foi cadastrado.
printer_model_idqueryintegerNãoSó os produtos compatíveis com este modelo de impressora.
searchquerystringNãoBusca por nome ou referência.
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/products" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1203,
            "name": "Camiseta Básica",
            "reference": "CAM-001",
            "type": "produto-fisico",
            "status": true,
            "visibility_store": true,
            "google_shopping_enabled": true,
            "google_shopping_disabled_reason": null,
            "availability": "disponivel",
            "condition_type": "novo",
            "price": 79.900000000000005684341886080801486968994140625,
            "price_resale": 59.89999999999999857891452847979962825775146484375,
            "category": {
                "id": 4,
                "name": "Vestuário"
            },
            "brand": {
                "id": 2,
                "name": "MiCore Wear"
            },
            "unit": {
                "id": 1,
                "name": "Unidade",
                "abbreviation": "UN"
            },
            "created_at": "2026-10-19T09:00:00-03:00",
            "updated_at": "2026-10-19T09:00:00-03:00"
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de produtos401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/products

Cria um produto

Exige `products:write` e a permissão de criar em Gestão de Produtos. Reusa o serviço canônico do painel e vale para todos os tipos. Campos por tipo — `compositions` (kit), `related_key_product_id` (chave-codigo), `subscription_id` (assinatura). Aceita também os textos da aba de informações (`description`, `description_short` etc.), as fotos (`images`, itens já enviados à Biblioteca de Mídia por `POST /media`) e o preço em dólar (`usd_price*`). Qualquer gravação desliga a sincronização com o Mercado Livre, como no painel.

Parâmetros

NomeTipoObrigatórioDescrição
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/products" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"type":"produto-fisico","name":"Camiseta Básica","reference":"CAM-001","price":"79,90","warranty_days":90,"validity_days":0,"category_id":4,"unit_id":1}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1203,
        "name": "Camiseta Básica",
        "reference": "CAM-001",
        "type": "produto-fisico",
        "status": true,
        "visibility_store": true,
        "google_shopping_enabled": true,
        "google_shopping_disabled_reason": null,
        "availability": "disponivel",
        "condition_type": "novo",
        "price": 79.900000000000005684341886080801486968994140625,
        "price_resale": 59.89999999999999857891452847979962825775146484375,
        "category": {
            "id": 4,
            "name": "Vestuário"
        },
        "brand": {
            "id": 2,
            "name": "MiCore Wear"
        },
        "unit": {
            "id": 1,
            "name": "Unidade",
            "abbreviation": "UN"
        },
        "created_at": "2026-10-19T09:00:00-03:00",
        "updated_at": "2026-10-19T09:00:00-03:00"
    }
}

Respostas possíveis

201 Produto criado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/products/{product}

Exibe um produto

Exige o escopo `products:read`. Traz categoria, marca e unidade.

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/products/{product}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1203,
        "name": "Camiseta Básica",
        "reference": "CAM-001",
        "type": "produto-fisico",
        "status": true,
        "visibility_store": true,
        "google_shopping_enabled": true,
        "google_shopping_disabled_reason": null,
        "availability": "disponivel",
        "condition_type": "novo",
        "price": 79.900000000000005684341886080801486968994140625,
        "price_resale": 59.89999999999999857891452847979962825775146484375,
        "category": {
            "id": 4,
            "name": "Vestuário"
        },
        "brand": {
            "id": 2,
            "name": "MiCore Wear"
        },
        "unit": {
            "id": 1,
            "name": "Unidade",
            "abbreviation": "UN"
        },
        "created_at": "2026-10-19T09:00:00-03:00",
        "updated_at": "2026-10-19T09:00:00-03:00"
    }
}

Respostas possíveis

200 Produto encontrado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PATCH /api/v1/products/{product}

Atualiza um produto

Exige `products:write` e a permissão de editar em Gestão de Produtos. Edição parcial - todo campo é opcional e o omitido fica como está (tipo, nome, chave relacionada, compatibilidade, fotos, preços por quantidade, atributos, textos, fiscal, frete, embalagem e visibilidade). `images` enviado é a lista final de fotos - as que já estavam e continuam na lista mantêm o vínculo, as que saem são removidas como no painel. Aplica as mesmas regras do painel.

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/products/{product}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '[]'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1203,
        "name": "Camiseta Básica",
        "reference": "CAM-001",
        "type": "produto-fisico",
        "status": true,
        "visibility_store": true,
        "google_shopping_enabled": true,
        "google_shopping_disabled_reason": null,
        "availability": "disponivel",
        "condition_type": "novo",
        "price": 79.900000000000005684341886080801486968994140625,
        "price_resale": 59.89999999999999857891452847979962825775146484375,
        "category": {
            "id": 4,
            "name": "Vestuário"
        },
        "brand": {
            "id": 2,
            "name": "MiCore Wear"
        },
        "unit": {
            "id": 1,
            "name": "Unidade",
            "abbreviation": "UN"
        },
        "created_at": "2026-10-19T09:00:00-03:00",
        "updated_at": "2026-10-19T09:00:00-03:00"
    }
}

Respostas possíveis

200 Produto atualizado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
DELETE /api/v1/products/{product}

Arquiva um produto

Exige `products:write` e a permissão de desabilitar em Gestão de Produtos. Desativa sem apagar; para reativar, POST /products/{product}/activate. Idempotente.

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/products/{product}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1203,
        "name": "Camiseta Básica",
        "reference": "CAM-001",
        "type": "produto-fisico",
        "status": true,
        "visibility_store": true,
        "google_shopping_enabled": true,
        "google_shopping_disabled_reason": null,
        "availability": "disponivel",
        "condition_type": "novo",
        "price": 79.900000000000005684341886080801486968994140625,
        "price_resale": 59.89999999999999857891452847979962825775146484375,
        "category": {
            "id": 4,
            "name": "Vestuário"
        },
        "brand": {
            "id": 2,
            "name": "MiCore Wear"
        },
        "unit": {
            "id": 1,
            "name": "Unidade",
            "abbreviation": "UN"
        },
        "created_at": "2026-10-19T09:00:00-03:00",
        "updated_at": "2026-10-19T09:00:00-03:00"
    }
}

Respostas possíveis

200 Produto arquivado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/products/{product}/activate

Reativa um produto arquivado

Exige `products:write` e a permissão de desabilitar em Gestão de Produtos (a mesma do arquivar). O contrário do DELETE; idempotente.

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/products/{product}/activate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1203,
        "name": "Camiseta Básica",
        "reference": "CAM-001",
        "type": "produto-fisico",
        "status": true,
        "visibility_store": true,
        "google_shopping_enabled": true,
        "google_shopping_disabled_reason": null,
        "availability": "disponivel",
        "condition_type": "novo",
        "price": 79.900000000000005684341886080801486968994140625,
        "price_resale": 59.89999999999999857891452847979962825775146484375,
        "category": {
            "id": 4,
            "name": "Vestuário"
        },
        "brand": {
            "id": 2,
            "name": "MiCore Wear"
        },
        "unit": {
            "id": 1,
            "name": "Unidade",
            "abbreviation": "UN"
        },
        "created_at": "2026-10-19T09:00:00-03:00",
        "updated_at": "2026-10-19T09:00:00-03:00"
    }
}

Respostas possíveis

200 Produto ativo401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/products/{product}/digital-files

Lista os arquivos digitais do produto

Exige `products:read`. Drivers, softwares e manuais da aba Arquivos, na ordem do produto. O link de download não sai na API: o arquivo é entregue ao cliente pela loja.

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—
statusquerybooleanNãotrue só ativos, false só desativados; sem o filtro, todos.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/products/{product}/digital-files" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "product_id": 1,
            "title": "string",
            "description": null,
            "version": null,
            "file_name": "string",
            "extension": "string",
            "size": 1,
            "operational_system": {
                "id": 1,
                "name": "string"
            },
            "ink": null,
            "paper": null,
            "configuration": null,
            "order": 1,
            "featured": true,
            "status": true,
            "date_release": "2026-10-20",
            "downloads": 1,
            "created_at": "2026-10-20T10:00:00-03:00",
            "updated_at": "2026-10-20T10:00:00-03:00"
        }
    ]
}

Respostas possíveis

200 Arquivos do produto401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/products/{product}/digital-files

Envia um arquivo digital para o produto

Exige `products:write` e a permissão de editar em Gestão de Produtos. multipart/form-data com o arquivo em `file` (até 50 MB) e os dados da aba Arquivos. Vai para a pasta do produto; um arquivo com o mesmo nome substitui o anterior na pasta. Tipo sem aba de arquivos (embalagem) recusa. Idempotente (envie um Idempotency-Key).

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/products/{product}/digital-files" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001"

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1,
        "product_id": 1,
        "title": "string",
        "description": null,
        "version": null,
        "file_name": "string",
        "extension": "string",
        "size": 1,
        "operational_system": {
            "id": 1,
            "name": "string"
        },
        "ink": null,
        "paper": null,
        "configuration": null,
        "order": 1,
        "featured": true,
        "status": true,
        "date_release": "2026-10-20",
        "downloads": 1,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Arquivo enviado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PATCH /api/v1/product-digital-files/{digitalFile}

Edita os dados de um arquivo digital

Exige `products:write` e a permissão de editar em Gestão de Produtos. Edição parcial dos dados; o arquivo em si não muda (para trocar, envie um novo e desative o antigo).

Parâmetros

NomeTipoObrigatórioDescrição
digitalFilepathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
titlestringNãoAté 255 caracteres.
operational_system_idintegerNão—
descriptionstring | nullNãoAté 255 caracteres.
versionstring | nullNãoAté 255 caracteres.
inkstring | nullNãoAté 255 caracteres.
paperstring | nullNãoAté 255 caracteres.
configurationstring | nullNãoAté 255 caracteres.
orderinteger | nullNão—
featuredboolean | nullNão—
statusboolean | nullNão—
date_releasestring | null (date)Não—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/product-digital-files/{digitalFile}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","operational_system_id":1,"description":null,"version":null,"ink":null,"paper":null,"configuration":null,"order":1,"featured":true,"status":true,"date_release":"2026-10-20"}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "product_id": 1,
        "title": "string",
        "description": null,
        "version": null,
        "file_name": "string",
        "extension": "string",
        "size": 1,
        "operational_system": {
            "id": 1,
            "name": "string"
        },
        "ink": null,
        "paper": null,
        "configuration": null,
        "order": 1,
        "featured": true,
        "status": true,
        "date_release": "2026-10-20",
        "downloads": 1,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Arquivo atualizado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
DELETE /api/v1/product-digital-files/{digitalFile}

Desativa um arquivo digital

Exige `products:write` e a permissão de editar em Gestão de Produtos. Desativa sem apagar do armazenamento; idempotente.

Parâmetros

NomeTipoObrigatórioDescrição
digitalFilepathintegerSim—

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/product-digital-files/{digitalFile}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "product_id": 1,
        "title": "string",
        "description": null,
        "version": null,
        "file_name": "string",
        "extension": "string",
        "size": 1,
        "operational_system": {
            "id": 1,
            "name": "string"
        },
        "ink": null,
        "paper": null,
        "configuration": null,
        "order": 1,
        "featured": true,
        "status": true,
        "date_release": "2026-10-20",
        "downloads": 1,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Arquivo desativado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/operational-systems

Lista os sistemas operacionais

Exige `products:read`. Use o `id` em `operational_system_id` dos arquivos digitais.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/operational-systems" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "name": "string"
        }
    ]
}

Respostas possíveis

200 Sistemas operacionais ativos401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/products/{product}/key-codes

Resumo dos códigos de um produto chave

Exige `key-codes:read` e a permissão de ver em Gestão de Chaves/Códigos. Só as contagens: os códigos nunca saem na API.

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/products/{product}/key-codes" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "product_id": 1,
        "available": 1,
        "used": 1,
        "total": 1
    }
}

Respostas possíveis

200 Resumo dos códigos401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/products/{product}/key-codes

Carrega códigos num produto chave

Exige `key-codes:write` e a permissão de criar em Gestão de Chaves/Códigos. Só produto ativo do tipo chave-codigo. Linhas vazias são ignoradas; um código repetido na lista ou já cadastrado em qualquer produto recusa a carga inteira (a mensagem lista os repetidos). Idempotente (envie um Idempotency-Key).

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Corpo da requisição

CampoTipoObrigatórioDescrição
codesarray<string>Sim—
type_keyintegerSim1 Classe S (a própria chave reativa), 2 Classe C (guardar o código de recuperação), 3 uso único. Valores: 1, 2, 3.
descriptionstring | nullNãoObservação gravada em todos os códigos da carga. Até 255 caracteres.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/products/{product}/key-codes" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"codes":["XXXX-1111-AAAA","XXXX-2222-BBBB"],"type_key":3,"description":"Lote de novembro"}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": []
}

Respostas possíveis

201 Códigos carregados401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/products/{product}/stock

Saldo do produto por loja

Exige `stock:read`, o módulo Estoque e a permissão de ver em Gestão de Estoque. Estoque principal de cada loja do usuário responsável. `physical` (o que está na prateleira) é o número a enviar em `expected_quantity` na correção. Só produto físico, matéria-prima ou embalagem.

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/products/{product}/stock" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "product_id": 1,
        "unit": null,
        "serial_control": true,
        "stores": [
            {
                "store": {
                    "id": 1,
                    "name": "string"
                },
                "stock": {
                    "id": 1,
                    "name": "string"
                },
                "quantity": 1,
                "committed": 1,
                "physical": 1,
                "minimum": 1,
                "maximum": 1,
                "addresses": [
                    {
                        "code": "string",
                        "quantity": 1
                    }
                ],
                "blocking_order_ids": [
                    1
                ]
            }
        ]
    }
}

Respostas possíveis

200 Saldo por loja401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/products/{product}/stock-corrections

Corrige o saldo do produto numa loja

Exige `stock:write`, o módulo Estoque e a permissão Gerenciar estoque em Gestão de Estoque. Mesma regra da tela de correção: motivo com pelo menos 50 caracteres, `expected_quantity` igual ao físico atual (se o saldo mudou desde a leitura, responde 409 e nada é gravado, o que também evita aplicar a mesma correção duas vezes), bloqueio enquanto houver pedido segurando o produto na loja e seriais das unidades que saem quando o produto controla serial. Os administradores recebem o aviso, como no painel.

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
store_idintegerSim—
expected_quantitynumberSimO physical lido no GET /products/{product}/stock.
counted_quantitynumberSimQuanto há na prateleira depois da contagem.
reasonstringSimAté 1000 caracteres.
serialsarray<string>NãoSeriais das unidades que saem, quando o produto controla serial.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/products/{product}/stock-corrections" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"store_id":2,"expected_quantity":10,"counted_quantity":12,"reason":"Contagem do inventário de novembro encontrou duas unidades a mais na prateleira A-01."}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "product_id": 1,
        "store_id": 1,
        "previous_physical": 1,
        "physical": 1,
        "difference": 1,
        "quantity": 1,
        "committed": 1
    }
}

Respostas possíveis

200 Saldo corrigido401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PUT /api/v1/products/{product}/stock-limits

Define o estoque mínimo e máximo numa loja

Exige `stock:write`, o módulo Estoque e a permissão Gerenciar estoque em Gestão de Estoque. Máximo zero desliga a reposição; ligado, não pode ficar abaixo do mínimo. Respeita a precisão da unidade.

Parâmetros

NomeTipoObrigatórioDescrição
productpathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
store_idintegerSim—
minimumnumberSim—
maximumnumberSimZero desliga a reposição.

Exemplo de requisição

cURL
curl -X PUT "$MICORE_BASE_URL/products/{product}/stock-limits" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"store_id":1,"minimum":1,"maximum":1}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "product_id": 1,
        "store_id": 1,
        "minimum": 1,
        "maximum": 1
    }
}

Respostas possíveis

200 Limites gravados401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/product-categories

Lista as categorias de produto

Exige o escopo `product-categories:read`. Use para descobrir o `category_id` ao criar ou editar um produto.

Parâmetros

NomeTipoObrigatórioDescrição
statusquerybooleanNão—
parent_idqueryintegerNãoFiltra pelas categorias filhas de um pai.
searchquerystringNãoBusca por nome.
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/product-categories" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 4,
            "name": "Vestuário",
            "parent_id": null,
            "url": "vestuario",
            "status": true
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de categorias401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/product-categories

Cria uma categoria de produto

Exige `product-categories:write` e a permissão de criar em Categorias. Criação idempotente (envie um Idempotency-Key).

Parâmetros

NomeTipoObrigatórioDescrição
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringSimAté 255 caracteres.
statusboolean | nullNão—
parent_idinteger | nullNãoCategoria pai (precisa existir).
urlstring | nullNãoAté 255 caracteres.
descriptionstring | nullNão—
meta_titlestring | nullNãoAté 255 caracteres.
meta_descriptionstring | nullNão—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/product-categories" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"Vestuário","status":true,"parent_id":null,"url":"vestuario"}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 4,
        "name": "Vestuário",
        "parent_id": null,
        "url": "vestuario",
        "status": true
    }
}

Respostas possíveis

201 Categoria criada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/product-categories/{productCategory}

Exibe uma categoria de produto

Exige o escopo `product-categories:read`.

Parâmetros

NomeTipoObrigatórioDescrição
productCategorypathintegerSim—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/product-categories/{productCategory}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 4,
        "name": "Vestuário",
        "parent_id": null,
        "url": "vestuario",
        "status": true
    }
}

Respostas possíveis

200 Categoria encontrada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PATCH /api/v1/product-categories/{productCategory}

Atualiza uma categoria de produto

Exige `product-categories:write` e a permissão de editar em Categorias.

Parâmetros

NomeTipoObrigatórioDescrição
productCategorypathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
statusboolean | nullNão—
parent_idinteger | nullNãoCategoria pai (precisa existir).
urlstring | nullNãoAté 255 caracteres.
descriptionstring | nullNão—
meta_titlestring | nullNãoAté 255 caracteres.
meta_descriptionstring | nullNão—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/product-categories/{productCategory}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"Vestuário","status":true,"parent_id":null,"url":"vestuario"}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 4,
        "name": "Vestuário",
        "parent_id": null,
        "url": "vestuario",
        "status": true
    }
}

Respostas possíveis

200 Categoria atualizada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
DELETE /api/v1/product-categories/{productCategory}

Desativa uma categoria de produto

Exige `product-categories:write` e a permissão de desabilitar em Categorias. Desativa sem apagar; reativar é pelo painel. Idempotente.

Parâmetros

NomeTipoObrigatórioDescrição
productCategorypathintegerSim—

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/product-categories/{productCategory}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 4,
        "name": "Vestuário",
        "parent_id": null,
        "url": "vestuario",
        "status": true
    }
}

Respostas possíveis

200 Categoria desativada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/brands

Lista as marcas

Exige o escopo `brands:read`. Use para descobrir o `brand_id` ao criar ou editar um produto.

Parâmetros

NomeTipoObrigatórioDescrição
statusquerybooleanNão—
searchquerystringNãoBusca por nome.
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/brands" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 2,
            "name": "MiCore Wear",
            "status": true
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de marcas401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/brands

Cria uma marca

Exige `brands:write` e a permissão de criar em Marcas e Submarcas. Criação idempotente (envie um Idempotency-Key).

Parâmetros

NomeTipoObrigatórioDescrição
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringSimAté 255 caracteres.
statusboolean | nullNão—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/brands" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"MiCore Wear","status":true}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 2,
        "name": "MiCore Wear",
        "status": true
    }
}

Respostas possíveis

201 Marca criada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/brands/{brand}

Exibe uma marca

Exige o escopo `brands:read`.

Parâmetros

NomeTipoObrigatórioDescrição
brandpathintegerSim—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/brands/{brand}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 2,
        "name": "MiCore Wear",
        "status": true
    }
}

Respostas possíveis

200 Marca encontrada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PATCH /api/v1/brands/{brand}

Atualiza uma marca

Exige `brands:write` e a permissão de editar em Marcas e Submarcas.

Parâmetros

NomeTipoObrigatórioDescrição
brandpathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
statusboolean | nullNão—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/brands/{brand}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"MiCore Wear","status":true}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 2,
        "name": "MiCore Wear",
        "status": true
    }
}

Respostas possíveis

200 Marca atualizada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
DELETE /api/v1/brands/{brand}

Desativa uma marca

Exige `brands:write` e a permissão de desabilitar em Marcas e Submarcas. Desativa sem apagar; reativar é pelo painel. Idempotente.

Parâmetros

NomeTipoObrigatórioDescrição
brandpathintegerSim—

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/brands/{brand}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 2,
        "name": "MiCore Wear",
        "status": true
    }
}

Respostas possíveis

200 Marca desativada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/sub-brands

Lista as submarcas

Exige o escopo `brands:read`. Submarcas são as linhas de uma marca (ex.: EcoTank, WorkForce) e aparecem no `sub_brand` dos modelos de impressora.

Parâmetros

NomeTipoObrigatórioDescrição
statusquerybooleanNão—
brand_idqueryintegerNãoSó as submarcas ligadas a esta marca.
searchquerystringNãoBusca por nome.
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/sub-brands" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 12,
            "name": "EcoTank",
            "status": true,
            "brands": [
                {
                    "id": 3,
                    "name": "Epson"
                }
            ]
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de submarcas401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/sub-brands

Cria uma submarca

Exige `brands:write` e a permissão de criar em Marcas e Submarcas. Nome único. Idempotente (envie um Idempotency-Key).

Parâmetros

NomeTipoObrigatórioDescrição
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringSimAté 255 caracteres.
statusboolean | nullNão—
brand_idsarray<integer>Não—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/sub-brands" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"EcoTank","brand_ids":[3]}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 12,
        "name": "EcoTank",
        "status": true,
        "brands": [
            {
                "id": 3,
                "name": "Epson"
            }
        ]
    }
}

Respostas possíveis

201 Submarca criada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/sub-brands/{subBrand}

Exibe uma submarca

Exige o escopo `brands:read`.

Parâmetros

NomeTipoObrigatórioDescrição
subBrandpathintegerSim—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/sub-brands/{subBrand}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 12,
        "name": "EcoTank",
        "status": true,
        "brands": [
            {
                "id": 3,
                "name": "Epson"
            }
        ]
    }
}

Respostas possíveis

200 Submarca encontrada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PATCH /api/v1/sub-brands/{subBrand}

Atualiza uma submarca

Exige `brands:write` e a permissão de editar em Marcas e Submarcas. Edição parcial; `brand_ids` enviado substitui a lista de marcas.

Parâmetros

NomeTipoObrigatórioDescrição
subBrandpathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
statusboolean | nullNão—
brand_idsarray<integer>Não—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/sub-brands/{subBrand}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","status":true,"brand_ids":[1]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 12,
        "name": "EcoTank",
        "status": true,
        "brands": [
            {
                "id": 3,
                "name": "Epson"
            }
        ]
    }
}

Respostas possíveis

200 Submarca atualizada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
DELETE /api/v1/sub-brands/{subBrand}

Desativa uma submarca

Exige `brands:write` e a permissão de desabilitar em Marcas e Submarcas. Desativa sem apagar; idempotente.

Parâmetros

NomeTipoObrigatórioDescrição
subBrandpathintegerSim—

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/sub-brands/{subBrand}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 12,
        "name": "EcoTank",
        "status": true,
        "brands": [
            {
                "id": 3,
                "name": "Epson"
            }
        ]
    }
}

Respostas possíveis

200 Submarca desativada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/product-attributes

Lista os atributos da ficha técnica

Exige o escopo `product-attributes:read`. Cada atributo vem com as opções (nos de escolha). Use o `id` do atributo e, em radio e checkbox, o `id` da opção em `attributes[]` do produto.

Parâmetros

NomeTipoObrigatórioDescrição
statusquerybooleanNão—
typequerystringNão—
searchquerystringNãoBusca por nome.
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/product-attributes" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 9,
            "name": "Volume",
            "description": null,
            "type": "number_unit",
            "allowed_units": [
                "ml",
                "l"
            ],
            "default_unit": "ml",
            "status": true,
            "options": []
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de atributos401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/product-attributes

Cria um atributo da ficha técnica

Exige `product-attributes:write` e a permissão de criar em Atributos Personalizados. Nome único. No tipo number_unit, `allowed_units` lista as unidades (a primeira é a padrão). Idempotente (envie um Idempotency-Key).

Parâmetros

NomeTipoObrigatórioDescrição
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringSimAté 255 caracteres.
descriptionstring | nullNãoAté 255 caracteres.
typestringSimValores: text, textarea, radio, checkbox, number_unit.
allowed_unitsarray<string>NãoSó no number_unit; a primeira é a padrão.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/product-attributes" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"Volume","type":"number_unit","allowed_units":["ml","l"]}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 9,
        "name": "Volume",
        "description": null,
        "type": "number_unit",
        "allowed_units": [
            "ml",
            "l"
        ],
        "default_unit": "ml",
        "status": true,
        "options": []
    }
}

Respostas possíveis

201 Atributo criado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/product-attributes/{productAttribute}

Exibe um atributo da ficha técnica

Exige o escopo `product-attributes:read`.

Parâmetros

NomeTipoObrigatórioDescrição
productAttributepathintegerSim—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/product-attributes/{productAttribute}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 9,
        "name": "Volume",
        "description": null,
        "type": "number_unit",
        "allowed_units": [
            "ml",
            "l"
        ],
        "default_unit": "ml",
        "status": true,
        "options": []
    }
}

Respostas possíveis

200 Atributo encontrado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PATCH /api/v1/product-attributes/{productAttribute}

Atualiza um atributo da ficha técnica

Exige `product-attributes:write` e a permissão de editar em Atributos Personalizados. Edição parcial; as unidades omitidas ficam como estão.

Parâmetros

NomeTipoObrigatórioDescrição
productAttributepathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
descriptionstring | nullNãoAté 255 caracteres.
typestringNãoValores: text, textarea, radio, checkbox, number_unit.
allowed_unitsarray<string>Não—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/product-attributes/{productAttribute}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","description":null,"type":"text","allowed_units":["string"]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 9,
        "name": "Volume",
        "description": null,
        "type": "number_unit",
        "allowed_units": [
            "ml",
            "l"
        ],
        "default_unit": "ml",
        "status": true,
        "options": []
    }
}

Respostas possíveis

200 Atributo atualizado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
DELETE /api/v1/product-attributes/{productAttribute}

Desativa um atributo da ficha técnica

Exige `product-attributes:write` e a permissão de desabilitar em Atributos Personalizados. Desativa sem apagar; os valores já gravados nos produtos ficam, mas o atributo deixa de ser aceito em novas gravações. Idempotente.

Parâmetros

NomeTipoObrigatórioDescrição
productAttributepathintegerSim—

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/product-attributes/{productAttribute}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 9,
        "name": "Volume",
        "description": null,
        "type": "number_unit",
        "allowed_units": [
            "ml",
            "l"
        ],
        "default_unit": "ml",
        "status": true,
        "options": []
    }
}

Respostas possíveis

200 Atributo desativado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/product-attributes/{productAttribute}/options

Cria uma opção num atributo de escolha

Exige `product-attributes:write` e a permissão de criar em Atributos Personalizados. Só atributos radio ou checkbox têm opções. Idempotente (envie um Idempotency-Key).

Parâmetros

NomeTipoObrigatórioDescrição
productAttributepathintegerSim—
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringSimAté 255 caracteres.
statusboolean | nullNão—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/product-attributes/{productAttribute}/options" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"Preto"}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1,
        "attribute_id": 1,
        "name": "string",
        "status": true
    }
}

Respostas possíveis

201 Opção criada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PATCH /api/v1/product-attribute-options/{attributeOption}

Atualiza uma opção de atributo

Exige `product-attributes:write` e a permissão de editar em Atributos Personalizados. Nome e status; desligada, a opção deixa de ser aceita em novas gravações.

Parâmetros

NomeTipoObrigatórioDescrição
attributeOptionpathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
statusboolean | nullNão—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/product-attribute-options/{attributeOption}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","status":true}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "attribute_id": 1,
        "name": "string",
        "status": true
    }
}

Respostas possíveis

200 Opção atualizada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/units

Lista as unidades de medida

Exige o escopo `units:read`. Use para descobrir o `unit_id` ao criar ou editar um produto.

Parâmetros

NomeTipoObrigatórioDescrição
statusquerybooleanNão—
searchquerystringNãoBusca por nome ou abreviação.
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/units" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "name": "Unidade",
            "abbreviation": "UN",
            "calculation_type": "inteiro",
            "decimal_precision": 0,
            "status": true
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de unidades401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/units/{unit}

Exibe uma unidade de medida

Exige o escopo `units:read`.

Parâmetros

NomeTipoObrigatórioDescrição
unitpathintegerSim—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/units/{unit}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "Unidade",
        "abbreviation": "UN",
        "calculation_type": "inteiro",
        "decimal_precision": 0,
        "status": true
    }
}

Respostas possíveis

200 Unidade encontrada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/printer-models

Lista os modelos de impressora

Exige o escopo `printer-models:read`. Use para descobrir o `printer_model_id` ao gravar a compatibilidade de um produto (`printer_model_id`) ou antes de cadastrar um modelo, para não repetir um que já existe (busque pelo nome com `search`).

Parâmetros

NomeTipoObrigatórioDescrição
statusquerybooleanNão—
brand_idqueryintegerNãoFiltra pelos modelos de uma marca.
searchquerystringNãoBusca por nome ou partnumber.
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/printer-models" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 15,
            "name": "LaserJet Pro",
            "partnumber": "HP-LJ-PRO",
            "type_equipment_id": 3,
            "type_equipment": "impressora",
            "size": "A4",
            "maintenance": true,
            "why_not": null,
            "is_generic": false,
            "capabilities": {
                "ink_levels": "tested",
                "nozzle_check": "untested",
                "head_clean": "untested",
                "waste_reset": "unsupported"
            },
            "status": true,
            "brand": {
                "id": 2,
                "name": "HP"
            },
            "sub_brand": null
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de modelos401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/printer-models

Cadastra um modelo de impressora

Exige `printer-models:write` e a permissão de criar em Modelos. Criação idempotente (envie um Idempotency-Key). Usa a mesma regra do painel - não pode existir outro modelo ativo com o mesmo tipo de equipamento, marca, submarca e nome (422). Descubra a marca em `GET /brands`, a submarca no `sub_brand` de um modelo já cadastrado e o tipo de equipamento em `GET /equipment-types`.

Parâmetros

NomeTipoObrigatórioDescrição
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringSimAté 255 caracteres.
brand_idintegerSimMarca (GET /brands).
sub_brand_idinteger | nullNãoSubmarca (ex.: WorkForce, EcoTank).
type_equipment_idinteger | nullNãoTipo de equipamento (GET /equipment-types).
partnumberstring | nullNãoAté 255 caracteres.
sizestring | nullNãoAté 20 caracteres.
maintenanceboolean | nullNãoFaz manutenção (padrão: sim).
why_notstring | nullNãoMotivo de não fazer manutenção.
is_genericboolean | nullNão—
capabilitiesobject | nullNãoSituação de cada ferramenta do app da loja (padrão: untested).

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/printer-models" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"WF-C5890","brand_id":1,"sub_brand_id":7,"type_equipment_id":3,"maintenance":true}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 15,
        "name": "LaserJet Pro",
        "partnumber": "HP-LJ-PRO",
        "type_equipment_id": 3,
        "type_equipment": "impressora",
        "size": "A4",
        "maintenance": true,
        "why_not": null,
        "is_generic": false,
        "capabilities": {
            "ink_levels": "tested",
            "nozzle_check": "untested",
            "head_clean": "untested",
            "waste_reset": "unsupported"
        },
        "status": true,
        "brand": {
            "id": 2,
            "name": "HP"
        },
        "sub_brand": null
    }
}

Respostas possíveis

201 Modelo cadastrado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/printer-models/{printerModel}

Exibe um modelo de impressora

Exige o escopo `printer-models:read`. Traz a marca e a submarca.

Parâmetros

NomeTipoObrigatórioDescrição
printerModelpathintegerSim—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/printer-models/{printerModel}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 15,
        "name": "LaserJet Pro",
        "partnumber": "HP-LJ-PRO",
        "type_equipment_id": 3,
        "type_equipment": "impressora",
        "size": "A4",
        "maintenance": true,
        "why_not": null,
        "is_generic": false,
        "capabilities": {
            "ink_levels": "tested",
            "nozzle_check": "untested",
            "head_clean": "untested",
            "waste_reset": "unsupported"
        },
        "status": true,
        "brand": {
            "id": 2,
            "name": "HP"
        },
        "sub_brand": null
    }
}

Respostas possíveis

200 Modelo encontrado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PATCH /api/v1/printer-models/{printerModel}

Edita um modelo de impressora

Exige `printer-models:write` e a permissão de editar em Modelos. Edição parcial - só os campos enviados mudam. Recusa (422) quando o modelo passaria a ter a mesma combinação de outro modelo ativo.

Parâmetros

NomeTipoObrigatórioDescrição
printerModelpathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
brand_idintegerNão—
sub_brand_idinteger | nullNão—
type_equipment_idinteger | nullNão—
partnumberstring | nullNãoAté 255 caracteres.
sizestring | nullNãoAté 20 caracteres.
maintenancebooleanNão—
why_notstring | nullNão—
is_genericbooleanNão—
capabilitiesobjectNão—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/printer-models/{printerModel}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"partnumber":"C11CJ05201"}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 15,
        "name": "LaserJet Pro",
        "partnumber": "HP-LJ-PRO",
        "type_equipment_id": 3,
        "type_equipment": "impressora",
        "size": "A4",
        "maintenance": true,
        "why_not": null,
        "is_generic": false,
        "capabilities": {
            "ink_levels": "tested",
            "nozzle_check": "untested",
            "head_clean": "untested",
            "waste_reset": "unsupported"
        },
        "status": true,
        "brand": {
            "id": 2,
            "name": "HP"
        },
        "sub_brand": null
    }
}

Respostas possíveis

200 Modelo atualizado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
DELETE /api/v1/printer-models/{printerModel}

Desativa um modelo de impressora

Exige `printer-models:write` e a permissão de desabilitar em Modelos. Desativa sem apagar (a compatibilidade dos produtos continua gravada); reativar é pelo painel. Idempotente.

Parâmetros

NomeTipoObrigatórioDescrição
printerModelpathintegerSim—

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/printer-models/{printerModel}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 15,
        "name": "LaserJet Pro",
        "partnumber": "HP-LJ-PRO",
        "type_equipment_id": 3,
        "type_equipment": "impressora",
        "size": "A4",
        "maintenance": true,
        "why_not": null,
        "is_generic": false,
        "capabilities": {
            "ink_levels": "tested",
            "nozzle_check": "untested",
            "head_clean": "untested",
            "waste_reset": "unsupported"
        },
        "status": true,
        "brand": {
            "id": 2,
            "name": "HP"
        },
        "sub_brand": null
    }
}

Respostas possíveis

200 Modelo desativado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant