# Aglomerações Comerciais

> A API de aglomerações comerciais mapeia cerca de 11 mil regiões do Brasil com alta concentração de estabelecimentos comerciais, classificadas por porte, vocação e perfil de renda. Cada aglomeração é uma poligonal contínua de tecido comercial denso, gerada algoritmicamente a partir do CNPJ da Receita Federal.

**Base**: `https://api.prismadata.io/v1`

**Autenticação**: header `X-Apikey` (ou query `api_key`). Detalhes em [Autenticação](autenticacao.md).

**Formato de resposta**: JSON plano com campos `prismadata__<serviço>__<campo>`; em lote, dicionário indexado pelas chaves enviadas. Detalhes em [Formato de Resposta](guias/formato-de-resposta.md).

## Endpoints

### `GET /location/commercial_cluster`

Retorna aglomeracao(oes) e trecho mais proximo de um ponto (lat, lng).

**Exemplo curl**:

```bash
curl -X GET "https://api.prismadata.io/v1/location/commercial_cluster?lat=-19.9323&lng=-43.9351" \
  -H "X-Apikey: SEU_TOKEN"
# Params opcionais: top_n=1, raio_km=5.0, incluir_trecho_mais_proximo=True, incluir_trechos_da_aglomeracao=False, incluir_geometria=False, wkt=False, vocacao=['string'], porte_minimo=string, faixa_renda=['string'], versao_dados=string
```

**Parâmetros**:

| Nome | Local | Tipo | Obrigatório | Descrição |
|------|-------|------|-------------|-----------|
| `lat` | query | number | sim |  |
| `lng` | query | number | sim |  |
| `top_n` | query | integer | não |  |
| `raio_km` | query | number | não |  |
| `incluir_trecho_mais_proximo` | query | boolean | não |  |
| `incluir_trechos_da_aglomeracao` | query | boolean | não |  |
| `incluir_geometria` | query | boolean | não | Retorna o poligono da aglomeracao. Requer role 'admin' ou 'viewer:commercial_cluster' no JWT — caso contrario retorna 403 GEOMETRIA_NAO_AUTORIZADA. |
| `wkt` | query | boolean | não | Quando incluir_geometria=true, retorna a geometria em WKT (string 'POLYGON((...))') em vez de GeoJSON. Ignorado se incluir_geometria=false. |
| `vocacao` | query | array[string] \| null | não |  |
| `porte_minimo` | query | string \| null | não |  |
| `faixa_renda` | query | array[string] \| null | não |  |
| `versao_dados` | query | string \| null | não |  |

**Response 200** (`application/json`):

