curl --request POST \
--url https://public.api.live.turrisfi.com/v2/downstream/surplus-lines-filings/{filingId}/escalation/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form sourceCategoryId=6650a1b2c3d4e5f6a7b8c9d0 \
--form sourceTaskId=6650a1b2c3d4e5f6a7b8c9d1 \
--form 'body=Signed form attached.' \
--form 'files=<string>' \
--form files.items='@example-file'const form = new FormData();
form.append('sourceCategoryId', '6650a1b2c3d4e5f6a7b8c9d0');
form.append('sourceTaskId', '6650a1b2c3d4e5f6a7b8c9d1');
form.append('body', 'Signed form attached.');
form.append('files', '<string>');
form.append('files.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://public.api.live.turrisfi.com/v2/downstream/surplus-lines-filings/{filingId}/escalation/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://public.api.live.turrisfi.com/v2/downstream/surplus-lines-filings/{filingId}/escalation/messages"
files = { "files.items": ("example-file", open("example-file", "rb")) }
payload = {
"sourceCategoryId": "6650a1b2c3d4e5f6a7b8c9d0",
"sourceTaskId": "6650a1b2c3d4e5f6a7b8c9d1",
"body": "Signed form attached.",
"files": "<string>"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text){
"data": {
"filingId": "6650a1b2c3d4e5f6a7b8c9d0",
"downstreamEntityId": "6610b3d2c2e0a51b8c0d1f02",
"policyNumber": "POL-123456",
"stateCode": "PA",
"policyTransactionType": "bind",
"status": "not started",
"actionRequired": false,
"updatedAt": "2026-06-01T12:00:00.000Z",
"namedInsured": "Example Corp",
"carrier": "Example Mutual Insurance Company",
"carrierNaicCode": "12345",
"grossPremium": 25000,
"escalations": [
{
"checklistItemLabel": "<string>",
"status": "waiting customer input",
"messages": [
{
"authorLabel": "Turris",
"body": "<string>",
"createdAt": "2025-06-01T12:00:00.000Z"
}
],
"openedAt": "<string>",
"resolvedAt": "<string>"
}
],
"completionArtifacts": [
{
"type": "accepted stamped",
"fileName": "stamped-filing.pdf",
"uploadedAt": "2025-06-15T09:00:00.000Z",
"downloadUrl": "<string>",
"viewUrl": "<string>"
}
],
"checklist": [
{
"sourceCategoryId": "6650a1b2c3d4e5f6a7b8c9d0",
"name": "Documents we need from you",
"tone": "primary",
"order": 0,
"items": [
{
"sourceCategoryId": "6650a1b2c3d4e5f6a7b8c9d0",
"sourceTaskId": "6650a1b2c3d4e5f6a7b8c9d1",
"label": "Signed diligent search affidavit",
"required": true,
"order": 0,
"checked": false,
"referenceFields": [
{
"label": "Policy limit",
"value": "<string>"
}
],
"templateFiles": [
{
"id": "6650a1b2c3d4e5f6a7b8c9d0",
"fileName": "diligent-search-form.pdf",
"mimeType": "application/pdf",
"fileSize": 248310,
"description": "<string>",
"downloadUrl": "<string>",
"viewUrl": "<string>"
}
],
"attachments": [
{
"_id": "6650a1b2c3d4e5f6a7b8c9d0",
"fileName": "signed-form.pdf",
"uploadedByType": "customer",
"uploadedAt": "2026-06-01T12:00:00.000Z",
"authorLabel": "Turris",
"downloadUrl": "<string>",
"viewUrl": "<string>"
}
],
"checkedAt": "2026-06-01T12:00:00.000Z",
"escalation": {
"checklistItemLabel": "<string>",
"status": "waiting customer input",
"messages": [
{
"authorLabel": "Turris",
"body": "<string>",
"createdAt": "2025-06-01T12:00:00.000Z"
}
],
"openedAt": "<string>",
"resolvedAt": "<string>"
}
}
]
}
],
"checklistProgress": {
"checked": 3,
"total": 5
},
"externalReference": "REF-2026-0001",
"effectiveDate": "2026-01-01T00:00:00.000Z",
"totalTaxDue": 875.5,
"policyDocument": {
"fileName": "policy-12345.pdf",
"uploadedByType": "customer",
"uploadedAt": "2025-06-15T09:00:00.000Z",
"downloadUrl": "<string>",
"viewUrl": "<string>"
}
},
"requestId": "dev-2c5e7cf2-9acf-4c8c-ab2f-b81f39d775a8",
"timestamp": "2025-11-12T20:49:03.293Z"
}{
"statusCode": 123,
"requestId": "<string>",
"errorType": "validation_error",
"errorMessage": [
"<string>"
],
"timestamp": "<string>",
"details": {}
}{
"statusCode": 123,
"requestId": "<string>",
"errorType": "validation_error",
"errorMessage": [
"<string>"
],
"timestamp": "<string>",
"details": {}
}{
"statusCode": 123,
"requestId": "<string>",
"errorType": "validation_error",
"errorMessage": [
"<string>"
],
"timestamp": "<string>",
"details": {}
}{
"statusCode": 123,
"requestId": "<string>",
"errorType": "validation_error",
"errorMessage": [
"<string>"
],
"timestamp": "<string>",
"details": {}
}{
"statusCode": 123,
"requestId": "<string>",
"errorType": "validation_error",
"errorMessage": [
"<string>"
],
"timestamp": "<string>",
"details": {}
}Reply to a Checklist Item Escalation
Reply to an open escalation thread, with an optional message and files
curl --request POST \
--url https://public.api.live.turrisfi.com/v2/downstream/surplus-lines-filings/{filingId}/escalation/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form sourceCategoryId=6650a1b2c3d4e5f6a7b8c9d0 \
--form sourceTaskId=6650a1b2c3d4e5f6a7b8c9d1 \
--form 'body=Signed form attached.' \
--form 'files=<string>' \
--form files.items='@example-file'const form = new FormData();
form.append('sourceCategoryId', '6650a1b2c3d4e5f6a7b8c9d0');
form.append('sourceTaskId', '6650a1b2c3d4e5f6a7b8c9d1');
form.append('body', 'Signed form attached.');
form.append('files', '<string>');
form.append('files.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://public.api.live.turrisfi.com/v2/downstream/surplus-lines-filings/{filingId}/escalation/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://public.api.live.turrisfi.com/v2/downstream/surplus-lines-filings/{filingId}/escalation/messages"
files = { "files.items": ("example-file", open("example-file", "rb")) }
payload = {
"sourceCategoryId": "6650a1b2c3d4e5f6a7b8c9d0",
"sourceTaskId": "6650a1b2c3d4e5f6a7b8c9d1",
"body": "Signed form attached.",
"files": "<string>"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text){
"data": {
"filingId": "6650a1b2c3d4e5f6a7b8c9d0",
"downstreamEntityId": "6610b3d2c2e0a51b8c0d1f02",
"policyNumber": "POL-123456",
"stateCode": "PA",
"policyTransactionType": "bind",
"status": "not started",
"actionRequired": false,
"updatedAt": "2026-06-01T12:00:00.000Z",
"namedInsured": "Example Corp",
"carrier": "Example Mutual Insurance Company",
"carrierNaicCode": "12345",
"grossPremium": 25000,
"escalations": [
{
"checklistItemLabel": "<string>",
"status": "waiting customer input",
"messages": [
{
"authorLabel": "Turris",
"body": "<string>",
"createdAt": "2025-06-01T12:00:00.000Z"
}
],
"openedAt": "<string>",
"resolvedAt": "<string>"
}
],
"completionArtifacts": [
{
"type": "accepted stamped",
"fileName": "stamped-filing.pdf",
"uploadedAt": "2025-06-15T09:00:00.000Z",
"downloadUrl": "<string>",
"viewUrl": "<string>"
}
],
"checklist": [
{
"sourceCategoryId": "6650a1b2c3d4e5f6a7b8c9d0",
"name": "Documents we need from you",
"tone": "primary",
"order": 0,
"items": [
{
"sourceCategoryId": "6650a1b2c3d4e5f6a7b8c9d0",
"sourceTaskId": "6650a1b2c3d4e5f6a7b8c9d1",
"label": "Signed diligent search affidavit",
"required": true,
"order": 0,
"checked": false,
"referenceFields": [
{
"label": "Policy limit",
"value": "<string>"
}
],
"templateFiles": [
{
"id": "6650a1b2c3d4e5f6a7b8c9d0",
"fileName": "diligent-search-form.pdf",
"mimeType": "application/pdf",
"fileSize": 248310,
"description": "<string>",
"downloadUrl": "<string>",
"viewUrl": "<string>"
}
],
"attachments": [
{
"_id": "6650a1b2c3d4e5f6a7b8c9d0",
"fileName": "signed-form.pdf",
"uploadedByType": "customer",
"uploadedAt": "2026-06-01T12:00:00.000Z",
"authorLabel": "Turris",
"downloadUrl": "<string>",
"viewUrl": "<string>"
}
],
"checkedAt": "2026-06-01T12:00:00.000Z",
"escalation": {
"checklistItemLabel": "<string>",
"status": "waiting customer input",
"messages": [
{
"authorLabel": "Turris",
"body": "<string>",
"createdAt": "2025-06-01T12:00:00.000Z"
}
],
"openedAt": "<string>",
"resolvedAt": "<string>"
}
}
]
}
],
"checklistProgress": {
"checked": 3,
"total": 5
},
"externalReference": "REF-2026-0001",
"effectiveDate": "2026-01-01T00:00:00.000Z",
"totalTaxDue": 875.5,
"policyDocument": {
"fileName": "policy-12345.pdf",
"uploadedByType": "customer",
"uploadedAt": "2025-06-15T09:00:00.000Z",
"downloadUrl": "<string>",
"viewUrl": "<string>"
}
},
"requestId": "dev-2c5e7cf2-9acf-4c8c-ab2f-b81f39d775a8",
"timestamp": "2025-11-12T20:49:03.293Z"
}{
"statusCode": 123,
"requestId": "<string>",
"errorType": "validation_error",
"errorMessage": [
"<string>"
],
"timestamp": "<string>",
"details": {}
}{
"statusCode": 123,
"requestId": "<string>",
"errorType": "validation_error",
"errorMessage": [
"<string>"
],
"timestamp": "<string>",
"details": {}
}{
"statusCode": 123,
"requestId": "<string>",
"errorType": "validation_error",
"errorMessage": [
"<string>"
],
"timestamp": "<string>",
"details": {}
}{
"statusCode": 123,
"requestId": "<string>",
"errorType": "validation_error",
"errorMessage": [
"<string>"
],
"timestamp": "<string>",
"details": {}
}{
"statusCode": 123,
"requestId": "<string>",
"errorType": "validation_error",
"errorMessage": [
"<string>"
],
"timestamp": "<string>",
"details": {}
}multipart/form-data: sourceCategoryId, sourceTaskId, and an optional body, plus zero or more files parts. At least one of body or files is expected. A plain application/json body carrying just sourceCategoryId, sourceTaskId, and body also works, with no files key.
Identifying the checklist item
sourceCategoryId and sourceTaskId come from the filingโs own checklist, returned by Get a Surplus-Lines Filing, the same pair used by Attach Files to a Checklist Item. Resolve them against the checklist of the specific filingId in the request path.
A reply is refused with 404 when the checklist item is private, unknown, or has no open escalation, the same response as a filingId your subtree did not file. A resolved escalation cannot be replied to.
Limits
Files attached to a reply follow the same rules as the attachment endpoint:Allowed types
10 MB per file
idempotency-key header, duplicate requests within 1 hour return the original response without reprocessing. See Idempotency.
Error Scenarios
Bad Request (400)
Returned whenfilingId is not a valid MongoDB ObjectId, a fileโs type is not on the allowed list, or the escalation is already resolved.
Filing or Escalation Not Found (404)
Returned whenfilingId does not exist, was not filed by your subtree, or the checklist item identified by sourceCategoryId / sourceTaskId is private, unknown, or has no open escalation.
Payload Too Large (413)
Returned when any attached file exceeds 10 MB.Unauthorized (401)
Missing or invalid authentication token. See Authentication.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
UUID to ensure idempotent request processing
"550e8400-e29b-41d4-a716-446655440000"
Alternative UUID header for idempotent request processing
"550e8400-e29b-41d4-a716-446655440000"
Path Parameters
Unique identifier of the surplus-lines filing
"6650a1b2c3d4e5f6a7b8c9d0"
Body
sourceCategoryId of the checklist item, from the filing checklist response
"6650a1b2c3d4e5f6a7b8c9d0"
sourceTaskId of the checklist item, from the filing checklist response
"6650a1b2c3d4e5f6a7b8c9d1"
Reply message text; omit when the reply carries only file attachments
"Signed form attached."
Optional files to attach to the reply. Maximum 10MB per file.
Was this page helpful?