O que é

Ordens de Serviço é o módulo da assistência técnica: cada OS acompanha um equipamento do cliente da abertura até a retirada, passando por triagem, análise, orçamento, execução e entrega.

Pela API, tudo o que o painel faz pode ser feito por uma integração ou uma IA, com as mesmas regras e a mesma permissão do usuário responsável pela credencial.

O que dá para fazer hoje

  • Abrir a OS com o checklist de abertura, editar, duplicar e definir prioridade e prazo.
  • Fazer a triagem, enviar e responder o orçamento.
  • Agir como técnico: pegar o serviço, informar e liberar impedimentos, registrar a análise e finalizar com os checklists.
  • Marcar a OS como disponível e como retirada, e trocar o status (uma ou várias).
  • Registrar observações, insumos com baixa de estoque, itens do orçamento e arquivos.
  • Vincular ou gerar o pedido e liberar chaves e itens digitais.
  • Consultar a fila do técnico, a fila de entregas e os relatórios de produção e faturamento.
  • Disparar avisos da fila de entregas por WhatsApp e e-mail.
  • Gerenciar status, tipos de serviço e de equipamento, tags, equipamentos do cliente, fluxo de status e filas do Cockpit.

Ciclo de uma OS

EtapaComo chega
abertura → em_triagemCriar a abertura e concluir o checklist
analise_tecnica ou orcamentoTriagem
orcamento_realizado → aguardando_cliente → orcamento_aprovadoRespostas do orçamento
servico_em_andamentoTécnico pega o serviço
preparar_envio ou servico_finalizadoFinalizar o serviço
disponivel_para_retirada → retiradoChecklist de envio, disponível e retirada

Importante

  • O status muda só pelas ações; o PATCH edita os dados em qualquer etapa.
  • Ação fora da etapa responde 409 invalid_transition.
  • Toda ação e criação exige Idempotency-Key.
  • OS de loja que o usuário não acessa responde 404.
  • As ações do técnico valem para o técnico responsável e para o gestor do Cockpit nas lojas da OS.

Disponibilidade na API

Endpoints de Ordens de Serviço

Abra, opere e acompanhe ordens de serviço do começo ao fim: triagem, orçamento, técnico, entrega e cadastros. Os exemplos abaixo são gerados pelo contrato OpenAPI oficial.

GET /api/v1/service-order-options

Lista opções para abrir uma ordem de serviço

Retorna as lojas acessíveis ao responsável, equipamentos do cliente e tipos de serviço compatíveis com os filtros.

Parâmetros

NomeTipoObrigatórioDescrição
client_idqueryintegerNãoCarrega somente os equipamentos deste cliente.
store_idqueryintegerNãoCarrega tipos de serviço desta loja acessível.
equipment_idqueryintegerNãoRestringe os tipos de serviço ao tipo do equipamento.

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "stores": [
            {
                "id": 1,
                "name": "string"
            }
        ],
        "equipment": [
            {
                "id": 1,
                "client_id": 1,
                "serial": null,
                "description": null,
                "type": [],
                "model": []
            }
        ],
        "service_types": [
            {
                "id": 1,
                "name": "string",
                "store_id": 1,
                "equipment_type_id": 1,
                "has_opening_form": true,
                "requires_budget": true
            }
        ]
    }
}

Respostas possíveis

200 Opções válidas para a abertura401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos
GET /api/v1/service-orders

Lista ordens de serviço

Lista as ordens de serviço das lojas que o usuário responsável pela credencial acessa (o administrador geral vê todas), como a listagem do painel. Exige `service-orders:read` e Gestão de OS (ver).

Parâmetros

NomeTipoObrigatórioDescrição
store_idqueryintegerNãoFiltra por loja.
client_idqueryintegerNãoFiltra por cliente.
responsible_technician_idqueryintegerNãoFiltra pelo técnico responsável.
statusquerystringNãoFiltra pelo código interno estável do status.
searchquerystringNãoBusca pelo número da OS ou nome do cliente.
per_pagequeryintegerNão—

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1024,
            "is_draft": true,
            "progress": "Abrindo",
            "store": {
                "id": 1,
                "name": "Matriz"
            },
            "client": {
                "id": 42,
                "name": "Maria Oliveira",
                "email": "maria@exemplo.com"
            },
            "equipment": null,
            "service_type": null,
            "status": {
                "id": 1,
                "code": "abertura",
                "name": "Abertura",
                "progress": "Abrindo",
                "color": "#64748B"
            },
            "responsible_technician": null,
            "priority": null,
            "is_return": false,
            "budget_pre_approved": null,
            "ready_at": null,
            "is_overdue": false,
            "is_missing_ready_at": false,
            "ready_estimate": null,
            "open_date": "2026-10-21T10:00:00-03:00",
            "finished_date": null,
            "order_id": null,
            "created_at": "2026-10-21T10:00:00-03:00",
            "updated_at": "2026-10-21T10:00:00-03:00"
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de ordens de serviço401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente
POST /api/v1/service-orders

Cria um rascunho de ordem de serviço

Cria somente a abertura da OS. Não avança para triagem e não ignora checklists dinâmicos.

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
store_idintegerSim—
client_idinteger | nullNão—
equipment_idinteger | nullNãoDeve pertencer ao cliente informado.
service_type_idinteger | nullNãoDeve pertencer à loja e atender o tipo do equipamento.
returnboolean | nullNão—
budget_pre_approvednumber | nullNão—
tag_idinteger | nullNão—
priority_reasonstring | nullNãoAté 500 caracteres.
responsible_technician_idinteger | nullNão—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"store_id":1,"client_id":42,"equipment_id":88,"service_type_id":5,"return":false}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

201 Rascunho criado ou reapresentado pela mesma chave idempotente401 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álidos
GET /api/v1/service-orders/{serviceOrder}

Consulta uma ordem de serviço

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Ordem de serviço encontrada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
PATCH /api/v1/service-orders/{serviceOrder}

Edita uma ordem de serviço

Edição parcial em qualquer etapa, como a tela da OS; o campo omitido fica como está. O status não muda por aqui (use as ações). Trocar o tipo de serviço zera as respostas de abertura e de análise. Exige `service-orders:write` e Gestão de OS (editar). OS fora das lojas do usuário responde 404.

Corpo da requisição

CampoTipoObrigatórioDescrição
store_idintegerNão—
client_idinteger | nullNão—
equipment_idinteger | nullNãoDeve pertencer ao cliente informado.
service_type_idinteger | nullNãoDeve pertencer à loja e atender o tipo do equipamento.
returnbooleanNão—
budget_pre_approvednumber | nullNão—
tag_idinteger | nullNão—
priority_reasonstring | nullNãoAté 500 caracteres.
responsible_technician_idinteger | nullNão—
open_byintegerNãoGerente da OS (quem gerencia o atendimento).

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/service-orders/{serviceOrder}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"store_id":1,"client_id":1,"equipment_id":1,"service_type_id":1,"return":true,"budget_pre_approved":1,"tag_id":1,"priority_reason":null,"responsible_technician_id":1,"open_by":1}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Rascunho atualizado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos
GET /api/v1/service-orders/{serviceOrder}/opening-form

Consulta o formulário de abertura

Retorna etapas, perguntas, opções, regras de visibilidade e respostas já salvas.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}/opening-form" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "description": null,
        "version": 1,
        "answer_id": 1,
        "steps": [
            {
                "id": 1,
                "name": "string",
                "questions": [
                    {
                        "id": 1,
                        "field_key": null,
                        "name": "string",
                        "description": null,
                        "type": "string",
                        "required": true,
                        "placeholder": null,
                        "file_mode": "single",
                        "visibility_rules": [
                            []
                        ],
                        "options": [
                            "string"
                        ],
                        "answer": []
                    }
                ]
            }
        ]
    }
}

Respostas possíveis

200 Formulário de abertura da OS401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos
PUT /api/v1/service-orders/{serviceOrder}/opening-form

Salva respostas do formulário de abertura

Salva um rascunho das respostas sem exigir campos obrigatórios e sem avançar a OS. Só as perguntas enviadas mudam; as não enviadas mantêm a resposta salva.

Corpo da requisição

CampoTipoObrigatórioDescrição
answersobjectNãoRespostas indexadas pelo id numérico da pergunta. Valores podem ser simples ou listas.
answers_filesobjectNãoArquivos indexados pelo id da pergunta; use multipart/form-data.

Exemplo de requisição

cURL
curl -X PUT "$MICORE_BASE_URL/service-orders/{serviceOrder}/opening-form" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"answers":{"10":"Liga normalmente","11":["Wi-Fi","USB"]},"answers_files":[]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "description": null,
        "version": 1,
        "answer_id": 1,
        "steps": [
            {
                "id": 1,
                "name": "string",
                "questions": [
                    {
                        "id": 1,
                        "field_key": null,
                        "name": "string",
                        "description": null,
                        "type": "string",
                        "required": true,
                        "placeholder": null,
                        "file_mode": "single",
                        "visibility_rules": [
                            []
                        ],
                        "options": [
                            "string"
                        ],
                        "answer": []
                    }
                ]
            }
        ]
    }
}

Respostas possíveis

200 Respostas salvas401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos
POST /api/v1/service-orders/{serviceOrder}/complete-opening

Conclui a abertura da ordem de serviço

Valida as respostas obrigatórias do checklist configurado e move a OS para triagem.

Corpo da requisição

CampoTipoObrigatórioDescrição
answersobjectNãoRespostas indexadas pelo id numérico da pergunta. Valores podem ser simples ou listas.
answers_filesobjectNãoArquivos indexados pelo id da pergunta; use multipart/form-data.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/complete-opening" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"answers":{"10":"Liga normalmente","11":["Wi-Fi","USB"]},"answers_files":[]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Ordem de serviço enviada para triagem401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos
GET /api/v1/service-order-impediment-reasons

Lista os motivos de impedimento

Motivos aceitos ao informar um impedimento pelo Cockpit, pelo app ou pela API. Exige `service-orders:read` e Gestão de OS (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-impediment-reasons" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

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

Respostas possíveis

200 Motivos de impedimento401 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
POST /api/v1/service-orders/status

Troca o status de várias OS de uma vez

Mesma troca em massa da listagem do painel. Exige `service-orders:operate` e Gestão de OS (editar). Só as OS das lojas do usuário entram; se alguma tiver pedido gerado ou chave vista sem modelo e serial, o lote inteiro é recusado com 422. OS já no status escolhido não contam.

Corpo da requisição

CampoTipoObrigatórioDescrição
service_order_idsarray<integer>Sim—
status_idintegerSimStatus ativo de OS.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/status" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"service_order_ids":[1],"status_id":1}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "updated": 1
    }
}

