Skip to main content
For AI agents: a documentation index is available at https://docs.coverbase.com/llms.txt. This page is also available in markdown by appending .md to the URL.

Import Report

POST
POST /v1/import/{slug}
Submits a batch of records to the specified import report. Records are processed one at a time against the report’s field mapping and upserted on external_id. The response lists what each record created or updated.
Three things commonly cause a 404 or 422 here:
  • The path is /v1/import/{slug}: singular import, not imports. A request to /v1/imports/... returns a generic 404 Not Found, and a slug with no import report returns 422 with Invalid import slug.
  • The records must be wrapped under data: {"data": [ { ... } ]}. A bare record, or an empty list, returns 422.
  • The Import API requires a service-account API key. A dashboard session token is rejected with 401 Unauthorized role. See API keys.

Path parameters

string
required
The import report’s slug, shown as the endpoint on the report’s Configure tab.

Request body

The request body is a JSON object with a data key containing an array of records (or a single record object). Each record is an object whose keys are the mapped field names defined in the report and whose values are the incoming field values.
array
required
Records to import. Each record must include all fields marked as Required in the report’s mapping.

Example request

Example response

200 OK when every record succeeds:

Response fields

boolean
true on a 200 response.
string
A summary, such as Successfully imported 2 record(s).
integer
Number of records processed successfully, whether they created or updated objects.
object[]
One entry per successful record: its record_index (position in data), and the objects it created or updated under vendor, services, engagements, assessments, and findings. Each object carries id, external_id, created (true for a new object, false for an update), and warnings, such as an owner email that matched no user and was skipped.
object[] | null
Warnings that did not fail a record, such as a custom field sent as null, which is not written. null when there are none.

Errors

If any record fails, the response is 422. Records that succeeded are still saved, so fix the failed records and resend them; because records upsert on external_id, resending the whole batch is also safe. The detail object carries:
string
A summary, such as Imported 1 of 2 record(s) with 1 error(s).
integer
Number of records that succeeded.
integer
Number of records in the request.
object[]
One entry per failed record, with record_index, error (a readable message, for example Record missing required field External Id), field (the incoming field name at fault, when there is one), base_object (which object the field belongs to, in a report that imports several), and created (objects a multi-object record saved before it failed, or null).
object[]
The results for the records that succeeded, in the same shape as records above.
Other failures return 422 with a plain-string detail: a body that is not valid JSON or has no records (Invalid JSON: ...), or a slug with no import report (Invalid import slug).
Partial success is supported. Records that pass validation are imported even if other records in the same batch fail. The HTTP status is 200 only when every record succeeds.
Need help? Email support@coverbase.ai.