Photography — entry 021 of 25

shutterstock

Verified Jul 2026

Shutterstock's REST API covers search across its image, video, audio, and editorial libraries plus licensing, downloading, collections, and contributor account management, returning JSON with pagination up to 500 results per page. Endpoints that don't touch customer-specific data — like search and metadata lookups — accept simple HTTP Basic Auth with an application's consumer key and secret, but licensing, downloading, and any account- or subscription-scoped action require a full OAuth2 bearer token tied to a logged-in Shutterstock user. Access rides on the customer's Shutterstock subscription — a limited free tier covers search, while licensing and downloads draw against a paid Standard or Enterprise content plan — with per-minute rate limits enforced via RateLimit-* response headers.

stock-photosstock-videoslicensingeditorial-content
AuthenticationOAuthRequires an OAuth flow; expect app registration.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreemiumA usable free tier exists, with paid plans for more volume.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score74out of 100
Authentication8/25OAuth flow required
Pricing17/20Freemium tier available
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 74 on greatapis.com
<a href="https://greatapis.com/api/shutterstock/"><img src="https://greatapis.com/badge/shutterstock.svg" alt="Scored 74 on greatapis.com"></a>

Auth quickstart

  1. Register an app / run the OAuth flow to obtain a bearer token.
  2. Send it as an Authorization headerAuthorization: Bearer <token>
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Endpoints

Servers
https://api.shutterstock.comhttps://api-sandbox.shutterstock.com
Auth
basiccustomer_accessCode
audio17
GET/v2/audioList audio tracks
Parameters
NameInRequiredType
idqueryyesarray
viewquerynostring
search_idquerynostring
Responses
StatusDescriptionSchema
200OKAudioDataList
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/audio/collectionsList audio collections
Parameters
NameInRequiredType
pagequerynointeger
per_pagequerynointeger
embedquerynoarray
Responses
StatusDescriptionSchema
200OKCollectionDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/audio/collectionsCreate audio collections
Request body

application/json — CollectionCreateRequest (required)

Responses
StatusDescriptionSchema
201Successfully created audio collectionCollectionCreateResponse
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/audio/collections/{id}Get the details of audio collections
Parameters
NameInRequiredType
idpathyesstring
embedquerynoarray
share_codequerynostring
Responses
StatusDescriptionSchema
200OKCollection
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
POST/v2/audio/collections/{id}Rename audio collections
Parameters
NameInRequiredType
idpathyesstring
Request body

application/json — CollectionUpdateRequest (required)

Responses
StatusDescriptionSchema
204Successfully updated collection—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
DELETE/v2/audio/collections/{id}Delete audio collections
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
204Successfully deleted collection—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
GET/v2/audio/collections/{id}/itemsGet the contents of audio collections
Parameters
NameInRequiredType
idpathyesstring
pagequerynointeger
per_pagequerynointeger
share_codequerynostring
sortquerynostring
Responses
StatusDescriptionSchema
200OKCollectionItemDataList
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
POST/v2/audio/collections/{id}/itemsAdd audio tracks to collections
Parameters
NameInRequiredType
idpathyesstring
Request body

application/json — CollectionItemRequest (required)

Responses
StatusDescriptionSchema
204Successfully added collection items—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
DELETE/v2/audio/collections/{id}/itemsRemove audio tracks from collections
Parameters
NameInRequiredType
idpathyesstring
item_idquerynoarray
Responses
StatusDescriptionSchema
204Successfully removed collection items—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
GET/v2/audio/genresList audio genres
Parameters
NameInRequiredType
languagequerynostring
Responses
StatusDescriptionSchema
200OKGenreList
GET/v2/audio/instrumentsList audio instruments
Parameters
NameInRequiredType
languagequerynostring
Responses
StatusDescriptionSchema
200OKInstrumentList
GET/v2/audio/licensesList audio licenses
Parameters
NameInRequiredType
audio_idquerynostring
licensequerynostring
pagequerynointeger
per_pagequerynointeger
sortquerynostring
usernamequerynostring
start_datequerynostring
end_datequerynostring
download_availabilityquerynostring
team_historyquerynoboolean
Responses
StatusDescriptionSchema
200OKDownloadHistoryDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/audio/licensesLicense audio tracks
Parameters
NameInRequiredType
licensequerynostring
search_idquerynostring
Request body

application/json — LicenseAudioRequest (required)