Respostas possíveis

200 Quantidade de OS alteradas401 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/service-orders/{serviceOrder}/duplicate

Duplica uma ordem de serviço

Mesma cópia do botão Duplicar do painel. Exige `service-orders:write` e Gestão de OS (editar). A cópia nasce em abertura, sem equipamento, formulários, orçamento, pedido, técnico nem conclusão, com o usuário da credencial como gerente.

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/service-orders/{serviceOrder}/duplicate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001"

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

201 Cópia criada (ou reapresentada pela mesma chave)401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/priority

Define prioridade e motivo

Substitui os dois campos do modal de prioridade (envie os dois; `null` limpa). Exige `service-orders:write` e Gestão de OS (editar). A etiqueta precisa estar ativa. O prazo da OS é o `ready_at`, gravado em `PUT /service-orders/{serviceOrder}/ready-at`.

Corpo da requisição

CampoTipoObrigatórioDescrição
tag_idinteger | nullSimEtiqueta de prioridade ativa.
priority_reasonstring | nullSimAté 500 caracteres.

Exemplo de requisição

cURL
curl -X PUT "$MICORE_BASE_URL/service-orders/{serviceOrder}/priority" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"tag_id":1,"priority_reason":null}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Prioridade gravada401 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/service-orders/{serviceOrder}/ready-at

Define ou altera o "Pronta em"

Data e hora em que a OS fica pronta, garantidas ao cliente (ISO 8601 com fuso). Precisa ser no futuro. Alterar um prazo já definido exige `reason`. Toda definição ou alteração fica no histórico da OS. Repetir o mesmo prazo não grava de novo. Exige `service-orders:write` e Gestão de OS (editar).

Corpo da requisição

CampoTipoObrigatórioDescrição
ready_atstring (date-time)SimData e hora de pronta (ISO 8601 com fuso), no futuro.
reasonstring | nullNãoObrigatório ao alterar um prazo já definido. Até 500 caracteres.

Exemplo de requisição

cURL
curl -X PUT "$MICORE_BASE_URL/service-orders/{serviceOrder}/ready-at" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"ready_at":"2026-10-20T10:00:00-03:00","reason":null}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Prazo gravado401 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/service-orders/{serviceOrder}/status

Troca manualmente o status da OS

Mesmo seletor de status da tela da OS. Exige `service-orders:operate` e Gestão de OS (editar). OS com pedido gerado mantém o status (409 `invalid_transition`); chave vista sem modelo e serial recusa a troca (422).

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
status_idintegerSimStatus ativo de OS.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/status" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"status_id":1}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Status alterado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/triage

Designa o técnico e tira a OS da triagem

Exige `service-orders:operate` e Gestão de OS (ver). `budget` leva a orçamento, `review` a análise técnica e `direct_approved` a serviço em andamento. Só em triagem (`em_triagem`); fora dela, 409 `invalid_transition`.

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
technician_idintegerSim—
next_stepstringSimValores: budget, review, direct_approved.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/triage" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"technician_id":1,"next_step":"budget"}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 OS designada401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/budget/submit

Envia o orçamento para aprovação

Mesmo botão "Enviar para aprovação" da tela da OS: grava o texto, quem enviou e quando, e move a OS para aguardando aprovação. Exige `service-orders:operate` e Gestão de OS (ver).

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
textstring | nullNãoTexto do orçamento enviado ao cliente.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/budget/submit" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"text":null}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Orçamento 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/budget/decision

Registra uma resposta do ciclo de orçamento

Mesmos botões da tela da OS. Em `orcamento` só cabe `orcamento_realizado`; em `orcamento_realizado`, `aguardando_cliente` (pausa o prazo) ou a resposta do cliente; em `aguardando_cliente`, `aprovado`, `reprovado`, `sem_custo` ou `sem_conserto`. Recusas levam a OS para retirada. `aprovado` e `sem_custo` gravam o "Pronta em" com histórico: o `ready_at` enviado (ISO 8601 com fuso, no futuro; no passado, 422) ou, sem ele, o calculado pelo prazo de entrega (`ready_estimate`: o da OS ou o padrão do tipo de serviço). Sem os dois, a OS é aprovada sem prazo e fica com `is_missing_ready_at`. Vale também para OS com pedido vinculado. As respostas possíveis agora estão em `budget.available_decisions` do detalhe. Fora delas, 409 `invalid_transition`. Exige `service-orders:operate` e Gestão de OS (ver).

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
decisionstringSimValores: orcamento_realizado, aguardando_cliente, aprovado, reprovado, sem_custo, sem_conserto.
ready_atstring | null (date-time)NãoOpcional em `aprovado` e `sem_custo`: data e hora de pronta (ISO 8601 com fuso), no futuro. Sem ele, vale o calculado pelo prazo de entrega.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/budget/decision" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"decision":"orcamento_realizado","ready_at":"2026-10-20T10:00:00-03:00"}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Resposta registrada401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/start

Pega o serviço aprovado

"Pegar serviço" do Cockpit: `orcamento_aprovado` passa para `servico_em_andamento` (repetir numa OS já em andamento não muda nada). Exige `service-orders:operate` e Cockpit do Técnico (ver); só o técnico responsável ou o gestor do Cockpit nas lojas da OS age, os demais recebem 404. OS com impedimento aberto ou em outra etapa: 409.

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/service-orders/{serviceOrder}/start" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Serviço aceito401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/impediments

Informa um impedimento

Registra o motivo (e a descrição, obrigatória em `other`) sem mudar o status; a OS sai da fila do técnico até o gestor liberar e o registro entra nas observações internas. Só nas etapas de execução e com um impedimento aberto por vez (409). Mesma regra de acesso do Cockpit. Exige `service-orders:operate` e Cockpit do Técnico (ver).

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
reasonstringSimValores: waiting_part, waiting_client, waiting_information, waiting_third_party, other.
notesstring | nullNãoObrigatório quando o motivo é `other`. Até 1000 caracteres.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/impediments" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"reason":"waiting_part","notes":null}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Impedimento registrado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/impediments/resolve

Libera o impedimento em aberto

Fecha o impedimento e devolve a OS para a fila pela mesma ordenação. Exige `service-orders:operate` e Cockpit do Técnico (gerenciar cockpit). Sem impedimento aberto: 409.

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/service-orders/{serviceOrder}/impediments/resolve" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Impedimento liberado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/analysis

Registra a análise técnica

Grava o texto e o checklist de análise do tipo de serviço (`answers`, indexado pelo id da pergunta, e `answers_files` para perguntas de arquivo) e avança para orçamento ou execução conforme o tipo de serviço. Com `finish_service`, grava também o checklist de finalização (`closing_answers`) e encerra o serviço. Só em `analise_tecnica` (409). Perguntas obrigatórias e visibilidade seguem o formulário (422). Mesma regra de acesso do Cockpit. Exige `service-orders:operate` e Cockpit do Técnico (ver).

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
textstringSimTexto da análise técnica.
answersobjectNãoChecklist de análise, indexado pelo id da pergunta.
answers_filesobjectNãoArquivos do checklist de análise (multipart).
finish_servicebooleanNãoEncerra o serviço junto da análise.
closing_answersobjectNãoChecklist de finalização, quando `finish_service`.
closing_answers_filesobjectNãoArquivos do checklist de finalização (multipart).

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/analysis" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"text":"string","answers":[],"answers_files":[],"finish_service":true,"closing_answers":[],"closing_answers_files":[]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Análise registrada401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/finish-service

Finaliza o serviço em andamento

Com checklist de finalização no tipo de serviço, envie as respostas em `answers`/`answers_files`. Vai para `preparar_envio` quando há checklist de envio, senão para `servico_finalizado`. Recusa com impedimento aberto ou fora de `servico_em_andamento` (409) e com chave vista sem modelo e serial (422). Mesma regra de acesso do Cockpit. Exige `service-orders:operate` e Cockpit do Técnico (ver).

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
answersobjectNãoRespostas indexadas pelo id numérico da pergunta. Valores podem ser simples ou listas.
answers_filesobjectNãoArquivos das perguntas do tipo arquivo, indexados pelo id da pergunta (multipart).

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/finish-service" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"answers":[],"answers_files":[]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Serviço finalizado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/finish-shipping

Salva o checklist de envio e libera para retirada

Só em `preparar_envio` e com o checklist de envio do tipo de serviço respondido (`answers`/`answers_files`); a OS passa para `disponivel_para_retirada`. Mesma regra de acesso do Cockpit. Exige `service-orders:operate` e Cockpit do Técnico (ver).

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
answersobjectNãoRespostas indexadas pelo id numérico da pergunta. Valores podem ser simples ou listas.
answers_filesobjectNãoArquivos das perguntas do tipo arquivo, indexados pelo id da pergunta (multipart).

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/finish-shipping" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"answers":[],"answers_files":[]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 OS disponível para retirada401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/available

Marca a OS como disponível para retirada

Mesmo botão da tela da OS. Exige `service-orders:operate` e Gestão de OS (ver).

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/service-orders/{serviceOrder}/available" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 OS disponível para retirada401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/picked-up

Marca a OS como retirada

Mesmo botão da tela da OS: a OS passa para `retirado`. Exige `service-orders:operate` e Gestão de OS (ver).

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/service-orders/{serviceOrder}/picked-up" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 OS retirada401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/observations

Lista as observações internas

Da mais antiga para a mais recente. Exige `service-orders:read` e Gestão de OS (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}/observations" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "text": "string",
            "author": {
                "id": 1,
                "name": "string"
            },
            "created_at": "2026-10-20T10:00:00-03:00"
        }
    ]
}

Respostas possíveis

200 Observações internas401 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/service-orders/{serviceOrder}/observations

Adiciona uma observação interna

Exige `service-orders:write` e Gestão de OS (ver), como na tela da OS.

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
textstringSim—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/observations" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"text":"string"}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1,
        "text": "string",
        "author": {
            "id": 1,
            "name": "string"
        },
        "created_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Observação criada (ou reapresentada pela mesma chave)401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/status-history

