openapi: 3.0.0
servers:
  - description: Live server
    url: https://api.shutterstock.com
  - description: Sandbox server
    url: https://api-sandbox.shutterstock.com
info:
  contact:
    x-twitter: Shutterstock
  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.
  title: Shutterstock API Explorer
  version: 1.1.32
  x-apisguru-categories:
    - media
  x-logo:
    url: https://twitter.com/Shutterstock/profile_image?size=original
  x-origin:
    - format: openapi
      url: https://api-explorer.shutterstock.com/openapi.json
      version: "3.0"
  x-providerName: shutterstock.com
paths:
  /v2/ai/audio/descriptors:
    get:
      description: This endpoint lists the descriptors that you can use in the audio regions in an audio render.
      operationId: listCustomDescriptors
      parameters:
        - description: Show descriptors with an average render speed that is greater than or equal to the specified value
          example: 5
          in: query
          name: render_speed_over
          schema:
            type: number
        - description: Show descriptors that contain the specified band (case-sentsitive)
          example: Corporate Folk Bonfire Band 1
          in: query
          name: band_id
          schema:
            type: string
        - description: Show descriptors with the specified band name (case-sensitive)
          example: Documentary Underscore Heartfelt Band 1
          in: query
          name: band_name
          schema:
            type: string
        - description: Page number
          example: "1"
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          example: "1"
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 100
            minimum: 1
            type: integer
        - description: Show descriptors with the specified IDs (case-sensitive)
          example: documentary_underscore_heartfelt
          in: query
          name: id
          schema:
            items:
              type: string
            maxItems: 20
            type: array
        - description: Show descriptors with the specified instrument name (case-sensitive)
          example: Precision Bass - Full
          in: query
          name: instrument_name
          schema:
            type: string
        - description: Show descriptors with the specified instrument ID (case-sensitive)
          example: direct_fluorescent_synth_lead
          in: query
          name: instrument_id
          schema:
            type: string
        - description: Show descriptors whose tempo range includes the specified tempo in beats per minute
          example: 90
          in: query
          name: tempo
          schema:
            type: number
        - description: Show descriptors with a tempo that is less than or equal to the specified number
          example: 120
          in: query
          name: tempo_to
          schema:
            type: number
        - description: Show descriptors that have a tempo range that includes the specified tempo in beats per minute
          example: 60
          in: query
          name: tempo_from
          schema:
            type: number
        - description: Show descriptors with the specified name (case-sensitive)
          example: Corporate Pop Inspirational High Energy
          in: query
          name: name
          schema:
            type: string
        - description: Show descriptors with the specified tag, such as Cinematic or Roomy (case-sensitive)
          example: Cinematic
          in: query
          name: tag
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/DescriptorsListResult/example"
              schema:
                $ref: "#/components/schemas/DescriptorsListResult"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
      security:
        - basic: []
        - customer_accessCode: []
      summary: List computer audio descriptors
      tags:
        - custom_music
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/ai/audio/descriptors" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const customMusicApi = new sstk.CustomMusicApi();

            const queryParams = {
              "tag": "Cinematic"
            };

            customMusicApi.listCustomDescriptors(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "tag": "Cinematic",
            };

            sstk.customMusic.listCustomDescriptors(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { CustomMusicApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: CustomMusicApiMethodsParams["listCustomDescriptors"] = {
              "tag": "Cinematic",
            };

            sstk.customMusic.listCustomDescriptors(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/ai/audio/descriptors",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock ai-audio list-custom-descriptors \
              --tag Cinematic
  /v2/ai/audio/instruments:
    get:
      description: This endpoint lists the instruments that you can include in computer audio. If you specify more than one search parameter, the API uses an AND condition.
      operationId: listCustomInstruments
      parameters:
        - description: Show instruments with the specified ID
          example: wood_blocks
          in: query
          name: id
          schema:
            items:
              type: string
            type: array
        - description: Number of results per page
          example: 1
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 100
            minimum: 1
            type: integer
        - description: Page number
          example: "1"
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Show instruments with the specified name (case-sensitive)
          example: Precision Bass - Full
          in: query
          name: name
          schema:
            type: string
        - description: Show instruments with the specified tag, such as Percussion or Strings (case-sensitive)
          example: Percussion
          in: query
          name: tag
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/InstrumentsListResult/example"
              schema:
                $ref: "#/components/schemas/InstrumentsListResult"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List computer audio instruments
      tags:
        - custom_music
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/ai/audio/instruments" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const customMusicApi = new sstk.CustomMusicApi();

            const queryParams = {
              "tag": "Percussion"
            };

            customMusicApi.listCustomInstruments(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "tag": "Percussion",
            };

            sstk.customMusic.listCustomInstruments(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { CustomMusicApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: CustomMusicApiMethodsParams["listCustomInstruments"] = {
              "tag": "Percussion",
            };

            sstk.customMusic.listCustomInstruments(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/ai/audio/instruments",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock ai-audio list-custom-instruments \
              --tag Percussion
  /v2/ai/audio/renders:
    get:
      description: This endpoint shows the status of one or more audio renders, including download links for completed audio.
      operationId: fetchRenders
      parameters:
        - description: One or more render IDs
          example:
            - L2w7h9VNFlkzpllSUunSYayenKjN
            - BeHx3UNXzMBB4dGsC9aa6VxnpcWl
          in: query
          name: id
          required: true
          schema:
            items:
              type: string
            type: array
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/AudioRendersListResults/example"
              schema:
                $ref: "#/components/schemas/AudioRendersListResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get details about audio renders
      tags:
        - custom_music
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/ai/audio/renders" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "id=L2w7h9VNFlkzpllSUunSYayenKjN" \
              --data-urlencode "id=BeHx3UNXzMBB4dGsC9aa6VxnpcWl"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const customMusicApi = new sstk.CustomMusicApi();

            const renders = [
              "L2w7h9VNFlkzpllSUunSYayenKjN",
              "BeHx3UNXzMBB4dGsC9aa6VxnpcWl"
            ];

            customMusicApi.fetchRenders(renders)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "id": [
                "L2w7h9VNFlkzpllSUunSYayenKjN",
                "BeHx3UNXzMBB4dGsC9aa6VxnpcWl",
              ],
            };

            sstk.customMusic.fetchRenders(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { CustomMusicApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: CustomMusicApiMethodsParams["fetchRenders"] = {
              "id": [
                "L2w7h9VNFlkzpllSUunSYayenKjN",
                "BeHx3UNXzMBB4dGsC9aa6VxnpcWl",
              ],
            };

            sstk.customMusic.fetchRenders(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/ai/audio/renders?id=L2w7h9VNFlkzpllSUunSYayenKjN&id=BeHx3UNXzMBB4dGsC9aa6VxnpcWl",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock ai-audio fetch-renders \
              --id L2w7h9VNFlkzpllSUunSYayenKjN \
              --id BeHx3UNXzMBB4dGsC9aa6VxnpcWl
    post:
      description: This endpoint creates rendered audio from timeline data. It returns a render ID that you can use to download the finished audio when it is ready. The render ID is valid for up to 48 hours.
      operationId: createAudioRenders
      requestBody:
        content:
          application/json:
            example:
              $ref: "#/components/schemas/CreateAudioRendersRequest/example"
            schema:
              $ref: "#/components/schemas/CreateAudioRendersRequest"
        description: Parameters for the audio, including the timeline and information about the output file
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    audio_renders:
                      - created_date: 2021-01-26T12:10:22-05:00
                        files: []
                        id: njlpYoWWmb1AYs2nZyw7EcNWbAkZ
                        preset: MASTER_MP3
                        progress_percent: 0
                        status: WAITING_COMPOSE
                        timeline: {}
                        updated_date: 2021-01-26T13:10:22-05:00
              schema:
                $ref: "#/components/schemas/AudioRendersListResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: Create rendered audio
      tags:
        - custom_music
      x-code-samples:
        - lang: shell
          source: |
            DATA='{
              "audio_renders": [
                {
                  "preset": "MASTER_MP3",
                  "filename": "My_audio_ai.mp3",
                  "timeline": {
                    "spans": [
                      {
                        "id": 111,
                        "span_type": "metered",
                        "time": 0,
                        "tempo": 80,
                        "regions": [
                          {
                            "id": 222,
                            "descriptor": "documentary_underscore_heartfelt",
                            "beat": 0,
                            "end_type": {
                              "beat": 17,
                              "event": "ending",
                              "type": "ringout"
                            },
                            "region": "music"
                          }
                        ],
                        "instrument_groups": [
                          {
                            "instrument_group": "full_aw_nylon_acoustic_lead_guitar",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_viola_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "warm_devonshire_upright_acoustic_piano",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_first_violin_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_second_violin_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "warm_kawai_grand_acoustic_piano_dreamy",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "sweet_kawai_grand_acoustic_piano",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_cello_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "span_type": "unmetered",
                        "time": 15
                      }
                    ]
                  }
                }
              ]
            }'

            curl -X POST "https://api.shutterstock.com/v2/ai/audio/renders" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const customMusicApi = new sstk.CustomMusicApi();

            const body = {
              "audio_renders": [
                {
                  "preset": "MASTER_MP3",
                  "filename": "My_audio_ai.mp3",
                  "timeline": {
                    "spans": [
                      {
                        "id": 111,
                        "span_type": "metered",
                        "time": 0,
                        "tempo": 80,
                        "regions": [
                          {
                            "id": 222,
                            "descriptor": "documentary_underscore_heartfelt",
                            "beat": 0,
                            "end_type": {
                              "beat": 17,
                              "event": "ending",
                              "type": "ringout"
                            },
                            "region": "music"
                          }
                        ],
                        "instrument_groups": [
                          {
                            "instrument_group": "full_aw_nylon_acoustic_lead_guitar",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_viola_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "warm_devonshire_upright_acoustic_piano",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_first_violin_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_second_violin_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "warm_kawai_grand_acoustic_piano_dreamy",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "sweet_kawai_grand_acoustic_piano",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_cello_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "span_type": "unmetered",
                        "time": 15
                      }
                    ]
                  }
                }
              ]
            };

            customMusicApi.createAudioRenders(body)
              .then(async (data) => {
                const { id } = data.audio_renders[0];
                console.log(id);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const audioRendersBody = {
              "body": {
                "audio_renders": [
                  {
                    "preset": "MASTER_MP3",
                    "filename": "My_audio_ai.mp3",
                    "timeline": {
                      "spans": [
                        {
                          "id": 111,
                          "span_type": "metered",
                          "time": 0,
                          "tempo": 80,
                          "regions": [
                            {
                              "id": 222,
                              "descriptor": "documentary_underscore_heartfelt",
                              "beat": 0,
                              "end_type": {
                                "beat": 17,
                                "event": "ending",
                                "type": "ringout",
                              },
                              "region": "music",
                            },
                          ],
                          "instrument_groups": [
                            {
                              "instrument_group": "full_aw_nylon_acoustic_lead_guitar",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": "active",
                                },
                              ],
                            },
                            {
                              "instrument_group": "nice_scoring_viola_ensemble",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": "active",
                                },
                              ],
                            },
                            {
                              "instrument_group": "warm_devonshire_upright_acoustic_piano",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": "active",
                                },
                              ],
                            },
                            {
                              "instrument_group": "nice_scoring_first_violin_ensemble",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": "active",
                                },
                              ],
                            },
                            {
                              "instrument_group": "nice_scoring_second_violin_ensemble",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": "active",
                                },
                              ],
                            },
                            {
                              "instrument_group": "warm_kawai_grand_acoustic_piano_dreamy",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": "active",
                                },
                              ],
                            },
                            {
                              "instrument_group": "sweet_kawai_grand_acoustic_piano",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": "active",
                                },
                              ],
                            },
                            {
                              "instrument_group": "nice_scoring_cello_ensemble",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": "active",
                                },
                              ],
                            },
                          ],
                        },
                        {
                          "span_type": "unmetered",
                          "time": 15,
                        },
                      ],
                    },
                  },
                ],
              },
            };

            sstk.customMusic.createAudioRenders(audioRendersBody)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock, {
              AudioRenderTimelineSpanRegionEndTypeEventEnum,
              AudioRenderTimelineSpanRegionEndTypeTypeEnum,
              AudioRenderTimelineSpanRegionRegionEnum,
              AudioRenderTimelineSpanSpanTypeEnum,
              CreateAudioRenderPresetEnum,
              AudioRenderTimelineSpanInstrumentGroupStatusStatusEnum,
            } from "shutterstock-api";
            import type { CustomMusicApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const audioRendersBody: CustomMusicApiMethodsParams["createAudioRenders"] = {
              "body": {
                "audio_renders": [
                  {
                    "preset": CreateAudioRenderPresetEnum.MASTERMP3,
                    "filename": "My_audio_ai.mp3",
                    "timeline": {
                      "spans": [
                        {
                          "id": 111,
                          "span_type": AudioRenderTimelineSpanSpanTypeEnum.Metered,
                          "time": 0,
                          "tempo": 80,
                          "regions": [
                            {
                              "id": 222,
                              "descriptor": "documentary_underscore_heartfelt",
                              "beat": 0,
                              "end_type": {
                                "beat": 17,
                                "event": AudioRenderTimelineSpanRegionEndTypeEventEnum.Ending,
                                "type": AudioRenderTimelineSpanRegionEndTypeTypeEnum.Ringout,
                              },
                              "region": AudioRenderTimelineSpanRegionRegionEnum.Music,
                            },
                          ],
                          "instrument_groups": [
                            {
                              "instrument_group": "full_aw_nylon_acoustic_lead_guitar",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": AudioRenderTimelineSpanInstrumentGroupStatusStatusEnum.Active,
                                },
                              ],
                            },
                            {
                              "instrument_group": "nice_scoring_viola_ensemble",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": AudioRenderTimelineSpanInstrumentGroupStatusStatusEnum.Active,
                                },
                              ],
                            },
                            {
                              "instrument_group": "warm_devonshire_upright_acoustic_piano",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": AudioRenderTimelineSpanInstrumentGroupStatusStatusEnum.Active,
                                },
                              ],
                            },
                            {
                              "instrument_group": "nice_scoring_first_violin_ensemble",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": AudioRenderTimelineSpanInstrumentGroupStatusStatusEnum.Active,
                                },
                              ],
                            },
                            {
                              "instrument_group": "nice_scoring_second_violin_ensemble",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": AudioRenderTimelineSpanInstrumentGroupStatusStatusEnum.Active,
                                },
                              ],
                            },
                            {
                              "instrument_group": "warm_kawai_grand_acoustic_piano_dreamy",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": AudioRenderTimelineSpanInstrumentGroupStatusStatusEnum.Active,
                                },
                              ],
                            },
                            {
                              "instrument_group": "sweet_kawai_grand_acoustic_piano",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": AudioRenderTimelineSpanInstrumentGroupStatusStatusEnum.Active,
                                },
                              ],
                            },
                            {
                              "instrument_group": "nice_scoring_cello_ensemble",
                              "statuses": [
                                {
                                  "beat": 0,
                                  "status": AudioRenderTimelineSpanInstrumentGroupStatusStatusEnum.Active,
                                },
                              ],
                            },
                          ],
                        },
                        {
                          "span_type": AudioRenderTimelineSpanSpanTypeEnum.Unmetered,
                          "time": 15,
                        },
                      ],
                    },
                  },
                ],
              },
            };

            sstk.customMusic.createAudioRenders(audioRendersBody)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $body = [
              "audio_renders" => [
                [
                  "preset" => "MASTER_MP3",
                  "filename" => "My_audio_ai.mp3",
                  "timeline" => [
                    "spans" => [
                      [
                        "id" => 111,
                        "span_type" => "metered",
                        "time" => 0,
                        "tempo" => 80,
                        "regions" => [
                          [
                            "id" => 222,
                            "descriptor" => "documentary_underscore_heartfelt",
                            "beat" => 0,
                            "end_type" => [
                              "beat" => 17,
                              "event" => "ending",
                              "type" => "ringout"
                            ],
                            "region" => "music"
                          ]
                        ],
                        "instrument_groups" => [
                          [
                            "instrument_group" => "full_aw_nylon_acoustic_lead_guitar",
                            "statuses" => [
                              [
                                "beat" => 0,
                                "status" => "active"
                              ]
                            ]
                          ],
                          [
                            "instrument_group" => "nice_scoring_viola_ensemble",
                            "statuses" => [
                              [
                                "beat" => 0,
                                "status" => "active"
                              ]
                            ]
                          ],
                          [
                            "instrument_group" => "warm_devonshire_upright_acoustic_piano",
                            "statuses" => [
                              [
                                "beat" => 0,
                                "status" => "active"
                              ]
                            ]
                          ],
                          [
                            "instrument_group" => "nice_scoring_first_violin_ensemble",
                            "statuses" => [
                              [
                                "beat" => 0,
                                "status" => "active"
                              ]
                            ]
                          ],
                          [
                            "instrument_group" => "nice_scoring_second_violin_ensemble",
                            "statuses" => [
                              [
                                "beat" => 0,
                                "status" => "active"
                              ]
                            ]
                          ],
                          [
                            "instrument_group" => "warm_kawai_grand_acoustic_piano_dreamy",
                            "statuses" => [
                              [
                                "beat" => 0,
                                "status" => "active"
                              ]
                            ]
                          ],
                          [
                            "instrument_group" => "sweet_kawai_grand_acoustic_piano",
                            "statuses" => [
                              [
                                "beat" => 0,
                                "status" => "active"
                              ]
                            ]
                          ],
                          [
                            "instrument_group" => "nice_scoring_cello_ensemble",
                            "statuses" => [
                              [
                                "beat" => 0,
                                "status" => "active"
                              ]
                            ]
                          ]
                        ]
                      ],
                      [
                        "span_type" => "unmetered",
                        "time" => 15
                      ]
                    ]
                  ]
                ]
              ]
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/ai/audio/renders",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "audio_renders": [
                {
                  "preset": "MASTER_MP3",
                  "filename": "My_audio_ai.mp3",
                  "timeline": {
                    "spans": [
                      {
                        "id": 111,
                        "span_type": "metered",
                        "time": 0,
                        "tempo": 80,
                        "regions": [
                          {
                            "id": 222,
                            "descriptor": "documentary_underscore_heartfelt",
                            "beat": 0,
                            "end_type": {
                              "beat": 17,
                              "event": "ending",
                              "type": "ringout"
                            },
                            "region": "music"
                          }
                        ],
                        "instrument_groups": [
                          {
                            "instrument_group": "full_aw_nylon_acoustic_lead_guitar",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_viola_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "warm_devonshire_upright_acoustic_piano",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_first_violin_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_second_violin_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "warm_kawai_grand_acoustic_piano_dreamy",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "sweet_kawai_grand_acoustic_piano",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          },
                          {
                            "instrument_group": "nice_scoring_cello_ensemble",
                            "statuses": [
                              {
                                "beat": 0,
                                "status": "active"
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "span_type": "unmetered",
                        "time": 15
                      }
                    ]
                  }
                }
              ]
            }' > data.json

            shutterstock ai-audio create-audio-renders data.json
  /v2/audio:
    get:
      description: This endpoint lists information about one or more audio tracks, including the description and publication date.
      operationId: getTrackList
      parameters:
        - description: One or more audio IDs
          example:
            - "442583"
            - "434750"
          in: query
          name: id
          required: true
          schema:
            items:
              pattern: ^[1-9]\d*$
              type: string
              x-pattern-description: A number that does not start with 0
            maxItems: 500
            minItems: 1
            type: array
        - description: Amount of detail to render in the response
          example: full
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
        - description: The ID of the search that is related to this request
          example: 00000000-0000-0000-0000-000000000000
          in: query
          name: search_id
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/AudioDataList/example"
              schema:
                $ref: "#/components/schemas/AudioDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List audio tracks
      tags:
        - audio
  /v2/audio/collections:
    get:
      description: This endpoint lists your collections of audio tracks and their basic attributes.
      operationId: getTrackCollectionList
      parameters:
        - description: Page number
          example: "1"
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          example: "100"
          in: query
          name: per_page
          schema:
            default: 100
            maximum: 150
            minimum: 1
            type: integer
        - description: Which sharing information to include in the response, such as a URL to the collection
          example: share_code
          in: query
          name: embed
          schema:
            items:
              enum:
                - share_code
                - share_url
              type: string
            type: array
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CollectionDataList/example"
              schema:
                $ref: "#/components/schemas/CollectionDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - collections.view
      summary: List audio collections
      tags:
        - audio
    post:
      description: This endpoint creates one or more collections (soundboxes). To add tracks, use `POST /v2/audio/collections/{id}/items`.
      operationId: createTrackCollection
      requestBody:
        content:
          application/json:
            examples:
              default:
                description: Create a soundbox
                value:
                  name: Best rock music
            schema:
              $ref: "#/components/schemas/CollectionCreateRequest"
        description: Collection metadata
        required: true
      responses:
        "201":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CollectionCreateResponse/example"
              schema:
                $ref: "#/components/schemas/CollectionCreateResponse"
          description: Successfully created audio collection
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - collections.edit
      summary: Create audio collections
      tags:
        - audio
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "name": "Best rock music"
            }'

            curl -X POST "https://api.shutterstock.com/v2/audio/collections" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const audioApi = new sstk.AudioApi();

            const body = {
              "name": "Best rock music",
            };

            audioApi.createTrackCollection(body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const newCollectionBody = {
              "body": {
                "name": "Best rock music",
              },
            };

            sstk.audio.createTrackCollection(newCollectionBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { AudioApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const newCollectionBody: AudioApiMethodsParams["createTrackCollection"] = {
              "body": {
                "name": "Best rock music",
              },
            };

            sstk.audio.createTrackCollection(newCollectionBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $body = [
              "name" => "Best rock music"
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/audio/collections",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "name": "Best rock music"
            }' > data.json

            shutterstock images create-image-collection data.json
  "/v2/audio/collections/{id}":
    delete:
      description: This endpoint deletes a collection.
      operationId: deleteTrackCollection
      parameters:
        - description: Collection ID
          example: "48433111"
          in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "204":
          description: Successfully deleted collection
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Delete audio collections
      tags:
        - audio
      x-code-samples:
        - lang: shell
          source: |-
            curl -X DELETE "https://api.shutterstock.com/v2/audio/collections/48433111" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const audioApi = new sstk.AudioApi();

            const collectionId = "48433107";

            audioApi.deleteTrackCollection(collectionId)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "48433107";

            const deleteCollectionParams = {
              "id": collectionId,
            };

            sstk.audio.deleteTrackCollection(deleteCollectionParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { AudioApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "48433107";

            const deleteCollectionParams: AudioApiMethodsParams["deleteTrackCollection"] = {
              "id": collectionId,
            };

            sstk.audio.deleteTrackCollection(deleteCollectionParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/audio/collections/48433111",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_CUSTOMREQUEST => "DELETE",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock audio delete-track-collection 48433111
    get:
      description: This endpoint gets more detailed information about a collection, including the number of items in it and when it was last updated. To get the tracks in collections, use `GET /v2/audio/collections/{id}/items`.
      operationId: getTrackCollection
      parameters:
        - description: Collection ID
          example: "48433107"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Which sharing information to include in the response, such as a URL to the collection
          in: query
          name: embed
          schema:
            items:
              enum:
                - share_code
                - share_url
              type: string
            type: array
        - description: Code to retrieve a shared collection
          in: query
          name: share_code
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/Collection/example"
              schema:
                $ref: "#/components/schemas/Collection"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.view
      summary: Get the details of audio collections
      tags:
        - audio
    post:
      description: This endpoint sets a new name for a collection.
      operationId: renameTrackCollection
      parameters:
        - description: Collection ID
          example: "48433107"
          in: path
          name: id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                description: Renaming a soundbox
                value:
                  name: Best rock music
            schema:
              $ref: "#/components/schemas/CollectionUpdateRequest"
        description: Collection changes
        required: true
      responses:
        "204":
          description: Successfully updated collection
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Rename audio collections
      tags:
        - audio
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "name": "Best rock music"
            }'

            curl -X POST "https://api.shutterstock.com/v2/audio/collections/48433107" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const audioApi = new sstk.AudioApi();

            const collectionId = "48433107";

            const body = {
              "name": "Best rock music"
            };

            audioApi.renameTrackCollection(collectionId, body)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "48433107";

            const renameAudioBody = {
              "id": collectionId,
              "body": {
                "name": "Best rock music",
              },
            };

            sstk.audio.renameTrackCollection(renameAudioBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { AudioApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "48433107";

            const renameAudioBody: AudioApiMethodsParams["renameTrackCollection"] = {
              "id": collectionId,
              "body": {
                "name": "Best rock music",
              },
            };

            sstk.audio.renameTrackCollection(renameAudioBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $body = [
              "name" => "Best rock music"
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/audio/collections/48433107",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "name": "Best rock music"
            }' > data.json

            shutterstock audio rename-collection 48433107 data.json
  "/v2/audio/collections/{id}/items":
    delete:
      description: This endpoint removes one or more tracks from a collection.
      operationId: deleteTrackCollectionItems
      parameters:
        - description: Collection ID
          example: "48433119"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: One or more item IDs to remove from the collection
          example:
            - "76688182"
            - "40005859"
          in: query
          name: item_id
          schema:
            items:
              type: string
            type: array
      responses:
        "204":
          description: Successfully removed collection items
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Remove audio tracks from collections
      tags:
        - audio
      x-code-samples:
        - lang: shell
          source: |-
            curl -X DELETE "https://api.shutterstock.com/v2/audio/collections/48433119/items?item_id=36345523" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const audioApi = new sstk.AudioApi();

            const collectionId = "48433119";

            // Array of tracks to remove
            const tracksToRemove = {
              "item_id": [
                "76688182",
                "40005859"
              ]
            };

            audioApi.deleteTrackCollectionItems(collectionId, tracksToRemove)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "48433107";

            const deleteTrackParams = {
              "id": collectionId,
              "item_id": [
                "76688182",
                "40005859",
              ],
            };

            sstk.audio.deleteTrackCollectionItems(deleteTrackParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { AudioApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "48433107";

            const deleteTrackParams: AudioApiMethodsParams["deleteTrackCollectionItems"] = {
              "id": collectionId,
              "item_id": [
                "76688182",
                "40005859",
              ],
            };

            sstk.audio.deleteTrackCollectionItems(deleteTrackParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/audio/collections/48433119/items?item_id=495863218",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_CUSTOMREQUEST => "DELETE",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock audio delete-track-collection-items 48433119 \
              --item-id 36345523
    get:
      description: This endpoint lists the IDs of tracks in a collection and the date that each was added.
      operationId: getTrackCollectionItems
      parameters:
        - description: Collection ID
          example: "126351027"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 100
            maximum: 150
            minimum: 1
            type: integer
        - description: Code to retrieve the contents of a shared collection
          in: query
          name: share_code
          schema:
            type: string
        - description: Sort order
          in: query
          name: sort
          schema:
            default: oldest
            enum:
              - newest
              - oldest
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    data:
                      - added_time: 2016-08-18T18:52:59-04:00
                        id: "76688182"
                        media_type: audio
                      - added_time: 2016-08-18T18:52:59-04:00
                        id: "40005859"
                        media_type: audio
                    page: 1
                    per_page: 2
              schema:
                $ref: "#/components/schemas/CollectionItemDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.view
      summary: Get the contents of audio collections
      tags:
        - audio
    post:
      description: This endpoint adds one or more tracks to a collection by track IDs.
      operationId: addTrackCollectionItems
      parameters:
        - description: Collection ID
          example: "48433115"
          in: path
          name: id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                description: Adds tracks to a soundbox
                value:
                  items:
                    - id: "442583"
                    - id: "7491192"
            schema:
              $ref: "#/components/schemas/CollectionItemRequest"
        description: List of items to add to collection
        required: true
      responses:
        "204":
          description: Successfully added collection items
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Add audio tracks to collections
      tags:
        - audio
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "items": [
                {
                  "id": "442583"
                },
                {
                  "id": "7491192"
                }
              ]
            }'

            curl -X POST "https://api.shutterstock.com/v2/audio/collections/48433115/items" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const audioApi = new sstk.AudioApi();

            const collectionId = "48433115";

            const body = {
              "items": [
                {
                  "id": "442583"
                },
                {
                  "id": "7491192"
                }
              ]
            };

            audioApi.addTrackCollectionItems(collectionId, body)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "48433115";

            const addTrackBody = {
              "id": collectionId,
              "body": {
                "items": [
                  {
                    "id": "442583",
                  },
                  {
                    "id": "7491192",
                  },
                ],
              },
            };

            sstk.audio.addTrackCollectionItems(addTrackBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { AudioApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "48433115";

            const addTrackBody: AudioApiMethodsParams["addTrackCollectionItems"] = {
              "id": collectionId,
              "body": {
                "items": [
                  {
                    "id": "442583",
                  },
                  {
                    "id": "7491192",
                  },
                ],
              },
            };

            sstk.audio.addTrackCollectionItems(addTrackBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $body = [
              "items" => [
                [
                  "id" => "442583"
                ],
                [
                  "id" => "7491192"
                ]
              ]
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/audio/collections/48433115/items",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "items": [
                {
                  "id": "442583"
                },
                {
                  "id": "7491192"
                }
              ]
            }' > data.json

            shutterstock audio add-collection-items 48433115 data.json
  /v2/audio/genres:
    get:
      description: This endpoint returns a list of all audio genres.
      operationId: listGenres
      parameters:
        - description: Which language the genres will be returned
          in: query
          name: language
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/GenreList/example"
              schema:
                $ref: "#/components/schemas/GenreList"
          description: OK
      security:
        - basic: []
        - customer_accessCode: []
      summary: List audio genres
      tags:
        - audio
  /v2/audio/instruments:
    get:
      description: This endpoint returns a list of all audio instruments.
      operationId: listInstruments
      parameters:
        - description: Which language the instruments will be returned in
          in: query
          name: language
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/InstrumentList/example"
              schema:
                $ref: "#/components/schemas/InstrumentList"
          description: OK
      security:
        - basic: []
        - customer_accessCode: []
      summary: List audio instruments
      tags:
        - audio
  /v2/audio/licenses:
    get:
      description: This endpoint lists existing licenses. You can filter the results according to the track ID to see if you have an existing license for a specific track.
      operationId: getTrackLicenseList
      parameters:
        - description: Show licenses for the specified track ID
          example: "1"
          in: query
          name: audio_id
          schema:
            type: string
        - description: Restrict results by license. Prepending a `-` sign will exclude results by license
          example: "48433107"
          in: query
          name: license
          schema:
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 200
            minimum: 0
            type: integer
        - description: Sort order
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
        - description: Filter licenses by username of licensee
          example: aUniqueUsername
          in: query
          name: username
          schema:
            type: string
        - description: Show licenses created on or after the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: start_date
          schema:
            format: date-time
            type: string
          x-relationships:
            - in: query
              name: end_date
              relationship: <=
        - description: Show licenses created before the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: end_date
          schema:
            format: date-time
            type: string
          x-relationships:
            - in: query
              name: start_date
              relationship: ">"
        - description: Filter licenses by download availability
          in: query
          name: download_availability
          schema:
            default: all
            enum:
              - all
              - downloadable
              - non_downloadable
            type: string
        - description: Set to true to see license history for all members of your team.
          in: query
          name: team_history
          schema:
            default: false
            type: boolean
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    data:
                      - audio:
                          format:
                            size: clean_audio
                          id: "420298"
                        download_time: 2020-11-11T16:15:20.000Z
                        id: a10b7a7a5a02113a928f13e5ba196151d6
                        is_downloadable: true
                        license: premier_music_extended
                        metadata:
                          purchase_order: "123"
                        user:
                          username: jsmith
                    page: 1
                    per_page: 20
                    total_count: 1
              schema:
                $ref: "#/components/schemas/DownloadHistoryDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.view
      summary: List audio licenses
      tags:
        - audio
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/audio/licenses" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              -G \
              --data-urlencode "start_date=2016-10-03T01:25:13.521Z" \
              --data-urlencode "end_date=2016-10-04T13:25:13.521Z" \
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const audioApi = new sstk.AudioApi();

            const queryParams = {
              "start_date": "2016-10-03T01:25:13.521Z",
              "end_date": "2016-10-04T13:25:13.521Z"
            };

            audioApi.getTrackLicenseList(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams = {
              "start_date": lastWeek,
              "end_date": today,
            };

            sstk.audio.getTrackLicenseList(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { AudioApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams: AudioApiMethodsParams["getTrackLicenseList"] = {
              "start_date": lastWeek,
              "end_date": today,
            };

            sstk.audio.getTrackLicenseList(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "start_date" => "2016-10-03T01:25:13.521Z",
              "end_date" => "2016-10-04T13:25:13.521Z"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/audio/licenses" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock audio get-track-license-list \
              --start-date "2016-10-03T01:25:13.521Z" \
              --end-date "2016-10-04T13:25:13.521Z"
    post:
      description: This endpoint gets licenses for one or more tracks. The download links in the response are valid for 8 hours.
      operationId: licenseTrack
      parameters:
        - description: License type
          example: audio_platform
          in: query
          name: license
          schema:
            enum:
              - audio_platform
              - premier_music_basic
              - premier_music_extended
              - premier_music_pro
              - premier_music_comp
              - asset_all_music
            type: string
        - description: The ID of the search that led to licensing this track
          example: p5S6QwRikdFJTHXwsoiqTg
          in: query
          name: search_id
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                description: Overwrite content of soundbox with new items
                value:
                  $ref: "#/components/schemas/LicenseAudioRequest/example"
            schema:
              $ref: "#/components/schemas/LicenseAudioRequest"
        description: Tracks to license
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/LicenseAudioResultDataList/example"
              schema:
                $ref: "#/components/schemas/LicenseAudioResultDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.create
      summary: License audio tracks
      tags:
        - audio
      x-code-samples:
        - lang: shell
          source: |
            DATA='{
              "audio": [
                {
                  "audio_id": "591623",
                  "license": "audio_platform",
                  "metadata": {
                    "customer_id": "12345"
                  }
                }
              ]
            }'

            curl -X POST "https://api.shutterstock.com/v2/audio/licenses" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const audioApi = new sstk.AudioApi();

            const body = {
              "audio": [
                {
                  "audio_id": "446348",
                  "license": "audio_platform",
                  "metadata": {
                    "customer_id": "12345"
                  }
                }
              ]
            };

            audioApi.licenseTrack(body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams = {
              "body": {
                "audio": [
                  {
                    "audio_id": "446348",
                    "license": "audio_platform",
                  },
                ],
              },
            };

            sstk.audio.licenseTrack(licenseParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock, { LicenseAudioLicenseEnum } from "shutterstock-api";
            import type { AudioApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams: AudioApiMethodsParams["licenseTrack"] = {
              "body": {
                "audio": [
                  {
                    "audio_id": "446348",
                    "license": LicenseAudioLicenseEnum.AudioPlatform,
                  },
                ],
              },
            };

            sstk.audio.licenseTrack(licenseParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $body = [
              "audio" => [
                [
                  "audio_id" => "591623",
                  "license" => "audio_platform",
                  "metadata" => [
                  "customer_id" => "12345"
                  ]
                ]
              ]
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/audio/licenses",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "audio": [
                {
                  "audio_id": "591623",
                  "license": "audio_platform",
                  "metadata": {
                    "customer_id": "12345"
                  }
                }
              ]
            }' > data.json

            shutterstock audio license-track data.json
  "/v2/audio/licenses/{id}/downloads":
    post:
      description: This endpoint redownloads tracks that you have already received a license for. The download links in the response are valid for 8 hours.
      operationId: downloadTracks
      parameters:
        - description: License ID
          example: e123
          in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    shorts_loops_stems: http://download2.dev.shutterstock.com/gatekeeper/abc/original.zip
                    url: http://download2.dev.shutterstock.com/gatekeeper/abc/original.wav
              schema:
                $ref: "#/components/schemas/AudioUrl"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.view
      summary: Download audio tracks
      tags:
        - audio
      x-code-samples:
        - lang: shell
          source: |
            curl -X POST "https://api.shutterstock.com/v2/audio/licenses/e123/downloads" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const audioApi = new sstk.AudioApi();

            const licenseId = "e123"; // license ID, not track ID

            audioApi.downloadTracks(licenseId)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseId = "e123"; // license ID, not track ID

            const queryParams = {
              "id": licenseId,
            };

            sstk.audio.downloadTracks(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { AudioApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseId = "e123"; // license ID, not track ID

            const queryParams: AudioApiMethodsParams["downloadTracks"] = {
              "id": licenseId,
            };

            sstk.audio.downloadTracks(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/audio/licenses/e123/downloads",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock audio download-tracks e123
  /v2/audio/moods:
    get:
      description: This endpoint returns a list of all audio moods.
      operationId: listMoods
      parameters:
        - description: Which language the moods will be returned in
          in: query
          name: language
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/MoodList/example"
              schema:
                $ref: "#/components/schemas/MoodList"
          description: OK
      security:
        - basic: []
        - customer_accessCode: []
      summary: List audio moods
      tags:
        - audio
  /v2/audio/search:
    get:
      description: This endpoint searches for tracks. If you specify more than one search parameter, the API uses an AND condition. Array parameters can be specified multiple times; in this case, the API uses an AND or an OR condition with those values, depending on the parameter.
      operationId: searchTracks
      parameters:
        - description: Show tracks with one of the specified artist names or IDs
          in: query
          name: artists
          schema:
            items:
              type: string
            type: array
            uniqueItems: false
        - deprecated: true
          description: (Deprecated; use bpm_from and bpm_to instead) Show tracks with the specified beats per minute
          in: query
          name: bpm
          schema:
            type: integer
            uniqueItems: true
        - description: Show tracks with the specified beats per minute or faster
          example: 80
          in: query
          name: bpm_from
          schema:
            type: integer
            uniqueItems: true
        - description: Show tracks with the specified beats per minute or slower
          example: 120
          in: query
          name: bpm_to
          schema:
            type: integer
            uniqueItems: true
        - description: Show tracks with the specified duration in seconds
          example: 180
          in: query
          name: duration
          schema:
            type: integer
            uniqueItems: true
        - description: Show tracks with the specified duration or longer in seconds
          example: 30
          in: query
          name: duration_from
          schema:
            type: integer
            uniqueItems: true
        - description: Show tracks with the specified duration or shorter in seconds
          example: 180
          in: query
          name: duration_to
          schema:
            type: integer
            uniqueItems: true
        - description: Show tracks with each of the specified genres; to get the list of genres, use `GET /v2/audio/genres`
          example:
            - Classical
            - Holiday
          explode: true
          in: query
          name: genre
          schema:
            items:
              type: string
            type: array
            uniqueItems: false
        - description: Show instrumental music only
          example: true
          in: query
          name: is_instrumental
          schema:
            type: boolean
            uniqueItems: true
        - description: Show tracks with each of the specified instruments; to get the list of instruments, use `GET /v2/audio/instruments`
          example:
            - Trumpet
            - Percussion
          explode: true
          in: query
          name: instruments
          schema:
            items:
              type: string
            type: array
            uniqueItems: false
        - description: Show tracks with each of the specified moods; to get the list of moods, use `GET /v2/audio/moods`
          example:
            - Confident
            - Playful
          explode: true
          in: query
          name: moods
          schema:
            items:
              type: string
            type: array
            uniqueItems: false
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
            uniqueItems: true
        - description: Number of results per page
          example: 1
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 500
            minimum: 0
            type: integer
            uniqueItems: true
        - description: One or more search terms separated by spaces
          example: drum
          in: query
          name: query
          schema:
            type: string
            uniqueItems: true
        - description: Sort by
          example: score
          in: query
          name: sort
          schema:
            enum:
              - score
              - ranking_all
              - artist
              - title
              - bpm
              - freshness
              - duration
            type: string
            uniqueItems: true
        - description: Sort order
          in: query
          name: sort_order
          schema:
            default: desc
            enum:
              - asc
              - desc
            type: string
            uniqueItems: true
        - description: Show tracks with the specified vocal description (male, female)
          example: female
          in: query
          name: vocal_description
          schema:
            type: string
            uniqueItems: true
        - description: Amount of detail to render in the response
          example: full
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
            uniqueItems: true
        - description: Fields to display in the response; see the documentation for the fields parameter in the overview section
          in: query
          name: fields
          schema:
            type: string
            uniqueItems: true
        - description: Which library to search
          in: query
          name: library
          schema:
            default: premier
            enum:
              - shutterstock
              - premier
            type: string
            uniqueItems: true
        - description: Which language to search in
          in: query
          name: language
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/AudioSearchResults/example"
              schema:
                $ref: "#/components/schemas/AudioSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: Search for tracks
      tags:
        - audio
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/audio/search" \
              --header "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "query=bluegrass" \
              --data-urlencode "duration_from=60" \
              --data-urlencode "moods=uplifting"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const audioApi = new sstk.AudioApi();

            const queryParams = {
              "query": "bluegrass",
              "duration_from": 60,
              "moods": ["uplifting"]
            };

            audioApi.searchTracks(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "query": "air",
              "duration_from": 60,
            };

            sstk.audio.searchTracks(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { AudioApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: AudioApiMethodsParams["searchTracks"] = {
              "query": "bluegrass",
              "duration_from": 60,
              "moods": ["uplifting"],
            };

            sstk.audio.searchTracks(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "query" => "bluegrass",
              "duration_from" => 60,
              "moods" => "uplifting"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/audio/search?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock audio search-tracks \
              --query bluegrass \
              --duration-from 60 \
              --moods uplifting
  "/v2/audio/{id}":
    get:
      description: This endpoint shows information about a track, including its genres, instruments, and other attributes.
      operationId: getTrack
      parameters:
        - description: Audio track ID
          example: "442583"
          in: path
          name: id
          required: true
          schema:
            type: integer
        - description: Amount of detail to render in the response
          example: full
          in: query
          name: view
          schema:
            default: full
            enum:
              - minimal
              - full
            type: string
        - description: The ID of the search that is related to this request
          example: 00000000-0000-0000-0000-000000000000
          in: query
          name: search_id
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/Audio/example"
              schema:
                $ref: "#/components/schemas/Audio"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get details about audio tracks
      tags:
        - audio
  /v2/bulk_search/images:
    post:
      description: This endpoint runs up to 5 image searches in a single request and returns up to 20 results per search. You can provide global search parameters in the query parameters and override them for each search in the body parameter. The query and body parameters are the same as in the `GET /v2/images/search` endpoint.
      operationId: bulkSearchImages
      parameters:
        - description: Show images added on the specified date
          example: 2021-03-29
          in: query
          name: added_date
          schema:
            format: date
            type: string
        - description: Show images added on or after the specified date
          example: 2021-03-29
          in: query
          name: added_date_start
          schema:
            format: date
            type: string
        - description: Show images with the specified aspect ratio or higher, using a positive decimal of the width divided by the height, such as 1.7778 for a 16:9 image
          example: 1.7778
          in: query
          name: aspect_ratio_min
          schema:
            exclusiveMinimum: true
            minimum: 0
            type: number
        - description: Show images with the specified aspect ratio or lower, using a positive decimal of the width divided by the height, such as 1.7778 for a 16:9 image
          example: 1.7778
          in: query
          name: aspect_ratio_max
          schema:
            exclusiveMinimum: true
            minimum: 0
            type: number
        - description: Show images with the specified aspect ratio, using a positive decimal of the width divided by the height, such as 1.7778 for a 16:9 image
          example: 1.7778
          in: query
          name: aspect_ratio
          schema:
            exclusiveMinimum: true
            minimum: 0
            type: number
        - description: Show images added before the specified date
          example: 2021-03-29
          in: query
          name: added_date_end
          schema:
            format: date
            type: string
        - description: Show images with the specified Shutterstock-defined category; specify a category name or ID
          in: query
          name: category
          schema:
            type: string
        - description: Specify either a hexadecimal color in the format '4F21EA' or 'grayscale'; the API returns images that use similar colors
          example: 4F21EA
          in: query
          name: color
          schema:
            type: string
        - description: Show images with the specified contributor names or IDs, allows multiple
          example:
            - "123456"
          in: query
          name: contributor
          schema:
            items:
              type: string
            type: array
        - description: Show images from contributors in one or more specified countries, or start with NOT to exclude a country from the search
          example: US
          in: query
          name: contributor_country
          schema:
            oneOf:
              - items:
                  format: country-code-2
                  type: string
                type: array
              - items:
                  format: negated-country-code-2
                  type: string
                type: array
        - description: Fields to display in the response; see the documentation for the fields parameter in the overview section
          in: query
          name: fields
          schema:
            type: string
            uniqueItems: true
        - deprecated: true
          description: (Deprecated; use height_from and height_to instead) Show images with the specified height
          in: query
          name: height
          schema:
            type: integer
        - description: Show images with the specified height or larger, in pixels
          example: 1080
          in: query
          name: height_from
          schema:
            type: integer
        - description: Show images with the specified height or smaller, in pixels
          example: 1080
          in: query
          name: height_to
          schema:
            type: integer
        - description: Show images of the specified type
          example: photo
          in: query
          name: image_type
          schema:
            items:
              enum:
                - photo
                - illustration
                - vector
              type: string
            type: array
        - description: Hide results with potentially unsafe keywords
          in: query
          name: keyword_safe_search
          schema:
            default: true
            type: boolean
        - description: Set query and result language (uses Accept-Language header if not set)
          example: fr
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Show only images with the specified license
          in: query
          name: license
          schema:
            items:
              default: commercial
              enum:
                - commercial
                - editorial
                - enhanced
              type: string
            type: array
        - description: Show image results with the specified model IDs
          example:
            - "12345"
            - "67890"
          in: query
          name: model
          schema:
            items:
              type: string
            type: array
        - description: Show image results with horizontal or vertical orientation
          example: vertical
          in: query
          name: orientation
          schema:
            enum:
              - horizontal
              - vertical
            type: string
        - description: Page number
          example: 1
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          example: 10
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 20
            minimum: 0
            type: integer
        - description: Show images of people with a signed model release
          example: true
          in: query
          name: people_model_released
          schema:
            type: boolean
        - description: Show images that feature people of the specified age category
          example: 20s
          in: query
          name: people_age
          schema:
            enum:
              - infants
              - children
              - teenagers
              - 20s
              - 30s
              - 40s
              - 50s
              - 60s
              - older
            type: string
        - description: Show images with people of the specified ethnicities, or start with NOT to show images without those ethnicities
          example: hispanic
          in: query
          name: people_ethnicity
          schema:
            items:
              enum:
                - african
                - african_american
                - black
                - brazilian
                - chinese
                - caucasian
                - east_asian
                - hispanic
                - japanese
                - middle_eastern
                - native_american
                - pacific_islander
                - south_asian
                - southeast_asian
                - other
                - NOT african
                - NOT african_american
                - NOT black
                - NOT brazilian
                - NOT chinese
                - NOT caucasian
                - NOT east_asian
                - NOT hispanic
                - NOT japanese
                - NOT middle_eastern
                - NOT native_american
                - NOT pacific_islander
                - NOT south_asian
                - NOT southeast_asian
                - NOT other
              type: string
            type: array
        - description: Show images with people of the specified gender
          example: both
          in: query
          name: people_gender
          schema:
            enum:
              - male
              - female
              - both
            type: string
        - description: Show images with the specified number of people
          example: 2
          in: query
          name: people_number
          schema:
            maximum: 4
            minimum: 0
            type: integer
        - description: Raise or lower search result rankings based on the result's relevance to a specified region; you can provide a country code or an IP address from which the API infers a country
          example: US
          in: query
          name: region
          schema:
            anyOf:
              - format: country-code-2
                type: string
              - format: ipv4
                type: string
        - description: Enable or disable safe search
          in: query
          name: safe
          schema:
            default: true
            type: boolean
        - description: Sort by
          in: query
          name: sort
          schema:
            default: popular
            enum:
              - newest
              - popular
              - relevance
              - random
            type: string
        - description: Spellcheck the search query and return results on suggested spellings
          in: query
          name: spellcheck_query
          schema:
            default: true
            type: boolean
        - description: Amount of detail to render in the response
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
        - deprecated: true
          description: (Deprecated; use width_from and width_to instead) Show images with the specified width
          in: query
          name: width
          schema:
            type: integer
        - description: Show images with the specified width or larger, in pixels
          example: 1920
          in: query
          name: width_from
          schema:
            type: integer
        - description: Show images with the specified width or smaller, in pixels
          example: 1920
          in: query
          name: width_to
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/BulkImageSearchRequest/example"
            schema:
              $ref: "#/components/schemas/BulkImageSearchRequest"
        description: List of queries to request results for and filters to apply per query; these values override the defaults in the query parameters
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/BulkImageSearchResults/example"
              schema:
                $ref: "#/components/schemas/BulkImageSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: Run multiple image searches
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |
            DATA='[
              {
                "query": "cat",
                "license": ["editorial"],
                "sort": "popular"
              },
              {
                "query": "dog",
                "orientation": "horizontal"
              }
            ]'

            curl -X POST "https://api.shutterstock.com/v2/bulk_search/images" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -H 'Content-Type: application/json' \
              -d "$DATA"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const bulkSearchApi = new sstk.BulkSearchApi();

            const body = [
              {
                "query": "cat",
                "license": ["editorial"],
                "sort": "popular"
              },
              {
                "query": "dog",
                "orientation": "horizontal"
              }
            ];

            bulkSearchApi.bulkSearchImages(body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const searchBody = {
              "body": [
                {
                  "query": "cat",
                  "license": ["editorial"],
                  "sort": "popular"
                },
                {
                  "query": "dog",
                  "orientation": "horizontal"
                }
              ]
            };

            sstk.bulkSearch.bulkSearchImages(searchBody)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { BulkSearchApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const searchBody: BulkSearchApiMethodsParams["bulkSearchImages"] = {
              "body": [
                {
                  "query": "cat",
                  "license": ["editorial"],
                  "sort": "popular"
                },
                {
                  "query": "dog",
                  "orientation": "horizontal"
                }
              ]
            };

            sstk.bulkSearch.bulkSearchImages(searchBody)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $body = [
              [
                "query" => "cat",
                "license" => ["editorial"],
                "sort" => "popular"
              ],
              [
                "query" => "dog",
                "orientation" => "horizontal"
              ]
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/bulk_search/images",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '[
              {
                "query": "cat",
                "license": ["editorial"],
                "sort": "popular"
              },
              {
                "query": "dog",
                "orientation": "horizontal"
              }
            ]' > data.json

            shutterstock bulk-search bulk-search-images data.json
  /v2/catalog/collections:
    get:
      description: This endpoint returns a list of catalog collections.
      operationId: getCollections
      parameters:
        - description: Page number
          example: 1
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          example: 20
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 50
            minimum: 2
            type: integer
        - description: Sort by
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
        - description: Set to true to omit collections that you own and return only collections  that are shared with you
          in: query
          name: shared
          schema:
            default: false
            type: boolean
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CatalogCollectionDataList/example"
              schema:
                $ref: "#/components/schemas/CatalogCollectionDataList"
          description: OK
        "400":
          description: Invalid status value
      security:
        - customer_accessCode:
            - collections.view
      summary: List catalog collections
      tags:
        - catalog
    post:
      description: This endpoint creates a catalog collection and optionally adds assets. To add assets to the collection later, use `PATCH /v2/catalog/collections/{collection_id}/items`.
      operationId: createCollection
      requestBody:
        content:
          application/json:
            examples:
              default:
                description: Create Collection Request
                value:
                  $ref: "#/components/schemas/CreateCatalogCollection/example"
            schema:
              $ref: "#/components/schemas/CreateCatalogCollection"
        description: Create a catalog collection and, optionally, add items.
        required: true
      responses:
        "201":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CatalogCollection/example"
              schema:
                $ref: "#/components/schemas/CatalogCollection"
          description: OK
      security:
        - customer_accessCode:
            - collections.view
            - collections.edit
      summary: Create catalog collections
      tags:
        - catalog
  "/v2/catalog/collections/{collection_id}":
    delete:
      description: This endpoint deletes a catalog collection. It does not remove the assets from the user's account's catalog.
      operationId: deleteCollection
      parameters:
        - description: The ID of the collection to delete
          example: "126351028"
          in: path
          name: collection_id
          required: true
          schema:
            type: string
      responses:
        "204":
          description: OK
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Delete catalog collections
      tags:
        - catalog
    patch:
      description: This endpoint updates the metadata of a catalog collection.
      operationId: updateCollection
      parameters:
        - description: ID of collection that needs to be modified
          example: "126351028"
          in: path
          name: collection_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                description: Collection Metadata
                value:
                  $ref: "#/components/schemas/UpdateCatalogCollection/example"
            schema:
              $ref: "#/components/schemas/UpdateCatalogCollection"
        description: Collections Metadata to update
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CatalogCollection/example"
              schema:
                $ref: "#/components/schemas/CatalogCollection"
          description: OK
      security:
        - customer_accessCode:
            - collections.view
            - collections.edit
      summary: Update collection metadata
      tags:
        - catalog
      x-code-samples:
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock, { UpdateCatalogCollectionVisibilityEnum } from "shutterstock-api";
            import type { CatalogApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const body: CatalogApiMethodsParams["updateCollection"] = {
              "collection_id": "126351028",
              "body": {
                "name": "My Collection",
                "visibility": UpdateCatalogCollectionVisibilityEnum.Private,
                "cover_asset": {
                  "id": "123"
                }
              }
            };

            sstk.catalog.updateCollection(body)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
  "/v2/catalog/collections/{collection_id}/items":
    delete:
      description: This endpoint removes assets from a catalog collection. It does not remove the assets from the user's account's catalog.
      operationId: deleteFromCollection
      parameters:
        - description: The ID of the collection to remove assets from
          example: "126351028"
          in: path
          name: collection_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                description: Remove collection items
                value:
                  $ref: "#/components/schemas/RemoveCatalogCollectionItems/example"
            schema:
              $ref: "#/components/schemas/RemoveCatalogCollectionItems"
        description: Items to remove from the collection
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CatalogCollection/example"
              schema:
                $ref: "#/components/schemas/CatalogCollection"
          description: OK
      security:
        - customer_accessCode:
            - collections.view
            - collections.edit
      summary: Remove items from catalog collection
      tags:
        - catalog
    post:
      description: This endpoint adds assets to a catalog collection. It also automatically adds the assets to the user's account's catalog.
      operationId: addToCollection
      parameters:
        - description: The ID of the collection to add assets to
          example: "126351028"
          in: path
          name: collection_id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                description: Add collection items
                value:
                  $ref: "#/components/schemas/CreateCatalogCollectionItems/example"
            schema:
              $ref: "#/components/schemas/CreateCatalogCollectionItems"
        description: Collection item attributes to add to collection
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CatalogCollection/example"
              schema:
                $ref: "#/components/schemas/CatalogCollection"
          description: OK
      security:
        - customer_accessCode:
            - collections.view
            - collections.edit
      summary: Add items to catalog collections
      tags:
        - catalog
  /v2/catalog/search:
    get:
      description: This endpoint searches for assets in the account's catalog. If you specify more than one search parameter, the API uses an AND condition. Array parameters can be specified multiple times; in this case, the API uses an AND or an OR condition with those values, depending on the parameter. You can also filter search terms out in the `query` parameter by prefixing the term with NOT.
      operationId: searchCatalog
      parameters:
        - description: Sort by
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
        - description: Page number
          example: 1
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          example: 50
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 500
            minimum: 0
            type: integer
        - description: One or more search terms separated by spaces
          example: dogs on the beach
          in: query
          name: query
          schema:
            type: string
        - description: Filter by collection id
          in: query
          name: collection_id
          schema:
            example:
              - "123456"
              - "456789"
              - "13579"
            items:
              type: string
            maxItems: 50
            type: array
        - description: Filter by asset type
          in: query
          name: asset_type
          schema:
            example:
              - image
              - editorial-image
            items:
              enum:
                - image
                - video
                - audio
                - elements
                - editorial-image
                - editorial-video
              type: string
            type: array
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CatalogCollectionItemDataList/example"
              schema:
                $ref: "#/components/schemas/CatalogCollectionItemDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - collections.view
      summary: Search catalogs for assets
      tags:
        - catalog
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/catalog/search" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "page=1" \
              --data-urlencode "per_page=50" \
              --data-urlencode "collection_id=126351028" \
              --data-urlencode "collection_id=126371055" \
              --data-urlencode "query=dogs on the beach"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const catalogApi = new sstk.CatalogApi();

            const queryParams = {
              "page": 1,
              "per_page": 50,
              "collection_id": ["126351028", "126371055"],
              "query": "dogs on the beach",
            };

            catalogApi.searchCatalog(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "page": 1,
              "per_page": 50,
              "collection_id": ["126351028", "126371055"],
              "query": "dogs on the beach",
            };

            sstk.catalog.searchCatalog(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { CatalogApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: CatalogApiMethodsParams["searchCatalog"] = {
              "page": 1,
              "per_page": 50,
              "collection_id": ["126351028", "126371055"],
              "query": "dogs on the beach",
            };

            sstk.catalog.searchCatalog(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "page" => 1,
              "per_page" => 50,
              "collection_id" => ["126351028", "126371055"],
              "query" => "dogs on the beach"
            ];

            $encodedQueryFields = preg_replace(
              "/\%5B\d+\%5D/",
              "",
              http_build_query($queryFields),
            );

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/catalog/search?$encodedQueryFields",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock catalog search-catalog \
              --page 1 \
              --per_page 50 \
              --collection_id 126351028 \
              --collection_id 126371055 \
              --query "dogs on the beach"
  /v2/contributors:
    get:
      description: This endpoint lists information about one or more contributors, including contributor type, equipment they use and other attributes.
      operationId: getContributorList
      parameters:
        - description: One or more contributor IDs
          example:
            - 800506
            - 1653538
          in: query
          name: id
          required: true
          schema:
            items:
              type: string
            type: array
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/ContributorProfileDataList/example"
              schema:
                $ref: "#/components/schemas/ContributorProfileDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode: []
        - basic: []
      summary: Get details about multiple contributors
      tags:
        - contributors
  "/v2/contributors/{contributor_id}":
    get:
      description: This endpoint shows information about a single contributor, including contributor type, equipment they use, and other attributes.
      operationId: getContributor
      parameters:
        - description: Contributor ID
          example: 1653538
          in: path
          name: contributor_id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/ContributorProfile/example"
              schema:
                $ref: "#/components/schemas/ContributorProfile"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode: []
        - basic: []
      summary: Get details about a single contributor
      tags:
        - contributors
  "/v2/contributors/{contributor_id}/collections":
    get:
      description: This endpoint lists collections based on contributor ID.
      operationId: getContributorCollectionsList
      parameters:
        - description: Contributor ID
          example: 800506
          in: path
          name: contributor_id
          required: true
          schema:
            type: string
        - description: Sort order
          in: query
          name: sort
          schema:
            enum:
              - newest
              - last_updated
              - item_count
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CollectionDataList/example"
              schema:
                $ref: "#/components/schemas/CollectionDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Contributor not found
      security:
        - customer_accessCode: []
        - basic: []
      summary: List contributors' collections
      tags:
        - contributors
  "/v2/contributors/{contributor_id}/collections/{id}":
    get:
      description: This endpoint gets more detailed information about a contributor's collection, including its cover image, timestamps for its creation, and most recent update. To get the items in collections, use GET /v2/contributors/{contributor_id}/collections/{id}/items.
      operationId: getContributorCollections
      parameters:
        - description: Contributor ID
          example: 800506
          in: path
          name: contributor_id
          required: true
          schema:
            type: string
        - description: Collection ID that belongs to the contributor
          example: 1991678
          in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/Collection/example"
              schema:
                $ref: "#/components/schemas/Collection"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Set not found
      security:
        - customer_accessCode: []
        - basic: []
      summary: Get details about contributors' collections
      tags:
        - contributors
  "/v2/contributors/{contributor_id}/collections/{id}/items":
    get:
      description: This endpoint lists the IDs of items in a contributor's collection and the date that each was added.
      operationId: getContributorCollectionItems
      parameters:
        - description: Contributor ID
          example: 800506
          in: path
          name: contributor_id
          required: true
          schema:
            type: string
        - description: Collection ID that belongs to the contributor
          example: 1991678
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 50
            minimum: 1
            type: integer
        - description: Sort order
          in: query
          name: sort
          schema:
            enum:
              - newest
              - oldest
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    data:
                      - added_time: 2014-05-01T05:49:46-04:00
                        id: "168592952"
                        media_type: image
                      - added_time: 2014-05-01T05:49:59-04:00
                        id: "88269310"
                        media_type: image
                      - added_time: 2014-05-01T05:50:21-04:00
                        id: "94373977"
                        media_type: image
              schema:
                $ref: "#/components/schemas/CollectionItemDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Set not found
      security:
        - customer_accessCode: []
        - basic: []
      summary: Get the items in contributors' collections
      tags:
        - contributors
  /v2/cv/images:
    post:
      description: This endpoint uploads an image for reverse image or video search. Images must be in JPEG or PNG format. To get the search results, pass the upload ID that this endpoint returns to the GET /v2/cv/similar/images or GET /v2/cv/similar/videos endpoints. Contact us for access to this endpoint.
      operationId: uploadImage
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/ImageCreateRequest/example"
            schema:
              $ref: "#/components/schemas/ImageCreateRequest"
        description: A Base 64 encoded jpeg or png; images can be no larger than 10mb and can be no larger than 10,000 pixels in width or height
        required: true
      responses:
        "201":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/ComputerVisionImageCreateResponse/example"
              schema:
                $ref: "#/components/schemas/ComputerVisionImageCreateResponse"
          description: Created
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "413":
          description: Payload Too Large
        "415":
          description: Unsupported Media Type
      security:
        - basic: []
        - customer_accessCode: []
      summary: Upload images
      tags:
        - computer_vision
      x-code-samples:
        - lang: shell
          source: |
            curl -X POST "https://api.shutterstock.com/v2/cv/images" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -H "Content-Type: application/json" \
              -d "{\"base64_image\":\"`base64 myImage.jpg | tr -d '\n'`\"}"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");
            const fs = require("fs");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const computerVisionApi = new sstk.ComputerVisionApi();

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const body = new sstk.ImageCreateRequest(base64File);

            computerVisionApi.uploadImage(body)
              .then((data) => {
                console.log(data.upload_id);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");
            const fs = require("fs");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const uploadImageBody = {
              "body": {
                "base64_image": base64File,
              },
            };

            sstk.computerVision.uploadImage(uploadImageBody)
              .then(({ data }) => {
                console.log(data.upload_id);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ComputerVisionApiMethodsParams } from "shutterstock-api";

            import * as fs from "fs";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const uploadImageBody: ComputerVisionApiMethodsParams["uploadImage"] = {
              "body": {
                "base64_image": base64File,
              },
            };

            sstk.computerVision.uploadImage(uploadImageBody)
              .then(({ data }) => {
                console.log(data.upload_id);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $imageData = file_get_contents("myImage.jpg");
            $encodedImageData = base64_encode($imageData);

            $uploadBody = [
              "base64_image" => $encodedImageData
            ];
            $uploadEncodedBody = json_encode($uploadBody);

            $uploadOptions = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/cv/images",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $uploadEncodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              CURLOPT_RETURNTRANSFER => 1
            ];

            $handle = curl_init();
            curl_setopt_array($handle, $uploadOptions);
            $uploadResponse = curl_exec($handle);
            curl_close($handle);

            $uploadDecodedResponse = json_decode($uploadResponse);
            print_r($uploadDecodedResponse->upload_id);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo "{\"base64_image\":\"`base64 myImage.jpg  | tr -d '\n'`\"}" > data.json

            shutterstock cv upload-image data.json
  /v2/cv/keywords:
    get:
      description: This endpoint returns a list of suggested keywords for a media item that you specify or upload.
      operationId: getKeywords
      parameters:
        - description: The asset ID or upload ID to suggest keywords for
          example: U6ba16262e3bc2db470b8e3cfa8aaab25
          in: query
          name: asset_id
          required: true
          schema:
            oneOf:
              - format: asset-upload-id
                type: string
              - format: asset-id
                type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/KeywordDataList/example"
              schema:
                $ref: "#/components/schemas/KeywordDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "415":
          description: Unsupported Media Type
      security:
        - basic: []
        - customer_accessCode: []
      summary: List suggested keywords
      tags:
        - computer_vision
      x-code-samples:
        - lang: shell
          source: |-
            RESPONSE=$(curl -X POST "https://api.shutterstock.com/v2/cv/images" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -H "Content-Type: application/json" \
              -d "{\"base64_image\":\"`base64 myImage.jpg | tr -d '\n'`\"}")

            echo "The next step requires the jq program."

            UPLOAD_ID=$(jq -r .upload_id <<< $RESPONSE)

            curl -X GET "https://api.shutterstock.com/v2/cv/keywords" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "asset_id=$UPLOAD_ID"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");
            const fs = require("fs");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const computerVisionApi = new sstk.ComputerVisionApi();

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const body = new sstk.ImageCreateRequest(base64File);

            computerVisionApi.uploadImage(body)
              .then((data) => {
                console.log(data.upload_id);
                return computerVisionApi.getKeywords(data.upload_id);
              })
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");
            const fs = require("fs");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const uploadImageBody = {
              "body": {
                "base64_image": base64File,
              },
            };

            sstk.computerVision.uploadImage(uploadImageBody)
              .then(({ data }) => {
                console.log(data.upload_id);
                const queryParams = {
                  "asset_id": data.upload_id,
                };
                return sstk.computerVision.getKeywords(queryParams);
              })
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ComputerVisionApiMethodsParams } from "shutterstock-api";

            import * as fs from "fs";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const uploadImageBody: ComputerVisionApiMethodsParams["uploadImage"] = {
              "body": {
                "base64_image": base64File,
              },
            };

            sstk.computerVision.uploadImage(uploadImageBody)
              .then(({ data }) => {
                console.log(data.upload_id);
                const queryParams: ComputerVisionApiMethodsParams["getKeywords"] = {
                  "asset_id": data.upload_id,
                };
                return sstk.computerVision.getKeywords(queryParams);
              })
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $imageData = file_get_contents("myImage.jpg");
            $encodedImageData = base64_encode($imageData);

            $uploadBody = [
              "base64_image" => $encodedImageData
            ];
            $uploadEncodedBody = json_encode($uploadBody);

            $uploadOptions = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/cv/images",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $uploadEncodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              CURLOPT_RETURNTRANSFER => 1
            ];

            $handle = curl_init();
            curl_setopt_array($handle, $uploadOptions);
            $uploadResponse = curl_exec($handle);
            curl_close($handle);

            $uploadDecodedResponse = json_decode($uploadResponse);
            print_r($uploadDecodedResponse->upload_id);

            $keywordsQuery = [
              "asset_id" => $uploadDecodedResponse->upload_id,
            ];

            $keywordsOptions = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/cv/keywords?" . http_build_query($keywordsQuery),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              CURLOPT_RETURNTRANSFER => 1
            ];

            $handle = curl_init();
            curl_setopt_array($handle, $keywordsOptions);
            $keywordsResponse = curl_exec($handle);
            curl_close($handle);

            print_r($keywordsResponse);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo "{\"base64_image\":\"`base64 myImage.jpg  | tr -d '\n'`\"}" > data.json

            shutterstock cv upload-image data.json > response.json

            echo "The next step requires the jq program."

            UPLOAD_ID=$(jq -r .upload_id response.json)

            shutterstock cv get-keywords \
              --asset-id $UPLOAD_ID
  /v2/cv/similar/images:
    get:
      description: This endpoint returns images that are visually similar to an image that you specify or upload.
      operationId: getSimilarImages
      parameters:
        - description: The asset ID or upload ID to find similar images for
          example: U6ba16262e3bc2db470b8e3cfa8aaab25
          in: query
          name: asset_id
          required: true
          schema:
            type: string
        - description: Show only images with the specified license
          in: query
          name: license
          schema:
            default:
              - commercial
            items:
              enum:
                - commercial
                - editorial
              type: string
            type: array
        - description: Enable or disable safe search
          in: query
          name: safe
          schema:
            default: true
            type: boolean
        - description: Language for the keywords and categories in the response
          example: es
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 500
            minimum: 1
            type: integer
        - description: Amount of detail to render in the response
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/ImageSearchResults/example"
              schema:
                $ref: "#/components/schemas/ImageSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List similar images
      tags:
        - computer_vision
      x-code-samples:
        - lang: shell
          source: |
            RESPONSE=$(curl -X POST "https://api.shutterstock.com/v2/cv/images" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -H "Content-Type: application/json" \
              -d "{\"base64_image\":\"`base64 myImage.jpg | tr -d '\n'`\"}")

            echo "The next step requires the jq program."

            UPLOAD_ID=$(jq -r .upload_id <<< $RESPONSE)

            curl -X GET "https://api.shutterstock.com/v2/cv/similar/images" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "asset_id=$UPLOAD_ID"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");
            const fs = require("fs");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const computerVisionApi = new sstk.ComputerVisionApi();

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const body = new sstk.ImageCreateRequest(base64File);

            computerVisionApi.uploadImage(body)
              .then((data) => {
                console.log(data.upload_id);
                return computerVisionApi.getSimilarImages(data.upload_id);
              })
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");
            const fs = require("fs");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const uploadImageBody = {
              "body": {
                "base64_image": base64File,
              },
            };

            sstk.computerVision.uploadImage(uploadImageBody)
              .then(({ data }) => {
                console.log(data.upload_id);

                const queryParams = {
                  "asset_id": data.upload_id,
                  "page": 1,
                  "per_page": 20,
                  "view": "minimal",
                };

                return sstk.computerVision.getSimilarImages(queryParams);
              })
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ComputerVisionApiMethodsParams } from "shutterstock-api";

            import * as fs from "fs";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const uploadImageBody: ComputerVisionApiMethodsParams["uploadImage"] = {
              "body": {
                "base64_image": base64File,
              },
            };

            sstk.computerVision.uploadImage(uploadImageBody)
              .then(({ data }) => {
                console.log(data.upload_id);

                const queryParams: ComputerVisionApiMethodsParams["getSimilarImages"] = {
                  "asset_id": data.upload_id,
                  "page": 1,
                  "per_page": 20,
                  "view": "minimal",
                };

                return sstk.computerVision.getSimilarImages(queryParams);
              })
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $imageData = file_get_contents("myImage.jpg");
            $encodedImageData = base64_encode($imageData);

            $uploadBody = [
              "base64_image" => $encodedImageData
            ];
            $uploadEncodedBody = json_encode($uploadBody);

            $uploadOptions = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/cv/images",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $uploadEncodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              CURLOPT_RETURNTRANSFER => 1
            ];

            $handle = curl_init();
            curl_setopt_array($handle, $uploadOptions);
            $uploadResponse = curl_exec($handle);
            curl_close($handle);

            $uploadDecodedResponse = json_decode($uploadResponse);
            print_r($uploadDecodedResponse->upload_id);

            $similarQuery = [
              "asset_type" => "images",
              "asset_id" => $uploadDecodedResponse->upload_id,
            ];

            $similarOptions = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/cv/similar/images?" . http_build_query($similarQuery),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              CURLOPT_RETURNTRANSFER => 1
            ];

            $handle = curl_init();
            curl_setopt_array($handle, $similarOptions);
            $similarResponse = curl_exec($handle);
            curl_close($handle);

            print_r($similarResponse);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo "{\"base64_image\":\"`base64 myImage.jpg  | tr -d '\n'`\"}" > data.json

            shutterstock cv upload-image data.json > response.json

            echo "The next step requires the jq program."

            UPLOAD_ID=$(jq -r .upload_id response.json)

            shutterstock cv get-similar-images \
              --asset-id $UPLOAD_ID
  /v2/cv/similar/videos:
    get:
      description: This endpoint returns videos that are visually similar to an image that you specify or upload.
      operationId: getSimilarVideos
      parameters:
        - description: The asset ID or upload ID to find similar videos for
          example: U6ba16262e3bc2db470b8e3cfa8aaab25
          in: query
          name: asset_id
          required: true
          schema:
            type: string
        - description: Show only videos with the specified license
          in: query
          name: license
          schema:
            default:
              - commercial
            items:
              enum:
                - commercial
                - editorial
              type: string
            type: array
        - description: Enable or disable safe search
          in: query
          name: safe
          schema:
            default: true
            type: boolean
        - description: Language for the keywords and categories in the response
          example: es
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 500
            minimum: 1
            type: integer
        - description: Amount of detail to render in the response
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/VideoSearchResults/example"
              schema:
                $ref: "#/components/schemas/VideoSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List similar videos
      tags:
        - computer_vision
      x-code-samples:
        - lang: shell
          source: |
            RESPONSE=$(curl -X POST "https://api.shutterstock.com/v2/cv/images" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -H "Content-Type: application/json" \
              -d "{\"base64_image\":\"`base64 myImage.jpg | tr -d '\n'`\"}")

            echo "The next step requires the jq program."

            UPLOAD_ID=$(jq -r .upload_id <<< $RESPONSE)

            curl -X GET "https://api.shutterstock.com/v2/cv/similar/videos" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "asset_id=$UPLOAD_ID"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");
            const fs = require("fs");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const computerVisionApi = new sstk.ComputerVisionApi();

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const body = new sstk.ImageCreateRequest(base64File);

            computerVisionApi.uploadImage(body)
              .then((data) => {
                console.log(data.upload_id);
                return computerVisionApi.getSimilarVideos(data.upload_id);
              })
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");
            const fs = require("fs");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const uploadImageBody = {
              "body": {
                "base64_image": base64File,
              },
            };

            sstk.computerVision.uploadImage(uploadImageBody)
              .then(({ data }) => {
                console.log(data.upload_id);

                const queryParams = {
                  "asset_id": data.upload_id,
                  "page": 1,
                  "per_page": 20,
                  "view": "minimal",
                };

                return sstk.computerVision.getSimilarVideos(queryParams);
              })
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ComputerVisionApiMethodsParams } from "shutterstock-api";

            import * as fs from "fs";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const uploadImageBody: ComputerVisionApiMethodsParams["uploadImage"] = {
              "body": {
                "base64_image": base64File,
              },
            };

            sstk.computerVision.uploadImage(uploadImageBody)
              .then(({ data }) => {
                console.log(data.upload_id);

                const queryParams: ComputerVisionApiMethodsParams["getSimilarVideos"] = {
                  "asset_id": data.upload_id,
                  "page": 1,
                  "per_page": 20,
                  "view": "minimal",
                };

                return sstk.computerVision.getSimilarVideos(queryParams);
              })
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $imageData = file_get_contents("myImage.jpg");
            $encodedImageData = base64_encode($imageData);

            $uploadBody = [
              "base64_image" => $encodedImageData
            ];
            $uploadEncodedBody = json_encode($uploadBody);

            $uploadOptions = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/cv/images",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $uploadEncodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              CURLOPT_RETURNTRANSFER => 1
            ];

            $handle = curl_init();
            curl_setopt_array($handle, $uploadOptions);
            $uploadResponse = curl_exec($handle);
            curl_close($handle);

            $uploadDecodedResponse = json_decode($uploadResponse);
            print_r($uploadDecodedResponse->upload_id);

            $similarQuery = [
              "asset_type" => "images",
              "asset_id" => $uploadDecodedResponse->upload_id,
            ];

            $similarOptions = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/cv/similar/videos?" . http_build_query($similarQuery),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              CURLOPT_RETURNTRANSFER => 1
            ];

            $handle = curl_init();
            curl_setopt_array($handle, $similarOptions);
            $similarResponse = curl_exec($handle);
            curl_close($handle);

            print_r($similarResponse);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo "{\"base64_image\":\"`base64 myImage.jpg  | tr -d '\n'`\"}" > data.json

            shutterstock cv upload-image data.json > response.json

            echo "The next step requires the jq program."

            UPLOAD_ID=$(jq -r .upload_id response.json)

            shutterstock cv get-similar-videos \
              --asset-id $UPLOAD_ID
  /v2/editorial/categories:
    get:
      deprecated: true
      description: Deprecated; use `GET /v2/editorial/images/categories` instead. This endpoint lists the categories that editorial images can belong to, which are separate from the categories that other types of assets can belong to.
      operationId: getEditorialCategories
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialCategoryResults/example"
              schema:
                $ref: "#/components/schemas/EditorialCategoryResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: (Deprecated) List editorial categories
      tags:
        - editorial_images
  /v2/editorial/images/categories:
    get:
      description: This endpoint lists the categories that editorial images can belong to, which are separate from the categories that other types of assets can belong to.
      operationId: listEditorialImageCategories
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialImageCategoryResults/example"
              schema:
                $ref: "#/components/schemas/EditorialImageCategoryResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List editorial categories
      tags:
        - editorial_images
  /v2/editorial/images/licenses:
    get:
      description: This endpoint lists existing editorial image licenses.
      operationId: getEditorialImageLicenseList
      parameters:
        - description: Show licenses for the specified editorial image ID
          example: "12345678"
          in: query
          name: image_id
          schema:
            type: string
        - description: Show editorial images that are available with the specified license name
          example: premier_editorial_all_digital
          in: query
          name: license
          schema:
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 200
            minimum: 0
            type: integer
        - description: Sort order
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
        - description: Filter licenses by username of licensee
          example: aUniqueUsername
          in: query
          name: username
          schema:
            type: string
        - description: Show licenses created on or after the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: start_date
          schema:
            format: date-time
            type: string
        - description: Show licenses created before the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: end_date
          schema:
            format: date-time
            type: string
        - description: Filter licenses by download availability
          in: query
          name: download_availability
          schema:
            default: all
            enum:
              - all
              - downloadable
              - non_downloadable
            type: string
        - description: Set to true to see license history for all members of your team.
          in: query
          name: team_history
          schema:
            default: false
            type: boolean
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/DownloadHistoryDataList/example"
              schema:
                $ref: "#/components/schemas/DownloadHistoryDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.view
      summary: List editorial image licenses
      tags:
        - editorial_images
      x-code-samples:
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock from "shutterstock-api";
            import type { EditorialImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams: EditorialImagesApiMethodsParams["getEditorialImageLicenseList"] = {
              "image_id": "12345678",
              "license": "premier_editorial_all_digital",
              "username": "aUniqueUsername",
              "start_date": lastWeek,
              "end_date": today,
            };

            sstk.editorialImages.getEditorialImageLicenseList(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
    post:
      description: This endpoint gets licenses for one or more editorial images. You must specify the country and one or more editorial images to license. The download links in the response are valid for 8 hours.
      operationId: licenseEditorialImages
      requestBody:
        content:
          application/json:
            example:
              $ref: "#/components/schemas/LicenseEditorialContentRequest/example"
            schema:
              $ref: "#/components/schemas/LicenseEditorialContentRequest"
        description: License editorial content
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/LicenseEditorialContentResults/example"
              schema:
                $ref: "#/components/schemas/LicenseEditorialContentResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - customer_accessCode:
            - licenses.create
            - purchases.view
      summary: License editorial content
      tags:
        - editorial_images
      x-code-samples:
        - lang: shell
          source: |
            DATA='{
              "editorial": [
                {
                  "editorial_id": "8594090h",
                  "license": "premier_editorial_comp"
                }
              ],
              "country": "USA"
            }'

            curl -X POST "https://api.shutterstock.com/v2/editorial/images/licenses" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const editorialApi = new sstk.EditorialApi();

            const body = {
              "editorial": [
                {
                  "editorial_id": "8594090h",
                  "license": "premier_editorial_comp"
                }
              ],
              "country": "USA"
            };

            editorialApi.licenseEditorialImage(body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams = {
              "body": {
                "editorial": [
                  {
                    "editorial_id": "8594090h",
                    "license": "premier_editorial_comp",
                  },
                ],
                "country": "USA",
              },
            };

            sstk.editorialImages.licenseEditorialImage(licenseParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { EditorialImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams: EditorialImagesApiMethodsParams["licenseEditorialImages"] = {
              "body": {
                "editorial": [
                  {
                    "editorial_id": "8594090h",
                    "license": "premier_editorial_comp",
                  },
                ],
                "country": "USA",
              },
            };

            sstk.editorialImages.licenseEditorialImage(licenseParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $body = [
              "editorial" => [
                [
                  "editorial_id" => "8594090h",
                  "license" => "premier_editorial_comp"
                ]
              ],
              "country" => "USA"
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/editorial/images/licenses",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "editorial": [
                {
                  "editorial_id": "8594090h",
                  "license": "premier_editorial_comp"
                }
              ],
              "country": "USA"
            }' > data.json

            shutterstock editorial license-editorial-images data.json
  /v2/editorial/images/livefeeds:
    get:
      operationId: getEditorialImageLivefeedList
      parameters:
        - description: Returns only livefeeds that are available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 50
            minimum: 1
            type: integer
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialImageLivefeedList/example"
              schema:
                $ref: "#/components/schemas/EditorialImageLivefeedList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get editorial livefeed list
      tags:
        - editorial_images
  "/v2/editorial/images/livefeeds/{id}":
    get:
      operationId: getEditorialImageLivefeed
      parameters:
        - description: Editorial livefeed ID; must be an URI encoded string
          example: 2018%2F10%2F15%2FWomen%20of%20the%20Year%20Lunch%20%26%20Awards%2C%20London
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Returns only if the livefeed is available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialImageLivefeed/example"
              schema:
                $ref: "#/components/schemas/EditorialImageLivefeed"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get editorial livefeed
      tags:
        - editorial_images
  "/v2/editorial/images/livefeeds/{id}/items":
    get:
      operationId: getEditorialImageLivefeedItems
      parameters:
        - description: Editorial livefeed ID; must be an URI encoded string
          example: 2018%2F10%2F15%2FWomen%20of%20the%20Year%20Lunch%20%26%20Awards%2C%20London
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Returns only if the livefeed items are available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialImageContentDataList/example"
              schema:
                $ref: "#/components/schemas/EditorialImageContentDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get editorial livefeed items
      tags:
        - editorial_images
  /v2/editorial/images/search:
    get:
      description: This endpoint searches for editorial images. If you specify more than one search parameter, the API uses an AND condition. For example, if you set the `category` parameter to "Alone,Performing" and also specify a `query` parameter, the results include only images that match the query and are in both the Alone and Performing categories. You can also filter search terms out in the `query` parameter by prefixing the term with NOT.
      operationId: searchEditorialImages
      parameters:
        - description: One or more search terms separated by spaces
          example: The Academy Awards
          in: query
          name: query
          schema:
            type: string
        - description: Sort by
          in: query
          name: sort
          schema:
            default: relevant
            enum:
              - relevant
              - newest
              - oldest
            type: string
        - description: Show editorial content with each of the specified editorial categories; specify category names in a comma-separated list
          example: Alone,Performing
          in: query
          name: category
          schema:
            type: string
        - description: Show only editorial content that is available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
        - description: Show only editorial content from certain suppliers
          in: query
          name: supplier_code
          schema:
            items:
              type: string
            type: array
        - description: Show only editorial content generated on or after a specific date
          example: 2020-05-29
          in: query
          name: date_start
          schema:
            format: date
            type: string
        - description: Show only editorial content generated on or before a specific date
          example: 2021-05-29
          in: query
          name: date_end
          schema:
            format: date
            type: string
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 50
            minimum: 1
            type: integer
        - description: The cursor of the page with which to start fetching results; this cursor is returned from previous requests
          example: eyJ2IjoxLCJzIjoxfQ==
          in: query
          name: cursor
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialSearchResults/example"
              schema:
                $ref: "#/components/schemas/EditorialSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - basic: []
        - customer_accessCode: []
      summary: Search editorial images
      tags:
        - editorial_images
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/editorial/images/search" \
              -H "Accept: application/json" \
              -G \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              --data-urlencode "query=musician" \
              --data-urlencode "country=USA" \
              --data-urlencode "category=Alone,Performing" \
              --data-urlencode "sort=newest" \
              --data-urlencode "date_start=2018-10-23"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const editorialApi = new sstk.EditorialApi();

            const queryParams = {
              "query": "musician",
              "country": "USA",
              "category": "Alone,Performing",
              "sort": "newest",
              "date_start": "2018-10-23"
            };

            const country = "USA";

            editorialApi.editorialImagesSearch(country, queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "query": "football",
              "country": "USA",
              "sort": "newest",
              "date_start": "2018-10-23",
            };

            sstk.editorialImages.searchEditorial(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { EditorialImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: EditorialImagesApiMethodsParams["searchEditorial"] = {
              "query": "football",
              "country": "USA",
              "sort": "newest",
              "date_start": "2018-10-23",
            };

            sstk.editorialImages.searchEditorial(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "query" => "musician",
              "country" => "USA",
              "category" => "Alone,Performing",
              "date_start" => "2018-10-23",
              "sort" => "newest"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/editorial/images/search?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock editorial search-editorial-images \
              --country USA \
              --category Alone,Performing \
              --sort newest \
              --query musician \
              --date-start 2018-10-23
  /v2/editorial/images/updated:
    get:
      description: This endpoint lists editorial images that have been updated in the specified time period to update content management systems (CMS) or digital asset management (DAM) systems. In most cases, use the date_updated_start and date_updated_end parameters to specify a range updates based on when the updates happened. You can also use the date_taken_start and date_taken_end parameters to specify a range of updates based on when the image was taken.
      operationId: getUpdatedEditorialImages
      parameters:
        - description: Specify `addition` to return only images that were added or `edit` to return only images that were edited or deleted
          example: edit
          in: query
          name: type
          required: true
          schema:
            enum:
              - edit
              - addition
            type: string
        - description: Show images images added, edited, or deleted after the specified date. Acceptable range is 1970-01-01T00:00:01 to 2038-01-19T00:00:00.
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: date_updated_start
          required: true
          schema:
            format: date-time
            type: string
        - description: Show images images added, edited, or deleted before the specified date. Acceptable range is 1970-01-01T00:00:01 to 2038-01-19T00:00:00.
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: date_updated_end
          required: true
          schema:
            format: date-time
            type: string
        - description: Show images that were taken on or after the specified date; use this parameter if you want recently created images from the collection instead of updated older assets
          example: 2020-02-04
          in: query
          name: date_taken_start
          schema:
            format: date
            type: string
        - description: Show images that were taken before the specified date
          example: 2020-02-05
          in: query
          name: date_taken_end
          schema:
            format: date
            type: string
        - description: The cursor of the page with which to start fetching results; this cursor is returned from previous requests
          example: eyJ2IjoxLCJzIjoyfQ==
          in: query
          name: cursor
          schema:
            type: string
        - description: Sort by
          example: newest
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
        - description: Show only editorial content from certain suppliers
          example: ABC
          in: query
          name: supplier_code
          schema:
            items:
              maxLength: 5
              type: string
            type: array
        - description: Show only editorial content that is available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
        - description: Number of results per page
          example: 200
          in: query
          name: per_page
          schema:
            default: 500
            maximum: 500
            minimum: 100
            type: integer
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialUpdatedResults/example"
              schema:
                $ref: "#/components/schemas/EditorialUpdatedResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - basic: []
        - customer_accessCode: []
      summary: List updated content
      tags:
        - editorial_images
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/editorial/images/updated" \
              -H "Accept: application/json" \
              -G \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              --data-urlencode "type=edit" \
              --data-urlencode "country=USA" \
              --data-urlencode "date_updated_start=2020-02-02T13:00:00Z" \
              --data-urlencode "date_updated_end=2020-02-02T15:00:00Z"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const editorialApi = new sstk.EditorialApi();

            const type = "edit";
            const dateUpdatedStart = "2020-02-02T13:00:00Z";
            const dateUpdatedEnd = "2020-02-02T15:00:00Z";
            const country = "USA";

            editorialApi.getUpdatedImages(type, dateUpdatedStart, dateUpdatedEnd, country)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams = {
              "country": "USA",
              "date_updated_start": lastWeek,
              "date_updated_end": today,
              "type": "edit",
            };

            sstk.editorialImages.getUpdatedEditorialImages(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { EditorialImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams: EditorialImagesApiMethodsParams["getUpdatedEditorialImages"] = {
              "country": "USA",
              "date_updated_start": lastWeek,
              "date_updated_end": today,
              "type": "edit",
            };

            sstk.editorialImages.getUpdatedEditorialImages(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "type" => "edit",
              "country" => "USA",
              "date_updated_start" => "2020-02-02T13:00:00Z",
              "date_updated_end" => "2020-02-02T15:00:00Z",
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/editorial/images/updated?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock editorial get-updated-editorial-images \
              --type edit \
              --country USA \
              --date-updated-start "2020-02-02T13:00:00Z" \
              --date-updated-end "2020-02-02T15:00:00Z"
  "/v2/editorial/images/{id}":
    get:
      description: This endpoint shows information about an editorial image, including a URL to a preview image and the sizes that it is available in.
      operationId: getEditorialImage
      parameters:
        - description: Editorial ID
          example: 9926131a
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Returns only if the content is available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialContent/example"
              schema:
                $ref: "#/components/schemas/EditorialContent"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get editorial content details
      tags:
        - editorial_images
  /v2/editorial/licenses:
    post:
      deprecated: true
      description: Deprecated; use `POST /v2/editorial/images/licenses` instead to get licenses for one or more editorial images. You must specify the country and one or more editorial images to license. The download links in the response are valid for 8 hours.
      operationId: licenseEditorialImage
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/LicenseEditorialContentRequest/example"
            schema:
              $ref: "#/components/schemas/LicenseEditorialContentRequest"
        description: License editorial content
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    data:
                      - download:
                          url: https://s3-eu-west-1.amazonaws.com/api-downloads.rexfeatures.com/[random-characters].jpg?Expires=1524717323
                        editorial_id: "69656358"
              schema:
                $ref: "#/components/schemas/LicenseEditorialContentResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - customer_accessCode:
            - licenses.create
      summary: (Deprecated) License editorial content
      tags:
        - editorial_images
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "editorial": [
                {
                  "editorial_id": "8594090h",
                  "license": "premier_editorial_comp"
                }
              ],
              "country": "USA"
            }'

            curl -X POST "https://api.shutterstock.com/v2/editorial/licenses" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const editorialApi = new sstk.EditorialApi();

            const body = {
              "editorial": [
                {
                  "editorial_id": "8594090h",
                  "license": "premier_editorial_comp"
                }
              ],
              "country": "USA"
            };

            editorialApi.licenseEditorialImage(body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams = {
              "body": {
                "editorial": [
                  {
                    "editorial_id": "8594090h",
                    "license": "premier_editorial_comp",
                  },
                ],
                "country": "USA",
              },
            };

            sstk.editorialImages.licenseEditorialImage(licenseParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { EditorialImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams: EditorialImagesApiMethodsParams["licenseEditorialImage"] = {
              "body": {
                "editorial": [
                  {
                    "editorial_id": "8594090h",
                    "license": "premier_editorial_comp",
                  },
                ],
                "country": "USA",
              },
            };

            sstk.editorialImages.licenseEditorialImage(licenseParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $body = [
              "editorial" => [
                [
                  "editorial_id" => "8594090h",
                  "license" => "premier_editorial_comp"
                ]
              ],
              "country" => "USA"
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/editorial/licenses",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "editorial": [
                {
                  "editorial_id": "8594090h",
                  "license": "premier_editorial_comp"
                }
              ],
              "country": "USA"
            }' > data.json

            shutterstock editorial license-editorial-image data.json
  /v2/editorial/livefeeds:
    get:
      deprecated: true
      description: Deprecated; use `GET /v2/editorial/images/livefeeds` instead to get a list of editorial livefeeds.
      operationId: getEditorialLivefeedList
      parameters:
        - description: Returns only livefeeds that are available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 50
            minimum: 1
            type: integer
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialLivefeedList/example"
              schema:
                $ref: "#/components/schemas/EditorialLivefeedList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - basic: []
        - customer_accessCode: []
      summary: (Deprecated) Get editorial livefeed list
      tags:
        - editorial_images
  "/v2/editorial/livefeeds/{id}":
    get:
      deprecated: true
      description: "Deprecated: use `GET /v2/editorial/images/livefeeds/{id}` instead to get an editorial livefeed."
      operationId: getEditorialLivefeed
      parameters:
        - description: Editorial livefeed ID; must be an URI encoded string
          example: 2018%2F10%2F15%2FWomen%20of%20the%20Year%20Lunch%20%26%20Awards%2C%20London
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Returns only if the livefeed is available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialLivefeed/example"
              schema:
                $ref: "#/components/schemas/EditorialLivefeed"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - basic: []
        - customer_accessCode: []
      summary: (Deprecated) Get editorial livefeed
      tags:
        - editorial_images
  "/v2/editorial/livefeeds/{id}/items":
    get:
      deprecated: true
      description: Deprecated; use `GET /v2/editorial/images/livefeeds/{id}/items` instead to get editorial livefeed items.
      operationId: getEditorialLivefeedItems
      parameters:
        - description: Editorial livefeed ID; must be an URI encoded string
          example: 2018%2F10%2F15%2FWomen%20of%20the%20Year%20Lunch%20%26%20Awards%2C%20London
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Returns only if the livefeed items are available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialContentDataList/example"
              schema:
                $ref: "#/components/schemas/EditorialContentDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - basic: []
        - customer_accessCode: []
      summary: (Deprecated) Get editorial livefeed items
      tags:
        - editorial_images
  /v2/editorial/search:
    get:
      deprecated: true
      description: Deprecated; use `GET /v2/editorial/images/search` instead to search for editorial images.
      operationId: searchEditorial
      parameters:
        - description: One or more search terms separated by spaces
          in: query
          name: query
          schema:
            type: string
        - description: Sort by
          in: query
          name: sort
          schema:
            default: relevant
            enum:
              - relevant
              - newest
              - oldest
            type: string
        - description: Show editorial content within a certain editorial category; specify by category name
          in: query
          name: category
          schema:
            type: string
        - description: Show only editorial content that is available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
        - description: Show only editorial content from certain suppliers
          in: query
          name: supplier_code
          schema:
            items:
              type: string
            type: array
        - description: Show only editorial content generated on or after a specific date
          in: query
          name: date_start
          schema:
            format: date
            type: string
        - description: Show only editorial content generated on or before a specific date
          in: query
          name: date_end
          schema:
            format: date
            type: string
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 50
            minimum: 1
            type: integer
        - description: The cursor of the page with which to start fetching results; this cursor is returned from previous requests
          in: query
          name: cursor
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialSearchResults/example"
              schema:
                $ref: "#/components/schemas/EditorialSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - basic: []
        - customer_accessCode: []
      summary: (Deprecated) Search editorial content
      tags:
        - editorial_images
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/editorial/search" \
              -H "Accept: application/json" \
              -G \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              --data-urlencode "query=football" \
              --data-urlencode "country=USA" \
              --data-urlencode "sort=newest" \
              --data-urlencode "date_start=2018-10-23"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const editorialApi = new sstk.EditorialApi();

            const queryParams = {
              "query": "football",
              "country": "USA",
              "sort": "newest",
              "date_start": "2018-10-23"
            };

            const country = "USA";

            editorialApi.searchEditorial(country, queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "query": "football",
              "country": "USA",
              "sort": "newest",
              "date_start": "2018-10-23",
            };

            sstk.editorialImages.searchEditorial(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { EditorialImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: EditorialImagesApiMethodsParams["searchEditorial"] = {
              "query": "football",
              "country": "USA",
              "sort": "newest",
              "date_start": "2018-10-23",
            };

            sstk.editorialImages.searchEditorial(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "query" => "football",
              "country" => "USA",
              "date_start" => "2018-10-23",
              "sort" => "newest"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/editorial/search?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock editorial search-editorial \
              --country USA \
              --sort newest \
              --query football \
              --date-start 2018-10-23
  /v2/editorial/updated:
    get:
      deprecated: true
      description: Deprecated; use `GET /v2/editorial/images/updated` instead to get recently updated items.
      operationId: getUpdatedEditorialImage
      parameters:
        - description: Specify `addition` to return only images that were added or `edit` to return only images that were edited or deleted
          example: edit
          in: query
          name: type
          required: true
          schema:
            enum:
              - edit
              - addition
            type: string
        - description: Show images images added, edited, or deleted after the specified date. Acceptable range is 1970-01-01T00:00:01 to 2038-01-19T00:00:00.
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: date_updated_start
          required: true
          schema:
            format: date-time
            type: string
        - description: Show images images added, edited, or deleted before the specified date. Acceptable range is 1970-01-01T00:00:01 to 2038-01-19T00:00:00.
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: date_updated_end
          required: true
          schema:
            format: date-time
            type: string
        - description: Show images that were taken on or after the specified date; use this parameter if you want recently created images from the collection instead of updated older assets
          example: 2020-02-04
          in: query
          name: date_taken_start
          schema:
            format: date
            type: string
        - description: Show images that were taken before the specified date
          example: 2020-02-05
          in: query
          name: date_taken_end
          schema:
            format: date
            type: string
        - description: The cursor of the page with which to start fetching results; this cursor is returned from previous requests
          example: eyJ2IjoxLCJzIjoyfQ==
          in: query
          name: cursor
          schema:
            type: string
        - description: Sort by
          example: newest
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
        - description: Show only editorial content from certain suppliers
          example: ABC
          in: query
          name: supplier_code
          schema:
            items:
              maxLength: 5
              type: string
            type: array
        - description: Show only editorial content that is available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
        - description: Number of results per page
          example: 200
          in: query
          name: per_page
          schema:
            default: 500
            maximum: 500
            minimum: 100
            type: integer
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialUpdatedResults/example"
              schema:
                $ref: "#/components/schemas/EditorialUpdatedResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - basic: []
        - customer_accessCode: []
      summary: (Deprecated) List updated content
      tags:
        - editorial_images
      x-code-samples:
        - lang: shell
          source: |-
            curl -X GET "https://api.shutterstock.com/v2/editorial/updated" \
              -H "Accept: application/json" \
              -G \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              --data-urlencode "type=edit" \
              --data-urlencode "country=USA" \
              --data-urlencode "date_updated_start=2020-02-02T13:00:00Z" \
              --data-urlencode "date_updated_end=2020-02-02T15:00:00Z"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const editorialApi = new sstk.EditorialApi();

            const type = "edit";
            const dateUpdatedStart = "2020-02-02T13:00:00Z";
            const dateUpdatedEnd = "2020-02-02T15:00:00Z";
            const country = "USA";

            editorialApi.getUpdatedImages(type, dateUpdatedStart, dateUpdatedEnd, country)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams = {
              "country": "USA",
              "date_updated_start": lastWeek,
              "date_updated_end": today,
              "type": "edit",
            };

            sstk.editorialImages.getUpdatedImages(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { EditorialImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams: EditorialImagesApiMethodsParams["getUpdatedImages"] = {
              "country": "USA",
              "date_updated_start": lastWeek,
              "date_updated_end": today,
              "type": "edit",
            };

            sstk.editorialImages.getUpdatedImages(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "type" => "edit",
              "country" => "USA",
              "date_updated_start" => "2020-02-02T13:00:00Z",
              "date_updated_end" => "2020-02-02T15:00:00Z",
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/editorial/updated?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock editorial get-updated-images \
              --type edit \
              --country USA \
              --date-updated-start "2020-02-02T13:00:00Z" \
              --date-updated-end "2020-02-02T15:00:00Z"
  /v2/editorial/videos/categories:
    get:
      description: This endpoint lists the categories that editorial videos can belong to, which are separate from the categories that other types of assets can belong to.
      operationId: listEditorialVideoCategories
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialVideoCategoryResults/example"
              schema:
                $ref: "#/components/schemas/EditorialVideoCategoryResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List editorial video categories
      tags:
        - editorial_video
  /v2/editorial/videos/licenses:
    get:
      description: This endpoint lists existing editorial video licenses.
      operationId: getEditorialVideoLicenseList
      parameters:
        - description: Show licenses for the specified editorial video ID
          example: "12345678"
          in: query
          name: video_id
          schema:
            type: string
        - description: Show editorial videos that are available with the specified license name
          example: premier_editorial_all_media
          in: query
          name: license
          schema:
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 200
            minimum: 0
            type: integer
        - description: Sort order
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
        - description: Filter licenses by username of licensee
          example: aUniqueUsername
          in: query
          name: username
          schema:
            type: string
        - description: Show licenses created on or after the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: start_date
          schema:
            format: date-time
            type: string
        - description: Show licenses created before the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: end_date
          schema:
            format: date-time
            type: string
        - description: Filter licenses by download availability
          in: query
          name: download_availability
          schema:
            default: all
            enum:
              - all
              - downloadable
              - non_downloadable
            type: string
        - description: Set to true to see license history for all members of your team.
          in: query
          name: team_history
          schema:
            default: false
            type: boolean
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    data:
                      - download_time: 2020-12-18T02:22:56.000Z
                        id: e1dbb15d5384725d292cf64f793ac45062
                        is_downloadable: false
                        license: premier_editorial_all_digital
                        metadata:
                          client: Company A
                          job: Important project
                          other: Important media
                          purchase_order: "457234"
                        subscription_id: s12345678
                        user:
                          username: username1
                        video:
                          format:
                            size: original
                          id: 11231389im
                      - download_time: 2020-12-11T01:24:22.000Z
                        id: e1dbb15d5384725d292cf64f793ac45114
                        is_downloadable: false
                        license: premier_editorial_all_digital
                        metadata:
                          client: Company B
                          job: Important project
                          other: Important image
                          purchase_order: "5583831"
                        subscription_id: s12345678
                        user:
                          username: username2
                        video:
                          format:
                            size: original
                          id: 11231442aa
                    page: 1
                    per_page: 2
              schema:
                $ref: "#/components/schemas/DownloadHistoryDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.view
      summary: List editorial video licenses
      tags:
        - editorial_video
      x-code-samples:
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock from "shutterstock-api";
            import type { EditorialVideoApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams: EditorialVideoApiMethodsParams["getEditorialVideoLicenseList"] = {
              "video_id": "12345678",
              "license": "premier_editorial_all_media",
              "username": "aUniqueUsername",
              "start_date": lastWeek,
              "end_date": today,
            };

            sstk.editorialVideo.getEditorialVideoLicenseList(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
    post:
      description: This endpoint gets licenses for one or more editorial videos. You must specify the country and one or more editorial videos to license. The download links in the response are valid for 8 hours.
      operationId: licenseEditorialVideo
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/LicenseEditorialVideoContentRequest/example"
            schema:
              $ref: "#/components/schemas/LicenseEditorialVideoContentRequest"
        description: License editorial video content
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    data:
                      - download:
                          url: https://s3-eu-west-1.amazonaws.com/api-downloads.rexfeatures.com/[random-characters].mov?Expires=1524717323
                        editorial_id: "69656358"
              schema:
                $ref: "#/components/schemas/LicenseEditorialContentResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.create
            - purchases.view
      summary: License editorial video content
      tags:
        - editorial_video
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "editorial": [
                {
                  "editorial_id": "8594090h",
                  "license": "premier_editorial_video_comp"
                }
              ],
              "country": "USA"
            }'

            curl -X POST "https://api.shutterstock.com/v2/editorial/videos/licenses" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const editorialApi = new sstk.EditorialApi();

            const body = {
              "editorial": [
                {
                  "editorial_id": "10687492a",
                  "license": "premier_editorial_video_comp"
                }
              ],
              "country": "USA"
            };

            editorialApi.licenseEditorialVideo(body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams = {
              "body": {
                "editorial": [
                  {
                    "editorial_id": "8594090h",
                    "license": "premier_editorial.video_comp",
                  },
                ],
                "country": "USA",
              },
            };

            sstk.editorialVideo.licenseEditorialVideo(licenseParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock, { LicenseEditorialVideoContentLicenseEnum } from "shutterstock-api";
            import type { EditorialVideoApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams: EditorialVideoApiMethodsParams["licenseEditorialVideo"] = {
              "body": {
                "editorial": [
                  {
                    "editorial_id": "8594090h",
                    "license": LicenseEditorialVideoContentLicenseEnum.AllMedia,
                  },
                ],
                "country": "USA",
              },
            };

            sstk.editorialVideo.licenseEditorialVideo(licenseParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $body = [
              "editorial" => [
                [
                  "editorial_id" => "10687492a",
                  "license" => "premier_editorial_video_comp"
                ]
              ],
              "country" => "USA"
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/editorial/videos/licenses",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "editorial": [
                {
                  "editorial_id": "8594090h",
                  "license": "premier_editorial_video_comp"
                }
              ],
              "country": "USA"
            }' > data.json

            shutterstock editorial license-editorial-video data.json
  /v2/editorial/videos/search:
    get:
      description: This endpoint searches for editorial videos. If you specify more than one search parameter, the API uses an AND condition. For example, if you set the `category` parameter to "Alone,Performing" and also specify a `query` parameter, the results include only videos that match the query and are in both the Alone and Performing categories.  You can also filter search terms out in the `query` parameter by prefixing the term with NOT.
      operationId: searchEditorialVideos
      parameters:
        - description: One or more search terms separated by spaces
          example: The Academy Awards
          in: query
          name: query
          schema:
            type: string
        - description: Sort by
          in: query
          name: sort
          schema:
            default: relevant
            enum:
              - relevant
              - newest
              - oldest
            type: string
        - description: Show editorial content with each of the specified editorial categories; specify category names in a comma-separated list
          example: Alone,Performing
          in: query
          name: category
          schema:
            type: string
        - description: Show only editorial video content that is available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
        - description: Show only editorial video content from certain suppliers
          in: query
          name: supplier_code
          schema:
            items:
              type: string
            type: array
        - description: Show only editorial video content generated on or after a specific date
          example: 2020-05-29
          in: query
          name: date_start
          schema:
            format: date
            type: string
        - description: Show only editorial video content generated on or before a specific date
          example: 2021-05-29
          in: query
          name: date_end
          schema:
            format: date
            type: string
        - description: Show only editorial video content with specific resolution
          example: 4k
          in: query
          name: resolution
          schema:
            enum:
              - 4k
              - high_definition
              - standard_definition
            type: string
        - description: Show only editorial video content generated with specific frames per second
          example: 24
          in: query
          name: fps
          schema:
            type: number
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 50
            minimum: 1
            type: integer
        - description: The cursor of the page with which to start fetching results; this cursor is returned from previous requests
          example: eyJ2IjoxLCJzIjoxfQ==
          in: query
          name: cursor
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialVideoSearchResults/example"
              schema:
                $ref: "#/components/schemas/EditorialVideoSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - basic: []
        - customer_accessCode: []
      summary: Search editorial video content
      tags:
        - editorial_video
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/editorial/videos/search" \
              -H "Accept: application/json" \
              -G \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              --data-urlencode "query=musician" \
              --data-urlencode "country=USA" \
              --data-urlencode "category=Alone,Performing" \
              --data-urlencode "sort=newest" \
              --data-urlencode "date_start=2018-10-23"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const editorialApi = new sstk.EditorialVideoApi();

            const queryParams = {
              "query": "musician",
              "country": "USA",
              "category": "Alone,Performing",
              "sort": "newest",
              "date_start": "2018-10-23"
            };

            const country = "USA";

            editorialApi.searchEditorialVideos(country, queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "query": "football",
              "country": "USA",
              "sort": "newest",
              "date_start": "2018-10-23",
            };

            sstk.editorialVideo.searchEditorialVideos(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { EditorialVideoApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: EditorialVideoApiMethodsParams["searchEditorialVideos"] = {
              "query": "football",
              "country": "USA",
              "sort": "newest",
              "date_start": "2018-10-23",
            };

            sstk.editorialVideo.searchEditorialVideos(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "query" => "musician",
              "country" => "USA",
              "category" => "Alone,Performing",
              "date_start" => "2018-10-23",
              "sort" => "newest"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/editorial/videos/search?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock editorial search-editorial-videos \
              --country USA \
              --sort newest \
              --query musician \
              --category Alone,Performing \
              --date-start 2018-10-23
  "/v2/editorial/videos/{id}":
    get:
      description: This endpoint shows information about an editorial image, including a URL to a preview image and the sizes that it is available in.
      operationId: getEditorialVideo
      parameters:
        - description: Editorial ID
          example: 9926131a
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Returns only if the content is available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
        - description: The ID of the search that is related to this request
          example: 00000000-0000-0000-0000-000000000000
          in: query
          name: search_id
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialVideoContent/example"
              schema:
                $ref: "#/components/schemas/EditorialVideoContent"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "406":
          description: Not Acceptable
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get editorial video content details
      tags:
        - editorial_video
  "/v2/editorial/{id}":
    get:
      deprecated: true
      description: Deprecated; use `GET /v2/editorial/images/{id}` instead to show information about an editorial image, including a URL to a preview image and the sizes that it is available in.
      parameters:
        - description: Editorial ID
          example: 9926131a
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Returns only if the content is available for distribution in a certain country
          example: USA
          in: query
          name: country
          required: true
          schema:
            format: country-code-3
            type: string
        - description: The ID of the search that is related to this request
          example: 00000000-0000-0000-0000-000000000000
          in: query
          name: search_id
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/EditorialContent/example"
              schema:
                $ref: "#/components/schemas/EditorialContent"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not Found
      security:
        - basic: []
        - customer_accessCode: []
      summary: (Deprecated) Get editorial content details
      tags:
        - editorial_images
  /v2/images:
    get:
      description: This endpoint lists information about one or more images, including the available sizes.
      operationId: getImageList
      parameters:
        - description: One or more image IDs
          example:
            - "1110335168"
            - "465011609"
          in: query
          name: id
          required: true
          schema:
            items:
              format: asset-id
              type: string
            maxItems: 500
            type: array
        - description: Amount of detail to render in the response
          example: minimal
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
        - description: The ID of the search that is related to this request
          example: 00000000-0000-0000-0000-000000000000
          in: query
          name: search_id
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/ImageDataList/example"
              schema:
                $ref: "#/components/schemas/ImageDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List images
      tags:
        - images
    post:
      deprecated: true
      description: Deprecated; use `POST /v2/cv/images` instead. This endpoint uploads an image for reverse image search. The image must be in JPEG or PNG format. To get the search results, pass the ID that this endpoint returns to the `GET /v2/images/{id}/similar` endpoint.
      operationId: uploadEphemeralImage
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/ImageCreateRequest/example"
            schema:
              $ref: "#/components/schemas/ImageCreateRequest"
        description: The image data in JPEG or PNG format
        required: true
      responses:
        "201":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/ImageCreateResponse/example"
              schema:
                $ref: "#/components/schemas/ImageCreateResponse"
          description: Created
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "413":
          description: Payload Too Large
      security:
        - basic: []
        - customer_accessCode: []
      summary: Upload ephemeral images
      tags:
        - computer_vision
      x-code-samples:
        - lang: shell
          source: |
            curl -X POST "https://api.shutterstock.com/v2/images" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -H "Content-Type: application/json" \
              -d "{\"base64_image\":\"`base64 myImage.jpg | tr -d '\n'`\"}"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");
            const fs = require("fs");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const body = new sstk.ImageCreateRequest(base64File);

            const queryParams = {
              "page": 1,
              "per_page": 20,
              "view": "minimal"
            };

            imagesApi.uploadEphemeralImage(body)
              .then((data) => {
                console.log(data.id);
                return imagesApi.getSimilarImages(data.id, queryParams);
              })
              .then((similarImageData) => {
                console.log(similarImageData);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");
            const fs = require("fs");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const uploadImageBody = {
              "body": {
                "base64_image": base64File,
              },
            };

            sstk.computerVision.uploadImage(uploadImageBody)
              .then(({ data }) => {
                console.log(data.upload_id);

                const queryParams = {
                  "asset_id": data.upload_id,
                  "page": 1,
                  "per_page": 20,
                  "view": "minimal",
                };

                return sstk.computerVision.getSimilarImages(queryParams);
              })
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ComputerVisionApiMethodsParams } from "shutterstock-api";

            import * as fs from "fs";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const imageFile = fs.readFileSync("./myImage.jpg");
            const base64File = Buffer.from(imageFile).toString("base64");

            const uploadImageBody: ComputerVisionApiMethodsParams["uploadImage"] = {
              "body": {
                "base64_image": base64File,
              },
            };

            sstk.computerVision.uploadImage(uploadImageBody)
              .then(({ data }) => {
                console.log(data.upload_id);

                const queryParams: ComputerVisionApiMethodsParams["getSimilarImages"] = {
                  "asset_id": data.upload_id,
                  "page": 1,
                  "per_page": 20,
                  "view": "minimal",
                };

                return sstk.computerVision.getSimilarImages(queryParams);
              })
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $imageData = file_get_contents("myImage.jpg");
            $encodedImageData = base64_encode($imageData);

            $body = [
              "base64_image" => $encodedImageData
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo "{\"base64_image\":\"`base64 myImage.jpg  | tr -d '\n'`\"}" > data.json

            shutterstock images upload-ephemeral-image data.json
  /v2/images/categories:
    get:
      description: This endpoint lists the categories (Shutterstock-assigned genres) that images can belong to.
      operationId: listImageCategories
      parameters:
        - description: Language for the keywords and categories in the response
          example: es
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CategoryDataList/example"
              schema:
                $ref: "#/components/schemas/CategoryDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List image categories
      tags:
        - images
      x-code-samples:
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock, { Language } from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: ImagesApiMethodsParams["listImageCategories"] = {
              "language": Language.Es,
            };

            sstk.images.listImageCategories(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
  /v2/images/collections:
    get:
      description: This endpoint lists your collections of images and their basic attributes.
      operationId: getImageCollectionList
      parameters:
        - description: Which sharing information to include in the response, such as a URL to the collection
          example: share_code
          in: query
          name: embed
          schema:
            items:
              enum:
                - share_code
                - share_url
              type: string
            type: array
        - description: Page number
          example: 1
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          example: 2
          in: query
          name: per_page
          schema:
            default: 100
            maximum: 150
            minimum: 1
            type: integer
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CollectionDataList/example"
              schema:
                $ref: "#/components/schemas/CollectionDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - collections.view
      summary: List image collections
      tags:
        - images
    post:
      description: This endpoint creates one or more image collections (lightboxes). To add images to the collections, use `POST /v2/images/collections/{id}/items`.
      operationId: createImageCollection
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/CollectionCreateRequest/example"
            schema:
              $ref: "#/components/schemas/CollectionCreateRequest"
        description: The names of the new collections
        required: true
      responses:
        "201":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CollectionCreateResponse/example"
              schema:
                $ref: "#/components/schemas/CollectionCreateResponse"
          description: Successfully created image collection
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - collections.edit
      summary: Create image collections
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "name": "My collection"
            }'

            curl -X POST "https://api.shutterstock.com/v2/images/collections" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const body = {
              "name": "My collection"
            };

            imagesApi.createImageCollection(body)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |-
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const createCollectionBody = {
              "body": {
                "name": "My collection",
              },
            };

            sstk.images.createImageCollection(createCollectionBody)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const createCollectionBody: ImagesApiMethodsParams["createImageCollection"] = {
              "body": {
                "name": "My collection",
              },
            };

            sstk.images.createImageCollection(createCollectionBody)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source:
            $ref: "#/paths/~1v2~1images~1collections/post/x-code-samples/2/source"
        - lang: typescript_v2--nodejs
          source:
            $ref: "#/paths/~1v2~1images~1collections/post/x-code-samples/3/source"
        - lang: php
          source: |-
            $body = [
              "name" => "My collection"
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/collections",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "name": "My collection"
            }' > data.json

            shutterstock images create-image-collection data.json
  /v2/images/collections/featured:
    get:
      description: This endpoint lists featured collections of specific types and a name and cover image for each collection.
      operationId: getFeaturedImageCollectionList
      parameters:
        - description: Which sharing information to include in the response, such as a URL to the collection
          example: share_url
          in: query
          name: embed
          schema:
            enum:
              - share_url
            type: string
        - description: The types of collections to return
          example:
            - photo
          in: query
          name: type
          schema:
            items:
              enum:
                - photo
                - editorial
                - vector
              type: string
            type: array
        - description: Cover image size
          example: 1x
          in: query
          name: asset_hint
          schema:
            default: 1x
            enum:
              - 1x
              - 2x
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/FeaturedCollectionDataList/example"
              schema:
                $ref: "#/components/schemas/FeaturedCollectionDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List featured image collections
      tags:
        - images
  "/v2/images/collections/featured/{id}":
    get:
      description: This endpoint gets more detailed information about a featured collection, including its cover image and timestamps for its creation and most recent update. To get the images, use `GET /v2/images/collections/featured/{id}/items`.
      operationId: getFeaturedImageCollection
      parameters:
        - description: Collection ID
          example: "136351027"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Which sharing information to include in the response, such as a URL to the collection
          in: query
          name: embed
          schema:
            enum:
              - share_url
            type: string
        - description: Cover image size
          in: query
          name: asset_hint
          schema:
            default: 1x
            enum:
              - 1x
              - 2x
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/FeaturedCollection/example"
              schema:
                $ref: "#/components/schemas/FeaturedCollection"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Featured collection not found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get the details of featured image collections
      tags:
        - images
  "/v2/images/collections/featured/{id}/items":
    get:
      description: This endpoint lists the IDs of images in a featured collection and the date that each was added.
      operationId: getFeaturedImageCollectionItems
      parameters:
        - description: Collection ID
          example: "136351027"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 100
            maximum: 150
            minimum: 1
            type: integer
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CollectionItemDataList/example"
              schema:
                $ref: "#/components/schemas/CollectionItemDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Featured collection not found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get the contents of featured image collections
      tags:
        - images
  "/v2/images/collections/{id}":
    delete:
      description: This endpoint deletes an image collection.
      operationId: deleteImageCollection
      parameters:
        - description: Collection ID
          example: "136351027"
          in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "204":
          description: Successfully deleted collection
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Delete image collections
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |-
            curl -X DELETE "https://api.shutterstock.com/v2/images/collections/136351027" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const collectionId = "136351027"; // Collection ID

            imagesApi.deleteImageCollection(collectionId)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "136351027";

            const deleteCollectionParams = {
              "id": collectionId,
            };

            sstk.images.deleteImageCollection(deleteCollectionParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "136351027";

            const deleteCollectionParams: ImagesApiMethodsParams["deleteImageCollection"] = {
              "id": collectionId,
            };

            sstk.images.deleteImageCollection(deleteCollectionParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/collections/136351027",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_CUSTOMREQUEST => "DELETE",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock images delete-image-collection 136351027
    get:
      description: This endpoint gets more detailed information about a collection, including its cover image and timestamps for its creation and most recent update. To get the images in collections, use `GET /v2/images/collections/{id}/items`.
      operationId: getImageCollection
      parameters:
        - description: Collection ID
          example: "126351027"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Which sharing information to include in the response, such as a URL to the collection
          in: query
          name: embed
          schema:
            items:
              enum:
                - share_code
                - share_url
              type: string
            type: array
        - description: Code to retrieve a shared collection
          in: query
          name: share_code
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/Collection/example"
              schema:
                $ref: "#/components/schemas/Collection"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.view
      summary: Get the details of image collections
      tags:
        - images
    post:
      description: This endpoint sets a new name for an image collection.
      operationId: renameImageCollection
      parameters:
        - description: Collection ID
          example: "126351027"
          in: path
          name: id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/CollectionUpdateRequest/example"
            schema:
              $ref: "#/components/schemas/CollectionUpdateRequest"
        description: The new name for the collection
        required: true
      responses:
        "204":
          description: Successfully updated collection
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Rename image collections
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "name": "My new collection name"
            }'

            curl -X POST "https://api.shutterstock.com/v2/images/collections/126351027" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const collectionId = "126351027"; // Collection ID

            const body = {
              "name": "My new collection name"
            };

            imagesApi.renameImageCollection(collectionId, body)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "126351027";

            const renameCollectionBody = {
              "id": collectionId,
              "body": {
                "name": "My new collection name",
              },
            };

            sstk.images.renameImageCollection(renameCollectionBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "126351027";

            const renameCollectionBody: ImagesApiMethodsParams["renameImageCollection"] = {
              "id": collectionId,
              "body": {
                "name": "My new collection name",
              },
            };

            sstk.images.renameImageCollection(renameCollectionBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $body = [
              "name" => "My new collection name"
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/collections/126351027",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "name": "My new collection name"
            }' > data.json

            shutterstock images rename-image-collection 48433107 data.json
  "/v2/images/collections/{id}/items":
    delete:
      description: This endpoint removes one or more images from a collection.
      operationId: deleteImageCollectionItems
      parameters:
        - description: Collection ID
          example: "126351027"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: One or more image IDs to remove from the collection
          in: query
          name: item_id
          schema:
            items:
              type: string
            type: array
      responses:
        "204":
          description: Successfully removed collection items
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Remove images from collections
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |-
            curl -X DELETE "https://api.shutterstock.com/v2/images/collections/186726599/items?item_id=495863218" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const collectionId = "126351027"; // Collection ID

            // Array of images to remove
            const imagesToRemove = {
              "item_id": [
                "495863218"
              ]
            };

            imagesApi.deleteImageCollectionItems(collectionId, imagesToRemove)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "136351027";
            const itemToDelete = "495863218";

            const deleteImageParams = {
              "id": collectionId,
              "item_id": [
                itemToDelete,
              ],
            };

            sstk.images.deleteImageCollectionItems(deleteImageParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "136351027";
            const itemToDelete = "495863218";

            const deleteImageParams: ImagesApiMethodsParams["deleteImageCollectionItems"] = {
              "id": collectionId,
              "item_id": [
                itemToDelete,
              ],
            };

            sstk.images.deleteImageCollectionItems(deleteImageParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/collections/126351027/items?item_id=495863218",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_CUSTOMREQUEST => "DELETE",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock images delete-image-collection-items 186726599 \
              --item-id 495863218
    get:
      description: This endpoint lists the IDs of images in a collection and the date that each was added.
      operationId: getImageCollectionItems
      parameters:
        - description: Collection ID
          example: "126351027"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 100
            maximum: 150
            minimum: 1
            type: integer
        - description: Code to retrieve the contents of a shared collection
          in: query
          name: share_code
          schema:
            type: string
        - description: Sort order
          in: query
          name: sort
          schema:
            default: oldest
            enum:
              - newest
              - oldest
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CollectionItemDataList/example"
              schema:
                $ref: "#/components/schemas/CollectionItemDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.view
      summary: Get the contents of image collections
      tags:
        - images
    post:
      description: This endpoint adds one or more images to a collection by image IDs.
      operationId: addImageCollectionItems
      parameters:
        - description: Collection ID
          example: "126351027"
          in: path
          name: id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  items:
                    - id: "49572945"
            schema:
              $ref: "#/components/schemas/CollectionItemRequest"
        description: Array of image IDs to add to the collection
        required: true
      responses:
        "204":
          description: Successfully added collection items
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Add images to collections
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "items": [
                {
                  "id": "49572945",
                  "media_type": "image"
                }
              ]
            }'

            curl -X POST "https://api.shutterstock.com/v2/images/collections/126351027/items" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const collectionId = "126351027"; // Collection ID

            const body = {
              "items": [
                {
                  "id": "495863218",
                  "media_type": "image"
                }
              ]
            };

            imagesApi.addImageCollectionItems(collectionId, body)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "126351027"; // Collection ID

            const addImageBody = {
              "id": collectionId,
              "body": {
                "items": [
                  {
                    "id": "495863218",
                    "media_type": "image",
                  },
                ],
              },
            };

            sstk.images.addImageCollectionItems(addImageBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "126351027"; // Collection ID

            const addImageBody: ImagesApiMethodsParams["addImageCollectionItems"] = {
              "id": collectionId,
              "body": {
                "items": [
                  {
                    "id": "495863218",
                    "media_type": "image",
                  },
                ],
              },
            };

            sstk.images.addImageCollectionItems(addImageBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $body = [
              "items" => [
                [
                  "id" => "49572945",
                  "media_type" => "image"
                ]
              ]
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/collections/126351027/items",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "items": [
                {
                  "id": "49572945",
                  "media_type": "image"
                }
              ]
            }' > data.json

            shutterstock images add-image-collection-items 126351027 data.json
  /v2/images/licenses:
    get:
      description: This endpoint lists existing licenses.
      operationId: getImageLicenseList
      parameters:
        - description: Show licenses for the specified image ID
          example: "12345678"
          in: query
          name: image_id
          schema:
            pattern: ^[1-9]\d*$
            type: string
            x-pattern-description: A number that does not start with 0
        - description: Show images that are available with the specified license, such as `standard` or `enhanced`; prepending a `-` sign excludes results from that license
          example: standard
          in: query
          name: license
          schema:
            pattern: ^.+$
            type: string
            x-pattern-description: Minimum 1 character
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 200
            minimum: 1
            type: integer
        - description: Sort order
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
        - description: Filter licenses by username of licensee
          example: aUniqueUsername
          in: query
          name: username
          schema:
            type: string
        - description: Show licenses created on or after the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: start_date
          schema:
            format: date-time
            type: string
          x-relationships:
            - in: query
              name: end_date
              relationship: <=
        - description: Show licenses created before the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: end_date
          schema:
            format: date-time
            type: string
          x-relationships:
            - in: query
              name: start_date
              relationship: ">"
        - description: Filter licenses by download availability
          in: query
          name: download_availability
          schema:
            default: all
            enum:
              - all
              - downloadable
              - non_downloadable
            type: string
        - description: Set to true to see license history for all members of your team.
          in: query
          name: team_history
          schema:
            default: false
            type: boolean
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/DownloadHistoryDataList/example"
              schema:
                $ref: "#/components/schemas/DownloadHistoryDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.view
      summary: List image licenses
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/images/licenses" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              -G \
              --data-urlencode "start_date=2016-10-03T01:25:13.521Z" \
              --data-urlencode "end_date=2016-10-04T13:25:13.521Z" \
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const queryParams = {
              "start_date": "2016-10-03T01:25:13.521Z",
              "end_date": "2016-10-04T13:25:13.521Z"
            };

            imagesApi.getImageLicenseList(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams = {
              "start_date": lastWeek,
              "end_date": today,
            };

            sstk.images.getImageLicenseList(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams: ImagesApiMethodsParams["getImageLicenseList"] = {
              "start_date": lastWeek,
              "end_date": today,
            };

            sstk.images.getImageLicenseList(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "start_date" => "2016-10-03T01:25:13.521Z",
              "end_date" => "2016-10-04T13:25:13.521Z"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/licenses" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock images get-image-license-list \
             --start-date "2021-01-03T01:25:13.521Z" \
             --end-date "2021-05-04T13:25:13.521Z"
    post:
      description: This endpoint gets licenses for one or more images. You must specify the image IDs in the body parameter and other details like the format, size, and subscription ID either in the query parameter or with each image ID in the body parameter. Values in the body parameter override values in the query parameters. The download links in the response are valid for 8 hours.
      operationId: licenseImages
      parameters:
        - description: Subscription ID to use to license the image
          in: query
          name: subscription_id
          schema:
            type: string
        - deprecated: true
          description: (Deprecated) Image format
          in: query
          name: format
          schema:
            enum:
              - eps
              - jpg
            type: string
        - description: Image size
          in: query
          name: size
          schema:
            default: huge
            enum:
              - small
              - medium
              - huge
              - vector
              - custom
            type: string
        - description: Search ID that was provided in the results of an image search
          in: query
          name: search_id
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/LicenseImageRequest/example"
            schema:
              $ref: "#/components/schemas/LicenseImageRequest"
        description: List of images to request licenses for and information about each license transaction; these values override the defaults in the query parameters
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/LicenseImageResultDataList/example"
              schema:
                $ref: "#/components/schemas/LicenseImageResultDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.create
            - purchases.view
      summary: License images
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |
            DATA='{
              "images": [
                {
                  "image_id": "59656357",
                  "subscription_id": "s12345678",
                  "price": 12.50,
                  "metadata": {
                    "customer_id": "12345"
                  }
                }
              ]
            }'

            curl -X POST "https://api.shutterstock.com/v2/images/licenses" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -H 'Content-Type: application/json' \
              -d "$DATA"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const body = {
              "images": [
                {
                  "image_id": "419235589",
                  "subscription_id": "s12345678",
                  "price": 12.50,
                  "metadata": {
                    "customer_id": "12345"
                  }
                }
              ]
            };

            imagesApi.licenseImages(body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |-
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams = {
              "body": {
                "images": [
                  {
                    "image_id": "419235589",
                    "format": "jpg",
                    "subscription_id": "s12345678",
                    "price": 12.50,
                    "metadata": {
                      "customer_id": "12345",
                    },
                  },
                ],
              },
            };

            sstk.images.licenseImages(licenseParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock, { LicenseImageFormatEnum } from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams: ImagesApiMethodsParams["licenseImages"] = {
              "body": {
                "images": [
                  {
                    "image_id": "419235589",
                    "format": LicenseImageFormatEnum.Jpg,
                    "subscription_id": "s12345678",
                    "price": 12.50,
                    "metadata": {
                      "customer_id": "12345",
                    },
                  },
                ],
              },
            };

            sstk.images.licenseImages(licenseParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $body = [
              "images" => [
                [
                  "image_id" => "539753938",
                  "subscription_id" => "s12345678",
                  "price" => 12.50,
                  "metadata" => [
                    "customer_id" => "12345"
                  ]
                ]
              ]
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/licenses",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "images": [
                {
                  "image_id": "59656357",
                  "subscription_id": "s12345678",
                  "price": 12.50,
                  "metadata": {
                    "customer_id": "12345"
                  }
                }
              ]
            }' > data.json

            shutterstock images license-images \
              data.json
  "/v2/images/licenses/{id}/downloads":
    post:
      description: This endpoint redownloads images that you have already received a license for. The download links in the response are valid for 8 hours.
      operationId: downloadImage
      parameters:
        - description: License ID
          example: e123
          in: path
          name: id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            example:
              $ref: "#/components/schemas/RedownloadImage/example"
            schema:
              $ref: "#/components/schemas/RedownloadImage"
        description: Information about the images to redownload
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/Url/example"
              schema:
                $ref: "#/components/schemas/Url"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.view
      summary: Download images
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |
            DATA='{
              "size": "huge"
            }'

            curl -X POST "https://api.shutterstock.com/v2/images/licenses/e123/downloads" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const licenseId = "e123"; // license ID, not image ID

            const body = {
              "size": "huge"
            };

            imagesApi.downloadImage(licenseId, body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseId = "e123"; // license ID, not image ID

            const downloadImageBody = {
              "id": licenseId,
              "body": {
                "size": RedownloadImageSizeEnum.Huge,
              },
            };

            sstk.images.downloadImage(downloadImageBody)
              .then(({ data }) => {
                console.log(data.url);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock, { RedownloadImageSizeEnum } from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseId = "e123"; // license ID, not image ID

            const downloadImageBody: ImagesApiMethodsParams["downloadImage"] = {
              "id": licenseId,
              "body": {
                "size": RedownloadImageSizeEnum.Huge,
              },
            };

            sstk.images.downloadImage(downloadImageBody)
              .then(({ data }) => {
                console.log(data.url);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $body = [
              "size" => "huge"
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/licenses/e123/downloads",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "size": "huge"
            }' > data.json

            shutterstock images download-image e123 data.json
  /v2/images/recommendations:
    get:
      description: This endpoint returns images that customers put in the same collection as the specified image IDs.
      operationId: getImageRecommendations
      parameters:
        - description: Image IDs
          example:
            - 465011609
          in: query
          name: id
          required: true
          schema:
            items:
              type: string
            type: array
        - description: Maximum number of results returned in the response
          in: query
          name: max_items
          schema:
            default: 20
            maximum: 500
            minimum: 1
            type: integer
        - description: Restrict results to safe images
          in: query
          name: safe
          schema:
            default: true
            type: boolean
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/RecommendationDataList/example"
              schema:
                $ref: "#/components/schemas/RecommendationDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List recommended images
      tags:
        - images
  /v2/images/search:
    get:
      description: This endpoint searches for images. If you specify more than one search parameter, the API uses an AND condition. Array parameters can be specified multiple times; in this case, the API uses an AND or an OR condition with those values, depending on the parameter. You can also filter search terms out in the `query` parameter by prefixing the term with NOT. Free API accounts show results only from a limited library of media, not the full Shutterstock media library. Also, the number of search fields they can use in a request is limited.
      operationId: searchImages
      parameters:
        - description: Show images added on the specified date
          example: 2021-03-29
          in: query
          name: added_date
          schema:
            format: date
            type: string
        - description: Show images added on or after the specified date
          example: 2021-03-29
          in: query
          name: added_date_start
          schema:
            format: date
            type: string
        - description: Show images with the specified aspect ratio or higher, using a positive decimal of the width divided by the height, such as 1.7778 for a 16:9 image
          example: 1.7778
          in: query
          name: aspect_ratio_min
          schema:
            exclusiveMinimum: true
            minimum: 0
            type: number
        - description: Show images with the specified aspect ratio or lower, using a positive decimal of the width divided by the height, such as 1.7778 for a 16:9 image
          example: 1.7778
          in: query
          name: aspect_ratio_max
          schema:
            exclusiveMinimum: true
            minimum: 0
            type: number
        - description: Show images with the specified aspect ratio, using a positive decimal of the width divided by the height, such as 1.7778 for a 16:9 image
          example: 1.7778
          in: query
          name: aspect_ratio
          schema:
            exclusiveMinimum: true
            minimum: 0
            type: number
        - description: "Set to true and specify the `ai_objective` and `ai_industry` parameters to use AI-powered search; the API returns information about how well images meet the objective for the industry "
          in: query
          name: ai_search
          schema:
            type: boolean
          x-relationships:
            - in: query
              name: ai_industry
              relationship: required
            - in: query
              name: ai_objective
              relationship: required
        - description: For AI-powered search, specify the maximum number of labels to return
          in: query
          name: ai_labels_limit
          schema:
            default: 20
            maximum: 500
            minimum: 0
            type: integer
        - description: For AI-powered search, specify the industry to target; requires that the `ai_search` parameter is set to true
          in: query
          name: ai_industry
          schema:
            enum:
              - automotive
              - cpg
              - finance
              - healthcare
              - retail
              - technology
            type: string
        - description: For AI-powered search, specify the goal of the media; requires that the `ai_search` parameter is set to true
          in: query
          name: ai_objective
          schema:
            enum:
              - awareness
              - traffic
              - conversions
            type: string
        - description: Show images added before the specified date
          example: 2021-03-29
          in: query
          name: added_date_end
          schema:
            format: date
            type: string
        - description: Show images with the specified Shutterstock-defined category; specify a category name or ID
          in: query
          name: category
          schema:
            type: string
        - description: Specify either a hexadecimal color in the format '4F21EA' or 'grayscale'; the API returns images that use similar colors
          example: 4F21EA
          in: query
          name: color
          schema:
            type: string
        - description: Show images with the specified contributor names or IDs, allows multiple
          example:
            - "123456"
          in: query
          name: contributor
          schema:
            items:
              type: string
            type: array
        - description: Show images from contributors in one or more specified countries, or start with NOT to exclude a country from the search
          example: US
          in: query
          name: contributor_country
          schema:
            oneOf:
              - items:
                  format: country-code-2
                  type: string
                type: array
              - items:
                  format: negated-country-code-2
                  type: string
                type: array
        - description: Fields to display in the response; see the documentation for the fields parameter in the overview section
          in: query
          name: fields
          schema:
            type: string
            uniqueItems: true
        - deprecated: true
          description: (Deprecated; use height_from and height_to instead) Show images with the specified height
          in: query
          name: height
          schema:
            type: integer
        - description: Show images with the specified height or larger, in pixels
          example: 1080
          in: query
          name: height_from
          schema:
            type: integer
        - description: Show images with the specified height or smaller, in pixels
          example: 1080
          in: query
          name: height_to
          schema:
            type: integer
        - description: Show images of the specified type
          example: photo
          in: query
          name: image_type
          schema:
            items:
              enum:
                - photo
                - illustration
                - vector
              type: string
            type: array
        - description: Hide results with potentially unsafe keywords
          in: query
          name: keyword_safe_search
          schema:
            default: true
            type: boolean
        - description: Set query and result language (uses Accept-Language header if not set)
          example: fr
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Show only images with the specified license
          in: query
          name: license
          schema:
            items:
              default: commercial
              enum:
                - commercial
                - editorial
                - enhanced
              type: string
            type: array
        - description: Show image results with the specified model IDs
          example:
            - "12345"
            - "67890"
          in: query
          name: model
          schema:
            items:
              type: string
            type: array
        - description: Show image results with horizontal or vertical orientation
          example: vertical
          in: query
          name: orientation
          schema:
            enum:
              - horizontal
              - vertical
            type: string
        - description: Page number
          example: 1
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          example: 50
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 500
            minimum: 0
            type: integer
        - description: Show images of people with a signed model release
          example: true
          in: query
          name: people_model_released
          schema:
            type: boolean
        - description: Show images that feature people of the specified age category
          example: 20s
          in: query
          name: people_age
          schema:
            enum:
              - infants
              - children
              - teenagers
              - 20s
              - 30s
              - 40s
              - 50s
              - 60s
              - older
            type: string
        - description: Show images with people of the specified ethnicities, or start with NOT to show images without those ethnicities
          example: hispanic
          in: query
          name: people_ethnicity
          schema:
            items:
              enum:
                - african
                - african_american
                - black
                - brazilian
                - chinese
                - caucasian
                - east_asian
                - hispanic
                - japanese
                - middle_eastern
                - native_american
                - pacific_islander
                - south_asian
                - southeast_asian
                - other
                - NOT african
                - NOT african_american
                - NOT black
                - NOT brazilian
                - NOT chinese
                - NOT caucasian
                - NOT east_asian
                - NOT hispanic
                - NOT japanese
                - NOT middle_eastern
                - NOT native_american
                - NOT pacific_islander
                - NOT south_asian
                - NOT southeast_asian
                - NOT other
              type: string
            type: array
        - description: Show images with people of the specified gender
          example: both
          in: query
          name: people_gender
          schema:
            enum:
              - male
              - female
              - both
            type: string
        - description: Show images with the specified number of people
          example: 2
          in: query
          name: people_number
          schema:
            maximum: 4
            minimum: 0
            type: integer
        - description: One or more search terms separated by spaces; you can use NOT to filter out images that match a term
          example: dogs on the beach
          in: query
          name: query
          schema:
            type: string
        - description: Raise or lower search result rankings based on the result's relevance to a specified region; you can provide a country code or an IP address from which the API infers a country
          example: US
          in: query
          name: region
          schema:
            anyOf:
              - format: country-code-2
                type: string
              - format: ipv4
                type: string
        - description: Enable or disable safe search
          in: query
          name: safe
          schema:
            default: true
            type: boolean
        - description: Sort by
          in: query
          name: sort
          schema:
            default: popular
            enum:
              - newest
              - popular
              - relevance
              - random
            type: string
        - description: Spellcheck the search query and return results on suggested spellings
          in: query
          name: spellcheck_query
          schema:
            default: true
            type: boolean
        - description: Amount of detail to render in the response
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
        - deprecated: true
          description: (Deprecated; use width_from and width_to instead) Show images with the specified width
          in: query
          name: width
          schema:
            type: integer
        - description: Show images with the specified width or larger, in pixels
          example: 1920
          in: query
          name: width_from
          schema:
            type: integer
        - description: Show images with the specified width or smaller, in pixels
          example: 1920
          in: query
          name: width_to
          schema:
            type: integer
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/ImageSearchResults/example"
              schema:
                $ref: "#/components/schemas/ImageSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: Search for images
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/images/search" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "query=Vienna" \
              --data-urlencode "orientation=horizontal" \
              --data-urlencode "sort=popular"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const queryParams = {
              "query": "New York",
              "sort": "popular",
              "orientation": "horizontal"
            };

            imagesApi.searchImages(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "query": "New York",
              "sort": "popular",
              "orientation": "horizontal",
            };

            sstk.images.searchImages(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: ImagesApiMethodsParams["searchImages"] = {
              "query": "New York",
              "sort": "popular",
              "orientation": "horizontal",
            };

            sstk.images.searchImages(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "query" => "New York",
              "sort" => "popular",
              "orientation" => "horizontal"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/search?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock images search-images \
              --query Vienna \
              --orientation horizontal \
              --sort popular
  /v2/images/search/suggestions:
    get:
      description: This endpoint provides autocomplete suggestions for partial search terms.
      operationId: getImageSuggestions
      parameters:
        - description: Search term for which you want keyword suggestions
          example: cats
          in: query
          name: query
          required: true
          schema:
            type: string
        - description: Limit the number of suggestions
          in: query
          name: limit
          schema:
            default: 10
            maximum: 25
            minimum: 1
            type: integer
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/Suggestions/example"
              schema:
                $ref: "#/components/schemas/Suggestions"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get suggestions for a search term
      tags:
        - images
    post:
      description: This endpoint returns up to 10 important keywords from a block of plain text.
      operationId: getImageKeywordSuggestions
      requestBody:
        content:
          application/json:
            example:
              $ref: "#/components/schemas/SearchEntitiesRequest/example"
            schema:
              $ref: "#/components/schemas/SearchEntitiesRequest"
        description: Plain text to extract keywords from
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    data:
                      - beach
                      - place
                      - sand
                      - ocean
              schema:
                $ref: "#/components/schemas/SearchEntitiesResponse"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get keywords from text
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |
            DATA='{"text": "The beach is a wonderful place to visit. It has beautiful sand and ocean waves."}'

            curl -X POST "https://api.shutterstock.com/v2/images/search/suggestions" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const body = {
              "text": "The beach is a wonderful place to visit. It has beautiful sand and ocean waves."
            };

            imagesApi.getImageKeywordSuggestions(body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const keywordSuggestionBody = {
              "body": {
                "text": "The beach is a wonderful place to visit. It has beautiful sand and ocean waves.",
              },
            };

            sstk.images.getImageKeywordSuggestions(keywordSuggestionBody)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const keywordSuggestionBody: ImagesApiMethodsParams["getImageKeywordSuggestions"] = {
              "body": {
                "text": "The beach is a wonderful place to visit. It has beautiful sand and ocean waves.",
              },
            };

            sstk.images.getImageKeywordSuggestions(keywordSuggestionBody)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $body = [
              "text" => "The beach is a wonderful place to visit. It has beautiful sand and ocean waves."
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/search/suggestions",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{"text": "The beach is a wonderful place to visit. It has beautiful sand and ocean waves."}' > data.json

            shutterstock images get-image-keyword-suggestions data.json
  /v2/images/updated:
    get:
      description: This endpoint lists images that have been updated in the specified time period to update content management systems (CMS) or digital asset management (DAM) systems. In most cases, use the `interval` parameter to show images that were updated recently, but you can also use the `start_date` and `end_date` parameters to specify a range of no more than three days. Do not use the `interval` parameter with either `start_date` or `end_date`.
      operationId: getUpdatedImages
      parameters:
        - description: Show images that were added, deleted, or edited; by default, the endpoint returns images that were updated in any of these ways
          example: addition
          in: query
          name: type
          schema:
            items:
              enum:
                - addition
                - deletion
                - edit
              type: string
            type: array
        - description: Show images updated on or after the specified date
          example: 2021-03-29
          in: query
          name: start_date
          schema:
            format: date
            type: string
        - description: Show images updated before the specified date
          example: 2021-03-29
          in: query
          name: end_date
          schema:
            format: date
            type: string
        - description: Show images updated in the specified time period, where the time period is an interval (like SQL INTERVAL) such as 1 DAY, 6 HOUR, or 30 MINUTE; the default is 1 HOUR, which shows images that were updated in the hour preceding the request
          in: query
          name: interval
          schema:
            default: 1 HOUR
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 100
            maximum: 2000
            minimum: 1
            type: integer
        - description: Sort order
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/UpdatedMediaDataList/example"
              schema:
                $ref: "#/components/schemas/UpdatedMediaDataList"
          description: OK
      security:
        - basic: []
        - customer_accessCode: []
      summary: List updated images
      tags:
        - images
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/images/updated" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "interval=30 MINUTE"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const imagesApi = new sstk.ImagesApi();

            const queryParams = {
              "interval": "30 MINUTE"
            };

            imagesApi.getUpdatedImages(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "interval": "30 MINUTE",
            };

            sstk.images.getUpdatedImages(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: ImagesApiMethodsParams["getUpdatedImages"] = {
              "interval": "30 MINUTE",
            };

            sstk.images.getUpdatedImages(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "interval" => "30 MINUTE"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/images/updated?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock images get-updated-images \
              --interval "30 MINUTE"
  "/v2/images/{id}":
    get:
      description: This endpoint shows information about an image, including a URL to a preview image and the sizes that it is available in.
      operationId: getImage
      parameters:
        - description: Image ID
          example: "465011609"
          in: path
          name: id
          required: true
          schema:
            format: asset-id
            type: string
        - description: Language for the keywords and categories in the response
          example: es
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Amount of detail to render in the response
          in: query
          name: view
          schema:
            default: full
            enum:
              - minimal
              - full
            type: string
        - description: The ID of the search that is related to this request
          example: 00000000-0000-0000-0000-000000000000
          in: query
          name: search_id
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/Image/example"
              schema:
                $ref: "#/components/schemas/Image"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get details about images
      tags:
        - images
      x-code-samples:
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: ImagesApiMethodsParams["getImage"] = {
              "id": "465011609",
            };

            sstk.images.getImage(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
  "/v2/images/{id}/similar":
    get:
      description: This endpoint returns images that are visually similar to an image that you specify.
      operationId: listSimilarImages
      parameters:
        - description: Image ID
          example: "465011609"
          in: path
          name: id
          required: true
          schema:
            pattern: ^([1-9]\d*)|(U[a-zA-Z0-9]+)$
            type: string
        - description: Language for the keywords and categories in the response
          example: es
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 500
            minimum: 1
            type: integer
        - description: Amount of detail to render in the response
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/ImageSearchResults/example"
              schema:
                $ref: "#/components/schemas/ImageSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List similar images
      tags:
        - images
      x-code-samples:
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock from "shutterstock-api";
            import type { ImagesApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: ImagesApiMethodsParams["getSimilarImages"] = {
              "id": "465011609",
            };

            sstk.images.getSimilarImages(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
  /v2/oauth/access_token:
    post:
      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.
      operationId: createAccessToken
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  client_id: 141024g14g28104gff1h
            schema:
              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
                expires:
                  default: false
                  description: Whether or not the token expires, expiring tokens come with a refresh_token to renew the access_token
                  type: boolean
                grant_type:
                  description: "Grant type: authorization_code generates user tokens, client_credentials generates short-lived client grants"
                  enum:
                    - authorization_code
                    - client_credentials
                    - refresh_token
                  type: string
                realm:
                  default: customer
                  description: User type to be authorized (usually 'customer')
                  enum:
                    - customer
                    - contributor
                  type: string
                refresh_token:
                  description: Pass this along with grant_type=refresh_token to get a fresh access token
                  type: string
              required:
                - client_id
                - grant_type
              type: object
          application/x-www-form-urlencoded:
            examples:
              default:
                value:
                  client_id: 141024g14g28104gff1h
            schema:
              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
                expires:
                  default: "false"
                  description: Whether or not the token expires, expiring tokens come with a refresh_token to renew the access_token
                  enum:
                    - "true"
                    - "false"
                  type: string
                grant_type:
                  description: "Grant type: authorization_code generates user tokens, client_credentials generates short-lived client grants"
                  enum:
                    - authorization_code
                    - client_credentials
                    - refresh_token
                  type: string
                realm:
                  default: customer
                  description: User type to be authorized (usually 'customer')
                  enum:
                    - customer
                    - contributor
                  type: string
                refresh_token:
                  description: Pass this along with grant_type=refresh_token to get a fresh access token
                  type: string
              required:
                - client_id
                - grant_type
              type: object
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/OauthAccessTokenResponse/example"
              schema:
                $ref: "#/components/schemas/OauthAccessTokenResponse"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: Get access tokens
      tags:
        - oauth
      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_v1--nodejs
          source: |
            const axios = require("axios");

            const body = {
              "client_id": clientId,
              "client_secret": clientSecret,
              "grant_type": "authorization_code",
              "code": code,
            };

            axios.post("https://api.shutterstock.com/v2/oauth/access_token", body)
              .then((res) => {
                console.log(res);
              });
        - lang: javascript_v2--nodejs
          source: |
            const axios = require("axios");

            const requestTokenBody = {
              "client_id": clientId,
              "client_secret": clientSecret,
              "grant_type": "authorization_code",
              "code": code,
            };

            axios.post("https://api.shutterstock.com/v2/oauth/access_token", requestTokenBody)
              .then((res) => {
                console.log(res);
              });
        - lang: typescript_v2--nodejs
          source: |
            const axios = require("axios");

            const requestTokenBody = {
              "client_id": clientId,
              "client_secret": clientSecret,
              "grant_type": "authorization_code",
              "code": code,
            };

            axios.post("https://api.shutterstock.com/v2/oauth/access_token", requestTokenBody)
              .then((res) => {
                console.log(res);
              });
        - lang: php
          source: |
            $body = [
              "client_id" => $clientId,
              "client_secret" => $clientSecret,
              "grant_type" => "authorization_code",
              "code" => $code
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/oauth/access_token",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Content-Type: application/json",
              ],
              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);
        - lang: bash
          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"
  /v2/oauth/authorize:
    get:
      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.
      operationId: authorize
      parameters:
        - description: Client ID (Consumer Key) of your application
          example: 6d097450b209c6dcd859
          in: query
          name: client_id
          required: true
          schema:
            type: string
        - description: User type to be authorized (usually 'customer')
          example: customer
          in: query
          name: realm
          schema:
            default: customer
            enum:
              - customer
              - contributor
            type: string
        - description: The callback URI to send the request to after authorization; must use a host name that is registered with your application
          example: localhost
          in: query
          name: redirect_uri
          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'
          example: code
          in: query
          name: response_type
          required: true
          schema:
            enum:
              - code
            type: string
        - description: Space-separated list of scopes to be authorized
          example: user.view
          in: query
          name: scope
          schema:
            default: user.view
            type: string
        - description: Unique value used by the calling app to verify the request
          example: "1540290465000"
          in: query
          name: state
          required: true
          schema:
            type: string
      responses:
        "302":
          content:
            text/html:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/AuthorizeResponse/example"
              schema:
                $ref: "#/components/schemas/AuthorizeResponse"
          description: Redirect user to authenticate with Shutterstock
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: Authorize applications
      tags:
        - oauth
      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_v1--nodejs
          source: |
            const axios = require("axios");

            axios.get("https://api.shutterstock.com/v2/oauth/authorize", {
              "params": {
                "scope": "licenses.create licenses.view purchases.view",
                "state": "demo_" + Math.round(new Date() / 1000),
                "response_type": "code",
                "redirect_uri": "http://localhost:3000/callback",
                "client_id": clientId
              },
              // Don't follow the redirect because this program is not running in a browser
              "maxRedirects": 0,
            })
              .catch(({ response }) => {
                // HTTP 302: Redirect
                console.log(response.data);
              });
        - lang: javascript_v2--nodejs
          source: |
            const axios = require("axios");

            axios.get("https://api.shutterstock.com/v2/oauth/authorize", {
              "params": {
                "scope": "licenses.create licenses.view purchases.view",
                "state": "demo_" + Math.round(new Date() / 1000),
                "response_type": "code",
                "redirect_uri": "http://localhost:3000/callback",
                "client_id": clientId,
              },
              // Don't follow the redirect because this program is not running in a browser
              "maxRedirects": 0,
            })
              .catch(({ response }) => {
                // HTTP 302: Redirect
                console.log(response.data);
              });
        - lang: typescript_v2--nodejs
          source: |
            const axios = require("axios");

            axios.get("https://api.shutterstock.com/v2/oauth/authorize", {
              "params": {
                "scope": "licenses.create licenses.view purchases.view",
                "state": "demo_" + Math.round(new Date() / 1000),
                "response_type": "code",
                "redirect_uri": "http://localhost:3000/callback",
                "client_id": clientId,
              },
              // Don't follow the redirect because this program is not running in a browser
              "maxRedirects": 0,
            })
              .catch(({ response }) => {
                // HTTP 302: Redirect
                console.log(response.data);
              });
        - 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);
        - lang: bash
          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"
  /v2/sfx:
    get:
      description: This endpoint shows information about sound effects.
      operationId: getSfxListDetails
      parameters:
        - description: One or more sound effect IDs
          example:
            - "1110335168"
            - "465011609"
          in: query
          name: id
          required: true
          schema:
            items:
              format: asset-id
              type: string
            maxItems: 500
            type: array
        - description: Amount of detail to render in the response
          example: minimal
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
        - description: Language for the keywords and categories in the response
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Which library to fetch from
          example: shutterstock
          in: query
          name: library
          schema:
            enum:
              - shutterstock
              - premier
              - premiumbeat
            type: string
        - description: The ID of the search that is related to this request
          example: 00000000-0000-0000-0000-000000000000
          in: query
          name: search_id
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/SFXDataList/example"
              schema:
                $ref: "#/components/schemas/SFXDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List details about sound effects
      tags:
        - sound_effects
  /v2/sfx/licenses:
    get:
      description: This endpoint lists existing licenses.
      operationId: getSfxLicenseList
      parameters:
        - description: Show licenses for the specified sound effects ID
          example: "12345678"
          in: query
          name: sfx_id
          schema:
            pattern: ^[1-9]\d*$
            type: string
            x-pattern-description: A number that does not start with 0
        - description: Show sound effects that are available with the specified license, such as `standard` or `enhanced`; prepending a `-` sign excludes results from that license
          example: standard
          in: query
          name: license
          schema:
            pattern: ^.+$
            type: string
            x-pattern-description: Minimum 1 character
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 200
            minimum: 1
            type: integer
        - description: Sort order
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
        - description: Filter licenses by username of licensee
          example: aUniqueUsername
          in: query
          name: username
          schema:
            pattern: ^.+$
            type: string
            x-pattern-description: Minimum 1 character
        - description: Show licenses created on or after the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: start_date
          schema:
            format: date-time
            type: string
          x-relationships:
            - in: query
              name: end_date
              relationship: <=
        - description: Show licenses created before the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: end_date
          schema:
            format: date-time
            type: string
          x-relationships:
            - in: query
              name: start_date
              relationship: ">"
        - description: Filter by the license ID
          in: query
          name: license_id
          schema:
            pattern: ^.+$
            type: string
            x-pattern-description: Minimum 1 character
        - description: Filter licenses by download availability
          in: query
          name: download_availability
          schema:
            default: all
            enum:
              - all
              - downloadable
              - non_downloadable
            type: string
        - description: Set to true to see license history for all members of your team.
          in: query
          name: team_history
          schema:
            default: false
            type: boolean
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/DownloadHistoryDataList/example"
              schema:
                $ref: "#/components/schemas/DownloadHistoryDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.view
      summary: List sound effects licenses
      tags:
        - sound_effects
    post:
      description: This endpoint licenses sounds effect assets.
      operationId: licensesSFX
      parameters: []
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/LicenseSFXRequest/example"
            schema:
              $ref: "#/components/schemas/LicenseSFXRequest"
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/LicenseSFXResultDataList/example"
              schema:
                $ref: "#/components/schemas/LicenseSFXResultDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: License sound effects
      tags:
        - sound_effects
  "/v2/sfx/licenses/{id}/downloads":
    post:
      description: This endpoint redownloads sound effects that you have already received a license for. The download links in the response are valid for 8 hours.
      operationId: downloadSfx
      parameters:
        - description: License ID
          example: "123"
          in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    url: http://download.dev.shutterstock.com/gatekeeper/abc/shutterstock_id.wav
              schema:
                $ref: "#/components/schemas/SfxUrl"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.view
      summary: Download sound effects
      tags:
        - sound_effects
  /v2/sfx/search:
    get:
      description: This endpoint searches for sound effects. If you specify more than one search parameter, the API uses an AND condition.
      operationId: searchSFX
      parameters:
        - description: Show sound effects added on the specified date
          example: 2022-09-23
          in: query
          name: added_date
          schema:
            format: date
            type: string
        - description: Show sound effects added on or after the specified date
          example: 2021-03-29
          in: query
          name: added_date_start
          schema:
            format: date
            type: string
        - description: Show sound effects added before the specified date
          example: 2021-03-29
          in: query
          name: added_date_end
          schema:
            format: date
            type: string
        - description: Show sound effects with the specified duration in seconds
          example: 180
          in: query
          name: duration
          schema:
            type: integer
            uniqueItems: true
        - description: Show sound effects with the specified duration or longer in seconds
          example: 30
          in: query
          name: duration_from
          schema:
            type: integer
            uniqueItems: true
        - description: Show sound effects with the specified duration or shorter in seconds
          example: 180
          in: query
          name: duration_to
          schema:
            type: integer
            uniqueItems: true
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
            uniqueItems: true
        - description: Number of results per page
          example: 1
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 500
            minimum: 1
            type: integer
            uniqueItems: true
        - description: One or more search terms separated by spaces
          example: drum
          in: query
          name: query
          schema:
            type: string
            uniqueItems: true
        - description: Enable or disable safe search
          in: query
          name: safe
          schema:
            default: true
            type: boolean
        - description: Sort by
          example: popular
          in: query
          name: sort
          schema:
            default: popular
            enum:
              - popular
              - newest
              - relevance
              - random
              - oldest
            type: string
            uniqueItems: true
        - description: Amount of detail to render in the response
          example: full
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
            uniqueItems: true
        - description: Set query and result language (uses Accept-Language header if not set)
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/SFXSearchResults"
              schema:
                $ref: "#/components/schemas/SFXSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "503":
          description: Service Unavailable
      security:
        - basic: []
        - customer_accessCode: []
      summary: Search for sound effects
      tags:
        - sound_effects
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/sfx/search" \
              --header "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "query=air" \
              --data-urlencode "duration_from=60"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const sfxApi = new sstk.SFXApi();

            const queryParams = {
              "query": "air",
              "duration_from": 60
            };

            sfxApi.searchTracks(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "query": "bluegrass",
              "duration_from": 60,
              "moods": ["uplifting"],
            };

            sstk.sfx.searchTracks(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { SfxApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: SfxApiMethodsParams["searchTracks"] = {
              "query": "air",
              "duration_from": 60,
            };

            sstk.sfx.searchTracks(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "query" => "air",
              "duration_from" => 60
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/sfx/search?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock sfx search-tracks \
              --query air \
              --duration-from 60
  "/v2/sfx/{id}":
    get:
      description: This endpoint shows information about a sound effect.
      operationId: getSfxDetails
      parameters:
        - description: Audio track ID
          example: "442583"
          in: path
          name: id
          required: true
          schema:
            type: integer
        - description: Language for the keywords and categories in the response
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Amount of detail to render in the response
          example: full
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
        - description: Which library to fetch from
          example: shutterstock
          in: query
          name: library
          schema:
            enum:
              - shutterstock
              - premier
              - premiumbeat
            type: string
        - description: The ID of the search that is related to this request
          example: 00000000-0000-0000-0000-000000000000
          in: query
          name: search_id
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/SFX/example"
              schema:
                $ref: "#/components/schemas/SFX"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "503":
          description: Service Unavailable
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get details about sound effects
      tags:
        - sound_effects
  /v2/test:
    get:
      operationId: echo
      parameters:
        - description: Text to echo
          in: query
          name: text
          schema:
            default: ok
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/TestEcho/example"
              schema:
                $ref: "#/components/schemas/TestEcho"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: Echo text
      tags:
        - test
  /v2/test/validate:
    get:
      operationId: validate
      parameters:
        - description: Integer ID
          example: 123
          in: query
          name: id
          required: true
          schema:
            type: integer
        - description: List of tags
          in: query
          name: tag
          schema:
            items:
              type: string
            type: array
        - description: User agent
          in: header
          name: user-agent
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/TestValidate/example"
              schema:
                $ref: "#/components/schemas/TestValidate"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: Validate input
      tags:
        - test
  /v2/user:
    get:
      operationId: getUser
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/UserDetails/example"
              schema:
                $ref: "#/components/schemas/UserDetails"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - user.view
      summary: Get user details
      tags:
        - users
  /v2/user/access_token:
    get:
      operationId: getAccessToken
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/AccessTokenDetails/example"
              schema:
                $ref: "#/components/schemas/AccessTokenDetails"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode: []
      summary: Get access token details
      tags:
        - users
  /v2/user/subscriptions:
    get:
      operationId: getUserSubscriptionList
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/SubscriptionDataList/example"
              schema:
                $ref: "#/components/schemas/SubscriptionDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - purchases.view
      summary: List user subscriptions
      tags:
        - users
  /v2/videos:
    get:
      description: This endpoint lists information about one or more videos, including the aspect ratio and URLs to previews.
      operationId: getVideoList
      parameters:
        - description: One or more video IDs
          example:
            - "639703"
            - "993721"
          in: query
          name: id
          required: true
          schema:
            items:
              format: asset-id
              type: string
            maxItems: 500
            minItems: 1
            type: array
        - description: Amount of detail to render in the response
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
        - description: The ID of the search that is related to this request
          example: 00000000-0000-0000-0000-000000000000
          in: query
          name: search_id
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/VideoDataList/example"
              schema:
                $ref: "#/components/schemas/VideoDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List videos
      tags:
        - videos
  /v2/videos/categories:
    get:
      description: This endpoint lists the categories (Shutterstock-assigned genres) that videos can belong to.
      operationId: listVideoCategories
      parameters:
        - description: Language for the keywords and categories in the response
          example: es
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CategoryDataList/example"
              schema:
                $ref: "#/components/schemas/CategoryDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List video categories
      tags:
        - videos
      x-code-samples:
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock, { Language } from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: VideosApiMethodsParams["listVideoCategories"] = {
              "language": Language.Es,
            };

            sstk.videos.listVideoCategories(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
  /v2/videos/collections:
    get:
      description: This endpoint lists your collections of videos and their basic attributes.
      operationId: getVideoCollectionList
      parameters:
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 100
            maximum: 150
            minimum: 1
            type: integer
        - description: Which sharing information to include in the response, such as a URL to the collection
          example: share_code
          in: query
          name: embed
          schema:
            items:
              enum:
                - share_code
                - share_url
              type: string
            type: array
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CollectionDataList/example"
              schema:
                $ref: "#/components/schemas/CollectionDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - collections.view
      summary: List video collections
      tags:
        - videos
    post:
      description: This endpoint creates one or more collections (clipboxes). To add videos to collections, use `POST /v2/videos/collections/{id}/items`.
      operationId: createVideoCollection
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/CollectionCreateRequest/example"
            schema:
              $ref: "#/components/schemas/CollectionCreateRequest"
        description: Collection metadata
        required: true
      responses:
        "201":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CollectionCreateResponse/example"
              schema:
                $ref: "#/components/schemas/CollectionCreateResponse"
          description: Successfully created video collection
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - collections.edit
      summary: Create video collections
      tags:
        - videos
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "name": "New collection name"
            }'

            curl -X POST "https://api.shutterstock.com/v2/videos/collections" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const videosApi = new sstk.VideosApi();

            const body = {
              "name": "New collection name"
            };

            videosApi.createVideoCollection(body)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const createBody = {
              "body": {
                "name": "New collection name",
              },
            };

            sstk.videos.createVideoCollection(createBody)
              .then(({ data }) => {
                const newCollectionId = data.id;
                console.log("Created", newCollectionId);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const createBody: VideosApiMethodsParams["createVideoCollection"] = {
              "body": {
                "name": "New collection name",
              },
            };

            sstk.videos.createVideoCollection(createBody)
              .then(({ data }) => {
                const newCollectionId = data.id;
                console.log("Created", newCollectionId);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $body = [
              "name" => "New collection name"
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/videos/collections",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "name": "New collection name"
            }' > data.json

            shutterstock videos create-video-collection data.json
  /v2/videos/collections/featured:
    get:
      description: This endpoint lists featured video collections and a name and cover video for each collection.
      operationId: getFeaturedVideoCollectionList
      parameters:
        - description: What information to include in the response, such as a URL to the collection
          example: share_url
          in: query
          name: embed
          schema:
            enum:
              - share_url
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/FeaturedCollectionDataList/example"
              schema:
                $ref: "#/components/schemas/FeaturedCollectionDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List featured video collections
      tags:
        - videos
  "/v2/videos/collections/featured/{id}":
    get:
      description: This endpoint gets more detailed information about a featured video collection, including its cover video and timestamps for its creation and most recent update. To get the videos, use `GET /v2/videos/collections/featured/{id}/items`.
      operationId: getFeaturedVideoCollection
      parameters:
        - description: Collection ID
          example: "136351027"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: What information to include in the response, such as a URL to the collection
          in: query
          name: embed
          schema:
            enum:
              - share_url
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/FeaturedCollection/example"
              schema:
                $ref: "#/components/schemas/FeaturedCollection"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Featured collection not found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get the details of featured video collections
      tags:
        - videos
  "/v2/videos/collections/featured/{id}/items":
    get:
      description: This endpoint lists the IDs of videos in a featured collection and the date that each was added.
      operationId: getFeaturedVideoCollectionItems
      parameters:
        - description: Collection ID
          example: "136351027"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 100
            maximum: 150
            minimum: 1
            type: integer
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/VideoCollectionItemDataList/example"
              schema:
                $ref: "#/components/schemas/VideoCollectionItemDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Featured collection not found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get the contents of featured video collections
      tags:
        - videos
  "/v2/videos/collections/{id}":
    delete:
      description: This endpoint deletes a collection.
      operationId: deleteVideoCollection
      parameters:
        - description: The ID of the collection to delete
          example: "17555176"
          in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "204":
          description: Successfully deleted collection
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Delete video collections
      tags:
        - videos
      x-code-samples:
        - lang: shell
          source: |-
            curl -X DELETE "https://api.shutterstock.com/v2/videos/collections/17555176" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const videosApi = new sstk.VideosApi();

            const collectionId = "17555176";

            videosApi.deleteVideoCollection(collectionId)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "17555176";

            const deleteVideoCollectionParams = {
              "id": collectionId,
            };

            sstk.videos.deleteVideoCollection(deleteVideoCollectionParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "17555176";

            const deleteVideoCollectionParams: VideosApiMethodsParams["deleteVideoCollection"] = {
              "id": collectionId,
            };

            sstk.videos.deleteVideoCollection(deleteVideoCollectionParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/videos/collections/17555176",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock videos delete-video-collection 17555176
    get:
      description: This endpoint gets more detailed information about a collection, including the timestamp for its creation and the number of videos in it. To get the videos in collections, use GET /v2/videos/collections/{id}/items.
      operationId: getVideoCollection
      parameters:
        - description: The ID of the collection to return
          example: "17555176"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Which sharing information to include in the response, such as a URL to the collection
          in: query
          name: embed
          schema:
            items:
              enum:
                - share_code
                - share_url
              type: string
            type: array
        - description: Code to retrieve a shared collection
          in: query
          name: share_code
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/Collection/example"
              schema:
                $ref: "#/components/schemas/Collection"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.view
      summary: Get the details of video collections
      tags:
        - videos
    post:
      description: This endpoint sets a new name for a collection.
      operationId: renameVideoCollection
      parameters:
        - description: The ID of the collection to rename
          example: "17555176"
          in: path
          name: id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/CollectionUpdateRequest/example"
            schema:
              $ref: "#/components/schemas/CollectionUpdateRequest"
        description: The new name for the collection
        required: true
      responses:
        "204":
          description: Successfully updated collection
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Rename video collections
      tags:
        - videos
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "name": "Updated collection name"
            }'

            curl -X POST "https://api.shutterstock.com/v2/videos/collections/17555176" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const videosApi = new sstk.VideosApi();

            const collectionId = "186765119";

            const body = {
              "name": "My new collection name"
            };

            videosApi.renameVideoCollection(collectionId, body)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "186765119";

            const renameCollectionBody = {
              "id": collectionId,
              "body": {
                "name": "My new collection name for video collection",
              },
            };

            sstk.videos.renameVideoCollection(renameCollectionBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "186765119";

            const renameCollectionBody: VideosApiMethodsParams["renameVideoCollection"] = {
              "id": collectionId,
              "body": {
                "name": "My new collection name for video collection",
              },
            };

            sstk.videos.renameVideoCollection(renameCollectionBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $body = [
              "name" => "Updated collection name"
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/videos/collections/17555176",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "name": "Updated collection name"
            }' > data.json

            shutterstock videos rename-video-collection 17555176 data.json
  "/v2/videos/collections/{id}/items":
    delete:
      description: This endpoint removes one or more videos from a collection.
      operationId: deleteVideoCollectionItems
      parameters:
        - description: The ID of the Collection from which items will be deleted
          example: "17555176"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: One or more video IDs to remove from the collection
          in: query
          name: item_id
          schema:
            items:
              type: string
            type: array
      responses:
        "204":
          description: Successfully removed collection items
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Remove videos from collections
      tags:
        - videos
      x-code-samples:
        - lang: shell
          source: |-
            curl -X DELETE "https://api.shutterstock.com/v2/videos/collections/17555176/items?item_id=495863218" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const videosApi = new sstk.VideosApi();

            const collectionId = "17555176";

            // Array of videos to remove
            const videosToRemove = {
              "item_id": [
                "10120264"
              ]
            };

            videosApi.deleteVideoCollectionItems(collectionId, videosToRemove)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "17555176";
            const itemToDelete = "10120264";

            const deleteVideoParams = {
              "id": collectionId,
              "item_id": [
                itemToDelete,
              ],
            };

            sstk.videos.deleteVideoCollectionItems(deleteVideoParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "17555176";
            const itemToDelete = "10120264";

            const deleteVideoParams: VideosApiMethodsParams["deleteVideoCollectionItems"] = {
              "id": collectionId,
              "item_id": [
                itemToDelete,
              ],
            };

            sstk.videos.deleteVideoCollectionItems(deleteVideoParams)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/videos/collections/17555176/items?item_id=495863218",
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_CUSTOMREQUEST => "DELETE",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock videos delete-video-collection-items 17555176 \
              --item-id 495863218
    get:
      description: This endpoint lists the IDs of videos in a collection and the date that each was added.
      operationId: getVideoCollectionItems
      parameters:
        - description: Collection ID
          example: "17555176"
          in: path
          name: id
          required: true
          schema:
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 100
            maximum: 150
            minimum: 1
            type: integer
        - description: Code to retrieve the contents of a shared collection
          in: query
          name: share_code
          schema:
            type: string
        - description: Sort order
          in: query
          name: sort
          schema:
            default: oldest
            enum:
              - newest
              - oldest
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/CollectionItemDataList/example"
              schema:
                $ref: "#/components/schemas/CollectionItemDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.view
      summary: Get the contents of video collections
      tags:
        - videos
    post:
      description: This endpoint adds one or more videos to a collection by video IDs.
      operationId: addVideoCollectionItems
      parameters:
        - description: The ID of the collection to which items should be added
          example: "17555176"
          in: path
          name: id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  items:
                    - id: "10120264"
                    - id: "24419024"
            schema:
              $ref: "#/components/schemas/CollectionItemRequest"
        description: Array of video IDs to add to the collection
        required: true
      responses:
        "204":
          description: Successfully added collection items
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      security:
        - customer_accessCode:
            - collections.edit
      summary: Add videos to collections
      tags:
        - videos
      x-code-samples:
        - lang: shell
          source: |-
            DATA='{
              "items": [
                {
                  "id": "10120264"
                },
                {
                  "id": "24419024"
                }
              ]
            }'

            curl -X POST "https://api.shutterstock.com/v2/videos/collections/17555176/items" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const videosApi = new sstk.VideosApi();

            const collectionId = "17555176"; // Collection ID

            // Array of videos to add
            const body = {
              "items": [
                {
                  "id": "10120264",
                  "media_type": "video"
                }
              ]
            };

            videosApi.addImageCollectionItems(collectionId, body)
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "17555176"; // Collection ID

            const addVideoBody = {
              "id": collectionId,
              "body": {
                "items": [
                  {
                    "id": "10120264",
                    "media_type": "video",
                  },
                ],
              },
            };

            sstk.videos.addVideoCollectionItems(addVideoBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const collectionId = "17555176"; // Collection ID

            const addVideoBody: VideosApiMethodsParams["addVideoCollectionItems"] = {
              "id": collectionId,
              "body": {
                "items": [
                  {
                    "id": "10120264",
                    "media_type": "video",
                  },
                ],
              },
            };

            sstk.videos.addVideoCollectionItems(addVideoBody)
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |-
            $body = [
              "items" => [
                [
                  "id" => "10120264"
                ],
                [
                  "id" => "24419024"
                ]
              ]
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/videos/collections/17555176/items",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "items": [
                {
                  "id": "10120264"
                },
                {
                  "id": "24419024"
                }
              ]
            }' > data.json

            shutterstock videos add-video-collection-items 17555176 data.json
  /v2/videos/licenses:
    get:
      description: This endpoint lists existing licenses.
      operationId: getVideoLicenseList
      parameters:
        - description: Show licenses for the specified video ID
          example: "12345678"
          in: query
          name: video_id
          schema:
            pattern: ^[1-9]\d*$
            type: string
            x-pattern-description: A number that does not start with 0
        - description: Show videos that are available with the specified license, such as `standard` or `enhanced`; prepending a `-` sign excludes results from that license
          example: standard
          in: query
          name: license
          schema:
            pattern: ^.+$
            type: string
            x-pattern-description: Minimum 1 character
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 200
            minimum: 1
            type: integer
        - description: Sort by oldest or newest videos first
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
        - description: Filter licenses by username of licensee
          example: aUniqueUsername
          in: query
          name: username
          schema:
            type: string
        - description: Show licenses created on or after the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: start_date
          schema:
            format: date-time
            type: string
          x-relationships:
            - in: query
              name: end_date
              relationship: <=
        - description: Show licenses created before the specified date
          example: 2021-03-29T13:25:13.521Z
          in: query
          name: end_date
          schema:
            format: date-time
            type: string
          x-relationships:
            - in: query
              name: start_date
              relationship: ">"
        - description: Filter licenses by download availability
          in: query
          name: download_availability
          schema:
            default: all
            enum:
              - all
              - downloadable
              - non_downloadable
            type: string
        - description: Set to true to see license history for all members of your team.
          in: query
          name: team_history
          schema:
            default: false
            type: boolean
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    data:
                      - download_time: 2018-05-24T14:26:25-04:00
                        id: e121
                        is_downloadable: true
                        license: footage_premier
                        metadata:
                          customer_id: "12345"
                          geo_location: US
                          number_viewed: "15"
                          search_term: dog
                        subscription_id: s12345678
                        user:
                          username: myusername
                        video:
                          format:
                            size: sd
                          id: "2140697"
                    page: 1
                    per_page: 20
              schema:
                $ref: "#/components/schemas/DownloadHistoryDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.view
      summary: List video licenses
      tags:
        - videos
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/videos/licenses" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              -G \
              --data-urlencode "start_date=2016-10-03T01:25:13.521Z" \
              --data-urlencode "end_date=2016-10-04T13:25:13.521Z" \
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const videosApi = new sstk.VideosApi();

            const queryParams = {
              "start_date": "2016-10-03T01:25:13.521Z",
              "end_date": "2016-10-04T13:25:13.521Z"
            };

            videosApi.getVideoLicenseList(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams = {
              "start_date": lastWeek,
              "end_date": today,
            };

            sstk.images.getImageLicenseList(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const today = new Date();
            const lastWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);

            const queryParams: VideosApiMethodsParams["getVideoLicenseList"] = {
              "start_date": lastWeek,
              "end_date": today,
            };

            sstk.images.getImageLicenseList(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "start_date" => "2016-10-03T01:25:13.521Z",
              "end_date" => "2016-10-04T13:25:13.521Z"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/videos/licenses" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock videos get-video-license-list \
              --start-date "2021-01-03T01:25:13.521Z" \
              --end-date "2021-05-04T13:25:13.521Z"
    post:
      description: This endpoint gets licenses for one or more videos. You must specify the video IDs in the body parameter and the size and subscription ID either in the query parameter or with each video ID in the body parameter. Values in the body parameter override values in the query parameters. The download links in the response are valid for 8 hours.
      operationId: licenseVideos
      parameters:
        - description: The subscription ID to use for licensing
          example: s12345678
          in: query
          name: subscription_id
          schema:
            type: string
        - description: The size of the video to license
          in: query
          name: size
          schema:
            default: web
            enum:
              - web
              - sd
              - hd
              - 4k
            type: string
        - description: The Search ID that led to this licensing event
          in: query
          name: search_id
          schema:
            type: string
      requestBody:
        content:
          application/json:
            examples:
              default:
                value:
                  $ref: "#/components/schemas/LicenseVideoRequest/example"
            schema:
              $ref: "#/components/schemas/LicenseVideoRequest"
        description: List of videos to request licenses for and information about each license transaction; these values override the defaults in the query parameters
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/LicenseVideoResultDataList/example"
              schema:
                $ref: "#/components/schemas/LicenseVideoResultDataList"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.create
            - purchases.view
      summary: License videos
      tags:
        - videos
      x-code-samples:
        - lang: shell
          source: |
            DATA='{
              "videos": [
                {
                  "video_id": "2140697",
                  "subscription_id": "s12345678",
                  "size": "hd"
                },
                {
                  "video_id": "5613314",
                  "subscription_id": "s12345678",
                  "size": "4k"
                }
              ]
            }'

            curl -X POST "https://api.shutterstock.com/v2/videos/licenses" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const videosApi = new sstk.VideosApi();

            const body = {
              "videos": [
                {
                  "subscription_id": "s12345678",
                  "video_id": "419235589"
                },
                {
                  "subscription_id": "s12345678",
                  "video_id": "1079756147"
                }
              ]
            };

            videosApi.licenseVideos(body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams = {
              "body": {
                "videos": [
                  {
                    "subscription_id": "s12345678",
                    "video_id": "419235589",
                    "size": "hd",
                  },
                  {
                    "subscription_id": "s12345678",
                    "video_id": "1079756147",
                    "size": "hd",
                  },
                ],
              },
            };

            sstk.videos.licenseVideos(licenseParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock, { LicenseVideoSizeEnum } from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseParams: VideosApiMethodsParams["licenseVideos"] = {
              "body": {
                "videos": [
                  {
                    "subscription_id": "s12345678",
                    "video_id": "419235589",
                    "size": LicenseVideoSizeEnum.Hd,
                  },
                  {
                    "subscription_id": "s12345678",
                    "video_id": "1079756147",
                    "size": LicenseVideoSizeEnum.Hd,
                  },
                ],
              },
            };

            sstk.videos.licenseVideos(licenseParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $body = [
              "videos" => [
                [
                  "video_id" => "2140697",
                  "subscription_id" => "s12345678",
                  "size" => "hd"
                ],
                [
                  "video_id" => "5613314",
                  "subscription_id" => "s12345678",
                  "size" => "4k"
                ]
              ]
            ];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/videos/licenses",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{
              "videos": [
                {
                  "video_id": "2140697",
                  "subscription_id": "s12345678",
                  "size": "hd"
                },
                {
                  "video_id": "5613314",
                  "subscription_id": "s12345678",
                  "size": "4k"
                }
              ]
            }' > data.json

            shutterstock videos license-videos \
              data.json
  "/v2/videos/licenses/{id}/downloads":
    post:
      description: This endpoint redownloads videos that you have already received a license for.
      operationId: downloadVideos
      parameters:
        - description: The license ID of the item to (re)download. The download links in the response are valid for 8 hours.
          example: e123
          in: path
          name: id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            example:
              $ref: "#/components/schemas/RedownloadVideo/example"
            schema:
              $ref: "#/components/schemas/RedownloadVideo"
        description: Information about the videos to redownload
        required: true
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    url: https://download1.shutterstock.com/gatekeeper/W3siZSI6MTUzMzMzMzUzMCwiayI6InZpZGVvLzM5NjU4ODEvaGQubW92IiwibSI6MSwiZCI6InNodXR0ZXJzdG9jay1tZWRpYSJ9LCJjZ2lvRU14T09hNWZGTHZsN21iTWVPRVQ3MFEiXQ/shutterstock_v3965881.mov
              schema:
                $ref: "#/components/schemas/Url"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - customer_accessCode:
            - licenses.view
      summary: Download videos
      tags:
        - videos
      x-code-samples:
        - lang: shell
          source: |
            DATA='{}'

            curl -X POST "https://api.shutterstock.com/v2/videos/licenses/e123/downloads" \
              -d "$DATA" \
              -H "Content-Type: application/json" \
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const videosApi = new sstk.VideosApi();

            const licenseId = "e123";

            const body = {};

            videosApi.downloadVideos(licenseId, body)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseId = "e123"; // license ID, not video ID

            const queryParams = {
              "id": licenseId,
              "body": {
                "size": "hd",
              },
            };

            sstk.videos.downloadVideos(queryParams)
              .then(({ data }) => {
                console.log(data.url);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock, { RedownloadVideoSizeEnum } from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const licenseId = "e123"; // license ID, not video ID

            const queryParams: VideosApiMethodsParams["downloadVideos"] = {
              "id": licenseId,
              "body": {
                "size": RedownloadVideoSizeEnum.Hd,
              },
            };

            sstk.videos.downloadVideos(queryParams)
              .then(({ data }) => {
                console.log(data.url);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $body = [];
            $encodedBody = json_encode($body);

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/videos/licenses/e123/downloads",
              CURLOPT_CUSTOMREQUEST => "POST",
              CURLOPT_POSTFIELDS => $encodedBody,
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN",
                "Content-Type: application/json"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            echo '{}' > data.json

            shutterstock videos download-videos e123 data.json
  /v2/videos/search:
    get:
      description: This endpoint searches for videos. If you specify more than one search parameter, the API uses an AND condition. Array parameters can be specified multiple times; in this case, the API uses an AND or an OR condition with those values, depending on the parameter. You can also filter search terms out in the `query` parameter by prefixing the term with NOT.
      operationId: searchVideos
      parameters:
        - description: Show videos added on the specified date
          example: 2020-05-29
          in: query
          name: added_date
          schema:
            format: date
            type: string
        - description: Show videos added on or after the specified date
          example: 2020-05-29
          in: query
          name: added_date_start
          schema:
            format: date
            type: string
        - description: Show videos added before the specified date
          example: 2020-05-29
          in: query
          name: added_date_end
          schema:
            format: date
            type: string
        - description: Show videos with the specified aspect ratio
          example: 4_3
          in: query
          name: aspect_ratio
          schema:
            enum:
              - 4_3
              - 16_9
              - nonstandard
            type: string
        - description: Show videos with the specified Shutterstock-defined category; specify a category name or ID
          in: query
          name: category
          schema:
            type: string
        - description: Show videos with the specified artist names or IDs
          example: "[12345678]"
          in: query
          name: contributor
          schema:
            items:
              type: string
            type: array
        - description: Show videos from contributors in one or more specified countries
          example: US
          in: query
          name: contributor_country
          schema:
            items:
              format: country-code-2
              type: string
            type: array
        - deprecated: true
          description: (Deprecated; use duration_from and duration_to instead) Show videos with the specified duration in seconds
          in: query
          name: duration
          schema:
            type: integer
        - description: Show videos with the specified duration or longer in seconds
          example: 60
          in: query
          name: duration_from
          schema:
            type: integer
        - description: Show videos with the specified duration or shorter in seconds
          example: 180
          in: query
          name: duration_to
          schema:
            type: integer
        - deprecated: true
          description: (Deprecated; use fps_from and fps_to instead) Show videos with the specified frames per second
          in: query
          name: fps
          schema:
            type: number
        - description: Show videos with the specified frames per second or more
          example: 24
          in: query
          name: fps_from
          schema:
            type: number
        - description: Show videos with the specified frames per second or fewer
          example: 60
          in: query
          name: fps_to
          schema:
            type: number
        - description: Hide results with potentially unsafe keywords
          in: query
          name: keyword_safe_search
          schema:
            default: true
            type: boolean
        - description: Set query and result language (uses Accept-Language header if not set)
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Show only videos with the specified license or licenses
          example:
            - commercial
            - editorial
          explode: true
          in: query
          name: license
          schema:
            items:
              default: commercial
              enum:
                - commercial
                - editorial
              type: string
            type: array
        - description: Show videos with each of the specified models
          example:
            - "442583"
            - "434750"
          explode: true
          in: query
          name: model
          schema:
            items:
              type: string
            type: array
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 500
            minimum: 0
            type: integer
        - description: Show videos that feature people of the specified age range
          example: 20s
          in: query
          name: people_age
          schema:
            enum:
              - infants
              - children
              - teenagers
              - 20s
              - 30s
              - 40s
              - 50s
              - 60s
              - older
            type: string
        - description: Show videos with people of the specified ethnicities
          example: hispanic
          in: query
          name: people_ethnicity
          schema:
            items:
              enum:
                - african
                - african_american
                - black
                - brazilian
                - chinese
                - caucasian
                - east_asian
                - hispanic
                - japanese
                - middle_eastern
                - native_american
                - pacific_islander
                - south_asian
                - southeast_asian
                - other
              type: string
            type: array
        - description: Show videos with people with the specified gender
          example: female
          in: query
          name: people_gender
          schema:
            enum:
              - male
              - female
              - both
            type: string
        - description: Show videos with the specified number of people
          example: 2
          in: query
          name: people_number
          schema:
            maximum: 4
            minimum: 0
            type: integer
        - description: Show only videos of people with a signed model release
          example: true
          in: query
          name: people_model_released
          schema:
            type: boolean
        - description: One or more search terms separated by spaces; you can use NOT to filter out videos that match a term
          example: dogs running on the beach
          in: query
          name: query
          schema:
            type: string
        - description: Show videos with the specified resolution
          example: 4k
          in: query
          name: resolution
          schema:
            enum:
              - 4k
              - standard_definition
              - high_definition
            type: string
        - description: Enable or disable safe search
          in: query
          name: safe
          schema:
            default: true
            type: boolean
        - description: Sort by one of these categories
          in: query
          name: sort
          schema:
            default: popular
            enum:
              - newest
              - popular
              - relevance
              - random
            type: string
        - description: Amount of detail to render in the response
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/VideoSearchResults/example"
              schema:
                $ref: "#/components/schemas/VideoSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Search for videos
      tags:
        - videos
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/videos/search" \
              --header "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "query=hot air balloon" \
              --data-urlencode "duration_from=30" \
              --data-urlencode "sort=popular"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const videosApi = new sstk.VideosApi();

            const queryParams = {
              "query": "hot air balloon",
              "duration_from": 30,
              "sort": "popular"
            };

            videosApi.searchVideos(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "query": "hot air balloon",
              "duration_from": 30,
              "sort": "popular",
            };

            sstk.videos.searchVideos(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: VideosApiMethodsParams["searchVideos"] = {
              "query": "hot air balloon",
              "duration_from": 30,
              "sort": "popular",
            };

            sstk.videos.searchVideos(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "query" => "hot air balloon",
              "duration_from" => 30,
              "sort" => "popular"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/videos/search?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock videos search-videos \
              --query "hot air balloon" \
              --duration-from 30 \
              --sort popular
  /v2/videos/search/suggestions:
    get:
      description: This endpoint provides autocomplete suggestions for partial search terms.
      operationId: getVideoSuggestions
      parameters:
        - description: Search term for which you want keyword suggestions
          example: cats
          in: query
          name: query
          required: true
          schema:
            type: string
        - description: Limit the number of the suggestions
          in: query
          name: limit
          schema:
            default: 10
            maximum: 25
            minimum: 1
            type: integer
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/Suggestions/example"
              schema:
                $ref: "#/components/schemas/Suggestions"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get suggestions for a search term
      tags:
        - videos
  /v2/videos/updated:
    get:
      description: This endpoint lists videos that have been updated in the specified time period to update content management systems (CMS) or digital asset management (DAM) systems. In most cases, use the `interval` parameter to show videos that were updated recently, but you can also use the `start_date` and `end_date` parameters to specify a range of no more than three days. Do not use the `interval` parameter with either `start_date` or `end_date`.
      operationId: getUpdatedVideos
      parameters:
        - description: Show videos updated on or after the specified date
          example: 2020-05-29
          in: query
          name: start_date
          schema:
            format: date
            type: string
        - description: Show videos updated before the specified date
          example: 2021-05-29
          in: query
          name: end_date
          schema:
            format: date
            type: string
        - description: Show videos updated in the specified time period, where the time period is an interval (like SQL INTERVAL) such as 1 DAY, 6 HOUR, or 30 MINUTE; the default is 1 HOUR, which shows videos that were updated in the hour preceding the request
          in: query
          name: interval
          schema:
            default: 1 HOUR
            type: string
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 100
            maximum: 2000
            minimum: 1
            type: integer
        - description: Sort by oldest or newest videos first
          in: query
          name: sort
          schema:
            default: newest
            enum:
              - newest
              - oldest
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/UpdatedMediaDataList/example"
              schema:
                $ref: "#/components/schemas/UpdatedMediaDataList"
          description: OK
      security:
        - basic: []
        - customer_accessCode: []
      summary: List updated videos
      tags:
        - videos
      x-code-samples:
        - lang: shell
          source: |
            curl -X GET "https://api.shutterstock.com/v2/videos/updated "\
              -H "Accept: application/json" \
              -H "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN" \
              -G \
              --data-urlencode "interval=30 MINUTE"
        - lang: javascript_v1--nodejs
          source: |
            const sstk = require("shutterstock-api");

            sstk.setAccessToken(process.env.SHUTTERSTOCK_API_TOKEN);

            const videosApi = new sstk.VideosApi();

            const queryParams = {
              "interval": "30 MINUTE"
            };

            videosApi.getUpdatedVideos(queryParams)
              .then((data) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: javascript_v2--nodejs
          source: |
            const Shutterstock = require("shutterstock-api");

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams = {
              "interval": "30 MINUTE",
            };

            sstk.videos.getUpdatedVideos(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: typescript_v2--nodejs
          source: |
            import Shutterstock from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: VideosApiMethodsParams["getUpdatedVideos"] = {
              "interval": "30 MINUTE",
            };

            sstk.videos.getUpdatedVideos(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
        - lang: php
          source: |
            $queryFields = [
              "interval" => "30 MINUTE"
            ];

            $options = [
              CURLOPT_URL => "https://api.shutterstock.com/v2/videos/updated?" . http_build_query($queryFields),
              CURLOPT_USERAGENT => "php/curl",
              CURLOPT_HTTPHEADER => [
                "Authorization: Bearer $SHUTTERSTOCK_API_TOKEN"
              ],
              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);
        - lang: bash
          source: |
            export SHUTTERSTOCK_API_TOKEN="v2/ODYwYmRlNzBiYjMzNTE2M2UyZTQvMTc4NzI2OTM4L2N1c3RvbWVyLzIvWEtXR01HQ1FaVHRLOG85a"

            shutterstock videos get-updated-videos \
              --interval "30 MINUTE"
  "/v2/videos/{id}":
    get:
      description: This endpoint shows information about a video, including URLs to previews and the sizes that it is available in.
      operationId: getVideo
      parameters:
        - description: Video ID
          example: "639703"
          in: path
          name: id
          required: true
          schema:
            format: asset-id
            type: string
        - description: Language for the keywords and categories in the response
          example: es
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Amount of detail to render in the response
          in: query
          name: view
          schema:
            default: full
            enum:
              - minimal
              - full
            type: string
        - description: The ID of the search that is related to this request
          example: 00000000-0000-0000-0000-000000000000
          in: query
          name: search_id
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/Video/example"
              schema:
                $ref: "#/components/schemas/Video"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Not found
      security:
        - basic: []
        - customer_accessCode: []
      summary: Get details about videos
      tags:
        - videos
      x-code-samples:
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: VideosApiMethodsParams["getVideo"] = {
              "id": "639703",
            };

            sstk.videos.getVideo(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
  "/v2/videos/{id}/similar":
    get:
      description: This endpoint searches for videos that are similar to a video that you specify.
      operationId: findSimilarVideos
      parameters:
        - description: The ID of a video for which similar videos should be returned
          example: "2140697"
          in: path
          name: id
          required: true
          schema:
            format: asset-id
            type: string
        - description: Language for the keywords and categories in the response
          example: es
          in: query
          name: language
          schema:
            $ref: "#/components/schemas/Language"
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Number of results per page
          in: query
          name: per_page
          schema:
            default: 20
            maximum: 500
            minimum: 1
            type: integer
        - description: Amount of detail to render in the response
          in: query
          name: view
          schema:
            default: minimal
            enum:
              - minimal
              - full
            type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                response:
                  value:
                    $ref: "#/components/schemas/VideoSearchResults/example"
              schema:
                $ref: "#/components/schemas/VideoSearchResults"
          description: OK
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      security:
        - basic: []
        - customer_accessCode: []
      summary: List similar videos
      tags:
        - videos
      x-code-samples:
        - lang: typescript_v2--nodejs
          source: |-
            import Shutterstock from "shutterstock-api";
            import type { VideosApiMethodsParams } from "shutterstock-api";

            const sstk = new Shutterstock({
              "accessToken": process.env.SHUTTERSTOCK_API_TOKEN,
            });

            const queryParams: VideosApiMethodsParams["findSimilarVideos"] = {
              "id": "2140697",
            };

            sstk.videos.findSimilarVideos(queryParams)
              .then(({ data }) => {
                console.log(data);
              })
              .catch((error) => {
                console.error(error);
              });
components:
  schemas:
    AccessTokenDetails:
      description: Access token details that are currently associated with this user
      example:
        client_id: c456b-26230-fa8ed-d19ab-05ce2-bf0aa
        customer_id: "123456789"
        expires_in: 3600
        realm: customer
        scopes:
          - collections.edit
          - collections.view
          - licenses.create
          - licenses.view
          - purchases.view
          - user.view
        user_id: "123456789"
        username: jdoe
      properties:
        client_id:
          description: Client ID that is associated with the user
          type: string
        contributor_id:
          description: Contributor ID that is associated with the user
          type: string
        customer_id:
          description: Customer ID that is associated with the user
          type: string
        expires_in:
          description: Number of seconds until the access token expires; no expiration if this value is null
          type: integer
        organization_id:
          description: Organization ID that is associated with the user
          type: string
        realm:
          description: Type of access token
          enum:
            - customer
            - contributor
          type: string
        scopes:
          description: Scopes that this access token provides when used as authentication
          items:
            type: string
          type: array
        user_id:
          description: User ID that is associated with the user
          type: string
        username:
          description: User name that is associated with the user
          type: string
      type: object
    Album:
      additionalProperties: false
      description: Album metadata
      example:
        id: "1234567"
        title: Happy Music
      properties:
        id:
          description: The album ID
          type: string
        title:
          description: The album title
          type: string
      required:
        - id
        - title
      type: object
    Allotment:
      description: An allotment of credits as part of a subscription
      example:
        downloads_left: 5
        downloads_limit: 10
        end_time: 2020-05-29T12:10:22-05:00
        start_time: 2020-05-29T12:10:22-05:00
      properties:
        downloads_left:
          description: Number of credits remaining in the subscription
          type: integer
        downloads_limit:
          description: Total number of credits available to this subscription
          type: integer
        end_time:
          description: Date the subscription ends
          format: date-time
          type: string
        start_time:
          description: Date the subscription started
          format: date-time
          type: string
      type: object
    Artist:
      description: Metadata about the artist that created the media
      example:
        name: The Happy Tunes Band
      properties:
        name:
          description: The artist's name
          type: string
      required:
        - name
      type: object
    Audio:
      description: Audio metadata
      example:
        added_date: 2016-08-16
        artists:
          - name: Klimenko Music
        assets:
          clean_audio:
            file_size: 35188408
          preview_mp3:
            file_size: 4400203
            url: https://ak.picdn.net/shutterstock/audio/442583/preview/preview.mp3
          preview_ogg:
            file_size: 4453197
            url: https://ak.picdn.net/shutterstock/audio/442583/preview/preview.ogg
          waveform:
            file_size: 18778
            url: https://ak.picdn.net/shutterstock/audio/442583/waveform/waveform.png
        bpm: 110
        contributor:
          id: "2847971"
        description: Pulsing and feel-good, featuring soaring synthesizer, groovy synth bass drums and synth drums that create a euphoric, upbeat mood.
        duration: 183
        genres:
          - Dance/Electronic
          - Electro Pop
          - Pop/Rock
        id: "442583"
        instruments:
          - Piano
          - Synth bass
          - Synth drums
          - Synthesizer
        is_adult: false
        is_instrumental: true
        isrc: ""
        keywords:
          - celebratory
          - chic
          - euphoric
          - good times
          - hip
          - optimistic
          - party
          - soaring
          - upbeat
        language: en
        lyrics: ""
        media_type: audio
        moods:
          - Bright
          - Confident
          - Fun
          - Happy
          - Inspiring
          - Optimistic
          - Playful
          - Sophisticated
          - Stylish
          - Uplifting
        published_time: 2016-08-16T14:30:03-04:00
        recording_version: ""
        releases: []
        similar_artists: []
        title: Another Tomorrow
        updated_time: 2016-08-18T17:59:33-04:00
        url: ""
        vocal_description: ""
      properties:
        added_date:
          description: Date this track was added to the Shutterstock library
          format: date
          type: string
        affiliate_url:
          description: Affiliate referral link; appears only for registered affiliate partners
          type: string
        album:
          $ref: "#/components/schemas/Album"
        artists:
          description: List of artists
          items:
            $ref: "#/components/schemas/Artist"
          type: array
        assets:
          $ref: "#/components/schemas/AudioAssets"
        bpm:
          description: BPM (beats per minute) of this track
          type: integer
        contributor:
          $ref: "#/components/schemas/Contributor"
        deleted_time:
          format: date-time
          type: string
        description:
          description: Description of this track
          type: string
        duration:
          description: Duration of this track in seconds
          type: number
        genres:
          description: List of all genres for this track
          items:
            description: Genre that is associated with this track
            type: string
          type: array
        id:
          description: Shutterstock ID of this track
          type: string
        instruments:
          description: List of all instruments that appear in this track
          items:
            description: Instrument that appears in this track
            type: string
          type: array
        is_adult:
          description: Whether or not this track contains adult content
          type: boolean
        is_instrumental:
          description: Whether or not this track is purely instrumental (lacking lyrics)
          type: boolean
        isrc:
          description: ""
          type: string
        keywords:
          description: List of all keywords for this track
          items:
            description: Keyword for this track
            type: string
          type: array
        language:
          description: Language of this track's lyrics
          type: string
        lyrics:
          description: Lyrics of this track
          type: string
        media_type:
          description: Media type of this track; should always be "audio"
          type: string
        model_releases:
          description: List of all model releases for this track
          items:
            $ref: "#/components/schemas/ModelRelease"
          type: array
        moods:
          description: List of all moods of this track
          items:
            description: Mood of this track
            type: string
          type: array
        published_time:
          description: Time this track was published
          format: date-time
          type: string
        recording_version:
          description: Recording version of this track
          type: string
        releases:
          description: List of all releases of this track
          items:
            description: Release of this track
            type: string
          type: array
        similar_artists:
          description: List of all similar artists of this track
          items:
            $ref: "#/components/schemas/Artist"
          type: array
        submitted_time:
          description: Time this track was submitted
          format: date-time
          type: string
        title:
          description: Title of this track
          type: string
        updated_time:
          description: Time this track was last updated
          format: date-time
          type: string
        url:
          description: ""
          type: string
        vocal_description:
          description: Vocal description of this track
          type: string
      required:
        - id
        - media_type
        - contributor
      type: object
    AudioAssetDetails:
      description: Information about a file that is part of an audio asset
      example:
        file_size: 4453197
        url: https://ak.picdn.net/shutterstock/audio/442583/preview/preview.mp3
      properties:
        file_size:
          description: File size of the track
          type: integer
        url:
          description: URL the track is available at
          type: string
      type: object
    AudioAssets:
      description: Files that are available as part of an audio asset
      example:
        clean_audio:
          file_size: 35188408
        preview_mp3:
          file_size: 4400203
          url: https://ak.picdn.net/shutterstock/audio/442583/preview/preview.mp3
        preview_ogg:
          file_size: 4453197
          url: https://ak.picdn.net/shutterstock/audio/442583/preview/preview.ogg
        waveform:
          file_size: 18778
          url: https://ak.picdn.net/shutterstock/audio/442583/waveform/waveform.png
      properties:
        album_art:
          $ref: "#/components/schemas/AudioAssetDetails"
        clean_audio:
          $ref: "#/components/schemas/AudioAssetDetails"
        original_audio:
          $ref: "#/components/schemas/AudioAssetDetails"
        preview_mp3:
          $ref: "#/components/schemas/AudioAssetDetails"
        preview_ogg:
          $ref: "#/components/schemas/AudioAssetDetails"
        shorts_loops_stems:
          $ref: "#/components/schemas/ShortsLoopsStems"
        waveform:
          $ref: "#/components/schemas/AudioAssetDetails"
      type: object
    AudioDataList:
      description: List of tracks
      example:
        data:
          - added_date: 2016-04-12
            artists:
              - name: Fin Productions
            assets:
              clean_audio:
                file_size: 30760372
              preview_mp3:
                file_size: 3846606
                url: https://ak.picdn.net/shutterstock/audio/434750/preview/preview.mp3
              preview_ogg:
                file_size: 4402608
                url: https://ak.picdn.net/shutterstock/audio/434750/preview/preview.ogg
              waveform:
                file_size: 19822
                url: https://ak.picdn.net/shutterstock/audio/434750/waveform/waveform.png
            bpm: 100
            contributor:
              id: "2847971"
            description: Pulsing and feel-good, featuring slick electric guitar, synthesizer, bass, electronic drum pads and drums that create a positive, celebratory mood.
            duration: 160
            genres:
              - Dance/Electronic
              - Electro Pop
              - Pop/Rock
            id: "434750"
            instruments:
              - Bass
              - Drums
              - Electric guitar
              - Pads
              - Percussion
              - Synthesizer
            is_adult: false
            is_instrumental: true
            isrc: ""
            keywords:
              - breezy
              - celebration
              - festive
              - good times
              - hopeful
              - optimistic
              - party
              - positive
              - reflective
            language: en
            lyrics: ""
            media_type: audio
            moods:
              - Bright
              - Confident
              - Fun
              - Happy
              - Inspiring
              - Optimistic
              - Playful
              - Sophisticated
              - Stylish
              - Uplifting
            published_time: 2016-04-12T17:45:29-04:00
            recording_version: ""
            releases: []
            similar_artists: []
            title: Fresh Love
            updated_time: 2016-08-18T18:03:11-04:00
            vocal_description: ""
      properties:
        data:
          description: Tracks
          items:
            $ref: "#/components/schemas/Audio"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results across all pages
          type: integer
    AudioRenderResult:
      description: The output of an audio render in WAV or MP3 format
      example:
        created_date: 2021-07-13T16:19:30-04:00
        files: []
        id: 2yZp13IhLqnjfh2KquDTOHUHzTiP
        preset: MASTER_MP3
        progress_percent: 0
        status: WAITING_COMPOSE
        timeline: {}
        updated_date: 2021-07-13T16:19:30-04:00
      properties:
        created_date:
          description: The time the render was submitted to the API
          format: date-time
          type: string
        files:
          description: The files associated with the render
          items:
            $ref: "#/components/schemas/AudioRendersFilesList"
          type: array
        id:
          description: The alphanumeric ID of the simple render
          type: string
        preset:
          description: The file format preset
          enum:
            - MASTER_MP3
            - MASTER_WAV
            - STEMS_WAV
          type: string
        progress_percent:
          description: The current progress of the render as a percentage
          type: integer
        status:
          description: A coarse progress indicator
          enum:
            - WAITING_COMPOSE
            - RUNNING_COMPOSE
            - WAITING_RENDER
            - RUNNING_RENDER
            - CREATED
            - FAILED_CREATE
          type: string
        timeline:
          $ref: "#/components/schemas/AudioRenderTimeline"
        updated_date:
          description: The time that the audio output was uploaded
          format: date-time
          type: string
      required:
        - id
        - timeline
        - status
      type: object
    AudioRenderTimeline:
      description: A timeline object that represents either a request for music to be created or an entire music composition
      example:
        spans:
          - id: 123456
            instrument_groups:
              - instrument_group: The instrument ID
                statuses:
                  - beat: 12
                    status: active
            regions:
              - beat: 12
                descriptor: The descriptor ID needed to compose the music
                end_type:
                  beat: 12
                  event: ending
                  type: ringout
                id: 123456
                key:
                  tonic_accidental: double flat
                  tonic_note: c
                  tonic_quality: major
                region: music
            span_type: metered
            tempo: 12345
            tempo_changes:
              - tempo: 12345
                time: 5
            time: 5
      properties:
        spans:
          description: A span object that represents the beginning of a period of absolute time
          items:
            $ref: "#/components/schemas/AudioRenderTimelineSpan"
          type: array
      type: object
    AudioRenderTimelineSpan:
      description: The beginning of a non-overlapping period of absolute time
      example:
        id: 111
        regions:
          - beat: 12
            descriptor: cinematic_minimal_tense
            end_type:
              beat: 24
              event: ending
              type: ringout
            id: 222
            key:
              tonic_note: c
              tonic_quality: major
            region: music
        span_type: metered
        tempo: 76
        time: 0
      properties:
        id:
          description: An identifier which must be unique within the parent span
          type: number
        instrument_groups:
          description: An array of instrument_group objects that are used in this span
          items:
            $ref: "#/components/schemas/AudioRenderTimelineSpanInstrumentGroup"
          type: array
        regions:
          description: An array of region objects within the span
          items:
            $ref: "#/components/schemas/AudioRenderTimelineSpanRegion"
          type: array
        span_type:
          description: Type of span; metered spans represent a pariod of time with music, and unmetered spans denote the end of the prior metered span
          enum:
            - metered
            - unmetered
          type: string
        tempo:
          description: The tempo, in beats per minute, at the start of the span; if not provided, the API selects a random tempo
          type: integer
        tempo_changes:
          description: Two or more inflection points in a tempo curve; the API creates a smoothly changing tempo by using a linear interpolation of the time between each tempo change
          items:
            $ref: "#/components/schemas/AudioRenderTimelineSpanTempoChanges"
          type: array
        time:
          description: The absolute time, in seconds, at which the span starts
          type: integer
      required:
        - span_type
        - time
      type: object
    AudioRenderTimelineSpanInstrumentGroup:
      description: An instrument and the status objects that specify when that instrument plays
      example:
        instrument_group: bright_roomy_kit
        statuses:
          - beat: 12
            status: active
      properties:
        instrument_group:
          description: The instrument ID
          type: string
        statuses:
          description: An array of status objects
          items:
            $ref: "#/components/schemas/AudioRenderTimelineSpanInstrumentGroupStatus"
          type: array
      required:
        - instrument_group
      type: object
    AudioRenderTimelineSpanInstrumentGroupStatus:
      description: The status of an instrument at a specific beat
      example:
        beat: 12
        status: active
      properties:
        beat:
          description: The beat, relative to the span, at which the status begins
          type: number
        status:
          description: Whether the instrument is playing or not
          enum:
            - active
            - inactive
          type: string
      required:
        - beat
        - status
      type: object
    AudioRenderTimelineSpanRegion:
      description: A period of music or silence, measured in beats
      example:
        beat: 12
        descriptor: cinematic_minimal_tense
        end_type:
          beat: 24
          event: ending
          type: ringout
        id: 222
        key:
          tonic_note: c
          tonic_quality: major
        region: music
      properties:
        beat:
          description: The beat, relative to the span, at which the region object's music begins
          type: integer
        descriptor:
          description: The descriptor ID needed to compose the music
          type: string
        end_type:
          description: A high-level description of how a region ends
          properties:
            beat:
              description: The beat, relative to the start of the active region, at which the end_type begins; in other words, the ending starts on this beat of the region
              type: number
            event:
              description: The type of event
              enum:
                - ending
                - transition
              type: string
            type:
              description: The specific action to perform; if the event type is "ending" then this must be "ringout" and if event type is "transition" this must be "cut"
              enum:
                - ringout
                - cut
              type: string
          required:
            - beat
            - event
            - type
          type: object
        id:
          description: An identifier which must be unique within the parent span
          type: number
        key:
          description: The key signature active at the beginning of the region
          properties:
            tonic_accidental:
              description: A text representation of the accidental; if this field is specified, the tonic_note field should also be specified
              enum:
                - double flat
                - flat
                - natural
                - sharp
                - double sharp
              type: string
            tonic_note:
              description: A text representation of the musical note; if this field is specified, the tonic_accidental field should also be specified
              enum:
                - c
                - d
                - e
                - f
                - g
                - a
                - b
              type: string
            tonic_quality:
              description: The scale quality; if this field is not specified, the API selects the quality automatically
              enum:
                - major
                - natural_minor
                - harmonic_minor
                - melodic_minor
                - ionian
                - dorian
                - phrygian
                - lydian
                - mixolydian
                - aeolian
                - locrian
              example: major
              type: string
          type: object
        region:
          description: The type of region
          enum:
            - music
            - silence
          type: string
      required:
        - id
        - region
        - descriptor
        - beat
      type: object
    AudioRenderTimelineSpanTempoChanges:
      description: An inflection point in a tempo curve; the API creates the overall tempo by using a linear interpolation of the time between each tempo change
      example:
        tempo: 86
        time: 5
      properties:
        tempo:
          description: The tempo, in beats per minute, active at this time
          type: number
        time:
          description: The time, in seconds, at which the tempo exists
          type: number
      required:
        - time
        - tempo
      type: object
    AudioRendersFilesList:
      description: Files associated with the render
      example:
        bits_sample: 16
        content_type: audio/mp3
        download_url: https://s3.amazonaws.com/prod-amper-inferno-ephemeral/renders/2021/07/13/amper-api-QwAgKqXQAzr622KuXYZ25C9WRH3a/0.mp3
        filename: My_audio_ai.mp3
        frequency_hz: 44100
        kbits_second: 192
        size_bytes: 481556
        tracks:
          - master
      properties:
        bits_sample:
          description: The bit depth of the audio files in bits/sample
          type: number
        content_type:
          description: The content-type of the file
          type: string
        download_url:
          description: The internet-accessible URL from which the file can be downloaded. Any redirects encountered when using this URL must be followed
          type: string
        filename:
          description: The user-specified file name suggestion from the render request; this file name becomes the filename property of the Content-Disposition header when the user downloads the rendered audio file
          type: string
        frequency_hz:
          description: The Sample rate of the audio files in Hertz (Hz)
          type: number
        kbits_second:
          description: The data rate of the audio files in kilobits/second
          type: number
        size_bytes:
          description: Size of the file in bytes
          type: number
        tracks:
          description: An array of track names included in the file
          items:
            type: string
          type: array
      required:
        - filename
        - bits_sample
        - content_type
        - download_url
        - frequency_hz
        - kbits_second
        - size_bytes
        - tracks
      type: object
    AudioRendersListResults:
      description: Audio render data
      example:
        audio_renders:
          - created_date: 2021-07-13T16:19:30-04:00
            files: []
            id: 2yZp13IhLqnjfh2KquDTOHUHzTiP
            preset: MASTER_MP3
            progress_percent: 20
            status: WAITING_COMPOSE
            timeline: {}
            updated_date: 2021-07-13T16:19:30-04:00
          - created_date: 2021-07-12T16:39:59-04:00
            files:
              - bits_sample: 16
                content_type: audio/mp3
                download_url: https://s3.amazonaws.com/prod-amper-inferno-ephemeral/renders/2021/07/13/amper-api-QwAgKqXQAzr622KuXYZ25C9WRH3a/0.mp3
                filename: My_audio_ai.mp3
                frequency_hz: 44100
                kbits_second: 192
                size_bytes: 481556
                tracks:
                  - master
              - bits_sample: 0
                content_type: application/vnd.amper.waveform+json
                download_url: https://s3.amazonaws.com/prod-amper-inferno-ephemeral/renders/2021/07/13/amper-api-QwAgKqXQAzr622KuXYZ25C9WRH3a/1.json
                filename: render.json
                frequency_hz: 42
                kbits_second: 0
                size_bytes: 4420
                tracks:
                  - master
            id: QwAgKqXQAzr622KuXYZ25C9WRH3a
            preset: MASTER_MP3
            progress_percent: 100
            status: CREATED
            timeline: {}
            updated_date: 2021-07-12T16:46:26-04:00
      properties:
        audio_renders:
          description: Audio render results
          items:
            $ref: "#/components/schemas/AudioRenderResult"
          type: array
      required:
        - audio_renders
    AudioSearchResults:
      description: Audio search results
      example:
        data:
          - added_date: 2016-08-16
            artists:
              - name: Klimenko Music
            assets:
              clean_audio:
                file_size: 35188408
              preview_mp3:
                file_size: 4400203
                url: https://ak.picdn.net/shutterstock/audio/442583/preview/preview.mp3
              preview_ogg:
                file_size: 4453197
                url: https://ak.picdn.net/shutterstock/audio/442583/preview/preview.ogg
              waveform:
                file_size: 18778
                url: https://ak.picdn.net/shutterstock/audio/442583/waveform/waveform.png
            bpm: 110
            contributor:
              id: "2847971"
            description: Pulsing and feel-good, featuring soaring synthesizer, groovy synth bass drums and synth drums that create a euphoric, upbeat mood.
            duration: 183
            genres:
              - Dance/Electronic
              - Electro Pop
              - Pop/Rock
            id: "442583"
            instruments:
              - Piano
              - Synth bass
              - Synth drums
              - Synthesizer
            is_adult: false
            is_instrumental: true
            isrc: ""
            keywords:
              - celebratory
              - chic
              - euphoric
              - good times
              - hip
              - optimistic
              - party
              - soaring
              - upbeat
            language: en
            lyrics: ""
            media_type: audio
            moods:
              - Bright
              - Confident
              - Fun
              - Happy
              - Inspiring
              - Optimistic
              - Playful
              - Sophisticated
              - Stylish
              - Uplifting
            published_time: 2016-08-16T14:30:03-04:00
            recording_version: ""
            releases: []
            similar_artists: []
            title: Another Tomorrow
            updated_time: 2016-08-18T17:59:33-04:00
            url: ""
            vocal_description: ""
        page: 1
        per_page: 5
        search_id: 749090bb-2967-4a20-b22e-c800dc845e10
        total_count: 123455
      properties:
        data:
          description: List of tracks
          items:
            $ref: "#/components/schemas/Audio"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        search_id:
          description: ID of the search
          type: string
        total_count:
          description: Total count of all results across all pages
          type: integer
      required:
        - data
        - total_count
        - search_id
      type: object
    AudioUrl:
      description: Audio License URL object
      example:
        $ref: "#/components/schemas/Url/example"
      properties:
        shorts_loops_stems:
          description: URL that can be used to download the .zip file containing shorts, loops, and stems
          type: string
        url:
          description: URL that can be used to download the unwatermarked, licensed asset
          type: string
      required:
        - url
      type: object
    AuthorizeResponse:
      description: HTML redirect URL that contains the application authorization 'code'
      example: Moved temporarily. Redirecting to 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
      type: string
    Bands:
      description: A band that can be used to generate music
      example:
        id: "1234567"
        name: The Happy Tunes Band
      properties:
        id:
          description: The ID of the band
          type: string
        name:
          description: The name of the band
          type: string
      type: object
    BulkImageSearchRequest:
      description: List of searches
      example:
        - license:
            - editorial
          query: cat
          sort: popular
        - orientation: horizontal
          query: dog
      items:
        $ref: "#/components/schemas/SearchImage"
      maxItems: 5
      type: array
    BulkImageSearchResults:
      description: List of search results for each given query
      example:
        results:
          - data:
              - aspect: 1.5
                assets:
                  huge_thumb:
                    height: 260
                    url: https://image.shutterstock.com/image-photo/cropped-image-woman-gardening-260nw-1572478477.jpg
                    width: 390
                  large_thumb:
                    height: 100
                    url: https://thumb7.shutterstock.com/thumb_large/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                    width: 150
                  preview:
                    height: 300
                    url: https://image.shutterstock.com/display_pic_with_logo/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                    width: 450
                  preview_1000:
                    height: 667
                    url: https://ak.picdn.net/shutterstock/photos/1572478477/watermark_1000/1706028c641ea2f443057287c67d9b91/preview_1000-1572478477.jpg
                    width: 1000
                  preview_1500:
                    height: 1000
                    url: https://image.shutterstock.com/z/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                    width: 1500
                  small_thumb:
                    height: 67
                    url: https://thumb7.shutterstock.com/thumb_small/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                    width: 100
                contributor:
                  id: "250738318"
                description: cropped image of woman gardening
                has_model_release: true
                id: "1572478477"
                image_type: photo
                media_type: image
            page: 1
            per_page: 5
            search_id: 749090bb-2967-4a20-b22e-c800dc845e10
            spellcheck_info: {}
            total_count: 45
          - data: []
            page: 1
            per_page: 5
            search_id: 749090bb-2967-4a20-b22e-c800dc845e11
            spellcheck_info: {}
            total_count: 0
      properties:
        bulk_search_id:
          description: Unique identifier for the search request
          type: string
        results:
          description: List of image search results
          items:
            $ref: "#/components/schemas/ImageSearchResults"
          type: array
      type: object
    CatalogCollection:
      description: Catalog collection
      example:
        cover_asset:
          asset:
            id: "1690105108"
            name: Young couple playing tennis at the court
            type: image
          created_time: 2021-06-10T13:26:09-04:00
          id: "123"
        created_time: 2021-05-20T16:15:22-04:00
        id: "126351028"
        name: My collection
        role_assignments:
          collection_id: "126351028"
          roles:
            editors:
              - email: userTwo@org.com
                id: "987"
                type: USER
            owners:
              - email: userOne@org.com
                id: "321"
                type: USER
            viewers: []
        total_item_count: 2
        updated_time: 2021-06-10T13:26:09-04:00
        visibility: public
      properties:
        cover_asset:
          $ref: "#/components/schemas/CatalogCollectionItem"
        created_time:
          format: date-time
          type: string
        id:
          type: string
        name:
          type: string
        role_assignments:
          $ref: "#/components/schemas/CatalogCollectionRoleAssignments"
        total_item_count:
          type: number
        updated_time:
          format: date-time
          type: string
        visibility:
          enum:
            - private
            - public
          type: string
      required:
        - id
        - name
        - total_item_count
        - created_time
        - updated_time
        - visibility
        - role_assignments
      type: object
    CatalogCollectionDataList:
      description: List of catalog collections
      example:
        data:
          - cover_asset:
              asset:
                id: "1690105108"
                name: Young couple playing tennis at the court
                type: image
              created_time: 2021-06-10T13:26:09-04:00
              id: "123"
            created_time: 2021-05-20T16:15:22-04:00
            id: "126351028"
            name: My collection
            role_assignments:
              collection_id: "126351028"
              roles:
                editors:
                  - email: userTwo@org.com
                    id: "987"
                    type: USER
                owners:
                  - email: userOne@org.com
                    id: "321"
                    type: USER
                viewers: []
            total_item_count: 2
            updated_time: 2021-06-10T13:26:09-04:00
            visibility: public
        page: 1
        per_page: 20
        total_count: 1
      properties:
        data:
          description: List of catalog collections
          items:
            $ref: "#/components/schemas/CatalogCollection"
          type: array
        page:
          type: number
        per_page:
          type: number
        total_count:
          type: number
      required:
        - page
        - per_page
        - total_count
        - data
      type: object
    CatalogCollectionItem:
      description: Metadata about an item that is part of a collection
      example:
        asset:
          id: "1690105108"
          name: Young couple playing tennis at the court
          type: image
        collection_ids:
          - "126351028"
        created_time: 2021-06-10T13:26:09-04:00
        id: "123"
      properties:
        asset:
          properties:
            id:
              type: string
            name:
              type: string
            type:
              enum:
                - image
                - video
                - audio
                - editorial-image
                - editorial-video
              type: string
          required:
            - type
          type: object
        collection_ids:
          description: The collection IDs that this asset belongs to
          items:
            type: string
          type: array
        created_time:
          format: date-time
          type: string
        id:
          type: string
      required:
        - id
        - asset
        - created_time
      type: object
    CatalogCollectionItemDataList:
      description: List of catalog collection items
      example:
        data:
          - asset:
              id: "1690105108"
              name: Young couple playing tennis at the court
              type: image
            collection_ids:
              - "126351028"
            created_time: 2021-06-10T13:26:09-04:00
            id: "123"
        page: 1
        per_page: 1
        total_count: 82
      properties:
        data:
          description: List of catalog collection items
          items:
            $ref: "#/components/schemas/CatalogCollectionItem"
          type: array
        page:
          type: number
        per_page:
          type: number
        total_count:
          type: number
      required:
        - page
        - per_page
        - total_count
        - data
      type: object
    CatalogCollectionRole:
      description: A user that has access to a catalog collection
      example:
        email: user123@org.com
        id: "123"
        type: USER
      properties:
        email:
          type: string
        id:
          type: string
        type:
          enum:
            - USER
          type: string
      required:
        - id
        - type
        - email
      type: object
    CatalogCollectionRoleAssignments:
      description: List of role assignments for a catalog collection
      example:
        collection_id: "126351028"
        roles:
          editors:
            - email: userTwo@org.com
              id: "987"
              type: USER
          owners:
            - email: userOne@org.com
              id: "321"
              type: USER
          viewers: []
      properties:
        collection_id:
          type: string
        roles:
          properties:
            editors:
              items:
                $ref: "#/components/schemas/CatalogCollectionRole"
              type: array
            owners:
              items:
                $ref: "#/components/schemas/CatalogCollectionRole"
              type: array
            viewers:
              items:
                $ref: "#/components/schemas/CatalogCollectionRole"
              type: array
          type: object
      required:
        - collection_id
        - roles
      type: object
    Category:
      description: Category information
      example:
        id: "1"
        name: Animals/Wildlife
      properties:
        id:
          description: Category ID
          type: string
        name:
          description: Category name
          type: string
      type: object
    CategoryDataList:
      description: List of categories that images can belong to
      example:
        data:
          - id: "1"
            name: Animals/Wildlife
          - id: "11"
            name: The Arts
        page: 1
        per_page: 2
        total_count: 13
      properties:
        data:
          description: Categories
          items:
            $ref: "#/components/schemas/Category"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: The current page of results
          type: integer
        per_page:
          description: The number of results per page
          type: integer
        total_count:
          description: The total number of results across all pages
          type: integer
    Collection:
      description: Metadata about a collection of assets
      example:
        cover_item:
          id: "297886754"
        id: "293542904"
        items_updated_time: 2021-05-20T16:15:22-04:00
        name: My collection
        total_item_count: 85
      properties:
        cover_item:
          $ref: "#/components/schemas/CollectionItem"
        created_time:
          description: When the collection was created
          format: date-time
          type: string
        id:
          description: The collection ID
          type: string
        items_updated_time:
          description: The last time this collection's items were updated
          format: date-time
          type: string
        name:
          description: The name of the collection
          type: string
        share_code:
          description: A code that can be used to share the collection (optional)
          type: string
        share_url:
          description: The browser URL that can be used to share the collection (optional)
          type: string
        total_item_count:
          description: The number of items in the collection
          type: integer
        updated_time:
          description: The last time the collection was update (other than changes to the items in it)
          format: date-time
          type: string
      required:
        - id
        - name
        - total_item_count
      type: object
    CollectionCreateRequest:
      description: Collection creation request
      example:
        name: Test Collection 19cf
      properties:
        name:
          description: The name of the collection
          type: string
      required:
        - name
      type: object
    CollectionCreateResponse:
      description: Collection creation response
      example:
        id: "48433105"
      properties:
        id:
          description: ID of the new collection
          type: string
      required:
        - id
      type: object
    CollectionDataList:
      description: List of collections
      example:
        data:
          - cover_item:
              id: "297886754"
            id: "293542904"
            items_updated_time: 2021-05-20T16:15:22-04:00
            name: My collection
            total_item_count: 85
        page: 1
        per_page: 100
        total_count: 1
      properties:
        data:
          description: Collections
          items:
            $ref: "#/components/schemas/Collection"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: The current page of results
          type: integer
        per_page:
          description: The number of results per page
          type: integer
        total_count:
          description: The total number of results across all pages
          type: integer
    CollectionItem:
      description: Metadata about an item that is part of a collection
      example:
        added_time: 2020-05-29T12:10:22-05:00
        id: "1690105108"
        media_type: image
      properties:
        added_time:
          description: The date the item was added to the collection
          format: date-time
          type: string
        id:
          description: ID of the item
          type: string
        media_type:
          description: The media type of the item, such as image, video, or audio
          type: string
      required:
        - id
      type: object
    CollectionItemDataList:
      description: List of items in a collection
      example:
        data:
          - added_time: 2021-07-08T12:33:37.000Z
            id: "1690105108"
            media_type: image
          - added_time: 2021-07-08T12:31:43.000Z
            id: "1468703072"
            media_type: image
        page: 1
        per_page: 2
        total_count: 82
      properties:
        data:
          description: Assets in the collection
          items:
            $ref: "#/components/schemas/CollectionItem"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: The current page of results
          type: integer
        per_page:
          description: The number of results per page
          type: integer
        total_count:
          description: The total number of results across all pages
          type: integer
    CollectionItemRequest:
      description: Request to get a list of items in a collection
      example:
        items:
          - added_time: 2020-05-29T12:10:22-05:00
            id: "1690105108"
            media_type: image
      properties:
        items:
          description: List of items
          items:
            $ref: "#/components/schemas/CollectionItem"
          type: array
      required:
        - items
      type: object
    CollectionUpdateRequest:
      description: Collection update request
      example:
        name: My collection with a new name
      properties:
        name:
          description: The new name of the collection
          type: string
      required:
        - name
      type: object
    ComputerVisionImageCreateResponse:
      description: Asset upload information
      example:
        upload_id: Udb14e1c3540bdbf82b4b3fe12d3a44f2
      properties:
        upload_id:
          type: string
      required:
        - upload_id
      type: object
    Contributor:
      description: Information about a contributor
      example:
        id: "12345678"
      properties:
        id:
          description: ID of the contributor
          type: string
      required:
        - id
      type: object
    ContributorProfile:
      description: Contributor profile data
      example:
        about: John Doe's photographs
        contributor_type:
          - photographer
        display_name: John Doe
        equipment:
          - Nikon
          - Fuji
        id: "12345678"
        location: US
        portfolio_url: https://www.shutterstock.com/g/jdoe
        social_media:
          facebook: http://example.com/jdoe
          google_plus: http://example.com/jdoe
          linkedin: http://example.com/jdoe
          pinterest: http://example.com/jdoe
          tumblr: http://example.com/jdoe
          twitter: http://example.com/jdoe
        styles:
          - landscape
          - nature
          - footage_travel
        subjects:
          - animals
          - landmarks
          - nature
          - objects
          - recreation
        website: http://example.com/profiles/jdoe
      properties:
        about:
          description: Short description of the contributors' library
          type: string
        contributor_type:
          description: Type of content that the contributor specializes in (photographer, illustrator, etc)
          items:
            type: string
          type: array
        display_name:
          description: Preferred name to be displayed for the contributor
          type: string
        equipment:
          description: List of equipment used by the contributor (Canon EOS 5D Mark II, etc)
          items:
            type: string
          type: array
        id:
          description: Contributor ID
          type: string
        location:
          description: Country code representing the contributor's locale
          type: string
        portfolio_url:
          description: Web URL for the contributors' profile
          type: string
        social_media:
          $ref: "#/components/schemas/ContributorProfileSocialMedia"
        styles:
          description: List of styles that the contributor specializes in (lifestyle, mixed media, etc)
          items:
            type: string
          type: array
        subjects:
          description: Generic list of subjects for contributors' work (food_and_drink, holiday, people, etc)
          items:
            type: string
          type: array
        website:
          description: Personal website for the contributor
          type: string
      required:
        - id
      type: object
    ContributorProfileDataList:
      description: List of contributor profiles
      example:
        data:
          - about: John Doe's photographs
            contributor_type:
              - photographer
            display_name: John Doe
            equipment:
              - Nikon
              - Fuji
            id: "12345678"
            location: US
            portfolio_url: https://www.shutterstock.com/g/jdoe
            social_media:
              facebook: http://example.com/jdoe
              google_plus: http://example.com/jdoe
              linkedin: http://example.com/jdoe
              pinterest: http://example.com/jdoe
              tumblr: http://example.com/jdoe
              twitter: http://example.com/jdoe
            styles:
              - landscape
              - nature
              - footage_travel
            subjects:
              - animals
              - landmarks
              - nature
              - objects
              - recreation
            website: http://example.com/profiles/jdoe
        page: 1
        per_page: 5
        total_count: 15
      properties:
        data:
          description: Conributor profiles
          items:
            $ref: "#/components/schemas/ContributorProfile"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Error message
          type: string
        page:
          description: Page of response
          type: integer
        per_page:
          description: Number of contributors per page
          type: integer
        total_count:
          description: Total count of contributors for this request
          type: integer
    ContributorProfileSocialMedia:
      description: Contributor profile social media links
      example:
        facebook: http://example.com/jdoe
        google_plus: http://example.com/jdoe
        linkedin: http://example.com/jdoe
        pinterest: http://example.com/jdoe
        tumblr: http://example.com/jdoe
        twitter: http://example.com/jdoe
      properties:
        facebook:
          description: Facebook link for contributor
          type: string
        google_plus:
          description: Google+ link for contributor
          type: string
        linkedin:
          description: LinkedIn link for contributor
          type: string
        pinterest:
          description: Pinterest page for contributor
          type: string
        tumblr:
          description: Tumblr link for contributor
          type: string
        twitter:
          description: Twitter link for contributor
          type: string
      type: object
    Cookie:
      description: Cookie object
      example:
        name: The name of the cookie
        value: The value of the cookie
      properties:
        name:
          description: The name of the cookie
          type: string
        value:
          description: The value of the cookie
          type: string
      required:
        - name
        - value
      type: object
    CreateAudioRender:
      description: Data required to create an audio render
      example:
        filename: My Project.mp3
        preset: MASTER_MP3
        timeline:
          spans:
            - id: 111
              instrument_groups:
                - instrument_group: roomy_kit
                  statuses:
                    - beat: 12
                      status: active
              regions:
                - beat: 12
                  descriptor: cinematic_minimal_tense
                  end_type:
                    beat: 24
                    event: ending
                    type: ringout
                  id: 222
                  key:
                    tonic_note: c
                    tonic_quality: major
                  region: music
              span_type: metered
              tempo: 76
              tempo_changes:
                - tempo: 86
                  time: 5
              time: 5
            - span_type: unmetered
              time: 20
      properties:
        filename:
          description: A user-specified file name suggestion; this file name becomes the filename property of the Content-Disposition header when the user downloads the rendered audio file
          example: My Project.mp3
          type: string
        preset:
          description: File format, such as MP3 file, combined WAV file, or individual track WAV files
          enum:
            - MASTER_MP3
            - MASTER_WAV
            - STEMS_WAV
          example: MASTER_MP3
          type: string
        timeline:
          $ref: "#/components/schemas/AudioRenderTimeline"
          description: The timeline data with which to generate the render
      required:
        - preset
        - timeline
        - filename
      type: object
    CreateAudioRendersRequest:
      description: Render request data
      example:
        audio_renders:
          - filename: My Project.mp3
            preset: MASTER_MP3
            timeline:
              spans:
                - id: 111
                  instrument_groups:
                    - instrument_group: roomy_kit
                      statuses:
                        - beat: 12
                          status: active
                  regions:
                    - beat: 12
                      descriptor: cinematic_minimal_tense
                      end_type:
                        beat: 24
                        event: ending
                        type: ringout
                      id: 222
                      key:
                        tonic_note: c
                        tonic_quality: major
                      region: music
                  span_type: metered
                  tempo: 76
                  tempo_changes:
                    - tempo: 86
                      time: 5
                  time: 5
                - span_type: unmetered
                  time: 20
      properties:
        audio_renders:
          description: Parameters to create computer audio renders
          items:
            $ref: "#/components/schemas/CreateAudioRender"
          type: array
      required:
        - audio_renders
      type: object
    CreateCatalogCollection:
      example:
        items:
          - asset:
              id: "1690105108"
              type: image
        name: New Collection
        visibility: public
      properties:
        items:
          items:
            $ref: "#/components/schemas/CreateCatalogCollectionItem"
          maxItems: 50
          type: array
        name:
          maxLength: 100000
          minLength: 1
          type: string
        visibility:
          default: private
          enum:
            - private
            - public
          type: string
      required:
        - name
      type: object
    CreateCatalogCollectionItem:
      example:
        asset:
          id: "1690105108"
          type: image
      properties:
        asset:
          properties:
            id:
              type: string
            type:
              type: string
          required:
            - type
          type: object
      required:
        - asset
      type: object
    CreateCatalogCollectionItems:
      example:
        items:
          - asset:
              id: "1690105108"
              type: image
      properties:
        items:
          items:
            $ref: "#/components/schemas/CreateCatalogCollectionItem"
          maxItems: 50
          minItems: 1
          type: array
      required:
        - items
      type: object
    CustomSizeDimensions:
      description: A custom height or a custom width to resize the image to, but not both (experimental)
      example:
        height: 600
        width: 800
      properties:
        height:
          description: Custom height to resize the image to
          minimum: 100
          type: integer
        width:
          description: Custom width to resize the image to
          minimum: 100
          type: integer
      type: object
    Descriptors:
      description: Information about a descriptor
      example:
        average_render_speed: 8.242664029014177
        bands:
          - id: cinematic_minimal_tense_band_1
            name: Cinematic Minimal Tense Band 1
          - id: cinematic_minimal_tense_band_2
            name: Cinematic Minimal Tense Band 2
        id: cinematic_minimal_tense
        instruments:
          - id: blue_synth_pad
            name: Warm Pad - Lush
          - id: direct_round_1_synth_bass
            name: Direct Round 1 Synth Bass
          - id: direct_crystal_breath_mid_pad
            name: Direct Crystal Breath Mid Pad
        max_tempo: 76
        min_tempo: 58
        name: Cinematic Minimal Tense
        previews:
          - content_type: audio/mp3
            url: https://public-cdn.ampermusic.com/bands/previews/cinematic_minimal_tense_band_1_v1.mp3
          - content_type: audio/mp3
            url: https://public-cdn.ampermusic.com/bands/previews/cinematic_minimal_tense_band_2_v1.mp3
        tags:
          - Tense
          - Cinematic
          - Negative
          - Simple Meter
          - 4/4
          - Natural Minor
          - Dorian
          - Minimal
          - Adagio
          - Single Region
          - Main
          - Entertainment
          - Politics
          - Keys
          - Mid Pads
          - Fast
          - Slow
          - Slow
          - Voice
          - Medium Bright
          - Non Noisy
          - Medium Thick
          - Angelic
          - Direct
          - Percussion
          - Perc FX
          - Misc
          - Acoustic Pianos
          - Grand
          - Nice
          - Roomy
          - Pop
          - Upright
          - Clean
          - Classic
          - Keyboards
          - Digital Keyboard
          - Strings
          - Synth Basses
          - Fast
          - Dark
          - Thick
          - Sub
          - Synth Mallets
          - Dull
          - Mid Synth Beds
          - Slow
          - None
          - Medium Noisy
          - Harsh
          - Fast
          - Airy
          - Long Textures
          - Ambience
          - Synth Texture
          - Ethereal
          - Set Kicks
          - Processed
          - Hubcap Mallet
          - Wide
          - Tickie
          - Airy
          - Chamber
          - Thin
          - Organ
          - Cello Ensemble
          - Sweet
          - Big
          - Di
          - Raw
          - Bright
          - Tight
          - Chorus
          - Buzzy
          - Huge
          - Warm
          - Jazz
          - Brass
          - String
          - Hollow
          - Woodwind
          - Breathy
          - Crystal
          - Rhodes
          - Synth Piano
          - Noisy
          - Woody
          - Metallic
          - Reverse Piano
          - Full
          - Foley
          - Piano
          - Clean
          - Delayed
          - Reverb
          - Low Passed
          - Large
          - Medium
          - Small
      properties:
        average_render_speed:
          description: The average ratio of the length of the music to the time it takes to render; for example, a render speed of 3.0 generates 30 seconds of music in about 10 seconds
          type: number
        bands:
          description: The bands that are available to use this descriptor
          items:
            $ref: "#/components/schemas/Bands"
          type: array
        id:
          description: The ID of the descriptor
          type: string
        instruments:
          description: The instruments that can play with this descriptor
          items:
            $ref: "#/components/schemas/Instruments"
          type: array
        max_tempo:
          description: The maximum beats per minute that the descriptor is intended to be used with
          type: number
        min_tempo:
          description: The minimum beats per minute that the descriptor is intended to be used with
          type: number
        name:
          description: The name of the descriptor
          type: string
        previews:
          description: Preview of the descriptor
          items:
            $ref: "#/components/schemas/Preview"
          type: array
        tags:
          description: Tags that describe the descriptor
          items:
            type: string
          type: array
      type: object
    DescriptorsListResult:
      description: List Descriptors results
      example:
        data:
          - average_render_speed: 8.242664029014177
            bands:
              - id: cinematic_minimal_tense_band_1
                name: Cinematic Minimal Tense Band 1
              - id: cinematic_minimal_tense_band_2
                name: Cinematic Minimal Tense Band 2
            id: cinematic_minimal_tense
            instruments:
              - id: blue_synth_pad
                name: Warm Pad - Lush
              - id: direct_round_1_synth_bass
                name: Direct Round 1 Synth Bass
              - id: direct_crystal_breath_mid_pad
                name: Direct Crystal Breath Mid Pad
            max_tempo: 76
            min_tempo: 58
            name: Cinematic Minimal Tense
            previews:
              - content_type: audio/mp3
                url: https://public-cdn.ampermusic.com/bands/previews/cinematic_minimal_tense_band_1_v1.mp3
              - content_type: audio/mp3
                url: https://public-cdn.ampermusic.com/bands/previews/cinematic_minimal_tense_band_2_v1.mp3
            tags:
              - Tense
              - Cinematic
              - Negative
              - Simple Meter
              - 4/4
              - Natural Minor
              - Dorian
              - Minimal
              - Adagio
              - Single Region
              - Main
              - Entertainment
              - Politics
              - Keys
              - Mid Pads
              - Fast
              - Slow
              - Slow
              - Voice
              - Medium Bright
              - Non Noisy
              - Medium Thick
              - Angelic
              - Direct
              - Percussion
              - Perc FX
              - Misc
              - Acoustic Pianos
              - Grand
              - Nice
              - Roomy
              - Pop
              - Upright
              - Clean
              - Classic
              - Keyboards
              - Digital Keyboard
              - Strings
              - Synth Basses
              - Fast
              - Dark
              - Thick
              - Sub
              - Synth Mallets
              - Dull
              - Mid Synth Beds
              - Slow
              - None
              - Medium Noisy
              - Harsh
              - Fast
              - Airy
              - Long Textures
              - Ambience
              - Synth Texture
              - Ethereal
              - Set Kicks
              - Processed
              - Hubcap Mallet
              - Wide
              - Tickie
              - Airy
              - Chamber
              - Thin
              - Organ
              - Cello Ensemble
              - Sweet
              - Big
              - Di
              - Raw
              - Bright
              - Tight
              - Chorus
              - Buzzy
              - Huge
              - Warm
              - Jazz
              - Brass
              - String
              - Hollow
              - Woodwind
              - Breathy
              - Crystal
              - Rhodes
              - Synth Piano
              - Noisy
              - Woody
              - Metallic
              - Reverse Piano
              - Full
              - Foley
              - Piano
              - Clean
              - Delayed
              - Reverb
              - Low Passed
              - Large
              - Medium
              - Small
        page: 1
        per_page: 1
      properties:
        data:
          description: List of descriptors
          items:
            $ref: "#/components/schemas/Descriptors"
          type: array
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
      type: object
    DownloadHistory:
      description: Information about a downloaded media item. Applicable for all media types, only one of 'audio', 'image' or 'video' will be in a single DownloadHistory object
      example:
        download_time: 2021-05-20T20:31:46.000Z
        id: a24499ca3ccd912a6d8316d45f953ef092
        image:
          format:
            size: medium
          id: "1234567"
        is_downloadable: true
        license: standard
        subscription_id: s12345678
        user:
          username: jdoe
      properties:
        audio:
          $ref: "#/components/schemas/DownloadHistoryMediaDetails"
        download_time:
          description: Date the media was downloaded the first time
          format: date-time
          type: string
        id:
          description: ID of the download
          type: string
        image:
          $ref: "#/components/schemas/DownloadHistoryMediaDetails"
        is_downloadable:
          description: Specifies if the media is downloadable via its respective downloads endpoint
          type: boolean
        license:
          description: The name of the license of this download
          type: string
        metadata:
          description: The metadata that was passed in the original licensing request
          type: object
        revshare:
          $ref: "#/components/schemas/DownloadHistoryRevshareDetails"
        subscription_id:
          description: ID of the subscription used to perform this download
          type: string
        user:
          $ref: "#/components/schemas/DownloadHistoryUserDetails"
        video:
          $ref: "#/components/schemas/DownloadHistoryMediaDetails"
      required:
        - id
        - download_time
        - license
      type: object
    DownloadHistoryDataList:
      description: List of download events
      example:
        data:
          - download_time: 2021-07-15T15:46:34.000Z
            id: e1eba3833793e77188d22caae8bac9f2cd
            image:
              format:
                size: original
              id: 9763363ao
            is_downloadable: false
            license: premier_editorial_all_digital
            metadata:
              client: Company A
              job: Important project
              other: Important media
              purchase_order: "123456"
            subscription_id: s12345678
            user:
              username: editorial_test_account_002
        page: 1
        per_page: 1
        total_count: 2890
      properties:
        data:
          description: Download events
          items:
            $ref: "#/components/schemas/DownloadHistory"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: The current page of results
          type: integer
        per_page:
          description: The number of results per page
          type: integer
        total_count:
          description: The total number of results across all pages
          type: integer
    DownloadHistoryFormatDetails:
      description: Information about the format of a download
      example:
        format: jpg
        size: medium
      properties:
        format:
          description: The format of the downloaded media
          type: string
        size:
          description: The size of the downloaded media
          type: string
      type: object
    DownloadHistoryMediaDetails:
      description: Information about the downloaded media
      example:
        format:
          format: jpg
          size: medium
        id: "1234567"
      properties:
        format:
          $ref: "#/components/schemas/DownloadHistoryFormatDetails"
        id:
          description: ID of the download history media details
          type: string
      required:
        - id
      type: object
    DownloadHistoryRevshareDetails:
      description: Pricing information for revenue-sharing transactions
      example:
        purchase_amount: "8.65"
        purchase_currency: USD
      properties:
        purchase_amount:
          description: The amount charged for the license
          type: string
        purchase_currency:
          description: The currency the amount was charged in
          type: string
      required:
        - purchase_amount
        - purchase_currency
      type: object
    DownloadHistoryUserDetails:
      description: Information about a user
      example:
        username: jdoe
      properties:
        username:
          description: The name of the user who downloaded the item
          type: string
      required:
        - username
      type: object
    EditorialAssets:
      description: Asset information, including size and thumbnail URLs
      example:
        medium_jpg:
          display_name: Med
          height: 617
          is_licensable: true
          width: 1000
        original:
          display_name: Original
          height: 3693
          is_licensable: true
          width: 5985
        small_jpg:
          display_name: Small
          height: 309
          is_licensable: true
          width: 500
        thumb_170:
          height: 105
          url: https://editorial01.qa.shuttercorp.net/thumb/10687730b/272a999e/Shutterstock_10687730b.jpg
          width: 170
        thumb_220:
          height: 136
          url: https://editorial01.qa.shuttercorp.net/thumb-220/10687730b/927a6ebe/Shutterstock_10687730b.jpg
          width: 220
        watermark_1500:
          height: 926
          url: https://editorial01.qa.shuttercorp.net/wm-preview-1500/10687730b/ee2d7ae1/Shutterstock_10687730b.jpg
          width: 1500
        watermark_450:
          height: 278
          url: https://editorial01.qa.shuttercorp.net/wm-preview-450/10687730b/ff2443ad/Shutterstock_10687730b.jpg
          width: 450
      properties:
        medium_jpg:
          $ref: "#/components/schemas/ImageSizeDetails"
        original:
          $ref: "#/components/schemas/ImageSizeDetails"
        small_jpg:
          $ref: "#/components/schemas/ImageSizeDetails"
        thumb_170:
          $ref: "#/components/schemas/Thumbnail"
        thumb_220:
          $ref: "#/components/schemas/Thumbnail"
        watermark_1500:
          $ref: "#/components/schemas/Thumbnail"
        watermark_450:
          $ref: "#/components/schemas/Thumbnail"
      type: object
    EditorialCategory:
      description: Name of an editorial category
      example:
        name: Awards
      properties:
        name:
          type: string
      type: object
    EditorialCategoryResults:
      description: List of editorial categories
      example:
        data:
          - name: Animal
          - name: Awards
          - name: Art
      properties:
        data:
          description: List of editorial categories
          items:
            $ref: "#/components/schemas/EditorialCategory"
          type: array
      type: object
    EditorialContent:
      description: Metadata about editorial content
      example:
        aspect: 1.621
        assets:
          medium_jpg:
            display_name: Med
            height: 617
            is_licensable: true
            width: 1000
          original:
            display_name: Original
            height: 3693
            is_licensable: true
            width: 5985
          small_jpg:
            display_name: Small
            height: 309
            is_licensable: true
            width: 500
          thumb_170:
            height: 105
            url: https://editorial01.qa.shuttercorp.net/thumb/10687730b/272a999e/Shutterstock_10687730b.jpg
            width: 170
          thumb_220:
            height: 136
            url: https://editorial01.qa.shuttercorp.net/thumb-220/10687730b/927a6ebe/Shutterstock_10687730b.jpg
            width: 220
          watermark_1500:
            height: 926
            url: https://editorial01.qa.shuttercorp.net/wm-preview-1500/10687730b/ee2d7ae1/Shutterstock_10687730b.jpg
            width: 1500
          watermark_450:
            height: 278
            url: https://editorial01.qa.shuttercorp.net/wm-preview-450/10687730b/ff2443ad/Shutterstock_10687730b.jpg
            width: 450
        byline: Jon Super/AP/Shutterstock
        caption: ""
        categories:
          - name: Sport
        date_taken: 2021-05-11
        description: Security and stewards stand outside the Old Trafford stadium in Manchester, England, ahead of the English Premier League soccer match between Manchester United and Leicester City. This is the first Manchester United home match since fans protested against American owner Joel Glazer, forcing the postponement of the team's Premier League game against Liverpool. The protests prompted Glazer to publish a letter in which he pledged to accelerate discussions with fans about supporters being able to have a greater say at the club
        id: 10687730b
        keywords:
          - england
          - europe
          - leicester city fc
          - manchester
          - manchester united fc
          - men's soccer
          - men's sports
          - premier league
          - professional soccer
          - soccer
          - sports
          - united kingdom
          - western europe
          - wsoc
        title: Soccer Premier League, Manchester, United Kingdom - 11 May 2021
      properties:
        aspect:
          type: number
        assets:
          $ref: "#/components/schemas/EditorialAssets"
        byline:
          type: string
        caption:
          type: string
        categories:
          description: List of categories
          items:
            $ref: "#/components/schemas/EditorialCategory"
          type: array
        date_taken:
          format: date
          type: string
        description:
          type: string
        id:
          type: string
        keywords:
          items:
            type: string
          type: array
        special_instructions:
          type: string
        title:
          type: string
      required:
        - id
      type: object
    EditorialContentDataList:
      description: List of editorial items
      example:
        data:
          - aspect: 1.621
            assets:
              medium_jpg:
                display_name: Med
                height: 617
                is_licensable: true
                width: 1000
              original:
                display_name: Original
                height: 3693
                is_licensable: true
                width: 5985
              small_jpg:
                display_name: Small
                height: 309
                is_licensable: true
                width: 500
              thumb_170:
                height: 105
                url: https://editorial01.qa.shuttercorp.net/thumb/10687730b/272a999e/Shutterstock_10687730b.jpg
                width: 170
              thumb_220:
                height: 136
                url: https://editorial01.qa.shuttercorp.net/thumb-220/10687730b/927a6ebe/Shutterstock_10687730b.jpg
                width: 220
              watermark_1500:
                height: 926
                url: https://editorial01.qa.shuttercorp.net/wm-preview-1500/10687730b/ee2d7ae1/Shutterstock_10687730b.jpg
                width: 1500
              watermark_450:
                height: 278
                url: https://editorial01.qa.shuttercorp.net/wm-preview-450/10687730b/ff2443ad/Shutterstock_10687730b.jpg
                width: 450
            byline: Jon Super/AP/Shutterstock
            caption: ""
            categories:
              - name: Sport
            date_taken: 2021-05-11
            description: Security and stewards stand outside the Old Trafford stadium in Manchester, England, ahead of the English Premier League soccer match between Manchester United and Leicester City. This is the first Manchester United home match since fans protested against American owner Joel Glazer, forcing the postponement of the team's Premier League game against Liverpool. The protests prompted Glazer to publish a letter in which he pledged to accelerate discussions with fans about supporters being able to have a greater say at the club
            id: 10687730b
            keywords:
              - england
              - europe
              - leicester city fc
              - manchester
              - manchester united fc
              - men's soccer
              - men's sports
              - premier league
              - professional soccer
              - soccer
              - sports
              - united kingdom
              - western europe
              - wsoc
            title: Soccer Premier League, Manchester, United Kingdom - 11 May 2021
        page: 1
        per_page: 5
        total_count: 16
      properties:
        data:
          description: Editorial items
          items:
            $ref: "#/components/schemas/EditorialContent"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Optional error message
          type: string
        page:
          description: Current page of the response
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results
          type: integer
    EditorialCoverItem:
      description: Cover image for editorial livefeed
      example:
        height: 117
        id: 9763363q
        url: https://editorial01.qa.shuttercorp.net/thumb/9763363q/51e28f39/Shutterstock_9763363q.jpg
        width: 170
      properties:
        height:
          type: integer
        id:
          type: string
        url:
          type: string
        width:
          type: integer
      required:
        - id
        - url
      type: object
    EditorialImageCategoryResults:
      description: List of editorial categories
      example:
        data:
          - name: Animal
          - name: Awards
          - name: Art
          - name: Film Stills
      properties:
        data:
          items:
            $ref: "#/components/schemas/EditorialCategory"
          type: array
      type: object
    EditorialImageContentDataList:
      description: List of editorial items
      example:
        data:
          - aspect: 1.621
            assets:
              medium_jpg:
                display_name: Med
                height: 617
                is_licensable: true
                width: 1000
              original:
                display_name: Original
                height: 3693
                is_licensable: true
                width: 5985
              small_jpg:
                display_name: Small
                height: 309
                is_licensable: true
                width: 500
              thumb_170:
                height: 105
                url: https://editorial01.qa.shuttercorp.net/thumb/10687730b/272a999e/Shutterstock_10687730b.jpg
                width: 170
              thumb_220:
                height: 136
                url: https://editorial01.qa.shuttercorp.net/thumb-220/10687730b/927a6ebe/Shutterstock_10687730b.jpg
                width: 220
              watermark_1500:
                height: 926
                url: https://editorial01.qa.shuttercorp.net/wm-preview-1500/10687730b/ee2d7ae1/Shutterstock_10687730b.jpg
                width: 1500
              watermark_450:
                height: 278
                url: https://editorial01.qa.shuttercorp.net/wm-preview-450/10687730b/ff2443ad/Shutterstock_10687730b.jpg
                width: 450
            byline: Jon Super/AP/Shutterstock
            caption: ""
            categories:
              - name: Sport
            date_taken: 2021-05-11
            description: Security and stewards stand outside the Old Trafford stadium in Manchester, England, ahead of the English Premier League soccer match between Manchester United and Leicester City. This is the first Manchester United home match since fans protested against American owner Joel Glazer, forcing the postponement of the team's Premier League game against Liverpool. The protests prompted Glazer to publish a letter in which he pledged to accelerate discussions with fans about supporters being able to have a greater say at the club
            id: 10687730b
            keywords:
              - england
              - europe
              - leicester city fc
              - manchester
              - manchester united fc
              - men's soccer
              - men's sports
              - premier league
              - professional soccer
              - soccer
              - sports
              - united kingdom
              - western europe
              - wsoc
            title: Soccer Premier League, Manchester, United Kingdom - 11 May 2021
        page: 1
        per_page: 1
        total_count: 23
      properties:
        data:
          description: Editorial items
          items:
            $ref: "#/components/schemas/EditorialContent"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Optional error message
          type: string
        page:
          description: Current page of the response
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results
          type: integer
    EditorialImageLivefeed:
      description: Metadata about editorial livefeed
      example:
        cover_item:
          height: 117
          id: 9763363q
          url: https://editorial01.qa.shuttercorp.net/thumb/9763363q/51e28f39/Shutterstock_9763363q.jpg
          width: 170
        created_time: 2018-07-17T12:42:03+00:00
        id: 2018%2F07%2F17%2FPrince%20Charles%20and%20Camilla%20Duchess%20of%20Cornwall%20visit%20to%20Cornwall%2C%20Day%202
        name: Prince Charles and Camilla Duchess of Cornwall visit to Cornwall, Day 2
        total_item_count: 38
      properties:
        cover_item:
          $ref: "#/components/schemas/EditorialCoverItem"
        created_time:
          description: When the livefeed was initially created
          format: date-time
          type: string
        id:
          description: Livefeed ID
          type: string
        name:
          description: Name of the livefeed
          type: string
        total_item_count:
          description: Total count of items in the livefeed
          type: integer
      required:
        - id
        - name
        - total_item_count
      type: object
    EditorialImageLivefeedList:
      description: List of editorial livefeeds
      example:
        data:
          - cover_item:
              height: 117
              id: 9763363q
              url: https://editorial01.qa.shuttercorp.net/thumb/9763363q/51e28f39/Shutterstock_9763363q.jpg
              width: 170
            created_time: 2018-07-17T12:42:03+00:00
            id: 2018%2F07%2F17%2FPrince%20Charles%20and%20Camilla%20Duchess%20of%20Cornwall%20visit%20to%20Cornwall%2C%20Day%202
            name: Prince Charles and Camilla Duchess of Cornwall visit to Cornwall, Day 2
            total_item_count: 38
        page: 1
        per_page: 1
        total_count: 5300
      properties:
        data:
          description: Editorial livefeeds
          items:
            $ref: "#/components/schemas/EditorialLivefeed"
          type: array
        message:
          description: Optional error message
          type: string
        page:
          description: Current page of the response
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results
          type: integer
      required:
        - data
        - total_count
      type: object
    EditorialLivefeed:
      description: Metadata about editorial livefeed
      example:
        cover_item:
          height: 117
          id: 9763363q
          url: https://editorial01.qa.shuttercorp.net/thumb/9763363q/51e28f39/Shutterstock_9763363q.jpg
          width: 170
        created_time: 2018-07-17T12:42:03+00:00
        id: 2018%2F07%2F17%2FPrince%20Charles%20and%20Camilla%20Duchess%20of%20Cornwall%20visit%20to%20Cornwall%2C%20Day%202
        name: Prince Charles and Camilla Duchess of Cornwall visit to Cornwall, Day 2
        total_item_count: 38
      properties:
        cover_item:
          $ref: "#/components/schemas/EditorialCoverItem"
        created_time:
          description: When the livefeed was initially created
          format: date-time
          type: string
        id:
          description: Livefeed ID
          type: string
        name:
          description: Name of the livefeed
          type: string
        total_item_count:
          description: Total count of items in the livefeed
          type: integer
      required:
        - id
        - name
        - total_item_count
      type: object
    EditorialLivefeedList:
      description: List of editorial livefeeds
      example:
        data:
          - cover_item:
              height: 117
              id: 9763363q
              url: https://editorial01.qa.shuttercorp.net/thumb/9763363q/51e28f39/Shutterstock_9763363q.jpg
              width: 170
            created_time: 2018-07-17T12:42:03+00:00
            id: 2018%2F07%2F17%2FPrince%20Charles%20and%20Camilla%20Duchess%20of%20Cornwall%20visit%20to%20Cornwall%2C%20Day%202
            name: Prince Charles and Camilla Duchess of Cornwall visit to Cornwall, Day 2
            total_item_count: 38
        page: 1
        per_page: 1
        total_count: 56
      properties:
        data:
          description: Editorial livefeeds
          items:
            $ref: "#/components/schemas/EditorialLivefeed"
          type: array
        message:
          description: Optional error message
          type: string
        page:
          description: Current page of the response
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results
          type: integer
      required:
        - data
        - total_count
      type: object
    EditorialSearchResults:
      description: Editorial search results
      example:
        data:
          - aspect: 1.621
            assets:
              medium_jpg:
                display_name: Med
                height: 617
                is_licensable: true
                width: 1000
              original:
                display_name: Original
                height: 3693
                is_licensable: true
                width: 5985
              small_jpg:
                display_name: Small
                height: 309
                is_licensable: true
                width: 500
              thumb_170:
                height: 105
                url: https://editorial01.qa.shuttercorp.net/thumb/10687730b/272a999e/Shutterstock_10687730b.jpg
                width: 170
              thumb_220:
                height: 136
                url: https://editorial01.qa.shuttercorp.net/thumb-220/10687730b/927a6ebe/Shutterstock_10687730b.jpg
                width: 220
              watermark_1500:
                height: 926
                url: https://editorial01.qa.shuttercorp.net/wm-preview-1500/10687730b/ee2d7ae1/Shutterstock_10687730b.jpg
                width: 1500
              watermark_450:
                height: 278
                url: https://editorial01.qa.shuttercorp.net/wm-preview-450/10687730b/ff2443ad/Shutterstock_10687730b.jpg
                width: 450
            byline: Jon Super/AP/Shutterstock
            caption: ""
            categories:
              - name: Sport
            date_taken: 2021-05-11
            description: Security and stewards stand outside the Old Trafford stadium in Manchester, England, ahead of the English Premier League soccer match between Manchester United and Leicester City. This is the first Manchester United home match since fans protested against American owner Joel Glazer, forcing the postponement of the team's Premier League game against Liverpool. The protests prompted Glazer to publish a letter in which he pledged to accelerate discussions with fans about supporters being able to have a greater say at the club
            id: 10687730b
            keywords:
              - england
              - europe
              - leicester city fc
              - manchester
              - manchester united fc
              - men's soccer
              - men's sports
              - premier league
              - professional soccer
              - soccer
              - sports
              - united kingdom
              - western europe
              - wsoc
            title: Soccer Premier League, Manchester, United Kingdom - 11 May 2021
        next: eyJ2IjoyLCJzIjoxLCJwIjpbMF19
        per_page: 1
        prev: ""
        search_id: BaMzOAkpHIvfnuWVRFs1ag
        total_count: 46845
      properties:
        data:
          description: Editorial items
          items:
            $ref: "#/components/schemas/EditorialContent"
          type: array
        message:
          description: Optional error message
          type: string
        next:
          description: Cursor value that represents the next page of results
          type: string
        page:
          description: Current page of the response
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        prev:
          description: Cursor value that represents the previous page of results
          type: string
        search_id:
          description: Unique identifier for the search request
          type: string
        total_count:
          description: Total count of all results
          type: integer
      required:
        - data
        - total_count
      type: object
    EditorialUpdatedContent:
      description: Metadata about updated editorial content
      example:
        aspect: 1.481
        assets:
          medium_jpg:
            display_name: Med
            height: 675
            is_licensable: true
            width: 1000
          original:
            display_name: Original
            height: 3263
            is_licensable: true
            width: 4831
          small_jpg:
            display_name: Small
            height: 337
            is_licensable: true
            width: 500
          thumb_170:
            height: 115
            url: https://editorial01.shutterstock.com/thumb/9804979n/c4377a53/Shutterstock_9804979n.jpg
            width: 170
          thumb_220:
            height: 149
            url: https://editorial01.shutterstock.com/thumb-220/9804979n/c57a68c7/Shutterstock_9804979n.jpg
            width: 220
          watermark_1500:
            height: 1500
            url: https://editorial01.shutterstock.com/wm-preview-1500/9933285a/ab82fea4/Shutterstock_9933285a.jpg
            width: 1040
          watermark_450:
            height: 304
            url: https://editorial01.shutterstock.com/wm-preview-450/9804979n/37d19dce/Shutterstock_9804979n.jpg
            width: 450
        byline: ALEX HOFFORD/EPA-EFE/Shutterstock
        caption: ""
        categories: []
        commercial_status:
          status: available
        date_taken: 2018-08-24
        description: Members of the TyLoo e-Sports team from China prepare to face off against the Kinguin e-Sports team from Poland at the ICBC (Asia) e-Sports and Music Festival Hong Kong 2018, Hong Kong, China, 24 August 2018. The festival runs from 24 to 26 August with professional gamers from around the world competing in international e-sports tournaments.
        id: 9804979n
        keywords: []
        rights:
          countries: CAN,+DEU,+GBR,+USA,-*
        supplier_code: EPA
        title: Hong Kong kicks off international e-Sports competition, China - 24 Aug 2018
        updated_time: 2019-07-15T20:04:44-04:00
        updates:
          - addition
      properties:
        aspect:
          type: number
        assets:
          $ref: "#/components/schemas/EditorialAssets"
        byline:
          type: string
        caption:
          type: string
        categories:
          description: List of categories
          items:
            $ref: "#/components/schemas/EditorialCategory"
          type: array
        commercial_status:
          properties:
            reason:
              type: string
            status:
              type: string
        created_time:
          format: date-time
          type: string
        date_taken:
          format: date
          type: string
        description:
          type: string
        id:
          type: string
        keywords:
          items:
            type: string
          type: array
        rights:
          properties:
            countries:
              type: string
          type: object
        special_instructions:
          type: string
        supplier_code:
          type: string
        title:
          type: string
        updated_time:
          format: date-time
          type: string
        updates:
          items:
            type: string
          type: array
      required:
        - id
      type: object
    EditorialUpdatedResults:
      description: Editorial updated results
      example:
        data:
          - aspect: 1.481
            assets:
              medium_jpg:
                display_name: Med
                height: 675
                is_licensable: true
                width: 1000
              original:
                display_name: Original
                height: 3263
                is_licensable: true
                width: 4831
              small_jpg:
                display_name: Small
                height: 337
                is_licensable: true
                width: 500
              thumb_170:
                height: 115
                url: https://editorial01.shutterstock.com/thumb/9804979n/c4377a53/Shutterstock_9804979n.jpg
                width: 170
              thumb_220:
                height: 149
                url: https://editorial01.shutterstock.com/thumb-220/9804979n/c57a68c7/Shutterstock_9804979n.jpg
                width: 220
              watermark_1500:
                height: 1500
                url: https://editorial01.shutterstock.com/wm-preview-1500/9933285a/ab82fea4/Shutterstock_9933285a.jpg
                width: 1040
              watermark_450:
                height: 304
                url: https://editorial01.shutterstock.com/wm-preview-450/9804979n/37d19dce/Shutterstock_9804979n.jpg
                width: 450
            byline: ALEX HOFFORD/EPA-EFE/Shutterstock
            caption: ""
            categories: []
            commercial_status:
              status: available
            date_taken: 2018-08-24
            description: Members of the TyLoo e-Sports team from China prepare to face off against the Kinguin e-Sports team from Poland at the ICBC (Asia) e-Sports and Music Festival Hong Kong 2018, Hong Kong, China, 24 August 2018. The festival runs from 24 to 26 August with professional gamers from around the world competing in international e-sports tournaments.
            id: 9804979n
            keywords: []
            rights:
              countries: CAN,+DEU,+GBR,+USA,-*
            supplier_code: EPA
            title: Hong Kong kicks off international e-Sports competition, China - 24 Aug 2018
            updated_time: 2019-07-15T20:04:44-04:00
            updates:
              - addition
        next: eyJ2IjoxLCJzIjoxfQ==
        per_page: 1
        prev: ""
      properties:
        data:
          description: Editorial updated items
          items:
            $ref: "#/components/schemas/EditorialUpdatedContent"
          type: array
        message:
          description: Optional error message
          type: string
        next:
          description: Cursor value that represents the next page of results
          type: string
        per_page:
          description: Number of results per page
          type: integer
        prev:
          description: Cursor value that represents the previous page of results
          type: string
      required:
        - data
      type: object
    EditorialVideoAssets:
      description: Asset information, including size and thumbnail URLs
      example:
        original:
          display_name: HD
          file_size: 82233387
          format: avc1
          fps: 30
          height: 1080
          is_licensable: true
          width: 1080
        preview_mp4:
          url: https://qa.editorial-cdn.shuttercorp.net/wm-preview-mp4/10679854a/M0T7A13aNej2g82bMTI4NjY=/Shutterstock_10679854a.mp4
        preview_webm:
          url: https://qa.editorial-cdn.shuttercorp.net/wm-preview-webm/10679854a/M4T6A63fN2j5g929MTI4NjY=/Shutterstock_10679854a.webm
        thumb_jpg:
          url: https://qa.editorial-cdn.shuttercorp.net/thumb-1/10679854a/M5TcAf30Ncjcge2eMTI4NjY=/Shutterstock_10679854a.jpg
      properties:
        original:
          $ref: "#/components/schemas/VideoSizeDetails"
        preview_mp4:
          $ref: "#/components/schemas/VideoPreviewUrl"
        preview_webm:
          $ref: "#/components/schemas/VideoPreviewUrl"
        thumb_jpg:
          $ref: "#/components/schemas/VideoPreviewUrl"
      type: object
    EditorialVideoCategoryResults:
      description: List of editorial video categories
      example:
        data:
          - name: Animal
          - name: Awards
          - name: Art
          - name: Film Stills
      properties:
        data:
          items:
            $ref: "#/components/schemas/EditorialCategory"
          type: array
      type: object
    EditorialVideoContent:
      description: Metadata about editorial content
      example:
        aspect: 1
        assets:
          original:
            display_name: HD
            file_size: 82233387
            format: avc1
            fps: 30
            height: 1080
            is_licensable: true
            width: 1080
          preview_mp4:
            url: https://qa.editorial-cdn.shuttercorp.net/wm-preview-mp4/10679854a/M0T7A13aNej2g82bMTI4NjY=/Shutterstock_10679854a.mp4
          preview_webm:
            url: https://qa.editorial-cdn.shuttercorp.net/wm-preview-webm/10679854a/M4T6A63fN2j5g929MTI4NjY=/Shutterstock_10679854a.webm
          thumb_jpg:
            url: https://qa.editorial-cdn.shuttercorp.net/thumb-1/10679854a/M5TcAf30Ncjcge2eMTI4NjY=/Shutterstock_10679854a.jpg
        byline: ViralHog/Shutterstock
        caption: ""
        categories: []
        date_taken: 2020-11-13
        description: "Info from Licensor: \"Peeps the Canadian Goose has been raised with our family since a gosling. Peeps has made appearances on our local news channels, TV shows, and local newspapers. He has been trained to fly next to four wheelers, jet ski's, and boats. He has brought joy to many people during the pandemic including those with cancer.\""
        id: 10679854a
        keywords:
          - "2020"
          - adorable
          - birds
          - bizarre
          - canadian goose
          - cute
          - domesticated animals
          - entertainment
          - feel good
          - flew
          - flies
          - fly
          - flying
          - fun
          - goose
          - jet skis
          - nature
          - odd
          - pets
          - played
          - playing
          - plays
          - prior lake
          - sports
          - strange
          - sweet
          - usa
          - viralhog
          - virals
          - water sports
          - weird
        title: Peeps the Goose Has a Blast on a Jet Ski, Prior Lake, Minnesota, USA - 13 Nov 2020
      properties:
        aspect:
          type: number
        assets:
          $ref: "#/components/schemas/EditorialVideoAssets"
        byline:
          type: string
        caption:
          type: string
        categories:
          description: List of categories
          items:
            $ref: "#/components/schemas/EditorialCategory"
          type: array
        date_taken:
          format: date
          type: string
        description:
          type: string
        id:
          type: string
        keywords:
          items:
            type: string
          type: array
        title:
          type: string
      required:
        - id
      type: object
    EditorialVideoSearchResults:
      description: Editorial search results
      example:
        data:
          - aspect: 1
            assets:
              original:
                display_name: HD
                file_size: 82233387
                format: avc1
                fps: 30
                height: 1080
                is_licensable: true
                width: 1080
              preview_mp4:
                url: https://qa.editorial-cdn.shuttercorp.net/wm-preview-mp4/10679854a/M0T7A13aNej2g82bMTI4NjY=/Shutterstock_10679854a.mp4
              preview_webm:
                url: https://qa.editorial-cdn.shuttercorp.net/wm-preview-webm/10679854a/M4T6A63fN2j5g929MTI4NjY=/Shutterstock_10679854a.webm
              thumb_jpg:
                url: https://qa.editorial-cdn.shuttercorp.net/thumb-1/10679854a/M5TcAf30Ncjcge2eMTI4NjY=/Shutterstock_10679854a.jpg
            byline: ViralHog/Shutterstock
            caption: ""
            categories: []
            date_taken: 2020-11-13
            description: "Info from Licensor: \"Peeps the Canadian Goose has been raised with our family since a gosling. Peeps has made appearances on our local news channels, TV shows, and local newspapers. He has been trained to fly next to four wheelers, jet ski's, and boats. He has brought joy to many people during the pandemic including those with cancer.\""
            id: 10679854a
            keywords:
              - "2020"
              - adorable
              - birds
              - bizarre
              - canadian goose
              - cute
              - domesticated animals
              - entertainment
              - feel good
              - flew
              - flies
              - fly
              - flying
              - fun
              - goose
              - jet skis
              - nature
              - odd
              - pets
              - played
              - playing
              - plays
              - prior lake
              - sports
              - strange
              - sweet
              - usa
              - viralhog
              - virals
              - water sports
              - weird
            title: Peeps the Goose Has a Blast on a Jet Ski, Prior Lake, Minnesota, USA - 13 Nov 2020
        next: eyJ2IjoyLCJzIjoyMCwicCI6WzBdfQ==
        per_page: 1
        prev: ""
        search_id: zhmz9zLmpQehdTPvg8cacQ
        total_count: 331
      properties:
        data:
          description: Editorial items
          items:
            $ref: "#/components/schemas/EditorialVideoContent"
          type: array
        message:
          description: Optional error message
          type: string
        next:
          description: Cursor value that represents the next page of results
          type: string
        page:
          description: Current page of the response
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        prev:
          description: Cursor value that represents the previous page of results
          type: string
        search_id:
          description: Unique identifier for the search request
          type: string
        total_count:
          description: Total count of all results
          type: integer
      required:
        - data
        - total_count
      type: object
    Error:
      description: Error object
      example:
        code: VALIDATION_INVALID_TYPE
        data: "'10'"
        message: "Invalid type: string should be integer"
        path: $.query.page
      properties:
        code:
          description: The error code of this error
          type: string
        data:
          description: Debugging information about the error
          type: string
        items:
          description: A list of items that produced the error
          items:
            type: object
          type: array
        message:
          description: Specific details about this error
          type: string
        path:
          description: Internal code reference to the source of the error
          type: string
      required:
        - message
      type: object
    FeaturedCollection:
      description: Metadata about a featured collection
      example:
        cover_item:
          url: https://ak.picdn.net/assets/cms/b467415246debdab45825d915a548f8f79b57882-Collection_1_Thumnail.jpg
        created_time: 2021-07-07T13:10:24.000Z
        id: "19853"
        items_updated_time: 2021-07-08T12:33:37.000Z
        name: Exercise & Fitness
        total_item_count: 82
        updated_time: 2021-07-07T13:10:24.000Z
      properties:
        cover_item:
          $ref: "#/components/schemas/FeaturedCollectionCoverItem"
        created_time:
          description: Date that the collection was created
          format: date-time
          type: string
        hero_item:
          $ref: "#/components/schemas/FeaturedCollectionCoverItem"
          description: Top-level item that is meant as a cover asset, as the first asset seen to represent the collection
        id:
          description: Collection ID
          type: string
        items_updated_time:
          description: Date that an item in the collection was last added or removed
          format: date-time
          type: string
        name:
          description: Name of the collection
          type: string
        share_url:
          description: Unique share url for the collection
          type: string
        total_item_count:
          description: Total number of items in the collection
          type: integer
        updated_time:
          description: Date that the collection was last modified
          format: date-time
          type: string
      required:
        - id
        - name
        - total_item_count
      type: object
    FeaturedCollectionCoverItem:
      description: Featured collection cover item metadata
      example:
        url: https://ak.picdn.net/assets/cms/b467415246debdab45825d915a548f8f79b57882-Collection_1_Thumnail.jpg
      properties:
        url:
          description: URL of the collection cover item
          type: string
      required:
        - url
      type: object
    FeaturedCollectionDataList:
      description: List of featured collections
      example:
        data:
          - cover_item:
              url: https://ak.picdn.net/assets/cms/b467415246debdab45825d915a548f8f79b57882-Collection_1_Thumnail.jpg
            created_time: 2021-07-07T13:10:24.000Z
            id: "19853"
            items_updated_time: 2021-07-08T12:33:37.000Z
            name: Exercise & Fitness
            total_item_count: 82
            updated_time: 2021-07-07T13:10:24.000Z
        page: 1
        per_page: 5
        total_count: 123455
      properties:
        data:
          description: Featured collections
          items:
            $ref: "#/components/schemas/FeaturedCollection"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results across all pages
          type: integer
    GenreList:
      additionalProperties: false
      description: List of audio genres
      example:
        data:
          - Rock
          - Pop > Singer-Songwriter
          - Pop > Synth Pop
          - Production / Film Scores
      properties:
        data:
          description: List of genres
          items:
            type: string
          type: array
      required:
        - data
      type: object
    ISOCountryCode:
      description: A valid ISO 3166-1 Alpha-2 or ISO 3166-1 Alpha-3 code.
      example: USA
      oneOf:
        - enum:
            - ABW
            - AFG
            - AGO
            - AIA
            - ALA
            - ALB
            - AND
            - ARE
            - ARG
            - ARM
            - ASM
            - ATA
            - ATF
            - ATG
            - AUS
            - AUT
            - AZE
            - BDI
            - BEL
            - BEN
            - BES
            - BFA
            - BGD
            - BGR
            - BHR
            - BHS
            - BIH
            - BLM
            - BLR
            - BLZ
            - BMU
            - BOL
            - BRA
            - BRB
            - BRN
            - BTN
            - BVT
            - BWA
            - CAF
            - CAN
            - CCK
            - CHE
            - CHL
            - CHN
            - CIV
            - CMR
            - COD
            - COG
            - COK
            - COL
            - COM
            - CPV
            - CRI
            - CUB
            - CUW
            - CXR
            - CYM
            - CYP
            - CZE
            - DEU
            - DJI
            - DMA
            - DNK
            - DOM
            - DZA
            - ECU
            - EGY
            - ERI
            - ESH
            - ESP
            - EST
            - ETH
            - FIN
            - FJI
            - FLK
            - FRA
            - FRO
            - FSM
            - GAB
            - GBR
            - GEO
            - GGY
            - GHA
            - GIB
            - GIN
            - GLP
            - GMB
            - GNB
            - GNQ
            - GRC
            - GRD
            - GRL
            - GTM
            - GUF
            - GUM
            - GUY
            - HKG
            - HMD
            - HND
            - HRV
            - HTI
            - HUN
            - IDN
            - IMN
            - IND
            - IOT
            - IRL
            - IRN
            - IRQ
            - ISL
            - ISR
            - ITA
            - JAM
            - JEY
            - JOR
            - JPN
            - KAZ
            - KEN
            - KGZ
            - KHM
            - KIR
            - KNA
            - KOR
            - KWT
            - LAO
            - LBN
            - LBR
            - LBY
            - LCA
            - LIE
            - LKA
            - LSO
            - LTU
            - LUX
            - LVA
            - MAC
            - MAF
            - MAR
            - MCO
            - MDA
            - MDG
            - MDV
            - MEX
            - MHL
            - MKD
            - MLI
            - MLT
            - MMR
            - MNE
            - MNG
            - MNP
            - MOZ
            - MRT
            - MSR
            - MTQ
            - MUS
            - MWI
            - MYS
            - MYT
            - NAM
            - NCL
            - NER
            - NFK
            - NGA
            - NIC
            - NIU
            - NLD
            - NOR
            - NPL
            - NRU
            - NZL
            - OMN
            - PAK
            - PAN
            - PCN
            - PER
            - PHL
            - PLW
            - PNG
            - POL
            - PRI
            - PRK
            - PRT
            - PRY
            - PSE
            - PYF
            - QAT
            - REU
            - ROU
            - RUS
            - RWA
            - SAU
            - SDN
            - SEN
            - SGP
            - SGS
            - SHN
            - SJM
            - SLB
            - SLE
            - SLV
            - SMR
            - SOM
            - SPM
            - SRB
            - SSD
            - STP
            - SUR
            - SVK
            - SVN
            - SWE
            - SWZ
            - SXM
            - SYC
            - SYR
            - TCA
            - TCD
            - TGO
            - THA
            - TJK
            - TKL
            - TKM
            - TLS
            - TON
            - TTO
            - TUN
            - TUR
            - TUV
            - TWN
            - TZA
            - UGA
            - UKR
            - UMI
            - URY
            - USA
            - UZB
            - VAT
            - VCT
            - VEN
            - VGB
            - VIR
            - VNM
            - VUT
            - WLF
            - WSM
            - YEM
            - ZAF
            - ZMB
            - ZWE
          format: country-code-3
          type: string
        - enum:
            - AF
            - AX
            - AL
            - DZ
            - AS
            - AD
            - AO
            - AI
            - AQ
            - AG
            - AR
            - AM
            - AW
            - AU
            - AT
            - AZ
            - BS
            - BH
            - BD
            - BB
            - BY
            - BE
            - BZ
            - BJ
            - BM
            - BT
            - BO
            - BA
            - BW
            - BV
            - BR
            - IO
            - BN
            - BG
            - BF
            - BI
            - KH
            - CM
            - CA
            - CV
            - KY
            - CF
            - TD
            - CL
            - CN
            - CX
            - CC
            - CO
            - KM
            - CG
            - CD
            - CK
            - CR
            - CI
            - HR
            - CU
            - CY
            - CZ
            - DK
            - DJ
            - DM
            - DO
            - EC
            - EG
            - SV
            - GQ
            - ER
            - EE
            - ET
            - FK
            - FO
            - FJ
            - FI
            - FR
            - GF
            - PF
            - TF
            - GA
            - GM
            - GE
            - DE
            - GH
            - GI
            - GR
            - GL
            - GD
            - GP
            - GU
            - GT
            - GG
            - GN
            - GW
            - GY
            - HT
            - HM
            - VA
            - HN
            - HK
            - HU
            - IS
            - IN
            - ID
            - IR
            - IQ
            - IE
            - IM
            - IL
            - IT
            - JM
            - JP
            - JE
            - JO
            - KZ
            - KE
            - KI
            - KR
            - KW
            - KG
            - LA
            - LV
            - LB
            - LS
            - LR
            - LY
            - LI
            - LT
            - LU
            - MO
            - MK
            - MG
            - MW
            - MY
            - MV
            - ML
            - MT
            - MH
            - MQ
            - MR
            - MU
            - YT
            - MX
            - FM
            - MD
            - MC
            - MN
            - ME
            - MS
            - MA
            - MZ
            - MM
            - NA
            - NR
            - NP
            - NL
            - AN
            - NC
            - NZ
            - NI
            - NE
            - NG
            - NU
            - NF
            - MP
            - NO
            - OM
            - PK
            - PW
            - PS
            - PA
            - PG
            - PY
            - PE
            - PH
            - PN
            - PL
            - PT
            - PR
            - QA
            - RE
            - RO
            - RU
            - RW
            - BL
            - SH
            - KN
            - LC
            - MF
            - PM
            - VC
            - WS
            - SM
            - ST
            - SA
            - SN
            - RS
            - SC
            - SL
            - SG
            - SK
            - SI
            - SB
            - SO
            - ZA
            - GS
            - ES
            - LK
            - SD
            - SR
            - SJ
            - SZ
            - SE
            - CH
            - SY
            - TW
            - TJ
            - TZ
            - TH
            - TL
            - TG
            - TK
            - TO
            - TT
            - TN
            - TR
            - TM
            - TC
            - TV
            - UG
            - UA
            - AE
            - GB
            - US
            - UM
            - UY
            - UZ
            - VU
            - VE
            - VN
            - VG
            - VI
            - WF
            - EH
            - YE
            - ZM
            - ZW
          format: country-code-2
          type: string
    Image:
      description: Information about an image
      example:
        aspect: 1.5
        assets:
          huge_thumb:
            height: 260
            url: https://image.shutterstock.com/image-photo/cropped-image-woman-gardening-260nw-1572478477.jpg
            width: 390
          large_thumb:
            height: 100
            url: https://thumb7.shutterstock.com/thumb_large/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
            width: 150
          mosaic:
            height: 167
            url: https://image.shutterstock.com/image-photo/stock-photo-cropped-image-of-woman-gardening-250nw-1572478477.jpg
            width: 250
          preview:
            height: 300
            url: https://image.shutterstock.com/display_pic_with_logo/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
            width: 450
          preview_1000:
            height: 667
            url: https://ak.picdn.net/shutterstock/photos/1572478477/watermark_1000/1706028c641ea2f443057287c67d9b91/preview_1000-1572478477.jpg
            width: 1000
          preview_1500:
            height: 1000
            url: https://image.shutterstock.com/z/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
            width: 1500
          small_thumb:
            height: 67
            url: https://thumb7.shutterstock.com/thumb_small/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
            width: 100
        contributor:
          id: "250738318"
        description: cropped image of woman gardening
        has_model_release: true
        id: "1572478477"
        image_type: photo
        media_type: image
        original_filename: 123.jpg
      properties:
        added_date:
          description: Date that the image was added by the contributor
          format: date
          type: string
        affiliate_url:
          description: Affiliate referral link; appears only for registered affiliate partners
          format: uri
          type: string
        aspect:
          description: Aspect ratio of the image in decimal format, such as 0.6667
          type: number
        assets:
          $ref: "#/components/schemas/ImageAssets"
          description: Image asset information
        categories:
          description: Categories that this image is a part of
          items:
            $ref: "#/components/schemas/Category"
          type: array
        contributor:
          $ref: "#/components/schemas/Contributor"
        description:
          description: Detailed description of the image
          type: string
        has_model_release:
          description: Indicates whether there are model releases for the image
          type: boolean
        has_property_release:
          description: Indicates whether there are property releases for the image
          type: boolean
        id:
          description: Image ID
          type: string
        image_type:
          description: Type of image
          type: string
        insights:
          description: AI-powered insights about how the asset will perform for the objective and audience
          properties:
            labels:
              items:
                type: string
              type: array
          type: object
        is_adult:
          description: Whether or not this image contains adult content
          type: boolean
        is_editorial:
          description: Whether or not this image is editorial content
          type: boolean
        is_illustration:
          description: Whether or not this image is an illustration
          type: boolean
        keywords:
          description: Keywords associated with the content of this image
          items:
            type: string
          type: array
        media_type:
          description: Media type of this image, should always be "image"
          type: string
        model_releases:
          description: List of model releases
          items:
            $ref: "#/components/schemas/ModelRelease"
          type: array
        models:
          description: List of models
          items:
            $ref: "#/components/schemas/Model"
          type: array
        releases:
          description: List of all releases of this image
          items:
            type: string
          type: array
        url:
          description: Link to image information page; included only for certain accounts
          type: string
      required:
        - id
        - media_type
        - contributor
      type: object
    ImageAssets:
      description: Information about the assets that are part of an image
      example:
        huge_thumb:
          height: 260
          url: https://image.shutterstock.com/image-photo/cropped-image-woman-gardening-260nw-1572478477.jpg
          width: 390
        large_thumb:
          height: 100
          url: https://thumb7.shutterstock.com/thumb_large/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
          width: 150
        preview:
          height: 300
          url: https://image.shutterstock.com/display_pic_with_logo/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
          width: 450
        preview_1000:
          height: 667
          url: https://ak.picdn.net/shutterstock/photos/1572478477/watermark_1000/1706028c641ea2f443057287c67d9b91/preview_1000-1572478477.jpg
          width: 1000
        preview_1500:
          height: 1000
          url: https://image.shutterstock.com/z/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
          width: 1500
        small_thumb:
          height: 67
          url: https://thumb7.shutterstock.com/thumb_small/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
          width: 100
      properties:
        huge_jpg:
          $ref: "#/components/schemas/ImageSizeDetails"
        huge_thumb:
          $ref: "#/components/schemas/Thumbnail"
        large_thumb:
          $ref: "#/components/schemas/Thumbnail"
        medium_jpg:
          $ref: "#/components/schemas/ImageSizeDetails"
        preview:
          $ref: "#/components/schemas/Thumbnail"
        preview_1000:
          $ref: "#/components/schemas/Thumbnail"
        preview_1500:
          $ref: "#/components/schemas/Thumbnail"
        small_jpg:
          $ref: "#/components/schemas/ImageSizeDetails"
        small_thumb:
          $ref: "#/components/schemas/Thumbnail"
        supersize_jpg:
          $ref: "#/components/schemas/ImageSizeDetails"
        vector_eps:
          $ref: "#/components/schemas/ImageSizeDetails"
      type: object
    ImageCreateRequest:
      description: Request to upload an image
      example:
        base64_image: R0lGODlhgACAAPcAAEwiBLyaLOzNUNmWFNjOrNSuN7x6PPzqeOTMgfKSDMyuTPzwsdi2dHwuBPzbVu
      properties:
        base64_image:
          description: A Base 64 encoded jpeg or png; images can be no larger than 10mb and can be no larger than 10,000 pixels in width or height
          type: string
      required:
        - base64_image
      type: object
    ImageCreateResponse:
      description: Image upload information
      example:
        id: Udb14e1c3540bdbf82b4b3fe12d3a44f2
      properties:
        id:
          type: string
      required:
        - id
      type: object
    ImageDataList:
      description: List of images
      example:
        data:
          - aspect: 1.5
            assets:
              huge_thumb:
                height: 260
                url: https://image.shutterstock.com/image-photo/cropped-image-woman-gardening-260nw-1572478477.jpg
                width: 390
              large_thumb:
                height: 100
                url: https://thumb7.shutterstock.com/thumb_large/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                width: 150
              preview:
                height: 300
                url: https://image.shutterstock.com/display_pic_with_logo/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                width: 450
              preview_1000:
                height: 667
                url: https://ak.picdn.net/shutterstock/photos/1572478477/watermark_1000/1706028c641ea2f443057287c67d9b91/preview_1000-1572478477.jpg
                width: 1000
              preview_1500:
                height: 1000
                url: https://image.shutterstock.com/z/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                width: 1500
              small_thumb:
                height: 67
                url: https://thumb7.shutterstock.com/thumb_small/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                width: 100
            contributor:
              id: "250738318"
            description: cropped image of woman gardening
            has_model_release: true
            id: "1572478477"
            image_type: photo
            media_type: image
        page: 1
        per_page: 5
        total_count: 123455
      properties:
        data:
          description: Images
          items:
            $ref: "#/components/schemas/Image"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results across all pages
          type: integer
    ImageSearchResults:
      description: Image search results
      example:
        data:
          - aspect: 1.5
            assets:
              huge_thumb:
                height: 260
                url: https://image.shutterstock.com/image-photo/cropped-image-woman-gardening-260nw-1572478477.jpg
                width: 390
              large_thumb:
                height: 100
                url: https://thumb7.shutterstock.com/thumb_large/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                width: 150
              mosaic:
                height: 167
                url: https://image.shutterstock.com/image-photo/stock-photo-cropped-image-of-woman-gardening-250nw-1572478477.jpg
                width: 250
              preview:
                height: 300
                url: https://image.shutterstock.com/display_pic_with_logo/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                width: 450
              preview_1000:
                height: 667
                url: https://ak.picdn.net/shutterstock/photos/1572478477/watermark_1000/1706028c641ea2f443057287c67d9b91/preview_1000-1572478477.jpg
                width: 1000
              preview_1500:
                height: 1000
                url: https://image.shutterstock.com/z/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                width: 1500
              small_thumb:
                height: 67
                url: https://thumb7.shutterstock.com/thumb_small/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
                width: 100
            contributor:
              id: "250738318"
            description: cropped image of woman gardening
            has_model_release: true
            id: "1572478477"
            image_type: photo
            media_type: image
        page: 1
        per_page: 5
        search_id: 749090bb-2967-4a20-b22e-c800dc845e10
        spellcheck_info: {}
        total_count: 45
      properties:
        data:
          description: List of images
          items:
            $ref: "#/components/schemas/Image"
          type: array
        insights:
          $ref: "#/components/schemas/Insights"
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        search_id:
          description: Unique identifier for the search request
          type: string
        spellcheck_info:
          description: Returns information if search phrase has potentially been mistyped or another query would lead to better search results
          type: object
        total_count:
          description: Total count of all results across all pages
          type: integer
      required:
        - data
        - total_count
        - search_id
      type: object
    ImageSizeDetails:
      description: Image size information
      example:
        display_name: Med
        dpi: 300
        file_size: 860200
        format: jpg
        height: 667
        is_licensable: true
        width: 1000
      properties:
        display_name:
          description: Display name of this image size
          type: string
        dpi:
          type: integer
        file_size:
          description: File size (in bytes) of this image size
          type: integer
        format:
          description: Format of this image size
          type: string
        height:
          description: Height of this image size
          type: integer
        is_licensable:
          description: Whether or not this image can be licensed in this image size
          type: boolean
        width:
          description: Width of this image size
          type: integer
      type: object
    Insights:
      description: AI-powered insights about an asset, based on the specified audience and objective
      example:
        label_performance:
          - name: Nature
            percentile_performance: 98.82123565673828
          - name: Outdoors
            percentile_performance: 98.63294982910156
      properties:
        label_performance:
          description: How effective the AI thinks an asset in the category is for the specified audience and objective, expressed as a percentile compared to other images
          items:
            properties:
              name:
                type: string
              percentile_performance:
                type: number
            type: object
          type: array
      required:
        - label_performance
      type: object
    Instrument:
      description: Information about an musical instrument
      example:
        id: bright_roomy_kit
        name: Bright Roomy Kit
        previews:
          - content_type: audio/mp3
            url: https://public-cdn.ampermusic.com/instruments/previews/bright_roomy_kit_v1.mp3
        tags:
          - Percussion
          - Aux Percs
          - Set Cymbals
          - Crash
          - Open
          - Ride
          - Set Hi-Hat
          - Set Kicks
          - Stick Snare
          - Quad Toms
          - Roto Toms
      properties:
        id:
          description: The id of the instrument
          type: string
        name:
          description: Name of the instrument
          type: string
        previews:
          description: Preview of the instrument
          items:
            $ref: "#/components/schemas/Preview"
          type: array
        tags:
          description: List of tags
          items:
            type: string
          type: array
      type: object
    InstrumentList:
      additionalProperties: false
      description: List of instruments
      example:
        data:
          - Orchestra
          - Organ
          - Oud
          - Pads
          - Electric Guitar
      properties:
        data:
          description: List of instruments
          items:
            type: string
          type: array
      required:
        - data
      type: object
    Instruments:
      description: Instruments
      example:
        id: bright_roomy_kit
        name: Bright Roomy Kit
      properties:
        id:
          description: The string id of the instrument
          type: string
        name:
          description: The string name of the instrument
          type: string
      type: object
    InstrumentsListResult:
      description: Image search results
      example:
        data:
          - id: bright_roomy_kit
            name: Bright Roomy Kit
            previews:
              - content_type: audio/mp3
                url: https://public-cdn.ampermusic.com/instruments/previews/bright_roomy_kit_v1.mp3
            tags:
              - Percussion
              - Aux Percs
              - Set Cymbals
              - Crash
              - Open
              - Ride
              - Set Hi-Hat
              - Set Kicks
              - Stick Snare
              - Quad Toms
              - Roto Toms
        page: 1
        per_page: 5
      properties:
        data:
          description: List of instrumnets
          items:
            $ref: "#/components/schemas/Instrument"
          type: array
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
      type: object
    KeywordDataList:
      description: List of keywords
      example:
        data:
          - nature
          - wildlife
          - animal
          - cute
          - bamboo
          - panda
          - china
          - wild
          - endangered
          - black
          - bear
      properties:
        data:
          description: Keywords
          items:
            type: string
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
    Language:
      description: Language code
      enum:
        - ar
        - bg
        - bn
        - cs
        - da
        - de
        - el
        - en
        - es
        - fi
        - fr
        - gu
        - he
        - hi
        - hr
        - hu
        - id
        - it
        - ja
        - kn
        - ko
        - ml
        - mr
        - nb
        - nl
        - or
        - pl
        - pt
        - ro
        - ru
        - sk
        - sl
        - sv
        - ta
        - te
        - th
        - tr
        - uk
        - ur
        - vi
        - zh
        - zh-Hant
      example: cs
      title: language
      type: string
    LicenseAudio:
      description: An audio track in a licensing request
      example:
        audio_id: "123456789"
        license: audio_platform
        search_id: "987654321"
      properties:
        audio_id:
          description: ID of the track being licensed
          type: string
        license:
          description: Type of license
          enum:
            - audio_platform
            - premier_music_basic
            - premier_music_extended
            - premier_music_pro
            - premier_music_comp
            - asset_all_music
          type: string
        search_id:
          description: ID of the search that led to this licensing event
          type: string
      required:
        - audio_id
      type: object
    LicenseAudioRequest:
      description: Audio license request data
      example:
        audio:
          - audio_id: "591623"
            license: audio_platform
            metadata:
              customer_id: "12345"
      properties:
        audio:
          description: List of audio tracks to license
          items:
            $ref: "#/components/schemas/LicenseAudio"
          maxItems: 50
          type: array
      required:
        - audio
      type: object
    LicenseAudioResult:
      description: The response to a licensing request for an audio track
      example:
        allotment_charge: 1
        audio_id: "123456789"
        download:
          url: http://download2.dev.shutterstock.com/gatekeeper/abc/original.wav
        license_id: abcdef123456789ghijklmn
      properties:
        allotment_charge:
          description: Number of credits that this licensing event used
          type: number
        audio_id:
          description: ID of the track that was licensed
          type: string
        download:
          $ref: "#/components/schemas/AudioUrl"
        error:
          description: Error information if applicable
          type: string
        license_id:
          description: ID of the license event
          type: string
      required:
        - audio_id
      type: object
    LicenseAudioResultDataList:
      description: List of audio license results
      example:
        data:
          - allotment_charge: 1
            audio_id: "123456789"
            download:
              url: http://download2.dev.shutterstock.com/gatekeeper/abc/original.wav
            license_id: abcdef123456789ghijklmn
      properties:
        data:
          description: License results
          items:
            $ref: "#/components/schemas/LicenseAudioResult"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results across all pages
          type: integer
    LicenseEditorialContent:
      description: Individual editorial content to license
      example:
        editorial_id: 10687730b
        license: premier_editorial_comp
        metadata:
          customer_id: "12345"
          geo_location: US
          number_viewed: "15"
          search_term: dog
        size: original
      properties:
        editorial_id:
          description: Editorial ID
          type: string
        license:
          description: License agreement to use for licensing
          type: string
        metadata:
          $ref: "#/components/schemas/LicenseRequestMetadata"
        size:
          default: original
          description: Asset size to download
          enum:
            - small
            - medium
            - original
          type: string
      required:
        - editorial_id
        - license
      type: object
    LicenseEditorialContentRequest:
      description: License editorial content request
      example:
        country: USA
        editorial:
          - editorial_id: 10687730b
            license: premier_editorial_comp
            metadata:
              customer_id: "12345"
              geo_location: US
              number_viewed: "15"
              search_term: dog
            size: original
      properties:
        country:
          $ref: "#/components/schemas/ISOCountryCode"
          description: Mandatory country code for where the editorial content will be distributed; this value is used for rights checks
          example: USA
        editorial:
          description: Editorial content to license
          items:
            $ref: "#/components/schemas/LicenseEditorialContent"
          type: array
      required:
        - country
        - editorial
      type: object
    LicenseEditorialContentResult:
      description: The response to a licensing request for editorial content
      example:
        allotment_charge: 1
        download:
          url: https://s3-eu-west-1.amazonaws.com/api-downloads.rexfeatures.com/[random-characters].jpg?Expires=1524717323
        editorial_id: "69656358"
      properties:
        allotment_charge:
          description: For pre-paid plans, how many credits were used for the item license
          type: integer
        download:
          $ref: "#/components/schemas/Url"
          description: Information that is needed to download the image
        editorial_id:
          description: Editorial ID
          type: string
        error:
          type: string
      required:
        - editorial_id
      type: object
    LicenseEditorialContentResults:
      description: List of editorial license results
      example:
        data:
          - allotment_charge: 1
            download:
              url: https://s3-eu-west-1.amazonaws.com/api-downloads.rexfeatures.com/[random-characters].jpg?Expires=1524717323
            editorial_id: "69656358"
        page: 1
        per_page: 1
        total_count: 12
      properties:
        data:
          description: License results
          items:
            $ref: "#/components/schemas/LicenseEditorialContentResult"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Optional error message
          type: string
        page:
          description: Current page of the response
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results
          type: integer
    LicenseEditorialVideoContent:
      description: Individual editorial video content to license
      example:
        editorial_id: 10679854a
        license: premier_editorial_video_digital_only
        metadata:
          purchase_order: "12345"
        size: original
      properties:
        editorial_id:
          description: Editorial ID
          type: string
        license:
          description: License agreement to use for licensing
          enum:
            - premier_editorial_video_digital_only
            - premier_editorial_video_all_media
            - premier_editorial_video_all_media_single_territory
            - premier_editorial_video_comp
          type: string
        metadata:
          $ref: "#/components/schemas/LicenseRequestMetadata"
        size:
          default: original
          description: Asset size to download
          enum:
            - original
          type: string
      required:
        - editorial_id
        - license
      type: object
    LicenseEditorialVideoContentRequest:
      description: License editorial video content request
      example:
        country: USA
        editorial:
          - editorial_id: 10679854a
            license: premier_editorial_video_digital_only
            metadata:
              purchase_order: "12345"
            size: original
      properties:
        country:
          $ref: "#/components/schemas/ISOCountryCode"
          description: Mandatory country code for where the editorial content will be distributed; this value is used for rights checks
          example: USA
        editorial:
          description: Editorial content to license
          items:
            $ref: "#/components/schemas/LicenseEditorialVideoContent"
          type: array
      required:
        - country
        - editorial
      type: object
    LicenseFormat:
      description: Description of a license
      example:
        description: Med
        format: jpg
        media_type: image
        min_resolution: 1000
        size: medium
      properties:
        description:
          description: Description of the license
          type: string
        format:
          description: Format or extension of the media, such as mpeg for videos or jpeg for images
          type: string
        media_type:
          description: Media type of the license
          enum:
            - image
            - video
            - audio
            - editorial
          type: string
        min_resolution:
          description: Width of the media, in pixels, allowed by this license
          type: integer
        size:
          description: Keyword that details the size of the media, such as hd or sd for video, huge or vector for images
          type: string
      type: object
    LicenseImage:
      description: Data required to license an image
      example:
        editorial_acknowledgement: true
        format: jpg
        image_id: "123456789"
        metadata:
          customer_id: "12345"
          geo_location: US
          number_viewed: "15"
          search_term: dog
        price: 12.34
        show_modal: true
        size: small
        subscription_id: s12345678
      properties:
        auth_cookie:
          $ref: "#/components/schemas/Cookie"
          description: Cookie object
        custom_dimensions:
          $ref: "#/components/schemas/CustomSizeDimensions"
        editorial_acknowledgement:
          description: Set to true to acknowledge the editorial agreement
          type: boolean
        format:
          default: jpg
          description: (Deprecated) Image format to download
          enum:
            - jpg
          type: string
        image_id:
          description: Image ID
          type: string
        metadata:
          $ref: "#/components/schemas/LicenseRequestMetadata"
        price:
          description: For revenue-sharing transactions, the final cost to the end customer as a floating-point number in the transaction currency, such as 12.34
          type: number
        search_id:
          description: ID of the search that led to this licensing transaction
          type: string
        show_modal:
          deprecated: true
          description: (Deprecated)
          type: boolean
        size:
          description: Image size to download
          enum:
            - small
            - medium
            - huge
            - custom
          type: string
        subscription_id:
          description: ID of the subscription to use for the download.
          type: string
        verification_code:
          deprecated: true
          description: (Deprecated)
          type: string
      required:
        - image_id
      type: object
    LicenseImageRequest:
      description: Image license request data
      example:
        images:
          - editorial_acknowledgement: true
            format: jpg
            image_id: "123456789"
            metadata:
              customer_id: "12345"
              geo_location: US
              number_viewed: "15"
              search_term: dog
            price: 12.34
            show_modal: true
            size: small
            subscription_id: s12345678
      properties:
        images:
          description: Images to create licenses for
          items:
            anyOf:
              - $ref: "#/components/schemas/LicenseImage"
              - $ref: "#/components/schemas/LicenseImageVector"
          maxItems: 50
          type: array
      required:
        - images
      type: object
    LicenseImageResult:
      description: The response to a licensing request for an image
      example:
        allotment_charge: 1
        download:
          url: https://download.shutterstock.com/gatekeeper/[random-characters]/shutterstock_59656357.jpg
        image_id: "59656357"
        price:
          local_amount: 12.34
          local_currency: EUR
      properties:
        allotment_charge:
          description: Number of credits that this licensing event used
          type: integer
        download:
          $ref: "#/components/schemas/Url"
          description: Information that is needed to download the image
        error:
          description: Error message, appears only if there was an error
          type: string
        image_id:
          description: Image ID that was licensed
          type: string
        license_id:
          description: ID of the license event
          type: string
        price:
          $ref: "#/components/schemas/Price"
          description: Wholesale price information; only for rev-share partners
      required:
        - image_id
      type: object
    LicenseImageResultDataList:
      description: List of information about licensed images
      example:
        data:
          - allotment_charge: 1
            download:
              url: https://download.shutterstock.com/gatekeeper/[random-characters]/shutterstock_59656357.jpg
            image_id: "59656357"
        page: 1
        per_page: 5
        total_count: 23
      properties:
        data:
          description: License results
          items:
            $ref: "#/components/schemas/LicenseImageResult"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results across all pages
          type: integer
    LicenseImageVector:
      description: Data required to license an image
      example:
        editorial_acknowledgement: true
        format: eps
        image_id: "123456789"
        metadata:
          customer_id: "12345"
          geo_location: US
          number_viewed: "15"
          search_term: dog
        price: 12.34
        show_modal: true
        size: vector
        subscription_id: s12345678
      properties:
        auth_cookie:
          $ref: "#/components/schemas/Cookie"
          description: Cookie object
        editorial_acknowledgement:
          description: Set to true to acknowledge the editorial agreement
          type: boolean
        format:
          default: eps
          description: (Deprecated) Image format to download
          enum:
            - eps
          type: string
        image_id:
          description: Image ID
          type: string
        metadata:
          $ref: "#/components/schemas/LicenseRequestMetadata"
        price:
          description: For revenue-sharing transactions, the final cost to the end customer as a floating-point number in the transaction currency, such as 12.34
          type: number
        search_id:
          description: ID of the search that led to this licensing transaction
          type: string
        show_modal:
          deprecated: true
          description: (Deprecated)
          type: boolean
        size:
          description: Image size to download
          enum:
            - vector
          type: string
        subscription_id:
          description: ID of the subscription to use for the download.
          type: string
        verification_code:
          deprecated: true
          description: (Deprecated)
          type: string
      required:
        - image_id
      type: object
    LicenseRequestMetadata:
      description: Additional information for license requests for enterprise accounts and API subscriptions, 4 fields maximum; which fields are required is set by the account holder
      example:
        customer_id: "12345"
        geo_location: US
        number_viewed: "15"
        search_term: dog
      maxProperties: 4
      properties: {}
      type: object
    LicenseSFX:
      description: ""
      example:
        format: wav
        metadata:
          customer_id: "12345"
          geo_location: US
          number_viewed: "15"
          search_term: dog
        sfx_id: "123456789"
        show_modal: true
        size: ambisonic
        subscription_id: s12345678
      properties:
        audio_layout:
          enum:
            - ambisonic
            - "5.1"
            - stereo
          type: string
        format:
          enum:
            - wav
            - mp3
          type: string
        search_id:
          description: ID of the search that led to this licensing event
          type: string
        sfx_id:
          description: ID of the sounds effect being licensed
          type: string
        subscription_id:
          description: ID of the subscription to use for the download.
          type: string
      required:
        - sfx_id
        - subscription_id
      type: object
    LicenseSFXRequest:
      description: License sounds effect asset request body
      example:
        sound_effects:
          - format: wav
            metadata:
              customer_id: "12345"
              geo_location: US
              number_viewed: "15"
              search_term: dog
            sfx_id: "123456789"
            show_modal: true
            size: ambisonic
            subscription_id: s12345678
      properties:
        sound_effects:
          description: Sound effects to license for
          items:
            $ref: "#/components/schemas/LicenseSFX"
          type: array
      required:
        - sound_effects
      type: object
    LicenseSFXResult:
      description: The response to a licensing request for an sound effects
      example:
        allotment_charge: 1
        download:
          url: https://download.shutterstock.com/gatekeeper/[random-characters]/shutterstock_59656357.wav
        sfx_id: "59656357"
      properties:
        allotment_charge:
          description: Number of credits that this licensing event used
          type: integer
        download:
          $ref: "#/components/schemas/Url"
          description: Information that is needed to download the sound effects
        error:
          description: Error message, appears only if there was an error
          type: string
        license_id:
          description: ID of the license event
          type: string
        sfx_id:
          description: Sound effects ID that was licensed
          type: string
      required:
        - sfx_id
      type: object
    LicenseSFXResultDataList:
      description: List of information about licensed sound effects
      example:
        data:
          - allotment_charge: 1
            download:
              url: https://download.shutterstock.com/gatekeeper/[random-characters]/shutterstock_59656357.mp3
            sfx_id: "123456789"
        page: 1
        per_page: 5
        total_count: 123455
      properties:
        data:
          description: Sound effects license results
          items:
            $ref: "#/components/schemas/LicenseSFXResult"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
    LicenseVideo:
      description: Data required to license a video
      example:
        size: hd
        subscription_id: s12345678
        video_id: "2140697"
      properties:
        auth_cookie:
          $ref: "#/components/schemas/Cookie"
        editorial_acknowledgement:
          description: Whether or not this item is editorial content
          type: boolean
        metadata:
          $ref: "#/components/schemas/LicenseRequestMetadata"
        price:
          description: Retail price amount as a floating-point number in the transaction currency, such as 12.34; only for rev-share partners
          type: number
        search_id:
          description: ID of the search that led to this licensing event
          type: string
        show_modal:
          deprecated: true
          description: (Deprecated)
          type: boolean
        size:
          description: Size of the video being licensed
          enum:
            - web
            - sd
            - hd
            - 4k
          type: string
        subscription_id:
          description: ID of the subscription used for this license
          type: string
        video_id:
          description: ID of the video being licensed
          type: string
      required:
        - video_id
      type: object
    LicenseVideoRequest:
      description: List of videos to license
      example:
        videos:
          - size: hd
            subscription_id: s12345678
            video_id: "2140697"
      properties:
        videos:
          description: Videos to license
          items:
            $ref: "#/components/schemas/LicenseVideo"
          maxItems: 50
          type: array
      required:
        - videos
      type: object
    LicenseVideoResult:
      description: The response to a licensing request for a video
      example:
        allotment_charge: 1
        download:
          url: https://download.shutterstock.com/gatekeeper/[random-characters]/shutterstock_59656357.mp4
        price:
          local_amount: 12.34
          local_currency: EUR
        video_id: "123456789"
      properties:
        allotment_charge:
          description: Number of credits that this licensing event used
          type: integer
        download:
          $ref: "#/components/schemas/Url"
        error:
          description: Potential error that occurred during licensing
          type: string
        license_id:
          description: ID of the license event
          type: string
        price:
          $ref: "#/components/schemas/Price"
          description: Wholesale price information; only for rev-share partners only
        video_id:
          description: ID of the video that was licensed
          type: string
      required:
        - video_id
      type: object
    LicenseVideoResultDataList:
      description: List of video license results
      example:
        data:
          - allotment_charge: 1
            download:
              url: https://download.shutterstock.com/gatekeeper/[random-characters]/shutterstock_59656357.mp4
            price:
              local_amount: 12.34
              local_currency: EUR
            video_id: "123456789"
        page: 1
        per_page: 5
        total_count: 123455
      properties:
        data:
          description: License results
          items:
            $ref: "#/components/schemas/LicenseVideoResult"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results across all pages
          type: integer
    Model:
      description: Information about a human model or property that appears in media; used to search for assets that this model is in
      example:
        id: "123456789"
      properties:
        id:
          description: ID of the model
          type: string
      required:
        - id
      type: object
    ModelRelease:
      description: Model and property release metadata
      example:
        id: "123456789"
      properties:
        id:
          description: ID of the model or property release
          type: string
      type: object
    MoodList:
      additionalProperties: false
      description: List of audio moods
      example:
        data:
          - Action / Sports
          - Adventure / Discovery
          - Aerobics / Workout
          - Aggressive
      properties:
        data:
          description: List of audio moods
          items:
            type: string
          type: array
      required:
        - data
      type: object
    OauthAccessTokenResponse:
      description: Access token response to client apps
      example:
        access_token: v2/NmQwOTc0NTBiMjA5YzZkY2Q4NTkvMTA4OTg1MDk5L2N1c3RvbWVyLzIvZjB2a0RseGo4Rkt6ZjRmVWJNMm10V2VzcHh1NTBlZWJ6andUQU1NeTVYYnNFTDVWOFRJakItS2RnZTlmbEY1Y3haNWdXLUtYc2JhaXo5djk0V0p2QzZUUWZ4c2FNWm41NkdLYUgyVWlCaVUtQTNVMV9YQWpzd3lpblI3SlZEem8wSG1qQ2NzSkJlX3VQTnNXenBIdkd4SXViVi1rRGJTVENCV0g1U3U0RXRJSV9rSm5lQkl5QXlvbm5JN241UUhv
        token_type: Bearer
      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
        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
        token_type:
          default: Bearer
          description: Type of token
          type: string
        user_token:
          description: Metadata about the access_token, only present for expiring tokens
          type: string
      required:
        - access_token
        - token_type
      type: object
    Preview:
      description: Preview information
      example:
        content_type: audio/mp3
        url: https://public-cdn.ampermusic.com/instruments/previews/roomy_kit_v1.mp3
      properties:
        content_type:
          description: Content type of the preview, currently audio/mp3
          enum:
            - audio/mp3
          type: string
        url:
          description: Url of the instrument's preview file
          type: string
      type: object
    Price:
      description: Price
      example:
        local_amount: 12.34
        local_currency: EUR
      properties:
        local_amount:
          description: Floating-point amount of the calculated rev-share price in the currency local_currency
          type: number
        local_currency:
          description: Currency of the rev-share price that was calculated
          type: string
      type: object
    Recommendation:
      description: Media Recommendation
      example:
        id: "123456789"
      properties:
        id:
          description: Media ID
          type: string
      required:
        - id
      type: object
    RecommendationDataList:
      description: List of recommended images
      example:
        data:
          - id: "123456789"
          - id: "99379946"
          - id: "133918412"
        page: 1
        per_page: 5
        total_count: 12
      properties:
        data:
          description: Recommended images
          items:
            $ref: "#/components/schemas/Recommendation"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results across all pages
          type: integer
    RedownloadImage:
      description: Data required to redownload an image
      example:
        size: small
      properties:
        auth_cookie:
          $ref: "#/components/schemas/Cookie"
          deprecated: true
          description: (Deprecated)
        show_modal:
          deprecated: true
          description: (Deprecated)
          type: boolean
        size:
          description: Size of the image
          enum:
            - small
            - medium
            - huge
            - supersize
            - vector
          type: string
        verification_code:
          deprecated: true
          description: (Deprecated)
          type: string
      type: object
    RedownloadVideo:
      description: Data required to redownload a video
      example:
        size: web
      properties:
        auth_cookie:
          $ref: "#/components/schemas/Cookie"
          deprecated: true
          description: (Deprecated)
        show_modal:
          deprecated: true
          description: (Deprecated)
          type: boolean
        size:
          description: Size of the video
          enum:
            - web
            - sd
            - hd
            - 4k
          type: string
        verification_code:
          deprecated: true
          description: (Deprecated)
          type: string
      type: object
    RemoveCatalogCollectionItem:
      example:
        id: "123"
      properties:
        id:
          type: string
      required:
        - id
      type: object
    RemoveCatalogCollectionItems:
      example:
        items:
          - id: "123"
      properties:
        items:
          items:
            $ref: "#/components/schemas/RemoveCatalogCollectionItem"
          maxItems: 50
          minItems: 1
          type: array
      required:
        - items
      type: object
    SFX:
      description: SFX metadata
      example:
        contributor:
          id: "1234"
        id: "123"
        media_type: sfx
      properties:
        added_date:
          description: Date this sound effect was added to the Shutterstock library
          format: date
          type: string
        affiliate_url:
          description: Affiliate referral link; appears only for registered affiliate partners
          type: string
        artist:
          description: Artist of the sound effect
          type: string
        assets:
          $ref: "#/components/schemas/SFXAssets"
        contributor:
          $ref: "#/components/schemas/Contributor"
        description:
          description: Description of this sound effect
          type: string
        duration:
          description: Duration of this sound effect in seconds
          type: number
        id:
          description: Shutterstock ID of this sound effect
          type: string
        keywords:
          description: List of all keywords for this sound effect
          items:
            description: Keyword for this track
            type: string
          type: array
        media_type:
          description: Media type of this track; should always be "sfx"
          type: string
        releases:
          description: List of all releases of this sound effect
          items:
            description: Release of this sound effect
            type: string
          type: array
        title:
          description: Title of this sound effect
          type: string
        updated_time:
          description: Time this sound effect was last updated
          format: date-time
          type: string
        url:
          description: ""
          type: string
      required:
        - id
        - media_type
        - contributor
      type: object
    SFXAssetDetails:
      description: Information about a file that is part of an sound effect asset
      example:
        file_size: 123
        url: https://cdn.shutterstock.com/shutterstock/sfx/11222/preview_ecom_ster/hand-throw-catch-cellphone.mp3
      properties:
        file_size:
          description: File size of the sound effect
          type: integer
        url:
          description: URL the sound effect is available at
          type: string
      type: object
    SFXAssets:
      description: Files that are available as part of an sound effect asset
      example:
        preview_mp3:
          file_size: 123
          url: https://cdn.shutterstock.com/shutterstock/sfx/11222/preview_ecom_ster/hand-throw-catch-cellphone.mp3
        waveform:
          file_size: 123
          url: https://cdn.shutterstock.com/shutterstock/sfx/11222/preview_ecom_ster/hand-throw-catch-cellphone.mp3
      properties:
        preview_mp3:
          $ref: "#/components/schemas/SFXAssetDetails"
        waveform:
          $ref: "#/components/schemas/SFXAssetDetails"
      type: object
    SFXDataList:
      description: List of sound effects
      example:
        data:
          - contributor:
              id: "1234"
            id: "123"
            media_type: sfx
      properties:
        data:
          description: Sound Effects
          items:
            $ref: "#/components/schemas/SFX"
          type: array
    SFXSearchResults:
      description: Sound effects search results
      example:
        data:
          - added_date: 2022-07-29
            assets:
              preview_mp3:
                url: https://cdn.shutterstock.com/shutterstock/sfx/21230/preview_ecom_ster/heavy-duty-interface-feedback.mp3
              waveform:
                url: https://cdn.shutterstock.com/shutterstock/sfx/21230/wvfm_img/heavy-duty-interface-feedback.png
            contributor:
              id: "321402911"
            description: User interface calculations, scanning, thinking, text displayed on screen. Screen gak or garble.
            id: "123"
            media_type: sfx
            title: Heavy Duty Interface Feedback
            updated_time: 2022-08-04T15:11:15.711Z
        search_id: e6f84c4c-ffdd-499b-ad89-72c65a896ead
        total_count: 14881
      properties:
        data:
          description: List of tracks
          items:
            $ref: "#/components/schemas/SFX"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        search_id:
          description: ID of the search
          type: string
        total_count:
          description: Total count of all results across all pages
          type: integer
      required:
        - data
        - total_count
        - search_id
      type: object
    SearchEntitiesRequest:
      description: Search entity request data
      example:
        text: Planting flowers is a great way to make springtime more beautiful.
      properties:
        text:
          description: Plain text to extract keywords from
          maxLength: 100000
          minLength: 1
          type: string
      required:
        - text
      type: object
    SearchEntitiesResponse:
      description: The response to a request for keyword analysis
      example:
        keywords:
          - planting
          - flowers
          - springtime
          - beautiful
      properties:
        keywords:
          description: The top keywords from the submitted text
          items:
            type: string
          type: array
    SearchImage:
      description: Data required to search for an image
      example:
        license:
          - editorial
        query: cat
        sort: popular
      properties:
        added_date:
          description: Show images added on the specified date
          format: date
          type: string
        added_date_end:
          description: Show images added before the specified date
          format: date
          type: string
        added_date_start:
          description: Show images added on or after the specified date
          format: date
          type: string
        aspect_ratio:
          description: Show images with the specified aspect ratio, using a positive decimal of the width divided by the height, such as 1.7778 for a 16:9 image
          type: number
        aspect_ratio_max:
          description: Show images with the specified aspect ratio or lower, using a positive decimal of the width divided by the height, such as 1.7778 for a 16:9 image
          minimum: 0
          type: number
        aspect_ratio_min:
          description: Show images with the specified aspect ratio or higher, using a positive decimal of the width divided by the height, such as 1.7778 for a 16:9 image
          minimum: 0
          type: number
        authentic:
          description: Show only authentic images
          type: boolean
        category:
          description: Show images with the specified Shutterstock-defined category; specify a category name or ID
          type: string
        color:
          description: Specify either a hexadecimal color in the format '4F21EA' or 'grayscale'; the API returns images that use similar colors
          type: string
        contributor:
          description: Show images with the specified contributor names or IDs, allows multiple
          items:
            type: string
          type: array
        contributor_country:
          description: Show images from contributors in one or more specified countries, or start with NOT to exclude a country from the search
          oneOf:
            - items:
                format: country-code-2
                type: string
              type: array
            - items:
                format: negated-country-code-2
                type: string
              type: array
        fields:
          description: Fields to display in the response; see the documentation for the fields parameter in the overview section
          type: string
          uniqueItems: true
        height:
          description: (Deprecated; use height_from and height_to instead) Show images with the specified height
          type: integer
        height_from:
          description: Show images with the specified height or larger, in pixels
          type: integer
        height_to:
          description: Show images with the specified height or smaller, in pixels
          type: integer
        image_type:
          description: Show images of the specified type
          items:
            enum:
              - photo
              - illustration
              - vector
            type: string
          type: array
        keyword_safe_search:
          default: true
          description: Hide results with potentially unsafe keywords
          type: boolean
        language:
          $ref: "#/components/schemas/Language"
          description: Set query and result language (uses Accept-Language header if not set)
        license:
          default:
            - commercial
          description: Show only images with the specified license
          items:
            enum:
              - commercial
              - editorial
              - enhanced
            type: string
          type: array
        model:
          description: Show image results with the specified model IDs
          items:
            type: string
          type: array
        orientation:
          description: Show image results with horizontal or vertical orientation
          enum:
            - horizontal
            - vertical
          type: string
        page:
          default: 1
          description: Page number
          minimum: 1
          type: integer
        people_age:
          description: Show images that feature people of the specified age category
          enum:
            - infants
            - children
            - teenagers
            - 20s
            - 30s
            - 40s
            - 50s
            - 60s
            - older
          type: string
        people_ethnicity:
          description: Show images with people of the specified ethnicities, or start with NOT to show images without those ethnicities
          items:
            enum:
              - african
              - african_american
              - black
              - brazilian
              - chinese
              - caucasian
              - east_asian
              - hispanic
              - japanese
              - middle_eastern
              - native_american
              - pacific_islander
              - south_asian
              - southeast_asian
              - other
              - NOT african
              - NOT african_american
              - NOT black
              - NOT brazilian
              - NOT chinese
              - NOT caucasian
              - NOT east_asian
              - NOT hispanic
              - NOT japanese
              - NOT middle_eastern
              - NOT native_american
              - NOT pacific_islander
              - NOT south_asian
              - NOT southeast_asian
              - NOT other
            type: string
          type: array
        people_gender:
          description: Show images with people of the specified gender
          enum:
            - male
            - female
            - both
          type: string
        people_model_released:
          description: Show images of people with a signed model release
          type: boolean
        people_number:
          description: Show images with the specified number of people
          maximum: 4
          minimum: 0
          type: integer
        per_page:
          default: 20
          description: Number of results per page
          maximum: 20
          minimum: 0
          type: integer
        query:
          description: One or more search terms separated by spaces; you can use NOT to filter out images that match a term
          type: string
        region:
          anyOf:
            - format: country-code-2
              type: string
            - format: ipv4
              type: string
          description: Raise or lower search result rankings based on the result's relevance to a specified region; you can provide a country code or an IP address from which the API infers a country
        safe:
          default: true
          description: Enable or disable safe search
          type: boolean
        sort:
          default: popular
          description: Sort by
          enum:
            - newest
            - popular
            - relevance
            - random
          type: string
        spellcheck_query:
          default: true
          description: Spellcheck the search query and return results on suggested spellings
          type: boolean
        view:
          default: minimal
          description: Amount of detail to render in the response
          enum:
            - minimal
            - full
          type: string
        width:
          description: (Deprecated; use width_from and width_to instead) Show images with the specified width
          type: integer
        width_from:
          description: Show images with the specified width or larger, in pixels
          type: integer
        width_to:
          description: Show images with the specified width or smaller, in pixels
          type: integer
      type: object
    SfxUrl:
      description: Sound effect license URL object
      example:
        $ref: "#/components/schemas/Url/example"
      properties:
        url:
          description: URL that can be used to download the unwatermarked, licensed asset
          type: string
      required:
        - url
      type: object
    ShortsLoopsStems:
      description: Links for Shorts, Loops and Stems previews
      example:
        loops:
          loop_preview_1:
            url: http://picdn.shuttercorp.net/shutterstock/audio/464947/loop_preview_1/loop_preview_1.mp3
          loop_preview_2:
            url: http://picdn.shuttercorp.net/shutterstock/audio/464947/loop_preview_2/loop_preview_2.mp3
        shorts:
          short_preview_1:
            url: http://picdn.shuttercorp.net/shutterstock/audio/464947/short_preview_1/short_preview_1.mp3
          short_preview_2:
            url: http://picdn.shuttercorp.net/shutterstock/audio/464947/short_preview_2/short_preview_2.mp3
        stems:
          stem_preview_1:
            url: http://picdn.shuttercorp.net/shutterstock/audio/464947/stem_preview_1/stem_preview_1.mp3
          stem_preview_2:
            url: http://picdn.shuttercorp.net/shutterstock/audio/464947/stem_preview_1/stem_preview_1.mp3
      properties:
        loops:
          additionalProperties:
            properties:
              url:
                type: string
            type: object
        shorts:
          additionalProperties:
            properties:
              url:
                type: string
            type: object
        stems:
          additionalProperties:
            properties:
              url:
                type: string
            type: object
      type: object
    Subscription:
      description: Subscription information
      example:
        allotment:
          downloads_left: 5
          downloads_limit: 10
          end_time: 2020-05-29T12:10:22-05:00
          start_time: 2020-05-29T12:10:22-05:00
        asset_type: images
        description: Annual Subscription
        expiration_time: 2020-05-29T12:10:22-05:00
        formats:
          - description: Small
            format: jpg
            media_type: image
            min_resolution: 500
            size: small
          - description: Med
            format: jpg
            media_type: image
            min_resolution: 1000
            size: medium
          - description: Vector
            format: eps
            media_type: image
            size: vector
        id: s8906043
        license: standard
        metadata: {}
      properties:
        allotment:
          $ref: "#/components/schemas/Allotment"
        asset_type:
          description: Identifier for the type of assets associated with this subscription (images, videos, audio, editorial)
          type: string
        description:
          description: Description of the subscription
          type: string
        expiration_time:
          description: Date the subscription ends
          format: date-time
          type: string
        formats:
          description: List of formats that are licensable for the subscription
          items:
            $ref: "#/components/schemas/LicenseFormat"
          type: array
        id:
          description: Unique internal identifier for the subscription
          type: string
        license:
          description: Internal identifier for the type of subscription
          type: string
        metadata:
          $ref: "#/components/schemas/SubscriptionMetadata"
        price_per_download:
          $ref: "#/components/schemas/Price"
      required:
        - id
      type: object
    SubscriptionDataList:
      description: List of subscriptions
      example:
        data:
          - allotment:
              downloads_left: 5
              downloads_limit: 10
              end_time: 2020-05-29T12:10:22-05:00
              start_time: 2020-05-29T12:10:22-05:00
            asset_type: images
            description: Annual Subscription
            expiration_time: 2020-05-29T12:10:22-05:00
            formats:
              - description: Small
                format: jpg
                media_type: image
                min_resolution: 500
                size: small
              - description: Med
                format: jpg
                media_type: image
                min_resolution: 1000
                size: medium
              - description: Vector
                format: eps
                media_type: image
                size: vector
            id: s8906043
            license: standard
            metadata: {}
        page: 1
        per_page: 5
        total_count: 123455
      properties:
        data:
          description: Subscriptions retrieved from this user
          items:
            $ref: "#/components/schemas/Subscription"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Optional error message
          type: string
        page:
          description: Current page that is being queried
          type: integer
        per_page:
          description: Amount of subscriptions to show per page
          type: integer
        total_count:
          description: Total number of subscriptions for this user
          type: integer
    SubscriptionMetadata:
      description: Subscription metadata; different for each customer
      example:
        client:
          is_required: false
          name: purchase_order
        job:
          is_required: true
          name: client_name
        other:
          is_required: false
          name: custom_value
      type: object
    Suggestions:
      description: List of search suggestions
      example:
        data:
          - cat scan
          - cats and dogs
          - cats playing
          - catsuit
          - cat silhouette
          - catskills
          - cats eyes
          - cat sitting
          - cat sleeping
          - cats eye
      properties:
        data:
          description: Search suggestions
          items:
            type: string
          type: array
      type: object
    TestEcho:
      description: Text to echo in the response
      example:
        text: Test string
      properties:
        text:
          type: string
      type: object
    TestValidate:
      description: Validation results
      example:
        header:
          user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
        query:
          id: 123456
          tag:
            - Test string
      properties:
        header:
          $ref: "#/components/schemas/TestValidateHeader"
          description: Headers as included in the request
        query:
          $ref: "#/components/schemas/TestValidateQuery"
          description: Query as included in the request
      type: object
    TestValidateHeader:
      description: Validation results
      example:
        user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
      properties:
        user-agent:
          description: User agent to expect in the response
          type: string
      type: object
    TestValidateQuery:
      description: Validation results
      example:
        id: 123456
        tag:
          - string
      properties:
        id:
          description: Integer ID that was passed in the request
          type: integer
        tag:
          description: List of tags that were passed in the request
          items:
            type: string
          type: array
      required:
        - id
      type: object
    Thumbnail:
      description: Image thumbnail information
      example:
        height: 100
        url: https://thumb7.shutterstock.com/thumb_large/250738318/1572478477/stock-photo-cropped-image-of-woman-gardening-1572478477.jpg
        width: 150
      properties:
        height:
          description: Height in pixels of the image thumbnail
          type: integer
        url:
          description: Direct URL to the image
          type: string
        width:
          description: Width in pixels of the image thumbnail
          type: integer
      required:
        - url
        - height
        - width
      type: object
    UpdateCatalogCollection:
      example:
        cover_asset:
          id: "123"
        name: My Collection
        visibility: public
      properties:
        cover_asset:
          properties:
            id:
              type: string
          required:
            - id
          type: object
        name:
          maxLength: 100000
          minLength: 1
          type: string
        visibility:
          enum:
            - private
            - public
          type: string
      type: object
    UpdatedMedia:
      description: Information about a piece of updated media
      example:
        id: "123456789"
        updated_time: 2020-05-29T12:10:22-05:00
        updates:
          - addition
          - edit
      properties:
        id:
          description: ID of the media
          type: string
        updated_time:
          description: Date that the media was updated
          format: date-time
          type: string
        updates:
          description: Types of updates that were made to the piece of media
          items:
            type: string
          type: array
      required:
        - id
        - updated_time
        - updates
      type: object
    UpdatedMediaDataList:
      description: List of updated media
      example:
        data:
          - id: "123456789"
            updated_time: 2020-05-29T12:10:22-05:00
            updates:
              - addition
              - edit
        page: 1
        per_page: 5
        total_count: 13
      properties:
        data:
          description: Updated media items
          items:
            $ref: "#/components/schemas/UpdatedMedia"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results across all pages
          type: integer
    Url:
      description: URL object
      example:
        url: https://download.shutterstock.com/gatekeeper/[random-characters]/shutterstock_59656357.jpg
      properties:
        url:
          description: URL that can be used to download the unwatermarked, licensed asset
          type: string
      required:
        - url
      type: object
    Urls:
      description: List of URLs
      example:
        urls:
          - string
      properties:
        urls:
          description: URLs
          items:
            type: string
          type: array
      required:
        - urls
      type: object
    UserDetails:
      description: User details
      example:
        contributor_id: "212"
        first_name: John
        full_name: John Doe
        id: "101782699"
        language: es
        last_name: Doe
        username: jdoe
      properties:
        contributor_id:
          description: Unique internal identifier of the user, as a contributor
          type: string
        customer_id:
          description: Unique internal identifier of the user, as a purchaser
          type: string
        email:
          description: Email address of the user
          type: string
        first_name:
          description: First name of the user
          type: string
        full_name:
          description: Full name including first, middle, and last name of the user
          type: string
        id:
          description: Unique internal identifier for the user, not tied to contributor or purchasing customer
          type: string
        is_premier:
          description: True if the user has access to the Premier collection, false otherwise
          type: boolean
        is_premier_parent:
          description: True if the user has access to the Premier collection and also has child users
          type: boolean
        language:
          description: Main language of the user account
          type: string
        last_name:
          description: Last name of the user
          type: string
        only_enhanced_license:
          description: True if the user has an enterprise license, false otherwise
          type: boolean
        only_sensitive_use:
          description: True if the user has access to sensitive use only, false otherwise
          type: boolean
        organization_id:
          description: Unique internal identifier for the user's organization, specific to Premier users
          type: string
        premier_permissions:
          description: List of permissions allowed through the Premier client
          items:
            type: string
          type: array
        username:
          description: User name associated to the user
          type: string
      type: object
    Video:
      description: Information about a video
      example:
        added_date: 2019-07-13
        aspect: 1.778
        aspect_ratio: 16:9
        assets:
          hd:
            display_name: Original HD
            file_size: 110359552
            format: avc1
            fps: 29.97
            height: 1080
            is_licensable: true
            width: 1920
          preview_jpg:
            url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
          preview_mp4:
            url: https://ak.picdn.net/shutterstock/videos/1033184651/preview/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.mp4
          preview_webm:
            url: https://ak.picdn.net/shutterstock/videos/1033184651/preview/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.webm
          sd:
            display_name: Standard Definition MPEG
            file_size: 4577280
            format: mov
            fps: 29.97
            height: 480
            is_licensable: true
            width: 852
          thumb_jpg:
            url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
          thumb_jpgs:
            urls:
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/1.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/2.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/3.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/4.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/5.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/6.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/7.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/8.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/9.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/10.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/11.jpg
              - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
          thumb_mp4:
            url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.mp4
          thumb_webm:
            url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.webm
          web:
            display_name: Low Resolution MPEG
            file_size: 1291264
            format: mov
            fps: 29.97
            height: 240
            is_licensable: true
            width: 426
        categories:
          - id: "12"
            name: Nature
          - id: "13"
            name: People
        contributor:
          id: "4411978"
        description: Camera follows hipster millennial young woman in orange jacket running up on top of mountain summit at sunset, jumps on top of rocks, raises arms into air, happy and drunk on life, youth and happiness
        duration: 14.081
        has_model_release: true
        has_property_release: false
        id: "1033184651"
        is_adult: false
        is_editorial: false
        keywords:
          - active
          - activity
          - adventure
          - arms
          - backpacker
          - carefree
          - celebrating
          - cliff
          - climate
          - cloud
          - discovery
          - escape
          - explore
          - extreme
          - free
          - freedom
          - girl
          - happy
          - high
          - hiker
          - hiking
          - hill
          - independent
          - inspiration
          - landscape
          - leisure
          - lifestyle
          - mountain
          - mountains
          - nature
          - outdoor
          - peak
          - person
          - rock
          - scenic
          - sky
          - sport
          - success
          - summer
          - summit
          - sun
          - sunset
          - top
          - tourism
          - travel
          - trekking
          - vacation
          - view
          - winning
          - woman
        media_type: video
        models:
          - id: "33233810"
          - id: "25487168"
      properties:
        added_date:
          description: Date this video was added to the Shutterstock library
          format: date
          type: string
        affiliate_url:
          description: Affiliate referral link; appears only for registered affiliate partners
          format: uri
          type: string
        aspect:
          description: Aspect ratio of this video in decimal format, such as 0.6667
          type: number
        aspect_ratio:
          description: Aspect ratio of the video as a ratio, such as 16:9
          type: string
        assets:
          $ref: "#/components/schemas/VideoAssets"
        categories:
          description: List of categories
          items:
            $ref: "#/components/schemas/Category"
          type: array
        contributor:
          $ref: "#/components/schemas/Contributor"
        description:
          description: Description of this video
          type: string
        duration:
          description: Duration of this video, in seconds
          type: number
        has_model_release:
          description: Whether or not this video has been released for use by the model appearing in it
          type: boolean
        has_property_release:
          description: Whether or not this video has received a release to show the landmark or property appearing in it
          type: boolean
        id:
          description: ID of the video
          type: string
        is_adult:
          description: Whether or not this video contains adult content
          type: boolean
        is_editorial:
          description: Whether or not this video is editorial content
          type: boolean
        keywords:
          description: Keywords associated with the content of this video
          items:
            type: string
          type: array
        media_type:
          description: Media type of this video, should always be "video"
          type: string
        models:
          description: List of models in this video
          items:
            $ref: "#/components/schemas/Model"
          type: array
        url:
          description: Link to video information page; included only for certain accounts
          type: string
      required:
        - id
        - media_type
        - contributor
      type: object
    VideoAssets:
      description: Video asset information
      example:
        hd:
          display_name: Original HD
          file_size: 110359552
          format: avc1
          fps: 29.97
          height: 1080
          is_licensable: true
          width: 1920
        original_filename: 123.mp4
        preview_jpg:
          url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
        preview_mp4:
          url: https://ak.picdn.net/shutterstock/videos/1033184651/preview/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.mp4
        preview_webm:
          url: https://ak.picdn.net/shutterstock/videos/1033184651/preview/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.webm
        sd:
          display_name: Standard Definition MPEG
          file_size: 4577280
          format: mov
          fps: 29.97
          height: 480
          is_licensable: true
          width: 852
        thumb_jpg:
          url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
        thumb_jpgs:
          urls:
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/1.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/2.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/3.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/4.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/5.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/6.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/7.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/8.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/9.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/10.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/11.jpg
            - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
        thumb_mp4:
          url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.mp4
        thumb_webm:
          url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.webm
        web:
          display_name: Low Resolution MPEG
          file_size: 1291264
          format: mov
          fps: 29.97
          height: 240
          is_licensable: true
          width: 426
      properties:
        4k:
          $ref: "#/components/schemas/VideoSizeDetails"
        hd:
          $ref: "#/components/schemas/VideoSizeDetails"
        preview_jpg:
          $ref: "#/components/schemas/Url"
        preview_mp4:
          $ref: "#/components/schemas/Url"
        preview_webm:
          $ref: "#/components/schemas/Url"
        sd:
          $ref: "#/components/schemas/VideoSizeDetails"
        thumb_jpg:
          $ref: "#/components/schemas/Url"
        thumb_jpgs:
          $ref: "#/components/schemas/Urls"
        thumb_mp4:
          $ref: "#/components/schemas/Url"
        thumb_webm:
          $ref: "#/components/schemas/Url"
        web:
          $ref: "#/components/schemas/VideoSizeDetails"
      type: object
    VideoCollectionItemDataList:
      description: List of items in a collection
      example:
        data:
          - added_time: 2016-08-18T18:52:59-04:00
            id: "76688182"
            media_type: video
          - added_time: 2016-08-18T18:52:59-04:00
            id: "40005859"
            media_type: video
        page: 1
        per_page: 100
      properties:
        data:
          description: Assets in the collection
          items:
            $ref: "#/components/schemas/CollectionItem"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: The current page of results
          type: integer
        per_page:
          description: The number of results per page
          type: integer
        total_count:
          description: The total number of results across all pages
          type: integer
    VideoDataList:
      description: List of videos
      example:
        data:
          - added_date: 2019-07-13
            aspect: 1.778
            aspect_ratio: 16:9
            assets:
              hd:
                display_name: Original HD
                file_size: 110359552
                format: avc1
                fps: 29.97
                height: 1080
                is_licensable: true
                width: 1920
              preview_jpg:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
              preview_mp4:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/preview/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.mp4
              preview_webm:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/preview/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.webm
              sd:
                display_name: Standard Definition MPEG
                file_size: 4577280
                format: mov
                fps: 29.97
                height: 480
                is_licensable: true
                width: 852
              thumb_jpg:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
              thumb_jpgs:
                urls:
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/1.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/2.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/3.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/4.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/5.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/6.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/7.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/8.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/9.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/10.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/11.jpg
                  - https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
              thumb_mp4:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.mp4
              thumb_webm:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.webm
              web:
                display_name: Low Resolution MPEG
                file_size: 1291264
                format: mov
                fps: 29.97
                height: 240
                is_licensable: true
                width: 426
            categories:
              - id: "12"
                name: Nature
              - id: "13"
                name: People
            contributor:
              id: "4411978"
            description: Camera follows hipster millennial young woman in orange jacket running up on top of mountain summit at sunset, jumps on top of rocks, raises arms into air, happy and drunk on life, youth and happiness
            duration: 14.081
            has_model_release: true
            has_property_release: false
            id: "1033184651"
            is_adult: false
            is_editorial: false
            keywords:
              - active
              - activity
              - adventure
              - arms
              - backpacker
              - carefree
              - celebrating
              - cliff
              - climate
              - cloud
              - discovery
              - escape
              - explore
              - extreme
              - free
              - freedom
              - girl
              - happy
              - high
              - hiker
              - hiking
              - hill
              - independent
              - inspiration
              - landscape
              - leisure
              - lifestyle
              - mountain
              - mountains
              - nature
              - outdoor
              - peak
              - person
              - rock
              - scenic
              - sky
              - sport
              - success
              - summer
              - summit
              - sun
              - sunset
              - top
              - tourism
              - travel
              - trekking
              - vacation
              - view
              - winning
              - woman
            media_type: video
            models:
              - id: "33233810"
              - id: "25487168"
        page: 1
        per_page: 5
        total_count: 25
      properties:
        data:
          description: Videos
          items:
            $ref: "#/components/schemas/Video"
          type: array
        errors:
          description: Error list; appears only if there was an error
          items:
            $ref: "#/components/schemas/Error"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        total_count:
          description: Total count of all results across all pages
          type: integer
    VideoPreviewUrl:
      description: Video preview information
      example:
        url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.mp4
      properties:
        url:
          description: Direct URL to the image
          type: string
      required:
        - url
      type: object
    VideoSearchResults:
      description: Video search results
      example:
        data:
          - aspect: 1.778
            aspect_ratio: 16:9
            assets:
              preview_jpg:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
              preview_mp4:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/preview/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.mp4
              preview_webm:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/preview/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.webm
              thumb_jpg:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/12.jpg
              thumb_mp4:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.mp4
              thumb_webm:
                url: https://ak.picdn.net/shutterstock/videos/1033184651/thumb/stock-footage-camera-follows-hipster-millennial-young-woman-in-orange-jacket-running-up-on-top-of-mountain-summit.webm
            contributor:
              id: "4411978"
            description: Camera follows hipster millennial young woman in orange jacket running up on top of mountain summit at sunset, jumps on top of rocks, raises arms into air, happy and drunk on life, youth and happiness
            duration: 14.081
            has_model_release: true
            id: "1033184651"
            media_type: video
        page: 1
        per_page: 5
        search_id: 749090bb-2967-4a20-b22e-c800dc845e10
        total_count: 123
      properties:
        data:
          description: List of videos
          items:
            $ref: "#/components/schemas/Video"
          type: array
        message:
          description: Server-generated message, if any
          type: string
        page:
          description: Current page that is returned
          type: integer
        per_page:
          description: Number of results per page
          type: integer
        search_id:
          description: Unique identifier for the search request
          type: string
        total_count:
          description: Total count of all results across all pages
          type: integer
      required:
        - data
        - total_count
        - search_id
      type: object
    VideoSizeDetails:
      description: Video asset information
      example:
        display_name: Original HD
        file_size: 110359552
        format: avc1
        fps: 29.97
        height: 1080
        is_licensable: true
        width: 1920
      properties:
        display_name:
          description: Display name of this video size
          type: string
        file_size:
          description: File size (in bytes) of this video size
          type: integer
        format:
          description: Format of this video size
          type: string
        fps:
          description: Frames per second of this video size
          type: number
        height:
          description: Height of this video size
          type: integer
        is_licensable:
          description: Whether or not videos can be licensed in this video size
          type: boolean
        width:
          description: Width of this video size
          type: integer
      type: object
  securitySchemes:
    basic:
      scheme: basic
      type: http
    customer_accessCode:
      flows:
        authorizationCode:
          authorizationUrl: https://accounts.shutterstock.com/oauth/authorize
          scopes:
            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.
            licenses.create: Grant the ability to download and license media on behalf of the user.
            licenses.view: Grant read-only access to a user's licenses.
            purchases.view: Grant read-only access to a user's purchase history.
            user.view: "*Originally missing*"
          tokenUrl: https://api.shutterstock.com/v2/oauth/access_token
      type: oauth2
      x-shutterstock-realm: customer
  x-string-formats:
    asset-id:
      example: "18765466"
      format: A Shutterstock asset ID that starts with a nonzero digit and has any number of other digits
      pattern: ^[1-9]\d*$
    asset-upload-id:
      example: U6ba16262e3bc2db470b8e3cfa8aaab25
      format: A Shutterstock upload ID consisting of the letter U followed by one or more other characters
      pattern: ^U\w+$
    country-code-2:
      example: US
      format: A two-character (ISO 3166 Alpha-2) country code
      pattern: ^(?:[A-Z]{2}|[a-z]{2})$
    country-code-3:
      example: USA
      format: A three-character (ISO 3166 Alpha-3) country code
      pattern: ^(?:[A-Z]{3}|[a-z]{3})$
    date:
      example: 2020-05-29
      format: YYYY-MM-DD
    date-time:
      example: 2021-03-29T13:25:13.521Z
      format: YYYY-MM-DDTHH:mm:ssZ
    ipv4:
      example: 1.1.1.1
      format: A valid IPv4 address
    negated-country-code-2:
      example: NOT US
      format: A NOT followed by a two-character (ISO 3166 Alpha-2) country code
      pattern: ^(NOT\s)(?:[A-Z]{2}|[a-z]{2})$
    uri:
      example: https://wwww.shutterstock.com
      format: A valid URI
