Changelog
Every notable change to the Raster GraphQL API, by version.
This page tracks every notable change to the Raster GraphQL API. The format follows Keep a Changelog, and the API follows Semantic Versioning.
The API is in Alpha. Until the Beta release, minor versions may include breaking changes. Review this page before upgrading an integration.
0.13.0-alpha — 2026-09-23
Changed
- A variant can no longer be moved to trash on its own. A variant id in
deleteAssets'assetsnow fails the whole mutation withBAD_USER_INPUT(400) before anything moves, matching the Raster app andtransferAssets. Delete the original instead; its variants go to trash with it.
0.12.0-alpha — 2026-09-15
Added
Uploader.avatarUrladded.Asset.uploadedBynow carries the uploader's current avatar URL beside their name, read live from the uploader's account, so a changed avatar shows on every asset they uploaded. It isnullwhen they have no avatar, or for an asset uploaded with an API key. Available over GraphQL, REST and MCP. SeeUploader.
Deprecated
Library.photosCountis deprecated. It still resolves as an alias ofassetsCount, so existing selections keep working; new queries should readLibrary.assetsCount.
0.12.0-alpha — 2026-09-14
Changed
assets(tags:)takes up to 50 tags. An asset matches when it carries any of them; more than 50 is rejected withBAD_USER_INPUT. Available over REST and MCP. Seeassets.
0.12.0-alpha — 2026-08-24
Changed
uploadAssets(parentId:)accepts a video asset. The uploaded file must be the same kind of media as the parent (a photo takes image variants, a video takes video variants), and a mismatch is rejected withBAD_USER_INPUT. Available over REST and MCP. SeeuploadAssets.promoteVariantworks on videos. The promoted variant's file replaces what the asset serves at the same URL, and itsdurationandmetadatatravel with it. Rejected when the asset is neither an image nor a video, when the variant is a different kind of media than the asset, or while the asset is itself still being processed (a video whose poster is not ready yet). Available over REST and MCP. SeepromoteVariant.
0.11.0-alpha — 2026-08-12
Added
AssetMetadata.captureadded. A newAssetCapturetype carriesrecordedAt,make,model,software, andlatitude/longitude/altitude, read from the container's own metadata tags. It isnullon containers that carry none. Coordinates are always returned as a pair. Available over REST and MCP. SeeAssetCapture.
0.10.0-alpha — 2026-08-07
Added
Asset.durationandAsset.metadataadded.durationis the clip length in seconds.metadatais anAssetMetadataobject whosevideomember carries the source'scodec,frameRate,bitrate,hasAudio,audioCodec,audioLayout, andaudioSampleRate. Both arenullon assets uploaded before this data was captured.SearchHitcarries both fields, alwaysnull. Available over REST and MCP. SeeAsset,AssetMetadataandVideoStream.
0.9.0-alpha — 2026-07-21
Added
promoteVariantmutation added. It makes a variant the asset's default. The variant's image replaces what the asset serves at the same URL, so anything already embedding that URL shows the new image without being updated. The previous default is preserved as a new variant, and the asset keeps its id and name; its description and the tags generated from its image follow the image, while tags you added yourself stay on the asset. ReturnsPromoteVariantResult { assetId, promotedVariantId, demotedVariantId }. Available over REST and MCP. SeepromoteVariant.
0.8.0-alpha — 2026-07-16
Added
Asset.variantsadded. It is the new name of the formerAsset.viewsfield. The unfilteredassetsquery now returns each original's live variants inline invariants; previously only theassetquery populated them. SeeAssetandAssetVariant.
Deprecated
Asset.viewsis renamed toAsset.variants.viewsstill resolves as a deprecated alias returning the same[AssetVariant], so existingviews { … }queries keep working; new queries should selectvariants. TheAssetViewtype is renamed toAssetVariant.typeis deprecated onAsset,AssetVariant, andSearchHit. It is alwaysmainon an asset,varianton a nested entry, andnullon a search hit. It still resolves to those same values, so existing selections keep working. ReadparentIdinstead:nullon an original, the parent's id on a variant. REST and MCP have dropped the field.
0.7.0-alpha — 2026-07-08
Deprecated
Asset.thumbUrlandAsset.thumbHighUrlare now deprecated and derived fromsizes:thumbUrlresolves to the standard size,thumbHighUrlto the largest, each falling back tourl. They still resolve, so existing queries keep working, but new integrations should readAsset.sizes(the map of size to CDN URL) andblurhashfor placeholders. SeeAsset.
Removed
thumbUrlremoved fromAssetVariant, andthumbUrl/thumbHighUrlremoved fromSearchHit. Both shapes exposesizesfor thumbnails instead. Clients selecting those fields must drop them. Allowed under the Alpha policy at the top of this page.
0.6.0-alpha — 2026-06-03
Added
viewerquery: resolve your key's{ organizationId, organizationName, plan, libraries }from the key alone, before any org-scoped call. Seeviewer.assetquery: fetch a single asset by id. An asset that is missing, in another library, or in trash returns a 404. Seeasset.createLibrarymutation: create a library in an org you have a key for. The library is granted to your key and shown to the team. Needs a key with write access. SeecreateLibrary.renameLibrarymutation: rename a library. SeerenameLibrary.
Changed
deleteAssetsnow moves assets to trash (soft delete) instead of deleting them immediately, matching the web app. Assets leaveassets/searchAssetsat once but stay recoverable and are removed after 30 days.idsreturns the assets actually moved (soids.lengthmatches the message count); the call is idempotent (re-deleting ids already in trash returnsMoved 0,ids: [],success: true). SeedeleteAssets.
0.5.0-alpha — 2026-05-28
Added
- Batch-tag, untag, transfer, and re-describe assets over GraphQL with four
new mutations:
tagAssetsapplies up to 20 tags to up to 100 assets. It returnsTagAssetsResult { taggedCount: Int! }and is idempotent on pairs the asset already carries. Reserved tags (index,trash) are rejected withBAD_USER_INPUTbefore anything changes. SeetagAssets.untagAssetsremoves tags the same way. It returnsUntagAssetsResult { untaggedCount: Int! }. SeeuntagAssets.updateAssetDescriptionstores a single asset's description verbatim. It returnsUpdateAssetDescriptionResult { assetId: ID!, description: String! }. SeeupdateAssetDescription.transferAssetsmoves up to 100 assets to another library in the same organization. It returnsTransferAssetsResult { transferredCount: Int!, sourceLibraryId: ID!, targetLibraryId: ID! }. A target library outside the organization fails with404 API_KEY_NOT_AUTHORIZED_FOR_LIBRARY. SeetransferAssets.
- New result types:
TagAssetsResult,UntagAssetsResult,UpdateAssetDescriptionResult,TransferAssetsResult.
0.4.0-alpha — 2026-05-27
Added
searchAssetsquery added. It searches assets across the libraries the API key authorizes and returnsSearchResult { hits: [SearchHit!]!, found: Int!, page: Int! }. EachSearchHitextendsAssetwith optionalhighlights(SearchHitHighlights) andscore. SeesearchAssetsand the Objects reference.- New types
SearchResult,SearchHit,SearchHitHighlights.
Removed
Uploader.integrationremoved from the schema. Clients selectinguploadedBy { integration }must drop the field. TheUploadertype is now{ name: String }. Allowed under the Alpha policy at the top of this page.
0.3.0-alpha — 2026-05-22
Added
- Six new fields on
Asset, carrying metadata recorded at upload. Existing queries are unaffected:contentType: String: MIME content type (e.g.image/jpeg).size: Float: file size in bytes.nullfor older assets.created: Float: creation time as unix milliseconds.updated: Float: last-modified time as unix milliseconds. Updated on a rename, a tag edit, or a saved variant edit, so it can drive cache invalidation or a "sort by recently updated" view.thumbHighUrl: String: higher-resolution thumbnail CDN URL for retina / 2× displays.nullfor older assets.uploadedBy: Uploader: attribution for the user who uploaded the asset. See theUploaderchange below for the new shape.
- Two new fields on
Uploader(see Removed for the breaking part of this change):name: String: display name of the uploader.integration: String: the source the asset was added through.nullwhen no source is recorded.
Changed
- HTTP status codes on errors now match the error. Several errors that
returned
400now return their own status; for exampleORGANIZATION_NOT_FOUNDis404. The same coded error now returns the same status on both the GraphQL and REST APIs. Clients dispatching onextensions.codeare unaffected; only clients switching onextensions.http.statussee the new values.
Removed
Asset.parentIdremoved from the schema. Clients queryingassets { parentId }must drop the field. TheparentIdfield onAssetVariant(returned insideAsset.variants[]) is unaffected.Uploader.uidremoved from the schema. Clients selectinguploadedBy { uid }must drop the field and selectname/integrationinstead. Allowed under the Alpha policy at the top of this page.
0.2.0-alpha — 2024-08-13
Added
assetsquery:pageandpageSizeparameters for pagination.assetsquery:tagsparameter to filter by up to 5 tags.Librarytype: atagsfield returning detailed tag information.- New
tagsquery for retrieving a library's tags.
Changed
assetsnow returns both user-created and AI-generated tags.
0.1.0-alpha — 2023-06-20
Added
- Initial Alpha release of the Raster GraphQL API.
- Queries for assets, libraries, and tags.
- API key authentication.
Security
- Introduced API key authentication for all queries.