Αναφορά API / Feedback

Feedback

Τα endpoints της ομάδας Feedback του Voiceland AI API, με παραμέτρους, σχήματα και παραδείγματα curl.

Τελευταία ενημέρωση:

Οι περιγραφές των endpoints και των πεδίων εμφανίζονται στα αγγλικά, όπως ακριβώς τις δημοσιεύει το API. Είναι επιλογή μας, ώστε να διαβάζετε εδώ ό,τι θα δείτε και στις αποκρίσεις.

GET /v1/feedback#

List answer feedback. One page of the raw feedback rows your visitors and reviewers left on individual answers, in key order (call, then turn, then author). This is also the export: follow the cursor to the end and you hold every row. **Paging.** Pass the next_cursor from the previous response back as ?cursor=. **An empty next_cursor is the only signal that you have seen everything**, a short page, including an empty one, is normal and means "ask again": the agent filter is applied after each read, so a page can match nothing and still have more behind it.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
call_id query string Only one call's feedback.
agent query string Only one agent's feedback. Applied after the read, short pages are normal.
limit query integer Rows per page, 1 to 100 (default 50). Larger values are capped rather than refused.
cursor query string The next_cursor from the previous page. Omit for the first page. A cursor belongs to the scope that issued it.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
400 limit is not a positive whole number (bad_request), or cursor was not issued by this listing for this scope (invalid_cursor), start again without it.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl "https://api.voiceland.ai/v1/feedback" \
  -H "Authorization: Bearer VL_API_KEY"

Η επιτυχής απόκριση επιστρέφει ένα FeedbackListResponse.

Παράδειγμα απόκρισης

{
  "items": [
    {
      "agent_name": "front-desk",
      "author_id": "widget-user-1a2b",
      "author_kind": "visitor",
      "call_id": "widget-8c2f1a7e-4b3d-4e21-9c0a-5f6d7e8a9b0c",
      "category": "inaccurate",
      "rating": "down",
      "rating_kind": "thumbs",
      "score": 1,
      "tenant_slug": "acme",
      "turn_id": "t3",
      "turn_role": "agent"
    }
  ],
  "next_cursor": ""
}

POST /v1/feedback#

Rate an answer. Records your review of one transcript turn. Send **either** rating (up/down) **or** score (1 to 5), a thumb is stored as 5/1 on the same scale, so both controls land in one shape. turn_id is t<index>, the zero-based position of the turn in GET /calls/{id}/transcript, or o<offset_ms>, the turn's offset_ms. The turn must exist on the persisted call. **One row per (turn, author): re-submitting replaces your previous rating, it is never counted twice.** Pass author to keep two reviewers' ratings distinct. A rating on a human reply (a representative's turn) is stored with its role and deliberately excluded from the agent satisfaction numbers, it is not an AI quality signal.

Σώμα αιτήματος

application/json Σχήμα: FeedbackSubmitRequest

Πεδίο Τύπος Απαιτείται Περιγραφή
agent string
author string
call_id string Ναι
category string
comment string
rating string
score integer
turn_id string Ναι

Αποκρίσεις

Κωδικός Περιγραφή
200 The stored feedback row (replacing any earlier one by the same author on the same turn).
401 Missing or invalid API key.
404 No CDR for that call id (call_not_found), or the turn id names no turn of it (turn_not_found).
422 Neither a rating nor a score was sent, they contradict each other, or the category is not one of inaccurate/outdated/irrelevant/inappropriate/other (invalid_feedback).
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl -X POST "https://api.voiceland.ai/v1/feedback" \
  -H "Authorization: Bearer VL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "call_id": "widget-8c2f1a7e-4b3d-4e21-9c0a-5f6d7e8a9b0c",
  "category": "outdated",
  "comment": "Quotes the 2024 price list.",
  "score": 2,
  "turn_id": "t3"
}'

Παράδειγμα απόκρισης

{
  "agent_name": "front-desk",
  "author_id": "operator",
  "author_kind": "operator",
  "call_id": "widget-8c2f1a7e-4b3d-4e21-9c0a-5f6d7e8a9b0c",
  "category": "outdated",
  "rating": "down",
  "rating_kind": "scale",
  "score": 2,
  "tenant_slug": "acme",
  "turn_id": "t3",
  "turn_role": "agent"
}

GET /v1/feedback/analytics#

