Search code examples
shutterstock

ValidationError: Subscription is unusable or cannot be found. License failed


I'm trying to create a service that will be a middle man between my frontend framework and shutterstock. I'm running into an issue when trying to license an image where it says my subscription is unusable or cannot be found. I have done exactly what the documentation said and I don't know what I am missing.

let sstk = require("shutterstock-api");

sstk.setSandbox(true);

sstk.setAccessToken(process.env.SHUTTERSTOCK_TOKEN);

// Instantiate the shutterstock images api
const imagesApi = new sstk.ImagesApi();

// Instantiate the shutterstock users api
const usersApi = new sstk.UsersApi();

// Creates the body to send to shutterstock
  const body = {
    images: imageIds.map((imageId) => {
      return {
        image_id: imageId,
        price: 0,
        metadata: {
          customer_id: "0",
        },
      };
    }),
  };

  // Get subscription so we can grab the subscription id
  usersApi
    .getUserSubsciptionList()
    .then(({ data }) => {
      const subscription_id = data[0].id;
      const queryParams = {
        format: "jpg",
        size: "huge",
        subscription_id,
      };

      // If we successfully get the subscription id then license the images
      imagesApi
        .licenseImages(body, queryParams)
        .then(({ data }) => {
          console.log("licensedImages", data);

          // Check if there was an error on any of the images
          let numOfErrors = 0;
          data.forEach((image) => {
            if (image.error) {
              numOfErrors += 1;
            }
          });

          // If some of the images were successful
          if (numOfErrors > 0 && numOfErrors < data.length) {
            return errorHandler

            // If all the images failed
          } else if (numOfErrors > 0) {
            return errorHandler
          }
          // If there are no errors send back the data to the frontend to manipulate it how it needs
          return res.status(200).send(data);
        })
        .catch((err) => {
          // If license error wasn't handled by Shutterstock
          console.error(err);
          return errorHandler
        });
    })
    .catch((error) => {
      // If subscription error wasn't handled by Shutterstock
      console.error(error);
      return errorHandler
    });

Logged Response with status code 200

licensedImages [ exports {
    image_id: id,
    error:
     'ValidationError: Subscription is unusable or cannot be found. License failed' } ]

I'm not sure why its not working. I've logged my subscription id and image id and they are correct.

The format and size do match the formats available on the subscription.

The subscription is a Developer Platform license.

What am I missing?

This is on an expressjs api


Solution

  • It looks like your Shutterstock account has both a 'Developer Platform' subscription and standard user subscription, which causes issues in the api. Your code is correct - the problem is with the validation of your subscription within the licensing flow. We'll reach out to you via email once we correctly attribute your different subscriptions.