Last active
January 28, 2025 13:33
-
-
Save mems/38e023b650ace0c25f9b368769d2b49a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"$schema": "http://json-schema.org/draft-07/schema#", | |
"$id": "https://www.fnac.com/json-schema/digital-data/custom-ceddl-01", | |
"allOf": [ | |
{ | |
"$comment": "http://www.w3c.org/json-schema/custexpdata/digital-data/ceddl-01", | |
"$ref": "https://www.fnac.com/json-schema/digital-data/ceddl-01" | |
}, | |
{ | |
"type": "object", | |
"required": ["pageInstanceID", "page", "user"], | |
"properties": { | |
"pageInstanceID": { | |
"type": "string", | |
"description": "This must include the following components: environment, siteID, marketID, language and pageID. Could be either a hash or a plain string.", | |
"examples": ["production-fnaccom-fr-fr-FR-h1", "mFjY29tLWZyL"] | |
}, | |
"page": { | |
"$ref": "#/definitions/page" | |
}, | |
"product": { | |
"type": "array", | |
"description": "If applicable (product page), describe the product(s)", | |
"items": { | |
"$ref": "#/definitions/product" | |
} | |
}, | |
"user": { | |
"type": "array", | |
"items": { | |
"$ref": "#/definitions/user" | |
} | |
}, | |
"cart": { | |
"description": "If applicable (cart page), describe the cart content", | |
"$ref": "#/definitions/cart" | |
}, | |
"transaction": { | |
"description": "If applicable (order complete page), describe the complete order(s) transaction. If it's a complete multipart order, the field order is also required", | |
"$ref": "#/definitions/transaction" | |
}, | |
"order": { | |
"title": "Orders", | |
"description": "If applicable (order complete page), describe the complete orders (multipart order)", | |
"$comment": "Note: CEEDL recommendation doesn't provide a way to support multipart transaction with differents combinations of shipping addresses, separate cancellation scheme, etc.", | |
"type": "array", | |
"items": { | |
"$ref": "#/definitions/order" | |
} | |
}, | |
"subscriptionPlans": { | |
"title": "Available subscription plans", | |
"type": "array", | |
"items": { | |
"$ref": "#/definitions/subscription-plan" | |
}, | |
"examples": [ | |
[ | |
{ | |
"subscriptionName": "Carte Fnac+", | |
"subscriptionType": "fnacplus", | |
"subscriptionOffer": "paid", | |
"subscriptionPrice": { | |
"basePrice": 12.49, | |
"currency": "EUR", | |
"priceWithTax": 14.99, | |
"taxRate": 0.2 | |
}, | |
"descriptionURL": "https://www.fnac.com/a14876194" | |
}, | |
{ | |
"subscriptionName": "Carte Fnac", | |
"subscriptionType": "fnac", | |
"subscriptionOffer": "paid", | |
"subscriptionPrice": { | |
"basePrice": 10, | |
"currency": "EUR", | |
"priceWithTax": 12, | |
"taxRate": 0.2 | |
}, | |
"descriptionURL": "https://www.fnac.com/a2022505" | |
} | |
] | |
] | |
} | |
} | |
} | |
], | |
"definitions": { | |
"page-info": { | |
"type": "object", | |
"required": ["breadCrumbs", "pageName", "version", "pageID", "sysEnv"], | |
"properties": { | |
"breadCrumbs": { | |
"title": "Bread crumbs", | |
"description": "Page hierarchy, including the page itself (FnacDirect.Nav.Services.Implementations.BreadCrumbService, post.Space and Ancestors name, SearchQuery.Result.FullArborescenceList or T(\"Search.BreadCrumb.AllProduct\"), etc.). Home should be included", | |
"$comment": "Breacdcumb is not history https://www.smashingmagazine.com/2009/03/breadcrumbs-in-web-design-examples-and-best-practices/", | |
"type": "array", | |
"items": { | |
"type": "string" | |
}, | |
"defaultValue": [], | |
"examples": [ | |
[ | |
"Accueil", | |
"Smartphones et Objets Connectés", | |
"Accessoire Téléphone", | |
"Accessoire par Type", | |
"Coques", | |
"Coques iPhone", | |
"Coques iPhone X" | |
], | |
[ | |
"Accueil", | |
"Livre", | |
"Livre Jeunesse", | |
"Meilleures ventes livres Jeunesse" | |
], | |
["Accueil", "Tous les produits"] | |
] | |
}, | |
"pageName": { | |
"type": "string", | |
"title": "Page Name", | |
"description": "Page title, based on the main entity (product name, post title, node name, maker name, editor name, search term, etc.). It could be different from the entity name: decorated, based on the path, etc. It should reflect the page H1 tag. See also digitalData.page.attributes.entityName", | |
"examples": [ | |
"Home Accueil", | |
"Livre", | |
"Harry Potter", | |
"Prix littéraires 2008 - 2009", | |
"Harry Potter, I : Harry Potter à l'école des sorciers", | |
"La minute Fip à la Fnac : Herbie Hancock" | |
] | |
}, | |
"version": { | |
"type": "string", | |
"title": "Version of the application (or the part of it) that generate this page", | |
"description": "Recommendation: use the build version from FnacVersion.json. Or use something like the commit hash / git tag / changeset ID of the application source", | |
"examples": ["20.1.20134.12"] | |
}, | |
"pageID": { | |
"type": "string", | |
"title": "Page identifier", | |
"description": "entityID or the path ID (pid) with it prefix or the shortest slug/canonical url (but not localized) of the resource. See the UrlManager.config and FnacDirect.Front.WebBusiness.UrlDecoration.*.", | |
"$comment": "Search ignore some chars and dont make difference between charcase, the canonical version should be something like: ' harry $ potter ' and 'HaRrY PoTtEr' -> 'harry potter' -> 'r/harry%20potter'", | |
"pattern": "^[a-z][0-9a-z]*([-/]([0-9a-z]|%[a-z]{2})*)*$", | |
"examples": [ | |
"home", | |
"a10516511", | |
"a10516511/avis", | |
"a10516511/offers", | |
"pr4fea4f1fc327a093eaef25ab70b467c5e225ec7378e6259e", | |
"srefBF4D2EBF-2625-B582-5F82-B24679D099CF", | |
"mp27532583", | |
"sh258373", | |
"shi48966", | |
"shi417599", | |
"nsh417593", | |
"n307028", | |
"n374288", | |
"s573", | |
"si149", | |
"ia835839", | |
"f170", | |
"sa102445", | |
"ta96048", | |
"ia302511", | |
"i/ia302511/dvd", | |
"cp47890", | |
"ix338561/la", | |
"r/harry%20potter", | |
"f1235", | |
"l440006", | |
"lm246323", | |
"o7394518", | |
"e58124", | |
"c36874", | |
"m8766", | |
"p12", | |
"se5", | |
"cp23975", | |
"ct1234", | |
"cl176", | |
"cc598", | |
"cart", | |
"index/p/image-et-son-6/10" | |
] | |
}, | |
"author": { | |
"title": "Main content author name", | |
"description": "If available, the name of the main content author (page, post, recommendation, review, etc.)", | |
"type": "string" | |
}, | |
"sysEnv": { | |
"title": "Server identifier", | |
"description": "Server machine name", | |
"type": "string", | |
"examples": ["FCS1WPWEBFR8"] | |
} | |
} | |
}, | |
"category": { | |
"title": "Category", | |
"properties": { | |
"primaryCategoryID": { | |
"type": "string", | |
"title": "Main category identifier", | |
"description": "If applicable, the main category identifier", | |
"pattern": "[0-9]+", | |
"examples": ["9468374"] | |
}, | |
"virtualPrimaryCategoryId": { | |
"type": "string", | |
"title": "Main virtual category identifier", | |
"description": "If applicable, the main virtual category identifier", | |
"pattern": "-?[0-9]+", | |
"examples": ["-1", "-2", "9468374"] | |
}, | |
"primaryCategory": { | |
"type": "string", | |
"title": "Main category", | |
"description": "If applicable, the main category", | |
"examples": [ | |
"Livres, BD", | |
"Informatique", | |
"Rayons", | |
"Téléphonie", | |
"Enfant, Jouet", | |
"Ebooks", | |
"Musique", | |
"Maison" | |
] | |
}, | |
"subCategory1": { | |
"type": "string", | |
"title": "Secondary category", | |
"description": "If applicable, the secondary category", | |
"examples": [ | |
"Livre enfant", | |
"Littérature", | |
"Roman policier", | |
"Ordinateur portable" | |
] | |
}, | |
"subCategory1ID": { | |
"type": "string", | |
"title": "Secondary category identifier", | |
"description": "If applicable, the secondary category identifier", | |
"pattern": "[0-9]+", | |
"examples": ["9468374"] | |
}, | |
"virtualSubCategory1Id": { | |
"type": "string", | |
"title": "Secondary virtual category identifier", | |
"description": "If applicable, the secondary virtual category identifier", | |
"pattern": "-?[0-9]+", | |
"examples": ["9468374"] | |
}, | |
"subCategory2": { | |
"type": "string", | |
"title": "Tertiary category", | |
"description": "If applicable, the tertiary category", | |
"examples": [ | |
"Livre enfant", | |
"Littérature", | |
"Roman policier", | |
"Ordinateur portable" | |
] | |
}, | |
"subCategory2ID": { | |
"type": "string", | |
"title": "Secondary category identifier", | |
"description": "If applicable, the tertiary category identifier", | |
"pattern": "[0-9]+", | |
"examples": ["9468374"] | |
}, | |
"virtualSubCategory2Id": { | |
"type": "string", | |
"title": "Secondary virtual category identifier", | |
"description": "If applicable, the tertiary virtual category identifier", | |
"pattern": "-?[0-9]+", | |
"examples": ["9468374"] | |
}, | |
"subCategory3": { | |
"type": "string", | |
"title": "Quaternary category", | |
"description": "If applicable, the quaternary category", | |
"examples": [ | |
"Livre enfant", | |
"Littérature", | |
"Roman policier", | |
"Ordinateur portable" | |
] | |
}, | |
"subCategory3ID": { | |
"type": "string", | |
"title": "Secondary category identifier", | |
"description": "If applicable, the quaternary category identifier", | |
"pattern": "[0-9]+", | |
"examples": ["9468374"] | |
}, | |
"virtualSubCategory3Id": { | |
"type": "string", | |
"title": "Secondary virtual category identifier", | |
"description": "If applicable, the quaternary virtual category identifier", | |
"pattern": "-?[0-9]+", | |
"examples": ["9468374"] | |
} | |
} | |
}, | |
"page": { | |
"type": "object", | |
"required": ["pageInfo", "attributes", "category"], | |
"properties": { | |
"pageInfo": { | |
"$ref": "#/definitions/page-info" | |
}, | |
"attributes": { | |
"type": "object", | |
"required": [ | |
"deviceType", | |
"siteID", | |
"marketID", | |
"environment", | |
"statusCode", | |
"statusText" | |
], | |
"properties": { | |
"deviceType": { | |
"title": "Client device", | |
"description": "Device the visitor use, for which the page is rendered", | |
"type": "string", | |
"enum": [ | |
"desktop-web", | |
"mobile-web", | |
"mobile-app", | |
"mobile-app-webview" | |
] | |
}, | |
"siteID": { | |
"title": "Site identifier", | |
"description": "SiteContext FnacSites", | |
"type": "string", | |
"enum": ["fnaccom", "fnacpro"] | |
}, | |
"marketID": { | |
"title": "Market identifier", | |
"description": "SiteContext FnacMarket ID (which is not the country code)", | |
"type": "string", | |
"enum": ["fr", "be", "ch", "es", "pt"] | |
}, | |
"environment": { | |
"title": "Environment", | |
"description": "SiteContext Environment", | |
"type": "string", | |
"enum": ["production", "integration", "dev"] | |
}, | |
"trafficSource": { | |
"title": "Traffic source", | |
"description": "Traffic aquisition source like utm_source or ORIGIN URL params or cookies", | |
"type": "string", | |
"defaultValue": "direct", | |
"examples": ["google", "facebook.com", "unknown"] | |
}, | |
"trafficCampaign": { | |
"title": "Traffic campaign", | |
"description": "Traffic aquisition campaign like utm_campaign URL param", | |
"type": "string", | |
"examples": ["spring_sale"] | |
}, | |
"trafficMedium": { | |
"title": "Traffic medium", | |
"description": "Traffic aquisition medium like utm_medium URL param", | |
"type": "string", | |
"examples": [ | |
"organic", | |
"cpc", | |
"ppc", | |
"paidsearch", | |
"social", | |
"paidsocial", | |
"email", | |
"affiliate", | |
"referral", | |
"cpv", | |
"cpa", | |
"cpp", | |
"display", | |
"cpm", | |
"banner" | |
] | |
}, | |
"entityID": { | |
"title": "Page main entity identifier", | |
"type": "string", | |
"description": "If applicable, the page main entity identifier: product ID (catalog + PRID), node ID (NID), post ID, collection ID, editor ID, series ID, contributor ID, or anything like \"id\" from HttpContext.Current.Request.RequestContext.RouteData. The entity could be a facet of an object, where this object is primary category. Example: a book chapter (one webpage per chapter) is the main entity, the book is the category. It is the case for tabs navigation, one page per tab, each represent a different facet of the same object.", | |
"examples": ["1-1234", "3-1234", "47890", "ipad12"] | |
}, | |
"entityAltID": { | |
"title": "Page main entity alternative identifier", | |
"type": "string", | |
"description": "If applicable, the page main entity alternative identifier. Something more useful for tracking", | |
"examples": ["1761ILYTR1"] | |
}, | |
"entityName": { | |
"title": "Page main entity name", | |
"type": "string", | |
"description": "If applicable, the main entity name: product name, node name, post title, collection name, category label, etc.", | |
"examples": ["47890"] | |
}, | |
"subentityID": { | |
"type": "array", | |
"items": { | |
"type": "string", | |
"description": "The subentity identifier. See `page.attributes.entityID`" | |
}, | |
"title": "Page subentity identifier", | |
"description": "If applicable, the subentity identifiers of an entity made of parts, a larger entity. Example: for a product list page, the list is the entity, products are subentities.", | |
"$comment": "If subentity details are needed, a dedicated root property is needed like `cart.item[]`, `order.item[]`, `product[].linkedProduct[]`, etc.", | |
"examples": [ | |
["1-1234", "3-3456"], | |
["1234", "3456"] | |
] | |
}, | |
"statusCode": { | |
"type": "integer", | |
"title": "Server response HTTP status code", | |
"minimum": 100, | |
"exclusiveMaximum": 600, | |
"defaultValue": 200, | |
"examples": [404, 500] | |
}, | |
"statusText": { | |
"type": "string", | |
"title": "Server response HTTP status text", | |
"defaultValue": "OK", | |
"examples": ["Not Found", "Internal Server Error"] | |
}, | |
"authorID": { | |
"type": "string", | |
"title": "Main content author identifier", | |
"description": "If available, the identifier of the main content author (page, post, recommendation, review, etc.)", | |
"examples": ["1"] | |
}, | |
"pageIndex": { | |
"type": "integer", | |
"title": "The page index", | |
"description": "If applicable, the index of a page of paginated items. Aka current page.", | |
"minimum": 1, | |
"examples": [1] | |
}, | |
"totalPages": { | |
"type": "integer", | |
"title": "The number of pages", | |
"description": "If applicable, the number of a page of paginated items", | |
"minimum": 1, | |
"examples": [980] | |
}, | |
"pageSize": { | |
"type": "integer", | |
"title": "The number of items per pages", | |
"description": "If applicable, the number of items per page of paginated items", | |
"minimum": 1, | |
"examples": [20] | |
}, | |
"totalCount": { | |
"type": "integer", | |
"title": "The total of items", | |
"description": "If applicable, the total of paginated items", | |
"minimum": 1, | |
"examples": [1286] | |
}, | |
"sortingMethod": { | |
"type": "string", | |
"title": "Sorting method", | |
"description": "If applicable, the sorting method of paginated items", | |
"examples": ["0", "5", "500", "relevance"] | |
}, | |
"userAgent": { | |
"type": "string", | |
"title": "User agent used to display the page", | |
"description": "The UA of user's own device, a proxy, a delegate, etc.", | |
"$comment": "See also https://groups.google.com/a/chromium.org/g/blink-dev/c/-2JIRNMWJ7s/m/yHe4tQNLCgAJ?pli=1", | |
"examples": [ | |
"Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0", | |
"Entreprise/6.5.0.177 CFNetwork/758.4.3 Darwin/15.5.0" | |
] | |
}, | |
"clientIP": { | |
"title": "Client IP address", | |
"description": "The IP address of the client or behind a privacy proxy, a VPN, a router that request the page.", | |
"oneOf": [ | |
{ | |
"type": "string", | |
"format": "ipv4" | |
}, | |
{ | |
"type": "string", | |
"format": "ipv6" | |
} | |
] | |
}, | |
"refiner": { | |
"title": "Refiners", | |
"description": "Aka filters, configurable refiners used for refinement of subentities. Categories are also refiners, but have dedicated properties: `page.category.primaryCategory`, `page.category.subCategory1`, etc. See also `page.attributes.subentityID`.", | |
"$comment": "If refiners aren't configurable, that means they are an integrative part of the main entity itself. The value of `page.attributes.entityID` should reflect it instead of using `page.attributes.refiner`", | |
"type": "array", | |
"items": { | |
"title": "Refiner", | |
"type": "object", | |
"required": ["refinerID", "refinerValue"], | |
"properties": { | |
"refinerID": { | |
"type": "string", | |
"title": "Refiner identifier" | |
}, | |
"refinerName": { | |
"type": "string", | |
"title": "Refiner name", | |
"examples": ["Prix", "Etat", "Vendeur"] | |
}, | |
"refinerValue": { | |
"title": "Refiner values", | |
"type": "array", | |
"items": { | |
"type": "string", | |
"title": "Refiner value", | |
"description": "Refiner value can be an exact attribute value (ex: color), date or date range, price or price range, pattern, etc.", | |
"$comment": "Some values are range (price, date, color, etc.) and need a special treatment to retrieve both indexes. For date range example, ISO 8601 provide a way to define a time interval with solidus or double hyphen. See https://en.wikipedia.org/wiki/ISO_8601#Time_intervals. See also `dateTime.ToBinary()`", | |
"examples": [ | |
"900_337100", | |
"900.0_337100.0", | |
"2007-03-01T13:00:00Z/2008-05-11T15:30:00Z" | |
] | |
} | |
}, | |
"refinerValueLabel": { | |
"title": "Refine value associated labels", | |
"description": "Some values can have an additional label", | |
"type": "array", | |
"items": { | |
"type": ["string", "null"], | |
"title": "Refiner value associated label" | |
} | |
} | |
} | |
}, | |
"examples": [ | |
[ | |
{ | |
"refinerID": "23", | |
"refinerName": "Marque", | |
"refinerValue": ["33959", "368496"], | |
"refinerValueLabel": ["On Earz Mobile Gear", "Temium"] | |
}, | |
{ | |
"refinerID": "9", | |
"refinerName": "Prix", | |
"refinerValue": ["900_337100"], | |
"refinerValueLabel": ["De 9 à 3 371 €"] | |
} | |
] | |
] | |
}, | |
"variant": { | |
"type": "string", | |
"title": "Page variant", | |
"description": "Containing the page data to identify which variant is used", | |
"minimum": 1, | |
"examples": ["{hash}_{versionNumber}"] | |
} | |
} | |
}, | |
"category": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/category" | |
}, | |
{ | |
"type": "object", | |
"required": ["pageTemplate", "pageType"], | |
"properties": { | |
"pageTemplate": { | |
"title": "Page template", | |
"description": "View identifier (aka codePage). It's the virual path of the page template. For MVC: `webPageBase.VirtualPath`. For WebForms: `page.AppRelativeVirtualPath`", | |
"type": "string", | |
"pattern": "^~(/[A-Z-a-z0-9_.-])+$", | |
"examples": [ | |
"~/Nav/Core/Views/Article/Index.cshtml", | |
"~/Guides/Tv/GuideHomecinema/lexique-home-cinema.aspx", | |
"~/UnknownPageTemplate.cshtml" | |
] | |
}, | |
"pageType": { | |
"title": "Page type", | |
"description": "Identify the page purpose without implementation detail. More human readable, but less reliable than `pageTemplate`. Recommendation: Use the same mechanism than SEOPatternsPages config to define it, based on `pageTemplate`", | |
"type": "string", | |
"pattern": "^[a-z][0-9a-z]*(-[a-z][0-9a-z]*)*$", | |
"enum": [ | |
"unknown-page-type", | |
"error", | |
"homepage", | |
"category", | |
"product-listing", | |
"product-page", | |
"customer-reviews", | |
"offer-listing", | |
"customer-profile", | |
"product-configurator", | |
"index", | |
"blogpost", | |
"blog-contributor-listing", | |
"blog-contributor-profile", | |
"blog-posts", | |
"search", | |
"storelocator", | |
"store-infos", | |
"store-category", | |
"seller-profile", | |
"participant-listing", | |
"participant-profile", | |
"serie-profile", | |
"report-abuse", | |
"guide", | |
"maintenance", | |
"cart", | |
"checkout-shipping", | |
"checkout-payment", | |
"checkout-csc-verification", | |
"checkout-onepage", | |
"order-complete", | |
"order-error", | |
"account", | |
"signin", | |
"signup" | |
] | |
}, | |
"pathID": { | |
"type": "string", | |
"title": "The page path identifier", | |
"description": "Some entities can have multiple path/routes. This identify which one is used. Aka PID and `w3TreeNode.TreePath.Id`", | |
"minimum": 0, | |
"examples": ["30145"] | |
} | |
} | |
} | |
] | |
} | |
} | |
}, | |
"profile-info": { | |
"type": "object", | |
"required": ["profileID", "userName"], | |
"properties": { | |
"profileID": { | |
"type": "string", | |
"title": "User identifier", | |
"description": "UID start with 1 if the user is identified else 0", | |
"examples": ["155C88289-6411-407B-BBF1-9C2257525019"] | |
}, | |
"profileHash": { | |
"type": "string", | |
"title": "User identifier hashed", | |
"description": "encrypted with AES", | |
"examples": [ | |
"KvMRqvh3aMem0AQhSTnC3WAZg60WwRvEFwt5sm26x2+LGBUUcpLCSH1pazaV3dnl" | |
] | |
}, | |
"userName": { | |
"type": "string", | |
"examples": ["Sylvain Joly", "Pierre Dupond"] | |
}, | |
"email": { | |
"title": "Email", | |
"description": "User email", | |
"$comment": "For CRM matching it could be useful to use a hash instead of the email value using algorithm like bcrypt, SHA-2 (512 or 256 bits) or MD5 (not recommended).\nFor that case, use the Web Crypto API client side to compute the hashed value https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest\n\nSee also `w3Customer.MD5EMail`.\n\nEmail hash shouldn't be considered as pseudonymised data: https://freedom-to-tinker.com/2018/04/09/four-cents-to-deanonymize-companies-reverse-hashed-email-addresses/\n\nFacebook, Twitter, Google Ads customer matching use SHA256:\n- https://developers.facebook.com/docs/marketing-api/audiences/guides/custom-audiences#hash\n- https://business.twitter.com/en/help/campaign-setup/campaign-targeting/custom-audiences/lists.html#how-do-i-prehash-my-file\n- https://support.google.com/google-ads/answer/7474263?hl=en\n\nCriteo use MD5 then SHA256:\n- https://support.criteo.com/s/article?article=Advanced-tag-settings&language=en_US\n- https://support.criteo.com/s/article?article=360001186049-Offline-sales-onboarding-flat-file-feed-integration&language=en_US\n\nLiveRamp use SHA-256, MD5, or SHA-1:\n- https://docs.liveramp.com/connect/en/formatting-identifiers.html\n\nGravatar use MD5:\n- https://en.gravatar.com/site/implement/hash/", | |
"type": "string", | |
"format": "idn-email" | |
}, | |
"emailHash": { | |
"title": "Email Hashed", | |
"description": "User email Hashed with SHA-256", | |
"type": "string" | |
} | |
} | |
}, | |
"profile": { | |
"type": "object", | |
"required": ["profileInfo", "attributes"], | |
"properties": { | |
"profileInfo": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/profile-info" | |
}, | |
{ | |
"type": "object", | |
"required": ["type"], | |
"properties": { | |
"type": { | |
"title": "User identification", | |
"type": "string", | |
"enum": ["identified", "unidentified"] | |
} | |
} | |
} | |
] | |
}, | |
"attributes": { | |
"type": "object", | |
"required": ["authState"], | |
"properties": { | |
"authState": { | |
"title": "User authentication", | |
"description": "Is an authenticated user?", | |
"type": "string", | |
"enum": ["authenticated", "unauthenticated"] | |
}, | |
"gender": { | |
"title": "Gender", | |
"description": "User gender (or biological sex if aligned)", | |
"type": "string", | |
"enum": ["male", "female", "other", "unknown", "not-applicable"] | |
} | |
} | |
} | |
} | |
}, | |
"user": { | |
"type": "object", | |
"required": ["profile", "segment"], | |
"properties": { | |
"profile": { | |
"type": "array", | |
"items": { | |
"$ref": "#/definitions/profile" | |
} | |
}, | |
"segment": { | |
"$comment": "A Fnac+ member (adhérent) need to pay a subscription fee annually or for 3 years (triennalement). See also: https://english.stackexchange.com/questions/10071/what-is-the-difference-between-subscription-and-membership", | |
"type": "object", | |
"required": [ | |
"subscriptionType", | |
"subscriptionStatus", | |
"subscriptionOffer" | |
], | |
"properties": { | |
"subscriptionType": { | |
"title": "User subscription type", | |
"description": "Current subscription. See `FnacDirect.Membership.Model.Constants.SubscriptionType`", | |
"$ref": "#/definitions/subscription-type" | |
}, | |
"subscriptionStatus": { | |
"title": "User subscription status", | |
"description": "Status of the current subscription. Based on `w3subscription.SubscriptionStatus`. See `FnacDirect.Front.WebBusiness.SubscriptionStatusType`", | |
"type": "string", | |
"enum": ["not-applicable", "active", "expired"] | |
}, | |
"subscriptionOffer": { | |
"title": "User subscription offer", | |
"description": "Offer of the current subscription. Based on `w3subscription.SubscriptionStatus`. See `FnacDirect.Front.WebBusiness.SubscriptionStatusType`", | |
"type": "string", | |
"$ref": "#/definitions/subscription-offer" | |
}, | |
"subscriptionStartDate": { | |
"title": "User subscription start date", | |
"description": "See `subscription.StartDate`", | |
"type": "string", | |
"format": "date" | |
}, | |
"subscriptionEndDate": { | |
"title": "User subscription end date", | |
"description": "See `subscription.EndDate`", | |
"type": "string", | |
"format": "date" | |
}, | |
"segmentCodes": { | |
"title": "User segment codes", | |
"description": "All active segments. See `customer.Segments`.", | |
"type": "array", | |
"items": { | |
"$ref": "#/definitions/user-segment-code" | |
} | |
} | |
} | |
}, | |
"featureCodes": { | |
"type": "array", | |
"items": { | |
"$ref": "#/definitions/user-feature-code" | |
} | |
} | |
} | |
}, | |
"product-info": { | |
"title": "Product Info", | |
"type": "object", | |
"required": ["productID", "productName"], | |
"properties": { | |
"productID": { | |
"title": "Product identifier", | |
"description": "Product PRID (don't use product ID)", | |
"type": "string" | |
}, | |
"productName": { | |
"type": "string" | |
}, | |
"description": { | |
"type": "string" | |
}, | |
"productURL": { | |
"type": "string", | |
"format": "uri" | |
}, | |
"productImage": { | |
"type": "string", | |
"format": "uri" | |
}, | |
"productThumbnail": { | |
"type": "string", | |
"format": "uri" | |
}, | |
"manufacturer": { | |
"type": "string" | |
}, | |
"sku": { | |
"type": "string", | |
"description": "Product SKU" | |
}, | |
"color": { | |
"type": "string" | |
}, | |
"gtin": { | |
"type": "string", | |
"description": "Product GTIN, same as: EAN/IAN, ISBN with prefix 978 or 979, some UPC, ISMN, ISSN" | |
}, | |
"mpn": { | |
"type": "string", | |
"description": "Product MPN, Manufacturer Part Numbers" | |
}, | |
"size": { | |
"type": "string" | |
} | |
}, | |
"examples": [ | |
{ | |
"productID": "11027877", | |
"productName": "Harry Potter - Tome 1 : Harry Potter, I : Harry Potter à l'école des sorciers", | |
"description": "De toutes nouvelles couvertures pour la saga de J.K. Rowling en Folio Junior.", | |
"productURL": "https://www.fnac.com/a11027877/Harry-Potter-Tome-1-Harry-Potter-I-Harry-Potter-a-l-ecole-des-sorciers-J-K-Rowling", | |
"sku": "749930", | |
"gtin": "9782070584628" | |
} | |
] | |
}, | |
"product": { | |
"title": "Product", | |
"type": "object", | |
"required": ["productInfo", "price"], | |
"properties": { | |
"productInfo": { | |
"title": "Product Info", | |
"description": "This object describes the product.", | |
"$ref": "#/definitions/product-info" | |
}, | |
"category": { | |
"title": "Product categories", | |
"$ref": "#/definitions/category", | |
"examples": [ | |
{ | |
"primaryCategory": "Livre", | |
"primaryCategoryID": "-1", | |
"subCategory1": "Livre Jeunesse", | |
"subCategory2": "Meilleures ventes livres Jeunesse" | |
} | |
] | |
}, | |
"linkedProduct": { | |
"title": "Product linked products", | |
"description": "List of products linked to this product.", | |
"type": "array", | |
"items": { | |
"$ref": "#/definitions/product" | |
} | |
}, | |
"price": { | |
"title": "Product price", | |
"$ref": "#/definitions/price" | |
}, | |
"attributes": { | |
"title": "Product attributes", | |
"description": "This object provides extensibility to the product object. Any additional dimensions related to the product can be provided.", | |
"type": "object", | |
"properties": { | |
"catalog": { | |
"$ref": "#/definitions/catalog" | |
}, | |
"type": { | |
"type": "string", | |
"enum": ["good", "service"] | |
}, | |
"nature": { | |
"type": "string", | |
"$comment": "https://en.wikipedia.org/wiki/Intangible_good", | |
"enum": ["physical", "digital"] | |
}, | |
"format": { | |
"type": "string", | |
"enum": ["cd", "dvd", "blu-ray", "audiobook", "e-book"] | |
}, | |
"offer": { | |
"title": "Offers", | |
"type": "array", | |
"items": { | |
"$ref": "#/definitions/offer" | |
} | |
}, | |
"offerID": { | |
"$ref": "#/definitions/offer-identifier" | |
}, | |
"sellerType": { | |
"$ref": "#/definitions/seller-type" | |
}, | |
"seller": { | |
"$ref": "#/definitions/seller-name" | |
}, | |
"sellerID": { | |
"$ref": "#/definitions/seller-identifier" | |
}, | |
"condition": { | |
"$ref": "#/definitions/item-condition" | |
}, | |
"availabilityID": { | |
"$ref": "#/definitions/availability-identifier" | |
}, | |
"availabilityType": { | |
"$ref": "#/definitions/availability-type" | |
}, | |
"availability": { | |
"$ref": "#/definitions/availability" | |
}, | |
"salesCategory": { | |
"$ref": "#/definitions/sales-category" | |
}, | |
"userRating": { | |
"$ref": "#/definitions/user-rating" | |
}, | |
"labRating": { | |
"$ref": "#/definitions/lab-rating" | |
}, | |
"fulfillment": { | |
"$ref": "#/definitions/fulfillment" | |
} | |
} | |
} | |
} | |
}, | |
"offer": { | |
"title": "Offer", | |
"description": "See https://schema.org/Offer", | |
"type": "object", | |
"required": ["seller", "sellerID"], | |
"properties": { | |
"offerID": { | |
"$ref": "#/definitions/offer-identifier" | |
}, | |
"sellerType": { | |
"$ref": "#/definitions/seller-type" | |
}, | |
"seller": { | |
"$ref": "#/definitions/seller-name" | |
}, | |
"sellerID": { | |
"$ref": "#/definitions/seller-identifier" | |
}, | |
"condition": { | |
"$ref": "#/definitions/item-condition" | |
}, | |
"availabilityID": { | |
"$ref": "#/definitions/availability-identifier" | |
}, | |
"availabilityType": { | |
"$ref": "#/definitions/availability-type" | |
}, | |
"availability": { | |
"$ref": "#/definitions/availability" | |
}, | |
"price": { | |
"title": "Offer price", | |
"$ref": "#/definitions/price" | |
}, | |
"offerURL": { | |
"title": "Offer URL", | |
"type": "string", | |
"format": "uri" | |
} | |
} | |
}, | |
"price": { | |
"title": "Price", | |
"type": "object", | |
"required": ["basePrice", "currency", "priceWithTax"], | |
"properties": { | |
"basePrice": { | |
"description": "Should be the price before applicable discounts, shipping charges, and tax.", | |
"type": "number", | |
"minimum": 0 | |
}, | |
"currency": { | |
"description": "Use ISO 4217 format.", | |
"type": "string", | |
"enum": ["EUR", "CHF", "XAU", "XTS", "XXX"] | |
}, | |
"taxRate": { | |
"type": "number", | |
"description": "Tax rate. Ex: 0.2 for 20%", | |
"minimum": 0 | |
}, | |
"discount": { | |
"type": "number", | |
"description": "Discount rate. Ex: 0.5 for 50% discount", | |
"minimum": 0 | |
}, | |
"shipping": { | |
"type": "number", | |
"minimum": 0 | |
}, | |
"shippingMethod": { | |
"title": "Shipping method name", | |
"description": "It's the human localized text version of `payment-method-identifier`. See `ShippingMethod.Label`", | |
"type": "string" | |
}, | |
"shippingMethodID": { | |
"title": "Shipping method identifier", | |
"description": "Shipping method identifier of a shipping combination: location (from like: retail store or warehouse, multi-origin), zone (to: local, domestic, international), product type/weight (letter, parcel, container), carrier (for mail, freight, parcel service), delivery speed, use drop shipping, etc. See `ShippingMethod.MethodId`", | |
"type": "string" | |
}, | |
"priceWithTax": { | |
"description": "Price with all tax included", | |
"type": "number", | |
"minimum": 0 | |
}, | |
"voucherCode": { | |
"description": "See `AdvantageCode`", | |
"type": "string", | |
"examples": ["7GH42K6"] | |
}, | |
"voucherDiscount": { | |
"type": "number" | |
} | |
} | |
}, | |
"cart": { | |
"type": "object", | |
"required": ["cartID", "price", "item"], | |
"properties": { | |
"cartID": { | |
"title": "Cart identifier", | |
"description": "An identifier for a particular shopping cart.", | |
"type": "string", | |
"example": ["253cfbb5-542c-4eae-9d55-e6464311aa50"] | |
}, | |
"price": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/price" | |
}, | |
{ | |
"type": "object", | |
"required": ["cartTotal"], | |
"properties": { | |
"cartTotal": { | |
"title": "Cart total", | |
"description": "The total price inclusive of all discounts, charges, and tax", | |
"type": "number", | |
"minimum": 0, | |
"examples": [125.23] | |
} | |
} | |
} | |
] | |
}, | |
"item": { | |
"type": "array", | |
"items": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/product" | |
}, | |
{ | |
"$ref": "#/definitions/quantifiable-item" | |
}, | |
{ | |
"type": "object", | |
"required": ["quantity"] | |
} | |
] | |
} | |
} | |
} | |
}, | |
"address": { | |
"title": "Address", | |
"$comment": "Extends CEDDL address", | |
"type": "object", | |
"required": ["line1", "city", "postalCode", "country"], | |
"properties": { | |
"name": { | |
"title": "Recipient or addressee name", | |
"description": "The recipient who receives the letter or email. The addressee, for a letter or email is addressed to. Natural person or organization.", | |
"type": "string" | |
} | |
}, | |
"examples": [ | |
{ | |
"name": "FNAC DIRECT", | |
"line1": "9 RUE DES BATEAUX LAVOIRS", | |
"city": "IVRY SUR SEINE", | |
"postalCode": "94768 CEDEX", | |
"country": "France métropolitaine", | |
"specialInstruction": "Code 1234 A droite en sortant de l'ascenseur" | |
}, | |
{ | |
"line1": "10 RUE DE LA LIBERTE", | |
"line2": "Bâtiment A Appartement 123", | |
"city": "VILLENOUVELLE", | |
"postalCode": "99123", | |
"country": "France métropolitaine" | |
} | |
] | |
}, | |
"purchaser-profile": { | |
"title": "Purchaser profile", | |
"description": "A profile for information about the purchaser, typically associated with a registered user.", | |
"type": "object", | |
"required": ["profileInfo"], | |
"properties": { | |
"profileInfo": { | |
"title": "Purchaser informations", | |
"description": "An extensible object for providing information about the purchaser.", | |
"$ref": "#/definitions/profile-info" | |
}, | |
"address": { | |
"title": "Billing address", | |
"description": "An extensible object for providing (billing) address information for the purchaser.", | |
"$ref": "#/definitions/address" | |
}, | |
"shippingAddress": { | |
"title": "Shipping address", | |
"description": "As for address, but for the shipping address", | |
"$ref": "#/definitions/address" | |
} | |
} | |
}, | |
"payable-item": { | |
"title": "Payable item", | |
"$comment": "Possible add for `paymentMethod` basic-card and additional field paymentNetwork like visa, mastercard, amex, cartebancaire, etc. see https://www.w3.org/Payments/card-network-ids. How to descide which is the main payment method?", | |
"properties": { | |
"paymentMethod": { | |
"$ref": "#/definitions/payment-method" | |
}, | |
"paymentMethodID": { | |
"$ref": "#/definitions/payment-method-identifier" | |
}, | |
"paymentMethodStorage": { | |
"$ref": "#/definitions/payment-method-details-storage" | |
}, | |
"splitPaymentMethods": { | |
"type": "array", | |
"minLength": 1, | |
"items": { | |
"type": "object", | |
"properties": { | |
"paymentMethod": { | |
"$ref": "#/definitions/payment-method" | |
}, | |
"paymentMethodID": { | |
"$ref": "#/definitions/payment-method-identifier" | |
}, | |
"paymentMethodStorage": { | |
"$ref": "#/definitions/payment-method-details-storage" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"quantifiable-item": { | |
"title": "Quantifiable item", | |
"properties": { | |
"quantity": { | |
"description": "Quantity of this particular item.", | |
"type": "integer", | |
"minimum": 1 | |
} | |
} | |
}, | |
"shippable-item": { | |
"title": "Shippable item", | |
"properties": { | |
"shipmentID": { | |
"description": "An identifier for a particular shipment. It could represent a hash of tracking number or master tracking number in case of multiple packages.", | |
"type": "string" | |
} | |
} | |
}, | |
"transaction": { | |
"type": "object", | |
"required": ["transactionID", "total", "attributes", "item"], | |
"properties": { | |
"transactionID": { | |
"title": "Transaction identifier", | |
"description": "Same as `MainOrderUserReference`", | |
"type": "string", | |
"example": ["CDRIW4Y3AAHMBG"] | |
}, | |
"profile": { | |
"$ref": "#/definitions/purchaser-profile" | |
}, | |
"total": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/price" | |
}, | |
{ | |
"type": "object", | |
"required": ["transactionTotal"], | |
"properties": { | |
"transactionTotal": { | |
"title": "Transaction total", | |
"description": "The `transactionTotal` should be the total price inclusive of all discounts, charges, and tax.", | |
"type": "number", | |
"minimum": 0, | |
"examples": [125] | |
} | |
} | |
} | |
] | |
}, | |
"attributes": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/payable-item" | |
}, | |
{ | |
"type": "object", | |
"required": ["cartID"], | |
"properties": { | |
"transactionDate": { | |
"title": "Transaction date", | |
"type": "string", | |
"format": "date-time", | |
"examples": ["2014-09-20T00:00:00.000Z"] | |
}, | |
"cartID": { | |
"title": "Cart identifier", | |
"description": "Cart identifier", | |
"example": ["253cfbb5-542c-4eae-9d55-e6464311aa50"] | |
} | |
} | |
} | |
] | |
}, | |
"item": { | |
"description": "List of items in the transaction.", | |
"type": "array", | |
"items": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/product" | |
}, | |
{ | |
"$ref": "#/definitions/quantifiable-item" | |
}, | |
{ | |
"required": ["quantity"] | |
}, | |
{ | |
"attributes": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/shippable-item" | |
} | |
] | |
} | |
} | |
] | |
} | |
} | |
} | |
}, | |
"order": { | |
"type": "object", | |
"required": ["orderID", "total", "attributes", "item"], | |
"properties": { | |
"orderID": { | |
"title": "Order identifier", | |
"description": "Same as `logisticLineGroup.OrderUserReference`", | |
"type": "string", | |
"example": ["95PECL5RAZ32K"] | |
}, | |
"profile": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/purchaser-profile" | |
}, | |
{ | |
"type": "object", | |
"required": ["address"], | |
"properties": { | |
"address": { | |
"title": "Billing address", | |
"type": "object" | |
} | |
} | |
} | |
] | |
}, | |
"total": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/price" | |
}, | |
{ | |
"type": "object", | |
"required": ["orderTotal"], | |
"properties": { | |
"orderTotal": { | |
"title": "Order total", | |
"description": "The `orderTotal` should be the total price inclusive of all discounts, charges, and tax.", | |
"type": "number", | |
"minimum": 0, | |
"examples": [125] | |
} | |
} | |
} | |
] | |
}, | |
"attributes": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/payable-item" | |
}, | |
{ | |
"required": ["status", "transactionID"], | |
"type": "object", | |
"properties": { | |
"orderDate": { | |
"title": "Order date", | |
"type": "string", | |
"format": "date-time", | |
"examples": ["2014-09-20T00:00:00.000Z"] | |
}, | |
"status": { | |
"title": "Order status", | |
"type": "string", | |
"$comment": "See https://schema.org/OrderStatus, https://docs.woocommerce.com/document/managing-orders/#section-2 https://docs.woocommerce.com/wp-content/uploads/2013/08/woocommerce-zapier-order-status-life-cycle.png and `FnacDirect.Front.AccountMVC.Business.Model.OrderDetailStatus` (simplified)", | |
"pattern": "^[a-z][0-9a-z]*(-[a-z][0-9a-z]*)*$", | |
"enum": [ | |
"unapprouved", | |
"cancelled", | |
"delivered", | |
"in-transit", | |
"payment-due", | |
"pickup-available", | |
"problem", | |
"processing", | |
"returned" | |
] | |
}, | |
"transactionID": { | |
"title": "Transaction identifier", | |
"description": "Same as `MainOrderUserReference`", | |
"type": "string", | |
"example": ["CDRIW4Y3AAHMBG"] | |
} | |
} | |
} | |
] | |
}, | |
"item": { | |
"description": "List of items in the order.", | |
"type": "array", | |
"items": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/product" | |
}, | |
{ | |
"$ref": "#/definitions/quantifiable-item" | |
}, | |
{ | |
"required": ["quantity"] | |
}, | |
{ | |
"attributes": { | |
"allOf": [ | |
{ | |
"$ref": "#/definitions/shippable-item" | |
} | |
] | |
} | |
} | |
] | |
} | |
} | |
} | |
}, | |
"payment-method": { | |
"title": "Payment method", | |
"description": "It's the human localized text version of `payment-method-identifier`", | |
"type": "string", | |
"examples": [ | |
"PayPal", | |
"Tarjeta de crédito", | |
"Ledenaccount", | |
"Chèque-cadeaux fnac.be", | |
"Telefoon" | |
] | |
}, | |
"payment-method-identifier": { | |
"title": "Payment method identifier", | |
"description": "Provide a payment method payment combination: payment mean (credit card, digital wallet, direct carrier billing, collect on delivery, cash, etc.), gateway (paypal, pay by phone), charge fee, currency, pre-authorization, credit card network, etc.", | |
"type": "string", | |
"examples": ["1048576-44", "1-0", "4"] | |
}, | |
"payment-method-details-storage": { | |
"title": "Payment method details storage", | |
"description": "Provide the information about the user authorization given for details like Cardholder Data (CHD, like 16-digit PAN, expiration date, and cardholder name; but not the Sensitive Account Data / SAD) to be stored (unlike Sensitive Authentication Data / SAD). Ex: for recuring payment (tacit agreement). See Payment Card Industry Data Security Standard (PCI-DSS) requirements.", | |
"type": "string", | |
"enum": ["stored", "authorized", "unauthorized"] | |
}, | |
"offer-identifier": { | |
"type": "string", | |
"example": [ | |
"00000000-0000-0000-0000-000000000000", | |
"abdf9052-d3ce-2951-2ef1-eb0ab2e1e817" | |
] | |
}, | |
"seller-name": { | |
"type": "string", | |
"example": ["Fnac", "BourseAuxLivres"] | |
}, | |
"seller-identifier": { | |
"type": "string", | |
"example": ["0", "150400", "250903"] | |
}, | |
"item-condition": { | |
"title": "Item condition", | |
"type": "string", | |
"enum": [ | |
"damaged", | |
"new", | |
"refurbished", | |
"used", | |
"like-new", | |
"very-good", | |
"good", | |
"acceptable" | |
] | |
}, | |
"catalog": { | |
"type": "string", | |
"description": "The catalog ID of the product. See `FnacDirect.Contracts.Online.Model.ArticleCatalog`", | |
"$comment": "newref = 1P (fnacdirect), metacat = 3P (markeplace)", | |
"enum": ["newref", "metacat"] | |
}, | |
"availability": { | |
"title": "Availability", | |
"description": "The availability of the item. It's the human localized text version of `availability-identifier`", | |
"$comment": "See https://schema.org/ItemAvailability. Mapping to availability IDs is not possible. Use the `AvailabilityService`", | |
"type": "string", | |
"enum": [ | |
"discontinued", | |
"in-stock", | |
"limited-availability", | |
"online-only", | |
"out-of-stock", | |
"pre-order", | |
"pre-sale", | |
"sold-out" | |
] | |
}, | |
"availability-type": { | |
"title": "Availability type", | |
"description": "The availability of the item. Relevant only for the first party (FnacDirect / newref catalog). For example In stock, Out of stock, Pre-order, etc. More human readable, but less reliable than `availability-identifier`", | |
"$comment": "See https://schema.org/ItemAvailability. Mapping to `availability-identifier` is not possible. Use the `AvailabilityService`", | |
"type": "string", | |
"enum": [ | |
"discontinued", | |
"in-stock", | |
"limited-availability", | |
"online-only", | |
"out-of-stock", | |
"pre-order", | |
"pre-sale", | |
"sold-out" | |
] | |
}, | |
"availability-identifier": { | |
"title": "Availability identifier", | |
"description": "Provide a availability combination: delay, in stock, still selled, etc.", | |
"type": "string", | |
"examples": ["3", "99"] | |
}, | |
"seller-type": { | |
"title": "Seller type", | |
"type": "string", | |
"enum": ["fnaccom", "fnacstore", "professionel", "private"] | |
}, | |
"user-segment-code": { | |
"title": "User segment code", | |
"description": "See `tbl_AccountSegment.fld_as_code`. This include fake codes from `FidelityProg`", | |
"type": "string", | |
"examples": [ | |
"Member", | |
"Member3Years", | |
"Customer", | |
"FirstOrder", | |
"FuturMember", | |
"FuturMember3Years", | |
"Gamer", | |
"MemberOne", | |
"FnacPlus", | |
"MemberXYears", | |
"FuturMemberXYears", | |
"MemberAmex", | |
"MemberAmexPlus", | |
"MemberOneAmex", | |
"UnlimitedSubscription", | |
"MemberTryCard", | |
"EssaiPlus", | |
"EssaiPlusNonConverti", | |
"ExpressPlus", | |
"ExpressPlusNonRenouvele", | |
"NonAbonneExpressPlus", | |
"TRCBExpressPlus", | |
"EligibleEssaiExpressPlus", | |
"PushRenouvellementExpressPlus", | |
"DartyPlus", | |
"EssaiDartyPlus", | |
"FuturFnacPlus", | |
"Personnel", | |
"Retraites", | |
"OPAdherent", | |
"RecrutOPAdherent", | |
"RenouvOPAdherent", | |
"RenouvFnac", | |
"RenouvFnacPlus", | |
"RenouvFnacFnacPlus", | |
"RenouvOnePlus", | |
"RenouvOneOnePlus", | |
"SouscrireOnePlus", | |
"RenouvOne", | |
"SouscrireFnacPlus", | |
"FusionCommuneBelge", | |
"FnacPlusCPlay", | |
"BetaSDC" | |
] | |
}, | |
"user-feature-code": { | |
"title": "User active feature code", | |
"description": "list of active feature for user", | |
"type": "string", | |
"examples": ["ab_artist_similar_EB", "ab_search_google"] | |
}, | |
"sales-category": { | |
"description": "Provide an product animation information : 1, 2, 3, 4, 5, 8 (list reserved for the web), 9 (end of life / product no longer available on the market), all other (List open to all (store and web))", | |
"type": "string" | |
}, | |
"user-rating": { | |
"description": "Average rating of customer reviews, rating between 0 and 5 or null (no reviews)", | |
"type": "number" | |
}, | |
"lab-rating": { | |
"description": "Provide the Fnac Labo note value, note between 0 and 5 or null (no note)", | |
"type": "number" | |
}, | |
"fulfillment": { | |
"description": "Provide the product's shipper", | |
"type": "string" | |
}, | |
"subscription-type": { | |
"description": "See `FnacDirect.Membership.Model.Constants.SubscriptionType`", | |
"type": "string", | |
"enum": ["none", "fnac", "fnacplus", "fnacone", "fnaconeplus"] | |
}, | |
"subscription-offer": { | |
"type": "string", | |
"enum": ["none", "free-trial", "paid"] | |
}, | |
"subscription-plan": { | |
"title": "Subscription plan", | |
"properties": { | |
"subscriptionName": { | |
"title": "Subscription plan name", | |
"type": "string" | |
}, | |
"subscriptionType": { | |
"title": "Subscription plan type", | |
"$ref": "#/definitions/subscription-type" | |
}, | |
"subscriptionOffer": { | |
"title": "Subscription plan offer", | |
"$ref": "#/definitions/subscription-offer" | |
}, | |
"price": { | |
"title": "Subscription plan price", | |
"$ref": "#/definitions/price" | |
}, | |
"descriptionURL": { | |
"title": "Link to subscription plan page", | |
"type": "string", | |
"format": "uri" | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment