Changelog
Every notable change to the Raster REST API, by version.
This page tracks every notable change to the Raster REST API. The format follows Keep a Changelog.
REST is versioned per request through the Api-Version header, whose
value is a date string such as Api-Version: 2026-07-08. The header is
required on every request. Every response carries Vary: Api-Version so caches
key bodies per version. During the Alpha, every Api-Version value receives
the current behavior, so a breaking change reaches every integration.
The REST API is in Alpha. Until the Beta release, new versions may include breaking changes. Review this page before upgrading an integration.
2026-10-07 — Approval for every library member
Changed
- Viewers can set approval.
PATCH …/assets/:assetId/approvalaccepts an OAuth access token whose account has any role on the library, Viewer included, matching who can set approval in the app.
2026-10-06 — Asset approval
Added
- Set an asset's approval.
PATCH …/assets/:assetId/approvalmarks an assetin_review,approved, orneeds_changes, with an optional note. It takes an OAuth access token; an API key is rejected with403 APPROVAL_REQUIRES_USER, and an organization without a paid plan with403 PAID_PLAN_REQUIRED. - Filter search by approval.
approvalonGET …/search/assetsreturns only assets in one approval state, ornonefor assets with no approval. Asset.approvalcarries the asset's current approval. SeeApproval.
2026-09-23 — Variant delete
Changed
- A variant can no longer be moved to trash on its own. A variant id in
idsonDELETE …/assetsnow fails the whole call with400 BAD_USER_INPUTbefore anything moves, matching the Raster app andPOST …/assets/transfer. Delete the original instead; its variants go to trash with it.
2026-09-15 — Library counts
Deprecated
photosCounton a library is deprecated. It is still returned as an alias ofassetsCount, so existing integrations keep working; new integrations should readassetsCount.
2026-09-14 — Tag filter
Changed
tagsonGET …/assetstakes up to 50 tags. An asset matches when it carries any of them; more than 50 is rejected with400 BAD_USER_INPUT. SeeGET …/assets.
2026-08-24 — Video variants
Changed
- A variant may now be a video.
parentIdonPOST /organizations/:orgId/libraries/:libraryId/assetsaccepts a video asset, and the uploaded file must be the same kind of media as the parent: a photo takes image variants, a video takes video variants. Posting a video to a photo (or a photo to a video) is rejected with400 BAD_USER_INPUT. SeePOST …/assets. - Promote works on videos.
POST …/assets/:assetId/promoteaccepts a video asset; the promoted variant's file replaces what the asset serves at the same URL, and itsduration,metadataand poster travel with it. The promote is 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). SeePOST …/assets/:assetId/promote.
2026-08-12 — Video capture details
Added
Asset.video.capturecarries a video's capture details:recordedAt,make,model,software, andlatitude/longitude/altitude, read from the container's own metadata tags. It isnullon containers that carry none, which is common for screen recordings and anything re-encoded. Coordinates are always returned as a pair. Available over MCP. SeeAssetCapture.
2026-08-07 — Video metadata on assets
Added
Assetcarriesdurationandmetadata.durationis the clip length in seconds;metadataholds what was read from the asset's own bytes:capture(how it was shot) and, on videos,videowith the source'scodec,frameRate,bitrate,hasAudio,audioCodec,audioLayout, andaudioSampleRate. Both arenullon assets uploaded before this data was captured, and on a search hit. Available over MCP. SeeAsset,AssetMetadataandVideoStream.
2026-07-21 — Set a variant as the default
Added
POST /organizations/:orgId/libraries/:libraryId/assets/:assetId/promotemakes 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 keeps the name it had; the asset keeps its id and URL and takes the promoted variant's name; its description and the tags generated from its image follow the image, while tags you added yourself stay on the asset. Returns{ assetId, promotedVariantId, demotedVariantId }. Available over MCP. SeePOST …/assets/:assetId/promote.
2026-07-16 — Asset variants
Added
- The unfiltered
GET /assetslist now returns each original asset's live variants inline, in thevariantsfield. Previously onlyGET /assets/:assetIdpopulated them. Available over MCP. SeeGET /assets.
Changed
viewsis renamed tovariantson theAssetwire (list, get, search, and upload responses), and theAssetViewobject is renamed toAssetVariant. Readvariantsinstead ofviews. Allowed under the Alpha policy at the top of this page.
Removed
typeremoved from theAssetwire. It was alwaysmainon an asset andvarianton a nested entry. ReadparentIdto tell an original from a variant: it isnullon an original and the parent's id on a variant. Allowed under the Alpha policy at the top of this page.
2026-07-08 — Thumbnails consolidated onto sizes
Removed
thumbUrlandthumbHighUrlremoved from theAssetwire. The responsivesizesmap replaces them, withblurhashfor an inline placeholder.sizesis a JSON-encoded map of the image's longest edge (px) to CDN URL; parse it client-side to pick a thumbnail for your display size. Clients readingthumbUrl/thumbHighUrlno longer receive them and must switch tosizes. Applies to the list, get, search, and upload responses. Allowed under the Alpha policy at the top of this page.
2026-06-03 — Single-asset read, key context, library management
Added
GET /:orgId/libraries/:libraryId/assets/:assetId: fetch one asset by id, returning the sameAssetshape the list endpoint returns. Reads one asset's url, tags, description, and dimensions without pagingGET /assets. Returns404when the asset is missing, in another library, or in trash. Available over MCP as theget_assettool. SeeGET /assets/:assetId.GET /me: resolve the organization and libraries your API key can act on, so a client holding only a key can discover theorganizationIdevery org-scoped endpoint needs. Available over MCP as thewhoamitool. Full parameters and response shape:GET /me.POST /libraries: create an organization, a starter library, and an API key with no account and no existing key, for clients (typically AI agents) creating a library on someone's behalf. Anonymous; available over both REST and MCP (thecreate_organizationtool). Full parameters, response, and limits:POST /libraries.POST /:orgId/libraries: create a new library inside an organization you already have an API key for. The new library is granted to your key, so the same key can upload to it immediately, and it appears for your team in the web app. This needs a key with write access. Optionalslugsets the URL. Available over MCP ascreate_library. SeePOST /:orgId/libraries.PATCH /:orgId/libraries/:libraryId: rename a library. The new name shows everywhere, including each team member's view. Available over MCP asrename_library. SeePATCH /libraries/:libraryId.
Changed
DELETE /:orgId/libraries/:libraryId/assetsnow moves assets to trash (soft delete) instead of deleting them immediately, matching the Raster app. Deleted assets leaveGET /assetsand search right away, stay recoverable from trash, and are permanently removed after 30 days. The request/response shape is unchanged; the success message now reads "Moved N assets to trash", andidsreturns the assets actually moved (soids.lengthequalsN). The call is idempotent: re-deleting ids already in trash returns"Moved 0 assets to trash",ids: [],success: true. Emptying the trash permanently is done in the Raster app. Applies to MCPdelete_assetstoo.- The anonymous, no-account MCP tool was renamed
create_library→create_organization, since it creates a whole new organization. The new authenticated MCPcreate_librarytool creates a library in an organization you already have a key for.
2026-05-28 — Asset metadata mutations
Added
- Batch-tag, untag, transfer, and re-describe assets over REST with four new
Write endpoints:
POST /:orgId/libraries/:libraryId/assets/tag: apply up to 20 tags to up to 100 assets, returns{ taggedCount }. SeePOST /assets/tag.POST /:orgId/libraries/:libraryId/assets/untag: remove tags the same way, returns{ untaggedCount }. SeePOST /assets/untag.PATCH /:orgId/libraries/:libraryId/assets/:assetId/description: replace a single asset's description verbatim (no trim, no AI rewrite), returns{ assetId, description }. SeePATCH /:assetId/description.POST /:orgId/libraries/:libraryId/assets/transfer: move up to 100 assets to another library in the same organization, returns{ transferredCount, sourceLibraryId, targetLibraryId }. SeePOST /assets/transfer.
2026-05-27 — Search API + Uploader cleanup
Added
GET /:orgId/search/assets: search assets across the libraries an API key authorizes. Organization-scoped; supportsq,libraries,page, andpageSize. ReturnsSearchResultwithhits,found, andpage; each hit is anAssetplus optionalhighlightsandscore. SeeGET /search/assets.- Objects reference page with the wire shapes
(
Asset,Library,Tag,SearchHit,SearchResult,SearchHitHighlights,Uploader,AssetVariant). Endpoint pages now link here instead of inlining each type.
Removed
Uploader.integrationremoved from the wire. The field naming the upload's source is no longer returned onuploadedBy. Clients readinguploadedBy.integrationwill receiveundefined. The fullUploadershape is now{ name }. Allowed under the Alpha policy at the top of this page.
2026-05-20 — Initial Alpha release
Added
- REST transport at
https://api.raster.app/organizations/..., authenticated with organization API keys. Api-Versionrequest header (required) andVary: Api-Versionresponse header on every reply.{ data }/{ error: { code, message } }response envelope on every endpoint, including auth rejections and unknown-path404s.GET /:orgId/libraries: list libraries in an organization.GET /:orgId/libraries/:libraryId/assets: list assets, withpage,pageSize, andtagsfilters (repeatable or comma-separated).GET /:orgId/libraries/:libraryId/tags: list tags withlimit.POST /:orgId/libraries/:libraryId/assets: multipart upload (filesfield), returns each new asset including a permanent CDNurl.DELETE /:orgId/libraries/:libraryId/assets: batch delete by id.- Timestamps on the wire are unix milliseconds (
number).
Security
- Bearer-token authentication on every endpoint.
- Per-library access levels (Read / Write) enforced on every request before any data is read or written.
Versioning and deprecation
How the Raster REST API is versioned with the Api-Version header, how long a version is supported, and the Deprecation and Sunset headers that announce a retirement.
MCP Server
Connect Claude, ChatGPT, Cursor, and any other MCP client to your Raster libraries over the Model Context Protocol.