{
  "openapi": "3.1.0",
  "info": {
    "title": "Audácia API V1",
    "version": "0.1.9-documentacao",
    "description": "Especificação incremental gerada do catálogo de rotas verificado com Modules/API/routes/api.php. Campos marcados route-only não representam contratos completos de payload/resposta. Endpoints printing.agent são de uso interno do Agente."
  },
  "servers": [
    {
      "url": "https://audacia.com.br"
    }
  ],
  "tags": [
    {
      "name": "Conectividade e identificação"
    },
    {
      "name": "Clientes e fornecedores"
    },
    {
      "name": "Produtos e serviços"
    },
    {
      "name": "Ofertas"
    },
    {
      "name": "Estoque"
    },
    {
      "name": "Audácia Agente: fila de impressão"
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerToken": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "Token",
        "description": "Token de integração vinculado à empresa e às permissões."
      }
    },
    "schemas": {
      "ValidationError": {
        "type": "object",
        "required": [
          "success",
          "message",
          "errors"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": false
          },
          "message": {
            "type": "string"
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  },
  "paths": {
    "/api/v1/health": {
      "get": {
        "tags": [
          "Conectividade e identificação"
        ],
        "operationId": "get_health",
        "summary": "Verificação HTTP da API",
        "description": "Permissão: Público. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "200": {
            "description": "API responde à verificação HTTP; não comprova módulos internos."
          }
        },
        "x-audacia-ability": "Público",
        "x-audacia-contract-completeness": "verified-route-response-code",
        "security": []
      }
    },
    "/api/v1/me": {
      "get": {
        "tags": [
          "Conectividade e identificação"
        ],
        "operationId": "get_me",
        "summary": "Identificação do cliente de API",
        "description": "Permissão: Token de integração. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "Token de integração",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ]
      }
    },
    "/api/v1/customers": {
      "get": {
        "tags": [
          "Clientes e fornecedores"
        ],
        "operationId": "get_customers",
        "summary": "Listar",
        "description": "Permissão: customers.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "customers.read",
        "x-audacia-contract-completeness": "query-partial",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "code",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "post": {
        "tags": [
          "Clientes e fornecedores"
        ],
        "operationId": "post_customers",
        "summary": "Cadastrar",
        "description": "Permissão: customers.create. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          },
          "422": {
            "description": "Erro de validação (ApiFormRequest)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          }
        },
        "x-audacia-ability": "customers.create",
        "x-audacia-contract-completeness": "request-partial",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "type"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 255,
                    "example": "Cliente de exemplo"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "F",
                      "J"
                    ]
                  },
                  "code": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "taxvat": {
                    "type": "string",
                    "maxLength": 14,
                    "description": "Somente dígitos após normalização"
                  },
                  "mobile": {
                    "type": "string",
                    "maxLength": 30
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 255
                  },
                  "addresses": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "zipcode",
                        "street",
                        "district",
                        "city",
                        "state",
                        "number"
                      ],
                      "properties": {
                        "zipcode": {
                          "type": "string",
                          "minLength": 8,
                          "maxLength": 8
                        },
                        "street": {
                          "type": "string",
                          "maxLength": 255
                        },
                        "district": {
                          "type": "string",
                          "maxLength": 255
                        },
                        "city": {
                          "type": "string",
                          "maxLength": 255
                        },
                        "state": {
                          "type": "string",
                          "minLength": 2,
                          "maxLength": 2
                        },
                        "number": {
                          "type": "string",
                          "maxLength": 100
                        },
                        "complement": {
                          "type": "string",
                          "maxLength": 255
                        }
                      }
                    }
                  },
                  "credit_limit": {
                    "type": "number",
                    "minimum": 0
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/customers/by-code/{code}": {
      "get": {
        "tags": [
          "Clientes e fornecedores"
        ],
        "operationId": "get_customers_by_code_code",
        "summary": "Consultar por código",
        "description": "Permissão: customers.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "customers.read",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/customers/by-document/{document}": {
      "get": {
        "tags": [
          "Clientes e fornecedores"
        ],
        "operationId": "get_customers_by_document_document",
        "summary": "Consultar por documento",
        "description": "Permissão: customers.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "customers.read",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "document",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9]+$"
            }
          }
        ]
      }
    },
    "/api/v1/customers/{customer}": {
      "get": {
        "tags": [
          "Clientes e fornecedores"
        ],
        "operationId": "get_customers_customer",
        "summary": "Consultar por ID",
        "description": "Permissão: customers.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "customers.read",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "customer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      },
      "put": {
        "tags": [
          "Clientes e fornecedores"
        ],
        "operationId": "put_customers_customer",
        "summary": "Atualizar",
        "description": "Permissão: customers.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "customers.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "customer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Clientes e fornecedores"
        ],
        "operationId": "patch_customers_customer",
        "summary": "Atualizar",
        "description": "Permissão: customers.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "customers.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "customer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/customers/{customer}/relationships": {
      "get": {
        "tags": [
          "Clientes e fornecedores"
        ],
        "operationId": "get_customers_customer_relationships",
        "summary": "Consultar relacionamentos",
        "description": "Permissão: customers.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "customers.read",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "customer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      },
      "post": {
        "tags": [
          "Clientes e fornecedores"
        ],
        "operationId": "post_customers_customer_relationships",
        "summary": "Adicionar relacionamento",
        "description": "Permissão: customers.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "customers.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "customer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/customers/{customer}/relationships/{direction}/{relatedCustomer}": {
      "delete": {
        "tags": [
          "Clientes e fornecedores"
        ],
        "operationId": "delete_customers_customer_relationships_direction_relatedcustomer",
        "summary": "Excluir relacionamento",
        "description": "Permissão: customers.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "customers.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "customer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "name": "direction",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "parent",
                "child"
              ]
            }
          },
          {
            "name": "relatedCustomer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/products": {
      "get": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "get_products",
        "summary": "Listar",
        "description": "Permissão: products.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.read",
        "x-audacia-contract-completeness": "query-partial",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "post": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "post_products",
        "summary": "Cadastrar",
        "description": "Permissão: products.create. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          },
          "422": {
            "description": "Erro de validação (ApiFormRequest)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          }
        },
        "x-audacia-ability": "products.create",
        "x-audacia-contract-completeness": "request-partial",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "manage_stock",
                  "code",
                  "name",
                  "price",
                  "unit"
                ],
                "properties": {
                  "manage_stock": {
                    "type": "boolean"
                  },
                  "code": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 100
                  },
                  "name": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 255
                  },
                  "price": {
                    "type": "number",
                    "minimum": 0
                  },
                  "unit": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "SIMPLE",
                      "ASSEMBLY",
                      "VARIATION"
                    ],
                    "default": "SIMPLE"
                  },
                  "condition": {
                    "type": "string",
                    "enum": [
                      "NOT_SPECIFIED",
                      "NEW",
                      "USED"
                    ],
                    "default": "NOT_SPECIFIED"
                  },
                  "ncm": {
                    "type": "string",
                    "pattern": "^[0-9]{2,8}$"
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    }
                  },
                  "images": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "alt_text": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "description": "Para type=ASSEMBLY, o campo assembly e suas regras são obrigatórios; consulte a implementação."
              }
            }
          }
        }
      }
    },
    "/api/v1/products/by-code/{code}": {
      "get": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "get_products_by_code_code",
        "summary": "Consultar por código",
        "description": "Permissão: products.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.read",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/v1/products/{product}": {
      "get": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "get_products_product",
        "summary": "Consultar por ID",
        "description": "Permissão: products.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.read",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "product",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      },
      "put": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "put_products_product",
        "summary": "Atualizar",
        "description": "Permissão: products.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "product",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "patch_products_product",
        "summary": "Atualizar",
        "description": "Permissão: products.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "product",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      },
      "delete": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "delete_products_product",
        "summary": "Excluir",
        "description": "Permissão: products.delete. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.delete",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "product",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/search/products": {
      "get": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "get_search_products",
        "summary": "Pesquisa",
        "description": "Permissão: products.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.read",
        "x-audacia-contract-completeness": "query-partial",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/products/categories/{category}/sync": {
      "put": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "put_products_categories_category_sync",
        "summary": "Sincronizar categoria",
        "description": "Permissão: products.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "category",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/products/{product}/images": {
      "post": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "post_products_product_images",
        "summary": "Adicionar imagem",
        "description": "Permissão: products.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "product",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/products/{product}/images/replace": {
      "post": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "post_products_product_images_replace",
        "summary": "Substituir imagens",
        "description": "Permissão: products.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "product",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/products/{product}/images/{image}": {
      "delete": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "delete_products_product_images_image",
        "summary": "Excluir imagem",
        "description": "Permissão: products.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "product",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "name": "image",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/products/prices/bulk": {
      "put": {
        "tags": [
          "Produtos e serviços"
        ],
        "operationId": "put_products_prices_bulk",
        "summary": "Atualizar preços em massa",
        "description": "Permissão: products.price.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "products.price.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ]
      }
    },
    "/api/v1/offers": {
      "get": {
        "tags": [
          "Ofertas"
        ],
        "operationId": "get_offers",
        "summary": "Listar",
        "description": "Permissão: offers.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "offers.read",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ]
      },
      "post": {
        "tags": [
          "Ofertas"
        ],
        "operationId": "post_offers",
        "summary": "Cadastrar",
        "description": "Permissão: offers.create. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "offers.create",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ]
      }
    },
    "/api/v1/offers/{offer}": {
      "get": {
        "tags": [
          "Ofertas"
        ],
        "operationId": "get_offers_offer",
        "summary": "Consultar",
        "description": "Permissão: offers.read. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "offers.read",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "offer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      },
      "put": {
        "tags": [
          "Ofertas"
        ],
        "operationId": "put_offers_offer",
        "summary": "Atualizar",
        "description": "Permissão: offers.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "offers.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "offer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      },
      "patch": {
        "tags": [
          "Ofertas"
        ],
        "operationId": "patch_offers_offer",
        "summary": "Atualizar",
        "description": "Permissão: offers.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "offers.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "offer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      },
      "delete": {
        "tags": [
          "Ofertas"
        ],
        "operationId": "delete_offers_offer",
        "summary": "Excluir",
        "description": "Permissão: offers.delete. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "offers.delete",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "offer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/offers/quote": {
      "post": {
        "tags": [
          "Ofertas"
        ],
        "operationId": "post_offers_quote",
        "summary": "Simular oferta",
        "description": "Permissão: offers.quote. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "offers.quote",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ]
      }
    },
    "/api/v1/offers/quote/bulk": {
      "post": {
        "tags": [
          "Ofertas"
        ],
        "operationId": "post_offers_quote_bulk",
        "summary": "Simular em massa",
        "description": "Permissão: offers.quote. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "offers.quote",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ]
      }
    },
    "/api/v1/inventory/stock/products/by-code/{code}": {
      "put": {
        "tags": [
          "Estoque"
        ],
        "operationId": "put_inventory_stock_products_by_code_code",
        "summary": "Atualizar por código",
        "description": "Permissão: inventory.stock.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          },
          "422": {
            "description": "Erro de validação (ApiFormRequest)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          }
        },
        "x-audacia-ability": "inventory.stock.update",
        "x-audacia-contract-completeness": "request-partial",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "quantity"
                ],
                "properties": {
                  "quantity": {
                    "type": "number",
                    "minimum": 0
                  },
                  "warehouse_id": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "warehouse_code": {
                    "type": "string",
                    "maxLength": 20
                  },
                  "location_id": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "location_code": {
                    "type": "string",
                    "maxLength": 50
                  },
                  "lot_id": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "lot_number": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "observation": {
                    "type": "string",
                    "maxLength": 1000
                  }
                },
                "description": "Exatamente um de warehouse_id ou warehouse_code é obrigatório; campos alternativos de localização e lote são mutuamente exclusivos."
              }
            }
          }
        }
      }
    },
    "/api/v1/inventory/stock/products/{product}": {
      "put": {
        "tags": [
          "Estoque"
        ],
        "operationId": "put_inventory_stock_products_product",
        "summary": "Atualizar por ID",
        "description": "Permissão: inventory.stock.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          },
          "422": {
            "description": "Erro de validação (ApiFormRequest)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          }
        },
        "x-audacia-ability": "inventory.stock.update",
        "x-audacia-contract-completeness": "request-partial",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "parameters": [
          {
            "name": "product",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "quantity"
                ],
                "properties": {
                  "quantity": {
                    "type": "number",
                    "minimum": 0
                  },
                  "warehouse_id": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "warehouse_code": {
                    "type": "string",
                    "maxLength": 20
                  },
                  "location_id": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "location_code": {
                    "type": "string",
                    "maxLength": 50
                  },
                  "lot_id": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "lot_number": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "observation": {
                    "type": "string",
                    "maxLength": 1000
                  }
                },
                "description": "Exatamente um de warehouse_id ou warehouse_code é obrigatório; campos alternativos de localização e lote são mutuamente exclusivos."
              }
            }
          }
        }
      }
    },
    "/api/v1/inventory/stock/bulk": {
      "put": {
        "tags": [
          "Estoque"
        ],
        "operationId": "put_inventory_stock_bulk",
        "summary": "Atualizar em massa",
        "description": "Permissão: inventory.stock.update. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "inventory.stock.update",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ]
      }
    },
    "/api/v1/printing/register": {
      "post": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "post_printing_register",
        "summary": "Registrar agente",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true
      }
    },
    "/api/v1/printing/heartbeat": {
      "post": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "post_printing_heartbeat",
        "summary": "Atualizar presença",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true
      }
    },
    "/api/v1/printing/config": {
      "get": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "get_printing_config",
        "summary": "Consultar configurações",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true
      }
    },
    "/api/v1/printing/routes": {
      "put": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "put_printing_routes",
        "summary": "Salvar destinos",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true
      }
    },
    "/api/v1/printing/jobs/next": {
      "post": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "post_printing_jobs_next",
        "summary": "Solicitar próximo trabalho",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true
      }
    },
    "/api/v1/printing/history": {
      "get": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "get_printing_history",
        "summary": "Histórico",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true
      }
    },
    "/api/v1/printing/jobs/{job}": {
      "get": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "get_printing_jobs_job",
        "summary": "Consultar trabalho",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true,
        "parameters": [
          {
            "name": "job",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/printing/jobs/{job}/retry": {
      "post": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "post_printing_jobs_job_retry",
        "summary": "Repetir tentativa",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true,
        "parameters": [
          {
            "name": "job",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/printing/jobs/{job}/reprint": {
      "post": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "post_printing_jobs_job_reprint",
        "summary": "Reimprimir",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true,
        "parameters": [
          {
            "name": "job",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/printing/jobs/{job}/confirm": {
      "post": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "post_printing_jobs_job_confirm",
        "summary": "Confirmar impressão",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true,
        "parameters": [
          {
            "name": "job",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    },
    "/api/v1/printing/jobs/{job}/error": {
      "post": {
        "tags": [
          "Audácia Agente: fila de impressão"
        ],
        "operationId": "post_printing_jobs_job_error",
        "summary": "Informar erro",
        "description": "Permissão: printing.agent. Contrato detalhado de entrada e saída em documentação progressiva; não assumir campos não declarados. Uso restrito ao Audácia Agente, não é API geral para terceiros.",
        "responses": {
          "default": {
            "description": "Resposta da operação. Consulte o guia do recurso; o esquema detalhado ainda não foi formalmente homologado."
          }
        },
        "x-audacia-ability": "printing.agent",
        "x-audacia-contract-completeness": "route-only",
        "security": [
          {
            "BearerToken": []
          }
        ],
        "x-audacia-internal-agent": true,
        "parameters": [
          {
            "name": "job",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ]
      }
    }
  },
  "x-audacia-review": {
    "note": "Não executar chamadas mutáveis em produção para testar documentação. Amostras são ilustrativas, sem dados reais.",
    "catalog_groups": 6,
    "catalog_entries": 44,
    "expanded_operations": 47
  }
}
