About the Abuse API

View as Markdown

Reference for the Abuse API, a REST API for reporting phishing, malware, and child abuse content hosted or registered with GoDaddy brands, and for tracking the outcome of reports you submit.

Access requires onboarding

The Abuse API is not open to self-service signup. Access is granted per reporter identity, and requests are rejected with 403 until yours is enabled. Contact abuseapisupport@godaddy.com to start onboarding.

This API supports Classic Developer Keys only. Only submit reports through the API. Don't email phishing@godaddy.com, malware@godaddy.com, netabuse@godaddy.com, or spam@godaddy.com. Email submissions are deprioritized and Customer Support can't help with abuse reports or expedite review.

Overview

The Abuse API lets you submit abuse reports programmatically and follow what happens to them, instead of emailing an abuse alias and waiting. You report a single URL or IP per ticket, and the API returns a ticket ID you can use to track that report to a resolution.

Three operations are public, in two versions. The API is deliberately narrow: you can create a report, list the reports you have submitted, and read one report. Nothing in the public API changes or closes a ticket. That happens through GoDaddy's internal review process.

Reports you submit are reviewed against the GoDaddy Universal Terms of Service and the policies for the brand that hosts or registers the reported content. Submitting a report does not guarantee action.

Authentication

Every request carries a Classic Developer Key (a key and secret pair) in the Authorization header:

Authorization: sso-key $ABUSE_API_KEY:$ABUSE_API_SECRET

Your reporter identity comes from the key. There is no reporter field to send. Every report is attributed to whoever the key belongs to, and the list and retrieve operations return only your own tickets. Requesting a ticket that belongs to someone else returns 404, not 403.

A valid credential is not sufficient on its own. Your identity also has to be enabled for the API, which happens during onboarding.

Choose a version

Use v2 for new integrations. Both versions accept reports and read from the same records, so a ticket created through v1 is visible through v2 and the reverse. The following table compares the two versions:

v1 (Legacy)v2 (Recommended)
Close reason on retrieveNot returnedcloseReason once the ticket closes
proxyFree textFixed set of region codes
useragentNot acceptedDESKTOP, MOBILE, OTHER, NOT_APPLICABLE
intentionalAcceptedRemoved
Create and list rate limit750 requests per minute60 requests per minute

The closeReason field is the main reason to prefer v2: on v1 you can tell that a ticket closed, but not whether it closed because the content was actioned or because the report was rejected.

v1 remains supported and its behaviour is unchanged. If you run a high-volume v1 integration, size your submission rate against the v2 limit before you move.

Operations

The following table lists the three public operations, with the v1 and v2 page for each:

Operationv1 (Legacy)v2 (Recommended)
Report abuse (POST /abuse/tickets). Returns 201 with the new ticket ID, plus a link header pointing at it.create-ticketcreate-ticket-v2
List your tickets (GET /abuse/tickets). Filter by type, target, source domain or IP, creation date, and open or closed state.get-ticketsget-tickets-v2
Retrieve a ticket (GET /abuse/tickets/{ticketId}). Includes the close reason once the ticket has closed.get-ticket-infoget-ticket-info-v2

Typical flow

A typical integration creates a ticket, then polls the retrieve operation until the ticket closes:

POST /v2/abuse/tickets            → 201, {"u_number": "DCU12345678"}
                                    link header points at the new ticket

GET  /v2/abuse/tickets/DCU12345678 → 200, ticket with closed: false
                                    poll periodically; closeReason appears once closed

GET  /v2/abuse/tickets?closed=true → 200, {"ticket_ids": [...], "pagination": {...}}
                                    reconcile your own records

Reports are reviewed asynchronously and there is no callback or webhook. Poll the retrieve operation for the tickets you care about rather than listing everything repeatedly. Listing is subject to the same rate limit as creating.

What to report

Every reporter can submit PHISHING, MALWARE, and CHILD_ABUSE. Further types exist for specific reporting programs and are granted per reporter during onboarding.

Categorise accurately. Reports that do not match the abuse type you select are marked as false positives. If your false-positive rate exceeds 40% of total submissions, GoDaddy can deprioritise your subsequent reports.

Trademark, copyright, and content complaints are not handled by this API. Send those to trademarkclaims@godaddy.com, copyrightclaims@godaddy.com, or contentcomplaints@godaddy.com respectively. For other scenarios not covered by this API, go to legalportal.godaddy.com/abuse.

Conventions

The following table describes the conventions that apply to all Abuse API requests:

ConventionDetail
Base URLhttps://api.godaddy.com (production)
AuthClassic Developer Key, sent as Authorization: sso-key {key}:{secret}. Access is granted per reporter identity during onboarding.
Ticket IDReturned from create as u_number, and used as {ticketId} on retrieve.
One source per ticketEach report covers a single URL or IP. More than five URLs for one domain counts as a duplicate submission. Reporters with a duplicate rate above 20% can have reports deprioritized.
Duplicate reportsReporting a source you already have an open ticket for returns 422 rather than creating a second ticket.
Shared recordsv1 and v2 read the same tickets, so you can migrate reading and writing independently.
Rate limitsEnforced at the API gateway, per reporter. v2 create and list allow 60 requests per minute; v1 allows 750. Retrieve allows 60 on both.
Errors401 for a missing or invalid credential, 403 for an identity that is not enabled, 404 for a ticket that is not yours, 422 for validation failures and duplicates.

Related

Last updated on

How is this guide?

On this page