{"openapi":"3.1.0","info":{"title":"Nomodo API","description":"\nAPI de filtragem e observação de tráfego de rede.\n\n**Prefixo.** Todos os endpoints ficam sob `/nomodo/api`. Uma chamada sem esse\nprefixo não é reconhecida e responde `403`.\n\n**Autenticação.** Dois caminhos, ambos aceitos em qualquer endpoint:\no header `X-API-Key`, para integrações, e o cookie de sessão do painel, enviado\nsozinho pelo browser. No Swagger UI, use o botão **Authorize** e informe a chave\numa vez: ela vale para todos os endpoints e sobrevive ao recarregamento da\npágina. Cada chave carrega um conjunto de permissões; uma chamada fora dele\nresponde `403` com o código em `error.code`.\n\n**Alterações são confirmadas em duas etapas.** Criar, alterar ou remover regras,\ncadeias e listas deixa a mudança *pendente*. Ela só entra em vigor depois de\nconfirmada em **Commit**, que também permite descartar o que estiver pendente.\n\n**Operações assíncronas.** Alguns endpoints de listas de endereços não devolvem\no resultado na hora: devolvem um identificador de operação, que é consultado\ndepois no endpoint `operations` da própria seção.\n\n**Erros.** Toda resposta segue o mesmo envelope, com `success`, `message`,\n`data` e `error`. Em caso de falha, `error.code` é um identificador estável,\npróprio para ser tratado em código.\n","version":"v0.1.29"},"paths":{"/hc":{"get":{"tags":["Status"],"summary":"Health Check","description":"Returns health based on recent warnings and errors.","operationId":"health_check_hc_get","responses":{"200":{"description":"Health check response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HealthCheckData_"}}}}}}},"/nomodo/api/address-lists":{"get":{"tags":["Address Lists"],"summary":"List address lists","description":"Return address lists and their prefixes using configured filters.","operationId":"list_address_lists_nomodo_api_address_lists_get","parameters":[{"name":"include_pending","in":"query","required":false,"schema":{"type":"boolean","description":"Include entries marked as pending commit.","default":true,"title":"Include Pending"},"description":"Include entries marked as pending commit."},{"name":"include_removed","in":"query","required":false,"schema":{"type":"boolean","description":"Include entries marked for removal.","default":false,"title":"Include Removed"},"description":"Include entries marked for removal."},{"name":"only_active","in":"query","required":false,"schema":{"type":"boolean","description":"Return only prefixes with the active flag set.","default":false,"title":"Only Active"},"description":"Return only prefixes with the active flag set."},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Return only the address list with the given name.","title":"Name"},"description":"Return only the address list with the given name."},{"name":"names","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter response to the provided address list names.","title":"Names"},"description":"Filter response to the provided address list names."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum number of address lists to return.","default":100,"title":"Limit"},"description":"Maximum number of address lists to return."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of address lists to skip before collecting results.","default":0,"title":"Offset"},"description":"Number of address lists to skip before collecting results."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"post":{"tags":["Address Lists"],"summary":"Create an address list entry (asynchronous)","description":"Queue a create/update address-list entry operation.","operationId":"create_address_list_entry_nomodo_api_address_lists_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressListCreateRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListOperationAccepted_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"delete":{"tags":["Address Lists"],"summary":"Remove address list entry (asynchronous)","description":"Queue a prefix/list removal operation.","operationId":"delete_address_list_entry_nomodo_api_address_lists_delete","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressListRemoveRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListOperationAccepted_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/address-lists/import":{"post":{"tags":["Address Lists"],"summary":"Import address list entries (replace current contents)","description":"Importa prefixos usando uma lista ou URL remota e substitui o conteúdo atual da address-list.","operationId":"import_address_list_entries_nomodo_api_address_lists_import_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressListImportRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListOperationAccepted_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/address-lists/operations/{operation_id}":{"get":{"tags":["Address Lists"],"summary":"Get asynchronous address-list operation status","description":"Return latest status for a queued address-list operation.","operationId":"get_address_list_operation_status_nomodo_api_address_lists_operations__operation_id__get","parameters":[{"name":"operation_id","in":"path","required":true,"schema":{"type":"string","title":"Operation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListOperationSnapshot_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/address-lists/groups":{"get":{"tags":["Address Lists"],"summary":"List address list groups","description":"Return address list groups without loading prefixes.","operationId":"list_address_list_groups_nomodo_api_address_lists_groups_get","parameters":[{"name":"names","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter response to the provided address list names.","title":"Names"},"description":"Filter response to the provided address list names."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListGroupResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/address-lists/locate":{"get":{"tags":["Address Lists"],"summary":"Locate which address lists contain an IPv4 address","description":"Consulta um endereço por chamada e responde 422 quando ele é inválido. Para vários endereços use '/address-lists/locate-batch', que resolve o lote inteiro em uma única consulta ao banco.","operationId":"locate_address_in_lists_nomodo_api_address_lists_locate_get","parameters":[{"name":"ip","in":"query","required":true,"schema":{"type":"string","description":"Endereço IPv4 único, sem CIDR.","title":"Ip"},"description":"Endereço IPv4 único, sem CIDR."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListLocateResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/address-lists/locate-batch":{"get":{"tags":["Address Lists"],"summary":"Locate which address lists contain each of several IPv4 addresses","description":"Repita o parâmetro 'ip' para consultar vários endereços numa chamada só (máximo de 100 por lote; acima disso a resposta é 422, assim como para um lote vazio). Um endereço ilegível não derruba o lote: ele sai em 'rejected' com o motivo, e os demais respondem normalmente em 'results', no mesmo formato de '/address-lists/locate'.","operationId":"locate_addresses_in_lists_nomodo_api_address_lists_locate_batch_get","parameters":[{"name":"ip","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"description":"Endereço IPv4 sem CIDR; repita para consultar vários.","title":"Ip"},"description":"Endereço IPv4 sem CIDR; repita para consultar vários."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListLocateBatchResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/address-lists/count":{"get":{"tags":["Address Lists"],"summary":"Count the entries of one address list by name","description":"A lista é endereçada pelo nome, então este endpoint aceita o nome e não o id numérico. O total ignora filtros de status.","operationId":"count_address_list_nomodo_api_address_lists_count_get","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","description":"Nome da address list.","title":"Name"},"description":"Nome da address list."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListCountResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/address-lists/config":{"get":{"tags":["Address Lists"],"summary":"Dump address lists in config format","description":"Devolve um bloco '#' por lista seguido de uma linha '/address-list add <lista> <prefixo>' por entrada, ignorando as marcadas para remoção.","operationId":"print_address_lists_config_nomodo_api_address_lists_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListConfigResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/address-lists/actions/remove-all":{"post":{"tags":["Address Lists"],"summary":"Remove every address list","description":"Apaga TODAS as address lists do equipamento. Diferente de DELETE /address-lists com 'full': true, que esvazia apenas a lista informada. Exige 'confirm': true no corpo.","operationId":"remove_all_address_lists_nomodo_api_address_lists_actions_remove_all_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressListRemoveAllRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListRemoveResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/address-lists/{list_id}":{"get":{"tags":["Address Lists"],"summary":"Retrieve address list by id","description":"Return a single address list and its prefixes with pagination.","operationId":"get_address_list_by_id_nomodo_api_address_lists__list_id__get","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"include_pending","in":"query","required":false,"schema":{"type":"boolean","description":"Include entries marked as pending commit.","default":true,"title":"Include Pending"},"description":"Include entries marked as pending commit."},{"name":"include_removed","in":"query","required":false,"schema":{"type":"boolean","description":"Include entries marked for removal.","default":false,"title":"Include Removed"},"description":"Include entries marked for removal."},{"name":"only_active","in":"query","required":false,"schema":{"type":"boolean","description":"Return only prefixes with the active flag set.","default":false,"title":"Only Active"},"description":"Return only prefixes with the active flag set."},{"name":"prefix_limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum number of prefixes to return.","default":100,"title":"Prefix Limit"},"description":"Maximum number of prefixes to return."},{"name":"prefix_offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of prefixes to skip before collecting results.","default":0,"title":"Prefix Offset"},"description":"Number of prefixes to skip before collecting results."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_AddressListDetailResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/bot-detect":{"get":{"tags":["Bot detect"],"summary":"Get the global bot detection thresholds","description":"Return the pps, bps and mask the detector applies.","operationId":"get_bot_detect_params_nomodo_api_bot_detect_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_BotDetectParamsDTO_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}},"put":{"tags":["Bot detect"],"summary":"Set the global bot detection thresholds","description":"Apply new thresholds; commit=false leaves them pending until commit.","operationId":"set_bot_detect_params_nomodo_api_bot_detect_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BotDetectSetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_BotDetectSetResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/bot-detect/config":{"get":{"tags":["Bot detect"],"summary":"Dump the bot detection thresholds in config format","description":"Return the commands that reproduce the current thresholds.","operationId":"get_bot_detect_config_nomodo_api_bot_detect_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_BotDetectConfigResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/chains/stats":{"get":{"tags":["Chains"],"summary":"Get the counters of every chain","description":"Return the cumulative counters and last delta of every sampled chain.","operationId":"list_chain_stats_nomodo_api_chains_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainStatsListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/chains/{chain_id}/stats":{"get":{"tags":["Chains"],"summary":"Get the counters of one chain","description":"Return the counters of a single chain.","operationId":"get_chain_stats_nomodo_api_chains__chain_id__stats_get","parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"integer","minimum":0,"description":"Id da chain.","title":"Chain Id"},"description":"Id da chain."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainStatsDTO_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/chains":{"get":{"tags":["Chains"],"summary":"List chains","description":"Return every chain, so a client can name what a rule stores as an id.","operationId":"list_chains_nomodo_api_chains_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}},"post":{"tags":["Chains"],"summary":"Create a chain","description":"Create a chain on the dataplane.","operationId":"create_chain_nomodo_api_chains_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChainCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainCreateResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/chains/locate":{"get":{"tags":["Chains"],"summary":"Locate which chain owns a prefix","description":"Answer which chain a /24 prefix is bound to.","operationId":"locate_chain_by_prefix_nomodo_api_chains_locate_get","parameters":[{"name":"prefix","in":"query","required":true,"schema":{"type":"string","description":"Prefixo /24 a localizar.","title":"Prefix"},"description":"Prefixo /24 a localizar."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainLocateResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/chains/config":{"get":{"tags":["Chains"],"summary":"Print the chains as replayable configuration","description":"Return the configuration text rule chain print config emits.","operationId":"print_chains_config_nomodo_api_chains_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainConfigResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/chains/{chain_id}":{"get":{"tags":["Chains"],"summary":"Retrieve a single chain by id","description":"Return a single chain given its database id.","operationId":"get_chain_by_id_nomodo_api_chains__chain_id__get","parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"integer","title":"Chain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainDTO_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"patch":{"tags":["Chains"],"summary":"Rename a chain","description":"Rename an existing chain on the dataplane.","operationId":"rename_chain_nomodo_api_chains__chain_id__patch","parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"integer","title":"Chain Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChainRenameRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainRenameResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"delete":{"tags":["Chains"],"summary":"Remove a chain","description":"Remove an existing chain on the dataplane.","operationId":"remove_chain_nomodo_api_chains__chain_id__delete","parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"integer","title":"Chain Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","description":"Remove mesmo com regras. As regras desta chain e as de qualquer outra que faça chain-jump para ela são marcadas como removidas.","default":false,"title":"Force"},"description":"Remove mesmo com regras. As regras desta chain e as de qualquer outra que faça chain-jump para ela são marcadas como removidas."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainRemoveResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/chains/actions/remove-all":{"post":{"tags":["Chains"],"summary":"Remove every chain but the default one","description":"Run rule chain remove all, which spares default and empties the other chains.","operationId":"remove_all_chains_nomodo_api_chains_actions_remove_all_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChainRemoveAllRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainRemoveAllResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/chains/{chain_id}/prefixes":{"post":{"tags":["Chains"],"summary":"Bind a /24 prefix to a chain","description":"Bind a /24 prefix to a chain on the dataplane.","operationId":"bind_chain_prefix_nomodo_api_chains__chain_id__prefixes_post","parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"integer","title":"Chain Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChainPrefixRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainPrefixResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/chains/{chain_id}/prefixes/actions/remove":{"post":{"tags":["Chains"],"summary":"Unbind a /24 prefix from a chain","description":"Unbind a /24 prefix from a chain on the dataplane.","operationId":"unbind_chain_prefix_nomodo_api_chains__chain_id__prefixes_actions_remove_post","parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"integer","title":"Chain Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChainPrefixRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ChainPrefixResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/commits":{"get":{"tags":["Commit"],"summary":"List the commit history","description":"Return the commit history newest first; total always counts every row.","operationId":"list_commits_nomodo_api_commits_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Máximo de commits retornados.","title":"Limit"},"description":"Máximo de commits retornados."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_CommitLogResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"post":{"tags":["Commit"],"summary":"Apply the pending configuration changes","description":"Apply every pending change; an optional comment lands in the history.","operationId":"apply_commit_nomodo_api_commits_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitApplyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_CommitCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/commits/{commit_id}":{"get":{"tags":["Commit"],"summary":"Show the configuration at a given commit","description":"Return the full configuration as it stood at that commit.","operationId":"show_commit_nomodo_api_commits__commit_id__get","parameters":[{"name":"commit_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"Id do commit.","title":"Commit Id"},"description":"Id do commit."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_CommitCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/commits/{commit_id}/changes":{"get":{"tags":["Commit"],"summary":"Show what a given commit altered","description":"Return the changes that commit introduced.","operationId":"show_commit_changes_nomodo_api_commits__commit_id__changes_get","parameters":[{"name":"commit_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"Id do commit.","title":"Commit Id"},"description":"Id do commit."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_CommitCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/commits/actions/abort":{"post":{"tags":["Commit"],"summary":"Discard the pending configuration changes","description":"Drop every pending change without touching the dataplane.","operationId":"abort_commit_nomodo_api_commits_actions_abort_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_CommitCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/geoip/countries":{"get":{"tags":["GeoIP"],"summary":"List the countries the geoip database knows","description":"Return the country catalogue geoip print renders.","operationId":"list_geoip_countries_nomodo_api_geoip_countries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_GeoIPCountryListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/geoip/check":{"get":{"tags":["GeoIP"],"summary":"Resolve an IPv4 address to its country","description":"Return the most specific network covering the address and its country.","operationId":"check_geoip_address_nomodo_api_geoip_check_get","parameters":[{"name":"ip","in":"query","required":true,"schema":{"type":"string","description":"Endereço IPv4 único, sem CIDR.","title":"Ip"},"description":"Endereço IPv4 único, sem CIDR."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_GeoIPCheckResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/geoip/actions/update":{"post":{"tags":["GeoIP"],"summary":"Rebuild the geoip database from the installed MaxMind file","description":"Remap every IP range to its country; this takes minutes on a real database.","operationId":"update_geoip_database_nomodo_api_geoip_actions_update_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_GeoIPUpdateResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/interfaces":{"get":{"tags":["Interfaces"],"summary":"List the physical ports","description":"Return link status, speed, MAC, driver and PCI address for every port.","operationId":"list_interfaces_nomodo_api_interfaces_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_InterfaceListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/interfaces/stats":{"get":{"tags":["Interfaces"],"summary":"Get the cumulative counters per port","description":"Return the counters interface print stats renders, including the discards.","operationId":"list_interface_stats_nomodo_api_interfaces_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_InterfaceStatsListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/interfaces/queues":{"get":{"tags":["Interfaces"],"summary":"Get the queue distribution of every port","description":"Return every port's queue counters in one call, as stats-detail does.","operationId":"list_all_interface_queues_nomodo_api_interfaces_queues_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_InterfaceAllQueuesResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/interfaces/{port_id}/queues":{"get":{"tags":["Interfaces"],"summary":"Get the queue distribution of one port","description":"Return the per-queue counters behind interface print stats-detail.","operationId":"list_interface_queues_nomodo_api_interfaces__port_id__queues_get","parameters":[{"name":"port_id","in":"path","required":true,"schema":{"type":"integer","minimum":0,"description":"Id da porta física.","title":"Port Id"},"description":"Id da porta física."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_InterfaceQueueListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/dyn-address-lists":{"get":{"tags":["Dyn Address Lists"],"summary":"List dyn-address-list names and sizes","description":"Devolve o nome e o tamanho de cada lista dinâmica, sem as entradas.","operationId":"list_dyn_address_lists_nomodo_api_dyn_address_lists_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_DynAddressListNamesResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/dyn-address-lists/{list_name}":{"get":{"tags":["Dyn Address Lists"],"summary":"Print dyn-address-list entries","description":"Return the dyn-address-list entries.","operationId":"print_dyn_address_list_nomodo_api_dyn_address_lists__list_name__get","parameters":[{"name":"list_name","in":"path","required":true,"schema":{"type":"string","title":"List Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_DynAddressListPrintResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/dyn-address-lists/{list_name}/count":{"get":{"tags":["Dyn Address Lists"],"summary":"Count dyn-address-list entries","description":"Return dyn-address-list entries count.","operationId":"count_dyn_address_list_nomodo_api_dyn_address_lists__list_name__count_get","parameters":[{"name":"list_name","in":"path","required":true,"schema":{"type":"string","title":"List Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_DynAddressListCountResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/dyn-address-lists/actions/remove":{"post":{"tags":["Dyn Address Lists"],"summary":"Remove dyn-address-list entry","description":"Remove one dyn-address-list entry.","operationId":"remove_dyn_address_list_entry_nomodo_api_dyn_address_lists_actions_remove_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DynAddressListRemoveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_DynAddressListRemoveResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/hw-rules/stats":{"get":{"tags":["Hardware Rules"],"summary":"Get the counters of every hardware rule","description":"Return the cumulative counters and last delta of every sampled rule.","operationId":"list_hw_rule_stats_nomodo_api_hw_rules_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleStatsListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/hw-rules/{hw_rule_id}/stats":{"get":{"tags":["Hardware Rules"],"summary":"Get the counters of one hardware rule","description":"Return the counters of a single hardware rule, as hw-rule print shows.","operationId":"get_hw_rule_stats_nomodo_api_hw_rules__hw_rule_id__stats_get","parameters":[{"name":"hw_rule_id","in":"path","required":true,"schema":{"type":"integer","minimum":0,"description":"Id da hardware rule.","title":"Hw Rule Id"},"description":"Id da hardware rule."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleStatsDTO_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/hw-rules":{"get":{"tags":["Hardware Rules"],"summary":"List hardware rules","description":"Cada filtro aceita o prefixo '~' como operador de substring, e todos os filtros informados são combinados com AND.","operationId":"list_hw_rules_nomodo_api_hw_rules_get","parameters":[{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"id. Prefix the value with '~' for substring matching.","title":"Id"},"description":"id. Prefix the value with '~' for substring matching."},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"action; drop | bypass | accept. Prefix the value with '~' for substring matching.","title":"Action"},"description":"action; drop | bypass | accept. Prefix the value with '~' for substring matching."},{"name":"comment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comment. Prefix the value with '~' for substring matching.","title":"Comment"},"description":"comment. Prefix the value with '~' for substring matching."},{"name":"counter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"counter; enable | disable.","title":"Counter"},"description":"counter; enable | disable."},{"name":"dport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"dport. Prefix the value with '~' for substring matching.","title":"Dport"},"description":"dport. Prefix the value with '~' for substring matching."},{"name":"dscp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"dscp. Prefix the value with '~' for substring matching.","title":"Dscp"},"description":"dscp. Prefix the value with '~' for substring matching."},{"name":"dst_address_list_idx","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"dst-address-list, matched on the index. Prefix the value with '~' for substring matching.","title":"Dst Address List Idx"},"description":"dst-address-list, matched on the index. Prefix the value with '~' for substring matching."},{"name":"dst_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"dst-prefix; IPv4, CIDR network or 'any'. Prefix with '~' to match every rule inside that network.","title":"Dst Prefix"},"description":"dst-prefix; IPv4, CIDR network or 'any'. Prefix with '~' to match every rule inside that network."},{"name":"fragment_detect","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"fragment-detect; enable | disable.","title":"Fragment Detect"},"description":"fragment-detect; enable | disable."},{"name":"icmp_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"icmp-code. Prefix the value with '~' for substring matching.","title":"Icmp Code"},"description":"icmp-code. Prefix the value with '~' for substring matching."},{"name":"icmp_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"icmp-type. Prefix the value with '~' for substring matching.","title":"Icmp Type"},"description":"icmp-type. Prefix the value with '~' for substring matching."},{"name":"port","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"port. Prefix the value with '~' for substring matching.","title":"Port"},"description":"port. Prefix the value with '~' for substring matching."},{"name":"proto","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"proto; any | tcp | udp | icmp or a number. Prefix the value with '~' for substring matching.","title":"Proto"},"description":"proto; any | tcp | udp | icmp or a number. Prefix the value with '~' for substring matching."},{"name":"rand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"rand. Prefix the value with '~' for substring matching.","title":"Rand"},"description":"rand. Prefix the value with '~' for substring matching."},{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"sport. Prefix the value with '~' for substring matching.","title":"Sport"},"description":"sport. Prefix the value with '~' for substring matching."},{"name":"src_address_list_idx","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"src-address-list, matched on the index. Prefix the value with '~' for substring matching.","title":"Src Address List Idx"},"description":"src-address-list, matched on the index. Prefix the value with '~' for substring matching."},{"name":"src_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"src-prefix; IPv4, CIDR network or 'any'. Prefix with '~' to match every rule inside that network.","title":"Src Prefix"},"description":"src-prefix; IPv4, CIDR network or 'any'. Prefix with '~' to match every rule inside that network."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"status; enable | enabled | active | disable | disabled | pending | removed.","title":"Status"},"description":"status; enable | enabled | active | disable | disabled | pending | removed."},{"name":"tcp_flags","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"tcp-flags; the mask-comp expression.","title":"Tcp Flags"},"description":"tcp-flags; the mask-comp expression."},{"name":"ttl","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ttl. Prefix the value with '~' for substring matching.","title":"Ttl"},"description":"ttl. Prefix the value with '~' for substring matching."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum number of rules to return.","default":100,"title":"Limit"},"description":"Maximum number of rules to return."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of rules to skip before collecting.","default":0,"title":"Offset"},"description":"Number of rules to skip before collecting."},{"name":"sort","in":"query","required":false,"schema":{"enum":["id","rule_order","port_id","proto","action","status","counter_enabled","dscp"],"type":"string","description":"Column the listing is ordered by.","default":"rule_order","title":"Sort"},"description":"Column the listing is ordered by."},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","description":"Ordering direction.","default":"asc","title":"Order"},"description":"Ordering direction."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"post":{"tags":["Hardware Rules"],"summary":"Create a hardware rule","description":"Create a hardware rule on the dataplane.","operationId":"create_hw_rule_nomodo_api_hw_rules_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HwRuleCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleCreateResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/hw-rules/config":{"get":{"tags":["Hardware Rules"],"summary":"Dump hardware rules in config format","description":"Devolve o texto de configuração pronto para reaplicação.","operationId":"print_hw_rules_config_nomodo_api_hw_rules_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRulePrintConfigResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/hw-rules/{hw_rule_id}":{"get":{"tags":["Hardware Rules"],"summary":"Retrieve a single hardware rule by id","description":"Return a single hardware rule given its database id.","operationId":"get_hw_rule_by_id_nomodo_api_hw_rules__hw_rule_id__get","parameters":[{"name":"hw_rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Hw Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleDTO_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"patch":{"tags":["Hardware Rules"],"summary":"Update a hardware rule","description":"Update a hardware rule on the dataplane.","operationId":"update_hw_rule_nomodo_api_hw_rules__hw_rule_id__patch","parameters":[{"name":"hw_rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Hw Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HwRuleUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleUpdateResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/hw-rules/actions/delete":{"post":{"tags":["Hardware Rules"],"summary":"Remove hardware rules","description":"Remove one or more hardware rules on the dataplane.","operationId":"delete_hw_rules_nomodo_api_hw_rules_actions_delete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HwRuleIdsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleRemoveResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/hw-rules/actions/remove-all":{"post":{"tags":["Hardware Rules"],"summary":"Remove every hardware rule","description":"Apaga TODAS as hardware rules de uma vez, não apenas as informadas em /hw-rules/actions/delete. Exige 'confirm': true no corpo.","operationId":"remove_all_hw_rules_nomodo_api_hw_rules_actions_remove_all_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HwRuleRemoveAllRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleRemoveResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/hw-rules/actions/enable":{"post":{"tags":["Hardware Rules"],"summary":"Enable hardware rules","description":"Enable one or more hardware rules on the dataplane.","operationId":"enable_hw_rules_nomodo_api_hw_rules_actions_enable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HwRuleIdsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleBatchStatusResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/hw-rules/actions/disable":{"post":{"tags":["Hardware Rules"],"summary":"Disable hardware rules","description":"Disable one or more hardware rules on the dataplane.","operationId":"disable_hw_rules_nomodo_api_hw_rules_actions_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HwRuleIdsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleBatchStatusResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/hw-rules/{hw_rule_id}/move":{"post":{"tags":["Hardware Rules"],"summary":"Move a hardware rule","description":"Move a hardware rule before or after another one on the dataplane.","operationId":"move_hw_rule_nomodo_api_hw_rules__hw_rule_id__move_post","parameters":[{"name":"hw_rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Hw Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HwRuleMoveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_HwRuleMoveResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/rules":{"get":{"tags":["Rules"],"summary":"List all rules","description":"Returns paginated rules filtered by the rule print where keywords.","operationId":"list_rules_nomodo_api_rules_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["rule_order","id"],"type":"string","default":"rule_order","title":"Sort By"}},{"name":"sort_dir","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"asc","title":"Sort Dir"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"}},{"name":"proto","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Proto"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Action"}},{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"}},{"name":"chain","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chain"}},{"name":"chain_target","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chain Target"}},{"name":"traffic_analyzer_port","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Traffic Analyzer Port"}},{"name":"dyn_address_list_ttl","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dyn Address List Ttl"}},{"name":"dscp_value","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dscp Value"}},{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sport"}},{"name":"dport","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dport"}},{"name":"dscp","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dscp"}},{"name":"ttl","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttl"}},{"name":"packet_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Packet Size"}},{"name":"tcp_hdr_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcp Hdr Size"}},{"name":"hash_matchers","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Matchers"}},{"name":"hash_pps","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Pps"}},{"name":"hash_bps","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Bps"}},{"name":"hash_table_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Table Size"}},{"name":"hash_srcmask","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Srcmask"}},{"name":"hash_dstmask","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Dstmask"}},{"name":"hash_srcport_group_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Srcport Group Size"}},{"name":"hash_dstport_group_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Dstport Group Size"}},{"name":"hash_pktsize_group_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Pktsize Group Size"}},{"name":"icmp_code","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Icmp Code"}},{"name":"icmp_type","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Icmp Type"}},{"name":"rand","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rand"}},{"name":"rate_pps","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Pps"}},{"name":"rate_bps","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Bps"}},{"name":"tcp_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcp Filter"}},{"name":"tcp_filter_state","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcp Filter State"}},{"name":"comment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},{"name":"dns_fqdn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Fqdn"}},{"name":"dns_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Type"}},{"name":"dns_packet","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Packet"}},{"name":"dpi_pattern","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dpi Pattern"}},{"name":"dyn_address_list","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dyn Address List"}},{"name":"src_dyn_address_list","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Dyn Address List"}},{"name":"dst_dyn_address_list","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Dyn Address List"}},{"name":"src_geoip","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Geoip"}},{"name":"dst_geoip","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Geoip"}},{"name":"bot_detect","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Bot Detect"}},{"name":"fragment_detect","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Fragment Detect"}},{"name":"tcp_rr","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tcp Rr"}},{"name":"throttling","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Throttling"}},{"name":"src_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Prefix"}},{"name":"dst_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Prefix"}},{"name":"tcp_flags","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Flags"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"post":{"tags":["Rules"],"summary":"Create a rule","description":"Create a traffic rule.","operationId":"create_rule_nomodo_api_rules_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleCreateResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/rules/count":{"get":{"tags":["Rules"],"summary":"Count the active rules","description":"Return the active rule count, which is not the filtered listing total.","operationId":"count_active_rules_nomodo_api_rules_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleActiveCountResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/rules/config":{"get":{"tags":["Rules"],"summary":"Print the rules as replayable configuration","description":"Return the configuration text rule print config emits.","operationId":"print_rules_config_nomodo_api_rules_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleConfigResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/rules/{rule_id}":{"get":{"tags":["Rules"],"summary":"Retrieve a single rule by id","description":"Return a single rule with full details given its database id.","operationId":"get_rule_by_id_nomodo_api_rules__rule_id__get","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleDTO_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"patch":{"tags":["Rules"],"summary":"Update a rule (asynchronous)","description":"Queue a traffic rule update and return an operation id.","operationId":"update_rule_nomodo_api_rules__rule_id__patch","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleUpdateRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleOperationAccepted_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"delete":{"tags":["Rules"],"summary":"Remove a rule","description":"Remove a traffic rule.","operationId":"delete_rule_nomodo_api_rules__rule_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleRemoveResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/rules/{rule_id}/non-defaults":{"get":{"tags":["Rules"],"summary":"Retrieve only non-default fields of a rule","description":"Return only fields that differ from defaults for quick inspection.","operationId":"get_rule_non_defaults_nomodo_api_rules__rule_id__non_defaults_get","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleNonDefaultResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/rules/ui/page":{"get":{"tags":["Rules"],"summary":"List rules for UI (paginated)","description":"Returns paginated UI-friendly list of rules.","operationId":"list_rules_ui_page_nomodo_api_rules_ui_page_get","parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor (id) for pagination","title":"Cursor"},"description":"Cursor (id) for pagination"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["rule_order","id"],"type":"string","default":"rule_order","title":"Sort By"}},{"name":"sort_dir","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"asc","title":"Sort Dir"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"}},{"name":"proto","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Proto"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Action"}},{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"}},{"name":"chain","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chain"}},{"name":"chain_target","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chain Target"}},{"name":"traffic_analyzer_port","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Traffic Analyzer Port"}},{"name":"dyn_address_list_ttl","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dyn Address List Ttl"}},{"name":"dscp_value","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dscp Value"}},{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sport"}},{"name":"dport","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dport"}},{"name":"dscp","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dscp"}},{"name":"ttl","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttl"}},{"name":"packet_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Packet Size"}},{"name":"tcp_hdr_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcp Hdr Size"}},{"name":"hash_matchers","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Matchers"}},{"name":"hash_pps","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Pps"}},{"name":"hash_bps","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Bps"}},{"name":"hash_table_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Table Size"}},{"name":"hash_srcmask","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Srcmask"}},{"name":"hash_dstmask","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Dstmask"}},{"name":"hash_srcport_group_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Srcport Group Size"}},{"name":"hash_dstport_group_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Dstport Group Size"}},{"name":"hash_pktsize_group_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Pktsize Group Size"}},{"name":"icmp_code","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Icmp Code"}},{"name":"icmp_type","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Icmp Type"}},{"name":"rand","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rand"}},{"name":"rate_pps","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Pps"}},{"name":"rate_bps","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Bps"}},{"name":"tcp_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcp Filter"}},{"name":"tcp_filter_state","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcp Filter State"}},{"name":"comment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},{"name":"dns_fqdn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Fqdn"}},{"name":"dns_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Type"}},{"name":"dns_packet","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Packet"}},{"name":"dpi_pattern","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dpi Pattern"}},{"name":"dyn_address_list","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dyn Address List"}},{"name":"src_dyn_address_list","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Dyn Address List"}},{"name":"dst_dyn_address_list","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Dyn Address List"}},{"name":"src_geoip","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Geoip"}},{"name":"dst_geoip","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Geoip"}},{"name":"bot_detect","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Bot Detect"}},{"name":"fragment_detect","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Fragment Detect"}},{"name":"tcp_rr","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tcp Rr"}},{"name":"throttling","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Throttling"}},{"name":"src_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Prefix"}},{"name":"dst_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Prefix"}},{"name":"tcp_flags","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Flags"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleUIListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/rules/ui/mitigation/timeline":{"get":{"tags":["Rules"],"summary":"Mitigation timeline (stacked area data)","description":"Return zero-filled mitigation timeline with validated params.","operationId":"get_mitigation_timeline_nomodo_api_rules_ui_mitigation_timeline_get","parameters":[{"name":"start_time","in":"query","required":true,"schema":{"type":"string","description":"ISO 8601 start time (inclusive)","title":"Start Time"},"description":"ISO 8601 start time (inclusive)"},{"name":"end_time","in":"query","required":true,"schema":{"type":"string","description":"ISO 8601 end time (inclusive)","title":"End Time"},"description":"ISO 8601 end time (inclusive)"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","description":"Bucket size (5s,1m,5m,15m,30m,1h,6h,24h)","default":"1h","title":"Granularity"},"description":"Bucket size (5s,1m,5m,15m,30m,1h,6h,24h)"},{"name":"metric_type","in":"query","required":false,"schema":{"type":"string","description":"Metric type (packets|bytes)","default":"packets","title":"Metric Type"},"description":"Metric type (packets|bytes)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_MitigationTimelineResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/rules/ui/activity":{"post":{"tags":["Rules"],"summary":"Get activity status for a list of rules","description":"Return last_hit and activity status for requested rule IDs.","operationId":"get_rules_activity_nomodo_api_rules_ui_activity_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleActivityRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_list_RuleActivityItem__"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/rules/ui/counters/all-time":{"post":{"tags":["Rules"],"summary":"Get all-time counters for a list of rules","description":"Return sum of all historical records for requested rule IDs.","operationId":"get_counters_all_time_nomodo_api_rules_ui_counters_all_time_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleCountersRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_list_RuleCounterItem__"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/rules/ui/counters/live":{"post":{"tags":["Rules"],"summary":"Get live counters for a list of rules","description":"Return last record for requested rule IDs.","operationId":"get_counters_live_nomodo_api_rules_ui_counters_live_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleCountersRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_list_RuleCounterItem__"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/rules/operations/{operation_id}":{"get":{"tags":["Rules"],"summary":"Get asynchronous rule update status","description":"Return latest status for a queued asynchronous rule update.","operationId":"get_rule_operation_status_nomodo_api_rules_operations__operation_id__get","parameters":[{"name":"operation_id","in":"path","required":true,"schema":{"type":"string","title":"Operation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleOperationSnapshot_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/rules/actions/disable":{"post":{"tags":["Rules"],"summary":"Disable multiple rules","description":"Disable multiple rules and commit once.","operationId":"disable_rules_batch_nomodo_api_rules_actions_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleIdsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleBatchDisableResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/rules/actions/enable":{"post":{"tags":["Rules"],"summary":"Enable multiple rules","description":"Enable multiple rules and commit once.","operationId":"enable_rules_batch_nomodo_api_rules_actions_enable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleIdsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleBatchDisableResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/rules/actions/move":{"post":{"tags":["Rules"],"summary":"Move a rule","description":"Move a rule before another rule id.","operationId":"move_rule_nomodo_api_rules_actions_move_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleMoveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleMoveResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/rules/{rule_id}/rechain":{"post":{"tags":["Rules"],"summary":"Reassign a rule to another chain","description":"Move a rule into another processing chain.","operationId":"rechain_rule_nomodo_api_rules__rule_id__rechain_post","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleRechainRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleRechainResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/rules/actions/delete":{"post":{"tags":["Rules"],"summary":"Remove multiple rules","description":"Remove multiple rules and commit once.","operationId":"delete_rules_batch_nomodo_api_rules_actions_delete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleIdsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleRemoveResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/rules/actions/remove-all":{"post":{"tags":["Rules"],"summary":"Remove every rule","description":"Run rule remove all, which only proceeds with an explicit confirmation.","operationId":"delete_all_rules_nomodo_api_rules_actions_remove_all_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleRemoveAllRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_RuleRemoveAllResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/pcap/capture":{"post":{"tags":["Packet Capture"],"summary":"Captura pacotes e disponibiliza o arquivo gerado","description":"Captura pacotes no próprio host, gera um arquivo nomodo.pcap e solicita o envio dele. Não aceita parâmetros e não devolve relatório de análise. Para capturar e receber um relatório use POST /nomodo/api/pcap/analyzer/capture.","operationId":"trigger_packet_capture_nomodo_api_pcap_capture_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_PacketCaptureResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/pcap/analyzer/capture":{"post":{"tags":["Packet Capture"],"summary":"Capture live traffic and return an analysis report","description":"Captura tráfego vivo na porta de rede informada, analisa os pacotes e devolve o relatório. A captura leva ao menos 'duration' segundos.","operationId":"capture_traffic_analyzer_report_nomodo_api_pcap_analyzer_capture_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrafficAnalyzerCaptureRequest","description":"Parâmetros da captura e da análise."}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_TrafficAnalyzerCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/pcap/reports":{"get":{"tags":["Packet Capture"],"summary":"List the saved analysis reports","description":"Return the list of stored analysis reports.","operationId":"list_traffic_analyzer_reports_nomodo_api_pcap_reports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_TrafficAnalyzerCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/pcap/reports/{report}":{"get":{"tags":["Packet Capture"],"summary":"Show one saved analysis report","description":"Return the contents of a saved report.","operationId":"show_traffic_analyzer_report_nomodo_api_pcap_reports__report__get","parameters":[{"name":"report","in":"path","required":true,"schema":{"type":"string","description":"Id numérico, nome do arquivo, ou 'all' para remover todos.","title":"Report"},"description":"Id numérico, nome do arquivo, ou 'all' para remover todos."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_TrafficAnalyzerCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"delete":{"tags":["Packet Capture"],"summary":"Delete saved analysis reports","description":"Delete one report, or every report when the identifier is 'all'.","operationId":"delete_traffic_analyzer_report_nomodo_api_pcap_reports__report__delete","parameters":[{"name":"report","in":"path","required":true,"schema":{"type":"string","description":"Id numérico, nome do arquivo, ou 'all' para remover todos.","title":"Report"},"description":"Id numérico, nome do arquivo, ou 'all' para remover todos."},{"name":"confirm","in":"query","required":false,"schema":{"type":"boolean","description":"Obrigatório quando o alvo é 'all', que apaga todos.","default":false,"title":"Confirm"},"description":"Obrigatório quando o alvo é 'all', que apaga todos."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_TrafficAnalyzerCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/system/capabilities":{"get":{"tags":["System"],"summary":"List the dataplane features this host supports","description":"Report the named capabilities detected by reflecting the main database.","operationId":"get_system_capabilities_nomodo_api_system_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_DataplaneCapabilitiesDTO_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/system/version":{"get":{"tags":["System"],"summary":"Get the running Nomodo version","description":"Return the software version the dataplane reports.","operationId":"get_system_version_nomodo_api_system_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/system/hostname":{"get":{"tags":["System"],"summary":"Get the configured hostname","description":"Return the current network identity of the device.","operationId":"get_system_hostname_nomodo_api_system_hostname_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}},"put":{"tags":["System"],"summary":"Set the hostname","description":"Rename the device; the change may stay pending until commit.","operationId":"set_system_hostname_nomodo_api_system_hostname_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostnameSetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/system/logs":{"get":{"tags":["System"],"summary":"Read the Nomodo journal","description":"Return the service journal entries, without following.","operationId":"get_system_logs_nomodo_api_system_logs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100000,"minimum":1},{"type":"null"}],"description":"Últimas N linhas; ausente devolve tudo.","title":"Limit"},"description":"Últimas N linhas; ausente devolve tudo."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemLogsResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/system/configs":{"get":{"tags":["Configuration"],"summary":"List the saved configuration profiles","description":"Return the saved profiles matching the where-clause, newest first.","operationId":"list_config_profiles_nomodo_api_system_configs_get","parameters":[{"name":"config_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Filtra por id exato do perfil.","title":"Config Id"},"description":"Filtra por id exato do perfil."},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nome exato, ou ~texto para busca por trecho.","title":"Name"},"description":"Nome exato, ou ~texto para busca por trecho."},{"name":"user","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Usuário exato, ou ~texto para busca por trecho.","title":"User"},"description":"Usuário exato, ou ~texto para busca por trecho."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Itens por página.","default":100,"title":"Limit"},"description":"Itens por página."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Itens a pular.","default":0,"title":"Offset"},"description":"Itens a pular."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ConfigProfileListResponse_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"post":{"tags":["Configuration"],"summary":"Save the running configuration as a profile","description":"Archive the running configuration under a descriptive name.","operationId":"save_config_profile_nomodo_api_system_configs_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigSaveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/system/configs/export":{"post":{"tags":["Configuration"],"summary":"Export the running configuration to a file","description":"Write the configuration to /tmp and return both the path and its content.","operationId":"export_running_config_nomodo_api_system_configs_export_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ConfigExportResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/system/configs/diff":{"get":{"tags":["Configuration"],"summary":"Compare two configurations","description":"Diff two saved profiles, or one profile against the running configuration.","operationId":"diff_config_profiles_nomodo_api_system_configs_diff_get","parameters":[{"name":"left","in":"query","required":true,"schema":{"type":"integer","minimum":1,"description":"Id do perfil base.","title":"Left"},"description":"Id do perfil base."},{"name":"right","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Id do segundo perfil; ausente compara com o vigente.","title":"Right"},"description":"Id do segundo perfil; ausente compara com o vigente."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/system/configs/{config_id}":{"get":{"tags":["Configuration"],"summary":"Show a saved configuration","description":"Return the profile as a reproducible command list.","operationId":"show_config_profile_nomodo_api_system_configs__config_id__get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"Id do perfil de configuração.","title":"Config Id"},"description":"Id do perfil de configuração."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}},"delete":{"tags":["Configuration"],"summary":"Remove a saved configuration","description":"Delete a saved profile from the configs database.","operationId":"remove_config_profile_nomodo_api_system_configs__config_id__delete","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"Id do perfil de configuração.","title":"Config Id"},"description":"Id do perfil de configuração."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/system/configs/{config_id}/actions/load":{"post":{"tags":["Configuration"],"summary":"Restore a saved configuration","description":"Replace the running configuration with a saved profile.","operationId":"load_config_profile_nomodo_api_system_configs__config_id__actions_load_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"Id do perfil de configuração.","title":"Config Id"},"description":"Id do perfil de configuração."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemCommandResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/prefix-pull/status":{"get":{"tags":["Prefix Sync"],"summary":"Get the prefix pull scheduler status","description":"Expose runtime status for the prefix list synchronization.","operationId":"get_prefix_pull_status_nomodo_api_prefix_pull_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_PrefixPullStatusDTO_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/prefix-pull/run":{"post":{"tags":["Prefix Sync"],"summary":"Request an immediate prefix pull run","description":"Request an async immediate pull run without waiting full interval.","operationId":"run_prefix_pull_now_nomodo_api_prefix_pull_run_post","responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_PrefixPullRunDTO_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/system/metrics":{"get":{"tags":["Traffic & Metrics"],"summary":"System metrics snapshot","description":"Retorna métricas do sistema (CPU, RAM, Disco e Uptime) para o dash.","operationId":"get_system_metrics_nomodo_api_system_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemMetricsDTO_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/system/traffic":{"get":{"tags":["Traffic & Metrics"],"summary":"Traffic metrics timeline","description":"Retorna histórico de tráfego (rx/tx) com agregação por janela.","operationId":"get_traffic_metrics_nomodo_api_system_traffic_get","parameters":[{"name":"start_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Time"}},{"name":"end_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Time"}},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","default":"1m","title":"Granularity"}},{"name":"aggregation","in":"query","required":false,"schema":{"type":"string","default":"avg","title":"Aggregation"}},{"name":"live","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Live"}},{"name":"metrics","in":"query","required":false,"schema":{"type":"string","default":"both","title":"Metrics"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_TrafficMetricsResponseView_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}},"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"}}}}}}},"/nomodo/api/system/throttling":{"get":{"tags":["Rate Limiting"],"summary":"Get throttling status","description":"Return the current throttling status.","operationId":"get_throttling_status_nomodo_api_system_throttling_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemThrottlingGetResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}},"post":{"tags":["Rate Limiting"],"summary":"Set throttling status","description":"Set throttling status; commit=false leaves it pending until commit.","operationId":"set_throttling_status_nomodo_api_system_throttling_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemThrottlingSetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemThrottlingSetResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}},"/nomodo/api/system/throttling/config":{"get":{"tags":["Rate Limiting"],"summary":"Dump throttling parameters in config format","description":"Return the commands that reproduce the current throttling parameters.","operationId":"get_throttling_config_nomodo_api_system_throttling_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_SystemThrottlingConfigResult_"}}}},"401":{"description":"Credencial ausente ou inválida. Envie o header X-API-Key ou autentique-se no painel para obter o cookie de sessão. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Credenciais de autenticação ausentes","error":{"message":"Credenciais de autenticação ausentes","reason":"AUTH_MISSING_CREDENTIALS"}}}}},"403":{"description":"A credencial é válida mas não tem permissão para esta rota. Confira o conjunto de permissões da chave. Um caminho fora do prefixo /nomodo/api também responde 403. O corpo traz também um campo code, mantido apenas por compatibilidade com integrações antigas; use reason em código novo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Escopo da API key insuficiente","error":{"message":"Escopo da API key insuficiente","reason":"AUTH_API_KEY_FORBIDDEN"}}}}},"422":{"description":"O corpo ou os parâmetros da requisição são inválidos.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Field required","error":{"message":"Field required","reason":"VALIDATION_ERROR"}}}}},"500":{"description":"Falha inesperada ao processar a requisição.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"An error occurred while processing the request.","error":{"message":"An error occurred while processing the request.","reason":"INTERNAL_ERROR"}}}}},"503":{"description":"O equipamento não respondeu ou o schema do banco não é compatível com esta versão do serviço.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_NoneType_"},"example":{"success":false,"message":"Schema mismatch detected.","error":{"message":"Schema mismatch detected.","reason":"SCHEMA_UNAVAILABLE"}}}}}}}}},"components":{"schemas":{"APIResponse_AddressListConfigResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/AddressListConfigResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[AddressListConfigResult]"},"APIResponse_AddressListCountResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/AddressListCountResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[AddressListCountResult]"},"APIResponse_AddressListDetailResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/AddressListDetailResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[AddressListDetailResponse]"},"APIResponse_AddressListGroupResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/AddressListGroupResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[AddressListGroupResponse]"},"APIResponse_AddressListLocateBatchResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/AddressListLocateBatchResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[AddressListLocateBatchResult]"},"APIResponse_AddressListLocateResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/AddressListLocateResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[AddressListLocateResult]"},"APIResponse_AddressListOperationAccepted_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/AddressListOperationAccepted"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[AddressListOperationAccepted]"},"APIResponse_AddressListOperationSnapshot_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/AddressListOperationSnapshot"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[AddressListOperationSnapshot]"},"APIResponse_AddressListRemoveResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/AddressListRemoveResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[AddressListRemoveResult]"},"APIResponse_AddressListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/AddressListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[AddressListResponse]"},"APIResponse_BotDetectConfigResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/BotDetectConfigResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[BotDetectConfigResult]"},"APIResponse_BotDetectParamsDTO_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/BotDetectParamsDTO"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[BotDetectParamsDTO]"},"APIResponse_BotDetectSetResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/BotDetectSetResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[BotDetectSetResult]"},"APIResponse_ChainConfigResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainConfigResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainConfigResult]"},"APIResponse_ChainCreateResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainCreateResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainCreateResult]"},"APIResponse_ChainDTO_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainDTO"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainDTO]"},"APIResponse_ChainListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainListResponse]"},"APIResponse_ChainLocateResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainLocateResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainLocateResult]"},"APIResponse_ChainPrefixResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainPrefixResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainPrefixResult]"},"APIResponse_ChainRemoveAllResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainRemoveAllResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainRemoveAllResult]"},"APIResponse_ChainRemoveResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainRemoveResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainRemoveResult]"},"APIResponse_ChainRenameResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainRenameResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainRenameResult]"},"APIResponse_ChainStatsDTO_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainStatsDTO"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainStatsDTO]"},"APIResponse_ChainStatsListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ChainStatsListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ChainStatsListResponse]"},"APIResponse_CommitCommandResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/CommitCommandResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[CommitCommandResult]"},"APIResponse_CommitLogResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/CommitLogResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[CommitLogResponse]"},"APIResponse_ConfigExportResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ConfigExportResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ConfigExportResult]"},"APIResponse_ConfigProfileListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/ConfigProfileListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[ConfigProfileListResponse]"},"APIResponse_DataplaneCapabilitiesDTO_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/DataplaneCapabilitiesDTO"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[DataplaneCapabilitiesDTO]"},"APIResponse_DynAddressListCountResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/DynAddressListCountResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[DynAddressListCountResult]"},"APIResponse_DynAddressListNamesResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/DynAddressListNamesResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[DynAddressListNamesResult]"},"APIResponse_DynAddressListPrintResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/DynAddressListPrintResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[DynAddressListPrintResult]"},"APIResponse_DynAddressListRemoveResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/DynAddressListRemoveResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[DynAddressListRemoveResult]"},"APIResponse_GeoIPCheckResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/GeoIPCheckResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[GeoIPCheckResult]"},"APIResponse_GeoIPCountryListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/GeoIPCountryListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[GeoIPCountryListResponse]"},"APIResponse_GeoIPUpdateResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/GeoIPUpdateResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[GeoIPUpdateResult]"},"APIResponse_HealthCheckData_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HealthCheckData"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HealthCheckData]"},"APIResponse_HwRuleBatchStatusResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HwRuleBatchStatusResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HwRuleBatchStatusResult]"},"APIResponse_HwRuleCreateResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HwRuleCreateResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HwRuleCreateResult]"},"APIResponse_HwRuleDTO_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HwRuleDTO"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HwRuleDTO]"},"APIResponse_HwRuleListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HwRuleListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HwRuleListResponse]"},"APIResponse_HwRuleMoveResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HwRuleMoveResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HwRuleMoveResult]"},"APIResponse_HwRulePrintConfigResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HwRulePrintConfigResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HwRulePrintConfigResult]"},"APIResponse_HwRuleRemoveResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HwRuleRemoveResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HwRuleRemoveResult]"},"APIResponse_HwRuleStatsDTO_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HwRuleStatsDTO"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HwRuleStatsDTO]"},"APIResponse_HwRuleStatsListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HwRuleStatsListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HwRuleStatsListResponse]"},"APIResponse_HwRuleUpdateResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/HwRuleUpdateResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[HwRuleUpdateResult]"},"APIResponse_InterfaceAllQueuesResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/InterfaceAllQueuesResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[InterfaceAllQueuesResponse]"},"APIResponse_InterfaceListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/InterfaceListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[InterfaceListResponse]"},"APIResponse_InterfaceQueueListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/InterfaceQueueListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[InterfaceQueueListResponse]"},"APIResponse_InterfaceStatsListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/InterfaceStatsListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[InterfaceStatsListResponse]"},"APIResponse_MitigationTimelineResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/MitigationTimelineResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[MitigationTimelineResponse]"},"APIResponse_NoneType_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"type":"null","title":"Data","description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[NoneType]"},"APIResponse_PacketCaptureResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/PacketCaptureResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[PacketCaptureResult]"},"APIResponse_PrefixPullRunDTO_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/PrefixPullRunDTO"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[PrefixPullRunDTO]"},"APIResponse_PrefixPullStatusDTO_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/PrefixPullStatusDTO"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[PrefixPullStatusDTO]"},"APIResponse_RuleActiveCountResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleActiveCountResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleActiveCountResponse]"},"APIResponse_RuleBatchDisableResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleBatchDisableResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleBatchDisableResult]"},"APIResponse_RuleConfigResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleConfigResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleConfigResult]"},"APIResponse_RuleCreateResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleCreateResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleCreateResult]"},"APIResponse_RuleDTO_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleDTO"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleDTO]"},"APIResponse_RuleListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleListResponse]"},"APIResponse_RuleMoveResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleMoveResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleMoveResult]"},"APIResponse_RuleNonDefaultResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleNonDefaultResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleNonDefaultResponse]"},"APIResponse_RuleOperationAccepted_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleOperationAccepted"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleOperationAccepted]"},"APIResponse_RuleOperationSnapshot_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleOperationSnapshot"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleOperationSnapshot]"},"APIResponse_RuleRechainResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleRechainResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleRechainResult]"},"APIResponse_RuleRemoveAllResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleRemoveAllResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleRemoveAllResult]"},"APIResponse_RuleRemoveResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleRemoveResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleRemoveResult]"},"APIResponse_RuleUIListResponse_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/RuleUIListResponse"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[RuleUIListResponse]"},"APIResponse_SystemCommandResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/SystemCommandResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[SystemCommandResult]"},"APIResponse_SystemLogsResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/SystemLogsResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[SystemLogsResult]"},"APIResponse_SystemMetricsDTO_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/SystemMetricsDTO"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[SystemMetricsDTO]"},"APIResponse_SystemThrottlingConfigResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/SystemThrottlingConfigResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[SystemThrottlingConfigResult]"},"APIResponse_SystemThrottlingGetResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/SystemThrottlingGetResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[SystemThrottlingGetResult]"},"APIResponse_SystemThrottlingSetResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/SystemThrottlingSetResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[SystemThrottlingSetResult]"},"APIResponse_TrafficAnalyzerCommandResult_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/TrafficAnalyzerCommandResult"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[TrafficAnalyzerCommandResult]"},"APIResponse_TrafficMetricsResponseView_":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"$ref":"#/components/schemas/TrafficMetricsResponseView"},{"type":"null"}],"description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[TrafficMetricsResponseView]"},"APIResponse_list_RuleActivityItem__":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/RuleActivityItem"},"type":"array"},{"type":"null"}],"title":"Data","description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[list[RuleActivityItem]]"},"APIResponse_list_RuleCounterItem__":{"properties":{"success":{"type":"boolean","title":"Success","description":"Indicates if the request was successful."},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"A human-readable message for the end-user."},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/RuleCounterItem"},"type":"array"},{"type":"null"}],"title":"Data","description":"The response payload (the requested data)."},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details if the request failed."}},"type":"object","required":["success"],"title":"APIResponse[list[RuleCounterItem]]"},"AddressListConfigResult":{"properties":{"config":{"type":"string","title":"Config","description":"Texto de configuração pronto para reaplicação.","default":""},"totalLists":{"type":"integer","minimum":0.0,"title":"Totallists","description":"Quantidade de address lists no dump.","default":0},"totalEntries":{"type":"integer","minimum":0.0,"title":"Totalentries","description":"Quantidade de prefixos no dump.","default":0}},"type":"object","title":"AddressListConfigResult","description":"Answer for address-list print config, the replayable address-list dump."},"AddressListCountResult":{"properties":{"name":{"type":"string","title":"Name","description":"Nome da address list consultada."},"exists":{"type":"boolean","title":"Exists","description":"Falso quando nenhuma lista tem esse nome."},"totalPrefixes":{"type":"integer","minimum":0.0,"title":"Totalprefixes","description":"Total de prefixos armazenados, sem filtro de status.","default":0}},"type":"object","required":["name","exists"],"title":"AddressListCountResult","description":"Answer for address-list count, which reports one list size by name."},"AddressListCreateRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Nome da address list."},"address":{"type":"string","title":"Address","description":"Endereço IPv4 ou prefixo CIDR a ser inserido.","examples":["192.0.2.10","198.51.100.0/24"]}},"additionalProperties":false,"type":"object","required":["name","address"],"title":"AddressListCreateRequest","description":"Payload to add a prefix into an address list."},"AddressListCreateResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"add_argv":{"items":{"type":"string"},"type":"array","title":"Add Argv"},"add_returncode":{"type":"integer","title":"Add Returncode"},"add_stdout":{"type":"string","title":"Add Stdout"},"add_stderr":{"type":"string","title":"Add Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","add_argv","add_returncode","add_stdout","add_stderr"],"title":"AddressListCreateResult","description":"Result payload for address-list add plus commit."},"AddressListDTO":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"prefixes":{"items":{"$ref":"#/components/schemas/AddressListPrefixDTO"},"type":"array","title":"Prefixes"},"totalPrefixes":{"type":"integer","title":"Totalprefixes","description":"Count total number of prefixes in the list.","readOnly":true},"activeCount":{"type":"integer","title":"Activecount","description":"Count active prefixes.","readOnly":true},"pendingCount":{"type":"integer","title":"Pendingcount","description":"Count pending prefixes.","readOnly":true},"removedCount":{"type":"integer","title":"Removedcount","description":"Count prefixes pending removal.","readOnly":true}},"type":"object","required":["id","name","totalPrefixes","activeCount","pendingCount","removedCount"],"title":"AddressListDTO","description":"Aggregated address list with its prefixes."},"AddressListDetailResponse":{"properties":{"item":{"anyOf":[{"$ref":"#/components/schemas/AddressListDTO"},{"type":"null"}]},"prefixMeta":{"$ref":"#/components/schemas/PageMeta"}},"type":"object","required":["item","prefixMeta"],"title":"AddressListDetailResponse","description":"Detailed response for a single address list with paginated prefixes."},"AddressListGroupDTO":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"totalPrefixes":{"type":"integer","minimum":0.0,"title":"Totalprefixes","description":"Total number of prefixes stored in the address list.","default":0}},"type":"object","required":["id","name"],"title":"AddressListGroupDTO","description":"Minimal representation of an address list group."},"AddressListGroupResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AddressListGroupDTO"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"AddressListGroupResponse","description":"Wrapper response for listing address list groups without prefixes."},"AddressListImportRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Nome da address list."},"prefixes":{"anyOf":[{"items":{"type":"string"},"type":"array","minItems":1},{"type":"null"}],"title":"Prefixes","description":"Lista de IPv4 ou prefixos CIDR para importar, substituindo o conteúdo atual da lista.","examples":[["192.0.2.10","198.51.100.0/24"]]},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url","description":"URL para arquivo raw/txt contendo prefixos.","examples":["https://example.com/allowlist.txt"]}},"additionalProperties":false,"type":"object","required":["name"],"title":"AddressListImportRequest","description":"Payload to import prefixes and replace list contents."},"AddressListImportResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"import_argv":{"items":{"type":"string"},"type":"array","title":"Import Argv"},"import_returncode":{"type":"integer","title":"Import Returncode"},"import_stdout":{"type":"string","title":"Import Stdout"},"import_stderr":{"type":"string","title":"Import Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","import_argv","import_returncode","import_stdout","import_stderr"],"title":"AddressListImportResult","description":"Result payload for address-list import/replace plus commit."},"AddressListLocateBatchResult":{"properties":{"results":{"items":{"$ref":"#/components/schemas/AddressListLocateResult"},"type":"array","title":"Results"},"rejected":{"items":{"$ref":"#/components/schemas/AddressListLocateRejection"},"type":"array","title":"Rejected"},"totalFound":{"type":"integer","title":"Totalfound","description":"How many queried addresses landed in at least one address list.","readOnly":true}},"type":"object","required":["totalFound"],"title":"AddressListLocateBatchResult","description":"Answer for a batched locate, with one result per readable address."},"AddressListLocateHit":{"properties":{"addressList":{"type":"string","title":"Addresslist","description":"Nome da address list."},"entry":{"type":"string","title":"Entry","description":"Entrada armazenada em notação CIDR."}},"type":"object","required":["addressList","entry"],"title":"AddressListLocateHit","description":"One address list whose stored network contains the queried address."},"AddressListLocateRejection":{"properties":{"address":{"type":"string","title":"Address","description":"Valor recebido que não pôde ser lido."},"reason":{"type":"string","title":"Reason","description":"Motivo da recusa daquele valor."}},"type":"object","required":["address","reason"],"title":"AddressListLocateRejection","description":"One queried value the batch refused to parse as a single IPv4 address."},"AddressListLocateResult":{"properties":{"address":{"type":"string","title":"Address","description":"Endereço IPv4 consultado."},"hits":{"items":{"$ref":"#/components/schemas/AddressListLocateHit"},"type":"array","title":"Hits"},"found":{"type":"boolean","title":"Found","description":"Whether any address list contains the queried address.","readOnly":true}},"type":"object","required":["address","found"],"title":"AddressListLocateResult","description":"Answer for address-list locate, which reports every list holding the address."},"AddressListOperationAccepted":{"properties":{"operation_id":{"type":"string","title":"Operation Id","description":"Unique operation identifier"},"poll_url":{"type":"string","title":"Poll Url","description":"Relative URL to poll operation"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Operation creation time"},"operation":{"type":"string","enum":["create_entry","import_list","remove_entry"],"title":"Operation","description":"Address-list operation type"},"list_name":{"type":"string","title":"List Name","description":"Target address-list name"},"status":{"type":"string","enum":["queued","running","succeeded","failed"],"title":"Status","description":"Current operation status"}},"type":"object","required":["operation_id","poll_url","created_at","operation","list_name","status"],"title":"AddressListOperationAccepted","description":"Response payload returned when an async operation is scheduled."},"AddressListOperationSnapshot":{"properties":{"operation_id":{"type":"string","title":"Operation Id","description":"Unique operation identifier"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Operation creation time"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"Execution start time when available"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At","description":"Execution end time when available"},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details when operation fails"},"operation":{"type":"string","enum":["create_entry","import_list","remove_entry"],"title":"Operation","description":"Address-list operation type"},"list_name":{"type":"string","title":"List Name","description":"Target address-list name"},"status":{"type":"string","enum":["queued","running","succeeded","failed"],"title":"Status","description":"Current operation status"},"result":{"anyOf":[{"$ref":"#/components/schemas/AddressListCreateResult"},{"$ref":"#/components/schemas/AddressListImportResult"},{"$ref":"#/components/schemas/AddressListRemoveResult"},{"type":"null"}],"title":"Result","description":"Result payload when the operation succeeds"}},"type":"object","required":["operation_id","created_at","operation","list_name","status"],"title":"AddressListOperationSnapshot","description":"Current status for an asynchronous address-list operation."},"AddressListPrefixDTO":{"properties":{"id":{"type":"integer","title":"Id"},"groupId":{"type":"integer","title":"Groupid","description":"Identifier of the owning group."},"prefix":{"type":"string","title":"Prefix","description":"IPv4 address stored as integer."},"prefixLen":{"type":"integer","maximum":32.0,"minimum":0.0,"title":"Prefixlen","description":"Prefix length (CIDR)"},"status":{"type":"integer","minimum":0.0,"title":"Status","description":"Bitmask flags from AddressListStatus"},"cidr":{"type":"string","title":"Cidr","description":"Return prefix in CIDR notation.","readOnly":true},"statusFlags":{"items":{"type":"string"},"type":"array","title":"Statusflags","description":"Expose enabled status flags as their enum names.","readOnly":true},"isActive":{"type":"boolean","title":"Isactive","description":"Whether the prefix is marked as active.","readOnly":true},"isPending":{"type":"boolean","title":"Ispending","description":"Whether the prefix is pending commit.","readOnly":true},"isRemoved":{"type":"boolean","title":"Isremoved","description":"Whether the prefix awaits removal.","readOnly":true}},"type":"object","required":["id","groupId","prefix","prefixLen","status","cidr","statusFlags","isActive","isPending","isRemoved"],"title":"AddressListPrefixDTO","description":"Represents a single prefix entry inside an address list."},"AddressListRemoveAllRequest":{"properties":{"confirm":{"type":"boolean","title":"Confirm","description":"Deve ser true; 'address-list remove all' apaga TODAS as address lists, não apenas os prefixos de uma delas."}},"additionalProperties":false,"type":"object","required":["confirm"],"title":"AddressListRemoveAllRequest","description":"Payload for address-list remove all, which drops every list at once."},"AddressListRemoveRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Nome da address list."},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address","description":"Endereço IPv4 ou prefixo CIDR a ser removido.","examples":["192.0.2.10","198.51.100.0/24"]},"full":{"type":"boolean","title":"Full","description":"Quando True, remove todos os prefixos da lista (ignora address).","default":false}},"additionalProperties":false,"type":"object","required":["name"],"title":"AddressListRemoveRequest","description":"Payload to remove one prefix or an entire list."},"AddressListRemoveResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"remove_argv":{"items":{"type":"string"},"type":"array","title":"Remove Argv"},"remove_returncode":{"type":"integer","title":"Remove Returncode"},"remove_stdout":{"type":"string","title":"Remove Stdout"},"remove_stderr":{"type":"string","title":"Remove Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","remove_argv","remove_returncode","remove_stdout","remove_stderr"],"title":"AddressListRemoveResult","description":"Result payload for address-list removal plus commit."},"AddressListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AddressListDTO"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/PageMeta"}},"type":"object","required":["items","meta"],"title":"AddressListResponse","description":"Wrapper response for listing address lists."},"BotDetectConfigResult":{"properties":{"commandArgv":{"items":{"type":"string"},"type":"array","title":"Commandargv"},"commandReturncode":{"type":"integer","title":"Commandreturncode"},"commandStdout":{"type":"string","title":"Commandstdout"},"commandStderr":{"type":"string","title":"Commandstderr"},"configText":{"type":"string","title":"Configtext","description":"Comandos que reproduzem os limiares atuais."},"success":{"type":"boolean","title":"Success","description":"Se o comando terminou sem erro."}},"type":"object","required":["commandArgv","commandReturncode","commandStdout","commandStderr","configText","success"],"title":"BotDetectConfigResult","description":"Replayable configuration dump for bot detection."},"BotDetectParamsDTO":{"properties":{"pps":{"type":"integer","title":"Pps","description":"Limiar de pacotes por segundo."},"bps":{"type":"integer","title":"Bps","description":"Limiar de bits por segundo."},"mask":{"type":"integer","title":"Mask","description":"Máscara CIDR de origem usada no agrupamento."},"pending":{"type":"boolean","title":"Pending","description":"Se há alteração gravada aguardando commit."}},"type":"object","required":["pps","bps","mask","pending"],"title":"BotDetectParamsDTO","description":"Current bot-detect thresholds, as bot-detect print reports them."},"BotDetectSetRequest":{"properties":{"pps":{"anyOf":[{"type":"integer","maximum":4294967295.0,"minimum":1.0},{"type":"null"}],"title":"Pps","description":"Limiar de pacotes por segundo (1 a 4294967295)."},"bps":{"anyOf":[{"type":"integer","maximum":4294967295.0,"minimum":1.0},{"type":"null"}],"title":"Bps","description":"Limiar de bits por segundo (1 a 4294967295)."},"mask":{"anyOf":[{"type":"integer","maximum":24.0,"minimum":1.0},{"type":"null"}],"title":"Mask","description":"Máscara CIDR de origem (1 a 24)."},"commit":{"type":"boolean","title":"Commit","description":"false deixa a mudança pendente até o commit.","default":true}},"additionalProperties":false,"type":"object","title":"BotDetectSetRequest","description":"Payload for bot detection settings, accepted field by field."},"BotDetectSetResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"set_argv":{"items":{"type":"string"},"type":"array","title":"Set Argv"},"set_returncode":{"type":"integer","title":"Set Returncode"},"set_stdout":{"type":"string","title":"Set Stdout"},"set_stderr":{"type":"string","title":"Set Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","set_argv","set_returncode","set_stdout","set_stderr"],"title":"BotDetectSetResult","description":"Result payload for bot-detect set plus commit."},"CPUCoreUsage":{"properties":{"cpu_id":{"type":"integer","title":"Cpu Id","description":"Logical CPU identifier"},"usage_percent":{"type":"number","title":"Usage Percent","description":"Usage percentage of this core"}},"type":"object","required":["cpu_id","usage_percent"],"title":"CPUCoreUsage","description":"Usage of a single logical core, as system cpu prints it."},"CPUInfo":{"properties":{"usage_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Usage Percent","description":"Average CPU usage across the sampled cores"},"temperature_c":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature C","description":"CPU temperature in Celsius, if available"},"frequency_ghz":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Frequency Ghz","description":"Current CPU frequency in GHz, if available"},"cores":{"items":{"$ref":"#/components/schemas/CPUCoreUsage"},"type":"array","title":"Cores","description":"Per-core usage of the latest snapshot, ordered by cpu_id"}},"type":"object","title":"CPUInfo","description":"CPU metrics for dashboard."},"ChainConfigResult":{"properties":{"command_argv":{"items":{"type":"string"},"type":"array","title":"Command Argv"},"command_returncode":{"type":"integer","title":"Command Returncode"},"command_stdout":{"type":"string","title":"Command Stdout"},"command_stderr":{"type":"string","title":"Command Stderr"},"config":{"type":"string","title":"Config","description":"Texto de configuração reproduzível."},"success":{"type":"boolean","title":"Success","description":"Se o comando terminou sem erro."}},"additionalProperties":false,"type":"object","required":["command_argv","command_returncode","command_stdout","command_stderr","config","success"],"title":"ChainConfigResult","description":"Result payload for rule chain print config."},"ChainCreateRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Nome da chain a criar.","examples":["scrubbing"]}},"additionalProperties":false,"type":"object","required":["name"],"title":"ChainCreateRequest","description":"Payload for rule chain add."},"ChainCreateResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"add_argv":{"items":{"type":"string"},"type":"array","title":"Add Argv"},"add_returncode":{"type":"integer","title":"Add Returncode"},"add_stdout":{"type":"string","title":"Add Stdout"},"add_stderr":{"type":"string","title":"Add Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","add_argv","add_returncode","add_stdout","add_stderr"],"title":"ChainCreateResult","description":"Result payload for rule chain add plus commit."},"ChainDTO":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"status":{"type":"integer","title":"Status"},"ruleCount":{"type":"integer","title":"Rulecount","default":0},"boundPrefixes":{"items":{"type":"string"},"type":"array","title":"Boundprefixes"},"active":{"type":"boolean","title":"Active","description":"Expose the active flag, whose bit differs from the rule status one.","readOnly":true},"pending":{"type":"boolean","title":"Pending","description":"Expose whether the chain has uncommitted changes.","readOnly":true},"removed":{"type":"boolean","title":"Removed","description":"Expose whether the chain is marked for removal.","readOnly":true}},"type":"object","required":["id","name","status","active","pending","removed"],"title":"ChainDTO","description":"A single chain, with its status decoded into the flags the dataplane uses."},"ChainListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ChainDTO"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"ChainListResponse","description":"Wrapper response for listing chains."},"ChainLocateResult":{"properties":{"prefix":{"type":"string","title":"Prefix","description":"Prefixo /24 consultado."},"chain_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chain Id","description":"Id da chain que contém o prefixo, quando existir."},"chain_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain Name","description":"Nome da chain que responde pelo prefixo; sem vínculo responde a chain default."},"found":{"type":"boolean","title":"Found","description":"True quando o prefixo está vinculado."}},"additionalProperties":false,"type":"object","required":["prefix","found"],"title":"ChainLocateResult","description":"Answer for which chain owns a given prefix."},"ChainPrefixRequest":{"properties":{"prefix":{"type":"string","title":"Prefix","description":"Prefixo a vincular ou desvincular; menor que /24 é expandido em cada /24 coberto e maior que /24 é truncado para /24.","examples":["198.51.100.0/24","198.51.100.0","203.0.113.0/22"]}},"additionalProperties":false,"type":"object","required":["prefix"],"title":"ChainPrefixRequest","description":"Payload for rule chain prefix-add and prefix-remove."},"ChainPrefixResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"set_argv":{"items":{"type":"string"},"type":"array","title":"Set Argv"},"set_returncode":{"type":"integer","title":"Set Returncode"},"set_stdout":{"type":"string","title":"Set Stdout"},"set_stderr":{"type":"string","title":"Set Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","set_argv","set_returncode","set_stdout","set_stderr"],"title":"ChainPrefixResult","description":"Result payload for a chain prefix binding change plus commit."},"ChainRemoveAllRequest":{"properties":{"confirm":{"type":"boolean","const":true,"title":"Confirm","description":"Precisa ser true; sem isso a remoção total não é executada."}},"additionalProperties":false,"type":"object","required":["confirm"],"title":"ChainRemoveAllRequest","description":"Payload for rule chain remove all, which demands an explicit confirmation."},"ChainRemoveAllResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"remove_argv":{"items":{"type":"string"},"type":"array","title":"Remove Argv"},"remove_returncode":{"type":"integer","title":"Remove Returncode"},"remove_stdout":{"type":"string","title":"Remove Stdout"},"remove_stderr":{"type":"string","title":"Remove Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","remove_argv","remove_returncode","remove_stdout","remove_stderr"],"title":"ChainRemoveAllResult","description":"Result payload for rule chain remove all plus commit."},"ChainRemoveResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"remove_argv":{"items":{"type":"string"},"type":"array","title":"Remove Argv"},"remove_returncode":{"type":"integer","title":"Remove Returncode"},"remove_stdout":{"type":"string","title":"Remove Stdout"},"remove_stderr":{"type":"string","title":"Remove Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","remove_argv","remove_returncode","remove_stdout","remove_stderr"],"title":"ChainRemoveResult","description":"Result payload for rule chain remove plus commit."},"ChainRenameRequest":{"properties":{"new_name":{"type":"string","title":"New Name","description":"Novo nome da chain.","examples":["mitigacao"]}},"additionalProperties":false,"type":"object","required":["new_name"],"title":"ChainRenameRequest","description":"Payload for rule chain rename."},"ChainRenameResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"set_argv":{"items":{"type":"string"},"type":"array","title":"Set Argv"},"set_returncode":{"type":"integer","title":"Set Returncode"},"set_stdout":{"type":"string","title":"Set Stdout"},"set_stderr":{"type":"string","title":"Set Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","set_argv","set_returncode","set_stdout","set_stderr"],"title":"ChainRenameResult","description":"Result payload for rule chain rename plus commit."},"ChainStatsDTO":{"properties":{"chainId":{"type":"integer","title":"Chainid","description":"Id da chain."},"lastHit":{"type":"integer","title":"Lasthit","description":"Timestamp da amostra mais recente."},"previousHit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Previoushit","description":"Timestamp da amostra anterior; nulo quando só há uma."},"inPackets":{"type":"integer","title":"Inpackets","description":"Pacotes acumulados na entrada."},"inBytes":{"type":"integer","title":"Inbytes","description":"Bytes acumulados na entrada."},"outPackets":{"type":"integer","title":"Outpackets","description":"Pacotes acumulados na saída."},"outBytes":{"type":"integer","title":"Outbytes","description":"Bytes acumulados na saída."},"deltaInPackets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deltainpackets","description":"Pacotes de entrada entre as duas últimas amostras."},"deltaInBytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deltainbytes","description":"Bytes de entrada entre as duas últimas amostras."},"deltaOutPackets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deltaoutpackets","description":"Pacotes de saída entre as duas últimas amostras."},"deltaOutBytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deltaoutbytes","description":"Bytes de saída entre as duas últimas amostras."}},"type":"object","required":["chainId","lastHit","inPackets","inBytes","outPackets","outBytes"],"title":"ChainStatsDTO","description":"Counters of one chain plus the delta between the last two samples."},"ChainStatsListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ChainStatsDTO"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de chains com amostras."}},"type":"object","required":["total"],"title":"ChainStatsListResponse","description":"Counters for every chain the dataplane has already sampled."},"CommitApplyRequest":{"properties":{"comment":{"anyOf":[{"type":"string","maxLength":1024,"minLength":1},{"type":"null"}],"title":"Comment","description":"Comentário anexado ao commit; ausente aplica sem comentário."}},"additionalProperties":false,"type":"object","title":"CommitApplyRequest","description":"Payload for commit and commit comment."},"CommitCommandResult":{"properties":{"commandArgv":{"items":{"type":"string"},"type":"array","title":"Commandargv"},"commandReturncode":{"type":"integer","title":"Commandreturncode"},"commandStdout":{"type":"string","title":"Commandstdout"},"commandStderr":{"type":"string","title":"Commandstderr"},"success":{"type":"boolean","title":"Success","description":"Se o comando terminou sem erro."}},"type":"object","required":["commandArgv","commandReturncode","commandStdout","commandStderr","success"],"title":"CommitCommandResult","description":"Result payload for any of the commit operations."},"CommitLogEntryDTO":{"properties":{"id":{"type":"integer","title":"Id","description":"Id do commit."},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment","description":"Comentário do commit."},"user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User","description":"Usuário que aplicou."},"createdAt":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Createdat","description":"Epoch em segundos, UTC, gravado pelo dataplane."}},"type":"object","required":["id"],"title":"CommitLogEntryDTO","description":"One row of the commit history, as commit print renders it."},"CommitLogResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CommitLogEntryDTO"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de commits registrados."}},"type":"object","required":["total"],"title":"CommitLogResponse","description":"Commit history, newest first."},"ConfigExportResult":{"properties":{"commandArgv":{"items":{"type":"string"},"type":"array","title":"Commandargv"},"commandReturncode":{"type":"integer","title":"Commandreturncode"},"commandStdout":{"type":"string","title":"Commandstdout"},"commandStderr":{"type":"string","title":"Commandstderr"},"exportPath":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exportpath","description":"Caminho do arquivo gerado em /tmp."},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content","description":"Conteúdo do arquivo exportado, quando legível."},"success":{"type":"boolean","title":"Success","description":"Se o comando terminou sem erro."}},"type":"object","required":["commandArgv","commandReturncode","commandStdout","commandStderr","success"],"title":"ConfigExportResult","description":"Outcome of system config export, with the exported file already read back."},"ConfigProfileDTO":{"properties":{"id":{"type":"integer","title":"Id","description":"Id do perfil."},"name":{"type":"string","title":"Name","description":"Nome descritivo do perfil."},"user":{"type":"string","title":"User","description":"Usuário que salvou."},"timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timestamp","description":"Epoch em segundos, UTC, gravado pelo dataplane."}},"type":"object","required":["id","name","user"],"title":"ConfigProfileDTO","description":"One saved configuration profile, as system config print lists it."},"ConfigProfileListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ConfigProfileDTO"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de perfis salvos."}},"type":"object","required":["total"],"title":"ConfigProfileListResponse","description":"Saved configuration profiles; total always counts every row."},"ConfigSaveRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"pattern":"^[A-Za-z0-9 ._-]+$","title":"Name","description":"Letras, dígitos, espaço, ponto, sublinhado e hífen."}},"additionalProperties":false,"type":"object","required":["name"],"title":"ConfigSaveRequest","description":"Payload for system config save."},"DataplaneCapabilitiesDTO":{"properties":{"chain":{"type":"boolean","title":"Chain","description":"Se o host tem chains e o encadeamento de regras."},"hwRuleDstAddressList":{"type":"boolean","title":"Hwruledstaddresslist","description":"Se hw-rules aceita address-list de destino."},"ttlMatch":{"type":"boolean","title":"Ttlmatch","description":"Se regras e hw-rules casam por TTL."},"trafficAnalyzerPort":{"type":"boolean","title":"Trafficanalyzerport","description":"Se a ação traffic-analyzer aceita porta."},"hashLimitGroupSize":{"type":"boolean","title":"Hashlimitgroupsize","description":"Se o hash-limit agrupa por porta e tamanho de pacote."}},"type":"object","required":["chain","hwRuleDstAddressList","ttlMatch","trafficAnalyzerPort","hashLimitGroupSize"],"title":"DataplaneCapabilitiesDTO","description":"Named dataplane capabilities plus the diagnostic level of this host."},"DiskInfo":{"properties":{"percent_used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percent Used","description":"Disk usage percentage"},"free_gb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Free Gb","description":"Free disk space in GB"},"total_gb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Gb","description":"Total disk space in GB"}},"type":"object","title":"DiskInfo","description":"Disk metrics for dashboard."},"DynAddressListCountResult":{"properties":{"argv":{"items":{"type":"string"},"type":"array","title":"Argv"},"returncode":{"type":"integer","title":"Returncode"},"stdout":{"type":"string","title":"Stdout"},"stderr":{"type":"string","title":"Stderr"},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count","description":"Parsed entries count when available."},"success":{"type":"boolean","title":"Success","description":"True when the operation succeeded and the output was parsed."}},"type":"object","required":["argv","returncode","stdout","stderr","success"],"title":"DynAddressListCountResult","description":"Result of dyn-address-list count."},"DynAddressListNameEntry":{"properties":{"name":{"type":"string","title":"Name","description":"Nome da dyn-address-list."},"size":{"type":"integer","minimum":0.0,"title":"Size","description":"Quantidade de entradas na lista.","default":0}},"type":"object","required":["name"],"title":"DynAddressListNameEntry","description":"One dynamic address list the dataplane reports, with its current size."},"DynAddressListNamesResult":{"properties":{"argv":{"items":{"type":"string"},"type":"array","title":"Argv"},"returncode":{"type":"integer","title":"Returncode"},"stdout":{"type":"string","title":"Stdout"},"stderr":{"type":"string","title":"Stderr"},"items":{"items":{"$ref":"#/components/schemas/DynAddressListNameEntry"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count","default":0},"success":{"type":"boolean","title":"Success","description":"True when the operation succeeded."}},"type":"object","required":["argv","returncode","stdout","stderr","success"],"title":"DynAddressListNamesResult","description":"Result of dyn-address-list print without a list name,."},"DynAddressListPrintResult":{"properties":{"argv":{"items":{"type":"string"},"type":"array","title":"Argv"},"returncode":{"type":"integer","title":"Returncode"},"stdout":{"type":"string","title":"Stdout"},"stderr":{"type":"string","title":"Stderr"},"items":{"items":{"type":"string"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count","default":0},"success":{"type":"boolean","title":"Success","description":"True when the operation succeeded and the output was parsed."}},"type":"object","required":["argv","returncode","stdout","stderr","success"],"title":"DynAddressListPrintResult","description":"Result of dyn-address-list print."},"DynAddressListRemoveRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Dyn-address-list name."},"ip":{"type":"string","title":"Ip","description":"IPv4 address to be removed."}},"additionalProperties":false,"type":"object","required":["name","ip"],"title":"DynAddressListRemoveRequest","description":"Payload to remove an entry from a dyn-address-list."},"DynAddressListRemoveResult":{"properties":{"argv":{"items":{"type":"string"},"type":"array","title":"Argv"},"returncode":{"type":"integer","title":"Returncode"},"stdout":{"type":"string","title":"Stdout"},"stderr":{"type":"string","title":"Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the operation succeeded."}},"type":"object","required":["argv","returncode","stdout","stderr","success"],"title":"DynAddressListRemoveResult","description":"Result of dyn-address-list remove."},"ErrorDetail":{"properties":{"code":{"type":"string","title":"Code","description":"Legacy error code, kept for compatibility with existing integrations. Prefer reason for new code."},"message":{"type":"string","title":"Message","description":"A technical description of the error."},"reason":{"type":"string","title":"Reason","description":"Stable, vendor-neutral error code. This is the field to branch on.","readOnly":true}},"type":"object","required":["code","message","reason"],"title":"ErrorDetail","description":"Model for error details."},"GeoIPCheckResult":{"properties":{"address":{"type":"string","title":"Address","description":"Endereço IPv4 consultado."},"network":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Network","description":"Rede que cobre o endereço, em notação CIDR."},"isoCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Isocode","description":"Código ISO do país."},"countryName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Countryname","description":"Nome do país."},"found":{"type":"boolean","title":"Found","description":"Se alguma rede cobre o endereço."}},"type":"object","required":["address","found"],"title":"GeoIPCheckResult","description":"Answer for geoip check, which resolves one address to its country."},"GeoIPCountryDTO":{"properties":{"isoCode":{"type":"string","title":"Isocode","description":"Código ISO de duas letras."},"countryName":{"type":"string","title":"Countryname","description":"Nome do país."}},"type":"object","required":["isoCode","countryName"],"title":"GeoIPCountryDTO","description":"One country the current geoip database knows."},"GeoIPCountryListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/GeoIPCountryDTO"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de países na base."}},"type":"object","required":["total"],"title":"GeoIPCountryListResponse","description":"Full country catalogue, as geoip print renders it."},"GeoIPUpdateResult":{"properties":{"updateArgv":{"items":{"type":"string"},"type":"array","title":"Updateargv"},"updateReturncode":{"type":"integer","title":"Updatereturncode"},"updateStdout":{"type":"string","title":"Updatestdout"},"updateStderr":{"type":"string","title":"Updatestderr"},"success":{"type":"boolean","title":"Success","description":"Se o rebuild terminou sem erro."}},"type":"object","required":["updateArgv","updateReturncode","updateStdout","updateStderr","success"],"title":"GeoIPUpdateResult","description":"Result payload for the geoip update, committed to the geoip database."},"HashLimitSummary":{"properties":{"matchers":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Matchers"},"matchers_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matchers Text"},"pps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pps"},"bps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bps"},"pps_match":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pps Match"},"bps_match":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bps Match"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size"},"srcmask":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srcmask"},"dstmask":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dstmask"},"srcport_group_sz":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srcport Group Sz"},"dstport_group_sz":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dstport Group Sz"},"pktsize_group_sz":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pktsize Group Sz"}},"type":"object","title":"HashLimitSummary","description":"Summarizes non-default hash limit fields."},"HealthCheckData":{"properties":{"status":{"type":"string","title":"Status"},"healthy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Healthy"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"window_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Window Minutes"},"level_counts":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Level Counts"},"last_occurrence":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object"},{"type":"null"}],"title":"Last Occurrence"},"scanned_files":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scanned Files"}},"type":"object","required":["status"],"title":"HealthCheckData","description":"Health check payload."},"HostnameSetRequest":{"properties":{"hostname":{"type":"string","maxLength":16,"minLength":1,"pattern":"^[A-Za-z0-9]([A-Za-z0-9.-]*[A-Za-z0-9])?$","title":"Hostname","description":"Novo hostname; truncado em 16 caracteres."}},"additionalProperties":false,"type":"object","required":["hostname"],"title":"HostnameSetRequest","description":"Payload for system hostname set."},"HwRuleBatchStatusResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"set_argv":{"items":{"type":"string"},"type":"array","title":"Set Argv"},"set_returncode":{"type":"integer","title":"Set Returncode"},"set_stdout":{"type":"string","title":"Set Stdout"},"set_stderr":{"type":"string","title":"Set Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","set_argv","set_returncode","set_stdout","set_stderr"],"title":"HwRuleBatchStatusResult","description":"Result payload for hw-rule enable/disable plus commit."},"HwRuleCreateRequest":{"properties":{"action":{"anyOf":[{"type":"string","enum":["accept","bypass","drop"]},{"type":"null"}],"title":"Action","description":"action; accept | bypass | drop"},"status":{"anyOf":[{"type":"string","enum":["enable","disable"]},{"type":"null"}],"title":"Status","description":"status"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment","description":"comment; 'none' clears it"},"port":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Port","description":"port; network port id the rule binds to"},"counter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter","description":"counter; enable | disable"},"proto":{"anyOf":[{"type":"string","enum":["any","tcp","udp","icmp","hopopt"]},{"type":"null"}],"title":"Proto","description":"proto; any | tcp | udp | icmp | hopopt"},"src_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Prefix","description":"src-prefix; IPv4, CIDR network or 'any'"},"dst_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Prefix","description":"dst-prefix; IPv4, CIDR network or 'any'"},"src_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Address List","description":"src-address-list; list name or 'none'"},"dst_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Address List","description":"dst-address-list; list name or 'none'"},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport","description":"sport; port, 'min-max' range or 'any'"},"dport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dport","description":"dport; port, 'min-max' range or 'any'"},"tcp_flags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Flags","description":"tcp-flags; mask-comp or 'disable'"},"fragment_detect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fragment Detect","description":"fragment-detect; enable | disable"},"icmp_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icmp Type","description":"icmp-type; 0-254 or 'any'"},"icmp_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icmp Code","description":"icmp-code; 0-254 or 'any'"},"dscp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dscp","description":"dscp; 0-63 or 'any'"},"rand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rand","description":"rand; 50 or 'disable'"},"ttl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ttl","description":"ttl; 1-255, 'min-max' range or 'any'"}},"additionalProperties":false,"type":"object","title":"HwRuleCreateRequest","description":"Payload for hw-rule add."},"HwRuleCreateResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"add_argv":{"items":{"type":"string"},"type":"array","title":"Add Argv"},"add_returncode":{"type":"integer","title":"Add Returncode"},"add_stdout":{"type":"string","title":"Add Stdout"},"add_stderr":{"type":"string","title":"Add Stderr"},"hw_rule_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hw Rule Id","description":"Id lido da saída do comando, quando disponível."}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","add_argv","add_returncode","add_stdout","add_stderr"],"title":"HwRuleCreateResult","description":"Result payload for hw-rule add plus commit."},"HwRuleDTO":{"properties":{"id":{"type":"integer","title":"Id"},"ruleOrder":{"type":"integer","title":"Ruleorder"},"status":{"type":"integer","title":"Status"},"action":{"type":"string","title":"Action"},"proto":{"type":"string","title":"Proto"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"portId":{"type":"integer","title":"Portid"},"counterEnabled":{"type":"integer","title":"Counterenabled"},"srcPrefix":{"type":"string","title":"Srcprefix"},"srcPrefixLen":{"type":"integer","title":"Srcprefixlen"},"dstPrefix":{"type":"string","title":"Dstprefix"},"dstPrefixLen":{"type":"integer","title":"Dstprefixlen"},"srcAddressListIdx":{"type":"integer","title":"Srcaddresslistidx"},"dstAddressListIdx":{"type":"integer","title":"Dstaddresslistidx"},"srcPortMin":{"type":"integer","title":"Srcportmin"},"srcPortMax":{"type":"integer","title":"Srcportmax"},"dstPortMin":{"type":"integer","title":"Dstportmin"},"dstPortMax":{"type":"integer","title":"Dstportmax"},"tcpFlagsMask":{"type":"integer","title":"Tcpflagsmask"},"tcpFlagsComp":{"type":"integer","title":"Tcpflagscomp"},"ipFragmentMatch":{"type":"integer","title":"Ipfragmentmatch"},"rand":{"type":"integer","title":"Rand"},"icmpType":{"type":"integer","title":"Icmptype"},"icmpCode":{"type":"integer","title":"Icmpcode"},"dscp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dscp"},"ttlMin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttlmin"},"ttlMax":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttlmax"},"srcPrefixCidr":{"type":"string","title":"Srcprefixcidr","description":"Return source prefix rendered as CIDR string.","readOnly":true},"dstPrefixCidr":{"type":"string","title":"Dstprefixcidr","description":"Return destination prefix rendered as CIDR string.","readOnly":true},"usesSrcAddressList":{"type":"boolean","title":"Usessrcaddresslist","description":"Tell whether a source address list is bound, since -1 means unset.","readOnly":true},"usesDstAddressList":{"type":"boolean","title":"Usesdstaddresslist","description":"Tell whether a destination address list is bound, since -1 means unset.","readOnly":true}},"type":"object","required":["id","ruleOrder","status","action","proto","portId","counterEnabled","srcPrefix","srcPrefixLen","dstPrefix","dstPrefixLen","srcAddressListIdx","dstAddressListIdx","srcPortMin","srcPortMax","dstPortMin","dstPortMax","tcpFlagsMask","tcpFlagsComp","ipFragmentMatch","rand","icmpType","icmpCode","dscp","ttlMin","ttlMax","srcPrefixCidr","dstPrefixCidr","usesSrcAddressList","usesDstAddressList"],"title":"HwRuleDTO","description":"A single hardware rule, as rendered by the hardware rule listing."},"HwRuleIdsRequest":{"properties":{"ids":{"items":{"type":"integer"},"type":"array","minItems":1,"title":"Ids","description":"Ids das hw-rules."}},"additionalProperties":false,"type":"object","required":["ids"],"title":"HwRuleIdsRequest","description":"Payload carrying the hardware rule ids a batch command applies to."},"HwRuleListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/HwRuleDTO"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","required":["items"],"title":"HwRuleListResponse","description":"Wrapper response for listing hardware rules."},"HwRuleMoveRequest":{"properties":{"position":{"type":"string","enum":["before","after"],"title":"Position","description":"Posição relativa ao id de referência.","default":"before"},"reference_id":{"type":"integer","minimum":1.0,"title":"Reference Id","description":"Id da hw-rule de referência."}},"additionalProperties":false,"type":"object","required":["reference_id"],"title":"HwRuleMoveRequest","description":"Payload for hw-rule move."},"HwRuleMoveResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"move_argv":{"items":{"type":"string"},"type":"array","title":"Move Argv"},"move_returncode":{"type":"integer","title":"Move Returncode"},"move_stdout":{"type":"string","title":"Move Stdout"},"move_stderr":{"type":"string","title":"Move Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","move_argv","move_returncode","move_stdout","move_stderr"],"title":"HwRuleMoveResult","description":"Result payload for hw-rule move plus commit."},"HwRulePrintConfigResult":{"properties":{"argv":{"items":{"type":"string"},"type":"array","title":"Argv"},"returncode":{"type":"integer","title":"Returncode"},"stdout":{"type":"string","title":"Stdout"},"stderr":{"type":"string","title":"Stderr"},"config":{"type":"string","title":"Config","description":"Texto de configuração pronto para replay.","default":""},"success":{"type":"boolean","title":"Success","description":"True quando a operação teve sucesso."}},"type":"object","required":["argv","returncode","stdout","stderr","success"],"title":"HwRulePrintConfigResult","description":"Result payload for hw-rule print config, the replayable rule dump."},"HwRuleRemoveAllRequest":{"properties":{"confirm":{"type":"boolean","title":"Confirm","description":"Deve ser true; 'hw-rule remove all' apaga todas as hw-rules."}},"additionalProperties":false,"type":"object","required":["confirm"],"title":"HwRuleRemoveAllRequest","description":"Payload for hw-rule remove all, which wipes every hardware rule at once."},"HwRuleRemoveResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"remove_argv":{"items":{"type":"string"},"type":"array","title":"Remove Argv"},"remove_returncode":{"type":"integer","title":"Remove Returncode"},"remove_stdout":{"type":"string","title":"Remove Stdout"},"remove_stderr":{"type":"string","title":"Remove Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","remove_argv","remove_returncode","remove_stdout","remove_stderr"],"title":"HwRuleRemoveResult","description":"Result payload for hw-rule remove plus commit."},"HwRuleStatsDTO":{"properties":{"hwRuleId":{"type":"integer","title":"Hwruleid","description":"Id da hardware rule."},"lastHit":{"type":"integer","title":"Lasthit","description":"Timestamp da amostra mais recente."},"previousHit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Previoushit","description":"Timestamp da amostra anterior; nulo quando só há uma."},"totPackets":{"type":"integer","title":"Totpackets","description":"Pacotes acumulados na regra."},"totBytes":{"type":"integer","title":"Totbytes","description":"Bytes acumulados na regra."},"deltaPackets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deltapackets","description":"Pacotes entre as duas últimas amostras."},"deltaBytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deltabytes","description":"Bytes entre as duas últimas amostras."}},"type":"object","required":["hwRuleId","lastHit","totPackets","totBytes"],"title":"HwRuleStatsDTO","description":"Counters of one hardware rule plus the delta of the last two samples."},"HwRuleStatsListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/HwRuleStatsDTO"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de hardware rules com amostras."}},"type":"object","required":["total"],"title":"HwRuleStatsListResponse","description":"Counters for every hardware rule the dataplane has already sampled."},"HwRuleUpdateRequest":{"properties":{"action":{"anyOf":[{"type":"string","enum":["accept","bypass","drop"]},{"type":"null"}],"title":"Action","description":"action; accept | bypass | drop"},"status":{"anyOf":[{"type":"string","enum":["enable","disable"]},{"type":"null"}],"title":"Status","description":"status"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment","description":"comment; 'none' clears it"},"port":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Port","description":"port; network port id the rule binds to"},"counter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter","description":"counter; enable | disable"},"proto":{"anyOf":[{"type":"string","enum":["any","tcp","udp","icmp","hopopt"]},{"type":"null"}],"title":"Proto","description":"proto; any | tcp | udp | icmp | hopopt"},"src_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Prefix","description":"src-prefix; IPv4, CIDR network or 'any'"},"dst_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Prefix","description":"dst-prefix; IPv4, CIDR network or 'any'"},"src_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Address List","description":"src-address-list; list name or 'none'"},"dst_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Address List","description":"dst-address-list; list name or 'none'"},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport","description":"sport; port, 'min-max' range or 'any'"},"dport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dport","description":"dport; port, 'min-max' range or 'any'"},"tcp_flags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Flags","description":"tcp-flags; mask-comp or 'disable'"},"fragment_detect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fragment Detect","description":"fragment-detect; enable | disable"},"icmp_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icmp Type","description":"icmp-type; 0-254 or 'any'"},"icmp_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icmp Code","description":"icmp-code; 0-254 or 'any'"},"dscp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dscp","description":"dscp; 0-63 or 'any'"},"rand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rand","description":"rand; 50 or 'disable'"},"ttl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ttl","description":"ttl; 1-255, 'min-max' range or 'any'"}},"additionalProperties":false,"type":"object","title":"HwRuleUpdateRequest","description":"Payload for hw-rule set."},"HwRuleUpdateResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"set_argv":{"items":{"type":"string"},"type":"array","title":"Set Argv"},"set_returncode":{"type":"integer","title":"Set Returncode"},"set_stdout":{"type":"string","title":"Set Stdout"},"set_stderr":{"type":"string","title":"Set Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","set_argv","set_returncode","set_stdout","set_stderr"],"title":"HwRuleUpdateResult","description":"Result payload for hw-rule set plus commit."},"InterfaceAllQueuesResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/InterfaceQueueListResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de portas com filas."}},"type":"object","required":["total"],"title":"InterfaceAllQueuesResponse","description":"Queue distribution for every port, as stats-detail dumps it in one shot."},"InterfaceDTO":{"properties":{"portId":{"type":"integer","title":"Portid","description":"Id numérico da porta física."},"speed":{"type":"integer","title":"Speed","description":"Velocidade negociada em Mbps."},"duplex":{"type":"integer","title":"Duplex","description":"0 = half, 1 = full."},"autoneg":{"type":"integer","title":"Autoneg","description":"0 = off, 1 = on."},"linkStatus":{"type":"integer","title":"Linkstatus","description":"0 = down, 1 = up."},"mtu":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mtu","description":"MTU configurada."},"macAddr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Macaddr","description":"Endereço MAC físico."},"driver":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver","description":"Driver acoplado."},"deviceName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Devicename","description":"Endereço PCI."},"interfaceName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interfacename","description":"Nome da interface no Linux."},"linkUp":{"type":"boolean","title":"Linkup","description":"Whether the physical link is up.","readOnly":true},"fullDuplex":{"type":"boolean","title":"Fullduplex","description":"Whether the port negotiated full duplex.","readOnly":true}},"type":"object","required":["portId","speed","duplex","autoneg","linkStatus","linkUp","fullDuplex"],"title":"InterfaceDTO","description":"One physical port, as interface print renders it."},"InterfaceListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/InterfaceDTO"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de portas físicas."}},"type":"object","required":["total"],"title":"InterfaceListResponse","description":"Full port inventory; total always counts every row."},"InterfaceQueueDTO":{"properties":{"portId":{"type":"integer","title":"Portid","description":"Id da porta física."},"queueId":{"type":"integer","title":"Queueid","description":"Id da fila."},"rxPackets":{"type":"integer","title":"Rxpackets"},"rxBytes":{"type":"integer","title":"Rxbytes"},"txPackets":{"type":"integer","title":"Txpackets"},"txBytes":{"type":"integer","title":"Txbytes"}},"type":"object","required":["portId","queueId","rxPackets","rxBytes","txPackets","txBytes"],"title":"InterfaceQueueDTO","description":"Counters for one hardware queue of one port."},"InterfaceQueueListResponse":{"properties":{"portId":{"type":"integer","title":"Portid","description":"Id da porta física consultada."},"items":{"items":{"$ref":"#/components/schemas/InterfaceQueueDTO"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de filas da porta."}},"type":"object","required":["portId","total"],"title":"InterfaceQueueListResponse","description":"Queue distribution for one port, as stats-detail renders it."},"InterfaceStatsDTO":{"properties":{"portId":{"type":"integer","title":"Portid","description":"Id da porta física."},"rxPackets":{"type":"integer","title":"Rxpackets"},"rxBytes":{"type":"integer","title":"Rxbytes"},"rxErrors":{"type":"integer","title":"Rxerrors"},"rxMissed":{"type":"integer","title":"Rxmissed","description":"Perdidos por estouro do buffer físico da placa."},"rxNombuf":{"type":"integer","title":"Rxnombuf","description":"Descartados por falta de mbuf livre."},"txPackets":{"type":"integer","title":"Txpackets"},"txBytes":{"type":"integer","title":"Txbytes"},"txErrors":{"type":"integer","title":"Txerrors"},"rxPhyDiscardPackets":{"type":"integer","title":"Rxphydiscardpackets","description":"Descartados na camada física de recepção."},"txPhyDiscardPackets":{"type":"integer","title":"Txphydiscardpackets","description":"Descartados na camada física de transmissão."},"rxPciSignalIntegrity":{"type":"integer","title":"Rxpcisignalintegrity","description":"Erros de integridade no barramento PCI na recepção."},"txPciSignalIntegrity":{"type":"integer","title":"Txpcisignalintegrity","description":"Erros de integridade no barramento PCI na transmissão."}},"type":"object","required":["portId","rxPackets","rxBytes","rxErrors","rxMissed","rxNombuf","txPackets","txBytes","txErrors","rxPhyDiscardPackets","txPhyDiscardPackets","rxPciSignalIntegrity","txPciSignalIntegrity"],"title":"InterfaceStatsDTO","description":"Cumulative counters for one port, as interface print stats renders them."},"InterfaceStatsListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/InterfaceStatsDTO"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de portas com contadores."}},"type":"object","required":["total"],"title":"InterfaceStatsListResponse","description":"Counters for every port the dataplane reports."},"MitigationMetadata":{"properties":{"effectiveGranularity":{"type":"string","title":"Effectivegranularity"},"effectiveGranularitySeconds":{"type":"integer","title":"Effectivegranularityseconds"},"requestedGranularity":{"type":"string","title":"Requestedgranularity"},"requestedGranularitySeconds":{"type":"integer","title":"Requestedgranularityseconds"}},"type":"object","required":["effectiveGranularity","effectiveGranularitySeconds","requestedGranularity","requestedGranularitySeconds"],"title":"MitigationMetadata","description":"Metadata describing effective/requested granularity."},"MitigationMetric":{"properties":{"packets":{"type":"integer","title":"Packets","default":0},"bytes":{"type":"integer","title":"Bytes","default":0},"bits":{"type":"integer","title":"Bits","default":0},"pps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pps","description":"Packets per second for the bucket (optional)"},"bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bps","description":"Bits per second for the bucket (optional)"},"rules":{"items":{"$ref":"#/components/schemas/RuleInfo"},"type":"array","title":"Rules"}},"type":"object","title":"MitigationMetric","description":"Packets/bytes/bits metrics for a mitigation action."},"MitigationPeriod":{"properties":{"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"type":"string","format":"date-time","title":"End Time"},"granularity":{"type":"string","title":"Granularity"},"total_points":{"type":"integer","title":"Total Points","default":0}},"type":"object","required":["start_time","end_time","granularity"],"title":"MitigationPeriod","description":"The window echoed back to the caller, in the snake_case keys it reads."},"MitigationSummary":{"properties":{"totalAccept":{"$ref":"#/components/schemas/MitigationMetric"},"totalDrop":{"$ref":"#/components/schemas/MitigationMetric"},"totalHash":{"$ref":"#/components/schemas/MitigationMetric"},"totalRate":{"$ref":"#/components/schemas/MitigationMetric"},"totalUnresolved":{"$ref":"#/components/schemas/MitigationMetric"},"period":{"$ref":"#/components/schemas/MitigationPeriod"}},"type":"object","required":["period"],"title":"MitigationSummary","description":"Aggregated totals for the requested period."},"MitigationTimelineItem":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"accept":{"$ref":"#/components/schemas/MitigationMetric"},"drop":{"$ref":"#/components/schemas/MitigationMetric"},"hash":{"$ref":"#/components/schemas/MitigationMetric"},"rate":{"$ref":"#/components/schemas/MitigationMetric"},"unresolved":{"$ref":"#/components/schemas/MitigationMetric"}},"type":"object","required":["timestamp"],"title":"MitigationTimelineItem","description":"Single time bucket with metrics per action."},"MitigationTimelineResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MitigationTimelineItem"},"type":"array","title":"Items"},"summary":{"$ref":"#/components/schemas/MitigationSummary"},"metadata":{"$ref":"#/components/schemas/MitigationMetadata"}},"type":"object","required":["items","summary","metadata"],"title":"MitigationTimelineResponse","description":"Full timeline payload (items + summary + metadata)."},"PacketCaptureResult":{"properties":{"success":{"type":"boolean","title":"Success","description":"True if the capture completed."},"exit_code":{"type":"integer","title":"Exit Code","description":"Exit status from the script."},"local_path":{"type":"string","title":"Local Path","description":"Absolute path of the generated nomodo.pcap file."},"remote_path":{"type":"string","title":"Remote Path","description":"Expected remote destination (HTTP URL) for the uploaded pcap."},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"Local timestamp when capture was started."},"stdout":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stdout","description":"stdout collected from the script."},"stderr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stderr","description":"stderr collected from the script."}},"type":"object","required":["success","exit_code","local_path","remote_path","started_at"],"title":"PacketCaptureResult","description":"Outcome of invoking the pcap capture helper."},"PageMeta":{"properties":{"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["total","limit","offset"],"title":"PageMeta","description":"Common pagination metadata wrapper."},"PrefixPullRunDTO":{"properties":{"accepted":{"type":"boolean","title":"Accepted","description":"Whether the request was accepted now; false means already running."},"status":{"$ref":"#/components/schemas/PrefixPullStatusDTO","description":"Latest scheduler status snapshot."}},"type":"object","required":["accepted","status"],"title":"PrefixPullRunDTO","description":"Payload returned after requesting an immediate pull run."},"PrefixPullStatusDTO":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether pull synchronization is enabled."},"configured":{"type":"boolean","title":"Configured","description":"Whether pull settings are runnable."},"mode":{"type":"string","title":"Mode","description":"Resolved pull mode: catalog, legacy, or a misconfigured variant."},"interval_seconds":{"type":"integer","title":"Interval Seconds","description":"Configured scheduler interval."},"jitter_seconds":{"type":"integer","title":"Jitter Seconds","description":"Configured jitter after each interval."},"run_on_start":{"type":"boolean","title":"Run On Start","description":"Whether scheduler executes once at startup."},"scheduler_started":{"type":"boolean","title":"Scheduler Started","description":"Whether scheduler thread is alive."},"running":{"type":"boolean","title":"Running","description":"Whether a run is currently active."},"runs_total":{"type":"integer","title":"Runs Total","description":"Total pull attempts executed."},"runs_success":{"type":"integer","title":"Runs Success","description":"Total successful runs."},"runs_failed":{"type":"integer","title":"Runs Failed","description":"Total failed runs."},"runs_skipped":{"type":"integer","title":"Runs Skipped","description":"Runs skipped because another run was active."},"last_started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Started At","description":"UTC timestamp for last run start."},"last_finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Finished At","description":"UTC timestamp for last run finish."},"last_success_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Success At","description":"UTC timestamp for last successful run."},"last_failure_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Failure At","description":"UTC timestamp for last failed run."},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error","description":"Last run error message, when present."}},"type":"object","required":["enabled","configured","mode","interval_seconds","jitter_seconds","run_on_start","scheduler_started","running","runs_total","runs_success","runs_failed","runs_skipped"],"title":"PrefixPullStatusDTO","description":"Current prefix pull scheduler status."},"RAMInfo":{"properties":{"percent_used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percent Used","description":"RAM usage percentage"},"used_gb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Used Gb","description":"Used RAM in GB"},"total_gb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Gb","description":"Total RAM in GB"}},"type":"object","title":"RAMInfo","description":"RAM metrics for dashboard."},"RateLimitSummary":{"properties":{"pps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pps"},"bps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bps"},"pps_match":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pps Match"},"bps_match":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bps Match"}},"type":"object","title":"RateLimitSummary","description":"Summarizes non-default rate limit fields."},"RuleActiveCountResponse":{"properties":{"activeRuleCount":{"type":"integer","title":"Activerulecount","description":"Regras com status exatamente ativo, como database_rules_active_count conta; não é o total filtrado que meta.total devolve na listagem."}},"type":"object","required":["activeRuleCount"],"title":"RuleActiveCountResponse","description":"Answer for rule count, which counts active rules only."},"RuleActivityItem":{"properties":{"id":{"type":"integer","title":"Id"},"last_hit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Hit"},"status":{"type":"string","enum":["never","active","idle"],"title":"Status"}},"type":"object","required":["id","last_hit","status"],"title":"RuleActivityItem","description":"Activity information for a single rule."},"RuleActivityRequest":{"properties":{"ids":{"items":{"type":"integer"},"type":"array","minItems":1,"title":"Ids","description":"Rule ids to check for recent hits"},"window_seconds":{"type":"integer","minimum":1.0,"title":"Window Seconds","description":"Window in seconds used to flag a rule as active","default":60}},"type":"object","title":"RuleActivityRequest","description":"Request payload carrying the rules to check and the time window."},"RuleBatchDisableResult":{"properties":{"action":{"type":"string","enum":["enable","disable"],"title":"Action","description":"The status applied to the rules.","default":"disable"},"items":{"items":{"$ref":"#/components/schemas/RuleBatchSetResult"},"type":"array","title":"Items"},"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success"}},"type":"object","required":["items","commit_argv","commit_returncode","commit_stdout","commit_stderr","success"],"title":"RuleBatchDisableResult","description":"Result of one rule enable/disable call followed by a single commit."},"RuleBatchSetResult":{"properties":{"rule_id":{"type":"integer","title":"Rule Id"},"set_argv":{"items":{"type":"string"},"type":"array","title":"Set Argv"},"set_returncode":{"type":"integer","title":"Set Returncode"},"set_stdout":{"type":"string","title":"Set Stdout"},"set_stderr":{"type":"string","title":"Set Stderr"},"success":{"type":"boolean","title":"Success"}},"type":"object","required":["rule_id","set_argv","set_returncode","set_stdout","set_stderr","success"],"title":"RuleBatchSetResult","description":"Result of a single rule set call."},"RuleConfigResult":{"properties":{"command_argv":{"items":{"type":"string"},"type":"array","title":"Command Argv"},"command_returncode":{"type":"integer","title":"Command Returncode"},"command_stdout":{"type":"string","title":"Command Stdout"},"command_stderr":{"type":"string","title":"Command Stderr"},"config":{"type":"string","title":"Config","description":"Texto de configuração reproduzível."},"success":{"type":"boolean","title":"Success","description":"Se o comando terminou sem erro."}},"additionalProperties":false,"type":"object","required":["command_argv","command_returncode","command_stdout","command_stderr","config","success"],"title":"RuleConfigResult","description":"Result payload for rule print config."},"RuleCounterItem":{"properties":{"id":{"type":"integer","title":"Id"},"packets":{"type":"integer","title":"Packets"},"bytes":{"type":"integer","title":"Bytes"},"bits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bits","description":"Live counters return bits (legacy field bytes retained)"}},"type":"object","required":["id","packets","bytes"],"title":"RuleCounterItem","description":"Counter data for a single rule."},"RuleCountersRequest":{"properties":{"rule_ids":{"items":{"type":"integer"},"type":"array","minItems":1,"title":"Rule Ids","description":"List of rule IDs to get counters for"}},"type":"object","title":"RuleCountersRequest","description":"Request payload for counters endpoints."},"RuleCreateRequest":{"properties":{"src_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Prefix","description":"IPv4, CIDR, '!<cidr>' or 'any'"},"dst_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Prefix","description":"IPv4, CIDR, '!<cidr>' or 'any'"},"src_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Address List","description":"Address list name or '!name'"},"dst_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Address List","description":"Address list name or '!name'"},"src_dyn_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Dyn Address List","description":"Dynamic address list matcher '[!]name' or 'none'"},"dst_dyn_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Dyn Address List","description":"Dynamic address list matcher '[!]name' or 'none'"},"src_geoip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Geoip","description":"[!]CC[,CC...] or 'none' (mutually exclusive)"},"dst_geoip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Geoip","description":"[!]CC[,CC...] or 'none' (mutually exclusive)"},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport","description":"Source port: int, 'min-max', '!min[-max]', or 'any'"},"dport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dport","description":"Dest port: int, 'min-max', '!min[-max]', or 'any'"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment","description":"Optional free-form comment or 'none'"},"tcp_flags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Flags","description":"TCP flags mask-comp, e.g. syn,ack-syn (proto must be tcp)"},"tcp_filter":{"anyOf":[{"type":"string","enum":["disable","loose","strict"]},{"type":"null"}],"title":"Tcp Filter","description":"loose | strict | disable (default)"},"tcp_filter_state":{"anyOf":[{"type":"string","enum":["new","invalid"]},{"type":"null"}],"title":"Tcp Filter State","description":"new | invalid (only when tcp_filter!=disable)"},"tcp_hdr_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Hdr Size","description":"TCP header size or range; 0 or 20-60 (proto tcp)"},"packet_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Packet Size","description":"Full packet size or range in bytes"},"fragment_detect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fragment Detect","description":"enable | disable IPv4 fragment matcher"},"tcp_rr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Rr","description":"enable | disable TCP round-robin matcher"},"dscp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dscp","description":"DSCP matcher [!]0-63, [!]min-max or disable"},"dscp_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dscp Value","description":"DSCP value 0-63 or disable for action=dscp-set"},"dyn_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dyn Address List","description":"Dynamic address-list name for add-*-to-dyn-address-list actions or 'none'"},"dyn_address_list_ttl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dyn Address List Ttl","description":"TTL for dyn-address-list entries (hh:mm:ss or 0)"},"rate_pps":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Pps","description":"Packets-per-second threshold, optionally prefixed by < or >"},"rate_bps":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Bps","description":"Bits-per-second threshold, optionally prefixed by < or >"},"rate_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Mode","description":"Legacy UI mode field; disable/normal are accepted as no-op."},"rate_block_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Block Time","description":"Legacy UI block timeout field; non-zero values are unsupported."},"hash_matchers":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash Matchers","description":"hashlimit matchers: srcip,srcport,dstip,dstport,proto,pktsize (csv)"},"hash_pps":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash Pps","description":"Packets-per-second hashlimit threshold, optionally < or >"},"hash_bps":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash Bps","description":"Bits-per-second hashlimit threshold, optionally < or >"},"hash_size":{"anyOf":[{"type":"integer","minimum":8.0},{"type":"null"}],"title":"Hash Size","description":"hashlimit table size; the dataplane caps it at RTE_HASH_ENTRIES_MAX"},"hash_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash Mode","description":"Legacy UI mode field; disable/normal are accepted as no-op."},"hash_block_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Block Time","description":"Legacy UI block timeout field; non-zero values are unsupported."},"hash_srcmask":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Srcmask","description":"hashlimit source mask (0-32)"},"hash_dstmask":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Dstmask","description":"hashlimit destination mask (0-32)"},"bot_detect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot Detect","description":"enable | disable bot-detect feature"},"rand":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rand","description":"Random match probability 0-99 (integer)"},"dpi_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dpi Pattern","description":"PCRE pattern or 'none' for DPI matching"},"ttl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ttl","description":"IP TTL matcher [!]1-255, [!]min-max or disable"},"icmp_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icmp Type","description":"ICMP type 0-254 or 'any' (proto must be icmp)"},"icmp_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icmp Code","description":"ICMP code 0-254 or 'any' (proto must be icmp)"},"dns_fqdn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Fqdn","description":"DNS FQDN matcher or 'none' (proto must be tcp or udp)"},"dns_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Type","description":"DNS record type mnemonic, 0-65535 or 'none'"},"dns_packet":{"anyOf":[{"type":"string","enum":["any","query","response"]},{"type":"null"}],"title":"Dns Packet","description":"DNS packet direction: any | query | response"},"hash_srcport_group_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Srcport Group Size","description":"Hash bucket group size for source port; power of two 1-32768"},"hash_dstport_group_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Dstport Group Size","description":"Hash bucket group size for destination port; power of two 1-32768"},"hash_pktsize_group_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Pktsize Group Size","description":"Hash bucket group size for packet size; power of two 1-32768"},"traffic_analyzer_port":{"anyOf":[{"type":"integer","maximum":65535.0,"minimum":0.0},{"type":"null"}],"title":"Traffic Analyzer Port","description":"Network port id for action='traffic-analyzer'"},"chain":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Chain","description":"Name of the rule processing chain; it is addressed by name","examples":["default","scrubbing"]},"chain_target":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Chain Target","description":"Destination chain name; required when action='chain-jump'","examples":["INSPECT","BLOCK"]},"action":{"type":"string","enum":["accept","drop","drop-rst","dscp-set","passthrough","add-src-to-dyn-address-list","add-dst-to-dyn-address-list","chain-jump","return","traffic-analyzer"],"title":"Action","description":"accept | drop | drop-rst | dscp-set | passthrough | add-src-to-dyn-address-list | add-dst-to-dyn-address-list | chain-jump | return | traffic-analyzer","default":"accept"},"status":{"anyOf":[{"type":"string","enum":["enable","disable"]},{"type":"null"}],"title":"Status","description":"enable | disable (default: enable)"},"proto":{"type":"string","enum":["any","tcp","udp","icmp","tcp,udp","hopopt","igmp","ggp","ipv4","st","!any","!tcp","!udp","!icmp","!tcp,udp","!hopopt","!igmp","!ggp","!ipv4","!st"],"title":"Proto","description":"any | tcp | udp | icmp | tcp,udp (negation with '!')","default":"any"}},"additionalProperties":false,"type":"object","title":"RuleCreateRequest","description":"Request payload to create a traffic rule.","examples":[{"action":"drop","comment":"bloqueio manual","src_prefix":"198.51.100.0/24"},{"action":"accept","comment":"protecao https","dport":"443","dst_prefix":"203.0.113.10","proto":"tcp","rate_pps":"50000"},{"action":"drop","chain":"scrubbing","src_address_list":"blocklist"}]},"RuleCreateResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"add_argv":{"items":{"type":"string"},"type":"array","title":"Add Argv"},"add_returncode":{"type":"integer","title":"Add Returncode"},"add_stdout":{"type":"string","title":"Add Stdout"},"add_stderr":{"type":"string","title":"Add Stderr"},"created_rule_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created Rule Id","description":"Rule id reported on success."}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","add_argv","add_returncode","add_stdout","add_stderr"],"title":"RuleCreateResult","description":"Result of rule add and commit."},"RuleDTO":{"properties":{"id":{"type":"integer","title":"Id"},"ruleOrder":{"type":"integer","title":"Ruleorder"},"status":{"type":"integer","title":"Status"},"action":{"type":"string","title":"Action"},"actionDynAddrList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actiondynaddrlist"},"actionDynAddrListEntryTtl":{"type":"integer","title":"Actiondynaddrlistentryttl"},"proto":{"type":"string","title":"Proto"},"protoNegation":{"type":"integer","title":"Protonegation"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"srcPrefix":{"type":"string","title":"Srcprefix"},"srcPrefixLen":{"type":"integer","title":"Srcprefixlen"},"srcMinPort":{"type":"integer","title":"Srcminport"},"srcMaxPort":{"type":"integer","title":"Srcmaxport"},"srcPortList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Srcportlist"},"srcGroupId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srcgroupid"},"srcDynAddrList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Srcdynaddrlist"},"srcL3Negation":{"type":"integer","title":"Srcl3Negation"},"srcL4PortNegation":{"type":"integer","title":"Srcl4Portnegation"},"srcGeoip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Srcgeoip"},"dstPrefix":{"type":"string","title":"Dstprefix"},"dstPrefixLen":{"type":"integer","title":"Dstprefixlen"},"dstMinPort":{"type":"integer","title":"Dstminport"},"dstMaxPort":{"type":"integer","title":"Dstmaxport"},"dstPortList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dstportlist"},"dstGroupId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dstgroupid"},"dstDynAddrList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dstdynaddrlist"},"dstL3Negation":{"type":"integer","title":"Dstl3Negation"},"dstL4PortNegation":{"type":"integer","title":"Dstl4Portnegation"},"dstGeoip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dstgeoip"},"rateLimitPps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ratelimitpps"},"rateLimitBps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ratelimitbps"},"rateLimitPpsMatch":{"type":"integer","title":"Ratelimitppsmatch","default":0},"rateLimitBpsMatch":{"type":"integer","title":"Ratelimitbpsmatch","default":0},"pktSizeMin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pktsizemin"},"pktSizeMax":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pktsizemax"},"tcpSeqNumber":{"type":"integer","title":"Tcpseqnumber"},"tcpFlagsMask":{"type":"integer","title":"Tcpflagsmask"},"tcpFlagsComp":{"type":"integer","title":"Tcpflagscomp"},"tcpHdrSizeMin":{"type":"integer","title":"Tcphdrsizemin"},"tcpHdrSizeMax":{"type":"integer","title":"Tcphdrsizemax"},"icmpType":{"type":"integer","title":"Icmptype"},"icmpCode":{"type":"integer","title":"Icmpcode"},"fragmentDetect":{"type":"integer","title":"Fragmentdetect","default":0},"hashLimitMatchers":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitmatchers"},"hashLimitPps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitpps"},"hashLimitBps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitbps"},"hashLimitPpsMatch":{"type":"integer","title":"Hashlimitppsmatch","default":0},"hashLimitBpsMatch":{"type":"integer","title":"Hashlimitbpsmatch","default":0},"hashLimitSize":{"type":"integer","title":"Hashlimitsize","default":2048},"hashLimitSrcmask":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitsrcmask"},"hashLimitDstmask":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitdstmask"},"botDetect":{"type":"integer","title":"Botdetect"},"randMatch":{"type":"integer","title":"Randmatch"},"dpiPattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dpipattern"},"tcpStateMode":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcpstatemode"},"tcpStateState":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcpstatestate"},"tcpRr":{"type":"integer","title":"Tcprr","default":0},"dscpMin":{"type":"integer","title":"Dscpmin","default":255},"dscpMax":{"type":"integer","title":"Dscpmax","default":0},"dscpNegation":{"type":"integer","title":"Dscpnegation","default":0},"dscpAction":{"type":"integer","title":"Dscpaction","default":255},"ttlMin":{"type":"integer","title":"Ttlmin","default":0},"ttlMax":{"type":"integer","title":"Ttlmax","default":0},"ttlNegation":{"type":"integer","title":"Ttlnegation","default":0},"dnsFqdn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dnsfqdn"},"dnsType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dnstype"},"dnsPacket":{"type":"integer","title":"Dnspacket","default":0},"chain":{"type":"integer","title":"Chain","default":0},"actionJumpChainValue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Actionjumpchainvalue"},"actionTrafficAnalyzerPort":{"type":"integer","title":"Actiontrafficanalyzerport","default":0},"hashLimitSrcportGroupSz":{"type":"integer","title":"Hashlimitsrcportgroupsz","default":1},"hashLimitDstportGroupSz":{"type":"integer","title":"Hashlimitdstportgroupsz","default":1},"hashLimitPktsizeGroupSz":{"type":"integer","title":"Hashlimitpktsizegroupsz","default":1},"ruleThrottlingEnable":{"type":"integer","title":"Rulethrottlingenable","default":1},"srcPrefixCidr":{"type":"string","title":"Srcprefixcidr","description":"Return source prefix rendered as CIDR string.","readOnly":true},"dstPrefixCidr":{"type":"string","title":"Dstprefixcidr","description":"Return destination prefix rendered as CIDR string.","readOnly":true}},"type":"object","required":["id","ruleOrder","status","action","actionDynAddrListEntryTtl","proto","protoNegation","srcPrefix","srcPrefixLen","srcMinPort","srcMaxPort","srcGroupId","srcL3Negation","srcL4PortNegation","dstPrefix","dstPrefixLen","dstMinPort","dstMaxPort","dstGroupId","dstL3Negation","dstL4PortNegation","rateLimitPps","rateLimitBps","pktSizeMin","pktSizeMax","tcpSeqNumber","tcpFlagsMask","tcpFlagsComp","tcpHdrSizeMin","tcpHdrSizeMax","icmpType","icmpCode","hashLimitMatchers","hashLimitPps","hashLimitBps","hashLimitSrcmask","hashLimitDstmask","botDetect","randMatch","tcpStateMode","tcpStateState","srcPrefixCidr","dstPrefixCidr"],"title":"RuleDTO","description":"Thin DTO for returning rules list."},"RuleIdsRequest":{"properties":{"ids":{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array","minItems":1,"title":"Ids","description":"Rule ids > 0 ou faixas 'id-id'."}},"additionalProperties":false,"type":"object","required":["ids"],"title":"RuleIdsRequest","description":"Payload containing rule IDs or 'id-id' ranges for batch operations."},"RuleInfo":{"properties":{"id":{"type":"integer","title":"Id"},"priority":{"type":"integer","title":"Priority"},"protocol":{"type":"string","title":"Protocol"},"action":{"anyOf":[{"type":"string","enum":["ACCEPT","DROP","HASH","RATE","UNRESOLVED"]},{"type":"null"}],"title":"Action"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["id","priority","protocol"],"title":"RuleInfo","description":"Rule identification information."},"RuleListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RuleDTO"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/PageMeta"}},"type":"object","required":["items","meta"],"title":"RuleListResponse","description":"Paginated response for rule listing."},"RuleMoveRequest":{"properties":{"id":{"type":"integer","minimum":0.0,"title":"Id","description":"Rule id to move; the service refuses only < 0."},"to_before":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"To Before","description":"Target rule id that the moved rule will be placed before."},"to_after":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"To After","description":"Target rule id that the moved rule will be placed after."}},"additionalProperties":false,"type":"object","required":["id"],"title":"RuleMoveRequest","description":"Request payload to move a rule next to another rule (rule move)."},"RuleMoveResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"move_argv":{"items":{"type":"string"},"type":"array","title":"Move Argv"},"move_returncode":{"type":"integer","title":"Move Returncode"},"move_stdout":{"type":"string","title":"Move Stdout"},"move_stderr":{"type":"string","title":"Move Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","move_argv","move_returncode","move_stdout","move_stderr"],"title":"RuleMoveResult","description":"Result of rule move and commit."},"RuleNonDefaultResponse":{"properties":{"id":{"type":"integer","title":"Id"},"ruleOrder":{"type":"integer","title":"Ruleorder"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"proto":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proto"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"srcPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Srcprefix"},"srcAddressList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Srcaddresslist"},"srcDynAddressList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Srcdynaddresslist"},"srcPort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Srcport"},"srcGeoip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Srcgeoip"},"dstPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dstprefix"},"dstAddressList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dstaddresslist"},"dstDynAddressList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dstdynaddresslist"},"dstPort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dstport"},"dstGeoip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dstgeoip"},"dynAddressList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dynaddresslist"},"dynAddressListTtl":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dynaddresslistttl"},"rateLimit":{"anyOf":[{"$ref":"#/components/schemas/RateLimitSummary"},{"type":"null"}]},"hashLimit":{"anyOf":[{"$ref":"#/components/schemas/HashLimitSummary"},{"type":"null"}]},"packetSize":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Packetsize"},"tcpHdrSize":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcphdrsize"},"tcpFlags":{"anyOf":[{"$ref":"#/components/schemas/TcpFlagsSummary"},{"type":"null"}]},"tcpFlagsText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcpflagstext"},"tcpState":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcpstate"},"tcpStateText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcpstatetext"},"tcpRr":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tcprr"},"dscp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dscp"},"dscpValue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dscpvalue"},"botDetect":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Botdetect"},"randMatch":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Randmatch"},"dpiPattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dpipattern"},"fragmentDetect":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Fragmentdetect"},"icmp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icmp"},"ttl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ttl"},"dnsFqdn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dnsfqdn"},"dnsType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dnstype"},"dnsPacket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dnspacket"},"chain":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chain"},"chainName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chainname"},"chainTarget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chaintarget"},"chainTargetName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chaintargetname"},"trafficAnalyzerPort":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trafficanalyzerport"},"order":{"type":"integer","title":"Order","description":"Expose rule order with a shorter alias for UI clients.","readOnly":true}},"additionalProperties":false,"type":"object","required":["id","ruleOrder","order"],"title":"RuleNonDefaultResponse","description":"Response containing only fields that differ from defaults."},"RuleOperationAccepted":{"properties":{"operation_id":{"type":"string","title":"Operation Id","description":"Unique operation identifier"},"poll_url":{"type":"string","title":"Poll Url","description":"Relative URL to poll operation"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Operation creation time"},"rule_id":{"type":"integer","title":"Rule Id","description":"Rule id being updated"},"status":{"type":"string","enum":["queued","running","succeeded","failed"],"title":"Status","description":"Current operation status"}},"type":"object","required":["operation_id","poll_url","created_at","rule_id","status"],"title":"RuleOperationAccepted","description":"Response payload returned when an async update is scheduled."},"RuleOperationSnapshot":{"properties":{"operation_id":{"type":"string","title":"Operation Id","description":"Unique operation identifier"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Operation creation time"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"Execution start time when available"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At","description":"Execution end time when available"},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorDetail"},{"type":"null"}],"description":"Error details when operation fails"},"rule_id":{"type":"integer","title":"Rule Id","description":"Rule id being updated"},"status":{"type":"string","enum":["queued","running","succeeded","failed"],"title":"Status","description":"Current operation status"},"result":{"anyOf":[{"$ref":"#/components/schemas/RuleUpdateResult"},{"type":"null"}],"description":"Result payload when the operation succeeds"}},"type":"object","required":["operation_id","created_at","rule_id","status"],"title":"RuleOperationSnapshot","description":"Current status for an asynchronous rule update operation."},"RuleRechainRequest":{"properties":{"chain":{"type":"string","minLength":1,"title":"Chain","description":"Chain name that will own the rule; it is resolved by name.","examples":["default","scrubbing"]}},"additionalProperties":false,"type":"object","required":["chain"],"title":"RuleRechainRequest","description":"Request payload to reassign a rule to another chain (rule rechain)."},"RuleRechainResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"set_argv":{"items":{"type":"string"},"type":"array","title":"Set Argv"},"set_returncode":{"type":"integer","title":"Set Returncode"},"set_stdout":{"type":"string","title":"Set Stdout"},"set_stderr":{"type":"string","title":"Set Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","set_argv","set_returncode","set_stdout","set_stderr"],"title":"RuleRechainResult","description":"Result of rule rechain and commit."},"RuleRemoveAllRequest":{"properties":{"confirm":{"type":"boolean","const":true,"title":"Confirm","description":"Precisa ser true; sem isso a remoção total não é executada."}},"additionalProperties":false,"type":"object","required":["confirm"],"title":"RuleRemoveAllRequest","description":"Payload for rule remove all, which demands an explicit confirmation."},"RuleRemoveAllResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"remove_argv":{"items":{"type":"string"},"type":"array","title":"Remove Argv"},"remove_returncode":{"type":"integer","title":"Remove Returncode"},"remove_stdout":{"type":"string","title":"Remove Stdout"},"remove_stderr":{"type":"string","title":"Remove Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","remove_argv","remove_returncode","remove_stdout","remove_stderr"],"title":"RuleRemoveAllResult","description":"Result of removing every rule."},"RuleRemoveResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"remove_argv":{"items":{"type":"string"},"type":"array","title":"Remove Argv"},"remove_returncode":{"type":"integer","title":"Remove Returncode"},"remove_stdout":{"type":"string","title":"Remove Stdout"},"remove_stderr":{"type":"string","title":"Remove Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","remove_argv","remove_returncode","remove_stdout","remove_stderr"],"title":"RuleRemoveResult","description":"Result of removing a rule."},"RuleUIListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RuleUIRow"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/PageMeta"},"cursorNext":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursornext"},"hasMore":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hasmore"},"metricsAvailable":{"type":"boolean","title":"Metricsavailable","default":true}},"type":"object","required":["items","meta"],"title":"RuleUIListResponse","description":"Paginated response for Rule UI listing."},"RuleUIRow":{"properties":{"id":{"type":"integer","title":"Id"},"priority":{"type":"integer","title":"Priority"},"action":{"type":"string","title":"Action"},"protocol":{"type":"string","title":"Protocol"},"enabled":{"type":"boolean","title":"Enabled"},"pending":{"type":"boolean","title":"Pending","default":false},"status":{"type":"integer","title":"Status","default":0},"source":{"type":"string","title":"Source"},"sourcePort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sourceport"},"destination":{"type":"string","title":"Destination"},"destinationPort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destinationport"},"packets":{"type":"integer","title":"Packets","default":0},"bytes":{"type":"integer","title":"Bytes","default":0},"lastHit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lasthit"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"srcGeoip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Srcgeoip"},"dstGeoip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dstgeoip"},"rateLimitPps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ratelimitpps"},"rateLimitBps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ratelimitbps"},"rateLimitPpsMatch":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ratelimitppsmatch"},"rateLimitBpsMatch":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ratelimitbpsmatch"},"hashLimitMatchers":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitmatchers"},"hashLimitSrcmask":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitsrcmask"},"hashLimitDstmask":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitdstmask"},"hashLimitPps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitpps"},"hashLimitBps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitbps"},"hashLimitPpsMatch":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitppsmatch"},"hashLimitBpsMatch":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitbpsmatch"},"hashLimitSize":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitsize"},"actionDynAddrList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actiondynaddrlist"},"actionDynAddrListEntryTtl":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Actiondynaddrlistentryttl"},"srcDynAddrList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Srcdynaddrlist"},"dstDynAddrList":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dstdynaddrlist"},"tcpHdrSizeMin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcphdrsizemin"},"tcpHdrSizeMax":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcphdrsizemax"},"packetSizeMin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Packetsizemin"},"packetSizeMax":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Packetsizemax"},"fragmentDetect":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fragmentdetect"},"tcpRr":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tcprr"},"dscpMin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dscpmin"},"dscpMax":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dscpmax"},"dscpNegation":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dscpnegation"},"dscpAction":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dscpaction"},"botDetect":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Botdetect"},"randMatch":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Randmatch"},"dpiPattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dpipattern"},"protoNegation":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Protonegation"},"icmpType":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Icmptype"},"icmpCode":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Icmpcode"},"ttlMin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttlmin"},"ttlMax":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttlmax"},"ttlNegation":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttlnegation"},"dnsFqdn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dnsfqdn"},"dnsType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dnstype"},"dnsPacket":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dnspacket"},"chain":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chain"},"actionJumpChainValue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Actionjumpchainvalue"},"actionTrafficAnalyzerPort":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Actiontrafficanalyzerport"},"hashLimitSrcportGroupSz":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitsrcportgroupsz"},"hashLimitDstportGroupSz":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitdstportgroupsz"},"hashLimitPktsizeGroupSz":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hashlimitpktsizegroupsz"}},"type":"object","required":["id","priority","action","protocol","enabled","source","destination"],"title":"RuleUIRow","description":"Compact rule data used by the UI table (columns + tag hints)."},"RuleUpdateRequest":{"properties":{"src_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Prefix","description":"IPv4, CIDR, '!<cidr>' or 'any'"},"dst_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Prefix","description":"IPv4, CIDR, '!<cidr>' or 'any'"},"src_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Address List","description":"Address list name or '!name'"},"dst_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Address List","description":"Address list name or '!name'"},"src_dyn_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Dyn Address List","description":"Dynamic address list matcher '[!]name' or 'none'"},"dst_dyn_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Dyn Address List","description":"Dynamic address list matcher '[!]name' or 'none'"},"src_geoip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src Geoip","description":"[!]CC[,CC...] or 'none' (mutually exclusive)"},"dst_geoip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst Geoip","description":"[!]CC[,CC...] or 'none' (mutually exclusive)"},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport","description":"Source port: int, 'min-max', '!min[-max]', or 'any'"},"dport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dport","description":"Dest port: int, 'min-max', '!min[-max]', or 'any'"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment","description":"Optional free-form comment or 'none'"},"tcp_flags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Flags","description":"TCP flags mask-comp, e.g. syn,ack-syn (proto must be tcp)"},"tcp_filter":{"anyOf":[{"type":"string","enum":["disable","loose","strict"]},{"type":"null"}],"title":"Tcp Filter","description":"loose | strict | disable (default)"},"tcp_filter_state":{"anyOf":[{"type":"string","enum":["new","invalid"]},{"type":"null"}],"title":"Tcp Filter State","description":"new | invalid (only when tcp_filter!=disable)"},"tcp_hdr_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Hdr Size","description":"TCP header size or range; 0 or 20-60 (proto tcp)"},"packet_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Packet Size","description":"Full packet size or range in bytes"},"fragment_detect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fragment Detect","description":"enable | disable IPv4 fragment matcher"},"tcp_rr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Rr","description":"enable | disable TCP round-robin matcher"},"dscp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dscp","description":"DSCP matcher [!]0-63, [!]min-max or disable"},"dscp_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dscp Value","description":"DSCP value 0-63 or disable for action=dscp-set"},"dyn_address_list":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dyn Address List","description":"Dynamic address-list name for add-*-to-dyn-address-list actions or 'none'"},"dyn_address_list_ttl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dyn Address List Ttl","description":"TTL for dyn-address-list entries (hh:mm:ss or 0)"},"rate_pps":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Pps","description":"Packets-per-second threshold, optionally prefixed by < or >"},"rate_bps":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Bps","description":"Bits-per-second threshold, optionally prefixed by < or >"},"rate_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Mode","description":"Legacy UI mode field; disable/normal are accepted as no-op."},"rate_block_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Block Time","description":"Legacy UI block timeout field; non-zero values are unsupported."},"hash_matchers":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash Matchers","description":"hashlimit matchers: srcip,srcport,dstip,dstport,proto,pktsize (csv)"},"hash_pps":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash Pps","description":"Packets-per-second hashlimit threshold, optionally < or >"},"hash_bps":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash Bps","description":"Bits-per-second hashlimit threshold, optionally < or >"},"hash_size":{"anyOf":[{"type":"integer","minimum":8.0},{"type":"null"}],"title":"Hash Size","description":"hashlimit table size; the dataplane caps it at RTE_HASH_ENTRIES_MAX"},"hash_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash Mode","description":"Legacy UI mode field; disable/normal are accepted as no-op."},"hash_block_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Block Time","description":"Legacy UI block timeout field; non-zero values are unsupported."},"hash_srcmask":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Srcmask","description":"hashlimit source mask (0-32)"},"hash_dstmask":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Dstmask","description":"hashlimit destination mask (0-32)"},"bot_detect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot Detect","description":"enable | disable bot-detect feature"},"rand":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rand","description":"Random match probability 0-99 (integer)"},"dpi_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dpi Pattern","description":"PCRE pattern or 'none' for DPI matching"},"ttl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ttl","description":"IP TTL matcher [!]1-255, [!]min-max or disable"},"icmp_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icmp Type","description":"ICMP type 0-254 or 'any' (proto must be icmp)"},"icmp_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icmp Code","description":"ICMP code 0-254 or 'any' (proto must be icmp)"},"dns_fqdn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Fqdn","description":"DNS FQDN matcher or 'none' (proto must be tcp or udp)"},"dns_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Type","description":"DNS record type mnemonic, 0-65535 or 'none'"},"dns_packet":{"anyOf":[{"type":"string","enum":["any","query","response"]},{"type":"null"}],"title":"Dns Packet","description":"DNS packet direction: any | query | response"},"hash_srcport_group_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Srcport Group Size","description":"Hash bucket group size for source port; power of two 1-32768"},"hash_dstport_group_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Dstport Group Size","description":"Hash bucket group size for destination port; power of two 1-32768"},"hash_pktsize_group_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hash Pktsize Group Size","description":"Hash bucket group size for packet size; power of two 1-32768"},"traffic_analyzer_port":{"anyOf":[{"type":"integer","maximum":65535.0,"minimum":0.0},{"type":"null"}],"title":"Traffic Analyzer Port","description":"Network port id for action='traffic-analyzer'"},"chain":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Chain","description":"Name of the rule processing chain; it is addressed by name","examples":["default","scrubbing"]},"chain_target":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Chain Target","description":"Destination chain name; required when action='chain-jump'","examples":["INSPECT","BLOCK"]},"action":{"anyOf":[{"type":"string","enum":["accept","drop","drop-rst","dscp-set","passthrough","add-src-to-dyn-address-list","add-dst-to-dyn-address-list","chain-jump","return","traffic-analyzer"]},{"type":"null"}],"title":"Action","description":"accept | drop | drop-rst | dscp-set | passthrough | add-src-to-dyn-address-list | add-dst-to-dyn-address-list | chain-jump | return | traffic-analyzer"},"status":{"anyOf":[{"type":"string","enum":["enable","disable"]},{"type":"null"}],"title":"Status","description":"enable | disable"},"proto":{"anyOf":[{"type":"string","enum":["any","tcp","udp","icmp","tcp,udp","hopopt","igmp","ggp","ipv4","st","!any","!tcp","!udp","!icmp","!tcp,udp","!hopopt","!igmp","!ggp","!ipv4","!st"]},{"type":"null"}],"title":"Proto","description":"any | tcp | udp | icmp | tcp,udp (negation with '!')"}},"additionalProperties":false,"type":"object","title":"RuleUpdateRequest","description":"Represents a partial update to an existing rule."},"RuleUpdateResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"set_argv":{"items":{"type":"string"},"type":"array","title":"Set Argv"},"set_returncode":{"type":"integer","title":"Set Returncode"},"set_stdout":{"type":"string","title":"Set Stdout"},"set_stderr":{"type":"string","title":"Set Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","set_argv","set_returncode","set_stdout","set_stderr"],"title":"RuleUpdateResult","description":"Result of updating a rule."},"SystemCommandResult":{"properties":{"commandArgv":{"items":{"type":"string"},"type":"array","title":"Commandargv"},"commandReturncode":{"type":"integer","title":"Commandreturncode"},"commandStdout":{"type":"string","title":"Commandstdout"},"commandStderr":{"type":"string","title":"Commandstderr"},"success":{"type":"boolean","title":"Success","description":"Se o comando terminou sem erro."}},"type":"object","required":["commandArgv","commandReturncode","commandStdout","commandStderr","success"],"title":"SystemCommandResult","description":"Result payload for a system operation that returns text."},"SystemInfo":{"properties":{"version":{"type":"string","title":"Version","description":"Application/API version string"},"build":{"type":"string","title":"Build","description":"Build identifier (e.g., commit count)"},"status":{"type":"string","title":"Status","description":"Update status (e.g., Atualizado)"}},"type":"object","required":["version","build","status"],"title":"SystemInfo","description":"General system build/version info."},"SystemLogsResult":{"properties":{"commandArgv":{"items":{"type":"string"},"type":"array","title":"Commandargv"},"commandReturncode":{"type":"integer","title":"Commandreturncode"},"commandStderr":{"type":"string","title":"Commandstderr"},"items":{"items":{"type":"string"},"type":"array","title":"Items","description":"Linhas mais recentes."},"total":{"type":"integer","title":"Total","description":"Total de linhas devolvidas."},"truncated":{"type":"boolean","title":"Truncated","description":"Se linhas mais antigas foram descartadas pelo limite."},"success":{"type":"boolean","title":"Success","description":"Se o comando terminou sem erro."}},"type":"object","required":["commandArgv","commandReturncode","commandStderr","total","truncated","success"],"title":"SystemLogsResult","description":"Journal lines printed by the system logs endpoint."},"SystemMetricsDTO":{"properties":{"cpu":{"$ref":"#/components/schemas/CPUInfo"},"disk":{"$ref":"#/components/schemas/DiskInfo"},"ram":{"$ref":"#/components/schemas/RAMInfo"},"uptime":{"$ref":"#/components/schemas/UptimeInfo"},"host_uptime":{"$ref":"#/components/schemas/UptimeInfo","description":"Uptime da máquina que hospeda a API","default":{"days":0,"hours":0,"minutes":0,"seconds":0,"available":false}},"system":{"$ref":"#/components/schemas/SystemInfo"},"degraded":{"type":"boolean","title":"Degraded","description":"Indica se algum dado foi degradado por erro de coleta.","default":false}},"type":"object","required":["cpu","disk","ram","uptime","system"],"title":"SystemMetricsDTO","description":"Aggregated metrics payload for system dashboard."},"SystemThrottlingConfigResult":{"properties":{"argv":{"items":{"type":"string"},"type":"array","title":"Argv"},"returncode":{"type":"integer","title":"Returncode"},"stdout":{"type":"string","title":"Stdout"},"stderr":{"type":"string","title":"Stderr"},"config_text":{"type":"string","title":"Config Text","description":"Comandos que reproduzem os parâmetros atuais."},"success":{"type":"boolean","title":"Success","description":"True when the operation succeeded."}},"type":"object","required":["argv","returncode","stdout","stderr","config_text","success"],"title":"SystemThrottlingConfigResult","description":"Result of system throttling print config, the replayable command dump."},"SystemThrottlingGetResult":{"properties":{"argv":{"items":{"type":"string"},"type":"array","title":"Argv"},"returncode":{"type":"integer","title":"Returncode"},"stdout":{"type":"string","title":"Stdout"},"stderr":{"type":"string","title":"Stderr"},"pending":{"type":"boolean","title":"Pending","default":false},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"throttling_percent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Throttling Percent"},"raw_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Status"},"success":{"type":"boolean","title":"Success","description":"True when the operation succeeded and the output was parsed."}},"type":"object","required":["argv","returncode","stdout","stderr","success"],"title":"SystemThrottlingGetResult","description":"Result of system throttling status."},"SystemThrottlingSetRequest":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"enable | disable (accepts boolean equivalents)."},"commit":{"type":"boolean","title":"Commit","description":"false deixa a mudança pendente até o commit.","default":true}},"additionalProperties":false,"type":"object","required":["status"],"title":"SystemThrottlingSetRequest","description":"Payload to set system throttling."},"SystemThrottlingSetResult":{"properties":{"commit_argv":{"items":{"type":"string"},"type":"array","title":"Commit Argv"},"commit_returncode":{"type":"integer","title":"Commit Returncode"},"commit_stdout":{"type":"string","title":"Commit Stdout"},"commit_stderr":{"type":"string","title":"Commit Stderr"},"success":{"type":"boolean","title":"Success","description":"True when the command step and commit both returned 0."},"set_argv":{"items":{"type":"string"},"type":"array","title":"Set Argv"},"set_returncode":{"type":"integer","title":"Set Returncode"},"set_stdout":{"type":"string","title":"Set Stdout"},"set_stderr":{"type":"string","title":"Set Stderr"}},"type":"object","required":["commit_argv","commit_returncode","commit_stdout","commit_stderr","success","set_argv","set_returncode","set_stdout","set_stderr"],"title":"SystemThrottlingSetResult","description":"Result of system throttling set and commit."},"TcpFlagsSummary":{"properties":{"mask":{"type":"integer","title":"Mask"},"comp":{"type":"integer","title":"Comp"}},"type":"object","required":["mask","comp"],"title":"TcpFlagsSummary","description":"Summarizes TCP flag comparison values."},"TrafficAnalyzerCaptureRequest":{"properties":{"port":{"type":"integer","minimum":0.0,"title":"Port","description":"Id da porta de rede da tabela port_config (obrigatório)."},"duration":{"type":"integer","maximum":300.0,"minimum":1.0,"title":"Duration","description":"Tempo de captura em segundos, de 1 a 300.","default":15},"packets":{"type":"integer","minimum":0.0,"title":"Packets","description":"Limite de pacotes capturados; 0 significa sem limite.","default":0},"src":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Src","description":"Filtro BPF 'src net <cidr>' de origem."},"dst":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dst","description":"Filtro BPF 'dst net <cidr>' de destino."},"format":{"type":"string","enum":["text","json","proto"],"title":"Format","description":"Formato do relatório: text, json (--json) ou proto (--proto).","default":"text"}},"type":"object","required":["port"],"title":"TrafficAnalyzerCaptureRequest","description":"Parameters accepted by 'tools traffic-analyzer capture'."},"TrafficAnalyzerCommandResult":{"properties":{"commandArgv":{"items":{"type":"string"},"type":"array","title":"Commandargv"},"commandReturncode":{"type":"integer","title":"Commandreturncode"},"commandStdout":{"type":"string","title":"Commandstdout"},"commandStderr":{"type":"string","title":"Commandstderr"},"success":{"type":"boolean","title":"Success","description":"Se o comando terminou sem erro."},"timedOut":{"type":"boolean","title":"Timedout","description":"Se o comando foi interrompido pelo timeout.","default":false}},"type":"object","required":["commandArgv","commandReturncode","commandStdout","commandStderr","success"],"title":"TrafficAnalyzerCommandResult","description":"Result payload for a stored analysis report operation."},"TrafficMetricsMeta":{"properties":{"start_time":{"type":"string","format":"date-time","title":"Start Time","description":"Query start time (UTC)"},"end_time":{"type":"string","format":"date-time","title":"End Time","description":"Query end time (UTC)"},"granularity":{"type":"string","title":"Granularity","description":"Bucket size (1s,5s,10s,30s,1m,5m,15m,30m,1h,6h,24h)"},"granularity_seconds":{"type":"integer","title":"Granularity Seconds","description":"Bucket size in seconds"},"aggregation":{"type":"string","title":"Aggregation","description":"Aggregation over each bucket (avg|min|max|sum)"},"points":{"type":"integer","title":"Points","description":"Number of buckets returned"}},"type":"object","required":["start_time","end_time","granularity","granularity_seconds","aggregation","points"],"title":"TrafficMetricsMeta","description":"Traffic metrics query metadata."},"TrafficMetricsPointView":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Bucket timestamp (UTC)"},"rx_pps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rx Pps","description":"Ingress packets per second"},"tx_pps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tx Pps","description":"Egress packets per second"},"delta_pps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta Pps","description":"rx_pps - tx_pps for the bucket"},"rx_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rx Bps","description":"Ingress bits per second"},"tx_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tx Bps","description":"Egress bits per second"},"delta_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta Bps","description":"rx_bps - tx_bps for the bucket"}},"type":"object","required":["timestamp"],"title":"TrafficMetricsPointView","description":"Traffic bucket exposing only selected metric fields."},"TrafficMetricsResponseView":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TrafficMetricsPointView"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/TrafficMetricsMeta"},"metrics":{"type":"string","enum":["pps","bps","both"],"title":"Metrics","description":"Which metric group is present in items"}},"type":"object","required":["items","meta","metrics"],"title":"TrafficMetricsResponseView","description":"Traffic metrics timeline payload with selectable groups."},"UptimeInfo":{"properties":{"days":{"type":"integer","title":"Days","description":"Days since last boot"},"hours":{"type":"integer","title":"Hours","description":"Hours since last boot (remainder)"},"minutes":{"type":"integer","title":"Minutes","description":"Minutes since last boot (remainder)"},"seconds":{"type":"integer","title":"Seconds","description":"Seconds since last boot (remainder)"},"available":{"type":"boolean","title":"Available","description":"False quando a origem do uptime não pôde ser lida","default":true}},"type":"object","required":["days","hours","minutes","seconds"],"title":"UptimeInfo","description":"Uptime metrics for server."}},"securitySchemes":{"SessionCookieAuth":{"type":"apiKey","in":"cookie","name":"__Host-asgard-session","description":"Sessão HttpOnly do painel, enviada automaticamente pelo browser. Use este esquema quando a chamada partir de uma sessão de usuário já autenticada."},"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Chave de integração máquina-a-máquina, enviada no header X-API-Key. Cada chave carrega um conjunto de permissões: uma chamada fora desse conjunto responde 403 com um código estável no campo error.code."}}},"tags":[{"name":"Status","description":"Verificação de saúde e disponibilidade do serviço."},{"name":"Rules","description":"Regras de tráfego: criação, consulta, alteração e remoção. Alterações ficam pendentes e só passam a valer depois de confirmadas em Commit."},{"name":"Chains","description":"Cadeias que agrupam regras e definem a ordem de avaliação do tráfego."},{"name":"Hardware Rules","description":"Regras aplicadas na própria interface de rede, avaliadas antes das regras de tráfego."},{"name":"Address Lists","description":"Listas de prefixos reutilizáveis pelas regras. Criação e remoção são assíncronas: devolvem um identificador de operação que pode ser acompanhado em operations."},{"name":"Dyn Address Lists","description":"Listas de prefixos preenchidas dinamicamente durante a operação."},{"name":"Commit","description":"Confirmação das alterações pendentes. Enquanto não houver commit, mudanças em regras, cadeias e listas não entram em vigor. Permite também descartar as alterações pendentes."},{"name":"Interfaces","description":"Interfaces de rede disponíveis e o estado de cada uma."},{"name":"Bot detect","description":"Detecção de tráfego automatizado e limiares que a acionam."},{"name":"GeoIP","description":"Consulta de origem geográfica e sistema autônomo de prefixos."},{"name":"Packet Capture","description":"Captura de pacotes para diagnóstico, gerando um arquivo .pcap para download."},{"name":"System","description":"Estado do serviço: versão, capacidades, nome do equipamento e logs."},{"name":"Configuration","description":"Snapshots de configuração: salvar, listar, comparar, exportar, recarregar e apagar. Operações destrutivas exigem confirmação explícita no corpo."},{"name":"Traffic & Metrics","description":"Métricas do equipamento e séries de tráfego para monitoração."},{"name":"Rate Limiting","description":"Limites de taxa aplicados ao tráfego e a configuração vigente."},{"name":"Prefix Sync","description":"Sincronização periódica das listas de prefixos com a fonte externa: consulta de estado e disparo manual."}],"security":[{"SessionCookieAuth":[]},{"ApiKeyAuth":[]}],"x-tagGroups":[{"name":"Filtragem de tráfego","tags":["Rules","Chains","Hardware Rules","Address Lists","Dyn Address Lists"]},{"name":"Aplicação das mudanças","tags":["Commit"]},{"name":"Diagnóstico","tags":["Packet Capture","Traffic & Metrics","GeoIP","Bot detect","Interfaces"]},{"name":"Serviço","tags":["Status","System","Configuration","Rate Limiting","Prefix Sync"]}]}