Skip to main content
GET
/
v1
/
policies
/
uploads
/
{uploadId}
cURL
curl --request GET \
  --url https://public.api.live.turrisfi.com/v1/policies/uploads/{uploadId}
{
  "uploadId": "6650a1b2c3d4e5f6a7b8c9d0",
  "status": "COMPLETED",
  "totalRows": 1000,
  "created": 851,
  "updated": 149,
  "failed": 0,
  "errors": [
    {
      "index": 47,
      "error": "Missing required field: riskStateCode",
      "policyNumber": "POL-2025-001"
    }
  ],
  "createdAt": "2025-01-15T10:30:00.000Z",
  "updatedAt": "2025-01-15T10:31:45.000Z"
}
Poll this endpoint to track the progress of a file upload initiated via Upload Policy File. Returns the current processing status, record counts, and any errors encountered during ingestion.

Polling Strategy

Recommended interval: Poll every 3-5 seconds while status is QUEUED or PROCESSING. Stop polling once the status reaches a terminal state (COMPLETED, COMPLETED_WITH_FAILURES, FAILED, or CANCELLED) or a paused state (NEEDS_CLARIFICATION).
1

QUEUED

Upload received, waiting for a worker to pick it up.
2

PROCESSING

Worker is actively parsing the file and creating policies and transactions.
3

Terminal state reached

Processing ends with one of: COMPLETED, COMPLETED_WITH_FAILURES, FAILED, or CANCELLED. The status NEEDS_CLARIFICATION means processing is paused awaiting user input. Stop polling and inspect the response.

Status Values

StatusTerminal?Description
QUEUEDNoUpload received, waiting for a worker to pick it up
PROCESSINGNoWorker is actively parsing the file and creating policies/transactions
COMPLETEDYesAll rows processed successfully
COMPLETED_WITH_FAILURESYesProcessing finished but some rows failed — check errors array
NEEDS_CLARIFICATIONNoProcessing paused — AI matching requires user input to continue
FAILEDYesProcessing failed entirely
CANCELLEDYesProcessing was cancelled

Response Shape

All successful responses are wrapped in the standard response envelope. See Request/Response Conventions.
{
  "statusCode": 200,
  "data": {
    "uploadId": "6650a1b2c3d4e5f6a7b8c9d0",
    "status": "COMPLETED",
    "totalRows": 1000,
    "created": 851,
    "updated": 149,
    "failed": 0,
    "errors": [],
    "createdAt": "2025-01-15T10:30:00.000Z",
    "updatedAt": "2025-01-15T10:31:45.000Z"
  },
  "timestamp": "2025-01-15T10:31:50.000Z"
}

Response Fields

FieldTypeDescription
uploadIdstringThe upload request ID
statusstringCurrent processing status (see table above)
totalRowsnumberTotal number of data rows in the uploaded file
creatednumberNumber of new policies created
updatednumberNumber of existing policies updated (duplicate policyNumber re-uploads)
failednumberNumber of rows that failed processing
errorsarrayDetails about individual row failures (see below)
createdAtstringISO 8601 timestamp when the upload was initiated
updatedAtstringISO 8601 timestamp of the last status update

Error Object

Each entry in the errors array describes a single row failure:
FieldTypeDescription
indexnumberZero-based index of the failed row
policyNumberstring?Policy number from the failed row (if available)
errorstringHuman-readable error message

Example Responses

In Progress

{
  "statusCode": 200,
  "data": {
    "uploadId": "6650a1b2c3d4e5f6a7b8c9d0",
    "status": "PROCESSING",
    "totalRows": 1000,
    "created": 342,
    "updated": 58,
    "failed": 0,
    "errors": [],
    "createdAt": "2025-01-15T10:30:00.000Z",
    "updatedAt": "2025-01-15T10:30:45.000Z"
  }
}

Completed With Failures

{
  "statusCode": 200,
  "data": {
    "uploadId": "6650a1b2c3d4e5f6a7b8c9d0",
    "status": "COMPLETED_WITH_FAILURES",
    "totalRows": 1000,
    "created": 845,
    "updated": 147,
    "failed": 8,
    "errors": [
      {
        "index": 0,
        "policyNumber": "POL-2025-001",
        "error": "Missing required field: riskStateCode"
      },
      {
        "index": 47,
        "policyNumber": "POL-2025-048",
        "error": "Invalid date format for policyTransactionDate"
      }
    ],
    "createdAt": "2025-01-15T10:30:00.000Z",
    "updatedAt": "2025-01-15T10:31:45.000Z"
  }
}

Error Scenarios

Upload Not Found (404)

Returned when uploadId doesn’t exist or belongs to a different upstream entity.
{
  "statusCode": 404,
  "errorType": "not_found",
  "errorMessage": ["Upload not found"],
  "requestId": "dev-abc123",
  "timestamp": "2025-01-15T10:30:00.000Z"
}

Unauthorized (401)

Missing or invalid authentication token. See Authentication.

Path Parameters

uploadId
string
required

ID of the upload request returned by POST /policies/upload

Example:

"6650a1b2c3d4e5f6a7b8c9d0"

Response

Upload processing status with record counts and errors

uploadId
string
required

ID of the upload request

Example:

"6650a1b2c3d4e5f6a7b8c9d0"

status
enum<string>
required

Current processing status

Available options:
QUEUED,
PROCESSING,
COMPLETED,
COMPLETED_WITH_FAILURES,
NEEDS_CLARIFICATION,
CANCELLED,
FAILED
Example:

"COMPLETED"

totalRows
number
required

Total number of data rows in the uploaded file

Example:

1000

created
number
required

Number of new policies created

Example:

851

updated
number
required

Number of existing policies updated (duplicate policyNumber re-uploads)

Example:

149

failed
number
required

Number of rows that failed processing

Example:

0

errors
object[]
required

Details about individual row failures

createdAt
string
required

ISO 8601 timestamp when the upload was initiated

Example:

"2025-01-15T10:30:00.000Z"

updatedAt
string
required

ISO 8601 timestamp of the last status update

Example:

"2025-01-15T10:31:45.000Z"