{"openapi":"3.0.3","info":{"title":"URSY Photos API","version":"1.1.0","description":"Private photo APIs. Use opaque cursors for stable upload pagination, changes for synchronization, short-lived asset grants for files and ID-approved plans for sharing."},"servers":[{"url":"https://ursy.photos/api/v1"}],"paths":{"/photos":{"get":{"operationId":"photos_list","summary":"List authorised photos with a stable upload snapshot and opaque pagination cursor.","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"List authorised photos with a stable upload snapshot and opaque pagination cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhotoPage"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"cursor","in":"query","schema":{"type":"string","maxLength":4096}},{"name":"after","in":"query","schema":{"type":"string","maxLength":64}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"taken_from","in":"query","schema":{"type":"string"}},{"name":"taken_to","in":"query","schema":{"type":"string"}},{"name":"uploaded_from","in":"query","schema":{"type":"string"}},{"name":"uploaded_to","in":"query","schema":{"type":"string"}},{"name":"album_id","in":"query","schema":{"type":"integer","minimum":1}},{"name":"favourite","in":"query","schema":{"type":"boolean"}},{"name":"mime","in":"query","schema":{"type":"string"}},{"name":"filename","in":"query","schema":{"type":"string","maxLength":191}},{"name":"camera","in":"query","schema":{"type":"string","maxLength":191}},{"name":"has_location","in":"query","schema":{"type":"boolean"}},{"name":"status","in":"query","schema":{"type":"string","enum":["live","trash"]}}]}},"/photos/search":{"get":{"operationId":"photos_search","summary":"Search metadata, date, album, favourites, format, camera or filename. Location filtering also requires location permission.","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"Search metadata, date, album, favourites, format, camera or filename. Location filtering also requires location permission.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhotoPage"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"cursor","in":"query","schema":{"type":"string","maxLength":4096}},{"name":"after","in":"query","schema":{"type":"string","maxLength":64}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"taken_from","in":"query","schema":{"type":"string"}},{"name":"taken_to","in":"query","schema":{"type":"string"}},{"name":"uploaded_from","in":"query","schema":{"type":"string"}},{"name":"uploaded_to","in":"query","schema":{"type":"string"}},{"name":"album_id","in":"query","schema":{"type":"integer","minimum":1}},{"name":"favourite","in":"query","schema":{"type":"boolean"}},{"name":"mime","in":"query","schema":{"type":"string"}},{"name":"filename","in":"query","schema":{"type":"string","maxLength":191}},{"name":"camera","in":"query","schema":{"type":"string","maxLength":191}},{"name":"has_location","in":"query","schema":{"type":"boolean"}},{"name":"status","in":"query","schema":{"type":"string","enum":["live","trash"]}}]}},"/photos/{id}":{"get":{"operationId":"photos_get","summary":"photos get","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"photos get","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Photo"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]},"patch":{"operationId":"photos_favourite","summary":"photos favourite","security":[{"URSY_ID":["photos.metadata.write"]}],"responses":{"200":{"description":"photos favourite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Favourite"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"favourite":{"type":"boolean"}},"required":["favourite"],"additionalProperties":false}}}}}},"/quota":{"get":{"operationId":"photos_quota","summary":"photos quota","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"photos quota","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quota"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/me":{"get":{"operationId":"account_get","summary":"account get","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"account get","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/photos/{id}/asset-grants":{"post":{"operationId":"photos_asset_grant","summary":"Request a short-lived asset URL; originals additionally require original and location permissions.","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"Request a short-lived asset URL; originals additionally require original and location permissions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetGrant"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"size":{"type":"string","enum":["sm","md","lg","original"]},"expires_in":{"type":"integer","minimum":30,"maximum":300}},"additionalProperties":false}}}}}},"/albums":{"get":{"operationId":"albums_list","summary":"albums list","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"albums list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlbumPage"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"after","in":"query","schema":{"type":"string","maxLength":64}}]},"post":{"operationId":"albums_create","summary":"albums create","security":[{"URSY_ID":["photos.albums.write"]}],"responses":{"200":{"description":"albums create","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Mutation"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120}},"required":["title"],"additionalProperties":false}}}}}},"/albums/{id}":{"get":{"operationId":"albums_get","summary":"albums get","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"albums get","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlbumDetail"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]},"patch":{"operationId":"albums_rename","summary":"albums rename","security":[{"URSY_ID":["photos.albums.write"]}],"responses":{"200":{"description":"albums rename","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Mutation"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120}},"required":["title"],"additionalProperties":false}}}}},"delete":{"operationId":"albums_delete","summary":"Delete an album; retain its photos and revoke its album sharing links.","security":[{"URSY_ID":["photos.albums.write"]}],"responses":{"200":{"description":"Delete an album; retain its photos and revoke its album sharing links.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Mutation"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]}},"/albums/{id}/photos":{"post":{"operationId":"albums_add_photos","summary":"albums add photos","security":[{"URSY_ID":["photos.albums.write"]}],"responses":{"200":{"description":"albums add photos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Mutation"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","minimum":1},"maxItems":500}},"required":["ids"],"additionalProperties":false}}}}},"delete":{"operationId":"albums_remove_photos","summary":"albums remove photos","security":[{"URSY_ID":["photos.albums.write"]}],"responses":{"200":{"description":"albums remove photos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Mutation"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","minimum":1},"maxItems":500}},"required":["ids"],"additionalProperties":false}}}}},"get":{"operationId":"albums_photos","summary":"albums photos","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"albums photos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhotoPage"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","schema":{"type":"string","maxLength":4096}},{"name":"after","in":"query","schema":{"type":"string","maxLength":64}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}]}},"/upload/init":{"post":{"operationId":"uploads_init","summary":"uploads init","security":[{"URSY_ID":["photos.upload"]}],"responses":{"200":{"description":"uploads init","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadSession"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":191},"size":{"type":"integer","minimum":1,"maximum":26214400},"mime":{"type":"string"},"album_id":{"type":"integer","minimum":1}},"required":["name","size","mime"],"additionalProperties":false}}}},"parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string","minLength":16,"maxLength":128},"description":"Reuse for an uncertain retry of the same operation; exports also accept operation_id in JSON."}]}},"/upload/finish":{"post":{"operationId":"uploads_finish","summary":"uploads finish","security":[{"URSY_ID":["photos.upload"]}],"responses":{"200":{"description":"uploads finish","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Receipt"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["upload_id","sha256"],"additionalProperties":false}}}}}},"/upload/{upload_id}":{"get":{"operationId":"uploads_status","summary":"uploads status","security":[{"URSY_ID":["photos.upload"]}],"responses":{"200":{"description":"uploads status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadStatus"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"}}]},"delete":{"operationId":"uploads_cancel","summary":"uploads cancel","security":[{"URSY_ID":["photos.upload"]}],"responses":{"200":{"description":"uploads cancel","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelledUpload"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"}}]}},"/upload/chunk":{"post":{"operationId":"uploads_chunk","summary":"Upload raw bytes, at most 2 MiB, at the confirmed contiguous offset.","security":[{"URSY_ID":["photos.upload"]}],"responses":{"200":{"description":"Upload raw bytes, at most 2 MiB, at the confirmed contiguous offset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadChunk"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"upload_id","in":"query","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"}},{"name":"offset","in":"query","required":true,"schema":{"type":"integer","minimum":0}}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary","maxLength":2097152}}}}}},"/photo/{id}":{"delete":{"operationId":"photos_trash","summary":"photos trash","security":[{"URSY_ID":["photos.trash.write"]}],"responses":{"200":{"description":"photos trash","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Mutation"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]}},"/photo/{id}/restore":{"post":{"operationId":"photos_restore","summary":"photos restore","security":[{"URSY_ID":["photos.trash.write"]}],"responses":{"200":{"description":"photos restore","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Mutation"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]}},"/trash":{"get":{"operationId":"trash_list","summary":"trash list","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"trash list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Trash"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/timeline":{"get":{"operationId":"timeline","summary":"timeline","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"timeline","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Timeline"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"before","in":"query","schema":{"type":"string"}}]}},"/stack":{"get":{"operationId":"stack","summary":"stack","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"stack","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stack"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"date","in":"query","schema":{"type":"string"}}]}},"/changes":{"get":{"operationId":"library_changes","summary":"library changes","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"library changes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Changes"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"cursor","in":"query","schema":{"type":"string","maxLength":4096}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}]}},"/activity":{"get":{"operationId":"library_activity","summary":"library activity","security":[{"URSY_ID":["photos.activity.read"]}],"responses":{"200":{"description":"library activity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Changes"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"cursor","in":"query","schema":{"type":"string","maxLength":4096}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}]}},"/duplicates":{"get":{"operationId":"photos_duplicates","summary":"photos duplicates","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"photos duplicates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Duplicates"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"after","in":"query","schema":{"type":"string","maxLength":64}}]}},"/library/status":{"get":{"operationId":"library_status","summary":"library status","security":[{"URSY_ID":["photos.read"]}],"responses":{"200":{"description":"library status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/shares":{"get":{"operationId":"shares_list","summary":"shares list","security":[{"URSY_ID":["photos.shares.read"]}],"responses":{"200":{"description":"shares list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shares"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"shares_legacy_plan","summary":"shares legacy plan","security":[{"URSY_ID":["photos.shares.plan"]}],"responses":{"202":{"description":"shares legacy plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareApprovalRequired"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"album_id":{"type":"integer","minimum":1},"photo_id":{"type":"integer","minimum":1},"expires_days":{"type":"integer","minimum":0}},"additionalProperties":false}}}}}},"/shares/plan":{"post":{"operationId":"shares_plan","summary":"shares plan","security":[{"URSY_ID":["photos.shares.plan"]}],"responses":{"200":{"description":"shares plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharePlan"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"photo_ids":{"type":"array","items":{"type":"integer","minimum":1},"maxItems":1000},"album_id":{"type":"integer","minimum":1},"photo_id":{"type":"integer","minimum":1},"expires_days":{"type":"integer","minimum":1,"maximum":365}},"additionalProperties":false}}}}}},"/shares/plans/{id}":{"get":{"operationId":"shares_get_plan","summary":"shares get plan","security":[{"URSY_ID":["photos.shares.plan"]}],"responses":{"200":{"description":"shares get plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharePlan"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"}}]}},"/shares/apply":{"post":{"operationId":"shares_apply","summary":"Publish only the unchanged exact plan after the owner approves it on URSY ID.","security":[{"URSY_ID":["photos.shares.apply"]}],"responses":{"200":{"description":"Publish only the unchanged exact plan after the owner approves it on URSY ID.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareApplied"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"plan_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"plan_hash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["plan_id","plan_hash"],"additionalProperties":false}}}}}},"/shares/{id}":{"delete":{"operationId":"shares_revoke","summary":"shares revoke","security":[{"URSY_ID":["photos.shares.plan"]}],"responses":{"200":{"description":"shares revoke","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Mutation"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}]}},"/exports":{"post":{"operationId":"exports_create","summary":"Queue an export with unchanged originals, metadata, album membership and SHA-256 checksums.","security":[{"URSY_ID":["photos.export","photos.originals.read","photos.location.read"]}],"responses":{"202":{"description":"Queue an export with unchanged originals, metadata, album membership and SHA-256 checksums.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"photo_ids":{"type":"array","items":{"type":"integer","minimum":1},"maxItems":1000},"album_id":{"type":"integer","minimum":1},"photo_id":{"type":"integer","minimum":1},"operation_id":{"type":"string","pattern":"^[A-Za-z0-9._-]{16,128}$"}},"additionalProperties":false}}}},"parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string","minLength":16,"maxLength":128},"description":"Reuse for an uncertain retry of the same operation; exports also accept operation_id in JSON."}]}},"/tasks":{"get":{"operationId":"tasks_list","summary":"tasks list","security":[{"URSY_ID":["photos.export"]}],"responses":{"200":{"description":"tasks list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tasks"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"after","in":"query","schema":{"type":"string","maxLength":64}}]}},"/tasks/{id}":{"get":{"operationId":"tasks_get","summary":"tasks get","security":[{"URSY_ID":["photos.export"]}],"responses":{"200":{"description":"tasks get","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"}}]},"delete":{"operationId":"tasks_cancel","summary":"tasks cancel","security":[{"URSY_ID":["photos.export"]}],"responses":{"200":{"description":"tasks cancel","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"}}]}},"/tasks/{id}/download-grant":{"post":{"operationId":"exports_download_grant","summary":"exports download grant","security":[{"URSY_ID":["photos.export","photos.originals.read","photos.location.read"]}],"responses":{"200":{"description":"exports download grant","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadGrant"}}}},"400":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"507":{"description":"Structured error; see error.code and request_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"}}]}}},"components":{"schemas":{"PreviewMetadata":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"taken_at":{"type":"string"},"w":{"type":"integer","minimum":0},"h":{"type":"integer","minimum":0},"place":{"type":"string","nullable":true},"src":{"type":"string","format":"uri"},"thumb":{"type":"string","format":"uri"},"full":{"type":"string","format":"uri"}},"required":["id","taken_at","w","h","place"]},"Photo":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"taken_at":{"type":"string"},"w":{"type":"integer","minimum":0},"h":{"type":"integer","minimum":0},"place":{"type":"string","nullable":true},"src":{"type":"string","format":"uri"},"thumb":{"type":"string","format":"uri"},"full":{"type":"string","format":"uri"},"bytes":{"type":"integer","minimum":0},"mime":{"type":"string"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"original_name":{"type":"string"},"camera":{"type":"string","nullable":true},"favourite":{"type":"boolean"},"uploaded_at":{"type":"string","nullable":true},"original":{"type":"string","format":"uri"}},"required":["id","taken_at","w","h","bytes","mime","sha256","favourite","original_name"]},"PhotoPage":{"type":"object","properties":{"photos":{"type":"array","items":{"$ref":"#/components/schemas/Photo"},"maxItems":100},"next_cursor":{"type":"string","nullable":true},"next_after":{"type":"string","nullable":true},"library_revision":{"type":"integer","minimum":0},"sync_cursor":{"type":"string"},"snapshot_max_id":{"type":"integer","minimum":0}},"required":["photos","next_cursor","next_after","library_revision","sync_cursor","snapshot_max_id"]},"Quota":{"type":"object","properties":{"plan":{"type":"string"},"used":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":0},"percent":{"type":"number"},"over":{"type":"boolean"},"count":{"type":"integer","minimum":0}},"required":["plan","used","limit","percent","over"]},"Me":{"type":"object","properties":{"sub":{"type":"string"},"resource":{"type":"string","format":"uri"},"quota":{"$ref":"#/components/schemas/Quota"}},"required":["sub","resource","quota"]},"Album":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"title":{"type":"string"},"count":{"type":"integer","minimum":0},"shared":{"type":"boolean"},"created":{"type":"string"},"cover":{"allOf":[{"$ref":"#/components/schemas/PreviewMetadata"}],"nullable":true}},"required":["id","title","count","shared","created","cover"]},"AlbumPage":{"type":"object","properties":{"albums":{"type":"array","items":{"$ref":"#/components/schemas/Album"},"maxItems":100},"demo":{"type":"boolean"},"next_after":{"type":"string","nullable":true}},"required":["albums","demo","next_after"]},"Section":{"type":"object","properties":{"date":{"type":"string"},"count":{"type":"integer","minimum":0},"photos":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMetadata"},"maxItems":2000}},"required":["date","count","photos"]},"Timeline":{"type":"object","properties":{"sections":{"type":"array","items":{"$ref":"#/components/schemas/Section"},"maxItems":20},"next_before":{"type":"string","nullable":true},"demo":{"type":"boolean"}},"required":["sections","next_before","demo"]},"Stack":{"type":"object","properties":{"date":{"type":"string"},"photos":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMetadata"},"maxItems":50},"demo":{"type":"boolean"}},"required":["date","photos","demo"]},"AlbumDetail":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"title":{"type":"string"},"shared":{"type":"boolean"},"created":{"type":"string"},"count":{"type":"integer","minimum":0},"photos":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMetadata"},"maxItems":2000},"sections":{"type":"array","items":{"$ref":"#/components/schemas/Section"}},"demo":{"type":"boolean"}},"required":["id","title","shared","created","count","photos","sections","demo"]},"Mutation":{"type":"object","properties":{"ok":{"type":"boolean"},"id":{"type":"integer","minimum":1},"title":{"type":"string"},"added":{"type":"integer","minimum":0},"removed":{"type":"integer","minimum":0},"album_id":{"type":"integer","minimum":1},"days":{"type":"integer","minimum":0}},"required":["ok"]},"Favourite":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"favourite":{"type":"boolean"}},"required":["id","favourite"]},"UploadSession":{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"chunk_bytes":{"type":"integer","minimum":0},"expires_in":{"type":"integer","minimum":0}},"required":["upload_id","chunk_bytes","expires_in"]},"UploadChunk":{"type":"object","properties":{"received":{"type":"integer","minimum":0},"size":{"type":"integer","minimum":0},"replayed":{"type":"boolean"}},"required":["received","size"]},"Receipt":{"type":"object","properties":{"photo_id":{"type":"integer","minimum":1},"duplicate":{"type":"boolean"},"verified":{"type":"boolean"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"bytes":{"type":"integer","minimum":0},"w":{"type":"integer","minimum":0},"h":{"type":"integer","minimum":0},"status":{"type":"string","enum":["live","trash"]}},"required":["photo_id","duplicate","verified","sha256","bytes","w","h","status"]},"UploadStatus":{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"received":{"type":"integer","minimum":0},"size":{"type":"integer","minimum":0},"expires_at":{"type":"string"},"receipt":{"allOf":[{"$ref":"#/components/schemas/Receipt"}],"nullable":true}},"required":["upload_id","received","size","expires_at","receipt"]},"CancelledUpload":{"type":"object","properties":{"cancelled":{"type":"boolean"}},"required":["cancelled"]},"Trash":{"type":"object","properties":{"photos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"taken_at":{"type":"string"},"w":{"type":"integer","minimum":0},"h":{"type":"integer","minimum":0},"place":{"type":"string","nullable":true},"src":{"type":"string","format":"uri"},"thumb":{"type":"string","format":"uri"},"full":{"type":"string","format":"uri"},"trashed_at":{"type":"string","nullable":true},"days_left":{"type":"integer","minimum":0}},"required":["id","days_left"]},"maxItems":500},"days":{"type":"integer","minimum":0},"demo":{"type":"boolean"}},"required":["photos","days","demo"]},"AssetGrant":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"url":{"type":"string","format":"uri"},"expires_at":{"type":"string"},"size":{"type":"string","enum":["sm","md","lg","original"]},"exif":{"type":"string","enum":["stripped","original_unchanged"]}},"required":["id","url","expires_at","size","exif"]},"Change":{"type":"object","properties":{"sequence":{"type":"integer","minimum":0},"revision":{"type":"integer","minimum":0},"type":{"type":"string"},"object_type":{"type":"string"},"object_id":{"type":"integer","minimum":0},"tombstone":{"type":"boolean"},"at":{"type":"string"},"provenance":{"type":"object","properties":{"client_id":{"type":"string"},"grant_id":{"type":"string"},"request_id":{"type":"string"},"surface":{"type":"string"}},"required":["client_id","grant_id","request_id","surface"]}},"required":["sequence","revision","type","object_type","object_id","tombstone","at"]},"Changes":{"type":"object","properties":{"changes":{"type":"array","items":{"$ref":"#/components/schemas/Change"},"maxItems":100},"cursor":{"type":"string"},"has_more":{"type":"boolean"},"library_revision":{"type":"integer","minimum":0},"retention_days":{"type":"integer","minimum":0}},"required":["changes","cursor","has_more","library_revision","retention_days"]},"Duplicates":{"type":"object","properties":{"groups":{"type":"array","items":{"type":"object","properties":{"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"count":{"type":"integer","minimum":0},"photo_ids":{"type":"array","items":{"type":"integer","minimum":1},"maxItems":100},"ids_truncated":{"type":"boolean"}},"required":["sha256","count","photo_ids","ids_truncated"]},"maxItems":50},"next_after":{"type":"string","nullable":true},"method":{"type":"string","enum":["sha256_exact"]},"automatic_deletion":{"type":"boolean"}},"required":["groups","next_after","method","automatic_deletion"]},"SharePlan":{"type":"object","properties":{"plan_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"plan_hash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"photo_ids":{"type":"array","items":{"type":"integer","minimum":1},"maxItems":1000},"count":{"type":"integer","minimum":0},"library_revision":{"type":"integer","minimum":0},"expires_at":{"type":"string"},"share_expires_at":{"type":"string"},"approval_url":{"type":"string","format":"uri"},"state":{"type":"string"},"exif":{"type":"string"},"audience":{"type":"string"}},"required":["plan_id","plan_hash","photo_ids","count","library_revision","expires_at","share_expires_at","approval_url","state","exif","audience"]},"Share":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"type":{"type":"string"},"album_id":{"type":"integer","nullable":true},"photo_id":{"type":"integer","nullable":true},"title":{"type":"string"},"url":{"type":"string","format":"uri"},"token":{"type":"string"},"expires":{"type":"string","nullable":true},"expired":{"type":"boolean"},"created":{"type":"string"},"count":{"type":"integer","minimum":0},"exif":{"type":"string"},"frozen_selection":{"type":"boolean"}},"required":["id","type","url"]},"Shares":{"type":"object","properties":{"shares":{"type":"array","items":{"$ref":"#/components/schemas/Share"},"maxItems":200},"demo":{"type":"boolean"}},"required":["shares","demo"]},"ShareApplied":{"type":"object","properties":{"ok":{"type":"boolean"},"share":{"$ref":"#/components/schemas/Share"}},"required":["ok","share"]},"ShareApprovalRequired":{"type":"object","properties":{"approval_required":{"type":"boolean"},"plan":{"$ref":"#/components/schemas/SharePlan"}},"required":["approval_required","plan"]},"ExportResult":{"type":"object","properties":{"format":{"type":"string","enum":["zip"]},"bytes":{"type":"integer","minimum":0},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"download_grant_endpoint":{"type":"string","format":"uri"}},"required":["format","bytes","sha256","download_grant_endpoint"]},"Task":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"type":{"type":"string"},"state":{"type":"string","enum":["queued","running","completed","failed","cancelled"]},"progress":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0},"created_at":{"type":"string"},"updated_at":{"type":"string"},"expires_at":{"type":"string"},"poll_interval":{"type":"integer","minimum":0},"error_code":{"type":"string","nullable":true},"result":{"$ref":"#/components/schemas/ExportResult"}},"required":["id","type","state","progress","total","created_at","updated_at","expires_at","poll_interval","error_code"]},"Tasks":{"type":"object","properties":{"tasks":{"type":"array","items":{"$ref":"#/components/schemas/Task"},"maxItems":50},"next_after":{"type":"string","nullable":true}},"required":["tasks","next_after"]},"DownloadGrant":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"expires_at":{"type":"string"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"bytes":{"type":"integer","minimum":0}},"required":["url","expires_at","sha256","bytes"]},"Status":{"type":"object","properties":{"library_revision":{"type":"integer","minimum":0},"sync_cursor":{"type":"string"},"quota":{"$ref":"#/components/schemas/Quota"},"export_worker":{"type":"object","properties":{"ran_at":{"type":"string"},"processed":{"type":"integer","minimum":0},"completed":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0}},"nullable":true}},"required":["library_revision","sync_cursor","quota","export_worker"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message","details"]},"code":{"type":"string"},"message":{"type":"string"},"data":{"type":"object","properties":{"status":{"type":"integer"}}},"request_id":{"type":"string"}},"required":["error","code","message","data","request_id"]}},"securitySchemes":{"URSY_ID":{"type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://ursy.id/oidc/authorize","tokenUrl":"https://ursy.id/oidc/token","scopes":{"photos.read":"View photo metadata and albums","photos.preview.read":"View previews without embedded EXIF","photos.upload":"Upload photos to your library","photos.albums.write":"Create and edit albums","photos.trash.write":"Move photos to the bin and restore them","photos.metadata.write":"Change photo favourites","photos.shares.read":"List your sharing links","photos.shares.plan":"Prepare a sharing plan without publishing it","photos.shares.apply":"Publish a sharing plan after your approval at URSY ID","photos.shares.write":"Legacy website sharing permission; publishing requires hosted approval","photos.originals.read":"Download unchanged original files","photos.location.read":"Read location data, including metadata in originals","photos.export":"Create a private export of authorised photos and albums","photos.activity.read":"Read meaningful changes to your library","offline_access":"Keep access for up to seven days, until you revoke it"}}}}}}}