--- description: aidbox.bulk/* RPC operations --- # Aidbox.bulk data import ## Overview aidbox.bulk API uses Aidbox JSON [RPC API](../other/rpc-api.md) Features of the aidbox.bulk API: * Asynchronous validation of uploaded resources & references * Human readable validation errors * Can process Aidbox & FHIR format ## RPC methods ### `aidbox.bulk/import-start` Starts `aidbox.bulk` import. {% tabs %} {% tab title="Parameters" %} Object with the following structure: * `format` input resources format, `fhir` or `aidbox` (default: `fhir`) * `meta` meta data that will be attached to each of the imported resources * `on-conflict` action to resolve id uniqueness constraint violation, `update` or `override` * `input` array of objects * `url` string with input source url {% endtab %} {% tab title="Result" %} Returns input params object with following attributes added: * `status` `in-progress`, `finished`, `failed` * `count` overall number of imported resources * `time` import execution time * `input` the import status of each specific input * `status` `loaded`, `validated`, `failed` * `count` number of loaded resources * `errors` number of validation errors * `time` input execution time {% endtab %} {% tab title="Error" %} * `message` _"There is running import - wait until it finish or cancel it with aidbox.bulk/import-cancel"_ * `import` object identical to result object {% endtab %} {% endtabs %} #### Resource requirements for `aidbox.bulk/import-start`:
OperationidresourceType
aidbox.bulk/import-startRequiredRequired
#### Example {% tabs %} {% tab title="Request" %} ```yaml POST /rpc content-type: text/yaml accept: text/yaml method: aidbox.bulk/import-start params: on-conflict: update id_prefix: app1 format: fhir meta: {source: app1} input: - {url: 'https://storage.googleapis.com/aidbox-public/synthea/100/corrupted-patient.ndjson.gz'} ``` {% endtab %} {% tab title="Response" %} {% code title="status: 200" %} ```yaml result: on-conflict: update id_prefix: app1 format: fhir meta: {source: app1} input: - {url: 'https://storage.googleapis.com/aidbox-public/synthea/100/corrupted-patient.ndjson.gz', status: loaded, count: 124, errors: 1, time: 157} status: failed errors: 1 time: 241 ``` {% endcode %} {% endtab %} {% endtabs %} ### `aidbox.bulk/import-status` Returns latest `aidbox.bulk` import info {% tabs %} {% tab title="Parameters" %} _Expects no parameters_ {% endtab %} {% tab title="Result" %} Same as `aidbox.bulk/import-start` result {% endtab %} {% tab title="Error" %} `message` _"No active imports"_ {% endtab %} {% endtabs %} #### Example {% tabs %} {% tab title="Request" %} ```yaml POST /rpc content-type: text/yaml accept: text/yaml method: aidbox.bulk/import-status params: {} ``` {% endtab %} {% tab title="Response" %} {% code title="Status: 200" %} ```yaml result: on-conflict: update id_prefix: app1 format: fhir meta: source: app1 input: - url: >- https://storage.googleapis.com/aidbox-public/synthea/100/Patient.ndjson.gz status: loaded count: 124 errors: 0 time: 1205 status: finished count: 0 time: 1452 ``` {% endcode %} {% endtab %} {% endtabs %} ### `aidbox.bulk/import-errors` Returns latest `aidbox.bulk` import detailed errors list {% tabs %} {% tab title="Parameters" %} Object with the following structure: * `omit-resources?` (default: `false`) {% endtab %} {% tab title="Result" %} Result is an array of objects with following structure: * `input_no` * `line_no` * `type` * `id` * `resource` * `errors` {% endtab %} {% tab title="Error" %} `message` _"No active imports"_ {% endtab %} {% endtabs %} #### Example {% tabs %} {% tab title="Request" %} ```yaml POST /rpc content-type: text/yaml accept: text/yaml method: aidbox.bulk/import-errors params: omit-resources?: true ``` {% endtab %} {% tab title="Response" %} {% code title="Status: 200" %} ```yaml result: - input_no: 0 line_no: 1 type: Patient id: e9adac47-eb98-4fce-b871-512226086c97 errors: - path: - name - 0 - given message: expected array - input_no: 0 line_no: 20 type: Patient id: b2d58f0f-4499-4392-ad3a-1c2141c8a6c1 errors: - path: - address - 0 - line message: expected array ``` {% endcode %} {% endtab %} {% endtabs %} ### `aidbox.bulk/import-cancel` Cancels latest `aidbox.bulk` import {% tabs %} {% tab title="Parameters" %} _Expects no parameters_ {% endtab %} {% tab title="Result" %} Returns object with following structure: * `message` _"Import canceled"_ * `import` Same as `aidbox.bulk/import-start` result {% endtab %} {% tab title="Error" %} `message` _"No active imports"_ {% endtab %} {% endtabs %} #### Example {% tabs %} {% tab title="Request" %} ```yaml POST /rpc content-type: text/yaml accept: text/yaml method: aidbox.bulk/import-cancel ``` {% endtab %} {% tab title="Response" %} {% code title="Status: 200" %} ``` result: message: "Import Canceled" import: <. . .> ``` {% endcode %} {% endtab %} {% endtabs %} ## Import local file Sometimes you want to import local file into local Aidbox. Possible solutions for local development: #### Add volume to the `aidboxone` container (not `aidboxdb`): ``` volumes: - ./Encounter.ndjson.gz:/resources/Encounter.ndjson.gz # url: file:///resources/Encounter.ndjson.gz ``` #### Use tunneling e.g. ngrok:
python3 -m http.server 
ngrok http 8000
# url: https://<...>.ngrok-free.app/Encounter.ndjson.gz