Attach files to a checklist item
curl --request POST \
--url https://public.api.live.turrisfi.com/v2/upstream/surplus-lines-filings/{filingId}/checklist-item/attachments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form sourceCategoryId=6650a1b2c3d4e5f6a7b8c9d0 \
--form sourceTaskId=6650a1b2c3d4e5f6a7b8c9d1 \
--form 'files=<string>' \
--form files.items='@example-file'const form = new FormData();
form.append('sourceCategoryId', '6650a1b2c3d4e5f6a7b8c9d0');
form.append('sourceTaskId', '6650a1b2c3d4e5f6a7b8c9d1');
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}/checklist-item/attachments', 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}/checklist-item/attachments"
files = { "files.items": ("example-file", open("example-file", "rb")) }
payload = {
"sourceCategoryId": "6650a1b2c3d4e5f6a7b8c9d0",
"sourceTaskId": "6650a1b2c3d4e5f6a7b8c9d1",
"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": {}
}Surplus Lines Filings
Attach Files to a Checklist Item
Upload files to a public checklist item on a filing
POST
/
v2
/
upstream
/
surplus-lines-filings
/
{filingId}
/
checklist-item
/
attachments
Attach files to a checklist item
curl --request POST \
--url https://public.api.live.turrisfi.com/v2/upstream/surplus-lines-filings/{filingId}/checklist-item/attachments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form sourceCategoryId=6650a1b2c3d4e5f6a7b8c9d0 \
--form sourceTaskId=6650a1b2c3d4e5f6a7b8c9d1 \
--form 'files=<string>' \
--form files.items='@example-file'const form = new FormData();
form.append('sourceCategoryId', '6650a1b2c3d4e5f6a7b8c9d0');
form.append('sourceTaskId', '6650a1b2c3d4e5f6a7b8c9d1');
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}/checklist-item/attachments', 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}/checklist-item/attachments"
files = { "files.items": ("example-file", open("example-file", "rb")) }
payload = {
"sourceCategoryId": "6650a1b2c3d4e5f6a7b8c9d0",
"sourceTaskId": "6650a1b2c3d4e5f6a7b8c9d1",
"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": {}
}Uploads one or more files to a public checklist item on a filing belonging to the authenticated upstream entity. Returns the filing with the new attachments in place.
Send it as
This endpoint supports idempotency. If you include an
multipart/form-data: sourceCategoryId and sourceTaskId as form fields, plus one or more files parts.
Identifying the checklist item
sourceCategoryId and sourceTaskId come from the filing’s own checklist, returned by Get a Surplus Lines Filing. That pair identifies an item within one filing only: both ids come from the state template a filing is built from, so the same pair appears on every filing in that state, across every tenant. Always resolve them against the checklist of the specific filingId you are posting to, never a cached checklist from a different filing.
Checklist content Turris keeps internal is excluded from the checklist response entirely, so there is no id to obtain for it. That applies at two levels: a whole category can be internal, and so can an individual item inside an otherwise-visible category. Posting to a private or unknown item returns 404, the same response as an unrecognized filingId, so a caller cannot distinguish “does not exist” from “not yours to see”.
Limits
Allowed types
PDF, DOC, DOCX, JPEG, PNG. Anything else is rejected with 400 before the body is buffered.
10 MB per file
A file larger than that returns 413.
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, no files are attached, or a file’s type is not on the allowed list.
Filing or Checklist Item 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
bearerrestricted-access-token
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
UUID to ensure idempotent request processing
Example:
"550e8400-e29b-41d4-a716-446655440000"
Alternative UUID header for idempotent request processing
Example:
"550e8400-e29b-41d4-a716-446655440000"
Path Parameters
Unique identifier of the surplus-lines filing
Example:
"6650a1b2c3d4e5f6a7b8c9d0"
Body
multipart/form-data
sourceCategoryId of the checklist item, from the filing checklist response
Example:
"6650a1b2c3d4e5f6a7b8c9d0"
sourceTaskId of the checklist item, from the filing checklist response
Example:
"6650a1b2c3d4e5f6a7b8c9d1"
One or more files to attach. Maximum 10MB per file.
Was this page helpful?