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
GET /media-health— List media health findingsPOST /media-health/candidates/choose— Choose media health candidatesDELETE /media-health/corrupt— Move confirmed corrupt media to trashPOST /media-health/corrupt/recover— Recover damaged media from a verified copyPOST /media-health/corrupt/scan— Start corrupt media scanPOST /media-health/dismiss— Dismiss media health findingsPOST /media-health/missing/locate— Locate missing mediaPOST /media-health/missing/relink— Relink missing mediaPOST /media-health/missing/scan— Start missing media scanPOST /media-health/reopen— Reopen media health findingsGET /media-health/roots— List Library Care search locationsGET /media-health/summary— Get Library Care summary
List media health findings
GET /api/media-health
List missing and corrupt media health findings in timeline buckets.
Authentication: API key. Permission: all.
Parameters
| Name | Where | Required | Description |
|---|---|---|---|
allAccounts | query | No | Review every account; administrators only |
category | query | No | |
needsAttention | query | No | Only findings that still need a decision |
ownerId | query | No | Account to review; administrators only for another account |
page | query | No | integer |
size | query | No | integer |
status | query | No |
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
| Name | Where | Required | Description |
|---|---|---|---|
allAccounts | query | No | Review every account; administrators only |
ownerId | query | No | Account 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": ""
}
}© 2026 Frameleaf Inc. All rights reserved.
Frameleaf and the Frameleaf logo are Trademarks of Frameleaf Inc.