Lista o histórico de status

Cada passagem da OS por um status, com quem mudou e quando. Exige `service-orders:read` e Gestão de OS (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}/status-history" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "status": {
                "id": 1,
                "code": null,
                "name": "string"
            },
            "user": {
                "id": 1,
                "name": "string"
            },
            "created_at": "2026-10-20T10:00:00-03:00"
        }
    ]
}

Respostas possíveis

200 Histórico de status401 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/service-orders/{serviceOrder}/checklists/{kind}

Consulta um checklist técnico

Perguntas do checklist de análise, finalização ou envio configurado no tipo de serviço, com as respostas já salvas na OS. `data` vem `null` quando o tipo de serviço não tem esse checklist. Exige `service-orders:read` e Gestão de OS (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}/checklists/{kind}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "kind": "analysis",
        "form_id": 1,
        "form_answer_id": 1,
        "name": "string",
        "questions": [
            {
                "id": 1,
                "name": "string",
                "description": null,
                "type": "string",
                "required": true,
                "multiple": true,
                "options": [
                    "string"
                ],
                "answer": [
                    "string"
                ]
            }
        ]
    }
}

Respostas possíveis

200 Checklist com respostas401 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/service-orders/{serviceOrder}/files

Lista os arquivos da OS

Anexos manuais ativos e arquivos enviados nos checklists (abertura, análise, finalização e envio), do mais recente para o mais antigo, com link temporário de 60 minutos. Exige `service-orders:read` e Gestão de OS (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}/files" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": "string",
            "filename": "string",
            "mime": null,
            "comment": null,
            "source": "attachment",
            "url": "string",
            "created_at": "2026-10-20T10:00:00-03:00"
        }
    ]
}

Respostas possíveis

200 Arquivos da OS401 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/service-orders/{serviceOrder}/files

Envia um anexo

Envia o arquivo para a pasta da OS no armazenamento. Exige `service-orders:write` e Gestão de OS (criar), como na tela de arquivos.

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
filestring (binary)SimAté 50 MB.
commentstring | nullNãoAté 255 caracteres.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/files" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"file":"string","comment":null}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": "string",
        "filename": "string",
        "mime": null,
        "comment": null,
        "source": "attachment",
        "url": "string",
        "created_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Anexo 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/files/{file}

Remove um anexo

Desativa o anexo manual da OS (arquivos de checklist saem pelo checklist). Anexo de outra OS ou já removido: 404. Exige `service-orders:write` e Gestão de OS (criar).

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/service-orders/{serviceOrder}/files/{file}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Respostas possíveis

204 Anexo removido401 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/service-orders/{serviceOrder}/inputs

Lista os insumos da OS

Produtos de estoque usados no serviço, ativos e estornados. Liberado para Gestão de OS (ver) e para o técnico da OS pelo Cockpit. Exige `service-orders:read`.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}/inputs" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "product": {
                "id": 1,
                "name": "string",
                "unit": null
            },
            "quantity": 1,
            "unit_cost": 1,
            "status": "active",
            "notes": null,
            "used_by": {
                "id": 1,
                "name": "string"
            },
            "used_at": "2026-10-20T10:00:00-03:00",
            "reversed_by": {
                "id": 1,
                "name": "string"
            },
            "reversed_at": "2026-10-20T10:00:00-03:00"
        }
    ]
}

Respostas possíveis

200 Insumos401 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/service-orders/{serviceOrder}/inputs

Lança um insumo

Baixa o estoque da loja da OS na hora. Liberado para Gestão de OS (editar) e para o técnico da OS pelo Cockpit; OS retirada não muda (409). Estoque insuficiente ou produto fora do estoque físico: 422. Exige `service-orders:write`.

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
product_idintegerSimProduto de estoque físico.
quantitynumber | nullNãoPadrão 1, no passo da unidade do produto.
notesstring | nullNãoAté 1000 caracteres.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/inputs" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"product_id":1,"quantity":1,"notes":null}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1,
        "product": {
            "id": 1,
            "name": "string",
            "unit": null
        },
        "quantity": 1,
        "unit_cost": 1,
        "status": "active",
        "notes": null,
        "used_by": {
            "id": 1,
            "name": "string"
        },
        "used_at": "2026-10-20T10:00:00-03:00",
        "reversed_by": {
            "id": 1,
            "name": "string"
        },
        "reversed_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Insumo lançado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/input-options

Busca produtos para insumo

Produtos de estoque físico com o saldo da loja da OS e o passo de quantidade da unidade. Mesma busca da tela da OS e do Cockpit. Exige `service-orders:read`.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}/input-options" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

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

Respostas possíveis

200 Produtos encontrados401 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/service-orders/{serviceOrder}/inputs/{input}

Ajusta um insumo ativo

Edição parcial: envie `quantity` e/ou `notes`; o que não vier fica como está. O estoque é ajustado pela diferença. Mesmo acesso do lançamento. Exige `service-orders:write`.

Corpo da requisição

CampoTipoObrigatórioDescrição
quantitynumberNão—
notesstring | nullNãoAté 1000 caracteres.

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/service-orders/{serviceOrder}/inputs/{input}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"quantity":1,"notes":null}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "product": {
            "id": 1,
            "name": "string",
            "unit": null
        },
        "quantity": 1,
        "unit_cost": 1,
        "status": "active",
        "notes": null,
        "used_by": {
            "id": 1,
            "name": "string"
        },
        "used_at": "2026-10-20T10:00:00-03:00",
        "reversed_by": {
            "id": 1,
            "name": "string"
        },
        "reversed_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Insumo ajustado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/inputs/{input}/reverse

Estorna um insumo

Devolve a quantidade ao estoque e mantém o insumo no histórico como estornado. Mesmo acesso do lançamento. Exige `service-orders:write`.

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/service-orders/{serviceOrder}/inputs/{input}/reverse" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "product": {
            "id": 1,
            "name": "string",
            "unit": null
        },
        "quantity": 1,
        "unit_cost": 1,
        "status": "active",
        "notes": null,
        "used_by": {
            "id": 1,
            "name": "string"
        },
        "used_at": "2026-10-20T10:00:00-03:00",
        "reversed_by": {
            "id": 1,
            "name": "string"
        },
        "reversed_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Insumo estornado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/available-orders

Lista pedidos que podem ser vinculados

Pedidos do mesmo cliente e loja da OS, mais recentes primeiro, com os itens (componentes de kit agrupados no kit) e se cada item ainda está livre. Exige `service-orders:read` e Gestão de OS (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}/available-orders" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "status": {
                "id": 1,
                "name": "string"
            },
            "created_at": "2026-10-20T10:00:00-03:00",
            "items": [
                {
                    "id": 1,
                    "product": {
                        "id": 1,
                        "name": null,
                        "type": null
                    },
                    "quantity": 1,
                    "step": "string",
                    "linked_service_order_id": 1,
                    "available": true,
                    "kit_components": [
                        {
                            "id": 1,
                            "product_id": 1,
                            "quantity": 1
                        }
                    ]
                }
            ]
        }
    ]
}

Respostas possíveis

200 Pedidos do cliente401 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/service-orders/{serviceOrder}/order

Vincula um pedido existente

Vincula o pedido e os itens escolhidos; quantidade parcial destaca a fração em uma linha nova (o desconto é rateado). Kit leva os componentes junto e só aceita unidade inteira. OS já vinculada: 409. Pedido de outro cliente ou loja, item ocupado ou quantidade inválida: 422. Exige `service-orders:operate` e Gestão de OS (ver).

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
order_idintegerSim—
itemsarray<object>Sim—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/order" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"order_id":1,"items":[{"id":1,"quantity":1}]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Pedido vinculado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/order

Remove o vínculo com o pedido

Os itens deixam a OS e ficam só no pedido. OS sem pedido: 404. Exige `service-orders:operate` e Gestão de OS (ver).

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/service-orders/{serviceOrder}/order" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Vínculo removido401 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/service-orders/{serviceOrder}/order/generate

Gera o pedido a partir dos itens da OS

Cria o pedido com os itens da OS e propaga para ele as chaves e acessos já liberados; se a OS já tem pedido, devolve a OS com ele. OS sem itens: 422. Exige `service-orders:operate` e Gestão de OS (ver).

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/service-orders/{serviceOrder}/order/generate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Pedido gerado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/keys

Lista as chaves liberadas

Chaves dos itens da OS (ou do pedido vinculado), sem o valor, com quem viu e as informações de uso. Exige `service-orders:read` e Gestão de OS (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}/keys" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "product": {
                "id": 1,
                "name": "string"
            },
            "order_item_id": 1,
            "viewed": true,
            "viewed_by": {
                "id": 1,
                "name": "string"
            },
            "viewed_at": "2026-10-20T10:00:00-03:00",
            "usage": {
                "filled": true,
                "model_id": 1,
                "serial": null,
                "info_add": null,
                "filled_at": "2026-10-20T10:00:00-03:00"
            }
        }
    ]
}

Respostas possíveis

200 Chaves liberadas401 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/service-orders/{serviceOrder}/keys/{key}/reveal

Revela uma chave liberada

Devolve o valor da chave e registra o usuário da credencial como quem viu (a primeira visualização é a que fica). Chave de outra OS: 404. Exige `service-orders:keys` e Gestão de OS (ver).

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/keys/{key}/reveal" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": []
}

Respostas possíveis

200 Chave revelada401 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
PUT /api/v1/service-orders/{serviceOrder}/keys/{key}/usage

Preenche as informações de uso da chave

Substitui modelo, serial e informação adicional da chave. Só depois de a chave ser vista (409). Exige `service-orders:keys` e Gestão de OS (ver).

Corpo da requisição

CampoTipoObrigatórioDescrição
model_idintegerSimModelo de impressora.
serialstringSimAté 25 caracteres.
info_addstring | nullNãoAté 100 caracteres.
recovery_codestring | nullNãoAté 600 caracteres.

Exemplo de requisição

