{"openapi":"3.0.3","info":{"title":"Morena's Kustomz REST API","description":"Serverless REST API for Morena's Kustomz","contact":{"name":"GitHub","url":"https://github.com/flex-development/JIME-P001"},"license":{"name":"UNLICENSED","url":"https://choosealicense.com/no-permission/"},"version":"1.0.0"},"servers":[{"description":"Production","url":"https://kapi.flexdevelopment.vercel.app"},{"description":"Next","url":"https://kapi-git-next-flexdevelopment.vercel.app"}],"tags":[{"name":"collections","description":"Retrieve information about product collections"},{"name":"customers","description":"Retrieve information about shop customers"},{"name":"layout","description":"Fetch data used to render `Layout` component"},{"name":"menus","description":"Retrieve information about shop menus"},{"name":"pages","description":"Retrieve information about online store pages"},{"name":"playlist","description":"Fetch the storefront's Apple Music playlist data"},{"name":"policies","description":"Retrieve information about store policies"},{"name":"products","description":"Retrieve information about store products"},{"name":"reviews","description":"Create and list product reviews"}],"paths":{"/collections":{"get":{"summary":"Find Collections","description":"Retrieve information about product collections","operationId":"collections-find","tags":["collections"],"parameters":[{"name":"collection_id","in":"query","description":"Find collection listing by ID","schema":{"type":"number"}},{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `collection_id` and `objectID` are included.\nUse `*` for all fields\n"},{"$ref":"#/components/parameters/hitsPerPage"},{"$ref":"#/components/parameters/length"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/objectID","description":"Find collection listing by handle"},{"$ref":"#/components/parameters/offset"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/text"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APIPayload.Collection"}}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/collections/{objectID}":{"parameters":[{"name":"objectID","in":"path","description":"Handle of collection listing to retrieve","required":true,"schema":{"type":"string"}}],"get":{"summary":"Get Collection By Handle","description":"Retrieve a collection listing resource by handle","operationId":"collections-get","tags":["collections"],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `collection_id` and `objectID` are included.\nUse `*` for all fields\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIPayload.Collection"}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/customers":{"get":{"summary":"Find Customers","description":"Retrieve information about shop customers","operationId":"customers-find","tags":["customers"],"security":[{"userToken":[]}],"parameters":[{"name":"accepts_marketing","in":"query","description":"Filter by marketing material subscription","schema":{"type":"boolean"}},{"name":"email","in":"query","description":"Find customer by email address","schema":{"$ref":"#/components/schemas/Utils.Email"}},{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `email`, `id`, and `objectID` are included.\nUse `*` for all fields\n"},{"name":"first_name","in":"query","description":"Filter by first name","schema":{"type":"string"}},{"$ref":"#/components/parameters/hitsPerPage"},{"name":"id","in":"query","description":"Find customer by ID","schema":{"type":"number"}},{"name":"last_order_id","in":"query","description":"Find customer by ID of last order","schema":{"type":"number"}},{"name":"last_order_name","in":"query","description":"Filter by name of last order","schema":{"type":"string"}},{"name":"last_name","in":"query","description":"Filter by last name","schema":{"type":"string"}},{"$ref":"#/components/parameters/length"},{"$ref":"#/components/parameters/limit"},{"name":"moil","in":"query","description":"Filter by marketing opt-in level","schema":{"$ref":"#/components/schemas/Shopify.CustomerMarketingOptInLevel"}},{"$ref":"#/components/parameters/objectID","description":"Find customer by ID"},{"$ref":"#/components/parameters/offset"},{"name":"orders_count","in":"query","description":"Filter by number of orders","schema":{"type":"number"}},{"$ref":"#/components/parameters/page"},{"name":"phone","in":"query","description":"Find customer by phone number","schema":{"type":"string"}},{"name":"state","in":"query","description":"Find by customer state","schema":{"$ref":"#/components/schemas/Shopify.CustomerState"}},{"$ref":"#/components/parameters/text"},{"$ref":"#/components/parameters/userToken","required":true},{"name":"verified_email","in":"query","description":"Filter by email verification","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APIPayload.Customer"}}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/customers/{objectID}":{"parameters":[{"name":"objectID","in":"path","description":"ID of customer to retrieve","required":true,"schema":{"$ref":"#/components/schemas/Utils.NumberString"}}],"get":{"summary":"Get Customer By ID","description":"Retrieve a customer by ID","operationId":"customers-get","tags":["customers"],"security":[{"userToken":[]}],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `email`, `id`, and `objectID` are included.\nUse `*` for all fields\n"},{"$ref":"#/components/parameters/userToken","required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIPayload.Customer"}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/layout":{"get":{"summary":"Storefront layout","description":"Fetch the data used to render the storefront `Layout` component","operationId":"layout","tags":["layout"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIPayload.Layout"}}}},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/playlist":{"get":{"summary":"Playlist data","description":"Fetch the storefront's Apple Music playlist data","operationId":"playlist","tags":["playlist"],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, all fields are included\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APIPayload.Playlist"}}}}},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/menus":{"get":{"summary":"Find Menus","description":"Retrieve information about shop menus","operationId":"menus-find","tags":["menus"],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `objectID` is included.\nUse `*` for all fields\n"},{"$ref":"#/components/parameters/hitsPerPage"},{"$ref":"#/components/parameters/length"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/objectID","description":"Find menu by handle"},{"$ref":"#/components/parameters/offset"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/text"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APIPayload.Menu"}}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/menus/{objectID}":{"parameters":[{"name":"objectID","in":"path","description":"Handle of menu to retrieve","required":true,"schema":{"type":"string"}}],"get":{"summary":"Get Menu By Handle","description":"Retrieve a menu by handle","operationId":"menus-get","tags":["menus"],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `objectID` is included.\nUse `*` for all fields\n"},{"name":"objectID","in":"path","description":"Handle of menu to retrieve","required":true,"schema":{"$ref":"#/components/parameters/objectID"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIPayload.Collection"}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/pages":{"get":{"summary":"Find Pages","description":"Retrieve information about online store pages","operationId":"pages-find","tags":["pages"],"parameters":[{"name":"author","in":"query","description":"Filter pages by author","schema":{"type":"string"}},{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `id` and `objectID` are included.\nUse `*` for all fields\n"},{"$ref":"#/components/parameters/hitsPerPage"},{"$ref":"#/components/parameters/length"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/objectID","description":"Find page by handle"},{"$ref":"#/components/parameters/offset"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/text"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APIPayload.Page"}}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/pages/{objectID}":{"parameters":[{"name":"objectID","in":"path","description":"Handle of page to retrieve","required":true,"schema":{"type":"string"}}],"get":{"summary":"Get Page By Handle","description":"Retrieve a page by handle","operationId":"pages-get","tags":["pages"],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `id` and `objectID` are included.\nUse `*` for all fields\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIPayload.Page"}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/policies":{"get":{"summary":"Find Policies","description":"Retrieve information about store policies","operationId":"policies-find","tags":["policies"],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `objectID` is included.\nUse `*` for all fields\n"},{"$ref":"#/components/parameters/hitsPerPage"},{"$ref":"#/components/parameters/length"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/objectID","description":"Find policy by handle"},{"$ref":"#/components/parameters/offset"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/text"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APIPayload.Policy"}}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/policies/{objectID}":{"parameters":[{"name":"objectID","in":"path","description":"Handle of policy to retrieve","required":true,"schema":{"$ref":"#/components/schemas/Utils.NumberString"}}],"get":{"summary":"Get Policy By Handle","description":"Retrieve a policy by handle","operationId":"policies-get","tags":["policies"],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `objectID` is included.\nUse `*` for all fields\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIPayload.Policy"}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/products":{"get":{"summary":"Find Products","description":"Retrieve information about store products","operationId":"products-find","tags":["products"],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `objectID` and `product_id` are included.\nUse `*` for all fields\n"},{"$ref":"#/components/parameters/hitsPerPage"},{"$ref":"#/components/parameters/length"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/objectID","description":"Find product listing by handle"},{"$ref":"#/components/parameters/offset"},{"$ref":"#/components/parameters/page"},{"name":"product_id","in":"query","description":"Find product listing by ID","schema":{"type":"number"}},{"$ref":"#/components/parameters/text"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APIPayload.Product"}}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/products/{objectID}":{"parameters":[{"name":"objectID","in":"path","description":"Handle of product listing to retrieve","required":true,"schema":{"$ref":"#/components/schemas/Utils.NumberString"}}],"get":{"summary":"Get Product By Handle","description":"Retrieve a product listing resource by handle","operationId":"products-get","tags":["products"],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `objectID` and `product_id` are included.\nUse `*` for all fields\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIPayload.Product"}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/reviews":{"get":{"summary":"Find Reviews","description":"List product reviews","operationId":"reviews-find","tags":["reviews"],"parameters":[{"name":"curated","in":"query","description":"Filter by curation status","schema":{"$ref":"#/components/schemas/JudgeMe.ReviewCuratedStatus"}},{"name":"featured","in":"query","description":"Filter by featured reviews","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `id` and `objectID` are included.\nUse `*` for all fields\n"},{"name":"hidden","in":"query","description":"Filter by hidden / published reviews","schema":{"type":"boolean"}},{"$ref":"#/components/parameters/hitsPerPage"},{"name":"id","in":"query","description":"Find review by ID","schema":{"type":"number"}},{"name":"ip_address","in":"query","description":"Filter by reviewer IP address","schema":{"type":"string"}},{"$ref":"#/components/parameters/length"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/objectID","description":"Find review by ID"},{"$ref":"#/components/parameters/offset"},{"$ref":"#/components/parameters/page"},{"name":"product_id","in":"query","description":"Filter by product listing","schema":{"type":"number"}},{"name":"rating","in":"query","description":"Filter by review rating","schema":{"$ref":"#/components/schemas/JudgeMe.ReviewRating"}},{"name":"reviewer_email","in":"query","description":"Filter by reviewer email address","schema":{"$ref":"#/components/schemas/Utils.Email"}},{"name":"reviewer_id","in":"query","description":"Filter by reviewer ID","schema":{"type":"number"}},{"name":"source","in":"query","description":"Filter by review creation source","schema":{"$ref":"#/components/schemas/JudgeMe.ReviewSource"}},{"$ref":"#/components/parameters/text"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APIPayload.Review"}}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}},"post":{"summary":"Create review","description":"Create product review","operationId":"reviews-create","tags":["reviews"],"requestBody":{"description":"CreateReviewDTO","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIRequestBody.Review.POST"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/APIRequestBody.Review.POST"},{"type":"object","properties":{"ip_addr":{"type":"string"}},"required":["body","email","id","ip_addr","rating","title"]}]}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}},"/reviews/{objectID}":{"parameters":[{"name":"objectID","in":"path","description":"ID of product review to retrieve","required":true,"schema":{"$ref":"#/components/schemas/Utils.NumberString"}}],"get":{"summary":"Get Review By ID","description":"Retrieve a product review by ID","operationId":"reviews-get","tags":["reviews"],"parameters":[{"$ref":"#/components/parameters/fields","description":"List of fields to include.\nBy default, `id` and `objectID` are included.\nUse `*` for all fields\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIPayload.Review"}}}},"400":{"$ref":"#/components/schemas/Errors.BadRequest"},"500":{"$ref":"#/components/schemas/Errors.GeneralError"},"502":{"$ref":"#/components/schemas/Errors.BadGateway"}}}}},"components":{"schemas":{"APIPayload.Collection":{"allOf":[{"$ref":"#/components/schemas/Shopify.ICollectionListing"},{"type":"object","properties":{"objectID":{"type":"string"},"seo":{"$ref":"#/components/schemas/Storefront.SEOData"}},"required":["collection_id","objectID"]}],"type":"object"},"APIPayload.Customer":{"allOf":[{"$ref":"#/components/schemas/Shopify.ICustomer"},{"type":"object","properties":{"objectID":{"type":"string"}},"required":["email","id","objectID"]}],"type":"object"},"APIPayload.Layout":{"properties":{"hero":{"properties":{"subtitle":{"type":"string"},"title":{"type":"string"}},"type":"object"},"playlist":{"$ref":"#/components/schemas/APIPayload.Playlist"},"seo":{"$ref":"#/components/schemas/Storefront.SEOData"},"sidebar":{"properties":{"age":{"type":"number"},"img":{"type":"string"},"location":{"type":"string"},"menu":{"type":"array","items":{"$ref":"#/components/schemas/Shopify.IMenuLink"}},"mood":{"type":"string"}},"type":"object"}},"required":["hero","playlist","seo","sidebar"],"type":"object"},"APIPayload.Menu":{"allOf":[{"$ref":"#/components/schemas/Shopify.IMenu"},{"type":"object","properties":{"objectID":{"type":"string"}},"required":["objectID"]}],"type":"object"},"APIPayload.Page":{"allOf":[{"$ref":"#/components/schemas/Shopify.IPage"},{"type":"object","properties":{"objectID":{"type":"string"},"seo":{"$ref":"#/components/schemas/Storefront.SEOData"}},"required":["id","objectID"]}],"type":"object"},"APIPayload.Playlist":{"properties":{"attributes":{"properties":{"name":{"type":"string"},"url":{"type":"string"}},"required":["name","url"],"type":"object"},"id":{"type":"number"},"tracks":{"type":"array","items":{"properties":{"albumName":{"type":"string"},"artistName":{"type":"string"},"artwork":{"$ref":"#/components/schemas/AppleMusic.Artwork"},"composerName":{"type":"string"},"contentRating":{"type":"string"},"discNumber":{"type":"number"},"durationInMillis":{"type":"string"},"editorialNotes":{"properties":{"short":{"type":"string"},"standard":{"type":"string"}},"required":["short","standard"],"type":"object"},"isrc":{"type":"string"},"movementCount":{"type":"number"},"movementName":{"type":"string"},"movementNumber":{"type":"string"},"name":{"type":"string"},"playParams":{"properties":{"id":{"type":"string"},"kind":{"type":"string"}},"required":["id","kind"],"type":"object"},"previews":{"type":"array","items":{"properties":{"artwork":{"$ref":"#/components/schemas/AppleMusic.Artwork"},"url":{"type":"string"}},"required":["url"],"type":"object"}},"releaseDate":{"type":"string"},"trackNumber":{"type":"number"},"url":{"type":"string"},"workName":{"type":"string"}},"required":["albumName","artistName","discNumber","durationInMillis","genreNames","hasLyrics","isrc","name","previews","releaseDate","trackNumber","url"],"type":"object"}}},"required":["attributes","id","tracks"],"type":"object"},"APIPayload.Policy":{"allOf":[{"$ref":"#/components/schemas/Shopify.IPolicy"},{"type":"object","properties":{"objectID":{"type":"string"},"seo":{"$ref":"#/components/schemas/Storefront.SEOData"}},"required":["objectID"]}],"type":"object"},"APIPayload.Product":{"allOf":[{"$ref":"#/components/schemas/Shopify.IProductListing"},{"type":"object","properties":{"objectID":{"type":"string"},"seo":{"$ref":"#/components/schemas/Storefront.SEOData"}},"required":["objectID","product_id"]}],"type":"object"},"APIPayload.Review":{"allOf":[{"$ref":"#/components/schemas/JudgeMe.Review"},{"type":"object","properties":{"objectID":{"type":"string"}},"required":["id","objectID"]}],"type":"object"},"APIRequestBody.Review.POST":{"properties":{"body":{"type":"string","description":"Review body","minimum":1,"maximum":500},"email":{"$ref":"#/components/schemas/Utils.Email","description":"Reviewer email"},"id":{"$ref":"#/components/schemas/Utils.NumberString","description":"ID of product being reviewed"},"rating":{"$ref":"#/components/schemas/JudgeMe.ReviewRating","description":"Review rating"},"title":{"type":"string","description":"Review title","maximum":100}},"required":["body","email","id"],"type":"object"},"AppleMusic.Artwork":{"properties":{"bgColor":{"type":"string"},"height":{"type":"number"},"textColor1":{"type":"string"},"textColor2":{"type":"string"},"textColor3":{"type":"string"},"textColor4":{"type":"string"},"url":{"type":"string"},"width":{"type":"number"}},"required":["height","url","width"],"type":"object"},"Errors.BadGateway":{"properties":{"className":{"example":"bad-gateway","type":"string"},"code":{"example":502,"type":"integer"},"data":{"$ref":"#/components/schemas/Utils.AnyObject"},"errors":{"anyOf":[{"type":"array"},{"type":"object"}]},"message":{"type":"string"},"name":{"example":"BadGateway","type":"string"}},"readOnly":true,"type":"object"},"Errors.BadRequest":{"properties":{"className":{"example":"bad-request","type":"string"},"code":{"example":400,"type":"integer"},"data":{"$ref":"#/components/schemas/Utils.AnyObject"},"errors":{"anyOf":[{"type":"array"},{"type":"object"}]},"message":{"type":"string"},"name":{"example":"BadRequest","type":"string"}},"type":"object"},"Errors.GeneralError":{"properties":{"className":{"example":"general-error","type":"string"},"code":{"example":500,"type":"integer"},"data":{"$ref":"#/components/schemas/Utils.AnyObject"},"errors":{"anyOf":[{"type":"array"},{"type":"object"}]},"message":{"type":"string"},"name":{"example":"GeneralError","type":"string"}},"type":"object"},"Errors.NotAuthenticated":{"properties":{"className":{"example":"not-authenticated","type":"string"},"code":{"example":401,"type":"integer"},"data":{"$ref":"#/components/schemas/Utils.AnyObject"},"errors":{"anyOf":[{"type":"array"},{"type":"object"}]},"message":{"type":"string"},"name":{"example":"NotAuthenticated","type":"string"}},"type":"object"},"Errors.NotImplemented":{"properties":{"className":{"example":"not-implemented","type":"string"},"code":{"example":501,"type":"integer"},"data":{"$ref":"#/components/schemas/Utils.AnyObject"},"errors":{"anyOf":[{"type":"array"},{"type":"object"}]},"message":{"type":"string"},"name":{"example":"NotImplemented","type":"string"}},"type":"object"},"JudgeMe.ReviewCuratedStatus":{"enum":["curated","not-yet","spam"],"type":"string"},"JudgeMe.ReviewRating":{"enum":[1,2,3,4,5],"type":"number"},"JudgeMe.ReviewSource":{"enum":["admin","imported","web"],"type":"string"},"JudgeMe.ReviewVerifiedStatus":{"enum":["buyer","nothing"],"type":"string"},"JudgeMe.Reviewer":{"properties":{"accepts_marketing":{"type":"boolean"},"email":{"$ref":"#/components/schemas/Utils.Email"},"external_id":{"$ref":"#/components/schemas/Utils.NullishNumber","format":"integer"},"id":{"type":"number","format":"integer"},"name":{"type":"string"},"phone":{"type":"string"},"source_email":{"$ref":"#/components/schemas/Utils.Email"},"tags":{"$ref":"#/components/schemas/Utils.ArrayString"},"unsubscribed_at":{"$ref":"#/components/schemas/Utils.ISO8601Nullish"}},"required":["accepts_marketing","email","external_id","id","name","phone","source_email","tags","unsubscribed_at"],"type":"object"},"JudgeMe.Review":{"properties":{"body":{"type":"string"},"created_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"curated":{"$ref":"#/components/schemas/JudgeMe.ReviewCuratedStatus"},"featured":{"type":"boolean"},"hidden":{"type":"boolean"},"id":{"type":"number"},"ip_address":{"$ref":"#/components/schemas/Utils.NullishString"},"pictures":{"type":"array","items":{"$ref":"#/components/schemas/Utils.AnyObject"}},"product_external_id":{"type":"number"},"product_handle":{"type":"string"},"product_title":{"type":"string"},"rating":{"$ref":"#/components/schemas/JudgeMe.ReviewRating"},"reviewer":{"$ref":"#/components/schemas/JudgeMe.Reviewer"},"source":{"$ref":"#/components/schemas/JudgeMe.ReviewSource"},"title":{"$ref":"#/components/schemas/Utils.NullishString"},"updated_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"verified":{"$ref":"#/components/schemas/JudgeMe.ReviewVerifiedStatus"}},"required":["body","created_at","curated","featured","hidden","id","ip_address","pictures","product_external_id","product_handle","product_title","rating","reviewer","source","title","updated_at","verified"],"type":"object"},"Shopify.CollectionListingSortOrder":{"description":"Order in which products in the collection appear:\n * `alpha-asc`: Alphabetically, in ascending order (A - Z)\n * `alpha-desc`: Alphabetically, in descending order (Z - A)\n * `best-selling`: By best-selling products\n * `created`: Date created, in ascending order (oldest - newest)\n * `created-desc`: Date created, in descending order (newest - oldest)\n * `manual`: Order created by the shop owner\n * `price-asc`: Price, in ascending order (lowest - highest)\n * `price-desc`: Price, in descending order (highest - lowest)\n","enum":["alpha-asc","alpha-desc","best-selling","created","created-desc","manual","price-asc","price-desc"],"type":"string"},"Shopify.CustomerMarketingOptInLevel":{"description":"The marketing subscription opt-in level (as described by the M3AAWG best practices guideline) that the customer gave when they consented to receive marketing material by email","enum":["confirmed_opt_in","single_opt_in","unknown",null],"nullable":true,"type":"string"},"Shopify.CustomerState":{"description":"State of the customer's account with a shop\n * `declined`: Customer declined email invite to create account\n * `disabled`: Customer doesn't have active account\n * `enabled`: Customer created account\n * `invited`: Customer received email invite to create account\n","enum":["declined","disabled","enabled","invited"],"type":"string"},"Shopify.ICollectionListing":{"description":"Product collection that a merchant has published to a sales channel","properties":{"body_html":{"type":"string"},"collection_id":{"type":"number"},"default_product_image":{"$ref":"#/components/schemas/Shopify.IProductImage","nullable":true},"handle":{"type":"string"},"image":{"$ref":"#/components/schemas/Shopify.IImage","nullable":true},"published_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"sort_order":{"$ref":"#/components/schemas/Shopify.CollectionListingSortOrder"},"title":{"type":"string"},"updated_at":{"$ref":"#/components/schemas/Utils.ISO8601"}},"required":["body_html","collection_id","default_product_image","handle","image","published_at","sort_order","title","updated_at"],"type":"object"},"Shopify.ICustomerAddress":{"description":"Address a customer has entered","externalDocs":{"description":"Shopify REST Admin API - CustomerAddress","url":"https://shopify.dev/docs/admin-api/rest/reference/customers/customer-address"},"properties":{"address1":{"type":"string"},"address2":{"type":"string"},"city":{"type":"string"},"company":{"$ref":"#/components/schemas/Utils.NullishString"},"country":{"type":"string"},"country_code":{"type":"string"},"country_name":{"type":"string"},"customer_id":{"type":"number"},"default":{"type":"boolean"},"first_name":{"type":"boolean"},"id":{"type":"number"},"last_name":{"type":"string"},"name":{"type":"string"},"phone":{"$ref":"#/components/schemas/Utils.NullishString"},"province":{"type":"string"},"province_code":{"$ref":"#/components/schemas/Utils.NullishString"},"zip":{"type":"string"}},"required":["address1","city","company","country","country_code","country_name","customer_id","default","first_name","id","last_name","name","phone","province","province_code","zip"],"type":"object"},"Shopify.ICustomer":{"description":"Information about a shop customer including their contact details, their order history, and whether they've agreed to receive email marketing\n","externalDocs":{"description":"Shopify REST Admin API - Customer","url":"https://shopify.dev/docs/admin-api/rest/reference/customers/customer"},"properties":{"accepts_marketing":{"type":"boolean"},"accepts_marketing_updated_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"admin_graphql_api_id":{"type":"string"},"addresses":{"type":"array","items":{"$ref":"#/components/schemas/Shopify.ICustomerAddress"}},"created_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"currency":{"type":"string"},"default_address":{"$ref":"#/components/schemas/Shopify.ICustomerAddress"},"email":{"$ref":"#/components/schemas/Utils.Email"},"first_name":{"type":"string"},"id":{"type":"number"},"last_name":{"type":"string"},"last_order_id":{"$ref":"#/components/schemas/Utils.NullishNumber"},"last_order_name":{"$ref":"#/components/schemas/Utils.NullishString"},"multipass_identifier":{"$ref":"#/components/schemas/Utils.NullishNumber"},"note":{"$ref":"#/components/schemas/Utils.NullishString"},"orders_count":{"type":"number"},"phone":{"type":"string"},"state":{"$ref":"#/components/schemas/Shopify.CustomerState"},"tags":{"$ref":"#/components/schemas/Utils.NullishString"},"tax_exempt":{"type":"boolean"},"tax_exemptions":{"$ref":"#/components/schemas/Utils.ArrayString"},"total_spent":{"type":"string"},"updated_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"verified_email":{"type":"boolean"}},"required":["accepts_marketing","accepts_marketing_updated_at","admin_graphql_api_id","addresses","created_at","currency","default_address","email","first_name","id","last_name","last_order_id","last_order_name","marketing_opt_in_level","multipass_identifier","note","orders_count","phone","state","tags","tax_exempt","tax_exemptions","total_spent","updated_at","verified_email"],"type":"object"},"Shopify.IImage":{"description":"Shopify image","properties":{"alt":{"$ref":"#/components/schemas/Utils.NullishString"},"created_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"height":{"type":"number"},"id":{"type":"number"},"src":{"$ref":"#/components/schemas/Utils.URL"},"updated_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"width":{"type":"number"}},"required":["created_at","height","src","width"],"type":"object"},"Shopify.IMenuLink":{"description":"Shopify menu link","properties":{"href":{"type":"string"},"links":{"type":"array","items":{"$ref":"#/components/schemas/Shopify.IMenuLink"}},"title":{"type":"string"}},"required":["href","links","title"],"type":"object"},"Shopify.IMenu":{"description":"Shopify menu","properties":{"handle":{"type":"string"},"levels":{"type":"number"},"links":{"type":"array","items":{"$ref":"#/components/schemas/Shopify.IMenuLink"}},"title":{"type":"string"}},"required":["handle","levels","links","title"],"type":"object"},"Shopify.IMetafield":{"description":"Additional information about Admin API resources","externalDocs":{"description":"Shopify Admin REST API - Metafield","url":"https://shopify.dev/docs/admin-api/rest/reference/metafield"},"properties":{"admin_graphql_api_id":{"type":"string"},"created_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"description":{"$ref":"#/components/schemas/Utils.NullishString"},"id":{"type":"number"},"key":{"type":"string","maximum":50,"minimum":3},"namespace":{"type":"string","maximum":20,"minimum":2},"owner_id":{"type":"number"},"owner_resource":{"enum":["article","blog","customer","draft_order","order","page","product","product_image","product_variant","shop"],"type":"string"},"updated_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"value":{"$ref":"#/components/schemas/Utils.NumberString"},"value_type":{"$ref":"#/components/schemas/Shopify.MetaFieldValueType"}},"required":["created_at","description","id","key","namespace","owner_id","owner_resource","updated_at","value","value_type"],"type":"object"},"Shopify.IPage":{"description":"Online store page","externalDocs":{"description":"Shopify Admin REST API - Page","url":"https://shopify.dev/docs/admin-api/rest/reference/online-store/page"},"properties":{"admin_graphql_api_id":{"type":"string"},"author":{"$ref":"#/components/schemas/Utils.NullishString"},"body_html":{"type":"string"},"created_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"handle":{"type":"string"},"id":{"type":"number"},"published_at":{"$ref":"#/components/schemas/Utils.ISO8601Nullish"},"shop_id":{"type":"number"},"template_suffix":{"$ref":"#/components/schemas/Utils.NullishString"},"title":{"type":"string"},"updated_at":{"$ref":"#/components/schemas/Utils.ISO8601"}},"required":["admin_graphql_api_id","author","body_html","created_at","handle","id","published_at","shop_id","template_suffix","title","updated_at"]},"Shopify.IPolicy":{"description":"Store policy","externalDocs":{"description":"Shopify REST Admin API - Policy","url":"https://shopify.dev/docs/admin-api/rest/reference/store-properties/policy"},"properties":{"body":{"type":"string"},"created_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"handle":{"type":"string"},"title":{"type":"string"},"updated_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"url":{"$ref":"#/components/schemas/Utils.URL"}},"required":["body","created_at","handle","title","updated_at","url"]},"Shopify.IProductImage":{"description":"Product image","externalDocs":{"description":"Shopify REST Admin API - Product Image","url":"https://shopify.dev/docs/admin-api/rest/reference/products/product-image"},"allOf":[{"$ref":"#/components/schemas/Shopify.IImage"},{"type":"object","properties":{"admin_graphql_api_id":{"type":"string"},"position":{"type":"number"},"product_id":{"type":"number"},"variant_ids":{"type":"array","items":{"type":"number"}}},"required":["created_at","height","id","position","product_id","src","updated_at","variant_ids","width"]}]},"Shopify.IProductListingVariant":{"description":"Product variant published to a sales channel.","externalDocs":{"description":"Shopify REST Admin API - Product Variant","url":"https://shopify.dev/docs/admin-api/rest/reference/products/product-variant"},"properties":{"available":{"type":"boolean"},"barcode":{"type":"string"},"compare_at_price":{"$ref":"#/components/schemas/Utils.NullishString"},"created_at":{"$ref":"#/components/schemas/Utils.ISO8601"},"formatted_price":{"type":"string"},"fulfillment_service":{"type":"string"},"grams":{"type":"number"},"id":{"type":"number"},"image_id":{"$ref":"#/components/schemas/Utils.NullishNumber"},"inventory_management":{"type":"string"},"inventory_policy":{"enum":["continue","deny"],"type":"string"},"inventory_quantity":{"type":"number"},"option_values":{"type":"array","items":{"properties":{"name":{"type":"string"},"option_id":{"type":"number"},"value":{"type":"string"}},"required":["name","option_id","value"],"type":"object"}},"position":{"type":"number"},"price":{"type":"string"},"requires_shipping":{"type":"boolean"},"sku":{"type":"string"},"taxable":{"type":"boolean"},"description":{"type":"string"},"updated_at":{"type":"string"},"weight":{"type":"number"},"weight_unit":{"enum":["g","kg","lb","oz"],"type":"string"}},"required":["available","barcode","compare_at_price","created_at","formatted_price","fulfillment_service","grams","id","image_id","inventory_management","inventory_policy","inventory_quantity","option_values","position","price","requires_shipping","sku","taxable","title","updated_at","weight","weight_unit"],"type":"object"},"Shopify.IProductListing":{"externalDocs":{"description":"Shopify REST Admin API - ProductListing","url":"https://shopify.dev/docs/admin-api/rest/reference/sales-channels/productlisting"},"properties":{"available":{"type":"boolean"},"body_html":{"type":"string"},"created_at":{"type":"string"},"handle":{"type":"string"},"images":{"type":"array","items":{"$ref":"#/components/schemas/Shopify.IProductImage"}},"options":{"type":"array","items":{"properties":{"id":{"type":"number"},"name":{"type":"string"},"position":{"type":"number"},"product_id":{"type":"number"},"values":{"type":"array","items":{"type":"string"}}},"required":["id","name","position","product_id","values"],"type":"object"}},"product_id":{"type":"number"},"product_type":{"type":"string"},"published_at":{"type":"string"},"tags":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"variants":{"type":"array","items":{}},"vendor":{"type":"string"}},"required":["available","body_html","created_at","handle","images","options","product_id","product_type","published_at","tags","title","updated_at","variants","vendor"],"type":"object"},"Shopify.PagePublishedStatus":{"enum":["any","published","unpublished"],"type":"string"},"Shopify.MetaFieldValueType":{"enum":["integer","json_string","string"],"type":"string"},"Storefront.SEOData":{"properties":{"description":{"description":"Description of the page in less than 150 characters.","type":"string"},"keywords":{"description":"Comma-delimitted list of SEO keywords.","type":"string"},"og":{"description":"Object containing Open Graph metadata.","properties":{"'image:alt'":{"$ref":"#/components/schemas/Utils.NullishString"},"'image:height'":{"anyOf":[{"$ref":"#/components/schemas/Utils.NullishString"},{"type":"number"}]},"'image:secure_url'":{"$ref":"#/components/schemas/Utils.NullishString"},"'image:width'":{"anyOf":[{"$ref":"#/components/schemas/Utils.NullishString"},{"type":"number"}]},"'product:availability'":{"$ref":"#/components/schemas/Utils.NullishString"},"'product:brand'":{"$ref":"#/components/schemas/Utils.NullishString"},"'product:condition'":{"$ref":"#/components/schemas/Utils.NullishString"},"'product:item_group_id'":{"$ref":"#/components/schemas/Utils.NullishString"},"'product:price:amount'":{"$ref":"#/components/schemas/Utils.NullishString"},"'product:price:currency'":{"$ref":"#/components/schemas/Utils.NullishString"},"'product:retailer_item_id'":{"$ref":"#/components/schemas/Utils.NullishString"},"category":{"$ref":"#/components/schemas/Utils.NullishString"},"image":{"$ref":"#/components/schemas/Utils.NullishString"}},"type":"object"},"title":{"description":"Page title","type":"string"},"twitter":{"description":"Object containing Twitter social metadata.","properties":{"card":{"enum":["app","player","summary","summary_large_image",null],"type":"string","nullable":true},"creator":{"type":"string"},"image":{"type":"string"},"site":{"type":"string"}},"type":"object"}},"type":"object"},"Utils.AnyObject":{"additionalProperties":true,"type":"object"},"Utils.ArrayString":{"type":"array","items":{"type":"string"}},"Utils.Email":{"type":"string","format":"email"},"Utils.ISO8601":{"type":"string","pattern":"/(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2})\\:(\\d{2})\\:(\\d{2})[+-](\\d{2})\\:(\\d{2})/"},"Utils.ISO8601Nullish":{"$ref":"#/components/schemas/Utils.ISO8601","nullable":true},"Utils.NullishNumber":{"nullable":true,"type":"number"},"Utils.NullishString":{"nullable":true,"type":"string"},"Utils.NumberString":{"anyOf":[{"type":"number"},{"type":"string"}]},"Utils.URL":{"type":"string","format":"url"}},"securitySchemes":{"userToken":{"type":"apiKey","in":"query","name":"userToken"}},"responses":{"BadRequest":{"description":"400 BadRequest","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors.BadRequest"}}}},"GeneralError":{"description":"500 GeneralError","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors.GeneralError"}}}},"BadGateway":{"description":"502 BadGateway","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors.BadGateway"}}}}},"parameters":{"fields":{"name":"fields","in":"query","description":"Comma-separated list of fields to include. Use `*` for all fields","schema":{"type":"number"}},"hitsPerPage":{"name":"hitsPerPage","in":"query","description":"Number of results per page","schema":{"type":"number"}},"length":{"name":"length","in":"query","description":"Result limit (used only with offset)","schema":{"type":"number"}},"limit":{"name":"limit","in":"query","description":"Number of hits to retrieve","schema":{"type":"number"}},"objectID":{"name":"objectID","in":"query","description":"Find object by search index ID","schema":{"$ref":"#/components/schemas/Utils.NumberString"}},"offset":{"name":"offset","in":"query","description":"Offset of the first result to return","schema":{"type":"string"}},"page":{"name":"page","in":"query","description":"Specify the page to retrieve","schema":{"type":"string"}},"text":{"name":"text","in":"query","description":"Text to search in index","schema":{"type":"string"}},"userToken":{"name":"userToken","in":"query","description":"Shopify API key","schema":{"type":"string"}}},"headers":{"access-control-allow-credentials":{"schema":{"type":"boolean"},"description":"Expose the response to frontend JavaScript code when the request's credentials mode (Request.credentials) is `include`","example":true},"access-control-allow-headers":{"schema":{"type":"string"},"description":"Used in response to a [preflight request](https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request) to indicate which HTTP headers can be used during the actual request","example":"*"},"access-control-allow-methods":{"schema":{"type":"string"},"description":"Specifies the method or methods allowed when accessing the resource in response to a [preflight request](https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request)","example":"GET,POST,OPTIONS"},"access-control-allow-origin":{"schema":{"type":"string"},"description":"Indicates whether the response can be shared with requesting code from the given origin","example":"*"},"cache-control":{"schema":{"type":"string"},"description":"Instructions for caching in both requests and responses","example":"public, max-age=0, must-revalidate"},"connection":{"schema":{"type":"string"},"description":"Indicates whether or not the network connection stays open after the current transaction finishes","example":"close"},"content-length":{"schema":{"type":"number","format":"byte"},"description":"Indicates the size of the entity-body","example":13873},"content-type":{"schema":{"type":"string"},"description":"[Media type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) that describes the nature and format of the response\n","example":"application/json; charset=utf-8"},"date":{"schema":{"type":"string"},"description":"Timestamp indicating when the response was generated","example":"Wed, 14 Apr 2021 00:49:59 GMT"},"etag":{"schema":{"type":"string"},"description":"Identifier for a specific version of a resource","example":"W/\"3631-OLbSBBLIQM+2irVKOHtGpucARv4\""},"server":{"schema":{"type":"string"},"description":"Server that generated the response","example":"Vercel"},"x-vercel-cache":{"schema":{"type":"string","enum":["BYPASS","HIT","MISS","REVALIDATED","STALE"]}},"x-vercel-id":{"schema":{"type":"string"},"description":"Unique identifier for each request","example":"dev1::dev1::uvg7o-1618361399891-e756c88786e9"}}}}