Skip to main content

Calculators upsert result

Produced by POST /api/v1/bulk/calculators/upsert; the task reports "requestType": "BulkUpsertCalculators". A single-file result: the task's result reports pageSize: -1 and holds a single page entry with companyCount: -1, and the file behind its url is the complete, uncompressed JSON outcome of the import — one entry per calculator row you sent, sorted into the rows that landed and the rows that did not.

Unlike the page files, this file emits null for fields without a value.

Top level

FieldTypeNotes
successfulResultsSuccessfulResult[]Rows that were stored.
errorResultsErrorResult[]Rows that were rejected, each with the reason.

Both lists are always present; an import where everything landed has an empty errorResults.

SuccessfulResult

FieldTypeNotes
customIdentifierValuestringThe identifier value you named the company by in the request.
reportingPeriod{ year, month }The calculator's period; month is a month name, null for a yearly calculator.
successType"Created" or "Updated"Whether the row created a new calculator or updated an existing one for that company and period.

ErrorResult

FieldTypeNotes
customIdentifierValuestringAs above.
reportingPeriod{ year, month }As above.
messagestringWhy the row was rejected — an identifier that matched no company, an unknown calculator type, a value that does not parse.

Example

{
"successfulResults": [
{
"customIdentifierValue": "HA-2041",
"reportingPeriod": { "year": 2025, "month": null },
"successType": "Created"
},
{
"customIdentifierValue": "HA-2042",
"reportingPeriod": { "year": 2025, "month": "March" },
"successType": "Updated"
}
],
"errorResults": [
{
"customIdentifierValue": "HA-9999",
"reportingPeriod": { "year": 2025, "month": null },
"message": "No company matched identifier value 'HA-9999'."
}
]
}