Albums
Pressie albums are albums other profiles shared with you. POST /v3/pressie-albums/feed lists them in sharedAlbums; albumViewable: false marks a locked one, and POST /v3/pressie-albums/feed/paywall/ returns blurred previews of locked albums. profileFeeds holds new content from those albums, one entry per profile, with paywallStatus: PAYWALL on locked entries.
Get my albums
Requires Authorization.
GET /v1/albumsResponse:
albums— array of MyAlbum
Get an album
Requires Authorization.
GET /v2/albums/{albumId}Response:
Errors:
403— if you don't have access to album or it doesn't exist
Rename an album
Requires Authorization.
PUT /v2/albums/{albumId}Body:
albumName— string ornull
Response:
albumId— integeralbumName— string ornull
Get an album media poster
Requires Authorization.
GET /v1/albums/{albumId}/content/{contentId}/posterResponse:
blurredPosterUrl— URLposterUrl— URL
Record view of an album
GET /v3/albums/{albumId}/viewResponse:
Empty.
Errors:
403— Repeated requests after invoking this endpoint on view ONCE albums cause HTTP status 403 Forbidden andAction not permittederror.
Record view of media in an album
Requires Authorization.
Repeated requests after reaching remainingViews=0 do not cause any errors.
POST /v1/albums/{albumId}/view/content/{contentId}Response:
remainingViews— integer
Get info about profile's album
Requires Authorization.
POST /v2/albums/sharesBody:
profileId— long integer
Response:
profileId— long integerhasAlbum— booleanhasSharedWithMe— boolean
Get albums shared by a profile
Requires Authorization.
GET /v2/albums/shares/{profileId}Response:
albums— array of objects- everything from AlbumMin
- everything from AlbumExpiration
profileId— integercontent— AlbumContentMin, a single blurred preview content itemcontentCount— objectimageCount— integervideoCount— integer
Create an album
Requires Authorization.
POST /v2/albumsBody:
albumName— string ornull
Response:
albumId— long integeralbumName— string ornull
Errors:
402— The account already hasmaxAlbumsalbums, see Get album limits.
Delete an album
Requires Authorization.
DELETE /v1/albums/{albumId}Response:
Empty
Errors:
403— Repeated requests cause 403 Forbidden andAction not permittederror.
Upload media to an album
Requires Authorization.
New media is added at the start of the album's content. Uploading a photo byte-identical to one already in the album adds nothing and returns the existing contentId.
A newly uploaded video is transcoded before it is ready: until then its album item has statusId 3 and processing true, see Get album media processing status. Video bytes the server has already transcoded come back ready (statusId 1) immediately. A video the transcoder cannot handle keeps processing true indefinitely.
POST /v1/albums/{albumId}/contentQuery (optional):
width— integer, not validated and doesn't affect the stored media, videos get400without it, optionalheight— integer, not validated and doesn't affect the stored media, videos get400without it, optionalisFresh— boolean, effect unknown, WIP, optional
Body:
Content-Type: multipart/form-data
content— binary
Response:
contentId— long integercontentUrl— string ornull,nullfor photo and video uploads
Errors:
400— A video was uploaded withoutwidthorheight.402— The album already holdsmaxContentItemsPerAlbumphotos, or the upload is a video and the album already holdsmaxVideosPerAlbumvideos, see Get album limits. The check runs before photo de-duplication, so a duplicate photo gets402too. A video that is still processing does not count towardmaxVideosPerAlbum. Empty body.413— The wholemultipart/form-datarequest body is larger thanmaxContentSize, see Get album limits. Empty body.
Reorder media in an album
Requires Authorization.
POST /v1/albums/{albumId}/content/orderBody:
contentIds— array of long integers, each Media file ID must appear exactly once
Errors:
400—contentIdsdoesn't list every media file in the album.
Delete media from an album
Requires Authorization.
Technically, this does not delete the media from CDN. All signed URLs will continue to work until expired. Uploading the same photo again assigns it the same contentId, uploading the same video again assigns a new one.
DELETE /v1/albums/{albumId}/content/{contentId}Response:
Empty
Errors:
400— The media is still processing (processingistrue). Empty body.
Get album media processing status
Requires Authorization.
GET /v1/albums/{albumId}/content/{contentId}/processingResponse:
processing— boolean,truewhile a video is being transcoded, alwaysfalsefor photos
Pics, WIP
NOTE
This endpoint hasn't been researched yet
GET /v1/pics/limited/statusResponse:
available— integertotal— integer
Pics expiring, WIP
NOTE
This endpoint hasn't been researched yet
POST /v4/pics/expiringPics expiring status, WIP
NOTE
This endpoint hasn't been researched yet
GET /v4/pics/expiring/statusVideos expiring status, WIP
NOTE
This endpoint hasn't been researched yet
GET /v4/videos/expiring/statusGet album shares
Requires Authorization.
Returns profiles the album was shared with.
GET /v1/albums/{albumId}/sharesResponse:
profileIds— array of integers
Share an album
Requires Authorization.
Automatically sends the shared album to chat with all listed profiles.
POST /v4/albums/{albumId}/sharesBody:
profiles— array of objectsexpirationType— AlbumExpirationTypeprofileId— integer
Response:
Empty
Unshare an album
Requires Authorization.
PUT /v1/albums/{albumId}/unsharesBody:
profiles— array of objectsprofileId— long integershareId— string, not validated, the official client sends a random UUID v4
Response:
Empty
Unshare an album from everybody, WIP
NOTE
This endpoint hasn't been researched yet
Unknown, returns 403
PUT /v1/albums/{albumId}/shares/removeAdd drawer media to an album
Requires Authorization.
Copies media from the drawer into the album. ids are drawer media ids. A video id results in 400, even within maxVideoLength.
POST /v1/albums/{albumId}/content/chat/list-by-idQuery:
isFresh— boolean
Body:
ids— array of long integers
Response:
Empty.
Errors:
402— The album is full. Unlike Upload media to an album, its video counts towardmaxContentItemsPerAlbum. Empty body.
Get album limits
Requires Authorization.
Interestingly, /v2/albums/storage appears to exist, though it is not used in the current version of the APK.
GET /v1/albums/storageResponse:
subscriptionType— string, e.g.FreeAlbumsmaxAlbums— integermaxContentItemsPerAlbum— integer, photos per album, videos don't countmaxShares— integermaxViewableAlbums— integermaxViewableVideos— integermaxContentSize— long integer, size in bytes of the whole upload request bodymaxContentSizeHumanReadable— string, incorrectly uses decimal multiples notation (MB) when it in fact calculates binary notation (MiB), so API's120.00 MBis actually 120 MiB or 125.8291 MBmaxVideoLength— long integer, length in milliseconds (1/1000th of a second), not enforced by the serverminVideoLength— long integer, length in milliseconds (1/1000th of a second)maxShareableAlbums— integermaxVideosPerAlbum— integer, videos per album, counted separately frommaxContentItemsPerAlbum, so a full album holdsmaxContentItemsPerAlbumphotos plusmaxVideosPerAlbumvideos
Albums red dot, WIP
NOTE
This endpoint hasn't been researched yet
This may just be tracking but could also be related to something else
PUT /v1/albums/red-dotResponse:
Empty.
Gets albums shared with us
Requires Authorization.
POST /v3/pressie-albums/feedBody (optional):
isFavorite— boolean, optional, only albums shared by favorite usersisOnline— boolean, optional, only albums shared by currently online usersonlyVideo— boolean, optional, only albums with at least one videoblur— boolean, optional, blur media urls in response
Response:
profileFeeds— array of objectsprofileId— integerpaywallStatus— string,ALLOWorPAYWALL(locked)seen— booleancontent— objectprofile— PressieProfileMini
sharedAlbums— array of objects- everything from AlbumPreview
albumViewable— booleanalbumVersion— integerexpiresAt— unix timestamp in milliseconds ornullname— string ornullownerProfileId— integerimageCount— integervideoCount— integercoverContent— objectid— long integercontentType— stringlocation— string, cover media location/URLstatus— string
profile— PressieProfileMini
experimentStatus— integer ornullnonEmptyPersonalAlbumCount— integeremptyAlbumId— long integer ornull
Get previews of locked albums shared with us
POST /v3/pressie-albums/feed/paywall/Body (optional):
counterpartyId— long integer, profile ID ornull
Response:
albumPaywallContent— array of objectsalbumId— long integerprofile— PressieProfileMinipaywallCoverUrl— see Media -> Signed CDN filespaywallUrls— see Media -> Signed CDN filesalbumsItemCount— integer
Pressie albums feed profile ID, WIP
NOTE
This endpoint hasn't been researched yet
GET /v3/pressie-albums/feed/{profileId}Pressie albums feed update read, WIP
NOTE
This endpoint hasn't been researched yet
POST /v3/pressie-albums/feed/update/readGets fresh albums shared with us
Requires Authorization.
POST /v3/pressie-albums/fresh-feedBody:
isFavorite— boolean, optional, only albums shared by favorite usersisOnline— boolean, optional, only albums shared by currently online usersonlyVideo— boolean, optional, only albums with at least one videoblur— boolean, optional, blur media urls in response
Response:
profileFeeds— array of objectsprofileId— integerpaywallStatus— string,ALLOWorPAYWALL(locked)seen— booleancontent— objectprofile— PressieProfileMini
sharedAlbums— array of objects- everything from AlbumPreview
albumViewable— booleanalbumVersion— integerexpiresAt— unix timestamp in milliseconds ornullname— string ornullownerProfileId— integerimageCount— integervideoCount— integercoverContent— objectid— long integercontentType— stringlocation— string, cover media location/URLstatus— string
profile— PressieProfileMini
experimentStatus— integer ornullnonEmptyPersonalAlbumCount— integeremptyAlbumId— long integer ornull
AlbumExpirationType
Album expiration type.
Previously shared albums in chat inherit new expirationType settings from newer sharings of the album.
"INDEFINITE"or0— "Indefinitely""ONCE"or1— "View Once", limited by 30 minutes from request"TEN_MINUTES"or2— "For 10 Minutes""ONE_HOUR"or3— "For 60 Minutes""ONE_DAY"or4— "For 24 Hours"
AlbumPreview
albumId— long integeralbumNumber— integer ornullif album has expired or was lockedtotalAlbumsShared— integer ornullif album has expired or was lockedhasUnseenContent— boolean
AlbumMin
- everything from AlbumPreview
albumName— string, appears to always benullprofileId— integeralbumViewable— boolean
AlbumDetails
sharedCount— integercreatedAt— string, date formatted as ISO 8601, e.g.2026-03-27T20:39:00updatedAt— string, date formatted as ISO 8601, e.g.2026-03-27T20:39:00
AlbumExpiration
expiresAt— unix timestamp in milliseconds ornullexpirationType— AlbumExpirationType ornull
AlbumContentMin
contentId— long integercontentType— stringcoverUrl— AlbumCoverUrlstatusId— integer,1ready,3processing, other values unknown
AlbumContent
- everything from AlbumContentMin
thumbUrl— string, unblurred preview, see Media -> Signed CDN filesurl— string, original file, see Media -> Signed CDN files, may be""ifremainingViewsis 0processing— boolean,truewhile the server transcodes an uploaded video;statusIdis then3, andcoverUrl,thumbUrlandurlall equal the placeholderhttps://d3w4wp6rol9nvz.cloudfront.net/https://d1weu1y74qn7ma.cloudfront.net/albums-video-loading.mp4rejectionId— unknown ornull
MyAlbum
- everything from AlbumDetails
albumId— long integeralbumName— see Album name ornullprofileId— integerversion— integercontent— array of AlbumContentWithHashisShareable— boolean
AlbumContentWithHash
- everything from AlbumContent
contentHash— string, lowercase hex SHA-256 of the uploaded bytes, optional
AlbumContentWithRemainingViews
- everything from AlbumContent
remainingViews— integer, might be -1; absent if this is your own album, optional
AlbumDetailsResponse
- everything from AlbumMin
- everything from AlbumDetails
content— array of AlbumContentWithRemainingViewsisShareable— booleancontentCount— object ornull, optionalimageCount— integervideoCount— integer
AlbumShareInfo
profileId— long integerhasAlbum— booleanhasSharedWithMe— boolean
AlbumsSharedByProfileResponse
albums— array of objects- everything from AlbumMin
- everything from AlbumExpiration
profileId— integercontent— AlbumContentMin, a single blurred preview content itemcontentCount— objectimageCount— integervideoCount— integer
Album name
String, may be empty ("") or null, non-string values are coerced into strings.
Maximum length: 255 UTF-8 bytes, which is 255 characters for ASCII strings (1 ASCII character is encoded as 1 byte) but less if you include emojis or non-ascii characters (2+ bytes/one codepoint).
albumName— string ornull
AlbumRenameResponse
albumId— integeralbumName— string ornull
AlbumShareRequest
profiles— array of objectsexpirationType— AlbumExpirationTypeprofileId— integer
AlbumUnshareRequest
profiles— array of objectsprofileId— long integershareId— string, not validated, the official client sends a random UUID v4
AlbumContentUploadResponse
contentId— long integercontentUrl— string ornull,nullfor photo and video uploads
AlbumContentProcessingResponse
processing— boolean,truewhile a video is being transcoded, alwaysfalsefor photos
AlbumStorageLimits
subscriptionType— string, e.g.FreeAlbumsmaxAlbums— integermaxContentItemsPerAlbum— integer, photos per album, videos don't countmaxShares— integermaxViewableAlbums— integermaxViewableVideos— integermaxContentSize— long integer, size in bytes of the whole upload request bodymaxContentSizeHumanReadable— string, incorrectly uses decimal multiples notation (MB) when it in fact calculates binary notation (MiB), so API's120.00 MBis actually 120 MiB or 125.8291 MBmaxVideoLength— long integer, length in milliseconds (1/1000th of a second), not enforced by the serverminVideoLength— long integer, length in milliseconds (1/1000th of a second)maxShareableAlbums— integermaxVideosPerAlbum— integer, videos per album, counted separately frommaxContentItemsPerAlbum, so a full album holdsmaxContentItemsPerAlbumphotos plusmaxVideosPerAlbumvideos
PressieProfileMini
profileId— long integer, optionalname— string, optionalprofileUrl— string ornull, optionalonlineUntil— unix timestamp in milliseconds ornull, optionaldistanceKm— number ornull, optional
PressieAlbumsFeedResponse
profileFeeds— array of objectsprofileId— integerpaywallStatus— string,ALLOWorPAYWALL(locked)seen— booleancontent— objectprofile— PressieProfileMini
sharedAlbums— array of objects- everything from AlbumPreview
albumViewable— booleanalbumVersion— integerexpiresAt— unix timestamp in milliseconds ornullname— string ornullownerProfileId— integerimageCount— integervideoCount— integercoverContent— objectid— long integercontentType— stringlocation— string, cover media location/URLstatus— string
profile— PressieProfileMini
experimentStatus— integer ornull, optionalnonEmptyPersonalAlbumCount— integeremptyAlbumId— long integer ornull, optional
PressieAlbumsPaywallResponse
albumPaywallContent— array of objectsalbumId— long integerprofile— PressieProfileMinipaywallCoverUrl— see Media -> Signed CDN filespaywallUrls— see Media -> Signed CDN filesalbumsItemCount— integer
AlbumCoverUrl
String with URL or null, blurred downscaled preview.
JPEG photo with the first frame of video in case of video files.
Becomes unavailable (AccessDenied) after album has expired.