cURL
curl -X PUT "$MICORE_BASE_URL/service-orders/{serviceOrder}/keys/{key}/usage" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"model_id":1,"serial":"string","info_add":null,"recovery_code":null}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "product": {
            "id": 1,
            "name": "string"
        },
        "order_item_id": 1,
        "viewed": true,
        "viewed_by": {
            "id": 1,
            "name": "string"
        },
        "viewed_at": "2026-10-20T10:00:00-03:00",
        "usage": {
            "filled": true,
            "model_id": 1,
            "serial": null,
            "info_add": null,
            "filled_at": "2026-10-20T10:00:00-03:00"
        }
    }
}

Respostas possíveis

200 Uso registrado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/release-items

Libera as chaves e itens digitais pendentes

Mesma liberação do botão da tela da OS: com pedido vinculado, pelo fluxo do pedido; sem pedido, direto nos itens da OS. Produtos que ficaram sem chave em estoque voltam em `meta.pending_products`. OS em triagem, análise técnica ou orçamento (orçamento ainda não realizado) recebe 409 `invalid_transition` e nada é liberado. Exige `service-orders:keys` e Gestão de OS (liberar itens).

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/service-orders/{serviceOrder}/release-items" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    },
    "meta": {
        "pending_products": [
            {
                "product": "string",
                "released": 1,
                "bought": 1
            }
        ]
    }
}

Respostas possíveis

200 Liberação feita401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/release-key

Libera uma chave escolhida

Entrega a chave informada ao item da OS que ainda espera chave do mesmo produto. Chave indisponível ou sem item esperando: 422. OS em triagem, análise técnica ou orçamento (orçamento ainda não realizado): 409 `invalid_transition`. Exige `service-orders:keys`, Gestão de OS (liberar itens) e que o usuário responsável pela credencial seja o administrador geral; outro usuário recebe 403 `permission_denied`.

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
key_idintegerSimChave disponível do produto do item.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/release-key" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"key_id":1}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1024,
        "is_draft": true,
        "progress": "Abrindo",
        "store": {
            "id": 1,
            "name": "Matriz"
        },
        "client": {
            "id": 42,
            "name": "Maria Oliveira",
            "email": "maria@exemplo.com"
        },
        "equipment": null,
        "service_type": null,
        "status": {
            "id": 1,
            "code": "abertura",
            "name": "Abertura",
            "progress": "Abrindo",
            "color": "#64748B"
        },
        "responsible_technician": null,
        "priority": null,
        "is_return": false,
        "budget_pre_approved": null,
        "ready_at": null,
        "is_overdue": false,
        "is_missing_ready_at": false,
        "ready_estimate": null,
        "open_date": "2026-10-21T10:00:00-03:00",
        "finished_date": null,
        "order_id": null,
        "created_at": "2026-10-21T10:00:00-03:00",
        "updated_at": "2026-10-21T10:00:00-03:00"
    }
}

Respostas possíveis

200 Chave liberada401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/items

Lista os itens do orçamento da OS

Exige `service-orders:read` e a permissão Gestão de OS (ver). Produtos e serviços cobrados na OS, na ordem em que entraram. Componentes de kit aparecem como linhas próprias, com `is_kit_component` e o `kit_product` de origem; a linha do kit vem com preço zero, porque o valor fica na composição.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}/items" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 9012,
            "product": {
                "id": 482,
                "name": "Cabeça de impressão DX7",
                "type": "produto-fisico",
                "unit": "UN"
            },
            "quantity": 2,
            "currency": "BRL",
            "price": 350,
            "price_original": 420,
            "discount": 20,
            "unit_discount": 10,
            "total": 680,
            "is_kit_component": false,
            "kit_product": {
                "id": 77,
                "name": "Kit manutenção preventiva"
            },
            "order_id": 1,
            "created_at": "2026-10-20T10:00:00-03:00",
            "updated_at": "2026-10-20T10:00:00-03:00"
        }
    ]
}

Respostas possíveis

200 Itens da OS401 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/service-orders/{serviceOrder}/items

Adiciona um produto ao orçamento da OS

Exige `service-orders:write`, a permissão Gestão de OS (editar) e, como na tela da OS, que grava pelas rotas de Pedidos, também o módulo Pedidos com a permissão Gestão de Pedidos (editar). Criação idempotente (envie um Idempotency-Key). Mesma regra da tela: o preço vem do cadastro do produto (faixa por quantidade, preço de revenda para revendedores, moeda do cliente), kit grava os componentes da composição e produto físico reserva estoque na loja da OS (sob demanda manda a falta para a produção). Se o produto já está na OS, a quantidade é somada à linha existente; envie `increment: false` para definir a quantidade final. Sem estoque responde 422 e nada é gravado. OS com pedido vinculado responde 409 `invalid_transition`.

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
product_idintegerSimProduto ou serviço a cobrar na OS.
quantitynumberNãoQuantidade no passo de venda do produto (padrão 1; kit sempre inteiro).
incrementbooleanNãoCom o produto já na OS, soma a quantidade à linha existente; false define a quantidade final. Padrão: true.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/items" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"product_id":482,"quantity":2,"increment":true}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 9012,
        "product": {
            "id": 482,
            "name": "Cabeça de impressão DX7",
            "type": "produto-fisico",
            "unit": "UN"
        },
        "quantity": 2,
        "currency": "BRL",
        "price": 350,
        "price_original": 420,
        "discount": 20,
        "unit_discount": 10,
        "total": 680,
        "is_kit_component": false,
        "kit_product": {
            "id": 77,
            "name": "Kit manutenção preventiva"
        },
        "order_id": 1,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Item adicionado (ou a linha do produto atualizada), ou reapresentado pela mesma chave idempotente com o cabeçalho `Idempotency-Replayed`401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/items/{item}

Edita um item do orçamento da OS

Exige `service-orders:write`, Gestão de OS (editar) e Gestão de Pedidos (editar), como na tela. Edição parcial: só os campos enviados mudam. Trocar a quantidade refaz a composição do kit e a reserva de estoque; preço, preço original e desconto por unidade que não vierem continuam como estavam (o desconto por unidade é regravado na nova quantidade). Regras da tela: o desconto por unidade não passa do preço unitário, o preço original não fica abaixo do preço e componente de kit só muda pelo kit. `price_original: null` remove o preço original. OS com pedido vinculado responde 409 `invalid_transition`.

Corpo da requisição

CampoTipoObrigatórioDescrição
quantitynumberNão—
pricenumberNãoPreço unitário aplicado.
price_originalnumberNãoPreço unitário "de"; null remove.
unit_discountnumberNãoDesconto por unidade; não pode passar do preço unitário.

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/service-orders/{serviceOrder}/items/{item}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"quantity":3,"price":320,"price_original":420,"unit_discount":5}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 9012,
        "product": {
            "id": 482,
            "name": "Cabeça de impressão DX7",
            "type": "produto-fisico",
            "unit": "UN"
        },
        "quantity": 2,
        "currency": "BRL",
        "price": 350,
        "price_original": 420,
        "discount": 20,
        "unit_discount": 10,
        "total": 680,
        "is_kit_component": false,
        "kit_product": {
            "id": 77,
            "name": "Kit manutenção preventiva"
        },
        "order_id": 1,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Item atualizado401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-orders/{serviceOrder}/items/{item}

Remove um item do orçamento da OS

Exige `service-orders:write`, Gestão de OS (editar) e Gestão de Pedidos (editar). Apaga a linha (kit leva os componentes) e libera a reserva de estoque. Item com chave já liberada não pode ser removido (422). Componente de kit só sai pelo kit. OS com pedido vinculado responde 409 `invalid_transition`.

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/service-orders/{serviceOrder}/items/{item}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Respostas possíveis

204 Item removido401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 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/service-order-statuses

Lista status de OS

Exige `service-orders:read` e a permissão Status de OS (ver). O nome é único: repetir responde 422 no campo `name`.

Parâmetros

NomeTipoObrigatórioDescrição
searchquerystringNãoBusca pelo nome.
statusquerybooleanNão`true` só os ativos; `false` só os desativados. Sem o filtro, todos.
per_pagequeryintegerNão—

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "code": null,
            "name": "string",
            "description": null,
            "public_description": null,
            "progress": "Em andamento",
            "color": "string",
            "show_technician": true,
            "show_in_delivery_queue": true,
            "pauses_deadline": true,
            "allow_internal_observations": true,
            "manage_order": true,
            "allow_edit_budget": true,
            "generate_commission": true,
            "email_id": 1,
            "active": true,
            "created_at": "2026-10-20T10:00:00-03:00",
            "updated_at": "2026-10-20T10:00:00-03:00"
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de status de OS401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente429 Cota por minuto da credencial excedida
POST /api/v1/service-order-statuses

Cadastra status de OS

Exige `service-orders:settings` e a permissão Status de OS (criar). Mesma regra da tela; a mesma `Idempotency-Key` com o mesmo corpo devolve o cadastro original com `Idempotency-Replayed: true`.

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.
progressstringSimValores: Em andamento, Concluído.
colorstringSimAté 20 caracteres.
show_technicianbooleanNão—
show_in_delivery_queuebooleanNão—
pauses_deadlinebooleanNão—
allow_internal_observationsbooleanNão—
manage_orderbooleanNão—
allow_edit_budgetbooleanNão—
generate_commissionbooleanNão—
descriptionstring | nullNão—
public_descriptionstring | nullNão—
email_idinteger | nullNão—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-order-statuses" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","progress":"Em andamento","color":"string","show_technician":true,"show_in_delivery_queue":true,"pauses_deadline":true,"allow_internal_observations":true,"manage_order":true,"allow_edit_budget":true,"generate_commission":true,"description":null,"public_description":null,"email_id":1}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1,
        "code": null,
        "name": "string",
        "description": null,
        "public_description": null,
        "progress": "Em andamento",
        "color": "string",
        "show_technician": true,
        "show_in_delivery_queue": true,
        "pauses_deadline": true,
        "allow_internal_observations": true,
        "manage_order": true,
        "allow_edit_budget": true,
        "generate_commission": true,
        "email_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Status de os cadastrado (ou reapresentado pela mesma chave idempotente)401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 Dados inválidos429 Cota por minuto da credencial excedida
GET /api/v1/service-order-statuses/{statusId}

Consulta status de OS

