curl --request GET \
--url https://public.api.live.turrisfi.com/v2/upstream/policies/uploads/{uploadId} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://public.api.live.turrisfi.com/v2/upstream/policies/uploads/{uploadId}', 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/policies/uploads/{uploadId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"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"
}{
"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": {}
}Uploading Status
Check the processing status of a file upload
curl --request GET \
--url https://public.api.live.turrisfi.com/v2/upstream/policies/uploads/{uploadId} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://public.api.live.turrisfi.com/v2/upstream/policies/uploads/{uploadId}', 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/policies/uploads/{uploadId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"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"
}{
"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": {}
}Polling Strategy
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).QUEUED
PROCESSING
Terminal state reached
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
| Status | Terminal? | Description |
|---|---|---|
QUEUED | No | Upload received, waiting for a worker to pick it up |
PROCESSING | No | Worker is actively parsing the file and creating policies/transactions |
COMPLETED | Yes | All rows processed successfully |
COMPLETED_WITH_FAILURES | Yes | Processing finished but some rows failed. Check errors array |
NEEDS_CLARIFICATION | No | Processing paused. AI matching requires user input to continue |
FAILED | Yes | Processing failed entirely |
CANCELLED | Yes | Processing was cancelled |
Response Shape
{
"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
| Field | Type | Description |
|---|---|---|
uploadId | string | The upload request ID |
status | string | Current processing status (see table above) |
totalRows | number | Total number of data rows in the uploaded file |
created | number | Number of new policies created |
updated | number | Number of existing policies updated (duplicate policyNumber re-uploads) |
failed | number | Number of rows that failed processing |
errors | array | Details about individual row failures (see below) |
createdAt | string | ISO 8601 timestamp when the upload was initiated |
updatedAt | string | ISO 8601 timestamp of the last status update |
Error Object
Each entry in theerrors array describes a single row failure:
| Field | Type | Description |
|---|---|---|
index | number | Zero-based index of the failed row |
policyNumber | string? | Policy number from the failed row (if available) |
error | string | Human-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 whenuploadId 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.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
ID of the upload request returned by POST /policies/upload
"6650a1b2c3d4e5f6a7b8c9d0"
Response
Upload processing status with record counts and errors
ID of the upload request
"6650a1b2c3d4e5f6a7b8c9d0"
Current processing status
QUEUED, PROCESSING, COMPLETED, COMPLETED_WITH_FAILURES, NEEDS_CLARIFICATION, CANCELLED, FAILED "COMPLETED"
Total number of data rows in the uploaded file
1000
Number of new policies created
851
Number of existing policies updated (duplicate policyNumber re-uploads)
149
Number of rows that failed processing
0
Details about individual row failures
Show child attributes
Show child attributes
ISO 8601 timestamp when the upload was initiated
"2025-01-15T10:30:00.000Z"
ISO 8601 timestamp of the last status update
"2025-01-15T10:31:45.000Z"
Was this page helpful?