Answer satisfaction analytics. Per-agent satisfaction over the stored feedback rows: rated count, up/down split, average score and the satisfaction rate (share of ratings with score ≥ 4), plus the worst-rated turns as a review feed. Only ratings on AI turns count; ratings on human replies are excluded and reported in human_turns_excluded. The fold reads a bounded number of rows and says so: when truncated is true the numbers cover scanned rows, not the whole history.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
agent query string Fold one agent only.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl "https://api.voiceland.ai/v1/feedback/analytics" \
  -H "Authorization: Bearer VL_API_KEY"

Η επιτυχής απόκριση επιστρέφει ένα FeedbackAnalyticsResponse.

Παράδειγμα απόκρισης

{
  "human_turns_excluded": 2,
  "items": [
    {
      "agent": "front-desk",
      "average_score": 4.1,
      "down": 8,
      "rated": 41,
      "satisfaction_rate": 0.8,
      "up": 33
    }
  ],
  "scanned": 43,
  "truncated": false,
  "worst": [
    {
      "agent": "front-desk",
      "call_id": "widget-8c2f…",
      "category": "inaccurate",
      "rating": "down",
      "score": 1,
      "turn_id": "t3"
    }
  ]
}

GET /v1/feedback/regressions#

Export confirmed-wrong answers (regression cases). Every report resolved confirmed_wrong, as stable rows an evaluation harness can consume: the snapshotted answer, its sources, the linked knowledge document and the resolution trail. Rows whose call was erased under a data-subject request keep only the hashed call linkage (erased: true). **Paging.** Pass the next_cursor back as ?cursor=; **an empty next_cursor is the only signal that the export is complete**, the status filter runs after each read, so short pages with a cursor are normal. The row shape is additive-only: fields may be added, never renamed or removed.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
limit query integer Rows per page, 1 to 100 (default 50).
cursor query string The next_cursor from the previous page. Omit for the first page.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
400 limit is not a positive whole number (bad_request), or the cursor was not issued by this listing (invalid_cursor).
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl "https://api.voiceland.ai/v1/feedback/regressions" \
  -H "Authorization: Bearer VL_API_KEY"

Η επιτυχής απόκριση επιστρέφει ένα FeedbackRegressionsResponse.

Παράδειγμα απόκρισης

{
  "items": [
    {
      "agent": "front-desk",
      "answer_text": "Our premium plan costs …",
      "call_id_hash": "b1946ac9…",
      "category": "inaccurate",
      "id": "fbr_9d8c7b6a",
      "kb_document_id": "doc_4b1e77a0",
      "resolved_by": "maria@acme.example",
      "turn_id": "t3"
    }
  ],
  "next_cursor": ""
}

GET /v1/feedback/reports#

List inaccuracy reports (review queue). One page of the reported answers, in report-id order. ?status=open is the review queue; the three resolved states are the history. Each report carries its own **snapshot** of the answer text and the sources that grounded it, taken when the report was filed, so the review works even after the call itself was erased. snapshot_source says whether the copy came from the stored transcript or was claimed by the reporter mid-session. **Paging.** Pass the next_cursor back as ?cursor=. **An empty next_cursor is the only signal that you have seen everything**, the status filter runs after each read, so short and empty pages with a cursor are normal.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
status query string Filter: open, confirmed_wrong, correct or fixed. Applied after the read.
limit query integer Rows per page, 1 to 100 (default 50).
cursor query string The next_cursor from the previous page. Omit for the first page.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
400 status is not one of the four states or limit is not a positive whole number (bad_request); or the cursor was not issued by this listing (invalid_cursor).
401 Missing or invalid API key.
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl "https://api.voiceland.ai/v1/feedback/reports" \
  -H "Authorization: Bearer VL_API_KEY"

Η επιτυχής απόκριση επιστρέφει ένα FeedbackReportsResponse.

Παράδειγμα απόκρισης

{
  "items": [
    {
      "answer_text": "Our premium plan costs …",
      "call_id": "widget-8c2f…",
      "category": "inaccurate",
      "id": "fbr_9d8c7b6a",
      "snapshot_source": "transcript",
      "sources": [
        {
          "chunk_id": "doc_4b1e77a0:0003",
          "document_id": "doc_4b1e77a0",
          "index": 1,
          "title": "Τιμολόγηση 2026"
        }
      ],
      "status": "open",
      "turn_id": "t3"
    }
  ],
  "next_cursor": ""
}

