Ordens de Serviço
Ciclo completo da assistência técnica: abertura, triagem, orçamento, técnico, entrega e cadastros.
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
| Etapa | Como chega |
|---|---|
abertura → em_triagem | Criar a abertura e concluir o checklist |
analise_tecnica ou orcamento | Triagem |
orcamento_realizado → aguardando_cliente → orcamento_aprovado | Respostas do orçamento |
servico_em_andamento | Técnico pega o serviço |
preparar_envio ou servico_finalizado | Finalizar o serviço |
disponivel_para_retirada → retirado | Checklist de envio, disponível e retirada |
Importante
- O status muda só pelas ações; o
PATCHedita os dados em qualquer etapa. - Ação fora da etapa responde
409invalid_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.
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
client_idquery | integer | Não | Carrega somente os equipamentos deste cliente. |
store_idquery | integer | Não | Carrega tipos de serviço desta loja acessível. |
equipment_idquery | integer | Não | Restringe os tipos de serviço ao tipo do equipamento. |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-order-options" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
store_idquery | integer | Não | Filtra por loja. |
client_idquery | integer | Não | Filtra por cliente. |
responsible_technician_idquery | integer | Não | Filtra pelo técnico responsável. |
statusquery | string | Não | Filtra pelo código interno estável do status. |
searchquery | string | Não | Busca pelo número da OS ou nome do cliente. |
per_pagequery | integer | Não | — |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-orders" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
store_id | integer | Sim | — |
client_id | integer | null | Não | — |
equipment_id | integer | null | Não | Deve pertencer ao cliente informado. |
service_type_id | integer | null | Não | Deve pertencer à loja e atender o tipo do equipamento. |
return | boolean | null | Não | — |
budget_pre_approved | number | null | Não | — |
tag_id | integer | null | Não | — |
priority_reason | string | null | Não | Até 500 caracteres. |
responsible_technician_id | integer | null | Não | — |
Exemplo de requisição
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
{
"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
/api/v1/service-orders/{serviceOrder}
Consulta uma ordem de serviço
Exemplo de requisição
curl "$MICORE_BASE_URL/service-orders/{serviceOrder}" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
store_id | integer | Não | — |
client_id | integer | null | Não | — |
equipment_id | integer | null | Não | Deve pertencer ao cliente informado. |
service_type_id | integer | null | Não | Deve pertencer à loja e atender o tipo do equipamento. |
return | boolean | Não | — |
budget_pre_approved | number | null | Não | — |
tag_id | integer | null | Não | — |
priority_reason | string | null | Não | Até 500 caracteres. |
responsible_technician_id | integer | null | Não | — |
open_by | integer | Não | Gerente da OS (quem gerencia o atendimento). |
Exemplo de requisição
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
{
"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
/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 "$MICORE_BASE_URL/service-orders/{serviceOrder}/opening-form" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
answers | object | Não | Respostas indexadas pelo id numérico da pergunta. Valores podem ser simples ou listas. |
answers_files | object | Não | Arquivos indexados pelo id da pergunta; use multipart/form-data. |
Exemplo de requisição
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
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
answers | object | Não | Respostas indexadas pelo id numérico da pergunta. Valores podem ser simples ou listas. |
answers_files | object | Não | Arquivos indexados pelo id da pergunta; use multipart/form-data. |
Exemplo de requisição
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
{
"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
/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 "$MICORE_BASE_URL/service-order-impediment-reasons" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": [
{
"id": "waiting_part",
"name": "string"
}
]
}Respostas possíveis
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
service_order_ids | array<integer> | Sim | — |
status_id | integer | Sim | Status ativo de OS. |
Exemplo de requisição
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
{
"data": {
"updated": 1
}
}Respostas possíveis
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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 -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
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tag_id | integer | null | Sim | Etiqueta de prioridade ativa. |
priority_reason | string | null | Sim | Até 500 caracteres. |
Exemplo de requisição
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
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
ready_at | string (date-time) | Sim | Data e hora de pronta (ISO 8601 com fuso), no futuro. |
reason | string | null | Não | Obrigatório ao alterar um prazo já definido. Até 500 caracteres. |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
status_id | integer | Sim | Status ativo de OS. |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
technician_id | integer | Sim | — |
next_step | string | Sim | Valores: budget, review, direct_approved. |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
text | string | null | Não | Texto do orçamento enviado ao cliente. |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
decision | string | Sim | Valores: orcamento_realizado, aguardando_cliente, aprovado, reprovado, sem_custo, sem_conserto. |
ready_at | string | null (date-time) | Não | Opcional 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 -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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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 -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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
reason | string | Sim | Valores: waiting_part, waiting_client, waiting_information, waiting_third_party, other. |
notes | string | null | Não | Obrigatório quando o motivo é `other`. Até 1000 caracteres. |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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 -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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
text | string | Sim | Texto da análise técnica. |
answers | object | Não | Checklist de análise, indexado pelo id da pergunta. |
answers_files | object | Não | Arquivos do checklist de análise (multipart). |
finish_service | boolean | Não | Encerra o serviço junto da análise. |
closing_answers | object | Não | Checklist de finalização, quando `finish_service`. |
closing_answers_files | object | Não | Arquivos do checklist de finalização (multipart). |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
answers | object | Não | Respostas indexadas pelo id numérico da pergunta. Valores podem ser simples ou listas. |
answers_files | object | Não | Arquivos das perguntas do tipo arquivo, indexados pelo id da pergunta (multipart). |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
answers | object | Não | Respostas indexadas pelo id numérico da pergunta. Valores podem ser simples ou listas. |
answers_files | object | Não | Arquivos das perguntas do tipo arquivo, indexados pelo id da pergunta (multipart). |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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 -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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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 -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
{
"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
/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 "$MICORE_BASE_URL/service-orders/{serviceOrder}/observations" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": [
{
"id": 1,
"text": "string",
"author": {
"id": 1,
"name": "string"
},
"created_at": "2026-10-20T10:00:00-03:00"
}
]
}Respostas possíveis
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
text | string | Sim | — |
Exemplo de requisição
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
{
"data": {
"id": 1,
"text": "string",
"author": {
"id": 1,
"name": "string"
},
"created_at": "2026-10-20T10:00:00-03:00"
}
}Respostas possíveis
/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 "$MICORE_BASE_URL/service-orders/{serviceOrder}/status-history" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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 "$MICORE_BASE_URL/service-orders/{serviceOrder}/checklists/{kind}" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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 "$MICORE_BASE_URL/service-orders/{serviceOrder}/files" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
file | string (binary) | Sim | Até 50 MB. |
comment | string | null | Não | Até 255 caracteres. |
Exemplo de requisição
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
{
"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
/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 -X DELETE "$MICORE_BASE_URL/service-orders/{serviceOrder}/files/{file}" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Respostas possíveis
/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 "$MICORE_BASE_URL/service-orders/{serviceOrder}/inputs" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
product_id | integer | Sim | Produto de estoque físico. |
quantity | number | null | Não | Padrão 1, no passo da unidade do produto. |
notes | string | null | Não | Até 1000 caracteres. |
Exemplo de requisição
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
{
"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
/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 "$MICORE_BASE_URL/service-orders/{serviceOrder}/input-options" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": [
{
"id": 1,
"name": "string",
"stock": 1,
"step": "string"
}
]
}Respostas possíveis
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
quantity | number | Não | — |
notes | string | null | Não | Até 1000 caracteres. |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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 -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
{
"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
/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 "$MICORE_BASE_URL/service-orders/{serviceOrder}/available-orders" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
order_id | integer | Sim | — |
items | array<object> | Sim | — |
Exemplo de requisição
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
{
"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
/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 -X DELETE "$MICORE_BASE_URL/service-orders/{serviceOrder}/order" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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 -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
{
"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
/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 "$MICORE_BASE_URL/service-orders/{serviceOrder}/keys" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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 -X POST "$MICORE_BASE_URL/service-orders/{serviceOrder}/keys/{key}/reveal" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": []
}Respostas possíveis
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
model_id | integer | Sim | Modelo de impressora. |
serial | string | Sim | Até 25 caracteres. |
info_add | string | null | Não | Até 100 caracteres. |
recovery_code | string | null | Não | Até 600 caracteres. |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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 -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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
key_id | integer | Sim | Chave disponível do produto do item. |
Exemplo de requisição
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
{
"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
/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 "$MICORE_BASE_URL/service-orders/{serviceOrder}/items" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
product_id | integer | Sim | Produto ou serviço a cobrar na OS. |
quantity | number | Não | Quantidade no passo de venda do produto (padrão 1; kit sempre inteiro). |
increment | boolean | Não | Com o produto já na OS, soma a quantidade à linha existente; false define a quantidade final. Padrão: true. |
Exemplo de requisição
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
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
quantity | number | Não | — |
price | number | Não | Preço unitário aplicado. |
price_original | number | Não | Preço unitário "de"; null remove. |
unit_discount | number | Não | Desconto por unidade; não pode passar do preço unitário. |
Exemplo de requisição
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
{
"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
/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 -X DELETE "$MICORE_BASE_URL/service-orders/{serviceOrder}/items/{item}" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Respostas possíveis
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
searchquery | string | Não | Busca pelo nome. |
statusquery | boolean | Não | `true` só os ativos; `false` só os desativados. Sem o filtro, todos. |
per_pagequery | integer | Não | — |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-order-statuses" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Até 255 caracteres. |
progress | string | Sim | Valores: Em andamento, Concluído. |
color | string | Sim | Até 20 caracteres. |
show_technician | boolean | Não | — |
show_in_delivery_queue | boolean | Não | — |
pauses_deadline | boolean | Não | — |
allow_internal_observations | boolean | Não | — |
manage_order | boolean | Não | — |
allow_edit_budget | boolean | Não | — |
generate_commission | boolean | Não | — |
description | string | null | Não | — |
public_description | string | null | Não | — |
email_id | integer | null | Não | — |
Exemplo de requisição
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
{
"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
/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 "$MICORE_BASE_URL/service-order-statuses/{statusId}" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Não | Até 255 caracteres. |
progress | string | Não | Valores: Em andamento, Concluído. |
color | string | Não | Até 20 caracteres. |
show_technician | boolean | Não | — |
show_in_delivery_queue | boolean | Não | — |
pauses_deadline | boolean | Não | — |
allow_internal_observations | boolean | Não | — |
manage_order | boolean | Não | — |
allow_edit_budget | boolean | Não | — |
generate_commission | boolean | Não | — |
description | string | null | Não | — |
public_description | string | null | Não | — |
email_id | integer | null | Não | — |
Exemplo de requisição
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
{
"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
/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 -X POST "$MICORE_BASE_URL/service-order-statuses/{statusId}/activate" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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 -X POST "$MICORE_BASE_URL/service-order-statuses/{statusId}/deactivate" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
searchquery | string | Não | Busca pelo nome. |
statusquery | boolean | Não | `true` só os ativos; `false` só os desativados. Sem o filtro, todos. |
per_pagequery | integer | Não | — |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-types" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Até 255 caracteres. |
store_id | integer | Sim | Loja entre as do usuário da credencial. |
equipment_type_id | integer | Sim | — |
opening_form_id | integer | null | Não | — |
technical_form_id | integer | null | Não | — |
closing_form_id | integer | null | Não | — |
shipping_form_id | integer | null | Não | — |
requires_budget | boolean | Não | Padrão `true` no cadastro. |
has_warranty | boolean | Não | — |
warranty_days | integer | null | Não | — |
warranty_description | string | null | Não | Até 2000 caracteres. |
has_deadline | boolean | Não | — |
deadline_days | integer | null | Não | — |
deadline_description | string | null | Não | Até 2000 caracteres. |
ready_in_days | integer | null | Não | Prazo de entrega padrão, em dias úteis depois da aprovação (0 = no mesmo dia; até 90). |
ready_until | string | null | Não | Hora do prazo de entrega padrão (HH:MM, fuso do cliente). |
printer_model_ids | array<integer> | Não | Modelos de impressora ativos do tipo de equipamento (ou do tipo pai). Enviado, substitui a lista inteira. |
Exemplo de requisição
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
{
"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
/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 "$MICORE_BASE_URL/service-types/{serviceTypeId}" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Não | Até 255 caracteres. |
store_id | integer | Não | Loja entre as do usuário da credencial. |
equipment_type_id | integer | Não | — |
opening_form_id | integer | null | Não | — |
technical_form_id | integer | null | Não | — |
closing_form_id | integer | null | Não | — |
shipping_form_id | integer | null | Não | — |
requires_budget | boolean | Não | Padrão `true` no cadastro. |
has_warranty | boolean | Não | — |
warranty_days | integer | null | Não | — |
warranty_description | string | null | Não | Até 2000 caracteres. |
has_deadline | boolean | Não | — |
deadline_days | integer | null | Não | — |
deadline_description | string | null | Não | Até 2000 caracteres. |
ready_in_days | integer | null | Não | Prazo de entrega padrão, em dias úteis depois da aprovação (0 = no mesmo dia; até 90). |
ready_until | string | null | Não | Hora do prazo de entrega padrão (HH:MM, fuso do cliente). |
printer_model_ids | array<integer> | Não | Modelos de impressora ativos do tipo de equipamento (ou do tipo pai). Enviado, substitui a lista inteira. |
Exemplo de requisição
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
{
"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
/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 -X POST "$MICORE_BASE_URL/service-types/{serviceTypeId}/activate" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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 -X POST "$MICORE_BASE_URL/service-types/{serviceTypeId}/deactivate" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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 -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
{
"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
/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 "$MICORE_BASE_URL/service-types/{serviceTypeId}/printer-models" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": [
{
"id": 1,
"name": "string"
}
]
}Respostas possíveis
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
searchquery | string | Não | Busca pelo nome. |
statusquery | boolean | Não | `true` só os ativos; `false` só os desativados. Sem o filtro, todos. |
per_pagequery | integer | Não | — |
Exemplo de requisição
curl "$MICORE_BASE_URL/equipment-types" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Até 255 caracteres. |
parent_equipment_type_id | integer | null | Não | Não pode ser o próprio tipo. |
Exemplo de requisição
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
{
"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
/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 "$MICORE_BASE_URL/equipment-types/{equipmentTypeId}" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Não | Até 255 caracteres. |
parent_equipment_type_id | integer | null | Não | Não pode ser o próprio tipo. |
Exemplo de requisição
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
{
"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
/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 -X POST "$MICORE_BASE_URL/equipment-types/{equipmentTypeId}/activate" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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 -X POST "$MICORE_BASE_URL/equipment-types/{equipmentTypeId}/deactivate" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
searchquery | string | Não | Busca pelo nome. |
statusquery | boolean | Não | `true` só os ativos; `false` só os desativados. Sem o filtro, todos. |
per_pagequery | integer | Não | — |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-order-tags" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Até 255 caracteres. |
color | string | Sim | Até 20 caracteres. |
priority_order | integer | null | Não | — |
description | string | null | Não | — |
Exemplo de requisição
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
{
"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
/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 "$MICORE_BASE_URL/service-order-tags/{tagId}" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Não | Até 255 caracteres. |
color | string | Não | Até 20 caracteres. |
priority_order | integer | null | Não | — |
description | string | null | Não | — |
Exemplo de requisição
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
{
"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
/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 -X POST "$MICORE_BASE_URL/service-order-tags/{tagId}/activate" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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 -X POST "$MICORE_BASE_URL/service-order-tags/{tagId}/deactivate" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
type_equipment_idquery | integer | Não | Filtra pelo tipo de equipamento. |
include_inactivequery | boolean | Não | — |
Exemplo de requisição
curl "$MICORE_BASE_URL/clients/{clientId}/equipments" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
type_equipment_id | integer | Sim | — |
model_id | integer | Sim | Modelo de impressora/equipamento. |
serial | string | null | Não | Até 120 caracteres. |
description | string | null | Não | Até 2000 caracteres. |
Exemplo de requisição
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
{
"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
/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 "$MICORE_BASE_URL/client-equipments/{equipmentId}" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
type_equipment_id | integer | Não | — |
model_id | integer | Não | Modelo de impressora/equipamento. |
serial | string | null | Não | Até 120 caracteres. |
description | string | null | Não | Até 2000 caracteres. |
Exemplo de requisição
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
{
"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
/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 -X POST "$MICORE_BASE_URL/client-equipments/{equipmentId}/activate" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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 -X POST "$MICORE_BASE_URL/client-equipments/{equipmentId}/deactivate" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
status_id[]query | array<integer> | Não | Filtra pelos status da fila. |
waiting_rangequery | string | Não | Tempo parado na fila: até 2 dias, de 3 a 6 dias ou 7 dias ou mais. |
searchquery | string | Não | Busca pelo número da OS, nome do cliente, serial ou modelo do equipamento. |
order_byquery | string | Não | — |
directionquery | string | Não | — |
per_pagequery | integer | Não | — |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-order-delivery-queue" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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 "$MICORE_BASE_URL/service-order-delivery-queue/channels" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": {
"whatsapp": [
{
"id": 1,
"name": "string"
}
],
"email_templates": [
{
"id": 1,
"name": "string"
}
]
}
}Respostas possíveis
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
sac_idquery | integer | Sim | Número de WhatsApp (canal do atendimento). |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-order-delivery-queue/templates" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": [
{
"id": 1,
"name": "string",
"language": null,
"category": null
}
]
}Respostas possíveis
/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 "$MICORE_BASE_URL/service-order-delivery-queue/templates/{template}/variables" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": {
"template_id": 41,
"placeholders": {
"header": [],
"body": [
"1",
"2"
]
},
"field_options": []
}
}Respostas possíveis
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
service_order_ids | array<integer> | Sim | — |
Exemplo de requisição
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
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
searchquery | string | Não | Busca pelo nome do modelo, por quem disparou ou pelo número de uma OS do disparo. |
order_byquery | string | Não | — |
directionquery | string | Não | — |
per_pagequery | integer | Não | — |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-order-dispatches" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Idempotency-Keyheader | string | Sim | Identificador ú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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
service_order_ids | array<integer> | Sim | OS da fila de entregas. |
channels | object | Sim | Ao menos um canal precisa estar ligado. |
dispatch_mode | string | Sim | Valores: now, scheduled. |
scheduled_at | string (date-time) | Não | Obrigatório no modo agendado; precisa ser futuro. |
Exemplo de requisição
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
{
"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
/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 "$MICORE_BASE_URL/service-order-dispatches/{dispatch}/recipients" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
reference_monthquery | integer | Não | Mês de referência (1 a 12). Sem ele, o mês atual. |
reference_yearquery | integer | Não | Ano de referência. Sem ele, o ano atual. |
store_idquery | integer | Não | Recorta numa loja; o relatório sempre respeita as lojas do usuário. |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-order-reports/production" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": {
"indicators": {
"totalDelivered": 1,
"techniciansCount": 1,
"averagePerTechnician": "string",
"topTechnicianName": "string",
"topTechnicianTotal": 1,
"periodLabel": null
},
"deliveredByTechnicians": [],
"finishedPerDay": [],
"deliveredByType": [],
"technicianContribution": [],
"deliveriesByTechnicianList": [
[]
],
"latestDeliveries": [
[]
]
}
}Respostas possíveis
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
reference_monthquery | integer | Não | Mês de referência (1 a 12). Sem ele, o mês atual. |
reference_yearquery | integer | Não | Ano de referência. Sem ele, o ano atual. |
store_idquery | integer | Não | Recorta numa loja; o relatório sempre respeita as lojas do usuário. |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-order-reports/billing" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": {
"indicators": [],
"monthlyComparison": [],
"topServiceTypes": [
[]
]
}
}Respostas possíveis
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
technician_idquery | integer | Não | Técnico escolhido (só para quem gerencia o Cockpit). |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-order-queue" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
technician_idquery | integer | Não | Edita só a fila deste técnico. |
Exemplo de requisição
curl "$MICORE_BASE_URL/service-order-technician-queues" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"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
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
queues | array<object> | Sim | — |
Exemplo de requisição
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
{
"data": {
"saved": 1,
"message": "string"
}
}Respostas possíveis
/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 "$MICORE_BASE_URL/service-order-flow" \
-H "Authorization: Bearer $MICORE_TOKEN" \
-H "Accept: application/json"Exemplo de resposta JSON
{
"data": {
"name": "string",
"status": "string",
"nodes": [
[]
],
"edges": [
[]
],
"steps": [],
"statuses": [
{
"id": 1,
"name": "string",
"code": null,
"manage_order": true,
"progress": null
}
]
}
}Respostas possíveis
/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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Não | Até 255 caracteres. |
status | string | Não | Até 50 caracteres. |
nodes | array<object> | Sim | — |
edges | array<object> | Sim | — |
Exemplo de requisição
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
{
"data": {
"name": "string",
"status": "string",
"nodes": [
[]
],
"edges": [
[]
],
"steps": [],
"statuses": [
{
"id": 1,
"name": "string",
"code": null,
"manage_order": true,
"progress": null
}
]
}
}