Exige `service-orders:read` e a permissão Status de OS (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-statuses/{statusId}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "code": null,
        "name": "string",
        "description": null,
        "public_description": null,
        "progress": "Em andamento",
        "color": "string",
        "show_technician": true,
        "show_in_delivery_queue": true,
        "pauses_deadline": true,
        "allow_internal_observations": true,
        "manage_order": true,
        "allow_edit_budget": true,
        "generate_commission": true,
        "email_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Status de os encontrado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
PATCH /api/v1/service-order-statuses/{statusId}

Edita status de OS

Exige `service-orders:settings` e a permissão Status de OS (editar). Edição parcial: campo omitido fica como está.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
progressstringNãoValores: Em andamento, Concluído.
colorstringNãoAté 20 caracteres.
show_technicianbooleanNão—
show_in_delivery_queuebooleanNão—
pauses_deadlinebooleanNão—
allow_internal_observationsbooleanNão—
manage_orderbooleanNão—
allow_edit_budgetbooleanNão—
generate_commissionbooleanNão—
descriptionstring | nullNão—
public_descriptionstring | nullNão—
email_idinteger | nullNão—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/service-order-statuses/{statusId}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","progress":"Em andamento","color":"string","show_technician":true,"show_in_delivery_queue":true,"pauses_deadline":true,"allow_internal_observations":true,"manage_order":true,"allow_edit_budget":true,"generate_commission":true,"description":null,"public_description":null,"email_id":1}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "code": null,
        "name": "string",
        "description": null,
        "public_description": null,
        "progress": "Em andamento",
        "color": "string",
        "show_technician": true,
        "show_in_delivery_queue": true,
        "pauses_deadline": true,
        "allow_internal_observations": true,
        "manage_order": true,
        "allow_edit_budget": true,
        "generate_commission": true,
        "email_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Status de os 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 excedida
POST /api/v1/service-order-statuses/{statusId}/activate

Habilita status de OS

Exige `service-orders:settings` e a permissão Status de OS (desabilitar). Religa o cadastro. Repetir em um já ativo não muda nada.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-order-statuses/{statusId}/activate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "code": null,
        "name": "string",
        "description": null,
        "public_description": null,
        "progress": "Em andamento",
        "color": "string",
        "show_technician": true,
        "show_in_delivery_queue": true,
        "pauses_deadline": true,
        "allow_internal_observations": true,
        "manage_order": true,
        "allow_edit_budget": true,
        "generate_commission": true,
        "email_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Situação aplicada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida
POST /api/v1/service-order-statuses/{statusId}/deactivate

Desabilita status de OS

Exige `service-orders:settings` e a permissão Status de OS (desabilitar). Desliga o cadastro e registra quem arquivou. Repetir em um já desativado não muda nada.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-order-statuses/{statusId}/deactivate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "code": null,
        "name": "string",
        "description": null,
        "public_description": null,
        "progress": "Em andamento",
        "color": "string",
        "show_technician": true,
        "show_in_delivery_queue": true,
        "pauses_deadline": true,
        "allow_internal_observations": true,
        "manage_order": true,
        "allow_edit_budget": true,
        "generate_commission": true,
        "email_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Situação aplicada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida
GET /api/v1/service-types

Lista tipos de serviço

Exige `service-orders:read` e a permissão Tipos de Serviço (ver). Mostra só os tipos das lojas do usuário (administrador geral vê todas).

Parâmetros

NomeTipoObrigatórioDescrição
searchquerystringNãoBusca pelo nome.
statusquerybooleanNão`true` só os ativos; `false` só os desativados. Sem o filtro, todos.
per_pagequeryintegerNão—

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "name": "string",
            "store_id": 1,
            "equipment_type_id": 1,
            "opening_form_id": 1,
            "technical_form_id": 1,
            "closing_form_id": 1,
            "shipping_form_id": 1,
            "requires_budget": true,
            "has_warranty": true,
            "warranty_days": 1,
            "warranty_description": null,
            "has_deadline": true,
            "deadline_days": 1,
            "deadline_description": null,
            "ready_in_days": 1,
            "ready_until": null,
            "printer_models": [
                {
                    "id": 1,
                    "name": "string"
                }
            ],
            "active": true,
            "created_at": "2026-10-20T10:00:00-03:00",
            "updated_at": "2026-10-20T10:00:00-03:00"
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de tipos de serviço401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente429 Cota por minuto da credencial excedida
POST /api/v1/service-types

Cadastra tipo de serviço

Exige `service-orders:settings` e a permissão Tipos de Serviço (criar). Mesma regra da tela; a mesma `Idempotency-Key` com o mesmo corpo devolve o cadastro original com `Idempotency-Replayed: true`.

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.
store_idintegerSimLoja entre as do usuário da credencial.
equipment_type_idintegerSim—
opening_form_idinteger | nullNão—
technical_form_idinteger | nullNão—
closing_form_idinteger | nullNão—
shipping_form_idinteger | nullNão—
requires_budgetbooleanNãoPadrão `true` no cadastro.
has_warrantybooleanNão—
warranty_daysinteger | nullNão—
warranty_descriptionstring | nullNãoAté 2000 caracteres.
has_deadlinebooleanNão—
deadline_daysinteger | nullNão—
deadline_descriptionstring | nullNãoAté 2000 caracteres.
ready_in_daysinteger | nullNãoPrazo de entrega padrão, em dias úteis depois da aprovação (0 = no mesmo dia; até 90).
ready_untilstring | nullNãoHora do prazo de entrega padrão (HH:MM, fuso do cliente).
printer_model_idsarray<integer>NãoModelos de impressora ativos do tipo de equipamento (ou do tipo pai). Enviado, substitui a lista inteira.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-types" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","store_id":1,"equipment_type_id":1,"opening_form_id":1,"technical_form_id":1,"closing_form_id":1,"shipping_form_id":1,"requires_budget":true,"has_warranty":true,"warranty_days":1,"warranty_description":null,"has_deadline":true,"deadline_days":1,"deadline_description":null,"ready_in_days":1,"ready_until":null,"printer_model_ids":[1]}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1,
        "name": "string",
        "store_id": 1,
        "equipment_type_id": 1,
        "opening_form_id": 1,
        "technical_form_id": 1,
        "closing_form_id": 1,
        "shipping_form_id": 1,
        "requires_budget": true,
        "has_warranty": true,
        "warranty_days": 1,
        "warranty_description": null,
        "has_deadline": true,
        "deadline_days": 1,
        "deadline_description": null,
        "ready_in_days": 1,
        "ready_until": null,
        "printer_models": [
            {
                "id": 1,
                "name": "string"
            }
        ],
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Tipo de serviço cadastrado (ou reapresentado pela mesma chave idempotente)401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 Dados inválidos429 Cota por minuto da credencial excedida
GET /api/v1/service-types/{serviceTypeId}

Consulta tipo de serviço

