Public API v1

API Documentation

Access the abuse.wtf database programmatically. Search approved reports, retrieve detailed information, and download evidence files.

Base URL https://abuse.wtf/api/public
No Auth Required
Public endpoints are open and don't require an API key or authentication.
JSON & XML
Get responses in JSON (default) or XML format using the format parameter.
Approved Only
Public API only exposes reports that have been reviewed and approved by staff.
Authentication

The public API does not require authentication. All endpoints listed in this documentation are freely accessible. Rate limits apply based on IP address to prevent abuse.

For private API access with extended capabilities, an API key is required. Contact an administrator to request one.

Rate Limits

To ensure fair usage and availability, the following rate limits are enforced:

TierLimitWindow
Public (no key)60 requestsPer hour per IP
Private (API key)ConfigurablePer hour per key

When the rate limit is exceeded, a 429 status code is returned.

Response Format

All responses follow a consistent structure. By default, responses are in JSON. Add format=xml to any request to receive XML instead.

{
  "success": true,
  "version": "v1",
  "total": 42,
  "limit": 50,
  "offset": 0,
  "reports": [...]
}
GET
Search Reports
/api/public/reports/search

Search through all publicly approved abuse reports. Supports filtering by report type, reported user, and pagination.

Query Parameters
ParameterTypeRequiredDescription
report_type string Optional Filter by type: scamming, griefing, hacking, harassment, other
reported_user_id string Optional Filter by the reported user's ID
limit integer Optional Number of results to return. Default: 50 Max: 100
offset integer Optional Number of results to skip for pagination. Default: 0
format string Optional Response format: json or xml. Default: json
curl -X GET "https://abuse.wtf/api/public/reports/search?report_type=scamming&limit=10"
const params = new URLSearchParams({
  report_type: 'scamming',
  limit: 10
});

const response = await fetch(
  `https://abuse.wtf/api/public/reports/search?${params}`
);
const data = await response.json();
console.log(data.reports);
import requests

response = requests.get(
    "https://abuse.wtf/api/public/reports/search",
    params={
        "report_type": "scamming",
        "limit": 10
    }
)
data = response.json()
print(data["reports"])
$response = file_get_contents(
    'https://abuse.wtf/api/public/reports/search?'
    . http_build_query([
        'report_type' => 'scamming',
        'limit' => 10
    ])
);
$data = json_decode($response, true);
print_r($data['reports']);
GET
Get Report
/api/public/reports/

Retrieve detailed information about a specific approved report, including reported user fields and evidence metadata.

Path & Query Parameters
ParameterTypeRequiredDescription
id integer Required The unique report ID
format string Optional Response format: json or xml. Default: json
Live Playground
GET /api/public/reports/
200 OK

                                
curl -X GET "https://abuse.wtf/api/public/reports/1"
const response = await fetch(
  'https://abuse.wtf/api/public/reports/1'
);
const data = await response.json();
console.log(data.report);
import requests

response = requests.get(
    "https://abuse.wtf/api/public/reports/1"
)
data = response.json()
print(data["report"])
$response = file_get_contents(
    'https://abuse.wtf/api/public/reports/1'
);
$data = json_decode($response, true);
print_r($data['report']);
Response Fields
FieldTypeDescription
report_idintegerUnique report identifier
reported_user_idstringID of the reported user
reported_usernamestringUsername of the reported user
report_typestringCategory of the report
titlestringReport title
descriptionstringDetailed report description
approved_atdatetimeWhen the report was approved
created_atdatetimeWhen the report was created
reported_user_fieldsarrayAdditional user identifiers (Discord, Minecraft, etc.)
evidencearrayEvidence files metadata (id, filename, type, size)
GET
Get Evidence
/api/public/reports//evidence

Download or view evidence files attached to an approved report. Returns the actual file content with the appropriate MIME type for inline viewing or download.

Parameters
ParameterTypeRequiredDescription
id integer Required The report ID (path parameter)
evidence_id integer Required The evidence file ID (query parameter)
Live Playground
GET /api/public/reports//evidence?evidence_id=
200 OK

                                
curl -X GET "https://abuse.wtf/api/public/reports/1/evidence?evidence_id=5" \
  --output evidence.png
const response = await fetch(
  'https://abuse.wtf/api/public/reports/1/evidence?evidence_id=5'
);
const blob = await response.blob();
const url = URL.createObjectURL(blob);

const a = document.createElement('a');
a.href = url;
a.download = 'evidence.png';
a.click();
import requests

response = requests.get(
    "https://abuse.wtf/api/public/reports/1/evidence",
    params={"evidence_id": 5}
)

with open("evidence.png", "wb") as f:
    f.write(response.content)