1. Admin.Maintenance
Dag Ministry API Docs
  • Default module
    • Public.Product
      • Get the current product (resolved from host)
    • Public.Albums
      • List albums for current product
      • Get album detail
      • /api/albums/{slug}/cover
    • Public.Tracks
      • /api/tracks
      • Live search (landing-page dropdown)
      • /api/tracks/{id}/cover
      • Parsed lyrics for the expanded player, or a downloadable file
    • Public.Stream
      • Audio stream with HTTP Range
    • Public.Beacons
      • /api/track-pageview
      • Play beacon — client fires once per listen at min(30s, 50% of duration)
      • Anonymous like/unlike toggle (CSRF double-submit required)
      • Share beacon — fired after a successful native share / clipboard copy
    • Public.Geo
      • /api/geo
    • Public.Download
      • /api/download/submit
      • /api/download/{token}
    • Admin.Products
      • /api/admin/products
      • /api/admin/products
      • /api/admin/products/{id}
      • /api/admin/products/{id}
      • /api/admin/products/{id}
      • /api/admin/products/{id}/branding
      • /api/admin/products/{id}/legacy-count
    • Admin.Albums
      • /api/admin/products/{productId}/albums
      • /api/admin/products/{productId}/albums
      • /api/admin/albums/{id}
      • /api/admin/albums/{id}
      • /api/admin/albums/{id}
      • /api/admin/albums/{id}/cover
      • /api/admin/albums/{id}/tracks/sync-tags
    • Admin.AlbumTags
      • /api/admin/album-tags
      • /api/admin/album-tags
      • /api/admin/album-tags/{id}
      • /api/admin/album-tags/{id}
    • Admin.Tracks
      • /api/admin/albums/{id}/tracks/upload
      • /api/admin/albums/{id}/tracks/commit
      • /api/admin/albums/{id}/tracks/upload-zip
      • /api/admin/albums/{id}/tracks/import-onedrive-zip
      • /api/admin/import-progress/{importId}
      • /api/admin/tracks/{id}
      • /api/admin/tracks/{id}
      • Raw lyrics text + stored format
      • Save/replace lyrics (format detected server-side by content)
      • /api/admin/tracks/{id}/lyrics
      • /api/admin/tracks/{id}/set-album-cover
      • /api/admin/tracks/{id}/localize
      • /api/admin/tracks/{id}/tags
    • Admin.Maintenance
      • /api/admin/maintenance/migrate-storage-paths
        POST
      • /api/admin/maintenance/migrate-to-r2
        POST
    • Admin.OneDrive
      • /api/admin/albums/{id}/import-onedrive/preview
      • /api/admin/albums/{id}/import-onedrive/commit
    • Admin.Analytics
      • /api/admin/analytics/overview
      • Plays / likes / unlikes / shares time-series (rollup + today's raw)
      • /api/admin/analytics/by-country
      • /api/admin/analytics/export/csv
    • Admin.Contacts
      • /api/admin/contacts
      • /api/admin/contacts/{id}
    • Admin.Users
      • /api/admin/users/invite
    • Admin.Settings
      • /api/admin/settings
      • /api/admin/settings
      • AI translation settings (API key masked)
      • Update AI translation settings
      • AI-translate public UI labels for the product Language tab
      • /api/admin/geoip/upload
    • Auth
      • /api/auth/forgot-password
      • /api/auth/reset-password
      • /api/auth/accept-invite
    • Health
      • /api/health
    • Schemas
      • Error
      • BrandColors
      • PublicProduct
      • AlbumSummary
      • TrackSummary
      • LyricsResponse
      • EngagementByDatePoint
      • AlbumDetail
      • Contact
      • DownloadSubmitRequest
      • DownloadSubmitResponse
      • Geo
      • Health
      • AdminProduct
      • OneDrivePreviewItem
      • AnalyticsOverview
  • Dag Ministry API
    • Public.Product
      • Get the current product (resolved from host)
    • Public.Albums
      • List albums for current product
      • Get album detail
      • /api/albums/{slug}/cover
    • Public.Tracks
      • /api/tracks
      • /api/tracks/{id}/cover
      • Parsed lyrics for the expanded player, or a downloadable file
    • Public.Stream
      • Audio stream with HTTP Range
    • Public.Beacons
      • /api/track-pageview
      • Play beacon — client fires once per listen at min(30s, 50% of duration)
      • Anonymous like/unlike toggle (CSRF double-submit required)
      • Share beacon — fired after a successful native share / clipboard copy
    • Public.Geo
      • /api/geo
    • Public.Download
      • /api/download/submit
      • /api/download/{token}
    • Admin.Products
      • /api/admin/products
      • /api/admin/products
      • /api/admin/products/{id}
      • /api/admin/products/{id}
      • /api/admin/products/{id}
      • /api/admin/products/{id}/branding
      • /api/admin/products/{id}/legacy-count
    • Admin.Albums
      • /api/admin/products/{productId}/albums
      • /api/admin/products/{productId}/albums
      • /api/admin/albums/{id}
      • /api/admin/albums/{id}
      • /api/admin/albums/{id}
      • /api/admin/albums/{id}/cover
    • Admin.Tracks
      • /api/admin/albums/{id}/tracks/upload
      • /api/admin/albums/{id}/tracks/commit
      • /api/admin/albums/{id}/tracks/upload-zip
      • /api/admin/albums/{id}/tracks/import-onedrive-zip
      • /api/admin/import-progress/{importId}
      • /api/admin/tracks/{id}
      • /api/admin/tracks/{id}
      • Raw lyrics text + stored format
      • Save/replace lyrics (format detected server-side by content)
      • /api/admin/tracks/{id}/lyrics
      • /api/admin/tracks/{id}/set-album-cover
      • /api/admin/tracks/{id}/localize
    • Admin.OneDrive
      • /api/admin/albums/{id}/import-onedrive/preview
      • /api/admin/albums/{id}/import-onedrive/commit
    • Admin.Analytics
      • /api/admin/analytics/overview
      • Plays / likes / unlikes / shares time-series (rollup + today's raw)
      • /api/admin/analytics/by-country
      • /api/admin/analytics/export/csv
    • Admin.Contacts
      • /api/admin/contacts
      • /api/admin/contacts/{id}
    • Admin.Users
      • /api/admin/users/invite
    • Admin.Settings
      • /api/admin/settings
      • /api/admin/settings
      • /api/admin/geoip/upload
    • Auth
      • /api/auth/forgot-password
      • /api/auth/reset-password
      • /api/auth/accept-invite
    • Health
      • /api/health
    • Schemas
      • Error
      • BrandColors
      • PublicProduct
      • AlbumSummary
      • TrackSummary
      • LyricsResponse
      • EngagementByDatePoint
      • AlbumDetail
      • Contact
      • DownloadSubmitRequest
      • DownloadSubmitResponse
      • Geo
      • Health
      • AdminProduct
      • OneDrivePreviewItem
      • AnalyticsOverview
  1. Admin.Maintenance

/api/admin/maintenance/migrate-to-r2

POST
/api/admin/maintenance/migrate-to-r2
Move a product's local track audio into the Cloudflare R2 bucket. Per track: upload (multipart), HEAD size check, CRC check against the stored crc32 when one is warm, flip the row to sourceType=r2 with the object key in cloudItemRef, and only with deleteLocal unlink the file. Detached run — 202 with a jobId; poll /api/admin/import-progress/{jobId} (phase "migrating", then "deleting" when deleteLocal, then "done" with { scanned, moved, skipped, failed[], bytesUploaded, bytesFreed }). Idempotent and resumable. Admin+ only, non-product-scoped keys. Driven in batches by npm run db:migrate-tracks-to-r2.

Request

Body Params application/jsonRequired

Examples

Responses

🟢202Accepted
application/json
Run started
Bodyapplication/json

🟠403Forbidden
🟠404Record Not Found
🟠409
🔴503Service Unavailable
Request Request Example
Shell
JavaScript
Java
Swift
curl --location '/api/admin/maintenance/migrate-to-r2' \
--header 'Content-Type: application/json' \
--data '{
    "productSlug": "string",
    "limit": 1,
    "dryRun": false,
    "deleteLocal": false,
    "trackIds": [
        "497f6eca-6276-4993-bfeb-53cbbbba6f08"
    ]
}'
Response Response Example
{
    "jobId": "9d222c6d-893e-4e79-8201-3c9ca16a0f39"
}
Modified at 2026-09-10 00:07:25
Previous
/api/admin/maintenance/migrate-storage-paths
Next
/api/admin/albums/{id}/import-onedrive/preview
Built with