Skip to content

Media Health API

Base URL: https://YOUR-SERVER/api. Send your API key in x-api-key where authentication is required. A key also needs the listed permission; your account's access rules still apply.

API guide · All endpoints · OpenAPI JSON

List media health findings

GET /api/media-health

List missing and corrupt media health findings in timeline buckets.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
allAccountsqueryNoReview every account; administrators only
categoryqueryNo
needsAttentionqueryNoOnly findings that still need a decision
ownerIdqueryNoAccount to review; administrators only for another account
pagequeryNointeger
sizequeryNointeger
statusqueryNo
Parameter types, defaults and constraints

Field definitions: MediaHealthCategory, MediaHealthStatus

[
  {
    "name": "allAccounts",
    "required": false,
    "in": "query",
    "description": "Review every account; administrators only",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "category",
    "required": false,
    "in": "query",
    "schema": {
      "$ref": "#/components/schemas/MediaHealthCategory"
    }
  },
  {
    "name": "needsAttention",
    "required": false,
    "in": "query",
    "description": "Only findings that still need a decision",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "ownerId",
    "required": false,
    "in": "query",
    "description": "Account to review; administrators only for another account",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "page",
    "required": false,
    "in": "query",
    "schema": {
      "minimum": 1,
      "maximum": 9007199254740991,
      "default": 1,
      "type": "integer"
    }
  },
  {
    "name": "size",
    "required": false,
    "in": "query",
    "schema": {
      "minimum": 1,
      "maximum": 200,
      "default": 100,
      "type": "integer"
    }
  },
  {
    "name": "status",
    "required": false,
    "in": "query",
    "schema": {
      "$ref": "#/components/schemas/MediaHealthStatus"
    }
  }
]

Responses

Field definitions: MediaHealthListResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthListResponseDto"
        }
      }
    },
    "description": ""
  }
}

Choose media health candidates

POST /api/media-health/candidates/choose

Record which verified exact copy each missing original should be relinked to.

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: MediaHealthChooseCandidatesDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/MediaHealthChooseCandidatesDto"
    }
  }
}

Responses

Field definitions: MediaHealthBulkResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthBulkResponseDto"
        }
      }
    },
    "description": ""
  }
}

Move confirmed corrupt media to trash

DELETE /api/media-health/corrupt

Move recently confirmed corrupt media findings to trash after revalidation.

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: MediaHealthDeleteCorruptDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/MediaHealthDeleteCorruptDto"
    }
  }
}

Responses

Field definitions: MediaHealthBulkResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthBulkResponseDto"
        }
      }
    },
    "description": ""
  }
}

Recover damaged media from a verified copy

POST /api/media-health/corrupt/recover

Queue a durable job replacing confirmed damage with an exact, decoded copy while keeping the damaged file.

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: MediaHealthRecoverDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/MediaHealthRecoverDto"
    }
  }
}

Responses

Field definitions: MediaHealthBulkResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthBulkResponseDto"
        }
      }
    },
    "description": ""
  }
}

Start corrupt media scan

POST /api/media-health/corrupt/scan

Queue an explicit scan that validates source media integrity.

Authentication: API key. Permission: all.

Responses

Field definitions: MediaHealthScanResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthScanResponseDto"
        }
      }
    },
    "description": ""
  }
}

Dismiss media health findings

POST /api/media-health/dismiss

Dismiss selected media health findings without modifying assets.

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: MediaHealthBulkActionDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/MediaHealthBulkActionDto"
    }
  }
}

Responses

{
  "204": {
    "description": ""
  }
}

Locate missing media

POST /api/media-health/missing/locate

Queue a durable exact-checksum search of the chosen locations for missing originals or copies of confirmed damage.

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: MediaHealthLocateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/MediaHealthLocateDto"
    }
  }
}

Responses

Field definitions: MediaHealthScanResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthScanResponseDto"
        }
      }
    },
    "description": ""
  }
}

Relink missing media

POST /api/media-health/missing/relink

Queue a durable job relinking missing originals to their verified exact copies.

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: MediaHealthBulkActionDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/MediaHealthBulkActionDto"
    }
  }
}

Responses

Field definitions: MediaHealthBulkResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthBulkResponseDto"
        }
      }
    },
    "description": ""
  }
}

Start missing media scan

POST /api/media-health/missing/scan

Queue an owner-scoped scan that identifies missing files and restores supported untracked media.

Authentication: API key. Permission: all.

Responses

Field definitions: MediaHealthScanResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthScanResponseDto"
        }
      }
    },
    "description": ""
  }
}

Reopen media health findings

POST /api/media-health/reopen

Undo a dismissal, or reopen confirmed damage whose item was restored from the trash, putting the findings back in review.

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: MediaHealthBulkActionDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/MediaHealthBulkActionDto"
    }
  }
}

Responses

Field definitions: MediaHealthBulkResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthBulkResponseDto"
        }
      }
    },
    "description": ""
  }
}

List Library Care search locations

GET /api/media-health/roots

Locations the caller may search for exact copies of missing or damaged originals.

Authentication: API key. Permission: all.

Responses

Field definitions: MediaHealthRootsResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthRootsResponseDto"
        }
      }
    },
    "description": ""
  }
}

Get Library Care summary

GET /api/media-health/summary

Queue sizes for missing, damaged, duplicate, import and enrichment work, the latest scan or search, and recent Library Care jobs.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
allAccountsqueryNoReview every account; administrators only
ownerIdqueryNoAccount to review; administrators only for another account
Parameter types, defaults and constraints
[
  {
    "name": "allAccounts",
    "required": false,
    "in": "query",
    "description": "Review every account; administrators only",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "ownerId",
    "required": false,
    "in": "query",
    "description": "Account to review; administrators only for another account",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

Field definitions: MediaHealthSummaryResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/MediaHealthSummaryResponseDto"
        }
      }
    },
    "description": ""
  }
}