> Resposta de sucesso

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `prismadata__commercial_cluster__latitude` | number | não |  |
| `prismadata__commercial_cluster__longitude` | number | não |  |
| `prismadata__commercial_cluster__dentro_de_aglomeracao` | boolean | não |  |
| `prismadata__commercial_cluster__aglomeracao_hash_contendo` | string \| null | não |  |
| `prismadata__commercial_cluster__aglomeracao_hash` | string | não | Identificador global da aglomeracao |
| `prismadata__commercial_cluster__nome_aglomeracao` | string | não |  |
| `prismadata__commercial_cluster__municipio` | string | não |  |
| `prismadata__commercial_cluster__uf` | string | não | UF de 2 caracteres |
| `prismadata__commercial_cluster__qtd_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__score_ponderado` | number | não |  |
| `prismadata__commercial_cluster__area_ha` | number | não | Area em hectares |
| `prismadata__commercial_cluster__densidade_pdvs_km2` | number | não |  |
| `prismadata__commercial_cluster__centroide_lat` | number | não |  |
| `prismadata__commercial_cluster__centroide_lng` | number | não |  |
| `prismadata__commercial_cluster__porte` | string | não |  |
| `prismadata__commercial_cluster__concentracao` | string | não |  |
| `prismadata__commercial_cluster__faixa_renda` | string | não |  |
| `prismadata__commercial_cluster__vocacao` | string | não |  |
| `prismadata__commercial_cluster__nome_segmento` | string | não |  |
| `prismadata__commercial_cluster__pct_alimentacao` | number | não |  |
| `prismadata__commercial_cluster__pct_moda` | number | não |  |
| `prismadata__commercial_cluster__pct_supermercado` | number | não |  |
| `prismadata__commercial_cluster__pct_saude` | number | não |  |
| `prismadata__commercial_cluster__pct_construcao` | number | não |  |
| `prismadata__commercial_cluster__pct_eletronicos` | number | não |  |
| `prismadata__commercial_cluster__pct_moveis` | number | não |  |
| `prismadata__commercial_cluster__pct_combustiveis` | number | não |  |
| `prismadata__commercial_cluster__pct_automotivo` | number | não |  |
| `prismadata__commercial_cluster__pct_entretenimento` | number | não |  |
| `prismadata__commercial_cluster__pct_alojamento` | number | não |  |
| `prismadata__commercial_cluster__pct_varejo_geral` | number | não |  |
| `prismadata__commercial_cluster__renda_mediana` | number | não |  |
| `prismadata__commercial_cluster__percentil_br_renda` | number | não |  |
| `prismadata__commercial_cluster__rank_nacional_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__rank_nacional_score` | integer | não |  |
| `prismadata__commercial_cluster__rank_nacional_densidade` | integer | não |  |
| `prismadata__commercial_cluster__rank_uf_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__rank_uf_score` | integer | não |  |
| `prismadata__commercial_cluster__rank_uf_densidade` | integer | não |  |
| `prismadata__commercial_cluster__rank_municipal_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__rank_municipal_score` | integer | não |  |
| `prismadata__commercial_cluster__rank_municipal_densidade` | integer | não |  |
| `prismadata__commercial_cluster__distancia_m` | number \| null | não | Distancia ao ponto consultado (m). null nos endpoints sem ponto de referencia (/street, /{hash}, /search, /ranking). |
| `prismadata__commercial_cluster__distancia_borda_m` | number \| null | não | Distancia a borda do poligono (m). null nos endpoints sem ponto de referencia (/street, /{hash}, /search, /ranking). |
| `prismadata__commercial_cluster__contido` | boolean \| null | não | Se o ponto consultado esta dentro da aglomeracao. null nos endpoints sem ponto de referencia. |
| `prismadata__commercial_cluster__geometria` | object \| string | não | Poligono da aglomeracao. Opt-in via incluir_geometria=true. Requer role 'admin' ou 'viewer:commercial_cluster' no JWT — caso contrario retorna 403 GEOMETRIA_NAO_AUTORIZADA. Formato padrao GeoJSON (objeto); com wkt=true vira string WKT. Sem simplificacao, SRID 4326. Nao suportado em /batch. |
| `prismadata__commercial_cluster__trecho_hash` | string | não |  |
| `prismadata__commercial_cluster__trecho_aglomeracao_hash` | string | não |  |
| `prismadata__commercial_cluster__trecho_logradouro` | string | não |  |
| `prismadata__commercial_cluster__trecho_tipo_via` | string | não |  |
| `prismadata__commercial_cluster__trecho_extensao_m` | number | não |  |
| `prismadata__commercial_cluster__trecho_qtd_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__trecho_score_ponderado` | number | não |  |
| `prismadata__commercial_cluster__trecho_densidade_linear_km` | number | não |  |
| `prismadata__commercial_cluster__trecho_num_inicial` | integer \| null | não |  |
| `prismadata__commercial_cluster__trecho_num_final` | integer \| null | não |  |
| `prismadata__commercial_cluster__trecho_n_esquinas` | integer | não |  |
| `prismadata__commercial_cluster__trecho_buffer_m` | number | não |  |
| `prismadata__commercial_cluster__trecho_rank_nacional_score` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_nacional_densidade` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_uf_score` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_uf_densidade` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_municipal_score` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_municipal_densidade` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_aglomeracao_score` | integer | não |  |
| `prismadata__commercial_cluster__trecho_distancia_m` | number | não |  |

