Feedback

Submits a detection feedback report

Reports that DataDome classified some of your traffic wrongly, so our analysts can review it and correct the detection.

Describe the traffic with scope, which takes an explicit list of identifiers, a traffic filter query, or both, and bound it with timeWindow. The window is the closed interval [start, end], so end may equal start to report a single request.

Idempotency. Send an optional X-Idempotency-Key header holding a UUID to make a retry safe. Within 24 hours, a repeat of the same key returns the original report with 201 and stores nothing new. Be aware that a repeat with a different body also returns the original report, unchanged and without an error, so a key must not be reused for a different submission.

Rate limit. 60 requests per minute per API key, shared with the other three Feedback operations.

post/1.1/feedback

Request

  • Base URL
    https://customer-api.datadome.co
  • URL
    https://customer-api.datadome.co/1.1/feedback
  • Auth
    API key in header x-api-key

Headers

X-Idempotency-Keystring uuid

Optional UUID that makes a retry safe for 24 hours. Compared case-insensitively, so ABC… and abc… are the same key. A value that is not a UUID is rejected with 400. Omit the header entirely to opt out.

Request body

feedbackType'falsePositive' | 'falseNegative' required

What the detection got wrong. falsePositive reports legitimate traffic that was challenged or blocked. falseNegative reports unwanted traffic that was allowed through.

severity'low' | 'medium' | 'high' | 'critical'

How much the mistake cost you. Defaults to medium when omitted. It orders our review queue and does not change how the report is processed.

origin'manualReview' | 'chargebacks' | 'automatedRule' | 'dashboard' | 'datadome' | 'other'

Where in your own workflow the report came from. Free to choose from the list; it is stored and returned untouched so you can correlate reports with your internal process.

originIdstring

Your own identifier for the case that triggered this report, for example a ticket or chargeback reference. Stored and returned untouched.

feedbackReasonstring

A short explanation, in your own words, of why the decision was wrong.

Example request

{
  "scope": {
    "trafficFilter": "countrycode:FR"
  },
  "timeWindow": {
    "start": "2026-08-25T08:00:00+00:00",
    "end": "2026-08-25T09:00:00+00:00"
  }
}

Response

The report was stored and is awaiting review. Also returned when an X-Idempotency-Key is replayed, in which case the body is the original report and nothing new was stored.

feedbackIdstring uuid

Identifier of the report. Use it to retrieve or cancel the report.

customerIdinteger

The account the report belongs to, taken from the API key you submitted it with.

status'pending' | 'processing' | 'completed' | 'canceled'

Where the report is in our review. A new report is always pending. Only a pending report can be canceled.

feedbackType'falsePositive' | 'falseNegative'

What the detection got wrong. falsePositive reports legitimate traffic that was challenged or blocked. falseNegative reports unwanted traffic that was allowed through.

severity'low' | 'medium' | 'high' | 'critical'

The severity you submitted, or medium when you omitted it.

originstring nullable

The origin you submitted, or null.

originIdstring nullable

The identifier you submitted, or null.

createdAtstring date-time

When we received the report. ISO-8601 with millisecond precision.

completedAtstring date-time nullable

When our review finished. null until the status is completed, and null for a canceled report.

commentstring nullable

What our analysts concluded. null until the review is complete. You cannot set this field.

feedbackReasonstring nullable

The explanation you submitted, or null.

expectedDecisionstring nullable

Reserved for a future use. Always null, and a request that sets it is rejected. Present only so that clients deserializing the full response do not meet an undeclared field.

Example response

{
  "createdAt": "2026-08-26T09:14:32.118+00:00",
  "timeWindow": {
    "start": "2026-08-25T08:00:00+00:00",
    "end": "2026-08-25T09:00:00+00:00"
  },
  "scope": {
    "trafficFilter": "countrycode:FR"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.