Responses
StatusDescriptionSchema
200OKLicenseAudioResultDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/audio/licenses/{id}/downloadsDownload audio tracks
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200OKAudioUrl
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/audio/moodsList audio moods
Parameters
NameInRequiredType
languagequerynostring
Responses
StatusDescriptionSchema
200OKMoodList
GET/v2/audio/searchSearch for tracks
Parameters
NameInRequiredType
artistsquerynoarray
bpmquerynointeger
bpm_fromquerynointeger
bpm_toquerynointeger
durationquerynointeger
duration_fromquerynointeger
duration_toquerynointeger
genrequerynoarray
is_instrumentalquerynoboolean
instrumentsquerynoarray
moodsquerynoarray
pagequerynointeger
per_pagequerynointeger
queryquerynostring
sortquerynostring
sort_orderquerynostring
vocal_descriptionquerynostring
viewquerynostring
fieldsquerynostring
libraryquerynostring
languagequerynostring
Responses
StatusDescriptionSchema
200OKAudioSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/audio/{id}Get details about audio tracks
Parameters
NameInRequiredType
idpathyesinteger
viewquerynostring
search_idquerynostring
Responses
StatusDescriptionSchema
200OKAudio
400Bad Request—
401Unauthorized—
403Forbidden—
catalog7
GET/v2/catalog/collectionsList catalog collections
Parameters
NameInRequiredType
pagequerynointeger
per_pagequerynointeger
sortquerynostring
sharedquerynoboolean
Responses
StatusDescriptionSchema
200OKCatalogCollectionDataList
400Invalid status value—
POST/v2/catalog/collectionsCreate catalog collections
Request body

application/json — CreateCatalogCollection (required)

Responses
StatusDescriptionSchema
201OKCatalogCollection
PATCH/v2/catalog/collections/{collection_id}Update collection metadata
Parameters
NameInRequiredType
collection_idpathyesstring
Request body

application/json — UpdateCatalogCollection (required)

Responses
StatusDescriptionSchema
200OKCatalogCollection
DELETE/v2/catalog/collections/{collection_id}Delete catalog collections
Parameters
NameInRequiredType
collection_idpathyesstring
Responses
StatusDescriptionSchema
204OK—
404Collection not found—
POST/v2/catalog/collections/{collection_id}/itemsAdd items to catalog collections
Parameters
NameInRequiredType
collection_idpathyesstring
Request body

application/json — CreateCatalogCollectionItems (required)

Responses
StatusDescriptionSchema
200OKCatalogCollection
DELETE/v2/catalog/collections/{collection_id}/itemsRemove items from catalog collection
Parameters
NameInRequiredType
collection_idpathyesstring
Request body

application/json — RemoveCatalogCollectionItems (required)

Responses
StatusDescriptionSchema
200OKCatalogCollection
GET/v2/catalog/searchSearch catalogs for assets
Parameters
NameInRequiredType
sortquerynostring
pagequerynointeger
per_pagequerynointeger
queryquerynostring
collection_idquerynoarray
asset_typequerynoarray
Responses
StatusDescriptionSchema
200OKCatalogCollectionItemDataList
400Bad Request—
401Unauthorized—
403Forbidden—
computer_vision5
POST/v2/cv/imagesUpload images
Request body

application/json — ImageCreateRequest (required)

Responses
StatusDescriptionSchema
201CreatedComputerVisionImageCreateResponse
400Bad Request—
401Unauthorized—
403Forbidden—
413Payload Too Large—
415Unsupported Media Type—
GET/v2/cv/keywordsList suggested keywords
Parameters
NameInRequiredType
asset_idqueryyes—
Responses
StatusDescriptionSchema
200OKKeywordDataList
400Bad Request—
401Unauthorized—
403Forbidden—
415Unsupported Media Type—
GET/v2/cv/similar/imagesList similar images
Parameters
NameInRequiredType
asset_idqueryyesstring
licensequerynoarray
safequerynoboolean
languagequeryno—
pagequerynointeger
per_pagequerynointeger
viewquerynostring
Responses
StatusDescriptionSchema
200OKImageSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/cv/similar/videosList similar videos
Parameters
NameInRequiredType
asset_idqueryyesstring
licensequerynoarray
safequerynoboolean
languagequeryno—
pagequerynointeger
per_pagequerynointeger
viewquerynostring
Responses
StatusDescriptionSchema
200OKVideoSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/imagesUpload ephemeral images
Request body

application/json — ImageCreateRequest (required)