**Outros códigos**: 401, 403, 422, 429

---

### `POST /location/commercial_cluster/batch`

Query para ate 1024 pontos em uma unica requisicao.

**Exemplo curl**:

```bash
curl -X POST "https://api.prismadata.io/v1/location/commercial_cluster/batch" \
  -H "X-Apikey: SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
         "pontos": [
           {
             "id_externo": "string",
             "latitude": -19.9323,
             "longitude": -43.9351
           }
         ],
         "top_n_por_ponto": 1,
         "raio_km": 2.0,
         "incluir_trecho_mais_proximo": true,
         "incluir_geometria": false,
         "versao_dados": "string"
       }'
```

**Request body** (`application/json`):

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `pontos` | array[object] | sim |  |
| `top_n_por_ponto` | integer | não |  |
| `raio_km` | number | não |  |
| `incluir_trecho_mais_proximo` | boolean | não |  |
| `incluir_geometria` | boolean | não |  |
| `versao_dados` | string \| null | não |  |

**Response 200** (`application/json`):

> Resposta de sucesso

Dicionário `{string: object}`.
Resposta batch. Chaves externas sao os id_externo informados na requisicao; cada valor segue o mesmo schema de GET /commercial_cluster.

**Outros códigos**: 401, 403, 422, 429

---

### `GET /location/commercial_cluster/{aglomeracao_hash}`

Retorna todos os atributos de uma aglomeracao e seus trechos de rua.

**Exemplo curl**:

```bash
curl -X GET "https://api.prismadata.io/v1/location/commercial_cluster/string" \
  -H "X-Apikey: SEU_TOKEN"
# Params opcionais: incluir_geometria=False, wkt=False, incluir_trechos=True, versao_dados=string
```

**Parâmetros**:

| Nome | Local | Tipo | Obrigatório | Descrição |
|------|-------|------|-------------|-----------|
| `aglomeracao_hash` | path | string | sim |  |
| `incluir_geometria` | query | boolean | não | Retorna o poligono da aglomeracao. Requer role 'admin' ou 'viewer:commercial_cluster' no JWT — caso contrario retorna 403 GEOMETRIA_NAO_AUTORIZADA. |
| `wkt` | query | boolean | não | Quando incluir_geometria=true, retorna a geometria em WKT em vez de GeoJSON. Ignorado se incluir_geometria=false. |
| `incluir_trechos` | query | boolean | não |  |
| `versao_dados` | query | string \| null | não |  |

**Response 200** (`application/json`):

> Resposta de sucesso

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `prismadata__commercial_cluster__aglomeracao_hash` | string | não | Identificador global da aglomeracao |
| `prismadata__commercial_cluster__nome_aglomeracao` | string | não |  |
| `prismadata__commercial_cluster__municipio` | string | não |  |
| `prismadata__commercial_cluster__uf` | string | não | UF de 2 caracteres |
| `prismadata__commercial_cluster__qtd_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__score_ponderado` | number | não |  |
| `prismadata__commercial_cluster__area_ha` | number | não | Area em hectares |
| `prismadata__commercial_cluster__densidade_pdvs_km2` | number | não |  |
| `prismadata__commercial_cluster__centroide_lat` | number | não |  |
| `prismadata__commercial_cluster__centroide_lng` | number | não |  |
| `prismadata__commercial_cluster__porte` | string | não |  |
| `prismadata__commercial_cluster__concentracao` | string | não |  |
| `prismadata__commercial_cluster__faixa_renda` | string | não |  |
| `prismadata__commercial_cluster__vocacao` | string | não |  |
| `prismadata__commercial_cluster__nome_segmento` | string | não |  |
| `prismadata__commercial_cluster__pct_alimentacao` | number | não |  |
| `prismadata__commercial_cluster__pct_moda` | number | não |  |
| `prismadata__commercial_cluster__pct_supermercado` | number | não |  |
| `prismadata__commercial_cluster__pct_saude` | number | não |  |
| `prismadata__commercial_cluster__pct_construcao` | number | não |  |
| `prismadata__commercial_cluster__pct_eletronicos` | number | não |  |
| `prismadata__commercial_cluster__pct_moveis` | number | não |  |
| `prismadata__commercial_cluster__pct_combustiveis` | number | não |  |
| `prismadata__commercial_cluster__pct_automotivo` | number | não |  |
| `prismadata__commercial_cluster__pct_entretenimento` | number | não |  |
| `prismadata__commercial_cluster__pct_alojamento` | number | não |  |
| `prismadata__commercial_cluster__pct_varejo_geral` | number | não |  |
| `prismadata__commercial_cluster__renda_mediana` | number | não |  |
| `prismadata__commercial_cluster__percentil_br_renda` | number | não |  |
| `prismadata__commercial_cluster__rank_nacional_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__rank_nacional_score` | integer | não |  |
| `prismadata__commercial_cluster__rank_nacional_densidade` | integer | não |  |
| `prismadata__commercial_cluster__rank_uf_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__rank_uf_score` | integer | não |  |
| `prismadata__commercial_cluster__rank_uf_densidade` | integer | não |  |
| `prismadata__commercial_cluster__rank_municipal_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__rank_municipal_score` | integer | não |  |
| `prismadata__commercial_cluster__rank_municipal_densidade` | integer | não |  |
| `prismadata__commercial_cluster__distancia_m` | number \| null | não | Distancia ao ponto consultado (m). null nos endpoints sem ponto de referencia (/street, /{hash}, /search, /ranking). |
| `prismadata__commercial_cluster__distancia_borda_m` | number \| null | não | Distancia a borda do poligono (m). null nos endpoints sem ponto de referencia (/street, /{hash}, /search, /ranking). |
| `prismadata__commercial_cluster__contido` | boolean \| null | não | Se o ponto consultado esta dentro da aglomeracao. null nos endpoints sem ponto de referencia. |
| `prismadata__commercial_cluster__geometria` | object \| string | não | Poligono da aglomeracao. Opt-in via incluir_geometria=true. Requer role 'admin' ou 'viewer:commercial_cluster' no JWT — caso contrario retorna 403 GEOMETRIA_NAO_AUTORIZADA. Formato padrao GeoJSON (objeto); com wkt=true vira string WKT. Sem simplificacao, SRID 4326. Nao suportado em /batch. |

**Outros códigos**: 401, 403, 422, 429

---

### `GET /location/commercial_cluster/street`

Retorna trecho(s) de rua mais proximo(s) de um ponto.

**Exemplo curl**:

```bash
curl -X GET "https://api.prismadata.io/v1/location/commercial_cluster/street?lat=-19.9323&lng=-43.9351" \
  -H "X-Apikey: SEU_TOKEN"
# Params opcionais: top_n=1, raio_m=500, incluir_aglomeracao=True, versao_dados=string
```

**Parâmetros**:

| Nome | Local | Tipo | Obrigatório | Descrição |
|------|-------|------|-------------|-----------|
| `lat` | query | number | sim |  |
| `lng` | query | number | sim |  |
| `top_n` | query | integer | não |  |
| `raio_m` | query | number | não |  |
| `incluir_aglomeracao` | query | boolean | não |  |
| `versao_dados` | query | string \| null | não |  |

**Response 200** (`application/json`):

