Request a takedown
const url = 'https://app.nebty.de/core/api/takedowns/';const options = { method: 'POST', headers: {Authorization: '<Authorization>', 'Content-Type': 'application/json'}, body: '{"target_website":"https://example.com","user_comment":"example","brand":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://app.nebty.de/core/api/takedowns/ \ --header 'Authorization: <Authorization>' \ --header 'Content-Type: application/json' \ --data '{ "target_website": "https://example.com", "user_comment": "example", "brand": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }'Requests a takedown of a website. Send target_website (an http or https URL on a public host; localhost and non-public IP addresses are rejected) and optionally brand (UUID) and user_comment.
If you pass brand, the API key’s user must be a member of it, otherwise the request is rejected with 400.
The status of the new takedown depends on the brand. With a brand that has monitoring enabled, the takedown starts as OPEN. Without a brand, or with a brand whose monitoring is disabled, it starts as REQUESTED and waits for approval by nebty; once approved it becomes OPEN, otherwise REJECTED. The status in the 201 response tells you which.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”Serializer for creating new takedown requests.
object
The target website URL for the takedown request
Optional comment from the requesting user
Brand associated with this takedown. All users with access to this brand can view the takedown.
Examplegenerated
{ "target_website": "https://example.com", "user_comment": "example", "brand": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"}Serializer for creating new takedown requests.
object
The target website URL for the takedown request
Optional comment from the requesting user
Brand associated with this takedown. All users with access to this brand can view the takedown.
Examplegenerated
target_website=https%3A%2F%2Fexample.com&user_comment=example&brand=2489E9AD-2EE2-8E00-8EC9-32D5F69181C0Serializer for creating new takedown requests.
object
The target website URL for the takedown request
Optional comment from the requesting user
Brand associated with this takedown. All users with access to this brand can view the takedown.
Responses
Section titled “Responses”Serializer for takedown request details.
object
The target website URL for the takedown request
Optional comment from the requesting user
Brand associated with this takedown. All users with access to this brand can view the takedown.
Legacy free-text brand name (deprecated, use brand FK instead)
Current status of the takedown request
REQUESTED- Requested (Pending Approval)OPEN- OpenIN_PROGRESS- In ProgressPENDING_RESPONSE- Pending ResponseCLOSED- ClosedFAILED- FailedREJECTED- Rejected
Timestamp when the takedown case was closed.
MEASURED- Measured at closureDERIVED_FROM_EVENT- Derived from status-change eventDERIVED_FROM_NOTE- Derived from last case note (±1 day)
How closed_at was arrived at: MEASURED (stamped at closure or entered by staff), DERIVED_FROM_EVENT (reconstructed from the status-change audit event, exact), DERIVED_FROM_NOTE (reconstructed from the last case note, +/-1 day), or blank when no closing date is known. Reports averaging resolution time should state how many inputs were reconstructed.
MEASURED- Measured at closureDERIVED_FROM_EVENT- Derived from status-change eventDERIVED_FROM_NOTE- Derived from last case note (±1 day)
DOMAIN_SUSPENDED- Domain SuspendedCONTENT_REMOVED- Content RemovedSERVER_HOLD- Server HoldVOLUNTARY_TAKEDOWN- Voluntary TakedownUNRESOLVED- UnresolvedFALSE_POSITIVE- False Positive
Outcome of the takedown case.
DOMAIN_SUSPENDED- Domain SuspendedCONTENT_REMOVED- Content RemovedSERVER_HOLD- Server HoldVOLUNTARY_TAKEDOWN- Voluntary TakedownUNRESOLVED- UnresolvedFALSE_POSITIVE- False Positive
Domain registrar, e.g. ‘Openprovider’, ‘Sav.com’
Domain registration date from WHOIS.
Domain expiry date from WHOIS.
WHOIS status, e.g. ‘clientTransferProhibited’, ‘serverHold’
Resolved IP address (may be proxy IP).
Real server IP behind CDN/proxy.
AS number, e.g. ‘AS13335’
Hosting provider, e.g. ‘Hostinger’, ‘Hetzner’
CDN/proxy provider, e.g. ‘Cloudflare’
Whether the domain is behind a CDN/proxy.
Backend service, e.g. ‘Supabase’, ‘Vercel’
Project ID at backend provider.
SSL certificate issue date.
SSL certificate expiry date.
Certificate issuer, e.g. ‘Let’s Encrypt’, ‘Cloudflare’
DNS A record information (DEPRECATED - use dns_raw)
DNS NS record information (DEPRECATED - use dns_raw)
Full DNS records as JSON. Expected structure: {“a”: […], “aaaa”: […], “cname”: […], “mx”: […], “ns”: […], “txt”: […], “soa”: […], “caa”: […]}
Score, e.g. ‘16/93’
Link to VirusTotal report.
Link to urlscan.io result.
URL to screenshot in Hetzner S3 Object Storage.
When the screenshot was taken.
Serializer for abuse contact details.
object
REGISTRAR- RegistrarHOSTING- Hosting ProviderCDN- CDN / ProxyBACKEND- Backend ServiceREGISTRY- Domain RegistryOTHER- Other
Provider name, e.g. ‘Cloudflare’, ‘Openprovider’
Abuse email address.
URL to abuse report form.
NOT_SENT- Not SentSENT- SentACKNOWLEDGED- AcknowledgedACTION_TAKEN- Action TakenREJECTED- RejectedNO_RESPONSE- No Response
Provider case reference, e.g. ‘Case 00954977’
Serializer for blacklist submission details.
object
P1- P1 - Immediate (GSB, Netcraft, SmartScreen)P2- P2 - Distribution (Spamhaus, Openphish, SpamCop)P3- P3 - Prevention (VirusTotal, Symantec, ScamAdviser)
Blacklist service name, e.g. ‘Google Safe Browsing’, ‘Spamhaus’
URL for submission.
PENDING- PendingSUBMITTED- SubmittedLISTED- ListedREJECTED- Rejected
When listing was confirmed.
Example
{ "status": "REQUESTED", "closed_at_source": "MEASURED", "resolution": "DOMAIN_SUSPENDED", "abuse_contacts": [ { "contact_type": "REGISTRAR", "report_status": "NOT_SENT" } ], "blacklist_submissions": [ { "tier": "P1", "status": "PENDING" } ]}Invalid query parameters or request data. Field errors appear directly on the response; malformed JSON has a detail message.
object
Field names mapped directly to validation error messages.
object
Example
{ "target_website": [ "Target host is not a public address." ]}The API key is missing, invalid, revoked or belongs to an inactive user.
object
Examplegenerated
{ "detail": "example"}Too many requests or failed authentication attempts. Try again later.
object
Examplegenerated
{ "detail": "example"}