POST /v1/feedback/reports#

Report an inaccurate answer. Files one answer into the review queue. The answer text and the sources that grounded it are **copied from the stored transcript turn at this moment**, never recomputed later, so the report stays reviewable even if the call is erased afterwards. turn_id is t<index> (transcript item index) or o<offset_ms>, and must name a turn of the persisted call.

Σώμα αιτήματος

application/json Σχήμα: FeedbackReportCreateRequest

Πεδίο Τύπος Απαιτείται Περιγραφή
agent string
author string
call_id string Ναι
category string
comment string
turn_id string Ναι

Αποκρίσεις

Κωδικός Περιγραφή
201 The report, open, with the snapshot attached.
401 Missing or invalid API key.
404 No CDR for that call id (call_not_found), or the turn id names no turn of it (turn_not_found).
422 The category is not one of inaccurate/outdated/irrelevant/inappropriate/other (invalid_feedback).
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl -X POST "https://api.voiceland.ai/v1/feedback/reports" \
  -H "Authorization: Bearer VL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "call_id": "widget-8c2f1a7e-4b3d-4e21-9c0a-5f6d7e8a9b0c",
  "category": "inaccurate",
  "comment": "The quoted price is last year'\''s.",
  "turn_id": "t3"
}'

Παράδειγμα απόκρισης

{
  "answer_text": "Our premium plan costs …",
  "call_id": "widget-8c2f…",
  "category": "inaccurate",
  "id": "fbr_9d8c7b6a",
  "snapshot_source": "transcript",
  "status": "open",
  "turn_id": "t3"
}

GET /v1/feedback/reports/{id}#

Get an inaccuracy report. One report, snapshot included.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
id path string Ναι Report id.

Αποκρίσεις

Κωδικός Περιγραφή
200 Success.
401 Missing or invalid API key.
404 No report with that id (report_not_found).
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl "https://api.voiceland.ai/v1/feedback/reports/{id}" \
  -H "Authorization: Bearer VL_API_KEY"

Παράδειγμα απόκρισης

{
  "category": "inaccurate",
  "id": "fbr_9d8c7b6a",
  "status": "open",
  "turn_id": "t3"
}

POST /v1/feedback/reports/{id}/resolve#

Resolve an inaccuracy report. Records the review decision: confirmed_wrong (the answer is wrong and becomes a regression case, see GET /feedback/regressions), correct (the answer was fine), or fixed (you corrected the knowledge content, so the expected answer changed). Optionally link the knowledge document that caused it with kb_document_id. **confirmed_wrong with a kb_document_id flags that document for review**: it appears in GET /kb/review-flags with a pointer back to this report, and its cited_wrong_count goes up. kb_document_flagged in the response says whether that happened. It is false when no document was named or the document no longer exists, and the decision itself is recorded either way. **A decision is one-shot**: resolving an already-resolved report answers 409.

Παράμετροι

Όνομα Θέση Τύπος Απαιτείται Περιγραφή
id path string Ναι Report id.

Σώμα αιτήματος

application/json Σχήμα: FeedbackResolveRequest

Πεδίο Τύπος Απαιτείται Περιγραφή
kb_document_id string
note string
resolution string Ναι
resolved_by string

Αποκρίσεις

Κωδικός Περιγραφή
200 The resolved report.
401 Missing or invalid API key.
404 No report with that id (report_not_found).
409 The report is already resolved (already_resolved).
422 resolution is not confirmed_wrong, correct or fixed (invalid_resolution).
4XX Request error (validation, not-found, etc.).
5XX Server or upstream error.

Παράδειγμα αιτήματος

curl -X POST "https://api.voiceland.ai/v1/feedback/reports/{id}/resolve" \
  -H "Authorization: Bearer VL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kb_document_id": "doc_4b1e77a0",
  "note": "Doc quotes the 2024 price list.",
  "resolution": "confirmed_wrong",
  "resolved_by": "maria@acme.example"
}'

Η επιτυχής απόκριση επιστρέφει ένα FeedbackResolveResponse.

Παράδειγμα απόκρισης

{
  "id": "fbr_9d8c7b6a",
  "kb_document_flagged": true,
  "kb_document_id": "doc_4b1e77a0",
  "status": "confirmed_wrong"
}

Σχήματα#

AnswerFeedback#

Πεδίο Τύπος Απαιτείται Περιγραφή
agent_name string
author_id string Ναι
author_kind string Ναι
call_id string Ναι
category string
comment string
created_at string (date-time)
rating string Ναι
rating_kind string Ναι
score integer Ναι
tenant_slug string Ναι
turn_id string Ναι
turn_role string Ναι
updated_at string (date-time)

AnswerFeedbackReport#

Πεδίο Τύπος Απαιτείται Περιγραφή
agent_name string
answer_text string
call_id string
call_id_hash string Ναι
category string Ναι
comment string
created_at string (date-time)
erased boolean
id string Ναι
kb_document_id string
reporter_id string
reporter_kind string Ναι
resolution_note string
resolved_at string (date-time)
resolved_by string
snapshot_source string Ναι
sources array of TranscriptSource
status string Ναι
tenant_slug string Ναι
turn_id string Ναι
turn_role string
updated_at string (date-time)

Error#

Error envelope returned for non-2xx responses.

Πεδίο Τύπος Απαιτείται Περιγραφή
error object Ναι

FeedbackAgentAnalytics#

Πεδίο Τύπος Απαιτείται Περιγραφή
agent string Ναι
average_score number Ναι
down integer Ναι
rated integer Ναι
satisfaction_rate number Ναι
up integer Ναι

FeedbackAnalyticsResponse#

Πεδίο Τύπος Απαιτείται Περιγραφή
human_turns_excluded integer Ναι
items array of FeedbackAgentAnalytics Ναι
scanned integer Ναι
truncated boolean Ναι
worst array of FeedbackWorstItem Ναι

FeedbackListResponse#

Πεδίο Τύπος Απαιτείται Περιγραφή
items array of AnswerFeedback Ναι
next_cursor string Ναι

FeedbackRegressionCase#

Πεδίο Τύπος Απαιτείται Περιγραφή
agent string
answer_text string
call_id string
call_id_hash string Ναι
category string Ναι
erased boolean
id string Ναι
kb_document_id string
note string
reported_at string (date-time) Ναι
resolved_at string (date-time) Ναι
resolved_by string
sources array of TranscriptSource
turn_id string Ναι

FeedbackRegressionsResponse#

Πεδίο Τύπος Απαιτείται Περιγραφή
items array of FeedbackRegressionCase Ναι
next_cursor string Ναι

FeedbackReportCreateRequest#

Πεδίο Τύπος Απαιτείται Περιγραφή
agent string
author string
call_id string Ναι
category string
comment string
turn_id string Ναι

FeedbackReportsResponse#

Πεδίο Τύπος Απαιτείται Περιγραφή
items array of AnswerFeedbackReport Ναι
next_cursor string Ναι

FeedbackResolveRequest#

Πεδίο Τύπος Απαιτείται Περιγραφή
kb_document_id string
note string
resolution string Ναι
resolved_by string

FeedbackResolveResponse#

Πεδίο Τύπος Απαιτείται Περιγραφή
agent_name string
answer_text string
call_id string
call_id_hash string Ναι
category string Ναι
comment string
created_at string (date-time)
erased boolean
id string Ναι
kb_document_flagged boolean Ναι
kb_document_id string
reporter_id string
reporter_kind string Ναι
resolution_note string
resolved_at string (date-time)
resolved_by string
snapshot_source string Ναι
sources array of TranscriptSource
status string Ναι
tenant_slug string Ναι
turn_id string Ναι
turn_role string
updated_at string (date-time)

FeedbackSubmitRequest#

Πεδίο Τύπος Απαιτείται Περιγραφή
agent string
author string
call_id string Ναι
category string
comment string
rating string
score integer
turn_id string Ναι

FeedbackWorstItem#

Πεδίο Τύπος Απαιτείται Περιγραφή
agent string
call_id string Ναι
category string
comment string
rating string Ναι
score integer Ναι
turn_id string Ναι

TranscriptSource#

Πεδίο Τύπος Απαιτείται Περιγραφή
chunk_id string Ναι
document_id string Ναι
index integer Ναι
title string
url string

Η κονσόλα

Οι σελίδες αυτές είναι μόνο για ανάγνωση. Η δοκιμαστική κλήση, τα κλειδιά API και η ζωντανή αναφορά API βρίσκονται στην κονσόλα, όπου ο λογαριασμός σας είναι συνδεδεμένος.

Άνοιγμα κονσόλας