> Resposta de sucesso

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `prismadata__commercial_cluster__trecho_hash` | string | não |  |
| `prismadata__commercial_cluster__trecho_aglomeracao_hash` | string | não |  |
| `prismadata__commercial_cluster__trecho_logradouro` | string | não |  |
| `prismadata__commercial_cluster__trecho_tipo_via` | string | não |  |
| `prismadata__commercial_cluster__trecho_extensao_m` | number | não |  |
| `prismadata__commercial_cluster__trecho_qtd_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__trecho_score_ponderado` | number | não |  |
| `prismadata__commercial_cluster__trecho_densidade_linear_km` | number | não |  |
| `prismadata__commercial_cluster__trecho_num_inicial` | integer \| null | não |  |
| `prismadata__commercial_cluster__trecho_num_final` | integer \| null | não |  |
| `prismadata__commercial_cluster__trecho_n_esquinas` | integer | não |  |
| `prismadata__commercial_cluster__trecho_buffer_m` | number | não |  |
| `prismadata__commercial_cluster__trecho_rank_nacional_score` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_nacional_densidade` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_uf_score` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_uf_densidade` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_municipal_score` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_municipal_densidade` | integer | não |  |
| `prismadata__commercial_cluster__trecho_rank_aglomeracao_score` | integer | não |  |
| `prismadata__commercial_cluster__trecho_distancia_m` | number | não |  |
| `prismadata__commercial_cluster__aglomeracao_hash` | string | não | Identificador global da aglomeracao |
| `prismadata__commercial_cluster__nome_aglomeracao` | string | não |  |
| `prismadata__commercial_cluster__municipio` | string | não |  |
| `prismadata__commercial_cluster__uf` | string | não | UF de 2 caracteres |
| `prismadata__commercial_cluster__qtd_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__score_ponderado` | number | não |  |
| `prismadata__commercial_cluster__area_ha` | number | não | Area em hectares |
| `prismadata__commercial_cluster__densidade_pdvs_km2` | number | não |  |
| `prismadata__commercial_cluster__centroide_lat` | number | não |  |
| `prismadata__commercial_cluster__centroide_lng` | number | não |  |
| `prismadata__commercial_cluster__porte` | string | não |  |
| `prismadata__commercial_cluster__concentracao` | string | não |  |
| `prismadata__commercial_cluster__faixa_renda` | string | não |  |
| `prismadata__commercial_cluster__vocacao` | string | não |  |
| `prismadata__commercial_cluster__nome_segmento` | string | não |  |
| `prismadata__commercial_cluster__pct_alimentacao` | number | não |  |
| `prismadata__commercial_cluster__pct_moda` | number | não |  |
| `prismadata__commercial_cluster__pct_supermercado` | number | não |  |
| `prismadata__commercial_cluster__pct_saude` | number | não |  |
| `prismadata__commercial_cluster__pct_construcao` | number | não |  |
| `prismadata__commercial_cluster__pct_eletronicos` | number | não |  |
| `prismadata__commercial_cluster__pct_moveis` | number | não |  |
| `prismadata__commercial_cluster__pct_combustiveis` | number | não |  |
| `prismadata__commercial_cluster__pct_automotivo` | number | não |  |
| `prismadata__commercial_cluster__pct_entretenimento` | number | não |  |
| `prismadata__commercial_cluster__pct_alojamento` | number | não |  |
| `prismadata__commercial_cluster__pct_varejo_geral` | number | não |  |
| `prismadata__commercial_cluster__renda_mediana` | number | não |  |
| `prismadata__commercial_cluster__percentil_br_renda` | number | não |  |
| `prismadata__commercial_cluster__rank_nacional_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__rank_nacional_score` | integer | não |  |
| `prismadata__commercial_cluster__rank_nacional_densidade` | integer | não |  |
| `prismadata__commercial_cluster__rank_uf_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__rank_uf_score` | integer | não |  |
| `prismadata__commercial_cluster__rank_uf_densidade` | integer | não |  |
| `prismadata__commercial_cluster__rank_municipal_pdvs` | integer | não |  |
| `prismadata__commercial_cluster__rank_municipal_score` | integer | não |  |
| `prismadata__commercial_cluster__rank_municipal_densidade` | integer | não |  |
| `prismadata__commercial_cluster__distancia_m` | number \| null | não | Distancia ao ponto consultado (m). null nos endpoints sem ponto de referencia (/street, /{hash}, /search, /ranking). |
| `prismadata__commercial_cluster__distancia_borda_m` | number \| null | não | Distancia a borda do poligono (m). null nos endpoints sem ponto de referencia (/street, /{hash}, /search, /ranking). |
| `prismadata__commercial_cluster__contido` | boolean \| null | não | Se o ponto consultado esta dentro da aglomeracao. null nos endpoints sem ponto de referencia. |
| `prismadata__commercial_cluster__geometria` | object \| string | não | Poligono da aglomeracao. Opt-in via incluir_geometria=true. Requer role 'admin' ou 'viewer:commercial_cluster' no JWT — caso contrario retorna 403 GEOMETRIA_NAO_AUTORIZADA. Formato padrao GeoJSON (objeto); com wkt=true vira string WKT. Sem simplificacao, SRID 4326. Nao suportado em /batch. |

**Outros códigos**: 401, 403, 422, 429

---

### `POST /location/commercial_cluster/search`

Busca aglomeracoes por filtros sem ponto geografico.

**Exemplo curl**:

```bash
curl -X POST "https://api.prismadata.io/v1/location/commercial_cluster/search" \
  -H "X-Apikey: SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
         "filtros": {
           "uf": [],
           "municipio": [],
           "porte": [],
           "faixa_renda": [],
           "qtd_pdvs_min": 0,
           "qtd_pdvs_max": 0,
           "score_min": 0,
           "score_max": 0
         },
         "ordenar_por": "score_ponderado",
         "ordem": "desc",
         "limite": 50,
         "offset": 0,
         "versao_dados": "string"
       }'