Responses
StatusDescriptionSchema
201CreatedImageCreateResponse
400Bad Request—
401Unauthorized—
403Forbidden—
413Payload Too Large—
contributors5
GET/v2/contributorsGet details about multiple contributors
Parameters
NameInRequiredType
idqueryyesarray
Responses
StatusDescriptionSchema
200OKContributorProfileDataList
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/contributors/{contributor_id}Get details about a single contributor
Parameters
NameInRequiredType
contributor_idpathyesstring
Responses
StatusDescriptionSchema
200OKContributorProfile
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/contributors/{contributor_id}/collectionsList contributors' collections
Parameters
NameInRequiredType
contributor_idpathyesstring
sortquerynostring
Responses
StatusDescriptionSchema
200OKCollectionDataList
400Bad Request—
401Unauthorized—
403Forbidden—
404Contributor not found—
GET/v2/contributors/{contributor_id}/collections/{id}Get details about contributors' collections
Parameters
NameInRequiredType
contributor_idpathyesstring
idpathyesstring
Responses
StatusDescriptionSchema
200OKCollection
400Bad Request—
401Unauthorized—
403Forbidden—
404Set not found—
GET/v2/contributors/{contributor_id}/collections/{id}/itemsGet the items in contributors' collections
Parameters
NameInRequiredType
contributor_idpathyesstring
idpathyesstring
pagequerynointeger
per_pagequerynointeger
sortquerynostring
Responses
StatusDescriptionSchema
200OKCollectionItemDataList
400Bad Request—
401Unauthorized—
403Forbidden—
404Set not found—
custom_music4
GET/v2/ai/audio/descriptorsList computer audio descriptors
Parameters
NameInRequiredType
render_speed_overquerynonumber
band_idquerynostring
band_namequerynostring
pagequerynointeger
per_pagequerynointeger
idquerynoarray
instrument_namequerynostring
instrument_idquerynostring
tempoquerynonumber
tempo_toquerynonumber
tempo_fromquerynonumber
namequerynostring
tagquerynostring
Responses
StatusDescriptionSchema
200OKDescriptorsListResult
400Bad Request—
401Unauthorized—
403Forbidden—
404Not Found—
GET/v2/ai/audio/instrumentsList computer audio instruments
Parameters
NameInRequiredType
idquerynoarray
per_pagequerynointeger
pagequerynointeger
namequerynostring
tagquerynostring
Responses
StatusDescriptionSchema
200OKInstrumentsListResult
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/ai/audio/rendersGet details about audio renders
Parameters
NameInRequiredType
idqueryyesarray
Responses
StatusDescriptionSchema
200OKAudioRendersListResults
400Bad Request—
401Unauthorized—
403Forbidden—
404Not Found—
POST/v2/ai/audio/rendersCreate rendered audio
Request body

application/json — CreateAudioRendersRequest (required)

Responses
StatusDescriptionSchema
200OKAudioRendersListResults
400Bad Request—
401Unauthorized—
403Forbidden—
editorial_images17
GET/v2/editorial/categories(Deprecated) List editorial categories
Responses
StatusDescriptionSchema
200OKEditorialCategoryResults
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/editorial/images/categoriesList editorial categories
Responses
StatusDescriptionSchema
200OKEditorialImageCategoryResults
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/editorial/images/licensesList editorial image licenses
Parameters
NameInRequiredType
image_idquerynostring
licensequerynostring
pagequerynointeger
per_pagequerynointeger
sortquerynostring
usernamequerynostring
start_datequerynostring
end_datequerynostring
download_availabilityquerynostring
team_historyquerynoboolean
Responses
StatusDescriptionSchema
200OKDownloadHistoryDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/editorial/images/licensesLicense editorial content
Request body

application/json — LicenseEditorialContentRequest (required)

