# Abuso (referência)

## POST `/v1/abuse`

Denuncia uma URL hospedada na CDN

Endpoint **público**: não exige token. Sujeito a rate-limit por IP. Escopo: nenhum.
O operador analisa e tira do ar o que violar as regras.

Escopo exigido: - · operationId: `reportAbuse`

### Corpo (application/json)

| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
| `url` | string | sim |  |
| `reason` | string | sim |  |
| `contact` | string | não | E-mail para retorno (opcional). |

```json
{
  "url": "https://media.nebularcdn.com/marcas-k7p2/9f86d081884c/logos/acme.png",
  "reason": "Arquivo malicioso hospedado.",
  "contact": "denunciante@exemplo.org"
}
```

### Resposta 202

Denúncia recebida.

| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
| `status` | string | não |  |

```json
{
  "status": "received"
}
```

### Resposta 422

Corpo inválido (URL ausente ou fora da CDN, motivo vazio).

| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
| `error` | enum(unauthorized, forbidden, not_found, payload_too_large, quota_exceeded, unsupported_type, class_not_allowed, extension_mismatch, malware_detected, svg_unsafe, archive_encrypted, archive_bomb, archive_unsupported, rate_limited, unavailable, idempotency_conflict, invalid_request, unsupported_media_type, bad_json, too_large, authz_unavailable, database_unavailable, restore_not_removable, gallery_not_empty, bad_body, internal, name_taken, slug_taken, project_quota_exceeded, project_not_empty, deploy_in_progress, nothing_to_rollback, not_cancelable, sensitive_lowered, duplicate_variable, domain_taken, volume_exists, volume_in_use, volume_attached, backup_not_ready, unresolved_reference, reference_cycle, invalid_reference, reference_too_deep, value_too_large) | sim | Código estável para tratamento programático. A tabela completa está na descrição geral. |
| `message` | string | sim | Mensagem legível em pt-BR. |
| `details` | object | não | Presente em alguns `422` (ex.: `unresolved_reference` e `reference_cycle` trazem `details.references`). |
| `details.references` | array<string> | não | Referências problemáticas (só nomes, nunca valores). |
| `details.retry_after_seconds` | integer | não | Em `422 rate_limited` (ex.: verificação manual de domínio): segundos até poder tentar de novo. |

```json
{
  "error": "invalid_request",
  "message": "Informe uma URL da CDN e o motivo da denúncia."
}
```

### Erros comuns

Corpo `{"error", "message", "details"?}` (veja [Autenticação e visão geral](/referencia/autenticacao/) e a [tabela de erros](/erros/tabela/)): `429` Limite de requisições excedido. Espere `Retry-After` segundos; `503` Serviço (ex.: scanner ou borda) temporariamente indisponível. Tente de novo após `Retry-After`.
