curl --request POST \
--url https://public.api.live.turrisfi.com/v2/upstream/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/upstream/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/upstream/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": {
"_id": "6650a1b2c3d4e5f6a7b8c9d0",
"policyNumber": "POL-2025-001",
"stateCode": "CA",
"policyTransactionType": "bind",
"status": "in progress",
"actionRequired": true,
"updatedAt": "2025-06-15T12:00:00.000Z",
"namedInsured": "Example Corp",
"carrier": "Lloyds of London",
"carrierNaicCode": "12345",
"grossPremium": 5000,
"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": "EXT-REF-12345",
"effectiveDate": "2025-01-01T00:00:00.000Z",
"totalTaxDue": 123,
"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/upstream/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/upstream/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/upstream/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": {
"_id": "6650a1b2c3d4e5f6a7b8c9d0",
"policyNumber": "POL-2025-001",
"stateCode": "CA",
"policyTransactionType": "bind",
"status": "in progress",
"actionRequired": true,
"updatedAt": "2025-06-15T12:00:00.000Z",
"namedInsured": "Example Corp",
"carrier": "Lloyds of London",
"carrierNaicCode": "12345",
"grossPremium": 5000,
"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": "EXT-REF-12345",
"effectiveDate": "2025-01-01T00:00:00.000Z",
"totalTaxDue": 123,
"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 or unknown, the same response as an unrecognized filingId. An item with no escalation, or with a resolved escalation, is refused with 400.
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, the checklist item has no escalation, or the escalation is already resolved.
Filing or Escalation Not Found (404)
Returned whenfilingId does not exist, belongs to a different upstream entity, or the checklist item identified by sourceCategoryId / sourceTaskId is private or unknown.
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?