---
title: "Get the current reunification import status"
method: GET
path: "/v1/reunification/imports/status"
tags: ["reunification"]
---

# Get the current reunification import status

`GET /v1/reunification/imports/status`

Returns the status of your organization's most recent reunification
import. Poll this after starting one. Requires `read:*` scope and a
`regular` creator role.

Status is kept for one hour after its last update and then this returns
`404`. Store anything you need to keep.

`completed` means the roster was written and account provisioning was
handed to a background worker, not that every account exists.
`succeeded_users` and `failed_users` keep rising afterwards, which can
take several minutes on a large roster, so poll until both stop moving.

The `synced_*` and `total_*` pairs are a progress bar rather than a
success ratio. They end up equal whenever the roster is written, so they
cannot tell you a record was rejected.

A `failed` status does not mean the roster is untouched. If the failure
came after the roster was committed the new roster is live, and account
provisioning may not have started or may already be under way.

## Response `200`

Successful Response

- ReunificationImportStatus — Progress report for your most recent import. Counters that are zero are left out of the response, so treat an absent field as zero. Every counter resets when a new import starts.
  - `id` string, required
  - `status` 'in_progress' | 'completed' | 'failed', required
  - `synced_schools` integer
  - `total_schools` integer
  - `synced_students` integer
  - `total_students` integer
  - `synced_teachers` integer
  - `total_teachers` integer
  - `synced_staff` integer
  - `total_staff` integer
  - `synced_guardians` integer
  - `total_guardians` integer — Counted after the merge described on the guardian object, so it is usually lower than the number of guardian entries you sent.
  - `succeeded_users` integer — Coram accounts created or updated. Rises in the background after status becomes completed. Guardians are never included, because they get no account.
  - `failed_users` integer — Accounts that could not be created, usually a seat limit or an Auth0 rejection. Zero does not mean everyone succeeded, since anyone without a valid email is absent from both figures.
  - `error_message` string
  - `started_at` string, date-time — Carries a real time only while the import is in progress. Once it reaches completed or failed the field is still returned but reset to 0001-01-01T00:00:00Z, so record the start time yourself if you need it.
  - `completed_at` string, date-time — Returned as 0001-01-01T00:00:00Z until the import finishes.

## Other responses

- `401` — Missing or invalid API key
- `403` — API key lacks the required scope/role, or the feature is not enabled for the organization
- `404` — No import found for this organization, or the status expired. Status is kept for one hour after its last update
- `500` — Unexpected server error

---

[API](https://skmtc.dev/coram/apis/coram-api.md) · [All operations](https://skmtc.dev/coram/apis/coram-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/coram/coram-api/revisions/ede59f055826/schema)
