{
  "openapi": "3.0.3",
  "info": {
    "title": "SYSLED — API pública de consultas",
    "version": "2026-10-02",
    "description": "Referência pública da API de integrações por token. Esta edição cobre somente consultas e validações selecionadas. Use credenciais no servidor, exemplos sintéticos e confirme a versão da sua instância com o administrador."
  },
  "servers": [
    {
      "url": "https://api.example.com",
      "description": "Exemplo — substitua pelo endereço informado pelo administrador da sua instância"
    }
  ],
  "tags": [
    {
      "name": "Mensagens"
    },
    {
      "name": "Leads"
    },
    {
      "name": "Funis"
    },
    {
      "name": "Etapas"
    },
    {
      "name": "Tarefas"
    },
    {
      "name": "Catálogo"
    },
    {
      "name": "Shop"
    },
    {
      "name": "Marketing"
    }
  ],
  "paths": {
    "/api/v1/{token}/messages.list": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Mensagens"
        ],
        "summary": "Listar mensagens",
        "description": "Obtém as mensagens mais recentes de uma conversa da empresa do token, excluindo linhas com deleted=true.\n\nOrdenação estável por created_at decrescente, com valores null primeiro, e id decrescente para desempate.\n\ntotal é o tamanho do lote retornado; total_count conta todo o histórico não excluído da conversa. hasMore indica continuação e next_cursor contém o cursor opaco da próxima página ou null.\n\nReenvie next_cursor em before sem interpretar ou modificar seu conteúdo. O UUID legado de uma mensagem da mesma conversa também é aceito como âncora.\n\nConversa inexistente/de outra empresa ou cursor ausente desse histórico retorna HTTP 404 NOT_FOUND. Cursor malformado, adulterado ou maior que 2048 caracteres retorna HTTP 400 BAD_REQUEST.\n\nCada item inclui delivered_at e read_at; ambos podem ser null. Eles representam a primeira evidência persistida pelo SYSLED, não o instante físico exato no aparelho. Em linhas legadas/incompletas, até status delivered/read pode permanecer sem horário até surgir evidência correspondente.\n\nResposta ilustrativa do campo result; IDs, nomes e valores são fictícios. Campos adicionais podem existir.\n\nPode retornar conteúdo de conversas e URLs de mídia. Use escopo exclusivo, aplique as regras de proteção de dados da sua empresa e não registre o conteúdo sem necessidade.\n\nEscopo recomendado: messages.list.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "messages_list_post",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessagesListRequest"
              },
              "example": {
                "conversation_id": "22222222-2222-4222-8222-222222222222",
                "limit": 50,
                "before": "eyJ2IjoxLCJpZCI6IjU1NTU1NTU1LTU1NTUtNDU1NS04NTU1LTU1NTU1NTU1NTU1NSIsImF0IjoiMjAyNi0wOS0xOFQxMjowMDowMC4wMDBaIn0"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessagesListSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "messages.list",
                  "result": {
                    "total": 1,
                    "total_count": 1,
                    "messages": [
                      {
                        "id": "55555555-5555-4555-8555-555555555555",
                        "sender_type": "system",
                        "content": "Nota de exemplo",
                        "message_type": "note",
                        "media_url": null,
                        "delivery_status": null,
                        "created_at": "2026-09-18T12:00:00.000Z",
                        "delivered_at": null,
                        "read_at": null
                      }
                    ],
                    "hasMore": false,
                    "next_cursor": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "BAD_REQUEST: conversation_id ausente/inválido ou cursor before inválido. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "NOT_FOUND: Conversa inexistente/de outra empresa, ou cursor que não pertence ao histórico consultado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "messages.list",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/leads.list": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Leads"
        ],
        "summary": "Listar leads",
        "description": "Lista leads com total real, contagem por status e paginação.\n\nExemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.\n\ntotal e by_status correspondem a todos os registros que atendem aos filtros, não só à página.\n\nNão existe parâmetro pipeline_id para lead.\n\nPode retornar dados pessoais e comerciais. Restrinja o token ao método, limite a retenção e aplique as regras de proteção de dados da sua empresa.\n\nEscopo recomendado: leads.list.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "leads_list_post",
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LeadsListRequest"
              },
              "example": {
                "status": "new",
                "page": 1,
                "limit": 50
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadsListSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "leads.list",
                  "result": {
                    "rows": [
                      {
                        "id": 101,
                        "name": "Pessoa Exemplo",
                        "status": "new",
                        "opportunity": "1500.00",
                        "phone": [
                          {
                            "value": "+5585000000000",
                            "type": "WORK"
                          }
                        ],
                        "email": [
                          {
                            "value": "pessoa@example.com",
                            "type": "WORK"
                          }
                        ]
                      }
                    ],
                    "total": 1,
                    "by_status": {
                      "new": 1,
                      "converted": 0,
                      "junk": 0
                    },
                    "page": 1,
                    "limit": 50
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "leads.list",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/pipelines.get": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Funis"
        ],
        "summary": "Obter funil",
        "description": "Obtém um funil ativo com etapas e agregados.\n\nExemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.\n\nResposta singular {found,pipeline}, não {total,pipelines}.\n\nAusente, inativo ou fora da empresa (exceto global): {found:false,pipeline:null}.\n\nEscopo recomendado: pipelines.get.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "pipelines_get_post",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PipelinesGetRequest"
              },
              "example": {
                "id": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PipelinesGetSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "pipelines.get",
                  "result": {
                    "found": true,
                    "pipeline": {
                      "id": 10,
                      "name": "Funil Exemplo",
                      "slug": "funil-exemplo",
                      "is_default": false,
                      "type": "sales",
                      "color": "#2684FF",
                      "sort_order": 100,
                      "total_deals": 1,
                      "total_value": 1500,
                      "stages": [
                        {
                          "id": 11,
                          "name": "Em andamento",
                          "slug": "em-andamento-exemplo",
                          "type": "process",
                          "color": "#3b82f6",
                          "sort_order": 10,
                          "deals_count": 1,
                          "open_count": 1,
                          "deals_value": 1500
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "PIPELINE_ID_REQUIRED: id ausente ou diferente de inteiro positivo. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "pipelines.get",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/pipelines.list": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Funis"
        ],
        "summary": "Listar funis",
        "description": "Lista funis ativos da empresa e globais, com etapas e agregados dos negócios da empresa.\n\nExemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.\n\nNão possui paginação. total é a quantidade de funis retornados.\n\ndeals_count inclui negócios abertos e encerrados com archived=false; open_count restringe is_closed=false. Valores archived NULL não entram no agregado atual.\n\ntotal_value/deals_value são números; total_value arredondado a duas casas.\n\nEscopo recomendado: pipelines.list.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "pipelines_list_post",
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PipelinesListRequest"
              },
              "example": {
                "pipeline_id": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PipelinesListSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "pipelines.list",
                  "result": {
                    "total": 1,
                    "pipelines": [
                      {
                        "id": 10,
                        "name": "Funil Exemplo",
                        "slug": "funil-exemplo",
                        "is_default": false,
                        "type": "sales",
                        "color": "#2684FF",
                        "sort_order": 100,
                        "total_deals": 1,
                        "total_value": 1500,
                        "stages": [
                          {
                            "id": 11,
                            "name": "Em andamento",
                            "slug": "em-andamento-exemplo",
                            "type": "process",
                            "color": "#3b82f6",
                            "sort_order": 10,
                            "deals_count": 1,
                            "open_count": 1,
                            "deals_value": 1500
                          }
                        ]
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "pipelines.list",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/stages.list": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Etapas"
        ],
        "summary": "Listar etapas",
        "description": "Lista as etapas de um funil da empresa, por sort_order e id.\n\nExemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.\n\nNão possui paginação. O método não aceita funil global, mesmo quando pipelines.list o apresenta.\n\nEscopo recomendado: stages.list.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "stages_list_post",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StagesListRequest"
              },
              "example": {
                "pipeline_id": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StagesListSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "stages.list",
                  "result": {
                    "total": 1,
                    "stages": [
                      {
                        "id": 11,
                        "pipeline_id": 10,
                        "name": "Em andamento",
                        "slug": "em-andamento-exemplo",
                        "type": "process",
                        "color": "#3b82f6",
                        "sort_order": 10
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "BAD_REQUEST: Parâmetro obrigatório ausente ou valor inválido. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "PIPELINE_NOT_FOUND: Funil não encontrado ou não pertence à empresa do token (inclui funil global). ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "stages.list",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/tasks.get": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Tarefas"
        ],
        "summary": "Obter tarefa",
        "description": "Obtém atividade e nome do responsável.\n\nExemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.\n\nAusente/fora da empresa: {found:false,task:null}.\n\ndeadline não traz offset de fuso horário em list/get.\n\nEscopo recomendado: tasks.get.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "tasks_get_post",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TasksGetRequest"
              },
              "example": {
                "id": 401
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TasksGetSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "tasks.get",
                  "result": {
                    "found": true,
                    "task": {
                      "id": 401,
                      "owner_type": "deal",
                      "owner_id": 201,
                      "type": "todo",
                      "subject": "Revisar proposta",
                      "completed": false,
                      "responsible_id": null,
                      "deadline": "2026-09-25T10:00:00",
                      "responsible_name": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "BAD_REQUEST: Parâmetro obrigatório ausente ou valor inválido. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "tasks.get",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/tasks.list": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Tarefas"
        ],
        "summary": "Listar tarefas",
        "description": "Lista atividades do CRM por dono, conclusão, responsável e atraso.\n\nExemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.\n\ntotal é tamanho da página, não total global. page/limit não são devolvidos.\n\nOrdenação: pendentes primeiro, deadline crescente (nulos por último), criação decrescente.\n\nO filtro responsible_id é de igualdade; null não serve para selecionar tarefas sem responsável.\n\nEscopo recomendado: tasks.list.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "tasks_list_post",
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TasksListRequest"
              },
              "example": {
                "owner_type": "deal",
                "owner_id": 201,
                "completed": false,
                "page": 1,
                "limit": 25
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TasksListSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "tasks.list",
                  "result": {
                    "total": 1,
                    "tasks": [
                      {
                        "id": 401,
                        "owner_type": "deal",
                        "owner_id": 201,
                        "type": "todo",
                        "subject": "Revisar proposta",
                        "completed": false,
                        "responsible_id": null,
                        "deadline": "2026-09-25T10:00:00",
                        "responsible_name": null
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "BAD_REQUEST: Parâmetro obrigatório ausente ou valor inválido. INVALID_OWNER_TYPE: owner_type fora de deal, contact, lead. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "tasks.list",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/products.brands": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Catálogo"
        ],
        "summary": "Listar marcas",
        "description": "Marcas ativas com produtos ativos, contagem por marca e ordenação alfabética.\n\nCom Tiny conectado, considera apenas produtos de fonte tiny.\n\nMarcas configuradas como ocultas não são devolvidas.\n\nUse o campo marca, não marca_id, no filtro de products.list/search.\n\nEscopo recomendado: products.brands.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "products_brands_post",
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductsBrandsRequest"
              },
              "example": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductsBrandsSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "products.brands",
                  "result": {
                    "marcas": [
                      {
                        "marca_id": "22222222-2222-4222-8222-222222222222",
                        "marca": "Marca exemplo",
                        "total": 1
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "products.brands",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/products.categories": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Catálogo"
        ],
        "summary": "Listar categorias",
        "description": "Categorias ativas com produtos ativos, contagem por categoria e ordenação alfabética.\n\nCom Tiny conectado, considera apenas produtos de fonte tiny.\n\nUse o campo categoria, não categoria_id, no filtro de products.list/search.\n\nEscopo recomendado: products.categories.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "products_categories_post",
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductsCategoriesRequest"
              },
              "example": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductsCategoriesSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "products.categories",
                  "result": {
                    "categorias": [
                      {
                        "categoria_id": "33333333-3333-4333-8333-333333333333",
                        "categoria": "Categoria exemplo",
                        "total": 1
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "products.categories",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/products.get": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Catálogo"
        ],
        "summary": "Detalhar produto",
        "description": "Busca um SKU ativo da empresa e acrescenta descricao ao objeto de produto.\n\nInclui os mesmos campos de estoque e disponibilidade da listagem mais descricao.\n\nNão aplica o filtro fonte=tiny usado na listagem; um SKU conhecido pode ser consultado sem aparecer na grade filtrada.\n\ndescricao pode ser string vazia; não assuma HTML seguro para renderização.\n\nEscopo recomendado: products.get.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "products_get_post",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductsGetRequest"
              },
              "example": {
                "codigo": "DEMO-01"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductsGetSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "products.get",
                  "result": {
                    "product": {
                      "id": "11111111-1111-4111-8111-111111111111",
                      "nome": "Produto de demonstração",
                      "codigo": "DEMO-01",
                      "idCatalogo": "100.000001",
                      "marca": "Marca exemplo",
                      "categoria": "Categoria exemplo",
                      "imagemThumb": "https://assets.example.com/produto.png",
                      "imagens": [
                        "https://assets.example.com/produto.png"
                      ],
                      "imagensCount": 1,
                      "specs": {
                        "potencia": "10 W",
                        "tensao": "220V"
                      },
                      "preco_venda": 25,
                      "estoque": 12,
                      "reservado": 2,
                      "disponivel_qtd": 10,
                      "disponivel": true,
                      "motivo_indisponivel": null,
                      "descricao": "Descrição ilustrativa do produto."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "BAD_REQUEST: codigo/sku não informado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "NOT_FOUND: Produto ativo não encontrado na empresa. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "products.get",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/products.list": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Catálogo"
        ],
        "summary": "Listar produtos",
        "description": "Catálogo ativo da empresa do token com filtros e paginação por deslocamento.\n\ndisponivel é a decisão pronta de compra; estoque é o saldo físico, reservado é o saldo comprometido e disponivel_qtd desconta reservas. Valores de estoque e preço podem ser null.\n\nIndisponibilidade: sem_preco, sem_saldo ou esgotado. Produtos indisponíveis continuam na listagem dentro do recorte de fonte.\n\nCom Tiny conectado, listagem, marcas e categorias consideram fonte tiny. products.get consulta SKU ativo da própria empresa sem esse filtro de fonte.\n\nnext_cursor é um deslocamento textual, não um cursor opaco: use como offset da próxima chamada até receber null.\n\nUse o escopo exato do método. Escopos amplos não fazem parte deste perfil público.\n\nO parâmetro herdado favoritos depende de usuário e não é utilizável nesta API por token.\n\nA busca q não consulta descrição, ficha técnica nem specs; cada termo precisa aparecer no nome, SKU ou, quando numérico, em idCatalogo.\n\nEscopo recomendado: products.list.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "products_list_post",
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductsListRequest"
              },
              "example": {
                "limit": 24,
                "offset": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductsListSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "products.list",
                  "result": {
                    "items": [
                      {
                        "id": "11111111-1111-4111-8111-111111111111",
                        "nome": "Produto de demonstração",
                        "codigo": "DEMO-01",
                        "idCatalogo": "100.000001",
                        "marca": "Marca exemplo",
                        "categoria": "Categoria exemplo",
                        "imagemThumb": "https://assets.example.com/produto.png",
                        "imagens": [
                          "https://assets.example.com/produto.png"
                        ],
                        "imagensCount": 1,
                        "specs": {
                          "potencia": "10 W",
                          "tensao": "220V"
                        },
                        "preco_venda": 25,
                        "estoque": 12,
                        "reservado": 2,
                        "disponivel_qtd": 10,
                        "disponivel": true,
                        "motivo_indisponivel": null
                      }
                    ],
                    "total": 1,
                    "next_cursor": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "products.list",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/products.search": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Catálogo"
        ],
        "summary": "Buscar produtos",
        "description": "Alias funcional de products.list. q é aceito mas não obrigatório na implementação.\n\ndisponivel é a decisão pronta de compra; estoque é o saldo físico, reservado é o saldo comprometido e disponivel_qtd desconta reservas. Valores de estoque e preço podem ser null.\n\nIndisponibilidade: sem_preco, sem_saldo ou esgotado. Produtos indisponíveis continuam na listagem dentro do recorte de fonte.\n\nCom Tiny conectado, listagem, marcas e categorias consideram fonte tiny. products.get consulta SKU ativo da própria empresa sem esse filtro de fonte.\n\nnext_cursor é um deslocamento textual, não um cursor opaco: use como offset da próxima chamada até receber null.\n\nUse o escopo exato do método. Escopos amplos não fazem parte deste perfil público.\n\nO parâmetro herdado favoritos depende de usuário e não é utilizável nesta API por token.\n\nA busca q não consulta descrição, ficha técnica nem specs; cada termo precisa aparecer no nome, SKU ou, quando numérico, em idCatalogo.\n\nEscopo recomendado: products.search.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "products_search_post",
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductsSearchRequest"
              },
              "example": {
                "q": "produto",
                "limit": 24
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductsSearchSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "products.search",
                  "result": {
                    "items": [
                      {
                        "id": "11111111-1111-4111-8111-111111111111",
                        "nome": "Produto de demonstração",
                        "codigo": "DEMO-01",
                        "idCatalogo": "100.000001",
                        "marca": "Marca exemplo",
                        "categoria": "Categoria exemplo",
                        "imagemThumb": "https://assets.example.com/produto.png",
                        "imagens": [
                          "https://assets.example.com/produto.png"
                        ],
                        "imagensCount": 1,
                        "specs": {
                          "potencia": "10 W",
                          "tensao": "220V"
                        },
                        "preco_venda": 25,
                        "estoque": 12,
                        "reservado": 2,
                        "disponivel_qtd": 10,
                        "disponivel": true,
                        "motivo_indisponivel": null
                      }
                    ],
                    "total": 1,
                    "next_cursor": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "products.search",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/shop.banners.list": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Shop"
        ],
        "summary": "Listar banners e carrossel",
        "description": "Banners ativos dentro da janela de exibição, em ordem de prioridade e criação; inclui configuração do carrossel.\n\ncarrossel pode ser null quando ausente, inválido ou indisponível. O consumidor deve ter fallback.\n\nConfiguração administrativa admite efeitos slide, fade, zoom, cover e none; intervalo de 1000 a 30000 ms e transição de 0 a 3000 ms.\n\nCaminhos de imagem relativos são prefixados pela base pública configurada no servidor.\n\nEscopo recomendado: shop.banners.list.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "shop_banners_list_post",
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShopBannersListRequest"
              },
              "example": {
                "slot": "home"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShopBannersListSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "shop.banners.list",
                  "result": {
                    "banners": [
                      {
                        "id": "44444444-4444-4444-8444-444444444444",
                        "slot": "home",
                        "titulo": "Banner de demonstração",
                        "imagem_url": "https://assets.example.com/banner.png",
                        "link_url": "https://loja.example.com/catalogo",
                        "ordem": 0
                      }
                    ],
                    "carrossel": {
                      "efeito": "slide",
                      "intervalo_ms": 5000,
                      "transicao_ms": 600,
                      "autoplay": true,
                      "laco": true,
                      "mostrar_setas": true,
                      "mostrar_pontos": true,
                      "pausar_no_hover": true
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "shop.banners.list",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/shop.desconto.validar": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Shop"
        ],
        "summary": "Validar cupom e descontos automáticos",
        "description": "Calcula descontos com os preços atuais do catálogo. Retorna descontos aplicáveis e eventual recusa do código informado.\n\nTipos: produtos, compre_leve, pedido e frete. Esta consulta não registra o uso do cupom.\n\nvalor_cents e valor representam desconto nos produtos; frete_desconto_cents é separado. Não some frete grátis ao desconto de produtos duas vezes.\n\nrecusa, quando presente, contém codigo, motivo, min_valor_cents, min_itens e texto; é retorno de negócio HTTP 200.\n\nMotivos: nao_encontrado, inativo, ainda_nao_comecou, expirado, esgotado, ja_usado, exige_identificacao, minimo_valor, minimo_itens, sem_itens_no_alvo, combo_nao_atingido, sem_frete, frete_acima_do_teto e tipo_desconhecido.\n\nItem não encontrado ou sem preço positivo é ignorado nesta estimativa; a validação não garante disponibilidade do carrinho.\n\nPode haver descontos automáticos mesmo quando o cupom explícito é recusado. Um fluxo comercial posterior deve revalidar o resultado.\n\nEscopo recomendado: shop.desconto.validar.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "shop_desconto_validar_post",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShopDescontoValidarRequest"
              },
              "example": {
                "codigo": "DEMO10",
                "itens": [
                  {
                    "sku": "DEMO-01",
                    "qtd": 2
                  }
                ],
                "frete_cents": 900,
                "cliente": {
                  "email": "comprador@example.com"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShopDescontoValidarSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "shop.desconto.validar",
                  "result": {
                    "descontos": [
                      {
                        "id": "66666666-6666-4666-8666-666666666666",
                        "tipo": "pedido",
                        "metodo": "codigo",
                        "codigo": "DEMO10",
                        "nome": "Desconto de demonstração",
                        "valor_cents": 500,
                        "valor": 5,
                        "skus": [],
                        "frete_gratis": false,
                        "combina": {
                          "produto": false,
                          "pedido": false,
                          "frete": false
                        }
                      }
                    ],
                    "valor_cents": 500,
                    "frete_gratis": false,
                    "frete_desconto_cents": 0,
                    "valor": 5,
                    "recusa": null
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "shop.desconto.validar",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/shop.frete.calcular": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Shop"
        ],
        "summary": "Calcular opções de frete",
        "description": "Calcula tarifas compatíveis com o carrinho e destino, combinando perfis quando necessário.\n\nRespostas sem cotação usam HTTP 200 e motivo cep_invalido, sem_itens, nao_configurado ou sem_cobertura. Não são falhas HTTP.\n\nUse todos os opcao_ids para identificar a composição da opção calculada; id identifica somente a linha.\n\nvalor_cents é inteiro em centavos; valor é reais. Valor zero significa frete grátis.\n\nentrega_estimada é null ou {de, ate, processamento_dias}; o cálculo considera dias úteis e processamento configurado.\n\nentrega_local pode ser {ativo:true,elegivel:false} ou elegível com nome, valor_cents, valor, minimo_pedido_cents e instrucoes; zonas por raio podem acrescentar distancia, raio e unidade.\n\nentrega_local pode coexistir com motivo sem_cobertura. Sua presença não garante elegibilidade em um fluxo comercial posterior.\n\npeso_incompleto indica produtos cujo peso foi tratado como zero. O cálculo não é prova de disponibilidade/estoque.\n\nUma falta de cobertura em qualquer perfil impede cotação parcial do carrinho.\n\nO cálculo por raio pode consultar um serviço de geocodificação e manter um cache técnico do CEP. Ele não cria nem altera pedidos, tarifas ou outras regras comerciais.\n\nEscopo recomendado: shop.frete.calcular.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "shop_frete_calcular_post",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShopFreteCalcularRequest"
              },
              "example": {
                "cep": "01001000",
                "itens": [
                  {
                    "sku": "DEMO-01",
                    "qtd": 2
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShopFreteCalcularSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "shop.frete.calcular",
                  "result": {
                    "cep": "01001000",
                    "uf": "SP",
                    "opcoes": [
                      {
                        "opcao_ids": [
                          "55555555-5555-4555-8555-555555555555"
                        ],
                        "nome": "Entrega padrão",
                        "valor_cents": 900,
                        "prazo_min_dias": 2,
                        "prazo_max_dias": 4,
                        "id": "55555555-5555-4555-8555-555555555555",
                        "valor": 9,
                        "entrega_estimada": null
                      }
                    ],
                    "retirada": null,
                    "entrega_local": null,
                    "origem": {
                      "cep": "01001000",
                      "uf": "SP"
                    },
                    "motivo": null,
                    "itens_sem_frete": [],
                    "peso_incompleto": false
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "shop.frete.calcular",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/shop.frete.config": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Shop"
        ],
        "summary": "Ler opções gerais de entrega",
        "description": "Resumo para mostrar retirada e entrega local antes do CEP. Zonas e tarifas detalhadas não são expostas.\n\nretirada e entrega_local podem ser null.\n\na_partir_de é o menor preço cadastrado, não uma cotação para o cliente.\n\nA filial pode herdar regras da matriz; a origem é resolvida para a filial.\n\nEscopo recomendado: shop.frete.config.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "shop_frete_config_post",
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShopFreteConfigRequest"
              },
              "example": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShopFreteConfigSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "shop.frete.config",
                  "result": {
                    "retirada": {
                      "ativo": true,
                      "prazo": "24h",
                      "prazo_label": "Normalmente pronto em 24 horas",
                      "mensagem": "Aguarde a confirmação.",
                      "instrucoes": "Retirada no balcão."
                    },
                    "entrega_local": {
                      "ativo": true,
                      "a_partir_de_cents": 900,
                      "a_partir_de": 9,
                      "zonas": 2
                    },
                    "datas_estimadas": true,
                    "origem": {
                      "cep": "01001000",
                      "uf": "SP"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "shop.frete.config",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/shop.loja.config": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Shop"
        ],
        "summary": "Ler identidade e aparência da loja",
        "description": "Configuração pública de marca, contatos, políticas, avisos, rodapé, formas de pagamento anunciadas e aparência.\n\nCampos não configurados podem ser null, arrays vazios ou blocos com defaults. completa exige nome e logo própria da loja: a implementação atual não considera a logo herdada da empresa nesse indicador.\n\nNome e logo podem usar fallback da empresa. URLs de logo devem ser HTTP(S) absolutas.\n\ntopbar.avisos é lista resolvida de {texto,destaque?,url?}. rodape.colunas é null ou lista de {titulo,links:[{rotulo,url?}]}. Lista vazia é escolha explícita de não mostrar colunas.\n\npagamentos descreve meios anunciados: pix, visa, mastercard, elo, amex, hipercard e boleto. Não é consulta da capacidade efetiva do gateway.\n\nAparência inclui fonte inter, poppins, roboto, lato, playfair ou system (ou null), banner e até 24 SKUs de destaque.\n\nPolíticas são conteúdo textual cadastrado pela loja; renderize como texto seguro.\n\nEscopo recomendado: shop.loja.config.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "shop_loja_config_post",
        "parameters": [],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShopLojaConfigRequest"
              },
              "example": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShopLojaConfigSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "shop.loja.config",
                  "result": {
                    "nome": "Loja de demonstração",
                    "logo_url": "https://assets.example.com/logo.png",
                    "logo_quadrada_url": "https://assets.example.com/logo-square.png",
                    "descricao": "Descrição ilustrativa.",
                    "slogan": null,
                    "cores": {
                      "principal": "#2684ff",
                      "texto": "#0f1621"
                    },
                    "contato": {
                      "whatsapp": null,
                      "email": "loja@example.com",
                      "endereco": null,
                      "telefone": null,
                      "cnpj": null
                    },
                    "busca_placeholder": null,
                    "rodape": {
                      "colunas": null
                    },
                    "topbar": {
                      "avisos": [],
                      "frete_gratis_acima": null,
                      "desconto_pix": null,
                      "atacado_url": null,
                      "atendimento": null
                    },
                    "pagamentos": [
                      "pix"
                    ],
                    "politicas": {
                      "troca": null,
                      "privacidade": null,
                      "entrega": null
                    },
                    "aparencia": {
                      "cores": {
                        "fundo": null,
                        "superficie": null,
                        "botao": null,
                        "botao_texto": null
                      },
                      "fonte": null,
                      "banner": {
                        "ativo": false,
                        "titulo": null,
                        "subtitulo": null,
                        "imagem_url": null,
                        "cta_texto": null,
                        "cta_url": null
                      },
                      "destaques": {
                        "ativo": false,
                        "titulo": null,
                        "skus": []
                      }
                    },
                    "completa": true
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "shop.loja.config",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    },
    "/api/v1/{token}/marketing.funnel": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Token de integração da empresa. Trate como segredo.",
          "schema": {
            "type": "string",
            "format": "password"
          },
          "example": "SEU_TOKEN"
        }
      ],
      "post": {
        "tags": [
          "Marketing"
        ],
        "summary": "Consultar funil de marketing",
        "description": "Agrega leads de mídia paga, oportunidades e vendas por dia em um funil, incluindo dias sem atividade e fotografia atual de oportunidades paradas.\n\nLeads são contatos criados no período com sinais de mídia paga no rastreio ou nas classificações configuradas; não equivalem a todos os leads cadastrados no CRM.\n\nOportunidades/vendas/perdas consideram negócios ligados à coorte de contatos do período e ao pipeline_id; descartes contam a data de junk e podem envolver contatos criados antes do período.\n\nstalled é uma fotografia atual de todos os negócios em processo no funil, não um histórico filtrado por from/to.\n\nby_pipeline pode incluir uma segmentação adicional de tipo de orçamento; by_channel pode conter mais de uma entrada com o mesmo label e exigir soma no consumidor.\n\nAs datas da consulta usam o fuso configurado na instância; generated_at e snapshot_date são produzidos em UTC. Não é cálculo de ROAS e não retorna gasto de mídia.\n\nResposta ilustrativa do campo result; IDs, nomes e valores são fictícios. Campos adicionais podem existir.\n\nEscopo recomendado: marketing.funnel.\n\nO token é obrigatório no caminho e deve permanecer no servidor da integração.",
        "operationId": "marketing_funnel_post",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MarketingFunnelRequest"
              },
              "example": {
                "from": "2026-09-18",
                "to": "2026-09-18",
                "pipeline_id": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Requisição processada. Interprete os indicadores dentro de result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketingFunnelSuccess"
                },
                "example": {
                  "ok": true,
                  "method": "marketing.funnel",
                  "result": {
                    "company_id": "44444444-4444-4444-8444-444444444444",
                    "from": "2026-09-18",
                    "to": "2026-09-18",
                    "generated_at": "2026-09-18T15:00:00.000Z",
                    "days": [
                      {
                        "date": "2026-09-18",
                        "leads": {
                          "total": 0,
                          "google": 0,
                          "meta": 0,
                          "other": 0,
                          "junk": 0,
                          "junk_by_reason": []
                        },
                        "opportunities": {
                          "created": 0,
                          "value": 0,
                          "by_channel": [],
                          "by_pipeline": []
                        },
                        "sales": {
                          "won": 0,
                          "value": 0,
                          "by_channel": [],
                          "by_pipeline": [],
                          "lost": 0,
                          "lost_by_reason": []
                        }
                      }
                    ],
                    "stalled": {
                      "snapshot_date": "2026-09-18",
                      "buckets": [
                        {
                          "label": "Mais de 15 dias",
                          "count": 0,
                          "value": 0
                        },
                        {
                          "label": "11 a 15 dias",
                          "count": 0,
                          "value": 0
                        },
                        {
                          "label": "8 a 10 dias",
                          "count": 0,
                          "value": 0
                        },
                        {
                          "label": "4 a 7 dias",
                          "count": 0,
                          "value": 0
                        },
                        {
                          "label": "Até 3 dias",
                          "count": 0,
                          "value": 0
                        }
                      ]
                    },
                    "pipelines": [
                      {
                        "id": 1,
                        "name": "Funil de exemplo"
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "INVALID_DATE_RANGE: Datas ausentes/inválidas ou intervalo fora de 1 a 92 dias. PIPELINE_ID_REQUIRED: pipeline_id ausente ou não inteiro positivo. PIPELINE_NOT_FOUND: Funil não encontrado para a empresa. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_TOKEN: Token não encontrado. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "TOKEN_DISABLED: Token desativado. IP_BLOCKED: IP não autorizado na lista do token. SCOPE_DENIED: Escopo insuficiente. NO_COMPANY: Token sem empresa associada. TOKEN_NO_COMPANY: Token sem empresa associada. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "RATE_LIMITED: Cota do token excedida. Aguarde antes de repetir. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "INTERNAL_ERROR: Falha interna ou erro sem status específico. ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-recommended-scope": "marketing.funnel",
        "x-schema-confidence": {
          "request": "catalog-reviewed",
          "result": "reviewed-example-derived"
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "allowed_scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "SuccessEnvelope": {
        "type": "object",
        "required": [
          "ok",
          "method"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "enum": [
              true
            ]
          },
          "method": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "MessagesListRequest": {
        "type": "object",
        "properties": {
          "conversation_id": {
            "type": "string",
            "format": "uuid",
            "description": "ID da conversa. Tipo documentado: string (UUID).",
            "example": "22222222-2222-4222-8222-222222222222"
          },
          "limit": {
            "type": "integer",
            "description": "Máximo de mensagens. Padrão: 50; mínimo 1, máximo 200. Tipo documentado: integer.",
            "example": 50
          },
          "before": {
            "type": "string",
            "description": "Cursor opaco retornado em next_cursor para buscar a página seguinte. Por compatibilidade, também aceita o UUID de uma mensagem da mesma conversa. Máximo: 2048 caracteres. Tipo documentado: string.",
            "example": "eyJ2IjoxLCJpZCI6IjU1NTU1NTU1LTU1NTUtNDU1NS04NTU1LTU1NTU1NTU1NTU1NSIsImF0IjoiMjAyNi0wOS0xOFQxMjowMDowMC4wMDBaIn0",
            "maxLength": 2048
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada.",
        "required": [
          "conversation_id"
        ],
        "x-constraint-evidence": "catalog-and-code-reviewed"
      },
      "MessagesListResult": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "minimum": 0
          },
          "total_count": {
            "type": "integer",
            "minimum": 0
          },
          "messages": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "sender_type": {
                  "type": "string"
                },
                "content": {
                  "type": "string"
                },
                "message_type": {
                  "type": "string"
                },
                "media_url": {
                  "nullable": true,
                  "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                },
                "delivery_status": {
                  "nullable": true,
                  "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional.",
                  "type": "string"
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true
                },
                "delivered_at": {
                  "nullable": true,
                  "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional.",
                  "type": "string",
                  "format": "date-time"
                },
                "read_at": {
                  "nullable": true,
                  "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional.",
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          },
          "hasMore": {
            "type": "boolean"
          },
          "next_cursor": {
            "nullable": true,
            "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional.",
            "type": "string"
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais.",
        "x-constraint-evidence": "catalog-and-code-reviewed"
      },
      "MessagesListSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "messages.list"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/MessagesListResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "LeadsListRequest": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Status: new, converted ou junk. Sem filtro inclui todos. Tipo documentado: string.",
            "example": "new"
          },
          "status_in": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "string"
              }
            ],
            "description": "Status aceitos; pode combinar com status. Tipo documentado: string[] | string CSV.",
            "example": [
              "new",
              "converted"
            ]
          },
          "search": {
            "type": "string",
            "description": "Busca parcial em nome, título, telefone e e-mail. Tipo documentado: string.",
            "example": "Exemplo"
          },
          "assigned_to": {
            "type": "string",
            "format": "uuid",
            "description": "ID do responsável. Tipo documentado: string (uuid).",
            "example": "00000000-0000-4000-8000-000000000001"
          },
          "assigned_to_in": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "string"
              }
            ],
            "description": "IDs de responsáveis. Tipo documentado: string[] | string CSV.",
            "example": [
              "00000000-0000-4000-8000-000000000001"
            ]
          },
          "source_id_in": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "integer"
                }
              },
              {
                "type": "string"
              }
            ],
            "description": "IDs de origens. Tipo documentado: integer[] | string CSV.",
            "example": [
              1,
              2
            ]
          },
          "created_from": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "description": "Data inicial inclusiva. Tipo documentado: string (date/date-time).",
            "example": "2026-09-01"
          },
          "created_to": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "description": "Inclui até o dia final; implementação usa limite menor que data + 1 dia. Tipo documentado: string (date/date-time).",
            "example": "2026-09-01"
          },
          "junked_from": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "description": "Data inicial inclusiva. Tipo documentado: string (date/date-time).",
            "example": "2026-09-01"
          },
          "junked_to": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "description": "Inclui até o dia final; implementação usa limite menor que data + 1 dia. Tipo documentado: string (date/date-time).",
            "example": "2026-09-01"
          },
          "converted_from": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "description": "Data inicial inclusiva. Tipo documentado: string (date/date-time).",
            "example": "2026-09-01"
          },
          "converted_to": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "description": "Inclui até o dia final; implementação usa limite menor que data + 1 dia. Tipo documentado: string (date/date-time).",
            "example": "2026-09-01"
          },
          "opportunity_min": {
            "type": "number",
            "description": "Valor mínimo inclusivo. Tipo documentado: number.",
            "example": 100
          },
          "opportunity_max": {
            "type": "number",
            "description": "Valor máximo inclusivo. Tipo documentado: number.",
            "example": 2000
          },
          "has_conversation": {
            "type": "boolean",
            "description": "true com conversa; false sem conversa. Tipo documentado: boolean.",
            "example": true
          },
          "page": {
            "type": "integer",
            "description": "Página iniciada em 1; padrão 1. Tipo documentado: integer.",
            "example": 1
          },
          "limit": {
            "type": "integer",
            "description": "Padrão 50; máximo 200. Use valores positivos; limite negativo não é validado corretamente. Tipo documentado: integer.",
            "example": 50
          },
          "order_by": {
            "type": "string",
            "description": "created_at_desc (padrão), created_at_asc, opportunity_desc, opportunity_asc ou name_asc. Tipo documentado: string.",
            "example": "created_at_desc"
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada."
      },
      "LeadsListResult": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "number"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "opportunity": {
                  "type": "string"
                },
                "phone": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": true,
                    "x-schema-confidence": "reviewed-example-derived",
                    "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                  },
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                },
                "email": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": true,
                    "x-schema-confidence": "reviewed-example-derived",
                    "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                  },
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          },
          "total": {
            "type": "number"
          },
          "by_status": {
            "type": "object",
            "properties": {
              "new": {
                "type": "number"
              },
              "converted": {
                "type": "number"
              },
              "junk": {
                "type": "number"
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "page": {
            "type": "number"
          },
          "limit": {
            "type": "number"
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "LeadsListSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "leads.list"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/LeadsListResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "PipelinesGetRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Identificador numérico do registro. Tipo documentado: integer.",
            "example": 101
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada.",
        "required": [
          "id"
        ]
      },
      "PipelinesGetResult": {
        "type": "object",
        "properties": {
          "found": {
            "type": "boolean"
          },
          "pipeline": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "name": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "is_default": {
                "type": "boolean"
              },
              "type": {
                "type": "string"
              },
              "color": {
                "type": "string"
              },
              "sort_order": {
                "type": "number"
              },
              "total_deals": {
                "type": "number"
              },
              "total_value": {
                "type": "number"
              },
              "stages": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "number"
                    },
                    "name": {
                      "type": "string"
                    },
                    "slug": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "color": {
                      "type": "string"
                    },
                    "sort_order": {
                      "type": "number"
                    },
                    "deals_count": {
                      "type": "number"
                    },
                    "open_count": {
                      "type": "number"
                    },
                    "deals_value": {
                      "type": "number"
                    }
                  },
                  "additionalProperties": true,
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                },
                "x-schema-confidence": "reviewed-example-derived",
                "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "PipelinesGetSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "pipelines.get"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/PipelinesGetResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "PipelinesListRequest": {
        "type": "object",
        "properties": {
          "pipeline_id": {
            "type": "integer",
            "description": "Filtro opcional por um funil. Valor inválido é ignorado. Tipo documentado: integer.",
            "example": 10
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada."
      },
      "PipelinesListResult": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number"
          },
          "pipelines": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "number"
                },
                "name": {
                  "type": "string"
                },
                "slug": {
                  "type": "string"
                },
                "is_default": {
                  "type": "boolean"
                },
                "type": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                },
                "sort_order": {
                  "type": "number"
                },
                "total_deals": {
                  "type": "number"
                },
                "total_value": {
                  "type": "number"
                },
                "stages": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "number"
                      },
                      "name": {
                        "type": "string"
                      },
                      "slug": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string"
                      },
                      "color": {
                        "type": "string"
                      },
                      "sort_order": {
                        "type": "number"
                      },
                      "deals_count": {
                        "type": "number"
                      },
                      "open_count": {
                        "type": "number"
                      },
                      "deals_value": {
                        "type": "number"
                      }
                    },
                    "additionalProperties": true,
                    "x-schema-confidence": "reviewed-example-derived",
                    "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                  },
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "PipelinesListSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "pipelines.list"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/PipelinesListResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "StagesListRequest": {
        "type": "object",
        "properties": {
          "pipeline_id": {
            "type": "integer",
            "description": "Funil pertencente à empresa do token. Tipo documentado: integer.",
            "example": 10
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada.",
        "required": [
          "pipeline_id"
        ]
      },
      "StagesListResult": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number"
          },
          "stages": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "number"
                },
                "pipeline_id": {
                  "type": "number"
                },
                "name": {
                  "type": "string"
                },
                "slug": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                },
                "sort_order": {
                  "type": "number"
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "StagesListSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "stages.list"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/StagesListResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "TasksGetRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Identificador numérico do registro. Tipo documentado: integer.",
            "example": 101
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada.",
        "required": [
          "id"
        ]
      },
      "TasksGetResult": {
        "type": "object",
        "properties": {
          "found": {
            "type": "boolean"
          },
          "task": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "owner_type": {
                "type": "string"
              },
              "owner_id": {
                "type": "number"
              },
              "type": {
                "type": "string"
              },
              "subject": {
                "type": "string"
              },
              "completed": {
                "type": "boolean"
              },
              "responsible_id": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "deadline": {
                "type": "string"
              },
              "responsible_name": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "TasksGetSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "tasks.get"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/TasksGetResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "TasksListRequest": {
        "type": "object",
        "properties": {
          "owner_type": {
            "type": "string",
            "description": "deal (padrão), contact (contato comercial) ou lead. Tipo documentado: string.",
            "example": "deal"
          },
          "owner_id": {
            "type": "integer",
            "description": "Obrigatório se owner_type for enviado; se apenas owner_id for enviado, owner_type=deal. Tipo documentado: integer.",
            "example": 201
          },
          "completed": {
            "type": "boolean",
            "description": "true concluídas; false pendentes. Ausente inclui ambas. Tipo documentado: boolean.",
            "example": false
          },
          "responsible_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "Usuário com acesso à empresa por vínculo principal ou multifilial. Tipo documentado: string (uuid) | null.",
            "example": "00000000-0000-4000-8000-000000000001"
          },
          "overdue": {
            "type": "boolean",
            "description": "true: somente pendentes com prazo anterior a NOW(). Tipo documentado: boolean.",
            "example": true
          },
          "page": {
            "type": "integer",
            "description": "Página iniciada em 1; padrão 1. Tipo documentado: integer.",
            "example": 1
          },
          "limit": {
            "type": "integer",
            "description": "Padrão 25; mínimo 1, máximo 100. Tipo documentado: integer.",
            "example": 25
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada."
      },
      "TasksListResult": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number"
          },
          "tasks": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "number"
                },
                "owner_type": {
                  "type": "string"
                },
                "owner_id": {
                  "type": "number"
                },
                "type": {
                  "type": "string"
                },
                "subject": {
                  "type": "string"
                },
                "completed": {
                  "type": "boolean"
                },
                "responsible_id": {
                  "nullable": true,
                  "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                },
                "deadline": {
                  "type": "string"
                },
                "responsible_name": {
                  "nullable": true,
                  "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "TasksListSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "tasks.list"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/TasksListResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "ProductsBrandsRequest": {
        "type": "object",
        "properties": {},
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada."
      },
      "ProductsBrandsResult": {
        "type": "object",
        "properties": {
          "marcas": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "marca_id": {
                  "type": "string"
                },
                "marca": {
                  "type": "string"
                },
                "total": {
                  "type": "number"
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "ProductsBrandsSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "products.brands"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/ProductsBrandsResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "ProductsCategoriesRequest": {
        "type": "object",
        "properties": {},
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada."
      },
      "ProductsCategoriesResult": {
        "type": "object",
        "properties": {
          "categorias": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "categoria_id": {
                  "type": "string"
                },
                "categoria": {
                  "type": "string"
                },
                "total": {
                  "type": "number"
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "ProductsCategoriesSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "products.categories"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/ProductsCategoriesResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "ProductsGetRequest": {
        "type": "object",
        "properties": {
          "codigo": {
            "type": "string",
            "description": "SKU exato. Informe codigo OU sku; codigo tem precedência quando ambos são preenchidos. Tipo documentado: string.",
            "example": "DEMO-01"
          },
          "sku": {
            "type": "string",
            "description": "Alternativa a codigo. Ao menos um dos dois deve ser informado. Tipo documentado: string.",
            "example": "DEMO-01"
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada.",
        "anyOf": [
          {
            "required": [
              "codigo"
            ]
          },
          {
            "required": [
              "sku"
            ]
          }
        ],
        "x-constraint-evidence": "catalog-and-code-reviewed"
      },
      "ProductsGetResult": {
        "type": "object",
        "properties": {
          "product": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "nome": {
                "type": "string"
              },
              "codigo": {
                "type": "string"
              },
              "idCatalogo": {
                "type": "string"
              },
              "marca": {
                "type": "string"
              },
              "categoria": {
                "type": "string"
              },
              "imagemThumb": {
                "type": "string"
              },
              "imagens": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "x-schema-confidence": "reviewed-example-derived",
                "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
              },
              "imagensCount": {
                "type": "number"
              },
              "specs": {
                "type": "object",
                "properties": {
                  "potencia": {
                    "type": "string"
                  },
                  "tensao": {
                    "type": "string"
                  }
                },
                "additionalProperties": true,
                "x-schema-confidence": "reviewed-example-derived",
                "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
              },
              "preco_venda": {
                "type": "number"
              },
              "estoque": {
                "type": "number"
              },
              "reservado": {
                "type": "number"
              },
              "disponivel_qtd": {
                "type": "number"
              },
              "disponivel": {
                "type": "boolean"
              },
              "motivo_indisponivel": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "descricao": {
                "type": "string"
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "ProductsGetSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "products.get"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/ProductsGetResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "ProductsListRequest": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "Busca tolerante por nome/SKU. Espaços ou * separam até 10 termos combinados com AND; cada termo e os campos comparados são normalizados para minúsculas e caracteres alfanuméricos, ignorando acentos, espaços e pontuação. Termos brutos formados apenas por dígitos e pontos também procuram idCatalogo sem pontos. products.search e products.list usam a mesma função. Tipo documentado: string.",
            "example": "produto"
          },
          "marca": {
            "type": "string",
            "description": "Nome exato da marca, não seu UUID. Tipo documentado: string.",
            "example": "Marca exemplo"
          },
          "categoria": {
            "type": "string",
            "description": "Nome exato da categoria, não seu UUID. Tipo documentado: string.",
            "example": "Categoria exemplo"
          },
          "familia": {
            "type": "string",
            "description": "Família exata do cadastro. Tipo documentado: string.",
            "example": "Linha exemplo"
          },
          "tag": {
            "type": "string",
            "description": "Texto contido nas tags de origem do cadastro. Tipo documentado: string.",
            "example": "erp"
          },
          "preco_min": {
            "type": "number",
            "description": "Preço mínimo, em reais; valor não numérico é ignorado. Tipo documentado: number.",
            "example": 10
          },
          "preco_max": {
            "type": "number",
            "description": "Preço máximo, em reais. Tipo documentado: number.",
            "example": 200
          },
          "order": {
            "type": "string",
            "description": "nome (padrão), preco_asc, preco_desc ou estoque. Valor desconhecido usa nome. Tipo documentado: string.",
            "example": "preco_asc"
          },
          "offset": {
            "type": "integer",
            "description": "Deslocamento a partir de zero. Passe aqui o next_cursor convertido em número. Tipo documentado: integer.",
            "example": 0
          },
          "limit": {
            "type": "integer",
            "description": "Recomendado de 1 a 60; padrão 24 e teto 60. Use valores positivos; números negativos podem retornar INTERNAL_ERROR. Tipo documentado: integer.",
            "example": 24
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada."
      },
      "ProductsListResult": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "nome": {
                  "type": "string"
                },
                "codigo": {
                  "type": "string"
                },
                "idCatalogo": {
                  "type": "string",
                  "nullable": true
                },
                "marca": {
                  "type": "string"
                },
                "categoria": {
                  "type": "string"
                },
                "imagemThumb": {
                  "type": "string"
                },
                "imagens": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                },
                "imagensCount": {
                  "type": "number"
                },
                "specs": {
                  "type": "object",
                  "properties": {
                    "potencia": {
                      "type": "string"
                    },
                    "tensao": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": true,
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                },
                "preco_venda": {
                  "type": "number",
                  "nullable": true
                },
                "estoque": {
                  "type": "number",
                  "nullable": true
                },
                "reservado": {
                  "type": "number"
                },
                "disponivel_qtd": {
                  "type": "number",
                  "nullable": true
                },
                "disponivel": {
                  "type": "boolean"
                },
                "motivo_indisponivel": {
                  "nullable": true,
                  "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional.",
                  "type": "string",
                  "enum": [
                    "sem_preco",
                    "sem_saldo",
                    "esgotado"
                  ]
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          },
          "total": {
            "type": "integer",
            "minimum": 0
          },
          "next_cursor": {
            "nullable": true,
            "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional.",
            "type": "string"
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais.",
        "x-constraint-evidence": "catalog-and-code-reviewed"
      },
      "ProductsListSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "products.list"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/ProductsListResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "ProductsSearchRequest": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "Busca tolerante por nome/SKU. Espaços ou * separam até 10 termos combinados com AND; cada termo e os campos comparados são normalizados para minúsculas e caracteres alfanuméricos, ignorando acentos, espaços e pontuação. Termos brutos formados apenas por dígitos e pontos também procuram idCatalogo sem pontos. products.search e products.list usam a mesma função. Tipo documentado: string.",
            "example": "produto"
          },
          "marca": {
            "type": "string",
            "description": "Nome exato da marca, não seu UUID. Tipo documentado: string.",
            "example": "Marca exemplo"
          },
          "categoria": {
            "type": "string",
            "description": "Nome exato da categoria, não seu UUID. Tipo documentado: string.",
            "example": "Categoria exemplo"
          },
          "familia": {
            "type": "string",
            "description": "Família exata do cadastro. Tipo documentado: string.",
            "example": "Linha exemplo"
          },
          "tag": {
            "type": "string",
            "description": "Texto contido nas tags de origem do cadastro. Tipo documentado: string.",
            "example": "erp"
          },
          "preco_min": {
            "type": "number",
            "description": "Preço mínimo, em reais; valor não numérico é ignorado. Tipo documentado: number.",
            "example": 10
          },
          "preco_max": {
            "type": "number",
            "description": "Preço máximo, em reais. Tipo documentado: number.",
            "example": 200
          },
          "order": {
            "type": "string",
            "description": "nome (padrão), preco_asc, preco_desc ou estoque. Valor desconhecido usa nome. Tipo documentado: string.",
            "example": "preco_asc"
          },
          "offset": {
            "type": "integer",
            "description": "Deslocamento a partir de zero. Passe aqui o next_cursor convertido em número. Tipo documentado: integer.",
            "example": 0
          },
          "limit": {
            "type": "integer",
            "description": "Recomendado de 1 a 60; padrão 24 e teto 60. Use valores positivos; números negativos podem retornar INTERNAL_ERROR. Tipo documentado: integer.",
            "example": 24
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada."
      },
      "ProductsSearchResult": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "nome": {
                  "type": "string"
                },
                "codigo": {
                  "type": "string"
                },
                "idCatalogo": {
                  "type": "string",
                  "nullable": true
                },
                "marca": {
                  "type": "string"
                },
                "categoria": {
                  "type": "string"
                },
                "imagemThumb": {
                  "type": "string"
                },
                "imagens": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                },
                "imagensCount": {
                  "type": "number"
                },
                "specs": {
                  "type": "object",
                  "properties": {
                    "potencia": {
                      "type": "string"
                    },
                    "tensao": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": true,
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                },
                "preco_venda": {
                  "type": "number",
                  "nullable": true
                },
                "estoque": {
                  "type": "number",
                  "nullable": true
                },
                "reservado": {
                  "type": "number"
                },
                "disponivel_qtd": {
                  "type": "number",
                  "nullable": true
                },
                "disponivel": {
                  "type": "boolean"
                },
                "motivo_indisponivel": {
                  "nullable": true,
                  "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional.",
                  "type": "string",
                  "enum": [
                    "sem_preco",
                    "sem_saldo",
                    "esgotado"
                  ]
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          },
          "total": {
            "type": "integer",
            "minimum": 0
          },
          "next_cursor": {
            "nullable": true,
            "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional.",
            "type": "string"
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais.",
        "x-constraint-evidence": "catalog-and-code-reviewed"
      },
      "ProductsSearchSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "products.search"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/ProductsSearchResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "ShopBannersListRequest": {
        "type": "object",
        "properties": {
          "slot": {
            "type": "string",
            "description": "Posição exata do banner. Sem slot, retorna todas as posições. Tipo documentado: string.",
            "example": "home"
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada."
      },
      "ShopBannersListResult": {
        "type": "object",
        "properties": {
          "banners": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "slot": {
                  "type": "string"
                },
                "titulo": {
                  "type": "string"
                },
                "imagem_url": {
                  "type": "string"
                },
                "link_url": {
                  "type": "string"
                },
                "ordem": {
                  "type": "number"
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          },
          "carrossel": {
            "type": "object",
            "properties": {
              "efeito": {
                "type": "string"
              },
              "intervalo_ms": {
                "type": "number"
              },
              "transicao_ms": {
                "type": "number"
              },
              "autoplay": {
                "type": "boolean"
              },
              "laco": {
                "type": "boolean"
              },
              "mostrar_setas": {
                "type": "boolean"
              },
              "mostrar_pontos": {
                "type": "boolean"
              },
              "pausar_no_hover": {
                "type": "boolean"
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "ShopBannersListSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "shop.banners.list"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/ShopBannersListResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "ShopDescontoValidarRequest": {
        "type": "object",
        "properties": {
          "codigo": {
            "type": "string",
            "description": "Cupom informado. Normaliza para maiúsculas e remove espaços. Sem código, calcula automáticos. Tipo documentado: string.",
            "example": "DEMO10"
          },
          "itens": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": true,
                  "properties": {
                    "sku": {
                      "type": "string",
                      "description": "SKU do produto. Em cada item informado, envie sku OU codigo; sku tem precedência quando ambos são preenchidos. Tipo documentado: string.",
                      "example": "DEMO-01"
                    },
                    "codigo": {
                      "type": "string",
                      "description": "Alternativa a itens[].sku. Em cada item informado, é necessário identificar o produto por sku OU codigo. Tipo documentado: string.",
                      "example": "DEMO-01"
                    },
                    "qtd": {
                      "type": "integer",
                      "description": "Quantidade; quantidade é alias; mínimo efetivo 1. Tipo documentado: integer.",
                      "example": 2
                    }
                  },
                  "anyOf": [
                    {
                      "required": [
                        "sku"
                      ]
                    },
                    {
                      "required": [
                        "codigo"
                      ]
                    }
                  ],
                  "x-constraint-evidence": "catalog-and-code-reviewed"
                }
              },
              {
                "type": "string"
              }
            ],
            "description": "Lista de itens. Aceita array JSON ou string JSON. Preço enviado pelo cliente é ignorado. Tipo documentado: array<object> | string JSON.",
            "example": [
              {
                "sku": "DEMO-01",
                "qtd": 2
              }
            ]
          },
          "frete_cents": {
            "type": "integer",
            "description": "Cotação de frete em centavos, usada somente para estimar o desconto; o valor final deve ser recalculado no fluxo comercial autorizado. Tipo documentado: integer.",
            "example": 900
          },
          "cliente": {
            "type": "object",
            "additionalProperties": true,
            "description": "CPF/cpf_cnpj ou email para restrições de uso por comprador. Envie objeto JSON, não string. Tipo documentado: object.",
            "example": {
              "email": "comprador@example.com"
            }
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada.",
        "required": [
          "itens"
        ]
      },
      "ShopDescontoValidarResult": {
        "type": "object",
        "properties": {
          "descontos": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "tipo": {
                  "type": "string"
                },
                "metodo": {
                  "type": "string"
                },
                "codigo": {
                  "type": "string"
                },
                "nome": {
                  "type": "string"
                },
                "valor_cents": {
                  "type": "number"
                },
                "valor": {
                  "type": "number"
                },
                "skus": {
                  "type": "array",
                  "items": {},
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                },
                "frete_gratis": {
                  "type": "boolean"
                },
                "combina": {
                  "type": "object",
                  "properties": {
                    "produto": {
                      "type": "boolean"
                    },
                    "pedido": {
                      "type": "boolean"
                    },
                    "frete": {
                      "type": "boolean"
                    }
                  },
                  "additionalProperties": true,
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          },
          "valor_cents": {
            "type": "number"
          },
          "frete_gratis": {
            "type": "boolean"
          },
          "frete_desconto_cents": {
            "type": "number"
          },
          "valor": {
            "type": "number"
          },
          "recusa": {
            "nullable": true,
            "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "ShopDescontoValidarSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "shop.desconto.validar"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/ShopDescontoValidarResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "ShopFreteCalcularRequest": {
        "type": "object",
        "properties": {
          "cep": {
            "type": "string",
            "description": "CEP de destino; pontuação é normalizada. Envie 8 dígitos. Tipo documentado: string.",
            "example": "01001000"
          },
          "itens": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": true,
                  "properties": {
                    "sku": {
                      "type": "string",
                      "description": "SKU do produto. Em cada item informado, envie sku OU codigo; sku tem precedência quando ambos são preenchidos. Tipo documentado: string.",
                      "example": "DEMO-01"
                    },
                    "codigo": {
                      "type": "string",
                      "description": "Alternativa a itens[].sku. Em cada item informado, é necessário identificar o produto por sku OU codigo. Tipo documentado: string.",
                      "example": "DEMO-01"
                    },
                    "qtd": {
                      "type": "integer",
                      "description": "Quantidade; quantidade é alias; valores são arredondados para baixo e limitados ao mínimo 1. Tipo documentado: integer.",
                      "example": 2
                    }
                  },
                  "anyOf": [
                    {
                      "required": [
                        "sku"
                      ]
                    },
                    {
                      "required": [
                        "codigo"
                      ]
                    }
                  ],
                  "x-constraint-evidence": "catalog-and-code-reviewed"
                }
              },
              {
                "type": "string"
              }
            ],
            "description": "Lista de SKU e quantidade. Este método aceita array JSON ou string JSON; string inválida vira lista vazia. Tipo documentado: array<object> | string JSON.",
            "example": [
              {
                "sku": "DEMO-01",
                "qtd": 2
              }
            ]
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada.",
        "required": [
          "cep",
          "itens"
        ]
      },
      "ShopFreteCalcularResult": {
        "type": "object",
        "properties": {
          "cep": {
            "type": "string"
          },
          "uf": {
            "type": "string"
          },
          "opcoes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "opcao_ids": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                },
                "nome": {
                  "type": "string"
                },
                "valor_cents": {
                  "type": "number"
                },
                "prazo_min_dias": {
                  "type": "number"
                },
                "prazo_max_dias": {
                  "type": "number"
                },
                "id": {
                  "type": "string"
                },
                "valor": {
                  "type": "number"
                },
                "entrega_estimada": {
                  "nullable": true,
                  "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          },
          "retirada": {
            "nullable": true,
            "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
          },
          "entrega_local": {
            "nullable": true,
            "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
          },
          "origem": {
            "type": "object",
            "properties": {
              "cep": {
                "type": "string"
              },
              "uf": {
                "type": "string"
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "motivo": {
            "nullable": true,
            "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
          },
          "itens_sem_frete": {
            "type": "array",
            "items": {},
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          },
          "peso_incompleto": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "ShopFreteCalcularSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "shop.frete.calcular"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/ShopFreteCalcularResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "ShopFreteConfigRequest": {
        "type": "object",
        "properties": {},
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada."
      },
      "ShopFreteConfigResult": {
        "type": "object",
        "properties": {
          "retirada": {
            "type": "object",
            "properties": {
              "ativo": {
                "type": "boolean"
              },
              "prazo": {
                "type": "string"
              },
              "prazo_label": {
                "type": "string"
              },
              "mensagem": {
                "type": "string"
              },
              "instrucoes": {
                "type": "string"
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "entrega_local": {
            "type": "object",
            "properties": {
              "ativo": {
                "type": "boolean"
              },
              "a_partir_de_cents": {
                "type": "number"
              },
              "a_partir_de": {
                "type": "number"
              },
              "zonas": {
                "type": "number"
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "datas_estimadas": {
            "type": "boolean"
          },
          "origem": {
            "type": "object",
            "properties": {
              "cep": {
                "type": "string"
              },
              "uf": {
                "type": "string"
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "ShopFreteConfigSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "shop.frete.config"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/ShopFreteConfigResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "ShopLojaConfigRequest": {
        "type": "object",
        "properties": {},
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada."
      },
      "ShopLojaConfigResult": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string"
          },
          "logo_url": {
            "type": "string"
          },
          "logo_quadrada_url": {
            "type": "string"
          },
          "descricao": {
            "type": "string"
          },
          "slogan": {
            "nullable": true,
            "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
          },
          "cores": {
            "type": "object",
            "properties": {
              "principal": {
                "type": "string"
              },
              "texto": {
                "type": "string"
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "contato": {
            "type": "object",
            "properties": {
              "whatsapp": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "email": {
                "type": "string"
              },
              "endereco": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "telefone": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "cnpj": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "busca_placeholder": {
            "nullable": true,
            "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
          },
          "rodape": {
            "type": "object",
            "properties": {
              "colunas": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "topbar": {
            "type": "object",
            "properties": {
              "avisos": {
                "type": "array",
                "items": {},
                "x-schema-confidence": "reviewed-example-derived",
                "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
              },
              "frete_gratis_acima": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "desconto_pix": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "atacado_url": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "atendimento": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "pagamentos": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          },
          "politicas": {
            "type": "object",
            "properties": {
              "troca": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "privacidade": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "entrega": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "aparencia": {
            "type": "object",
            "properties": {
              "cores": {
                "type": "object",
                "properties": {
                  "fundo": {
                    "nullable": true,
                    "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                  },
                  "superficie": {
                    "nullable": true,
                    "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                  },
                  "botao": {
                    "nullable": true,
                    "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                  },
                  "botao_texto": {
                    "nullable": true,
                    "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                  }
                },
                "additionalProperties": true,
                "x-schema-confidence": "reviewed-example-derived",
                "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
              },
              "fonte": {
                "nullable": true,
                "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
              },
              "banner": {
                "type": "object",
                "properties": {
                  "ativo": {
                    "type": "boolean"
                  },
                  "titulo": {
                    "nullable": true,
                    "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                  },
                  "subtitulo": {
                    "nullable": true,
                    "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                  },
                  "imagem_url": {
                    "nullable": true,
                    "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                  },
                  "cta_texto": {
                    "nullable": true,
                    "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                  },
                  "cta_url": {
                    "nullable": true,
                    "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                  }
                },
                "additionalProperties": true,
                "x-schema-confidence": "reviewed-example-derived",
                "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
              },
              "destaques": {
                "type": "object",
                "properties": {
                  "ativo": {
                    "type": "boolean"
                  },
                  "titulo": {
                    "nullable": true,
                    "description": "O exemplo auditado contém null; o tipo não nulo não foi inferido sem evidência adicional."
                  },
                  "skus": {
                    "type": "array",
                    "items": {},
                    "x-schema-confidence": "reviewed-example-derived",
                    "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                  }
                },
                "additionalProperties": true,
                "x-schema-confidence": "reviewed-example-derived",
                "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "completa": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "ShopLojaConfigSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "shop.loja.config"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/ShopLojaConfigResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      },
      "MarketingFunnelRequest": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "description": "Data inicial inclusiva. Tipo documentado: string (YYYY-MM-DD).",
            "example": "2026-09-18"
          },
          "to": {
            "type": "string",
            "format": "date",
            "description": "Data final inclusiva. Intervalo de 1 a 92 dias. Tipo documentado: string (YYYY-MM-DD).",
            "example": "2026-09-18"
          },
          "pipeline_id": {
            "type": "integer",
            "description": "ID positivo do funil acessível à empresa. Tipo documentado: integer.",
            "example": 1
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "catalog-reviewed",
        "x-schema-basis": "Parâmetros, tipos e obrigatoriedade da fonte editorial auditada.",
        "required": [
          "from",
          "to",
          "pipeline_id"
        ]
      },
      "MarketingFunnelResult": {
        "type": "object",
        "properties": {
          "company_id": {
            "type": "string"
          },
          "from": {
            "type": "string"
          },
          "to": {
            "type": "string"
          },
          "generated_at": {
            "type": "string"
          },
          "days": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "type": "string"
                },
                "leads": {
                  "type": "object",
                  "properties": {
                    "total": {
                      "type": "number"
                    },
                    "google": {
                      "type": "number"
                    },
                    "meta": {
                      "type": "number"
                    },
                    "other": {
                      "type": "number"
                    },
                    "junk": {
                      "type": "number"
                    },
                    "junk_by_reason": {
                      "type": "array",
                      "items": {},
                      "x-schema-confidence": "reviewed-example-derived",
                      "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                    }
                  },
                  "additionalProperties": true,
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                },
                "opportunities": {
                  "type": "object",
                  "properties": {
                    "created": {
                      "type": "number"
                    },
                    "value": {
                      "type": "number"
                    },
                    "by_channel": {
                      "type": "array",
                      "items": {},
                      "x-schema-confidence": "reviewed-example-derived",
                      "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                    },
                    "by_pipeline": {
                      "type": "array",
                      "items": {},
                      "x-schema-confidence": "reviewed-example-derived",
                      "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                    }
                  },
                  "additionalProperties": true,
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                },
                "sales": {
                  "type": "object",
                  "properties": {
                    "won": {
                      "type": "number"
                    },
                    "value": {
                      "type": "number"
                    },
                    "by_channel": {
                      "type": "array",
                      "items": {},
                      "x-schema-confidence": "reviewed-example-derived",
                      "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                    },
                    "by_pipeline": {
                      "type": "array",
                      "items": {},
                      "x-schema-confidence": "reviewed-example-derived",
                      "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                    },
                    "lost": {
                      "type": "number"
                    },
                    "lost_by_reason": {
                      "type": "array",
                      "items": {},
                      "x-schema-confidence": "reviewed-example-derived",
                      "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
                    }
                  },
                  "additionalProperties": true,
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          },
          "stalled": {
            "type": "object",
            "properties": {
              "snapshot_date": {
                "type": "string"
              },
              "buckets": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "count": {
                      "type": "number"
                    },
                    "value": {
                      "type": "number"
                    }
                  },
                  "additionalProperties": true,
                  "x-schema-confidence": "reviewed-example-derived",
                  "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
                },
                "x-schema-confidence": "reviewed-example-derived",
                "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
              }
            },
            "additionalProperties": true,
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
          },
          "pipelines": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "number"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": true,
              "x-schema-confidence": "reviewed-example-derived",
              "x-schema-basis": "Campos e tipos presentes no exemplo editorial; propriedades adicionais podem ser retornadas."
            },
            "x-schema-confidence": "reviewed-example-derived",
            "x-schema-basis": "Estrutura observada no exemplo editorial; itens adicionais continuam permitidos pelo contrato descrito."
          }
        },
        "additionalProperties": true,
        "x-schema-confidence": "reviewed-example-derived",
        "x-schema-basis": "Schema conservador derivado do exemplo editorial auditado; objetos aceitam propriedades adicionais."
      },
      "MarketingFunnelSuccess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "required": [
              "result"
            ],
            "properties": {
              "method": {
                "type": "string",
                "enum": [
                  "marketing.funnel"
                ]
              },
              "result": {
                "$ref": "#/components/schemas/MarketingFunnelResult"
              }
            },
            "additionalProperties": true
          }
        ],
        "x-schema-confidence": "reviewed-example-derived"
      }
    }
  },
  "x-public-profile": "public-consultations-v1"
}
