Submit Feedback
Tell HydraDB how a query performed, so retrieval quality improves.
source labels which one it was.
Linking feedback to a query
Every HydraDB response carries arequest_id in meta, and the same value in the X-Request-ID header. Send that id back and we can line your comment up with the exact query it is about - the text queried, what came back, how long it took.
request_id back exactly as you received it. It must be the UUID from meta.request_id (or the X-Request-ID header) - any other value is rejected with 400.Fields
Ground truth
If you already know the right answer - you are running an evaluation set, or you know which document the user needed - send it. It is a much stronger signal than a comment, because we can score it without a human reading it.answer- the response you expected.source_ids- the sources that actually contain the answer. This is the one that grades retrieval: it tells us whether the query surfaced those documents, and where they ranked.
ground_truth is your only signal, at least one of the two has to carry something - values that are empty or all whitespace are treated as not sent.
ground_truth, the feedback comment becomes optional - an evaluation run with an answer key does not need prose for every row. A submission with neither is rejected.429 loses every remaining case, not just the one it failed on.
Duplicate source_ids are collapsed and blank entries dropped, so you do not need to de-duplicate or filter your answer key first - a list that still has one real id in it is scored on that id.
Submitting more than once
Each submission is stored separately - a second comment about the same query does not replace the first. Send several as your understanding of a bad result develops, and file feedback from more than one user on the same query.Rate limit
100 submissions per minute per organization. Over that, you get429 with a Retry-After header and a message naming the seconds to wait - it is safe to retry after waiting.
The ceiling is well above normal use; an agent reporting on every query it makes will stay comfortably under it.
Errors
500 means the submission was not saved, so a retry cannot create a duplicate of something already stored.Authorizations
API key sent as a Bearer token: "Bearer prefix.secret"
Body
Feedback submission
- Option 1
- Option 2
Free-text comment describing what was right or wrong about the results. Required unless ground_truth is supplied.
1 - 8000\SThe request_id from response.meta of the query this feedback is about. Required — it is what links the feedback to the query that ran.
"9d13aef4-02f4-4e73-8c62-4c2601d04f9d"
Optional collection scope for this feedback. A collection is scoped to a database, so database must be sent alongside it; sending collection on its own is rejected. If you also send the deprecated sub_tenant_id, the two must carry the same value — they name one thing, and conflicting values are rejected rather than one silently winning.
1"team_docs"
Optional database scope for this feedback. If you also send the deprecated tenant_id, the two must carry the same value — they name one thing, and conflicting values are rejected rather than one silently winning.
1"acme_corp"
What you already know the right answer to be, when you know it. Supply an expected answer, the source_ids that contain it, or both — at least one is required if the field is present. Machine-checkable, so it is a stronger signal than a comment: submit it alone and feedback becomes optional.
Free-form key-value context stored alongside the feedback (e.g. agent name, conversation or eval-run ID).
Optional overall judgement: positive, negative, or neutral. Omit to send a comment with no rating.
positive, negative, neutral Who is submitting: user (default) or agent.
user, agent Deprecated — use collection. Still accepted, and may be sent alongside collection during a migration only if both carry the same value; conflicting values are rejected with 400.
1"sub_tenant_4567"
Deprecated — use database. Still accepted, and may be sent alongside database during a migration only if both carry the same value; conflicting values are rejected with 400.
1"tenant_1234"