Exige `service-orders:read` e a permissão Tipos de Serviço (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-types/{serviceTypeId}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "store_id": 1,
        "equipment_type_id": 1,
        "opening_form_id": 1,
        "technical_form_id": 1,
        "closing_form_id": 1,
        "shipping_form_id": 1,
        "requires_budget": true,
        "has_warranty": true,
        "warranty_days": 1,
        "warranty_description": null,
        "has_deadline": true,
        "deadline_days": 1,
        "deadline_description": null,
        "ready_in_days": 1,
        "ready_until": null,
        "printer_models": [
            {
                "id": 1,
                "name": "string"
            }
        ],
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Tipo de serviço encontrado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
PATCH /api/v1/service-types/{serviceTypeId}

Edita tipo de serviço

Exige `service-orders:settings` e a permissão Tipos de Serviço (editar). Edição parcial: campo omitido fica como está.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
store_idintegerNãoLoja entre as do usuário da credencial.
equipment_type_idintegerNão—
opening_form_idinteger | nullNão—
technical_form_idinteger | nullNão—
closing_form_idinteger | nullNão—
shipping_form_idinteger | nullNão—
requires_budgetbooleanNãoPadrão `true` no cadastro.
has_warrantybooleanNão—
warranty_daysinteger | nullNão—
warranty_descriptionstring | nullNãoAté 2000 caracteres.
has_deadlinebooleanNão—
deadline_daysinteger | nullNão—
deadline_descriptionstring | nullNãoAté 2000 caracteres.
ready_in_daysinteger | nullNãoPrazo de entrega padrão, em dias úteis depois da aprovação (0 = no mesmo dia; até 90).
ready_untilstring | nullNãoHora do prazo de entrega padrão (HH:MM, fuso do cliente).
printer_model_idsarray<integer>NãoModelos de impressora ativos do tipo de equipamento (ou do tipo pai). Enviado, substitui a lista inteira.

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/service-types/{serviceTypeId}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","store_id":1,"equipment_type_id":1,"opening_form_id":1,"technical_form_id":1,"closing_form_id":1,"shipping_form_id":1,"requires_budget":true,"has_warranty":true,"warranty_days":1,"warranty_description":null,"has_deadline":true,"deadline_days":1,"deadline_description":null,"ready_in_days":1,"ready_until":null,"printer_model_ids":[1]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "store_id": 1,
        "equipment_type_id": 1,
        "opening_form_id": 1,
        "technical_form_id": 1,
        "closing_form_id": 1,
        "shipping_form_id": 1,
        "requires_budget": true,
        "has_warranty": true,
        "warranty_days": 1,
        "warranty_description": null,
        "has_deadline": true,
        "deadline_days": 1,
        "deadline_description": null,
        "ready_in_days": 1,
        "ready_until": null,
        "printer_models": [
            {
                "id": 1,
                "name": "string"
            }
        ],
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Tipo de serviço 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 excedida
POST /api/v1/service-types/{serviceTypeId}/activate

Habilita tipo de serviço

Exige `service-orders:settings` e a permissão Tipos de Serviço (desabilitar). Religa o cadastro. Repetir em um já ativo não muda nada.

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "store_id": 1,
        "equipment_type_id": 1,
        "opening_form_id": 1,
        "technical_form_id": 1,
        "closing_form_id": 1,
        "shipping_form_id": 1,
        "requires_budget": true,
        "has_warranty": true,
        "warranty_days": 1,
        "warranty_description": null,
        "has_deadline": true,
        "deadline_days": 1,
        "deadline_description": null,
        "ready_in_days": 1,
        "ready_until": null,
        "printer_models": [
            {
                "id": 1,
                "name": "string"
            }
        ],
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Situação aplicada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida
POST /api/v1/service-types/{serviceTypeId}/deactivate

Desabilita tipo de serviço

Exige `service-orders:settings` e a permissão Tipos de Serviço (desabilitar). Desliga o cadastro e registra quem arquivou. Repetir em um já desativado não muda nada.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-types/{serviceTypeId}/deactivate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "store_id": 1,
        "equipment_type_id": 1,
        "opening_form_id": 1,
        "technical_form_id": 1,
        "closing_form_id": 1,
        "shipping_form_id": 1,
        "requires_budget": true,
        "has_warranty": true,
        "warranty_days": 1,
        "warranty_description": null,
        "has_deadline": true,
        "deadline_days": 1,
        "deadline_description": null,
        "ready_in_days": 1,
        "ready_until": null,
        "printer_models": [
            {
                "id": 1,
                "name": "string"
            }
        ],
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Situação aplicada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida
POST /api/v1/service-types/{serviceTypeId}/duplicate

Duplica um tipo de serviço

Exige `service-orders:settings` e a permissão Tipos de Serviço (criar). Cria uma cópia ativa com as mesmas configurações e modelos, com o nome "(cópia)". Uma vez por `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.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-types/{serviceTypeId}/duplicate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001"

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1,
        "name": "string",
        "store_id": 1,
        "equipment_type_id": 1,
        "opening_form_id": 1,
        "technical_form_id": 1,
        "closing_form_id": 1,
        "shipping_form_id": 1,
        "requires_budget": true,
        "has_warranty": true,
        "warranty_days": 1,
        "warranty_description": null,
        "has_deadline": true,
        "deadline_days": 1,
        "deadline_description": null,
        "ready_in_days": 1,
        "ready_until": null,
        "printer_models": [
            {
                "id": 1,
                "name": "string"
            }
        ],
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Cópia criada (ou reapresentada pela mesma chave idempotente)401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)429 Cota por minuto da credencial excedida
GET /api/v1/service-types/{serviceTypeId}/printer-models

Lista os modelos de impressora de um tipo de serviço

Exige `service-orders:read` e a permissão Tipos de Serviço (editar), como na tela, que usa a lista para copiar a seleção.

Exemplo de requisição

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

Exemplo de resposta JSON

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

Respostas possíveis

200 Modelos relacionados401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
GET /api/v1/equipment-types

Lista tipos de equipamento

Exige `service-orders:read` e a permissão Tipos de Equipamentos (ver). O nome é único.

Parâmetros

NomeTipoObrigatórioDescrição
searchquerystringNãoBusca pelo nome.
statusquerybooleanNão`true` só os ativos; `false` só os desativados. Sem o filtro, todos.
per_pagequeryintegerNão—

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "name": "string",
            "parent_equipment_type_id": 1,
            "active": true,
            "created_at": "2026-10-20T10:00:00-03:00",
            "updated_at": "2026-10-20T10:00:00-03:00"
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de tipos de equipamento401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente429 Cota por minuto da credencial excedida
POST /api/v1/equipment-types

Cadastra tipo de equipamento

Exige `service-orders:settings` e a permissão Tipos de Equipamentos (criar). Mesma regra da tela; a mesma `Idempotency-Key` com o mesmo corpo devolve o cadastro original com `Idempotency-Replayed: true`.

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.
parent_equipment_type_idinteger | nullNãoNão pode ser o próprio tipo.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/equipment-types" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","parent_equipment_type_id":1}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1,
        "name": "string",
        "parent_equipment_type_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Tipo de equipamento cadastrado (ou reapresentado pela mesma chave idempotente)401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 Dados inválidos429 Cota por minuto da credencial excedida
GET /api/v1/equipment-types/{equipmentTypeId}

Consulta tipo de equipamento

Exige `service-orders:read` e a permissão Tipos de Equipamentos (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/equipment-types/{equipmentTypeId}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "parent_equipment_type_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Tipo de equipamento encontrado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
PATCH /api/v1/equipment-types/{equipmentTypeId}

Edita tipo de equipamento

Exige `service-orders:settings` e a permissão Tipos de Equipamentos (editar). Edição parcial: campo omitido fica como está.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
parent_equipment_type_idinteger | nullNãoNão pode ser o próprio tipo.

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/equipment-types/{equipmentTypeId}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","parent_equipment_type_id":1}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "parent_equipment_type_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Tipo de equipamento 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 excedida
POST /api/v1/equipment-types/{equipmentTypeId}/activate

Habilita tipo de equipamento

Exige `service-orders:settings` e a permissão Tipos de Equipamentos (desabilitar). Religa o cadastro. Repetir em um já ativo não muda nada.

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "parent_equipment_type_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Situação aplicada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida
POST /api/v1/equipment-types/{equipmentTypeId}/deactivate

Desabilita tipo de equipamento

Exige `service-orders:settings` e a permissão Tipos de Equipamentos (desabilitar). Desliga o cadastro e registra quem arquivou. Repetir em um já desativado não muda nada.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/equipment-types/{equipmentTypeId}/deactivate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "parent_equipment_type_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Situação aplicada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida
GET /api/v1/service-order-tags

Lista tags de prioridade de OS

Exige `service-orders:read` e a permissão Gestão de OS (ver). A lista vem na ordem de prioridade.

Parâmetros

NomeTipoObrigatórioDescrição
searchquerystringNãoBusca pelo nome.
statusquerybooleanNão`true` só os ativos; `false` só os desativados. Sem o filtro, todos.
per_pagequeryintegerNão—

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "name": "string",
            "color": "string",
            "priority_order": 1,
            "description": null,
            "active": true,
            "created_at": "2026-10-20T10:00:00-03:00",
            "updated_at": "2026-10-20T10:00:00-03:00"
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de tags de prioridade de OS401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente429 Cota por minuto da credencial excedida
POST /api/v1/service-order-tags

Cadastra tag de OS

Exige `service-orders:settings` e a permissão Gestão de OS (criar). Mesma regra da tela; a mesma `Idempotency-Key` com o mesmo corpo devolve o cadastro original com `Idempotency-Replayed: true`.

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.
colorstringSimAté 20 caracteres.
priority_orderinteger | nullNão—
descriptionstring | nullNão—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-order-tags" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","color":"string","priority_order":1,"description":null}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1,
        "name": "string",
        "color": "string",
        "priority_order": 1,
        "description": null,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Tag de os cadastrado (ou reapresentado pela mesma chave idempotente)401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 Dados inválidos429 Cota por minuto da credencial excedida
GET /api/v1/service-order-tags/{tagId}

Consulta tag de OS

Exige `service-orders:read` e a permissão Gestão de OS (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-tags/{tagId}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "color": "string",
        "priority_order": 1,
        "description": null,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Tag de os encontrado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
PATCH /api/v1/service-order-tags/{tagId}

Edita tag de OS

Exige `service-orders:settings` e a permissão Gestão de OS (criar, como o modal de tags). Edição parcial: campo omitido fica como está.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
colorstringNãoAté 20 caracteres.
priority_orderinteger | nullNão—
descriptionstring | nullNão—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/service-order-tags/{tagId}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","color":"string","priority_order":1,"description":null}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "color": "string",
        "priority_order": 1,
        "description": null,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Tag de os 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 excedida
POST /api/v1/service-order-tags/{tagId}/activate

Habilita tag de OS

Exige `service-orders:settings` e a permissão Gestão de OS (criar, como o modal de tags). Religa o cadastro. Repetir em um já ativo não muda nada.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-order-tags/{tagId}/activate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "color": "string",
        "priority_order": 1,
        "description": null,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Situação aplicada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida
POST /api/v1/service-order-tags/{tagId}/deactivate

Desabilita tag de OS

Exige `service-orders:settings` e a permissão Gestão de OS (criar, como o modal de tags). Desliga o cadastro e registra quem arquivou. Repetir em um já desativado não muda nada.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-order-tags/{tagId}/deactivate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "name": "string",
        "color": "string",
        "priority_order": 1,
        "description": null,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Situação aplicada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida
GET /api/v1/clients/{clientId}/equipments

Lista os equipamentos de um cliente

Exige `service-orders:read` e a permissão Equipamentos (ver). Sem `include_inactive`, só os ativos, como na tela.

Parâmetros

NomeTipoObrigatórioDescrição
type_equipment_idqueryintegerNãoFiltra pelo tipo de equipamento.
include_inactivequerybooleanNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/clients/{clientId}/equipments" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "client_id": 1,
            "type_equipment_id": 1,
            "type": null,
            "model": {
                "id": 1,
                "name": "string",
                "brand": null,
                "sub_brand": null
            },
            "serial": null,
            "description": null,
            "version": 1,
            "hitching_id": 1,
            "active": true,
            "created_at": "2026-10-20T10:00:00-03:00",
            "updated_at": "2026-10-20T10:00:00-03:00"
        }
    ]
}

Respostas possíveis

200 Equipamentos do cliente401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
POST /api/v1/clients/{clientId}/equipments

Cadastra um equipamento no cliente

Exige `service-orders:write` e a permissão Equipamentos (criar). Mesmo cadastro da abertura de OS e da ficha do cliente; uma vez por `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
type_equipment_idintegerSim—
model_idintegerSimModelo de impressora/equipamento.
serialstring | nullNãoAté 120 caracteres.
descriptionstring | nullNãoAté 2000 caracteres.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/clients/{clientId}/equipments" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"type_equipment_id":1,"model_id":1,"serial":null,"description":null}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 1,
        "client_id": 1,
        "type_equipment_id": 1,
        "type": null,
        "model": {
            "id": 1,
            "name": "string",
            "brand": null,
            "sub_brand": null
        },
        "serial": null,
        "description": null,
        "version": 1,
        "hitching_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

201 Equipamento cadastrado (ou reapresentado pela mesma chave idempotente)401 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údo, ou ação não permitida no estado atual do recurso (`invalid_transition`)422 Dados inválidos429 Cota por minuto da credencial excedida
GET /api/v1/client-equipments/{equipmentId}

Consulta um equipamento do cliente

Exige `service-orders:read` e a permissão Equipamentos (ver).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/client-equipments/{equipmentId}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "client_id": 1,
        "type_equipment_id": 1,
        "type": null,
        "model": {
            "id": 1,
            "name": "string",
            "brand": null,
            "sub_brand": null
        },
        "serial": null,
        "description": null,
        "version": 1,
        "hitching_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Equipamento encontrado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
PATCH /api/v1/client-equipments/{equipmentId}

Edita um equipamento do cliente

Exige `service-orders:write` e a permissão Equipamentos (editar). Edição parcial; a versão sobe.

Corpo da requisição

CampoTipoObrigatórioDescrição
type_equipment_idintegerNão—
model_idintegerNãoModelo de impressora/equipamento.
serialstring | nullNãoAté 120 caracteres.
descriptionstring | nullNãoAté 2000 caracteres.

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/client-equipments/{equipmentId}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"type_equipment_id":1,"model_id":1,"serial":null,"description":null}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "client_id": 1,
        "type_equipment_id": 1,
        "type": null,
        "model": {
            "id": 1,
            "name": "string",
            "brand": null,
            "sub_brand": null
        },
        "serial": null,
        "description": null,
        "version": 1,
        "hitching_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Equipamento 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 excedida
