{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Product",
  "description": "A product from Snapplify's catalog",
  "type": [
    "object"
  ],
  "properties": {
    "availability": {
      "description": "A flag denoting the availability status of the product",
      "type": [
        "string"
      ]
    },
    "bicCode": {
      "description": "A product code",
      "type": [
        "string",
        "null"
      ]
    },
    "bisacCode": {
      "description": "A product code",
      "type": [
        "string",
        "null"
      ]
    },
    "categories": {
      "description": "Categories of a product",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": [
          "object"
        ],
        "properties": {
          "id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "label": {
            "type": [
              "string",
              "null"
            ]
          },
          "parent": {
            "type": [
              "object",
              "null"
            ]
          }
        }
      }
    },
    "contributors": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": [
          "object"
        ],
        "properties": {
          "firstName": {
            "type": [
              "string",
              "null"
            ]
          },
          "lastName": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "copyright": {
      "description": "Copyright name",
      "type": [
        "string",
        "null"
      ]
    },
    "createdDate": {
      "description": "Product created date",
      "type": [
        "string"
      ]
    },
    "currency": {
      "description": "The currency of the price of the product",
      "type": [
        "string"
      ]
    },
    "description": {
      "description": "The description of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "drmEnabled": {
      "description": "Is DRM enabled",
      "type": [
        "boolean"
      ]
    },
    "drmRestrictions": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": [
          "object"
        ],
        "properties": {
          "limited": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "type": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": [
              "string",
              "integer",
              "null"
            ]
          }
        }
      }
    },
    "edition": {
      "description": "The edition of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "embargoDate": {
      "description": "Embargo date of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "etag": {
      "description": "Unique tag for this version of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "excludedForSaleInCountries": {
      "description": "Excluded sale locations of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "fileSize": {
      "description": "File size of the product",
      "type": [
        "integer",
        "null"
      ]
    },
    "format": {
      "description": "File format of the product",
      "type": [
        "string"
      ]
    },
    "free": {
      "description": "Flag for a free product",
      "type": [
        "boolean"
      ]
    },
    "gradeLevel": {
      "description": "The grade level recommendation for the product",
      "type": [
        "string",
        "null"
      ]
    },
    "id": {
      "description": "The unique Snapplify identifier for the product",
      "type": [
        "integer"
      ]
    },
    "identifier": {
      "description": "The ISBN for the product",
      "type": [
        "string"
      ]
    },
    "imageMd5Hash": {
      "description": "An MD5 hash of the image of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "imageUrl": {
      "description": "A url to the image of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "includedForSaleInCountries": {
      "description": "Approved sale locations of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "language": {
      "description": "The language of the product",
      "type": [
        "string"
      ]
    },
    "numberOfPages": {
      "description": "The number of pages in the product",
      "type": [
        "integer",
        "null"
      ]
    },
    "price": {
      "description": "The price of the product",
      "type": [
        "number"
      ]
    },
    "publishedDate": {
      "description": "The date the product was published",
      "type": [
        "string",
        "null"
      ]
    },
    "publisher": {
      "description": "The name of the products publisher",
      "type": [
        "string",
        "null"
      ]
    },
    "relatedIdentifier": {
      "description": "Related identifier",
      "type": [
        "string",
        "null"
      ]
    },
    "sentDateTime": {
      "description": "The time when the product was sent",
      "type": [
        "integer"
      ]
    },
    "seriesName": {
      "description": "The series name of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "seriesNumber": {
      "description": "The series number of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "subject": {
      "description": "The subject name of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "subjects": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": [
          "object"
        ],
        "properties": {
          "code": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "subTitle": {
      "description": "The secondary name or subtitle of the product",
      "type": [
        "string",
        "null"
      ]
    },
    "supplier": {
      "type": [
        "object"
      ],
      "properties": {
        "label": {
          "type": [
            "string",
            "null"
          ]
        },
        "code": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "title": {
      "description": "The name of the product",
      "type": [
        "string"
      ]
    },
    "updatedDate": {
      "description": "The products update time",
      "type": [
        "string"
      ]
    }
  },
  "required": [
    "id",
    "identifier",
    "availability",
    "title",
    "imageUrl",
    "price",
    "currency"
  ]
}