Responses
StatusDescriptionSchema
200OKLicenseEditorialContentResults
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
GET/v2/editorial/images/livefeedsGet editorial livefeed list
Parameters
NameInRequiredType
countryqueryyesstring
pagequerynointeger
per_pagequerynointeger
Responses
StatusDescriptionSchema
200OKEditorialImageLivefeedList
400Bad Request—
401Unauthorized—
403Forbidden—
404Not Found—
GET/v2/editorial/images/livefeeds/{id}Get editorial livefeed
Parameters
NameInRequiredType
idpathyesstring
countryqueryyesstring
Responses
StatusDescriptionSchema
200OKEditorialImageLivefeed
400Bad Request—
401Unauthorized—
403Forbidden—
404Not Found—
GET/v2/editorial/images/livefeeds/{id}/itemsGet editorial livefeed items
Parameters
NameInRequiredType
idpathyesstring
countryqueryyesstring
Responses
StatusDescriptionSchema
200OKEditorialImageContentDataList
400Bad Request—
401Unauthorized—
403Forbidden—
404Not Found—
GET/v2/editorial/images/searchSearch editorial images
Parameters
NameInRequiredType
queryquerynostring
sortquerynostring
categoryquerynostring
countryqueryyesstring
supplier_codequerynoarray
date_startquerynostring
date_endquerynostring
per_pagequerynointeger
cursorquerynostring
Responses
StatusDescriptionSchema
200OKEditorialSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
GET/v2/editorial/images/updatedList updated content
Parameters
NameInRequiredType
typequeryyesstring
date_updated_startqueryyesstring
date_updated_endqueryyesstring
date_taken_startquerynostring
date_taken_endquerynostring
cursorquerynostring
sortquerynostring
supplier_codequerynoarray
countryqueryyesstring
per_pagequerynointeger
Responses
StatusDescriptionSchema
200OKEditorialUpdatedResults
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
GET/v2/editorial/images/{id}Get editorial content details
Parameters
NameInRequiredType
idpathyesstring
countryqueryyesstring
Responses
StatusDescriptionSchema
200OKEditorialContent
400Bad Request—
401Unauthorized—
403Forbidden—
404Not Found—
POST/v2/editorial/licenses(Deprecated) License editorial content
Request body

application/json — LicenseEditorialContentRequest (required)

Responses
StatusDescriptionSchema
200OKLicenseEditorialContentResults
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
GET/v2/editorial/livefeeds(Deprecated) Get editorial livefeed list
Parameters
NameInRequiredType
countryqueryyesstring
pagequerynointeger
per_pagequerynointeger
Responses
StatusDescriptionSchema
200OKEditorialLivefeedList
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
GET/v2/editorial/livefeeds/{id}(Deprecated) Get editorial livefeed
Parameters
NameInRequiredType
idpathyesstring
countryqueryyesstring
Responses
StatusDescriptionSchema
200OKEditorialLivefeed
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
GET/v2/editorial/livefeeds/{id}/items(Deprecated) Get editorial livefeed items
Parameters
NameInRequiredType
idpathyesstring
countryqueryyesstring
Responses
StatusDescriptionSchema
200OKEditorialContentDataList
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
GET/v2/editorial/search(Deprecated) Search editorial content
Parameters
NameInRequiredType
queryquerynostring
sortquerynostring
categoryquerynostring
countryqueryyesstring
supplier_codequerynoarray
date_startquerynostring
date_endquerynostring
per_pagequerynointeger
cursorquerynostring
Responses
StatusDescriptionSchema
200OKEditorialSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
GET/v2/editorial/updated(Deprecated) List updated content
Parameters
NameInRequiredType
typequeryyesstring
date_updated_startqueryyesstring
date_updated_endqueryyesstring
date_taken_startquerynostring
date_taken_endquerynostring
cursorquerynostring
sortquerynostring
supplier_codequerynoarray
countryqueryyesstring
per_pagequerynointeger
Responses
StatusDescriptionSchema
200OKEditorialUpdatedResults
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
GET/v2/editorial/{id}(Deprecated) Get editorial content details
Parameters
NameInRequiredType
idpathyesstring
countryqueryyesstring
search_idquerynostring
Responses
StatusDescriptionSchema
200OKEditorialContent
400Bad Request—
401Unauthorized—
403Forbidden—
404Not Found—
editorial_video5
GET/v2/editorial/videos/categoriesList editorial video categories
Responses
StatusDescriptionSchema
200OKEditorialVideoCategoryResults
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/editorial/videos/licensesList editorial video licenses
Parameters
NameInRequiredType
video_idquerynostring
licensequerynostring
pagequerynointeger
per_pagequerynointeger
sortquerynostring
usernamequerynostring
start_datequerynostring
end_datequerynostring
download_availabilityquerynostring
team_historyquerynoboolean
Responses
StatusDescriptionSchema
200OKDownloadHistoryDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/editorial/videos/licensesLicense editorial video content
Request body

application/json — LicenseEditorialVideoContentRequest (required)

