openapi: 3.0.0
info:
title: Shutterstock API Reference audio oauth API
description: The Shutterstock API provides access to Shutterstock's library of media, as well as information about customers' accounts and the contributors that provide the media. The API enables searching, browsing, licensing, and downloading images, videos, audio tracks, and sound effects. It also supports editorial content, computer vision features, collection management, and OAuth 2.0 authentication.
version: 1.0.30
contact:
name: Shutterstock Developer Support
url: https://www.shutterstock.com/developers/contact-us
license:
name: Shutterstock API Terms
url: https://www.shutterstock.com/api/terms
servers:
- url: https://api.shutterstock.com
description: Shutterstock API
tags:
- name: oauth
paths:
/v2/oauth/authorize:
get:
parameters:
- description: Client ID (Consumer Key) of your application
in: query
name: client_id
example: 6d097450b209c6dcd859
required: true
schema:
type: string
- description: User type to be authorized (usually 'customer')
in: query
name: realm
example: customer
schema:
type: string
enum:
- customer
- contributor
default: customer
- description: The callback URI to send the request to after authorization; must use a host name that is registered with your application
in: query
name: redirect_uri
example: localhost
required: true
schema:
type: string
- description: Type of temporary authorization code that will be used to generate an access code; the only valid value is 'code'
in: query
name: response_type
example: code
required: true
schema:
type: string
enum:
- code
- description: Space-separated list of scopes to be authorized
in: query
name: scope
example: user.view
schema:
type: string
default: user.view
- description: Unique value used by the calling app to verify the request
in: query
name: state
example: '1540290465000'
required: true
schema:
type: string
responses:
'200':
description: No response was specified
'302':
description: Redirect user to authenticate with Shutterstock
content:
text/html:
schema:
$ref: '#/components/schemas/AuthorizeResponse'
examples:
default:
description: Redirect user to authenticate with Shutterstock
value: https://accounts.shutterstock.com/login?next=%2Foauth%2Fauthorize%3Fresponse_type%3Dcode%26state%3D1539619928633%26scope%3Dlicenses.create%20licenses.view%20purchases.view%26client_id%3D6d097450b209c6dcd859%26redirect_uri%3Dhttp%3A%2F%2Flocalhost%3A3000%2Fmyapp%2Fauth%2Fcallback%26realm%3Dcustomer
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
x-code-samples:
- lang: shell
source: curl "https://api.shutterstock.com/v2/oauth/authorize" \ -X GET \ -G \ --data-urlencode "scope=licenses.create licenses.view purchases.view" \ --data-urlencode "state=demo_`date +%s`" \ --data-urlencode "response_type=code" \ --data-urlencode "redirect_uri=http://localhost:3000/callback" \ --data-urlencode "client_id=$CLIENT_ID"
- lang: javascript--nodejs
source: "const axios = require(\"axios\");\n\naxios.get(\"https://api.shutterstock.com/v2/oauth/authorize\", {\n \"params\": {\n \"scope\": \"licenses.create licenses.view purchases.view\",\n \"state\": \"demo_\" + Math.round(new Date() / 1000),\n \"response_type\": \"code\",\n \"redirect_uri\": \"http://localhost:3000/callback\",\n \"client_id\": clientId\n },\n // Don't follow the redirect because this program is not running in a browser\n \"maxRedirects\": 0,\n})\n .catch(({ response }) => {\n // HTTP 302: Redirect\n console.log(response.data);\n });\n"
- lang: php
source: '$queryFields = [ "client_id" => $clientId, "redirect_uri" => "http://localhost:3000/callback", "response_type" => "code", "scope" => "licenses.create licenses.view purchases.view", "state" => time() ];
$options = [ CURLOPT_URL => "https://api.shutterstock.com/v2/oauth/authorize?" . http_build_query($queryFields), CURLOPT_USERAGENT => "php/curl", CURLOPT_RETURNTRANSFER => 1 ];
$handle = curl_init(); curl_setopt_array($handle, $options); $response = curl_exec($handle); curl_close($handle);
$decodedResponse = json_decode($response); print_r($decodedResponse);'
tags:
- oauth
operationId: authorize
summary: Authorize applications
description: This endpoint returns a redirect URI (in the 'Location' header) that the customer uses to authorize your application and, together with POST /v2/oauth/access_token, generate an access token that represents that authorization.
/v2/oauth/access_token:
post:
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/OauthAccessTokenResponse'
examples:
response:
value:
access_token: v2/NmQwOTc0NTBiMjA5YzZkY2Q4NTkvMTA4OTg1MDk5L2N1c3RvbWVyLzIvZjB2a0RseGo4Rkt6ZjRmVWJNMm10V2VzcHh1NTBlZWJ6andUQU1NeTVYYnNFTDVWOFRJakItS2RnZTlmbEY1Y3haNWdXLUtYc2JhaXo5djk0V0p2QzZUUWZ4c2FNWm41NkdLYUgyVWlCaVUtQTNVMV9YQWpzd3lpblI3SlZEem8wSG1qQ2NzSkJlX3VQTnNXenBIdkd4SXViVi1rRGJTVENCV0g1U3U0RXRJSV9rSm5lQkl5QXlvbm5JN241UUhv
token_type: Bearer
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
x-code-samples:
- lang: shell
source: curl "https://api.shutterstock.com/v2/oauth/access_token" \ -X POST \ --data-urlencode "client_id=$CLIENT_ID" \ --data-urlencode "client_secret=$CLIENT_SECRET" \ --data-urlencode "grant_type=authorization_code" \ --data-urlencode "code=$CODE"
- lang: javascript--nodejs
source: "const axios = require(\"axios\");\n\nconst body = {\n \"client_id\": clientId,\n \"client_secret\": clientSecret,\n \"grant_type\": \"authorization_code\",\n \"code\": code,\n};\n\naxios.post(\"https://api.shutterstock.com/v2/oauth/access_token\", body)\n .then((res) => {\n console.log(res);\n });\n"
- lang: php
source: "$body = [\n \"client_id\" => $clientId,\n \"client_secret\" => $clientSecret,\n \"grant_type\" => \"authorization_code\",\n \"code\" => $code\n];\n$encodedBody = json_encode($body);\n\n$options = [\n CURLOPT_URL => \"https://api.shutterstock.com/v2/oauth/access_token\",\n CURLOPT_CUSTOMREQUEST => \"POST\",\n CURLOPT_POSTFIELDS => $encodedBody,\n CURLOPT_USERAGENT => \"php/curl\",\n CURLOPT_HTTPHEADER => [\n \"Content-Type: application/json\",\n ],\n CURLOPT_RETURNTRANSFER => 1\n];\n\n$handle = curl_init();\ncurl_setopt_array($handle, $options);\n$response = curl_exec($handle);\ncurl_close($handle);\n\n$decodedResponse = json_decode($response);\nprint_r($decodedResponse);\n"
tags:
- oauth
operationId: createAccessToken
summary: Get access tokens
description: This endpoint returns an access token for the specified user and with the specified scopes. The token does not expire until the user changes their password. The body parameters must be encoded as form data.
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
client_id:
description: Client ID (Consumer Key) of your application
type: string
client_secret:
description: Client Secret (Consumer Secret) of your application
type: string
code:
description: Response code from the /oauth/authorize flow; required if grant_type=authorization_code
type: string
grant_type:
description: 'Grant type: authorization_code generates user tokens, client_credentials generates short-lived client grants'
type: string
enum:
- authorization_code
- client_credentials
- refresh_token
realm:
description: User type to be authorized (usually 'customer')
type: string
enum:
- customer
- contributor
default: customer
expires:
description: Whether or not the token expires, expiring tokens come with a refresh_token to renew the access_token
type: string
enum:
- 'true'
- 'false'
default: 'false'
required:
- client_id
- grant_type
examples:
default:
value:
client_id: 141024g14g28104gff1h
application/json:
schema:
type: object
properties:
client_id:
description: Client ID (Consumer Key) of your application
type: string
client_secret:
description: Client Secret (Consumer Secret) of your application
type: string
code:
description: Response code from the /oauth/authorize flow; required if grant_type=authorization_code
type: string
grant_type:
description: 'Grant type: authorization_code generates user tokens, client_credentials generates short-lived client grants'
type: string
enum:
- authorization_code
- client_credentials
- refresh_token
realm:
description: User type to be authorized (usually 'customer')
type: string
enum:
- customer
- contributor
default: customer
expires:
description: Whether or not the token expires, expiring tokens come with a refresh_token to renew the access_token
type: boolean
default: false
required:
- client_id
- grant_type
examples:
default:
value:
client_id: 141024g14g28104gff1h
components:
schemas:
AuthorizeResponse:
description: Response to Authorize requests
properties:
body:
description: HTML redirect URL that contains the application authorization 'code'
type: string
required:
- body
type: object
OauthAccessTokenResponse:
description: Access token response to client apps
properties:
access_token:
description: Access token that can be used for future requests
type: string
expires_in:
description: Number of seconds before token expires, only present for expiring tokens
type: integer
token_type:
default: Bearer
description: Type of token
type: string
refresh_token:
description: A refresh token that can be used to renew the access_token when it expires, only present for expiring tokens
type: string
user_token:
description: Metadata about the access_token, only present for expiring tokens
type: string
required:
- access_token
- token_type
type: object
securitySchemes:
basic:
type: http
scheme: basic
customer_accessCode:
type: oauth2
x-shutterstock-realm: customer
flows:
authorizationCode:
authorizationUrl: https://accounts.shutterstock.com/oauth/authorize
tokenUrl: https://api.shutterstock.com/v2/oauth/access_token
scopes:
licenses.create: Grant the ability to download and license media on behalf of the user.
purchases.view: Grant read-only access to a user's purchase history.
licenses.view: Grant read-only access to a user's licenses.
collections.edit: Grant the ability to create new collections, edit a collection, and modify the contents of a collection
collections.view: Grant read-only access to a collection and its contents.