Get public list of enabled countries
GET/company/country/
Retorna uma lista paginada de países habilitados no sistema. Este endpoint fornece os países disponíveis para uso em formulários, filtros e seleções geográficas.
Objetivo
Fornecer às aplicações frontend e integrações externas uma lista atualizada de países suportados pela plataforma para o registro de empresas, criação de endereços e operações logísticas.
Casos de uso
- Preencher seletores de país em formulários de registro
- Mostrar regiões de serviço disponíveis aos usuários
- Filtrar leilões ou entregas por área geográfica
- Validar códigos de país fornecidos pelos usuários
Autenticação
Este é um endpoint PÚBLICO. Não requer autenticação.
Notas importantes
- Apenas retorna países com
enabled: true - Países com
deleted: trueouenabled: falsesão excluídos - Os campos
_id,deleted,enabled,createdAt,updatedAt,__vsão filtrados da resposta - Apenas o campo
codeé garantido em todos os registros - Os campos opcionais
nameeisopodem estar presentes em alguns países - Paginação implementada com mongoose-paginate-v2
- O tamanho de página padrão provém de
process.env.ITEMS_PAGE(normalmente 25)
Exemplo de solicitação:
# Obter a primeira página com o limite padrão (25)
GET /company/country/
# Obter a segunda página com 10 resultados
GET /company/country/?page=2&limit=10
# Obter todos os países disponíveis (se forem menos de 50)
GET /company/country/?limit=50
Exemplo de resposta:
\{
status: 200,
data: \{
docs: [
\{code: es\},
\{code: pt\},
\{code: fr\},
\{code: de, name: Alemanha, iso: DEU\}
],
totalDocs: 22,
limit: 25,
<Heading
id={"request"}
as={"h2"}
className={"openapi-tabs__heading"}
children={"Request"}
>
</Heading>
<ParamsDetails
parameters={[{"name":"page","in":"query","description":"Número da página a recuperar (indexado a partir de 1).\n\n- Valor mínimo: 1\n- Padrão: 1\n- Valores inválidos (< 1, NaN) podem ser tratados pelo mongoose-paginate","required":false,"schema":{"type":"integer","minimum":1,"default":1,"example":1}},{"name":"limit","in":"query","description":"Número máximo de resultados por página.\n\n- Mínimo: 1\n- Padrão: 25 (de process.env.ITEMS_PAGE)\n- Nota: Atualmente o backend não aplica um limite máximo","required":false,"schema":{"type":"integer","minimum":1,"default":25,"example":10}}]}
>
</ParamsDetails>
<RequestSchema
title={"Body"}
body={undefined}
>
</RequestSchema>
<StatusCodes
id={undefined}
label={undefined}
responses={{"200":{"description":"Operação bem-sucedida. Retorna a lista paginada de países habilitados.\n\nA resposta inclui os metadados completos de paginação do mongoose-paginate-v2.","content":{"application/json":{"schema":{"type":"object","required":["status","data"],"properties":{"status":{"type":"integer","description":"Código de status HTTP","example":200},"data":{"type":"object","required":["docs","totalDocs","limit","page","totalPages","pagingCounter","hasPrevPage","hasNextPage","prevPage","nextPage"],"description":"Dados de paginação gerados pelo plugin mongoose-paginate-v2.\n\nEste objeto contém os resultados paginados e metadados sobre\no estado da paginação.","properties":{"docs":{"type":"array","description":"Array de documentos de países para a página atual","items":{"type":"object","required":["code"],"properties":{"code":{"type":"string","minLength":2,"maxLength":2,"pattern":"^[a-z]{2}$","description":"Código de país ISO de 2 letras (minúsculas).\nEste é o único campo garantido nas respostas públicas.","example":"es"},"name":{"type":"string","description":"Nome do país em inglês.\n**OPCIONAL**: Nem todos os países têm este campo definido.","example":"Spain"},"iso":{"type":"string","minLength":3,"maxLength":3,"pattern":"^[A-Z]{3}$","description":"Código de país ISO de 3 letras (ISO 3166-1 alfa-3).\n**OPCIONAL**: Nem todos os países têm este campo definido.","example":"ESP"}},"description":"Versão pública do modelo Country retornada por GET /company/country/.\n\nEste esquema inclui apenas os campos visíveis no endpoint público.\nCampos internos (`_id`, `deleted`, `enabled`, `createdAt`, `updatedAt`, `__v`)\nsão filtrados pelo controlador usando select:\n`-_id -deleted -enabled -createdAt -updatedAt -__v`\n\n**Importante**: Apenas `code` tem presença garantida.\nOs campos `name` e `iso` são opcionais e podem não existir em todos os registros.","example":{"code":"es","name":"Spain","iso":"ESP"},"title":"CountryPublic"}},"totalDocs":{"type":"integer","description":"Total de documentos correspondentes ao filtro","minimum":0,"example":22},"limit":{"type":"integer","description":"Número máximo de resultados por página","minimum":1,"example":25},"page":{"type":"integer","description":"Número da página atual (indexado a partir de 1)","minimum":1,"example":1},"totalPages":{"type":"integer","description":"Número total de páginas disponíveis","minimum":1,"example":1},"pagingCounter":{"type":"integer","description":"O índice inicial do primeiro documento na página atual.\nÚtil para exibir Mostrando X-Y de Z resultados.","minimum":1,"example":1},"hasPrevPage":{"type":"boolean","description":"Indica se existe uma página anterior","example":false},"hasNextPage":{"type":"boolean","description":"Indica se existe uma próxima página","example":false},"prevPage":{"type":"integer","nullable":true,"description":"Número da página anterior.\n`null` se não houver página anterior.","example":null},"nextPage":{"type":"integer","nullable":true,"description":"Número da página da próxima página.\n`null` se não houver próxima página.","example":null}}}},"description":"Resposta paginada padrão para endpoints de listagem de países.\n\nEsta estrutura é usada tanto pelos endpoints públicos quanto pelos administrativos:\n- GET /company/country/ (público, apenas habilitados)\n- GET /company/country/all (admin, inclui desabilitados)\n\nA resposta encapsula os dados de paginação em um envelope de API padrão:\n`{status: number, data: PaginationObject}`","example":{"status":200,"data":{"docs":[{"code":"es"},{"code":"pt"},{"code":"fr"},{"code":"de","name":"Germany","iso":"DEU"}],"totalDocs":22,"limit":25,"page":1,"totalPages":1,"pagingCounter":1,"hasPrevPage":false,"hasNextPage":false,"prevPage":null,"nextPage":null}},"title":"CountriesResponse"},"example":{"status":200,"data":{"docs":[{"code":"es"},{"code":"pt"},{"code":"fr"},{"code":"de","name":"Germany","iso":"DEU"},{"code":"it","name":"Italy","iso":"ITA"}],"totalDocs":22,"limit":25,"page":1,"totalPages":1,"pagingCounter":1,"hasPrevPage":false,"hasNextPage":false,"prevPage":null,"nextPage":null}}}},"headers":{}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","required":["status","message"],"properties":{"status":{"type":"integer","description":"Código de status HTTP","minimum":400,"maximum":599,"example":400},"message":{"type":"string","description":"Código de erro do sistema.\n\nCódigos de erro comuns (consulte listado_errores_http.txt para a lista completa):\n- NO_TOKEN (401): Token JWT não fornecido\n- TOKEN_NOT_VALID (401): Token JWT é inválido ou expirado\n- NO_ADMIN_ROLE (401): Usuário não possui privilégios de administrador\n- INVALID_PARAMETERS (400): Parâmetros da requisição são inválidos\n- NOT_FOUND (404): Recurso solicitado não encontrado\n- ALREADY_EXIST (401): Recurso com o mesmo identificador já existe\n- UTC_VALIDATION_FAILED (400): Falha na validação do timestamp UTC\n- INTERNAL_ERROR (500): Ocorreu um erro inesperado no servidor\n\nA mensagem é resolvida por `handlerError.getErrorMessage(error)`.","example":"INVALID_PARAMETERS"}},"description":"Formato padrão de resposta de erro utilizado em todos os endpoints da API.\n\nTodos os erros seguem o padrão `{status: number, message: string}`.\nO código de status é repetido tanto na resposta HTTP quanto no corpo da resposta.\n\nAs mensagens de erro são constantes definidas na base de código e devem ser\ntratadas no lado do cliente com mensagens apropriadas para o usuário final.","example":{"status":400,"message":"INVALID_PARAMETERS"},"title":"ErrorResponse"},"example":{"status":500,"message":"INTERNAL_ERROR"}}}}}}
>
</StatusCodes>