{
"bid_id": "bid_abc123",
"feedback_type": "positive"
}
{
"bid_id": "bid_abc123",
"feedback_type": "negative",
"feedback_text": "Not relevant to my conversation"
}
// No response body (HTTP 204 No Content)
{
"detail": "Impression not found or expired"
}
v1 (deprecated)
Feedback (v1)
Record user feedback (thumbs up / thumbs down) for an ad impression
POST
/
api
/
v1
/
tracking
/
feedback
{
"bid_id": "bid_abc123",
"feedback_type": "positive"
}
{
"bid_id": "bid_abc123",
"feedback_type": "negative",
"feedback_text": "Not relevant to my conversation"
}
// No response body (HTTP 204 No Content)
{
"detail": "Impression not found or expired"
}
Authorizations
string
required
Must be
application/jsonBody
string
required
The
bidId from the original v1 bid response. In v2, POST to the bid’s actions.feedback_url instead: see Feedback. Identifies which impression the feedback is for. User, publisher, campaign, and product information is resolved server-side from the impression data.string
required
User’s feedback signal. Must be
"positive" or "negative".string
Optional free-text feedback from the user (max 1000 characters). Useful for “tell us why” flows on negative feedback.
{
"bid_id": "bid_abc123",
"feedback_type": "positive"
}
{
"bid_id": "bid_abc123",
"feedback_type": "negative",
"feedback_text": "Not relevant to my conversation"
}
// No response body (HTTP 204 No Content)
{
"detail": "Impression not found or expired"
}
Behavior
- One feedback per impression — duplicate submissions for the same
bid_idreturn204silently (no error, no overwrite). - Impression must exist — the
bid_idmust correspond to a tracked impression. If the impression has expired or was never recorded, the endpoint returns404. - Server-side enrichment — user, publisher, campaign, and product information is resolved automatically from the impression. You only need to send the
bid_id. - No authentication required — this endpoint is called from the client side (browser or mobile app) and does not require an API key.
Status Codes
| Status Code | Meaning | Scenario |
|---|---|---|
204 No Content | Success | Feedback recorded (or already recorded for this impression) |
404 Not Found | Invalid impression | bid_id doesn’t match a known impression or has expired |
422 Unprocessable Entity | Validation error | Missing required fields or invalid feedback_type |
500 Internal Server Error | Server error | Internal processing failure |
Integration
Add a thumbs up / thumbs down UI next to each ad. When the user taps, fire a singlePOST request:
// iOS (Swift)
func sendFeedback(bidId: String, type: String) {
guard let url = URL(string: "https://ssp.thrads.ai/api/v1/tracking/feedback") else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: [
"bid_id": bidId,
"feedback_type": type
])
URLSession.shared.dataTask(with: request).resume()
}
// Web (JavaScript)
async function sendFeedback(bidId, type) {
await fetch("https://ssp.thrads.ai/api/v1/tracking/feedback", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
bid_id: bidId,
feedback_type: type,
}),
});
}