POST /api/v1/client-equipments/{equipmentId}/activate

Ativa um equipamento do cliente

Exige `service-orders:write` e a permissão Equipamentos (desabilitar). Repetir em um já ativo não muda nada.

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "client_id": 1,
        "type_equipment_id": 1,
        "type": null,
        "model": {
            "id": 1,
            "name": "string",
            "brand": null,
            "sub_brand": null
        },
        "serial": null,
        "description": null,
        "version": 1,
        "hitching_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Situação aplicada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida
POST /api/v1/client-equipments/{equipmentId}/deactivate

Desativa um equipamento do cliente

Exige `service-orders:write` e a permissão Equipamentos (desabilitar). Sai da lista padrão do cliente. Repetir em um já desativado não muda nada.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/client-equipments/{equipmentId}/deactivate" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 1,
        "client_id": 1,
        "type_equipment_id": 1,
        "type": null,
        "model": {
            "id": 1,
            "name": "string",
            "brand": null,
            "sub_brand": null
        },
        "serial": null,
        "description": null,
        "version": 1,
        "hitching_id": 1,
        "active": true,
        "created_at": "2026-10-20T10:00:00-03:00",
        "updated_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Situação aplicada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida
GET /api/v1/service-order-delivery-queue

Lista a fila de entregas

Lista as OS em status marcados para a Fila de Entregas (prontas para entrega ou retirada), nas lojas do usuário responsável pela credencial, com o tempo parado na fila e a situação do último aviso enviado ao cliente. Sem ordenação, a fila sai das OS paradas há mais tempo. Exige `Gestão de OS: visualizar` e `service-orders:read`.

Parâmetros

NomeTipoObrigatórioDescrição
status_id[]queryarray<integer>NãoFiltra pelos status da fila.
waiting_rangequerystringNãoTempo parado na fila: até 2 dias, de 3 a 6 dias ou 7 dias ou mais.
searchquerystringNãoBusca pelo número da OS, nome do cliente, serial ou modelo do equipamento.
order_byquerystringNão—
directionquerystringNão—
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-delivery-queue" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "service_order_id": 2262,
            "is_draft": false,
            "status": {
                "name": "Disponível para retirada",
                "color": "#50CD89"
            },
            "client": {
                "id": 812,
                "name": "Gráfica Exemplo"
            },
            "equipment": {
                "id": 455,
                "serial": "X3B7-0091",
                "model": "EcoTank L3250",
                "type": "Impressora"
            },
            "responsible_technician": "Carlos Souza",
            "store": "Loja Centro",
            "waiting_since": "2026-10-22T16:40:00-03:00",
            "waiting_days": 5,
            "communication": {
                "state": "waiting",
                "reason": null,
                "last_dispatch_id": 88,
                "scheduled_at": null,
                "last_sent_at": "2026-10-23T09:00:00-03:00",
                "last_reply_at": null,
                "channels": [
                    "whatsapp"
                ]
            }
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página da fila de entregas401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos
GET /api/v1/service-order-delivery-queue/channels

Lista os canais de disparo da fila de entregas

Números de WhatsApp conectados no atendimento e modelos de e-mail ativos que podem ser usados no disparo. Exige `Gestão de OS: visualizar` e `service-orders:read`.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-delivery-queue/channels" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

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

Respostas possíveis

200 Canais disponíveis401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente
GET /api/v1/service-order-delivery-queue/templates

Lista os modelos de WhatsApp de um número

Modelos aprovados pela Meta e não arquivados do número de WhatsApp escolhido. Exige `Gestão de OS: visualizar` e `service-orders:read`.

Parâmetros

NomeTipoObrigatórioDescrição
sac_idqueryintegerSimNúmero de WhatsApp (canal do atendimento).

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-delivery-queue/templates" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

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

Respostas possíveis

200 Modelos aprovados do número401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos
GET /api/v1/service-order-delivery-queue/templates/{template}/variables

Consulta as variáveis de um modelo de WhatsApp

Variáveis do cabeçalho e do corpo do modelo e o catálogo de campos (geral, cliente e OS) que podem preenchê-las. Use as chaves em `channels.whatsapp.variables` ao criar o disparo. Exige `Gestão de OS: visualizar` e `service-orders:read`.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-delivery-queue/templates/{template}/variables" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "template_id": 41,
        "placeholders": {
            "header": [],
            "body": [
                "1",
                "2"
            ]
        },
        "field_options": []
    }
}

Respostas possíveis

200 Variáveis do modelo401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
POST /api/v1/service-order-delivery-queue/recipients-preview

Revisa os destinatários antes do disparo

Mostra, para as OS escolhidas que continuam na fila de entregas e nas lojas do usuário, o cliente, o equipamento, o WhatsApp e o e-mail que receberão o aviso. Não grava nada. Exige `Gestão de OS: visualizar` e `service-orders:read`.

Corpo da requisição

CampoTipoObrigatórioDescrição
service_order_idsarray<integer>Sim—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-order-delivery-queue/recipients-preview" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"service_order_ids":[1]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "total": 1,
        "recipients": [
            {
                "service_order_id": 2262,
                "client_name": "Gráfica Exemplo",
                "equipment": "Epson EcoTank L3250",
                "whatsapp": "5548999990000",
                "email": "compras@graficaexemplo.com.br"
            }
        ]
    }
}

Respostas possíveis

200 Revisão dos destinatários401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos
GET /api/v1/service-order-dispatches

Lista os disparos da fila de entregas

Histórico dos disparos de aviso criados pela Fila de Entregas que tenham OS das lojas do usuário, com os totais de destinatários. Exige `Gestão de OS: visualizar` e `service-orders:read`.

Parâmetros

NomeTipoObrigatórioDescrição
searchquerystringNãoBusca pelo nome do modelo, por quem disparou ou pelo número de uma OS do disparo.
order_byquerystringNão—
directionquerystringNão—
per_pagequeryintegerNão—

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 88,
            "channel": "whatsapp",
            "status": "sent",
            "dispatch_mode": "now",
            "scheduled_at": null,
            "template": {
                "name": "aviso_retirada",
                "whatsapp_number": "Atendimento loja centro"
            },
            "created_by": "Ana Lima",
            "totals": {
                "recipients": 12,
                "sent": 11,
                "failed": 1,
                "replied": 4
            },
            "created_at": "2026-10-23T09:00:00-03:00"
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de disparos401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos
POST /api/v1/service-order-dispatches

Cria um disparo de aviso da fila de entregas

Cria um disparo por canal ligado (WhatsApp e/ou e-mail) para as OS escolhidas que continuam na fila de entregas, com um destinatário por OS. Com `dispatch_mode: now` o envio entra na fila na hora; com `scheduled` é agendado para `scheduled_at`. Mesmas regras do assistente da tela: ao menos um canal ligado, modelo de WhatsApp aprovado do número escolhido e modelo de e-mail ativo. A mesma `Idempotency-Key` com o mesmo corpo devolve o mesmo lote. Exige `Gestão de OS: editar` e `service-orders:dispatch`.

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
service_order_idsarray<integer>SimOS da fila de entregas.
channelsobjectSimAo menos um canal precisa estar ligado.
dispatch_modestringSimValores: now, scheduled.
scheduled_atstring (date-time)NãoObrigatório no modo agendado; precisa ser futuro.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/service-order-dispatches" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"service_order_ids":[1],"channels":{"whatsapp":{"enabled":true,"sac_id":1,"template_id":1,"variables":[]},"email":{"enabled":true,"email_template_id":1}},"dispatch_mode":"now","scheduled_at":"2026-10-20T10:00:00-03:00"}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": [
        {
            "id": 88,
            "channel": "whatsapp",
            "status": "sent",
            "dispatch_mode": "now",
            "scheduled_at": null,
            "template": {
                "name": "aviso_retirada",
                "whatsapp_number": "Atendimento loja centro"
            },
            "created_by": "Ana Lima",
            "totals": {
                "recipients": 12,
                "sent": 11,
                "failed": 1,
                "replied": 4
            },
            "created_at": "2026-10-23T09:00:00-03:00"
        }
    ]
}

Respostas possíveis

201 Disparos criados (um por canal) ou reapresentados pela mesma chave idempotente401 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álidos
GET /api/v1/service-order-dispatches/{dispatch}/recipients

Lista os destinatários de um disparo

Destinatários do disparo nas lojas do usuário, com o endereço usado e o desfecho de cada envio (da falha até a resposta do cliente). Exige `Gestão de OS: visualizar` e `service-orders:read`.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-dispatches/{dispatch}/recipients" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 1,
            "service_order_id": 1,
            "client": {
                "id": 1,
                "name": "string"
            },
            "address": null,
            "outcome": "pending",
            "error": {
                "code": null,
                "message": null,
                "platform_detail": null
            },
            "sent_at": "2026-10-20T10:00:00-03:00",
            "failed_at": "2026-10-20T10:00:00-03:00",
            "replied_at": "2026-10-20T10:00:00-03:00"
        }
    ]
}

Respostas possíveis

200 Destinatários do disparo401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
GET /api/v1/service-order-reports/production

Relatório de produção das OS

Mesmos números da aba Produção da tela de relatórios, para o mês de referência e as lojas do usuário: indicadores, equipamentos entregues por técnico, finalizações por dia, entregas por tipo de equipamento, contribuição de cada técnico e últimas entregas. As séries vêm prontas para gráfico (rótulos, conjuntos e cores). Sem mês ou ano, vale o mês atual. Exige `Relatórios de OS: ver produção` e `service-orders:reports`.