```

**Request body** (`application/json`):

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `filtros` | object \| null | não |  |
| `ordenar_por` | string | não |  |
| `ordem` | string | não |  |
| `limite` | integer | não |  |
| `offset` | integer | não |  |
| `versao_dados` | string \| null | não |  |

**Response 200** (`application/json`):

> Resposta de sucesso

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `prismadata__commercial_cluster__aglomeracoes` | array[object] | não |  |
| `prismadata__commercial_cluster__total` | integer | não |  |
| `prismadata__commercial_cluster__limite` | integer | não |  |
| `prismadata__commercial_cluster__offset` | integer | não |  |

**Outros códigos**: 401, 403, 422, 429

---

### `GET /location/commercial_cluster/ranking`

Top-N aglomeracoes por criterio e escopo.

**Exemplo curl**:

```bash
curl -X GET "https://api.prismadata.io/v1/location/commercial_cluster/ranking" \
  -H "X-Apikey: SEU_TOKEN"
# Params opcionais: criterio=score, escopo=nacional, top_n=50, uf=string, municipio=string, vocacao=string, versao_dados=string
```

**Parâmetros**:

| Nome | Local | Tipo | Obrigatório | Descrição |
|------|-------|------|-------------|-----------|
| `criterio` | query | string | não |  |
| `escopo` | query | string | não |  |
| `top_n` | query | integer | não |  |
| `uf` | query | string \| null | não |  |
| `municipio` | query | string \| null | não |  |
| `vocacao` | query | string \| null | não |  |
| `versao_dados` | query | string \| null | não |  |

**Response 200** (`application/json`):

> Resposta de sucesso

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `prismadata__commercial_cluster__ranking` | array[object] | não |  |
| `prismadata__commercial_cluster__criterio` | string | não |  |
| `prismadata__commercial_cluster__escopo` | string | não |  |
| `prismadata__commercial_cluster__total_retornado` | integer | não |  |

**Outros códigos**: 401, 403, 422, 429

---

## Recursos relacionados

- Documentação Redoc interativa: https://prismadata.io/redoc.html#tag/Aglomeracoes-Comerciais
- OpenAPI só deste produto (JSON): https://prismadata.io/llm/openapi/aglomeracoes-comerciais.json
- OpenAPI completo: https://prismadata.io/openapi.yaml
- Índice geral: https://prismadata.io/llms.txt