Responses
StatusDescriptionSchema
200OKLicenseEditorialContentResults
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/editorial/videos/searchSearch editorial video content
Parameters
NameInRequiredType
queryquerynostring
sortquerynostring
categoryquerynostring
countryqueryyesstring
supplier_codequerynoarray
date_startquerynostring
date_endquerynostring
resolutionquerynostring
fpsquerynonumber
per_pagequerynointeger
cursorquerynostring
Responses
StatusDescriptionSchema
200OKEditorialVideoSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
GET/v2/editorial/videos/{id}Get editorial video content details
Parameters
NameInRequiredType
idpathyesstring
countryqueryyesstring
search_idquerynostring
Responses
StatusDescriptionSchema
200OKEditorialVideoContent
400Bad Request—
401Unauthorized—
403Forbidden—
406Not Acceptable—
images24
POST/v2/bulk_search/imagesRun multiple image searches
Parameters
NameInRequiredType
added_datequerynostring
added_date_startquerynostring
aspect_ratio_minquerynonumber
aspect_ratio_maxquerynonumber
aspect_ratioquerynonumber
added_date_endquerynostring
categoryquerynostring
colorquerynostring
contributorquerynoarray
contributor_countryqueryno—
fieldsquerynostring
heightquerynointeger
height_fromquerynointeger
height_toquerynointeger
image_typequerynoarray
keyword_safe_searchquerynoboolean
languagequeryno—
licensequerynoarray
modelquerynoarray
orientationquerynostring
pagequerynointeger
per_pagequerynointeger
people_model_releasedquerynoboolean
people_agequerynostring
people_ethnicityquerynoarray
people_genderquerynostring
people_numberquerynointeger
regionqueryno—
safequerynoboolean
sortquerynostring
spellcheck_queryquerynoboolean
viewquerynostring
widthquerynointeger
width_fromquerynointeger
width_toquerynointeger
Request body

application/json — BulkImageSearchRequest (required)

Responses
StatusDescriptionSchema
200OKBulkImageSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/imagesList images
Parameters
NameInRequiredType
idqueryyesarray
viewquerynostring
search_idquerynostring
Responses
StatusDescriptionSchema
200OKImageDataList
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/images/categoriesList image categories
Parameters
NameInRequiredType
languagequeryno—
Responses
StatusDescriptionSchema
200OKCategoryDataList
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/images/collectionsList image collections
Parameters
NameInRequiredType
embedquerynoarray
pagequerynointeger
per_pagequerynointeger
Responses
StatusDescriptionSchema
200OKCollectionDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/images/collectionsCreate image collections
Request body

application/json — CollectionCreateRequest (required)

Responses
StatusDescriptionSchema
201Successfully created image collectionCollectionCreateResponse
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/images/collections/featuredList featured image collections
Parameters
NameInRequiredType
embedquerynostring
typequerynoarray
asset_hintquerynostring
Responses
StatusDescriptionSchema
200OKFeaturedCollectionDataList
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/images/collections/featured/{id}Get the details of featured image collections
Parameters
NameInRequiredType
idpathyesstring
embedquerynostring
asset_hintquerynostring
Responses
StatusDescriptionSchema
200OKFeaturedCollection
400Bad Request—
401Unauthorized—
403Forbidden—
404Featured collection not found—
GET/v2/images/collections/featured/{id}/itemsGet the contents of featured image collections
Parameters
NameInRequiredType
idpathyesstring
pagequerynointeger
per_pagequerynointeger
Responses
StatusDescriptionSchema
200OKCollectionItemDataList
400Bad Request—
401Unauthorized—
403Forbidden—
404Featured collection not found—
GET/v2/images/collections/{id}Get the details of image collections
Parameters
NameInRequiredType
idpathyesstring
embedquerynoarray
share_codequerynostring
Responses
StatusDescriptionSchema
200OKCollection
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
POST/v2/images/collections/{id}Rename image collections
Parameters
NameInRequiredType
idpathyesstring
Request body

application/json — CollectionUpdateRequest (required)

Responses
StatusDescriptionSchema
204Successfully updated collection—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
DELETE/v2/images/collections/{id}Delete image collections
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
204Successfully deleted collection—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
GET/v2/images/collections/{id}/itemsGet the contents of image collections
Parameters
NameInRequiredType
idpathyesstring
pagequerynointeger
per_pagequerynointeger
share_codequerynostring
sortquerynostring
Responses
StatusDescriptionSchema
200OKCollectionItemDataList
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
POST/v2/images/collections/{id}/itemsAdd images to collections
Parameters
NameInRequiredType
idpathyesstring
Request body

application/json — CollectionItemRequest (required)

