Skip to main content
POST
/
api
/
v1
/
form-filling
/
session
/
{ambient_session_id}
/
{entity}
/
feedback
Submits feedback for a form-filling session.
curl --request POST \
  --url https://sdp.suki-stage.com/api/v1/form-filling/session/{ambient_session_id}/{entity}/feedback \
  --header 'Content-Type: application/json' \
  --header 'sdp_suki_token: <sdp_suki_token>' \
  --data '
{
  "feedback": {
    "qualitative_comments": "Accurate and well-structured form output.",
    "ratingFeedback": {
      "min_rating": 1,
      "max_rating": 5,
      "rating": 5
    }
  },
  "feedback_metadata": {
    "form_id": "018f94e8-7aa8-7bfd-bc83-046262001234"
  }
}
'
{
  "feedback_id": "<string>"
}

Documentation Index

Fetch the complete documentation index at: https://developer.suki.ai/llms.txt

Use this file to discover all available pages before exploring further.

Use this endpoint to submit feedback for a form-filling ambient session. This endpoint calls SubmitFormFillingFeedback, which is separate from the ambient SubmitFeedback API.

Requirements

  • ambient_session_id must reference a form-filling session with the underlying job type FORM_FILLING_ORCHESTRATION. If the session type does not match, the API returns a FailedPrecondition error.
  • Set entity to AMBIENT_GENERATED_MEDICAL_FORM when submitting feedback for a generated medical form.
  • feedback_metadata.form_id is required when entity is AMBIENT_GENERATED_MEDICAL_FORM. Pass the generated medical form instance ID. The API uses this ID to load the form details before forwarding the request to the feedback service.
On success, the API returns a feedback_id. The value matches the provided ambient_session_id, consistent with the ambient feedback API behavior. For rating scale guidance, refer to Form filling feedback section.

Code examples

The code examples below use placeholders and the stage host sdp.suki-stage.com only as examples. For credentials, base URLs, where to run Python or TypeScript, CORS, and cURL, refer to Using code examples in your integration in the API Reference Guidelines.
from typing import Any, TypedDict, cast

import requests

BASE_URL = "https://sdp.suki-stage.com"

ENTITY_AMBIENT_GENERATED_MEDICAL_FORM = "AMBIENT_GENERATED_MEDICAL_FORM"


class QuantitativeFeedback(TypedDict, total=False):
    max_rating: int
    min_rating: int
    rating: int


class Feedback(TypedDict, total=False):
    qualitative_comments: str
    ratingFeedback: QuantitativeFeedback


class FeedbackMetadata(TypedDict):
    form_id: str


class FormFillingFeedbackPayload(TypedDict):
    feedback: Feedback
    feedback_metadata: FeedbackMetadata


class SubmitFeedbackResponse(TypedDict):
    feedback_id: str


class ApiHttpError(RuntimeError):
    """Wrong HTTP status; OpenAPI errors usually include JSON with message + code."""

    def __init__(self, status: int, url: str, detail: str) -> None:
        super().__init__(f"HTTP {status} {url}: {detail}")
        self.status = status
        self.url = url


def _post_json_expect(url: str, headers: dict[str, str], payload: dict[str, Any], expect_status: int) -> dict[str, Any]:
    r = requests.post(url, json=payload, headers=headers, timeout=60)
    if r.status_code == expect_status:
        data = r.json()
        if isinstance(data, dict):
            return data
        raise ApiHttpError(expect_status, url, "response JSON was not an object")

    detail = ""
    try:
        err = r.json()
        if isinstance(err, dict) and isinstance(err.get("message"), str):
            detail = err["message"]
    except ValueError:
        detail = (r.text or "")[:500]
    raise ApiHttpError(r.status_code, url, detail or "(no body)")


def submit_form_filling_feedback(
    suki_token: str,
    ambient_session_id: str,
    entity: str,
    body: FormFillingFeedbackPayload,
) -> SubmitFeedbackResponse:
    """POST /api/v1/form-filling/session/{ambient_session_id}/{entity}/feedback (sdp_suki_token header required). HTTP 201."""
    url = f"{BASE_URL}/api/v1/form-filling/session/{ambient_session_id}/{entity}/feedback"
    headers = {"sdp_suki_token": suki_token, "Content-Type": "application/json"}
    data = _post_json_expect(url, headers, dict(body), 201)
    fid = data.get("feedback_id")
    if not isinstance(fid, str) or not fid:
        raise ValueError(f"{url}: 201 response missing feedback_id")
    return cast(SubmitFeedbackResponse, {"feedback_id": fid})


if __name__ == "__main__":
    try:
        out = submit_form_filling_feedback(
            "YOUR_SUKI_TOKEN",
            "YOUR_AMBIENT_SESSION_ID",
            ENTITY_AMBIENT_GENERATED_MEDICAL_FORM,
            {
                "feedback": {
                    "qualitative_comments": "Accurate and well-structured form output.",
                    "ratingFeedback": {"min_rating": 1, "max_rating": 5, "rating": 5},
                },
                "feedback_metadata": {
                    "form_id": "018f94e8-7aa8-7bfd-bc83-046262001234",
                },
            },
        )
        print(out["feedback_id"])
    except (ApiHttpError, ValueError) as e:
        print(e)

Headers

sdp_suki_token
string
required

sdp_suki_token

Path Parameters

ambient_session_id
string
required

UUID of the form-filling ambient session

entity
string
required

Feedback entity enum string; e.g. AMBIENT_GENERATED_MEDICAL_FORM

Example:

"AMBIENT_GENERATED_MEDICAL_FORM"

Body

application/json

FormFillingFeedbackPayload

JSON body for POST /api/v1/form-filling/session/{ambient_session_id}/{entity}/feedback. Maps to SubmitFormFillingFeedbackRequest.payload over gRPC.

feedback
object
required

Required quantitative and qualitative feedback.

feedback_metadata
object

Required when entity is AMBIENT_GENERATED_MEDICAL_FORM.

Response

Success Response

Response body for /api/v1/form-filling/session/{ambient_session_id}/{entity}/feedback.

feedback_id
string

feedback identifier

Last modified on May 22, 2026