# Dag Ministry API Docs ## API Docs - Root > Public.Product [Get the current product (resolved from host)](https://docs.dagministry.org/get-the-current-product-resolved-from-host-43274883e0.md): - Root > Public.Albums [List albums for current product](https://docs.dagministry.org/list-albums-for-current-product-43274884e0.md): - Root > Public.Albums [Get album detail](https://docs.dagministry.org/get-album-detail-43274885e0.md): - Root > Public.Albums [/api/albums/{slug}/cover](https://docs.dagministry.org/apialbumsslugcover-43274886e0.md): Streams the album cover (falls back to the product default). ?w= returns a square JPEG variant; widths snap to the nearest of {96, 128, 320, 512} and are disk-cached server-side. Responses carry a 1-year immutable Cache-Control plus ETag/Last-Modified and answer conditional requests with 304 (URLs carry a ?v= cache-buster). - Root > Public.Tracks [/api/tracks](https://docs.dagministry.org/apitracks-43274887e0.md): - Root > Public.Tracks [Live search (landing-page dropdown)](https://docs.dagministry.org/live-search-landing-page-dropdown-43274888e0.md): Capped typeahead results (6 albums / 10 tracks). Every whitespace- separated word of q must appear, in any order (apostrophe variants interchangeable). mode=title matches album titles or tag names and track titles; mode=lyrics matches lyric lines (tracks only) and returns the first matching line as `snippet`. Under 2 query chars returns empty results. Empty when the product's lyrics_enabled setting is off (lyrics mode). Never cached (no-store on every response). - Root > Public.Tracks [/api/tracks/{id}/cover](https://docs.dagministry.org/apitracksidcover-43274889e0.md): Track cover (album cover → embedded APIC → product default). Same snapped ?w= variants, disk cache and immutable/ETag/304 behavior as the album cover endpoint. Public pages mint the canonical album cover URL instead when the album has its own cover, so identical bytes share one cache entry across a track list. - Root > Public.Tracks [Parsed lyrics for the expanded player, or a downloadable file](https://docs.dagministry.org/parsed-lyrics-for-the-expanded-player-or-a-downloadable-file-43274890e0.md): Without `format`, returns the parsed payload. With `format=txt` (raw stored text) or `format=srt` (SubRip conversion; synced lyrics only) the lyrics download as an attachment. The per-product `lyrics_enabled` setting turns the surface off (payload becomes kind:none, downloads 404). - Root > Public.Stream [Audio stream with HTTP Range](https://docs.dagministry.org/audio-stream-with-http-range-43274891e0.md): - Root > Public.Beacons [/api/track-pageview](https://docs.dagministry.org/apitrack-pageview-43274892e0.md): - Root > Public.Beacons [Play beacon — client fires once per listen at min(30s, 50% of duration)](https://docs.dagministry.org/play-beacon-client-fires-once-per-listen-at-min30s-50-of-duration-43274893e0.md): - Root > Public.Beacons [Anonymous like/unlike toggle (CSRF double-submit required)](https://docs.dagministry.org/anonymous-likeunlike-toggle-csrf-double-submit-required-43274894e0.md): - Root > Public.Beacons [Share beacon — fired after a successful native share / clipboard copy](https://docs.dagministry.org/share-beacon-fired-after-a-successful-native-share-clipboard-copy-43274895e0.md): - Root > Public.Geo [/api/geo](https://docs.dagministry.org/apigeo-43274896e0.md): - Root > Public.Download [/api/download/submit](https://docs.dagministry.org/apidownloadsubmit-43274897e0.md): - Root > Public.Download [/api/download/{token}](https://docs.dagministry.org/apidownloadtoken-43274898e0.md): - Root > Admin.Products [/api/admin/products](https://docs.dagministry.org/apiadminproducts-43274899e0.md): - Root > Admin.Products [/api/admin/products](https://docs.dagministry.org/apiadminproducts-43274900e0.md): - Root > Admin.Products [/api/admin/products/{id}](https://docs.dagministry.org/apiadminproductsid-43274901e0.md): - Root > Admin.Products [/api/admin/products/{id}](https://docs.dagministry.org/apiadminproductsid-43274902e0.md): - Root > Admin.Products [/api/admin/products/{id}](https://docs.dagministry.org/apiadminproductsid-43274903e0.md): - Root > Admin.Products [/api/admin/products/{id}/branding](https://docs.dagministry.org/apiadminproductsidbranding-43274904e0.md): - Root > Admin.Products [/api/admin/products/{id}/legacy-count](https://docs.dagministry.org/apiadminproductsidlegacy-count-43274905e0.md): - Root > Admin.Albums [/api/admin/products/{productId}/albums](https://docs.dagministry.org/apiadminproductsproductidalbums-43274906e0.md): - Root > Admin.Albums [/api/admin/products/{productId}/albums](https://docs.dagministry.org/apiadminproductsproductidalbums-43274907e0.md): - Root > Admin.Albums [/api/admin/albums/{id}](https://docs.dagministry.org/apiadminalbumsid-43274908e0.md): - Root > Admin.Albums [/api/admin/albums/{id}](https://docs.dagministry.org/apiadminalbumsid-43274909e0.md): - Root > Admin.Albums [/api/admin/albums/{id}](https://docs.dagministry.org/apiadminalbumsid-43274910e0.md): - Root > Admin.Albums [/api/admin/albums/{id}/cover](https://docs.dagministry.org/apiadminalbumsidcover-43274911e0.md): - Root > Admin.Albums [/api/admin/albums/{id}/tracks/sync-tags](https://docs.dagministry.org/apiadminalbumsidtrackssync-tags-43274912e0.md): Push the DB's current values into every local audio file in the album (title/artist/featured/track number from tracks; album title/artist/ year from albums). Nothing is read back from the files; artwork is untouched. Sequential — each is a whole-file rewrite. Cloud tracks are skipped, not failed. - Root > Admin.AlbumTags [/api/admin/album-tags](https://docs.dagministry.org/apiadminalbum-tags-43274913e0.md): - Root > Admin.AlbumTags [/api/admin/album-tags](https://docs.dagministry.org/apiadminalbum-tags-43274914e0.md): - Root > Admin.AlbumTags [/api/admin/album-tags/{id}](https://docs.dagministry.org/apiadminalbum-tagsid-43274915e0.md): - Root > Admin.AlbumTags [/api/admin/album-tags/{id}](https://docs.dagministry.org/apiadminalbum-tagsid-43274916e0.md): - Root > Admin.Tracks [/api/admin/albums/{id}/tracks/upload](https://docs.dagministry.org/apiadminalbumsidtracksupload-43274917e0.md): - Root > Admin.Tracks [/api/admin/albums/{id}/tracks/commit](https://docs.dagministry.org/apiadminalbumsidtrackscommit-43274918e0.md): - Root > Admin.Tracks [/api/admin/albums/{id}/tracks/upload-zip](https://docs.dagministry.org/apiadminalbumsidtracksupload-zip-43274919e0.md): Upload a local album ZIP as a raw request body (not multipart). Audio entries are extracted into the upload staging session and returned in the tracks/upload response shape, feeding the standard drafts → commit pipeline. - Root > Admin.Tracks [/api/admin/albums/{id}/tracks/import-onedrive-zip](https://docs.dagministry.org/apiadminalbumsidtracksimport-onedrive-zip-43274920e0.md): Import an album ZIP shared on OneDrive as local tracks — asynchronous. Validates and returns 202 immediately; the work (download, extract, tag-parse into the upload staging area) runs detached and is observed via GET /api/admin/import-progress/{importId}, whose terminal "done" state carries the tracks/upload response shape. - Root > Admin.Tracks [/api/admin/import-progress/{importId}](https://docs.dagministry.org/apiadminimport-progressimportid-43274921e0.md): Poll an asynchronous album-ZIP import. Running phases carry byte/file counters; the terminal "done" phase carries the staged result { sessionId, items, skipped }, "error" carries the error code + message. The entry is cleared after the terminal state is served once. - Root > Admin.Tracks [/api/admin/tracks/{id}](https://docs.dagministry.org/apiadmintracksid-43274922e0.md): - Root > Admin.Tracks [/api/admin/tracks/{id}](https://docs.dagministry.org/apiadmintracksid-43274923e0.md): - Root > Admin.Tracks [Raw lyrics text + stored format](https://docs.dagministry.org/raw-lyrics-text-stored-format-43274924e0.md): - Root > Admin.Tracks [Save/replace lyrics (format detected server-side by content)](https://docs.dagministry.org/savereplace-lyrics-format-detected-server-side-by-content-43274925e0.md): - Root > Admin.Tracks [/api/admin/tracks/{id}/lyrics](https://docs.dagministry.org/apiadmintracksidlyrics-43274926e0.md): - Root > Admin.Tracks [/api/admin/tracks/{id}/set-album-cover](https://docs.dagministry.org/apiadmintracksidset-album-cover-43274927e0.md): - Root > Admin.Tracks [/api/admin/tracks/{id}/localize](https://docs.dagministry.org/apiadmintracksidlocalize-43274928e0.md): Copy a OneDrive track's bytes into local storage; the track becomes sourceType=local with tag metadata (sample rate, codec, embedded cover) backfilled via music-metadata. Idempotent for local tracks. - Root > Admin.Tracks [/api/admin/tracks/{id}/tags](https://docs.dagministry.org/apiadmintracksidtags-43274929e0.md): Write metadata and cover art INTO the audio file on disk (not just the DB row), so downloads and album ZIPs carry the change. Text tags and artwork are written in a single TagLib save, then ID3 padding is reclaimed and fileSizeBytes refreshed — the stream URL's ?v= cache-buster is keyed on it. Local tracks only. - Root > Admin.Maintenance [/api/admin/maintenance/migrate-storage-paths](https://docs.dagministry.org/apiadminmaintenancemigrate-storage-paths-43274930e0.md): One-time backfill converting stored file paths from cwd-relative to STORAGE_DIR-relative. Detached run — returns 202 with a jobId; poll /api/admin/import-progress/{jobId}. Run with dryRun first and check `missing`: rows whose file cannot be found are left untouched rather than rewritten to a plausible-looking wrong value. Idempotent. Owner/admin only. - Root > Admin.OneDrive [/api/admin/albums/{id}/import-onedrive/preview](https://docs.dagministry.org/apiadminalbumsidimport-onedrivepreview-43274931e0.md): - Root > Admin.OneDrive [/api/admin/albums/{id}/import-onedrive/commit](https://docs.dagministry.org/apiadminalbumsidimport-onedrivecommit-43274932e0.md): - Root > Admin.Analytics [/api/admin/analytics/overview](https://docs.dagministry.org/apiadminanalyticsoverview-43274933e0.md): - Root > Admin.Analytics [Plays / likes / unlikes / shares time-series (rollup + today's raw)](https://docs.dagministry.org/plays-likes-unlikes-shares-time-series-rollup-todays-raw-43274934e0.md): - Root > Admin.Analytics [/api/admin/analytics/by-country](https://docs.dagministry.org/apiadminanalyticsby-country-43274935e0.md): - Root > Admin.Analytics [/api/admin/analytics/export/csv](https://docs.dagministry.org/apiadminanalyticsexportcsv-43274936e0.md): - Root > Admin.Contacts [/api/admin/contacts](https://docs.dagministry.org/apiadmincontacts-43274937e0.md): - Root > Admin.Contacts [/api/admin/contacts/{id}](https://docs.dagministry.org/apiadmincontactsid-43274938e0.md): - Root > Admin.Users [/api/admin/users/invite](https://docs.dagministry.org/apiadminusersinvite-43274939e0.md): - Root > Admin.Settings [/api/admin/settings](https://docs.dagministry.org/apiadminsettings-43274940e0.md): - Root > Admin.Settings [/api/admin/settings](https://docs.dagministry.org/apiadminsettings-43274941e0.md): - Root > Admin.Settings [AI translation settings (API key masked)](https://docs.dagministry.org/ai-translation-settings-api-key-masked-43274942e0.md): - Root > Admin.Settings [Update AI translation settings](https://docs.dagministry.org/update-ai-translation-settings-43274943e0.md): - Root > Admin.Settings [AI-translate public UI labels for the product Language tab](https://docs.dagministry.org/ai-translate-public-ui-labels-for-the-product-language-tab-43274944e0.md): - Root > Admin.Settings [/api/admin/geoip/upload](https://docs.dagministry.org/apiadmingeoipupload-43274945e0.md): - Root > Auth [/api/auth/forgot-password](https://docs.dagministry.org/apiauthforgot-password-43274946e0.md): - Root > Auth [/api/auth/reset-password](https://docs.dagministry.org/apiauthreset-password-43274947e0.md): - Root > Auth [/api/auth/accept-invite](https://docs.dagministry.org/apiauthaccept-invite-43274948e0.md): - Root > Health [/api/health](https://docs.dagministry.org/apihealth-43274949e0.md): - Root > Public.Product [Get the current product (resolved from host)](https://docs.dagministry.org/get-the-current-product-resolved-from-host-40143241e0.md): - Root > Public.Albums [List albums for current product](https://docs.dagministry.org/list-albums-for-current-product-40143242e0.md): - Root > Public.Albums [Get album detail](https://docs.dagministry.org/get-album-detail-40143243e0.md): - Root > Public.Albums [/api/albums/{slug}/cover](https://docs.dagministry.org/apialbumsslugcover-40143244e0.md): - Root > Public.Tracks [/api/tracks](https://docs.dagministry.org/apitracks-40143245e0.md): - Root > Public.Tracks [/api/tracks/{id}/cover](https://docs.dagministry.org/apitracksidcover-40143246e0.md): - Root > Public.Tracks [Parsed lyrics for the expanded player, or a downloadable file](https://docs.dagministry.org/parsed-lyrics-for-the-expanded-player-or-a-downloadable-file-40143247e0.md): Without `format`, returns the parsed payload. With `format=txt` (raw stored text) or `format=srt` (SubRip conversion; synced lyrics only) the lyrics download as an attachment. The per-product `lyrics_enabled` setting turns the surface off (payload becomes kind:none, downloads 404). - Root > Public.Stream [Audio stream with HTTP Range](https://docs.dagministry.org/audio-stream-with-http-range-40143248e0.md): - Root > Public.Beacons [/api/track-pageview](https://docs.dagministry.org/apitrack-pageview-40143249e0.md): - Root > Public.Beacons [Play beacon — client fires once per listen at min(30s, 50% of duration)](https://docs.dagministry.org/play-beacon-client-fires-once-per-listen-at-min30s-50-of-duration-40143250e0.md): - Root > Public.Beacons [Anonymous like/unlike toggle (CSRF double-submit required)](https://docs.dagministry.org/anonymous-likeunlike-toggle-csrf-double-submit-required-40143251e0.md): - Root > Public.Beacons [Share beacon — fired after a successful native share / clipboard copy](https://docs.dagministry.org/share-beacon-fired-after-a-successful-native-share-clipboard-copy-40143252e0.md): - Root > Public.Geo [/api/geo](https://docs.dagministry.org/apigeo-40143253e0.md): - Root > Public.Download [/api/download/submit](https://docs.dagministry.org/apidownloadsubmit-40143254e0.md): - Root > Public.Download [/api/download/{token}](https://docs.dagministry.org/apidownloadtoken-40143255e0.md): - Root > Admin.Products [/api/admin/products](https://docs.dagministry.org/apiadminproducts-40143256e0.md): - Root > Admin.Products [/api/admin/products](https://docs.dagministry.org/apiadminproducts-40143257e0.md): - Root > Admin.Products [/api/admin/products/{id}](https://docs.dagministry.org/apiadminproductsid-40143258e0.md): - Root > Admin.Products [/api/admin/products/{id}](https://docs.dagministry.org/apiadminproductsid-40143259e0.md): - Root > Admin.Products [/api/admin/products/{id}](https://docs.dagministry.org/apiadminproductsid-40143260e0.md): - Root > Admin.Products [/api/admin/products/{id}/branding](https://docs.dagministry.org/apiadminproductsidbranding-40143261e0.md): - Root > Admin.Products [/api/admin/products/{id}/legacy-count](https://docs.dagministry.org/apiadminproductsidlegacy-count-40143262e0.md): - Root > Admin.Albums [/api/admin/products/{productId}/albums](https://docs.dagministry.org/apiadminproductsproductidalbums-40143263e0.md): - Root > Admin.Albums [/api/admin/products/{productId}/albums](https://docs.dagministry.org/apiadminproductsproductidalbums-40143264e0.md): - Root > Admin.Albums [/api/admin/albums/{id}](https://docs.dagministry.org/apiadminalbumsid-40143265e0.md): - Root > Admin.Albums [/api/admin/albums/{id}](https://docs.dagministry.org/apiadminalbumsid-40143266e0.md): - Root > Admin.Albums [/api/admin/albums/{id}](https://docs.dagministry.org/apiadminalbumsid-40143267e0.md): - Root > Admin.Albums [/api/admin/albums/{id}/cover](https://docs.dagministry.org/apiadminalbumsidcover-40143268e0.md): - Root > Admin.Tracks [/api/admin/albums/{id}/tracks/upload](https://docs.dagministry.org/apiadminalbumsidtracksupload-40143269e0.md): - Root > Admin.Tracks [/api/admin/albums/{id}/tracks/commit](https://docs.dagministry.org/apiadminalbumsidtrackscommit-40143270e0.md): - Root > Admin.Tracks [/api/admin/albums/{id}/tracks/upload-zip](https://docs.dagministry.org/apiadminalbumsidtracksupload-zip-40143271e0.md): Upload a local album ZIP as a raw request body (not multipart). Audio entries are extracted into the upload staging session and returned in the tracks/upload response shape, feeding the standard drafts → commit pipeline. - Root > Admin.Tracks [/api/admin/albums/{id}/tracks/import-onedrive-zip](https://docs.dagministry.org/apiadminalbumsidtracksimport-onedrive-zip-40143272e0.md): Import an album ZIP shared on OneDrive as local tracks — asynchronous. Validates and returns 202 immediately; the work (download, extract, tag-parse into the upload staging area) runs detached and is observed via GET /api/admin/import-progress/{importId}, whose terminal "done" state carries the tracks/upload response shape. - Root > Admin.Tracks [/api/admin/import-progress/{importId}](https://docs.dagministry.org/apiadminimport-progressimportid-40143273e0.md): Poll an asynchronous album-ZIP import. Running phases carry byte/file counters; the terminal "done" phase carries the staged result { sessionId, items, skipped }, "error" carries the error code + message. The entry is cleared after the terminal state is served once. - Root > Admin.Tracks [/api/admin/tracks/{id}](https://docs.dagministry.org/apiadmintracksid-40143274e0.md): - Root > Admin.Tracks [/api/admin/tracks/{id}](https://docs.dagministry.org/apiadmintracksid-40143275e0.md): - Root > Admin.Tracks [Raw lyrics text + stored format](https://docs.dagministry.org/raw-lyrics-text-stored-format-40143276e0.md): - Root > Admin.Tracks [Save/replace lyrics (format detected server-side by content)](https://docs.dagministry.org/savereplace-lyrics-format-detected-server-side-by-content-40143277e0.md): - Root > Admin.Tracks [/api/admin/tracks/{id}/lyrics](https://docs.dagministry.org/apiadmintracksidlyrics-40143278e0.md): - Root > Admin.Tracks [/api/admin/tracks/{id}/set-album-cover](https://docs.dagministry.org/apiadmintracksidset-album-cover-40143279e0.md): - Root > Admin.Tracks [/api/admin/tracks/{id}/localize](https://docs.dagministry.org/apiadmintracksidlocalize-40143280e0.md): Copy a OneDrive track's bytes into local storage; the track becomes sourceType=local with tag metadata (sample rate, codec, embedded cover) backfilled via music-metadata. Idempotent for local tracks. - Root > Admin.OneDrive [/api/admin/albums/{id}/import-onedrive/preview](https://docs.dagministry.org/apiadminalbumsidimport-onedrivepreview-40143281e0.md): - Root > Admin.OneDrive [/api/admin/albums/{id}/import-onedrive/commit](https://docs.dagministry.org/apiadminalbumsidimport-onedrivecommit-40143282e0.md): - Root > Admin.Analytics [/api/admin/analytics/overview](https://docs.dagministry.org/apiadminanalyticsoverview-40143283e0.md): - Root > Admin.Analytics [Plays / likes / unlikes / shares time-series (rollup + today's raw)](https://docs.dagministry.org/plays-likes-unlikes-shares-time-series-rollup-todays-raw-40143284e0.md): - Root > Admin.Analytics [/api/admin/analytics/by-country](https://docs.dagministry.org/apiadminanalyticsby-country-40143285e0.md): - Root > Admin.Analytics [/api/admin/analytics/export/csv](https://docs.dagministry.org/apiadminanalyticsexportcsv-40143286e0.md): - Root > Admin.Contacts [/api/admin/contacts](https://docs.dagministry.org/apiadmincontacts-40143287e0.md): - Root > Admin.Contacts [/api/admin/contacts/{id}](https://docs.dagministry.org/apiadmincontactsid-40143288e0.md): - Root > Admin.Users [/api/admin/users/invite](https://docs.dagministry.org/apiadminusersinvite-40143289e0.md): - Root > Admin.Settings [/api/admin/settings](https://docs.dagministry.org/apiadminsettings-40143290e0.md): - Root > Admin.Settings [/api/admin/settings](https://docs.dagministry.org/apiadminsettings-40143291e0.md): - Root > Admin.Settings [/api/admin/geoip/upload](https://docs.dagministry.org/apiadmingeoipupload-40143292e0.md): - Root > Auth [/api/auth/forgot-password](https://docs.dagministry.org/apiauthforgot-password-40143293e0.md): - Root > Auth [/api/auth/reset-password](https://docs.dagministry.org/apiauthreset-password-40143294e0.md): - Root > Auth [/api/auth/accept-invite](https://docs.dagministry.org/apiauthaccept-invite-40143295e0.md): - Root > Health [/api/health](https://docs.dagministry.org/apihealth-40143296e0.md): ## Schemas - Root [Error](https://docs.dagministry.org/error-17530510d0.md): - Root [BrandColors](https://docs.dagministry.org/brandcolors-17530511d0.md): - Root [PublicProduct](https://docs.dagministry.org/publicproduct-17530512d0.md): - Root [AlbumSummary](https://docs.dagministry.org/albumsummary-17530513d0.md): - Root [TrackSummary](https://docs.dagministry.org/tracksummary-17530514d0.md): - Root [LyricsResponse](https://docs.dagministry.org/lyricsresponse-17530515d0.md): - Root [EngagementByDatePoint](https://docs.dagministry.org/engagementbydatepoint-17530516d0.md): - Root [AlbumDetail](https://docs.dagministry.org/albumdetail-17530517d0.md): - Root [Contact](https://docs.dagministry.org/contact-17530518d0.md): - Root [DownloadSubmitRequest](https://docs.dagministry.org/downloadsubmitrequest-17530519d0.md): - Root [DownloadSubmitResponse](https://docs.dagministry.org/downloadsubmitresponse-17530520d0.md): - Root [Geo](https://docs.dagministry.org/geo-17530521d0.md): - Root [Health](https://docs.dagministry.org/health-17530522d0.md): - Root [AdminProduct](https://docs.dagministry.org/adminproduct-17530523d0.md): - Root [OneDrivePreviewItem](https://docs.dagministry.org/onedrivepreviewitem-17530524d0.md): - Root [AnalyticsOverview](https://docs.dagministry.org/analyticsoverview-17530525d0.md): - Root [Error](https://docs.dagministry.org/error-16478691d0.md): - Root [BrandColors](https://docs.dagministry.org/brandcolors-16478692d0.md): - Root [PublicProduct](https://docs.dagministry.org/publicproduct-16478693d0.md): - Root [AlbumSummary](https://docs.dagministry.org/albumsummary-16478694d0.md): - Root [TrackSummary](https://docs.dagministry.org/tracksummary-16478695d0.md): - Root [LyricsResponse](https://docs.dagministry.org/lyricsresponse-16478696d0.md): - Root [EngagementByDatePoint](https://docs.dagministry.org/engagementbydatepoint-16478697d0.md): - Root [AlbumDetail](https://docs.dagministry.org/albumdetail-16478698d0.md): - Root [Contact](https://docs.dagministry.org/contact-16478699d0.md): - Root [DownloadSubmitRequest](https://docs.dagministry.org/downloadsubmitrequest-16478700d0.md): - Root [DownloadSubmitResponse](https://docs.dagministry.org/downloadsubmitresponse-16478701d0.md): - Root [Geo](https://docs.dagministry.org/geo-16478702d0.md): - Root [Health](https://docs.dagministry.org/health-16478703d0.md): - Root [AdminProduct](https://docs.dagministry.org/adminproduct-16478704d0.md): - Root [OneDrivePreviewItem](https://docs.dagministry.org/onedrivepreviewitem-16478705d0.md): - Root [AnalyticsOverview](https://docs.dagministry.org/analyticsoverview-16478706d0.md):