# Identity

> # Identity - GeoIP Compliance API

**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 /identity/ipinfo`

Identifica o pais a partir de IP ou coordenada.

**Exemplo curl**:

```bash
curl -X GET "https://api.prismadata.io/v1/identity/ipinfo?input_type=ip" \
  -H "X-Apikey: SEU_TOKEN"
# Params opcionais: ip=8.8.8.8, latitude=-19.9323, longitude=-43.9351, enrich=True, check_sanctions=True
```

**Parâmetros**:

| Nome | Local | Tipo | Obrigatório | Descrição |
|------|-------|------|-------------|-----------|
| `input_type` | query | string | sim | Tipo de entrada: 'ip' ou 'coordinate' |
| `ip` | query | string \| null | não | Endereco IP |
| `latitude` | query | number \| null | não | Latitude |
| `longitude` | query | number \| null | não | Longitude |
| `enrich` | query | boolean | não | Ativa retorno de VPN/proxy/TOR/datacenter |
| `check_sanctions` | query | boolean | não | Verifica listas de sancoes e paraisos fiscais |

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

> Successful Response

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `prismadata__ipinfo__input_type` | string | sim | Tipo de entrada: 'ip' ou 'coordinate' |
| `prismadata__ipinfo__input_ip` | string \| null | não | IP informado na consulta. null quando input_type=coordinate |
| `prismadata__ipinfo__input_latitude` | number \| null | não | Latitude informada na consulta. null quando input_type=ip |
| `prismadata__ipinfo__input_longitude` | number \| null | não | Longitude informada na consulta. null quando input_type=ip |
| `prismadata__ipinfo__resolved_latitude` | number \| null | não | Latitude resolvida (centroide do pais quando a entrada e um IP) |
| `prismadata__ipinfo__resolved_longitude` | number \| null | não | Longitude resolvida (centroide do pais quando a entrada e um IP) |
| `prismadata__ipinfo__country_code` | string \| null | sim | Codigo ISO 3166-1 alpha-2 do pais. null quando o pais nao pode ser determinado |
| `prismadata__ipinfo__country_name` | string \| null | sim | Nome do pais em ingles. null quando o pais nao pode ser determinado |
| `prismadata__ipinfo__continent` | string \| null | sim | Nome do continente. null quando o pais nao pode ser determinado |
| `prismadata__ipinfo__risk_level` | string | sim | Classificacao de risco: low, medium, high, very_high ou indeterminate (pais nao resolvido) |
| `prismadata__ipinfo__is_sanctioned` | boolean | sim | Se o pais esta em lista de sancoes |
| `prismadata__ipinfo__gafi_status` | string | sim | Status GAFI: not_listed, grey_list, black_list |
| `prismadata__ipinfo__ofac_status` | string | sim | Status OFAC: not_listed, sanctioned |
| `prismadata__ipinfo__eu_status` | string | sim | Status UE: not_listed, sanctioned |
| `prismadata__ipinfo__bacen_alert` | boolean | sim | Se o pais possui alerta especifico do BACEN |
| `prismadata__ipinfo__is_tax_haven_rfb` | boolean | sim | Paraiso fiscal segundo IN RFB 1.037 |
| `prismadata__ipinfo__is_tax_haven_eu` | boolean | sim | Paraiso fiscal segundo lista UE |
| `prismadata__ipinfo__rfb_type` | string \| null | não | Tipo de enquadramento na IN RFB 1.037: 'full' (paraiso fiscal), 'partial' (regime fiscal privilegiado) ou null |
| `prismadata__ipinfo__is_vpn` | boolean \| null | não | IP pertence a provedor VPN conhecido |
| `prismadata__ipinfo__is_proxy` | boolean \| null | não | IP utiliza proxy |
| `prismadata__ipinfo__is_tor_exit_node` | boolean \| null | não | IP e no de saida TOR |
| `prismadata__ipinfo__is_datacenter` | boolean \| null | não | IP pertence a datacenter |
| `prismadata__ipinfo__connection_type` | string \| null | não | Tipo de conexao: residential, vpn, tor, datacenter, satellite |
| `prismadata__ipinfo__asn` | integer \| null | não | Autonomous System Number do IP |
| `prismadata__ipinfo__asn_org` | string \| null | não | Nome da organizacao dona do ASN |
| `prismadata__ipinfo__geoip_confidence` | number \| null | não | Confianca da geolocalizacao (0.0 a 1.0). Reduzida para 0.25 em conexoes via satelite |
| `prismadata__ipinfo__country_timezone` | string \| null | não | Timezone IANA do pais (ex: America/Sao_Paulo) |
| `prismadata__ipinfo__country_utc_offset` | string \| null | não | Offset UTC no formato -03:00 |
| `prismadata__ipinfo__local_time` | string \| null | não | Hora local no formato ISO 8601 |
| `prismadata__ipinfo__is_business_hours` | boolean \| null | não | Se esta em horario comercial local (seg-sex 8h-18h) |
| `prismadata__ipinfo__query_id` | string | sim | UUID v4 unico da consulta |
| `prismadata__ipinfo__timestamp` | string | sim | Timestamp UTC da consulta em formato ISO 8601 |
| `prismadata__ipinfo__requester_ip` | string | não | IP do solicitante (origem da requisicao) |
| `prismadata__ipinfo__requester_razao_social` | string | não | Razao social da empresa solicitante |
| `prismadata__ipinfo__requester_cnpj` | string | não | CNPJ da empresa solicitante |
| `prismadata__ipinfo__query_time_ms` | integer | sim | Tempo de processamento em milissegundos |
| `prismadata__ipinfo__signature_algorithm` | string | não | Algoritmo de assinatura digital (Ed25519) |
| `prismadata__ipinfo__signature_value` | string | não | Assinatura digital em base64 |
| `prismadata__ipinfo__signature_key_id` | string | não | ID da chave usada na assinatura |
| `prismadata__ipinfo__signature_timestamp` | string | não | Timestamp UTC da assinatura em formato ISO 8601 |

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

---

### `POST /identity/batch/ipinfo`

Identifica o pais para um lote de IPs ou coordenadas (max 1024).

**Exemplo curl**:

```bash
curl -X POST "https://api.prismadata.io/v1/identity/batch/ipinfo?input_type=ip" \
  -H "X-Apikey: SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
         "p1": {
           "ip": "8.8.8.8",
           "latitude": -19.9323,
           "longitude": -43.9351
         }
       }'
# Params opcionais: enrich=True, check_sanctions=True
```

**Parâmetros**:

| Nome | Local | Tipo | Obrigatório | Descrição |
|------|-------|------|-------------|-----------|
| `input_type` | query | string | sim | Tipo de entrada: 'ip' ou 'coordinate' |
| `enrich` | query | boolean | não | Ativa retorno de VPN/proxy/TOR/datacenter |
| `check_sanctions` | query | boolean | não | Verifica listas de sancoes e paraisos fiscais |

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

Dicionário `{string: object}`.
Body do endpoint batch: Dict[str, BatchItem], max 1024.

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

> Successful Response

Tipo: `object`.

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

---

## Recursos relacionados

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