Responses
StatusDescriptionSchema
204Successfully added collection items—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
DELETE/v2/images/collections/{id}/itemsRemove images from collections
Parameters
NameInRequiredType
idpathyesstring
item_idquerynoarray
Responses
StatusDescriptionSchema
204Successfully removed collection items—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
GET/v2/images/licensesList image licenses
Parameters
NameInRequiredType
image_idquerynostring
licensequerynostring
pagequerynointeger
per_pagequerynointeger
sortquerynostring
usernamequerynostring
start_datequerynostring
end_datequerynostring
download_availabilityquerynostring
team_historyquerynoboolean
Responses
StatusDescriptionSchema
200OKDownloadHistoryDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/images/licensesLicense images
Parameters
NameInRequiredType
subscription_idquerynostring
formatquerynostring
sizequerynostring
search_idquerynostring
Request body

application/json — LicenseImageRequest (required)

Responses
StatusDescriptionSchema
200OKLicenseImageResultDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/images/licenses/{id}/downloadsDownload images
Parameters
NameInRequiredType
idpathyesstring
Request body

application/json — RedownloadImage (required)

Responses
StatusDescriptionSchema
200OKUrl
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/images/recommendationsList recommended images
Parameters
NameInRequiredType
idqueryyesarray
max_itemsquerynointeger
safequerynoboolean
Responses
StatusDescriptionSchema
200OKRecommendationDataList
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/images/searchSearch for images
Parameters
NameInRequiredType
added_datequerynostring
added_date_startquerynostring
aspect_ratio_minquerynonumber
aspect_ratio_maxquerynonumber
aspect_ratioquerynonumber
ai_searchquerynoboolean
ai_labels_limitquerynointeger
ai_industryquerynostring
ai_objectivequerynostring
added_date_endquerynostring
categoryquerynostring
colorquerynostring
contributorquerynoarray
contributor_countryqueryno—
fieldsquerynostring
heightquerynointeger
height_fromquerynointeger
height_toquerynointeger
image_typequerynoarray
keyword_safe_searchquerynoboolean
languagequeryno—
licensequerynoarray
modelquerynoarray
orientationquerynostring
pagequerynointeger
per_pagequerynointeger
people_model_releasedquerynoboolean
people_agequerynostring
people_ethnicityquerynoarray
people_genderquerynostring
people_numberquerynointeger
queryquerynostring
regionqueryno—
safequerynoboolean
sortquerynostring
spellcheck_queryquerynoboolean
viewquerynostring
widthquerynointeger
width_fromquerynointeger
width_toquerynointeger
Responses
StatusDescriptionSchema
200OKImageSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/images/search/suggestionsGet suggestions for a search term
Parameters
NameInRequiredType
queryqueryyesstring
limitquerynointeger
Responses
StatusDescriptionSchema
200OKSuggestions
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/images/search/suggestionsGet keywords from text
Request body

application/json — SearchEntitiesRequest (required)

Responses
StatusDescriptionSchema
200OKSearchEntitiesResponse
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/images/updatedList updated images
Parameters
NameInRequiredType
typequerynoarray
start_datequerynostring
end_datequerynostring
intervalquerynostring
pagequerynointeger
per_pagequerynointeger
sortquerynostring
Responses
StatusDescriptionSchema
200OKUpdatedMediaDataList
GET/v2/images/{id}Get details about images
Parameters
NameInRequiredType
idpathyesstring
languagequeryno—
viewquerynostring
search_idquerynostring
Responses
StatusDescriptionSchema
200OKImage
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/images/{id}/similarList similar images
Parameters
NameInRequiredType
idpathyesstring
languagequeryno—
pagequerynointeger
per_pagequerynointeger
viewquerynostring
Responses
StatusDescriptionSchema
200OKImageSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
oauth2
POST/v2/oauth/access_tokenGet access tokens
Request body

application/json

Responses
StatusDescriptionSchema
200OKOauthAccessTokenResponse
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/oauth/authorizeAuthorize applications
Parameters
NameInRequiredType
client_idqueryyesstring
realmquerynostring
redirect_uriqueryyesstring
response_typequeryyesstring
scopequerynostring
statequeryyesstring
Responses
StatusDescriptionSchema
302Redirect user to authenticate with ShutterstockAuthorizeResponse
400Bad Request—
401Unauthorized—
403Forbidden—
sound_effects6
GET/v2/sfxList details about sound effects
Parameters
NameInRequiredType
idqueryyesarray
viewquerynostring
languagequeryno—
libraryquerynostring
search_idquerynostring
Responses
StatusDescriptionSchema
200OKSFXDataList
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/sfx/licensesList sound effects licenses
Parameters
NameInRequiredType
sfx_idquerynostring
licensequerynostring
pagequerynointeger
per_pagequerynointeger
sortquerynostring
usernamequerynostring
start_datequerynostring
end_datequerynostring
license_idquerynostring
download_availabilityquerynostring
team_historyquerynoboolean
Responses
StatusDescriptionSchema
200OKDownloadHistoryDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/sfx/licensesLicense sound effects
Request body