Parâmetros

NomeTipoObrigatórioDescrição
reference_monthqueryintegerNãoMês de referência (1 a 12). Sem ele, o mês atual.
reference_yearqueryintegerNãoAno de referência. Sem ele, o ano atual.
store_idqueryintegerNãoRecorta numa loja; o relatório sempre respeita as lojas do usuário.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-reports/production" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "indicators": {
            "totalDelivered": 1,
            "techniciansCount": 1,
            "averagePerTechnician": "string",
            "topTechnicianName": "string",
            "topTechnicianTotal": 1,
            "periodLabel": null
        },
        "deliveredByTechnicians": [],
        "finishedPerDay": [],
        "deliveredByType": [],
        "technicianContribution": [],
        "deliveriesByTechnicianList": [
            []
        ],
        "latestDeliveries": [
            []
        ]
    }
}

Respostas possíveis

200 Relatório de produção401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos
GET /api/v1/service-order-reports/billing

Relatório de faturamento das OS

Mesmos números da aba Faturamento da tela de relatórios, para o mês de referência e as lojas do usuário: indicadores do período, comparação mensal e tipos de serviço mais faturados. Sem mês ou ano, vale o mês atual. Exige `Relatórios de OS: ver faturamento` e `service-orders:reports`.

Parâmetros

NomeTipoObrigatórioDescrição
reference_monthqueryintegerNãoMês de referência (1 a 12). Sem ele, o mês atual.
reference_yearqueryintegerNãoAno de referência. Sem ele, o ano atual.
store_idqueryintegerNãoRecorta numa loja; o relatório sempre respeita as lojas do usuário.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-reports/billing" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "indicators": [],
        "monthlyComparison": [],
        "topServiceTypes": [
            []
        ]
    }
}

Respostas possíveis

200 Relatório de faturamento401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos
GET /api/v1/service-order-queue

Consulta a fila do técnico

A mesma fila do Cockpit do Técnico: o técnico vê a própria; quem gerencia o Cockpit vê a equipe das suas lojas ou o técnico escolhido em `technician_id`. `executable` segue a ordem de execução (a primeira é o serviço principal; vale a ordem manual do gestor quando houver) e `waiting` traz as OS com impedimento aguardando liberação. Técnico fora do alcance do gestor responde 404. Exige `Cockpit do Técnico: visualizar` e `service-orders:read`.

Parâmetros

NomeTipoObrigatórioDescrição
technician_idqueryintegerNãoTécnico escolhido (só para quem gerencia o Cockpit).

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "technician": {
            "id": 1,
            "name": "string"
        },
        "manages_cockpit": true,
        "is_manual": true,
        "executable": [
            {
                "service_order_id": 2262,
                "status": {
                    "code": "orcamento_aprovado",
                    "name": "Orçamento aprovado",
                    "color": "#50CD89"
                },
                "priority": {
                    "level": "high",
                    "name": "Alta",
                    "color": "#F1416C",
                    "reason": "Cliente com contrato"
                },
                "equipment": {
                    "name": "Epson EcoTank L3250",
                    "type": "Impressora"
                },
                "service_type": "Manutenção de impressora",
                "technician": {
                    "id": 14,
                    "name": "Carlos Souza"
                },
                "opened_at": "2026-10-20T10:12:00-03:00",
                "due_at": "2026-10-28T18:00:00-03:00",
                "deadline_band": "on_time",
                "is_started": false,
                "is_shipping": false,
                "needs_start": true,
                "impediment": null,
                "changed_at": "2026-10-26T15:30:00-03:00"
            }
        ],
        "waiting": [
            {
                "service_order_id": 2262,
                "status": {
                    "code": "orcamento_aprovado",
                    "name": "Orçamento aprovado",
                    "color": "#50CD89"
                },
                "priority": {
                    "level": "high",
                    "name": "Alta",
                    "color": "#F1416C",
                    "reason": "Cliente com contrato"
                },
                "equipment": {
                    "name": "Epson EcoTank L3250",
                    "type": "Impressora"
                },
                "service_type": "Manutenção de impressora",
                "technician": {
                    "id": 14,
                    "name": "Carlos Souza"
                },
                "opened_at": "2026-10-20T10:12:00-03:00",
                "due_at": "2026-10-28T18:00:00-03:00",
                "deadline_band": "on_time",
                "is_started": false,
                "is_shipping": false,
                "needs_start": true,
                "impediment": null,
                "changed_at": "2026-10-26T15:30:00-03:00"
            }
        ]
    }
}

Respostas possíveis

200 Fila do técnico401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado
GET /api/v1/service-order-technician-queues

Lista as filas editáveis dos técnicos

Filas completas dos técnicos que o gestor alcança (ou só do `technician_id`), com a `version` de cada fila e o `meta.loaded_at` da leitura, que devem voltar na gravação. Fila com OS de loja fora do acesso do gestor vem `blocked`, sem as OS. Exige `Cockpit do Técnico: gerenciar cockpit` e `service-orders:read`.

Parâmetros

NomeTipoObrigatórioDescrição
technician_idqueryintegerNãoEdita só a fila deste técnico.

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/service-order-technician-queues" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "technician": {
                "id": 1,
                "name": "string"
            },
            "version": 1,
            "is_manual": true,
            "saved_at": "2026-10-20T10:00:00-03:00",
            "saved_by": null,
            "blocked": true,
            "outside_stores": 1,
            "started_count": 1,
            "items": [
                {
                    "service_order_id": 2262,
                    "status": {
                        "code": "orcamento_aprovado",
                        "name": "Orçamento aprovado",
                        "color": "#50CD89"
                    },
                    "priority": {
                        "level": "high",
                        "name": "Alta",
                        "color": "#F1416C",
                        "reason": "Cliente com contrato"
                    },
                    "equipment": {
                        "name": "Epson EcoTank L3250",
                        "type": "Impressora"
                    },
                    "service_type": "Manutenção de impressora",
                    "technician": {
                        "id": 14,
                        "name": "Carlos Souza"
                    },
                    "opened_at": "2026-10-20T10:12:00-03:00",
                    "due_at": "2026-10-28T18:00:00-03:00",
                    "deadline_band": "on_time",
                    "is_started": false,
                    "is_shipping": false,
                    "needs_start": true,
                    "impediment": null,
                    "changed_at": "2026-10-26T15:30:00-03:00"
                }
            ],
            "waiting": [
                {
                    "service_order_id": 2262,
                    "status": {
                        "code": "orcamento_aprovado",
                        "name": "Orçamento aprovado",
                        "color": "#50CD89"
                    },
                    "priority": {
                        "level": "high",
                        "name": "Alta",
                        "color": "#F1416C",
                        "reason": "Cliente com contrato"
                    },
                    "equipment": {
                        "name": "Epson EcoTank L3250",
                        "type": "Impressora"
                    },
                    "service_type": "Manutenção de impressora",
                    "technician": {
                        "id": 14,
                        "name": "Carlos Souza"
                    },
                    "opened_at": "2026-10-20T10:12:00-03:00",
                    "due_at": "2026-10-28T18:00:00-03:00",
                    "deadline_band": "on_time",
                    "is_started": false,
                    "is_shipping": false,
                    "needs_start": true,
                    "impediment": null,
                    "changed_at": "2026-10-26T15:30:00-03:00"
                }
            ]
        }
    ],
    "meta": {
        "loaded_at": "2026-10-20T10:00:00-03:00"
    }
}

Respostas possíveis

200 Filas editáveis401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente
PUT /api/v1/service-order-technician-queues

Substitui a ordem das filas dos técnicos

Substituição total da sequência de cada fila enviada: `sequence` precisa trazer todas as OS executáveis da fila, na nova ordem. Todas as filas são conferidas antes de gravar: se alguma foi salva por outra pessoa (versão diferente) ou se uma OS entrou, saiu ou mudou de estado depois de `loaded_at`, nada é gravado e a resposta é 409 `invalid_transition` com os conflitos em `error.details.conflicts`. Enviar a ordem já vigente não grava nada (`saved: 0`). Exige `Cockpit do Técnico: gerenciar cockpit` e `service-orders:settings`.

Corpo da requisição

CampoTipoObrigatórioDescrição
queuesarray<object>Sim—

Exemplo de requisição

cURL
curl -X PUT "$MICORE_BASE_URL/service-order-technician-queues" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"queues":[{"technician_id":1,"version":1,"loaded_at":"2026-10-20T10:00:00-03:00","sequence":[1]}]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "saved": 1,
        "message": "string"
    }
}

Respostas possíveis

200 Filas gravadas401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Alguma fila mudou depois da leitura; nada (ou só parte) foi gravado422 Dados inválidos
GET /api/v1/service-order-flow

Consulta o fluxo de status das OS

Fluxo desenhado no editor (nós, conexões e o status de cada etapa) e os status ativos que podem ser usados nas etapas. Exige `Gestão de OS: visualizar` e `service-orders:read`.

Exemplo de requisição

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

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "name": "string",
        "status": "string",
        "nodes": [
            []
        ],
        "edges": [
            []
        ],
        "steps": [],
        "statuses": [
            {
                "id": 1,
                "name": "string",
                "code": null,
                "manage_order": true,
                "progress": null
            }
        ]
    }
}

Respostas possíveis

200 Fluxo atual401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente
PUT /api/v1/service-order-flow

Substitui o fluxo de status das OS

Substituição total do fluxo, como o editor da tela grava: `nodes` e `edges` inteiros. Cada nó de etapa (`type: node_os_step`) grava o status escolhido em `data.status_id` (ou nulo). Exige `Gestão de OS: criar` e `service-orders:settings`.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
statusstringNãoAté 50 caracteres.
nodesarray<object>Sim—
edgesarray<object>Sim—

Exemplo de requisição

cURL
curl -X PUT "$MICORE_BASE_URL/service-order-flow" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","status":"string","nodes":[[]],"edges":[[]]}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "name": "string",
        "status": "string",
        "nodes": [
            []
        ],
        "edges": [
            []
        ],
        "steps": [],
        "statuses": [
            {
                "id": 1,
                "name": "string",
                "code": null,
                "manage_order": true,
                "progress": null
            }
        ]
    }
}

Respostas possíveis

200 Fluxo gravado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos