Form Filling Session Management
Update Form Filling Session Context
Partially update form-filling session context using the form-filling URL binding
PATCH
/
api
/
v1
/
form-filling
/
session
/
{ambient_session_id}
/
context
Updates context for the form-filling session.
curl --request PATCH \
--url https://sdp.suki-stage.com/api/v1/form-filling/session/{ambient_session_id}/context \
--header 'Content-Type: application/json' \
--header 'sdp_suki_token: <sdp_suki_token>' \
--data '{}'{
"context": {
"form_filling": {
"values": [
{
"form_template_id": "019d4cdc-9319-7d81-ae2e-fd6de7f1b4f0"
}
]
}
}
}Use this endpoint to partially update the for form-filling sessions. Providing detailed context helps Suki generate a more accurate and relevant . This is a PATCH operation that allows partial updates to the session context.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.
The body of this request is optional. However, if you decide to provide context, you must provide valid values for the properties.
- Python
- TypeScript
from typing import Any, Optional, TypedDict, cast
import requests
BASE_URL = "https://sdp.suki-stage.com"
class FormFillingMetadata(TypedDict):
form_template_id: str
class FormFillingContext(TypedDict):
values: list[FormFillingMetadata]
class FormFillingUpdateContextRequest(TypedDict, total=False):
form_filling: FormFillingContext
class FormFillingReturnedContext(TypedDict, total=False):
form_filling: FormFillingContext
class FormFillingUpdateContextResponse(TypedDict):
context: FormFillingReturnedContext
class ApiHttpError(RuntimeError):
def __init__(self, status: int, url: str, detail: str) -> None:
super().__init__(f"HTTP {status} {url}: {detail}")
self.status = status
self.url = url
def _patch_json_expect(
url: str,
headers: dict[str, str],
payload: dict[str, Any],
expect_status: int,
) -> dict[str, Any]:
r = requests.patch(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 login_for_suki_token(partner_id: str, partner_token: str, *, provider_id: Optional[str] = None) -> str:
url = f"{BASE_URL}/api/v1/auth/login"
body: dict[str, Any] = {"partner_id": partner_id, "partner_token": partner_token}
if provider_id is not None:
body["provider_id"] = provider_id
r = requests.post(url, json=body, headers={"Content-Type": "application/json"}, timeout=60)
if r.status_code != 200:
raise ApiHttpError(r.status_code, url, (r.text or "")[:500] or "(no body)")
data = r.json()
token = data.get("suki_token") if isinstance(data, dict) else None
if not isinstance(token, str) or not token:
raise ValueError(f"{url}: 200 response missing suki_token")
return token
def update_form_filling_session_context(
suki_token: str,
ambient_session_id: str,
body: FormFillingUpdateContextRequest,
) -> FormFillingUpdateContextResponse:
"""PATCH /api/v1/form-filling/session/{ambient_session_id}/context. HTTP 200 returns FormFillingUpdateContextResponse."""
url = f"{BASE_URL}/api/v1/form-filling/session/{ambient_session_id}/context"
headers = {"sdp_suki_token": suki_token, "Content-Type": "application/json"}
data = _patch_json_expect(url, headers, dict(body), 200)
ctx = data.get("context")
if not isinstance(ctx, dict):
raise ValueError(f"{url}: 200 response missing context")
return cast(FormFillingUpdateContextResponse, {"context": cast(FormFillingReturnedContext, ctx)})
if __name__ == "__main__":
try:
token = login_for_suki_token("<partner_id>", "<partner_token>")
out = update_form_filling_session_context(
token,
ambient_session_id="<ambient_session_id>",
body={
"form_filling": {
"values": [
{"form_template_id": "019d4cdc-9319-7d81-ae2e-fd6de7f1b4f0"},
]
}
},
)
form_filling = out["context"].get("form_filling")
print(form_filling)
except (ApiHttpError, ValueError) as e:
print(e)
const BASE_URL = "https://sdp.suki-stage.com";
type FormFillingMetadata = { form_template_id: string };
type FormFillingContext = { values: FormFillingMetadata[] };
type FormFillingUpdateContextRequest = { form_filling?: FormFillingContext };
type FormFillingReturnedContext = { form_filling?: FormFillingContext };
type FormFillingUpdateContextResponse = { context: FormFillingReturnedContext };
class ApiHttpError extends Error {
status: number;
url: string;
constructor(status: number, url: string, detail: string) {
super(`HTTP ${status} ${url}: ${detail}`);
this.status = status;
this.url = url;
}
}
async function patchJsonExpectObject(
url: string,
init: RequestInit,
expectStatus: number,
): Promise<Record<string, unknown>> {
const res = await fetch(url, init);
const text = await res.text();
if (res.status !== expectStatus) {
let msg = text.slice(0, 500);
try {
const data: unknown = text ? JSON.parse(text) : null;
if (data && typeof data === "object" && "message" in data) {
msg = String((data as { message?: string }).message ?? msg);
}
} catch {
// keep raw text
}
throw new ApiHttpError(res.status, url, msg || "(no body)");
}
if (!text) throw new ApiHttpError(res.status, url, "(empty body)");
const data: unknown = JSON.parse(text);
if (data && typeof data === "object" && !Array.isArray(data)) {
return data as Record<string, unknown>;
}
throw new ApiHttpError(res.status, url, "response JSON was not an object");
}
async function loginForSukiToken(body: {
partner_id: string;
partner_token: string;
provider_id?: string;
}): Promise<string> {
const url = `${BASE_URL}/api/v1/auth/login`;
const json = await patchJsonExpectObject(
url,
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
},
200,
);
const token = json.suki_token;
if (typeof token !== "string" || !token) throw new Error(`${url}: missing suki_token`);
return token;
}
async function updateFormFillingSessionContext(
sukiToken: string,
ambientSessionId: string,
body: FormFillingUpdateContextRequest,
): Promise<FormFillingUpdateContextResponse> {
const url = `${BASE_URL}/api/v1/form-filling/session/${ambientSessionId}/context`;
const json = await patchJsonExpectObject(
url,
{
method: "PATCH",
headers: {
sdp_suki_token: sukiToken,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
},
200,
);
const context = json.context;
if (!context || typeof context !== "object" || Array.isArray(context)) {
throw new Error(`${url}: 200 response missing context`);
}
return { context: context as FormFillingReturnedContext };
}
async function main(): Promise<void> {
try {
const token = await loginForSukiToken({
partner_id: "<partner_id>",
partner_token: "<partner_token>",
});
const out = await updateFormFillingSessionContext(token, "<ambient_session_id>", {
form_filling: {
values: [{ form_template_id: "019d4cdc-9319-7d81-ae2e-fd6de7f1b4f0" }],
},
});
console.log(out.context.form_filling);
} catch (e) {
console.error(e instanceof Error ? e.message : e);
}
}
void main();
Headers
sdp_suki_token
Path Parameters
ambient_session_id
Body
application/json
FormFillingUpdateContextRequest
Optional - Form template metadata for the session.
Show child attributes
Show child attributes
Response
Success Response
Response body for the /api/v1/form-filling/session/{ambient_session_id}/context PATCH endpoint
Updated context for the form-filling session
Show child attributes
Show child attributes
Last modified on May 22, 2026
⌘I
Updates context for the form-filling session.
curl --request PATCH \
--url https://sdp.suki-stage.com/api/v1/form-filling/session/{ambient_session_id}/context \
--header 'Content-Type: application/json' \
--header 'sdp_suki_token: <sdp_suki_token>' \
--data '{}'{
"context": {
"form_filling": {
"values": [
{
"form_template_id": "019d4cdc-9319-7d81-ae2e-fd6de7f1b4f0"
}
]
}
}
}