# DataMigrationRunDetail
## Properties
**id** | **i64** | |
**job_id** | Option<**String**> | The queue job this run belongs to, once #1212 moves execution onto the job queue. `null` for a run executed inline in the API request task -- the one case with no SSE stream to watch and no job to cancel. | [optional]
**created_by** | **String** | |
**created_at** | **String** | |
**started_at** | **String** | |
**updated_at** | **String** | Last write of any kind to the row. For a `running` run this is the liveness signal: a stale `updated_at` with no live job is how a crashed run is visible as crashed rather than simply absent. |
**completed_at** | Option<**String**> | | [optional]
**status** | **String** | |
**source_resource_path** | **String** | |
**target_resource_path** | **String** | |
**source_table** | **String** | |
**target_table** | **String** | |
**rows_migrated** | **i64** | Cumulative across attempts when the run was resumed: \"how much of this migration is done\", not \"how much did the last attempt do\". |
**batches** | **i32** | |
**conflict_mode** | [**models::ConflictMode**](ConflictMode.md) | |
**resume_count** | **i32** | how many times this run has been picked up again after stopping. |
**has_checkpoint** | **bool** | A batch has committed, so a resume has a checkpoint to start from. The cursor itself is not returned -- it is a list of source primary-key values, i.e. customer data. |
**has_pending_batch** | **bool** | A batch was handed to the target and its outcome was never recorded. Resume across it is only safe under `conflict_mode = skip`. |
**failed** | **bool** | The run recorded an error. The text is deliberately not here: it is on the per-run route only, so a history listing cannot carry it (see #1406). |
**mapping** | [**Vec<models::ColumnMapping>**](ColumnMapping.md) | The mapping this run was configured with. Returned because a resume is a fresh `POST /run` and the engine re-validates the mapping rather than trusting stored configuration -- so the caller has to send it back, and the run row is the only place it is kept. |
**error** | Option<**String**> | Backend-authored failure text. Render as escaped text, never as HTML: until #1406 is fixed this can still contain target row values. | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)