application/json — LicenseSFXRequest (required)

Responses
StatusDescriptionSchema
200OKLicenseSFXResultDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/sfx/licenses/{id}/downloadsDownload sound effects
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200OKSfxUrl
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/sfx/searchSearch for sound effects
Parameters
NameInRequiredType
added_datequerynostring
added_date_startquerynostring
added_date_endquerynostring
durationquerynointeger
duration_fromquerynointeger
duration_toquerynointeger
pagequerynointeger
per_pagequerynointeger
queryquerynostring
safequerynoboolean
sortquerynostring
viewquerynostring
languagequeryno—
Responses
StatusDescriptionSchema
200OKSFXSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/sfx/{id}Get details about sound effects
Parameters
NameInRequiredType
idpathyesinteger
languagequeryno—
viewquerynostring
libraryquerynostring
search_idquerynostring
Responses
StatusDescriptionSchema
200OKSFX
400Bad Request—
401Unauthorized—
403Forbidden—
test2
GET/v2/testEcho text
Parameters
NameInRequiredType
textquerynostring
Responses
StatusDescriptionSchema
200OKTestEcho
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/test/validateValidate input
Parameters
NameInRequiredType
idqueryyesinteger
tagquerynoarray
user-agentheadernostring
Responses
StatusDescriptionSchema
200OKTestValidate
400Bad Request—
401Unauthorized—
403Forbidden—
users3
GET/v2/userGet user details
Responses
StatusDescriptionSchema
200OKUserDetails
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/user/access_tokenGet access token details
Responses
StatusDescriptionSchema
200OKAccessTokenDetails
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/user/subscriptionsList user subscriptions
Responses
StatusDescriptionSchema
200OKSubscriptionDataList
400Bad Request—
401Unauthorized—
403Forbidden—
videos21
GET/v2/videosList videos
Parameters
NameInRequiredType
idqueryyesarray
viewquerynostring
search_idquerynostring
Responses
StatusDescriptionSchema
200OKVideoDataList
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/videos/categoriesList video categories
Parameters
NameInRequiredType
languagequeryno—
Responses
StatusDescriptionSchema
200OKCategoryDataList
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/videos/collectionsList video collections
Parameters
NameInRequiredType
pagequerynointeger
per_pagequerynointeger
embedquerynoarray
Responses
StatusDescriptionSchema
200OKCollectionDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/videos/collectionsCreate video collections
Request body

application/json — CollectionCreateRequest (required)

Responses
StatusDescriptionSchema
201Successfully created video collectionCollectionCreateResponse
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/videos/collections/featuredList featured video collections
Parameters
NameInRequiredType
embedquerynostring
Responses
StatusDescriptionSchema
200OKFeaturedCollectionDataList
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/videos/collections/featured/{id}Get the details of featured video collections
Parameters
NameInRequiredType
idpathyesstring
embedquerynostring
Responses
StatusDescriptionSchema
200OKFeaturedCollection
400Bad Request—
401Unauthorized—
403Forbidden—
404Featured collection not found—
GET/v2/videos/collections/featured/{id}/itemsGet the contents of featured video collections
Parameters
NameInRequiredType
idpathyesstring
pagequerynointeger
per_pagequerynointeger
Responses
StatusDescriptionSchema
200OKVideoCollectionItemDataList
400Bad Request—
401Unauthorized—
403Forbidden—
404Featured collection not found—
GET/v2/videos/collections/{id}Get the details of video collections
Parameters
NameInRequiredType
idpathyesstring
embedquerynoarray
share_codequerynostring
Responses
StatusDescriptionSchema
200OKCollection
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
POST/v2/videos/collections/{id}Rename video collections
Parameters
NameInRequiredType
idpathyesstring
Request body

application/json — CollectionUpdateRequest (required)

Responses
StatusDescriptionSchema
204Successfully updated collection—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
DELETE/v2/videos/collections/{id}Delete video collections
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
204Successfully deleted collection—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
GET/v2/videos/collections/{id}/itemsGet the contents of video collections
Parameters
NameInRequiredType
idpathyesstring
pagequerynointeger
per_pagequerynointeger
share_codequerynostring
sortquerynostring
Responses
StatusDescriptionSchema
200OKCollectionItemDataList
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
POST/v2/videos/collections/{id}/itemsAdd videos to collections
Parameters
NameInRequiredType
idpathyesstring
Request body

application/json — CollectionItemRequest (required)

Responses
StatusDescriptionSchema
204Successfully added collection items—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
DELETE/v2/videos/collections/{id}/itemsRemove videos from collections
Parameters
NameInRequiredType
idpathyesstring
item_idquerynoarray
Responses
StatusDescriptionSchema
204Successfully removed collection items—
400Bad Request—
401Unauthorized—
403Forbidden—
404Collection not found—
GET/v2/videos/licensesList video licenses
Parameters
NameInRequiredType
video_idquerynostring
licensequerynostring
pagequerynointeger
per_pagequerynointeger
sortquerynostring
usernamequerynostring
start_datequerynostring
end_datequerynostring
download_availabilityquerynostring
team_historyquerynoboolean
Responses
StatusDescriptionSchema
200OKDownloadHistoryDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/videos/licensesLicense videos
Parameters
NameInRequiredType
subscription_idquerynostring
sizequerynostring
search_idquerynostring
Request body

application/json — LicenseVideoRequest (required)

Responses
StatusDescriptionSchema
200OKLicenseVideoResultDataList
400Bad Request—
401Unauthorized—
403Forbidden—
POST/v2/videos/licenses/{id}/downloadsDownload videos
Parameters
NameInRequiredType
idpathyesstring
Request body

application/json — RedownloadVideo (required)

Responses
StatusDescriptionSchema
200OKUrl
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/videos/searchSearch for videos
Parameters
NameInRequiredType
added_datequerynostring
added_date_startquerynostring
added_date_endquerynostring
aspect_ratioquerynostring
categoryquerynostring
contributorquerynoarray
contributor_countryquerynoarray
durationquerynointeger
duration_fromquerynointeger
duration_toquerynointeger
fpsquerynonumber
fps_fromquerynonumber
fps_toquerynonumber
keyword_safe_searchquerynoboolean
languagequeryno—
licensequerynoarray
modelquerynoarray
pagequerynointeger
per_pagequerynointeger
people_agequerynostring
people_ethnicityquerynoarray
people_genderquerynostring
people_numberquerynointeger
people_model_releasedquerynoboolean
queryquerynostring
resolutionquerynostring
safequerynoboolean
sortquerynostring
viewquerynostring
Responses
StatusDescriptionSchema
200OKVideoSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—
404Not found—
GET/v2/videos/search/suggestionsGet suggestions for a search term
Parameters
NameInRequiredType
queryqueryyesstring
limitquerynointeger
Responses
StatusDescriptionSchema
200OKSuggestions
400Bad Request—
401Unauthorized—
403Forbidden—
GET/v2/videos/updatedList updated videos
Parameters
NameInRequiredType
start_datequerynostring
end_datequerynostring
intervalquerynostring
pagequerynointeger
per_pagequerynointeger
sortquerynostring
Responses
StatusDescriptionSchema
200OKUpdatedMediaDataList
GET/v2/videos/{id}Get details about videos
Parameters
NameInRequiredType
idpathyesstring
languagequeryno—
viewquerynostring
search_idquerynostring
Responses
StatusDescriptionSchema
200OKVideo
400Bad Request—
401Unauthorized—
403Forbidden—
404Not found—
GET/v2/videos/{id}/similarList similar videos
Parameters
NameInRequiredType
idpathyesstring
languagequeryno—
pagequerynointeger
per_pagequerynointeger
viewquerynostring
Responses
StatusDescriptionSchema
200OKVideoSearchResults
400Bad Request—
401Unauthorized—
403Forbidden—

Try it

Developer reference

Base URLhttps://api.shutterstock.com
Rate limit

Per-application, per-minute quotas rather than one published number: Free and Standard API subscriptions get a "limited" requests-per-minute allowance, Enterprise subscriptions get a custom negotiated cap. Every response carries RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset (UTC ms) headers so an app can track its live quota; exceeding it returns HTTP 429 with the same limit/remaining/reset fields in the JSON body. Higher limits are available by contacting Shutterstock's developer support directly.

Key endpoints
  • GET/v2/images/search
  • GET/v2/images/{id}
  • GET/v2/videos/search
  • POST/v2/images/licenses
  • POST/v2/images/licenses/{id}/downloads

Changelog

Spec version1.1.32
Tracked paths91

No change recorded yet.

Tracking since Sep 2026. See every tracked change ↗ ·Subscribe with RSS ↗