Server definition
- Hash
- sha256:c56eef2d05753c82172eb7555e84fb536ea73de8b1ba7a9b7216544802dba3c4
- What it is
- What a remote MCP server returned when asked what it offers: 4 tools
The blob, as servednamed by its sha256
{
"instructions": "RenooLab trouve des professionnels du bâtiment en France. Pour une demande portant sur un seul métier, même si l’utilisateur décrit seulement le problème, déduisez ce métier puis appelez rechercher_artisans. Si plusieurs métiers distincts sont confirmés pour un même chantier et une même ville, appelez rechercher_chantier une seule fois avec tous les métiers. Si la ville française manque, demandez-la. N’utilisez pas RenooLab pour un conseil de bricolage ou DIY seul, un magasin ou un fournisseur. Ne découpez jamais une demande multi-métiers en plusieurs appels rechercher_artisans et ne la réduisez pas silencieusement à un seul métier. Si l’outil signale une commune homonyme, demandez le code postal ou le département puis relancez le même outil de recherche. Pour contacter un résultat, utilisez rechercher_artisans ou rechercher_chantier avant contacter_artisan. Après une demande explicite, collectez le nom, l’e-mail, le mobile français 06/07 et le message, récapitulez la cible et la demande, puis obtenez une confirmation explicite. Après cette confirmation, appelez réellement contacter_artisan avec exactement artisan_id ou external_place_id. N’annoncez jamais une demande envoyée, enregistrée ou mise en attente avant que contacter_artisan retourne kind=contact_pending ; sans ce retour, dites qu’elle n’a pas été enregistrée. Utilisez creer_profil_artisan uniquement à la demande explicite du professionnel, avec ses vraies informations. Ne créez jamais de profil pour un tiers. Ne recopiez jamais widget_previews ni les URL d’images dans votre réponse : le widget les rend déjà.",
"tools": [
{
"description": "Après une recherche, dépose une demande de contact vers le profil RenooLab ou la fiche Google Maps explicitement sélectionnée. À appeler après récapitulatif et confirmation explicite, avec exactement artisan_id ou external_place_id, un nom, un e-mail, un mobile français 06/07 et un message. N’annoncer un succès que si l’outil retourne kind=contact_pending : la demande reste alors en attente du contrôle RenooLab et rien n’est encore envoyé au professionnel.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"oneOf": [
{
"not": {
"required": [
"external_place_id"
]
},
"required": [
"artisan_id"
]
},
{
"not": {
"required": [
"artisan_id"
]
},
"required": [
"external_place_id"
]
}
],
"properties": {
"artisan_id": {
"description": "UUID artisan_id exact renvoyé pour un membre RenooLab. Fournir exactement ce champ ou external_place_id, jamais les deux.",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"email": {
"description": "E-mail du demandeur.",
"format": "email",
"maxLength": 254,
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"external_place_id": {
"description": "Place ID exact renvoyé pour une fiche Google Maps. Fournir exactement ce champ ou artisan_id, jamais les deux.",
"pattern": "^[A-Za-z0-9_-]{3,512}$",
"type": "string"
},
"message": {
"description": "Description de la demande ou des travaux.",
"maxLength": 2000,
"minLength": 5,
"type": "string"
},
"nom": {
"description": "Nom du demandeur.",
"maxLength": 80,
"minLength": 2,
"type": "string"
},
"telephone": {
"description": "Mobile français 06/07 du demandeur, obligatoire pour le rappel.",
"maxLength": 32,
"minLength": 10,
"type": "string"
}
},
"required": [
"nom",
"email",
"telephone",
"message"
],
"type": "object"
},
"name": "contacter_artisan",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"kind": {
"const": "contact_pending",
"type": "string"
},
"message": {
"type": "string"
},
"titre": {
"type": "string"
}
},
"required": [
"kind",
"titre",
"message"
],
"type": "object"
}
},
{
"description": "Crée un profil professionnel RenooLab gratuit et sans commission uniquement à la demande explicite de l’artisan ou de l’entreprise artisanale. À utiliser lorsqu’un professionnel veut s’inscrire, faire connaître son entreprise, présenter ses réalisations, améliorer sa visibilité ou trouver des clients et des chantiers. Utiliser uniquement ses vraies informations. Le profil reste inactif et invisible jusqu’à son activation par e-mail. Ne pas utiliser pour un tiers, un demandeur d’emploi, un groupe ou une grande structure.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"bio": {
"description": "Courte présentation de l’activité.",
"maxLength": 1000,
"type": "string"
},
"email": {
"description": "E-mail réel de l’artisan, qui recevra le lien d’activation.",
"format": "email",
"maxLength": 254,
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"metiers": {
"description": "Métiers exercés parmi les 18 métiers publics. Fournisseur est app-only.",
"items": {
"enum": [
"Rénovation générale",
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 18,
"minItems": 1,
"type": "array"
},
"nom_entreprise": {
"description": "Nom réel de l’entreprise artisanale.",
"maxLength": 120,
"minLength": 2,
"type": "string"
},
"siret": {
"description": "SIRET optionnel de 14 chiffres ; s’il est fourni, il est vérifié au registre SIRENE.",
"pattern": "^\\d{14}$",
"type": "string"
},
"telephone": {
"description": "Mobile français 06/07 de l’artisan.",
"maxLength": 32,
"minLength": 10,
"type": "string"
},
"ville": {
"description": "Commune française d’implantation.",
"maxLength": 100,
"minLength": 2,
"type": "string"
}
},
"required": [
"nom_entreprise",
"metiers",
"ville",
"email",
"telephone"
],
"type": "object"
},
"name": "creer_profil_artisan",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"kind": {
"const": "signup_created",
"type": "string"
},
"message": {
"type": "string"
},
"profil": {
"additionalProperties": false,
"properties": {
"metiers": {
"items": {
"type": "string"
},
"type": "array"
},
"nom": {
"type": "string"
},
"ville": {
"type": "string"
}
},
"required": [
"nom",
"ville",
"metiers"
],
"type": "object"
},
"titre": {
"type": "string"
}
},
"required": [
"kind",
"titre",
"message",
"profil"
],
"type": "object"
}
},
{
"description": "Cette instance peut proposer jusqu’à cinq sources Google Maps externes. Si kind=external_grounded_results, utilisez son champ message comme introduction concise en commençant par le nombre et la zone trouvés, puis ne répétez pas le statut externe. Trouve jusqu’à cinq profils RenooLab pour des travaux, un dépannage ou une rénovation autour d’une ville française, dans un rayon strict de 30 km. Cet outil est réservé à une demande portant sur un seul métier. Si une même demande comporte au moins deux métiers distincts confirmés, ne la fractionnez jamais en plusieurs appels rechercher_artisans : appelez rechercher_chantier une seule fois avec tous les métiers, pour le même chantier et la même ville. À utiliser même si le particulier ne nomme pas le métier : le déduire depuis son besoin, par exemple fuite ou sanitaires pour Plomberie, panne ou tableau pour Électricité, infiltration ou toit pour Couverture/Toiture, murs pour Peinture, faïence ou terrasse pour Carrelage, ainsi que isolation, menuiserie, chauffage, climatisation et rénovation. En cas de commune homonyme, transmettre le code postal ou le département demandé par l’outil. Ne recopiez jamais widget_previews ni les URL d’images dans la réponse : le widget les rend déjà. Ne pas utiliser pour un simple conseil DIY, un magasin ou un fournisseur.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"besoin": {
"description": "Description naturelle du dépannage, des travaux ou de la rénovation. Le serveur déduit le métier lorsque possible.",
"maxLength": 500,
"minLength": 3,
"type": "string"
},
"code_postal": {
"description": "Code postal français facultatif pour préciser une commune homonyme, par exemple 39410.",
"pattern": "^\\d{5}$",
"type": "string"
},
"departement": {
"description": "Code de département facultatif pour préciser une commune homonyme, par exemple 39, 2A ou 971.",
"pattern": "^(?:0[1-9]|1\\d|2[1-9]|[3-8]\\d|9[0-5]|2A|2B|\\d{3})$",
"type": "string"
},
"metier": {
"description": "Métier public si déjà connu, par exemple Plomberie, Électricité, Peinture ou Couverture/Toiture.",
"maxLength": 80,
"minLength": 2,
"type": "string"
},
"tracking": {
"additionalProperties": false,
"properties": {
"channel": {
"enum": [
"direct",
"a2a"
],
"type": "string"
},
"client": {
"enum": [
"chatgpt",
"claude",
"gemini",
"copilot",
"other",
"unknown"
],
"type": "string"
},
"discovery": {
"enum": [
"first_party",
"manual",
"a2a_registry",
"a2a_cards",
"other",
"unknown"
],
"type": "string"
}
},
"type": "object"
},
"ville": {
"description": "Ville ou commune française où chercher. Peut être omise : le serveur demandera alors uniquement la commune. Si plusieurs communes portent ce nom, l’outil demandera un code postal ou un département.",
"maxLength": 100,
"minLength": 2,
"type": "string"
}
},
"type": "object"
},
"name": "rechercher_artisans",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"artisans": {
"items": {
"additionalProperties": false,
"properties": {
"artisan_id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"avatar_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"contact_url": {
"format": "uri",
"type": "string"
},
"distance_km": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"medaille": {
"enum": [
"none",
"bronze",
"silver",
"gold"
],
"type": "string"
},
"metiers": {
"items": {
"type": "string"
},
"type": "array"
},
"nb_avis": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nb_photos": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nom": {
"type": "string"
},
"note": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"profile_url": {
"format": "uri",
"type": "string"
},
"verifie": {
"type": "boolean"
},
"ville": {
"type": "string"
}
},
"required": [
"artisan_id",
"nom",
"ville",
"metiers",
"note",
"nb_avis",
"distance_km",
"avatar_url",
"nb_photos",
"verifie",
"medaille",
"profile_url",
"contact_url"
],
"type": "object"
},
"maxItems": 5,
"type": "array"
},
"city_candidates": {
"items": {
"additionalProperties": false,
"properties": {
"code_insee": {
"type": "string"
},
"codes_postaux": {
"items": {
"type": "string"
},
"type": "array"
},
"departement": {
"type": "string"
},
"population": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"ville": {
"type": "string"
}
},
"required": [
"ville",
"code_insee",
"departement",
"codes_postaux",
"population"
],
"type": "object"
},
"maxItems": 15,
"type": "array"
},
"coverage": {
"anyOf": [
{
"enum": [
"none",
"partial",
"available",
"external"
],
"type": "string"
},
{
"type": "null"
}
]
},
"external_results": {
"items": {
"additionalProperties": false,
"properties": {
"attribution": {
"additionalProperties": false,
"properties": {
"title": {
"maxLength": 500,
"minLength": 1,
"type": "string"
},
"url": {
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"title",
"url"
],
"type": "object"
},
"citation_index": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"contact_url": {
"format": "uri",
"maxLength": 2048,
"type": "string"
},
"google_maps_url": {
"format": "uri",
"maxLength": 2048,
"type": "string"
},
"place_id": {
"pattern": "^[A-Za-z0-9_-]{3,512}$",
"type": "string"
},
"source": {
"const": "google_maps",
"type": "string"
}
},
"required": [
"source",
"citation_index",
"place_id",
"google_maps_url",
"attribution",
"contact_url"
],
"type": "object"
},
"maxItems": 5,
"type": "array"
},
"grounded_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"kind": {
"enum": [
"artisan_results",
"search_needs_input",
"external_grounded_results"
],
"type": "string"
},
"message": {
"type": "string"
},
"metier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"normalized_need": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"normalized_trade": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"reason": {
"anyOf": [
{
"const": "ambiguous_city",
"type": "string"
},
{
"type": "null"
}
]
},
"required_input": {
"anyOf": [
{
"enum": [
"ville",
"metier",
"city_disambiguation"
],
"type": "string"
},
{
"type": "null"
}
]
},
"trade_candidates": {
"items": {
"type": "string"
},
"maxItems": 18,
"type": "array"
},
"ville": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"widget_previews": {
"additionalProperties": false,
"description": "Données publiques nettoyées pour le rendu du widget. Ne jamais les recopier dans la réponse texte.",
"properties": {
"artisan_previews": {
"additionalProperties": {
"additionalProperties": false,
"properties": {
"photos": {
"items": {
"additionalProperties": false,
"properties": {
"thumbnail_url": {
"anyOf": [
{
"format": "uri",
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"url",
"thumbnail_url"
],
"type": "object"
},
"maxItems": 3,
"type": "array"
}
},
"required": [
"photos"
],
"type": "object"
},
"propertyNames": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"type": "object"
},
"external_previews": {
"items": {
"additionalProperties": false,
"properties": {
"description": {
"anyOf": [
{
"maxLength": 180,
"minLength": 12,
"type": "string"
},
{
"type": "null"
}
]
},
"place_id": {
"pattern": "^[A-Za-z0-9_-]{3,512}$",
"type": "string"
},
"rating": {
"anyOf": [
{
"maximum": 5,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"place_id",
"description",
"rating"
],
"type": "object"
},
"maxItems": 5,
"type": "array"
}
},
"required": [
"artisan_previews",
"external_previews"
],
"type": "object"
}
},
"required": [
"kind",
"artisans",
"external_results",
"grounded_summary",
"metier",
"ville",
"message",
"normalized_need",
"normalized_trade",
"coverage",
"required_input",
"reason",
"trade_candidates",
"city_candidates"
],
"type": "object"
}
},
{
"description": "Trouve les profils RenooLab capables de couvrir plusieurs métiers confirmés autour d’une commune française. À utiliser dès qu’une même demande comporte au moins deux métiers distincts confirmés pour le même chantier et la même ville, par exemple une salle de bains nécessitant un plombier et un carreleur. Appeler rechercher_chantier une seule fois avec tous les métiers confirmés. Ne pas remplacer cet appel par plusieurs appels à rechercher_artisans. Ne recopiez jamais widget_previews ni les URL d’images dans la réponse : le widget les rend déjà.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"code_postal": {
"pattern": "^\\d{5}$",
"type": "string"
},
"departement": {
"pattern": "^(?:0[1-9]|1\\d|2[1-9]|[3-8]\\d|9[0-5]|2A|2B|\\d{3})$",
"type": "string"
},
"metiers_confirmes": {
"items": {
"maxLength": 80,
"minLength": 2,
"type": "string"
},
"maxItems": 17,
"minItems": 1,
"type": "array"
},
"tracking": {
"additionalProperties": false,
"properties": {
"channel": {
"enum": [
"direct",
"a2a"
],
"type": "string"
},
"client": {
"enum": [
"chatgpt",
"claude",
"gemini",
"copilot",
"other",
"unknown"
],
"type": "string"
},
"discovery": {
"enum": [
"first_party",
"manual",
"a2a_registry",
"a2a_cards",
"other",
"unknown"
],
"type": "string"
}
},
"type": "object"
},
"ville": {
"maxLength": 100,
"minLength": 2,
"type": "string"
}
},
"required": [
"ville",
"metiers_confirmes"
],
"type": "object"
},
"name": "rechercher_chantier",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"oneOf": [
{
"additionalProperties": false,
"properties": {
"alternatives_par_metier": {
"items": {
"additionalProperties": false,
"properties": {
"artisan": {
"additionalProperties": false,
"properties": {
"artisan": {
"additionalProperties": false,
"properties": {
"artisan_id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"avatar_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"contact_url": {
"format": "uri",
"type": "string"
},
"distance_km": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"medaille": {
"enum": [
"none",
"bronze",
"silver",
"gold"
],
"type": "string"
},
"metiers": {
"items": {
"type": "string"
},
"type": "array"
},
"nb_avis": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nb_photos": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nom": {
"type": "string"
},
"note": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"profile_url": {
"format": "uri",
"type": "string"
},
"verifie": {
"type": "boolean"
},
"ville": {
"type": "string"
}
},
"required": [
"artisan_id",
"nom",
"ville",
"metiers",
"note",
"nb_avis",
"distance_km",
"avatar_url",
"nb_photos",
"verifie",
"medaille",
"profile_url",
"contact_url"
],
"type": "object"
},
"coverage_basis": {
"enum": [
"declared",
"renovation_generale"
],
"type": "string"
},
"metiers_a_confirmer": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"type": "array"
},
"metiers_couverts": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 1,
"type": "array"
}
},
"required": [
"artisan",
"coverage_basis",
"metiers_couverts",
"metiers_a_confirmer"
],
"type": "object"
},
"metier": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
}
},
"required": [
"metier",
"artisan"
],
"type": "object"
},
"maxItems": 17,
"type": "array"
},
"avertissements": {
"items": {
"type": "string"
},
"maxItems": 4,
"type": "array"
},
"combinaison_recommandee": {
"items": {
"additionalProperties": false,
"properties": {
"artisan": {
"additionalProperties": false,
"properties": {
"artisan_id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"avatar_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"contact_url": {
"format": "uri",
"type": "string"
},
"distance_km": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"medaille": {
"enum": [
"none",
"bronze",
"silver",
"gold"
],
"type": "string"
},
"metiers": {
"items": {
"type": "string"
},
"type": "array"
},
"nb_avis": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nb_photos": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nom": {
"type": "string"
},
"note": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"profile_url": {
"format": "uri",
"type": "string"
},
"verifie": {
"type": "boolean"
},
"ville": {
"type": "string"
}
},
"required": [
"artisan_id",
"nom",
"ville",
"metiers",
"note",
"nb_avis",
"distance_km",
"avatar_url",
"nb_photos",
"verifie",
"medaille",
"profile_url",
"contact_url"
],
"type": "object"
},
"coverage_basis": {
"enum": [
"declared",
"renovation_generale"
],
"type": "string"
},
"metiers_a_confirmer": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"type": "array"
},
"metiers_couverts": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 1,
"type": "array"
}
},
"required": [
"artisan",
"coverage_basis",
"metiers_couverts",
"metiers_a_confirmer"
],
"type": "object"
},
"maxItems": 6,
"type": "array"
},
"coverage": {
"enum": [
"single_provider_explicit",
"single_provider_general",
"hybrid",
"minimal_combination",
"partial",
"none"
],
"type": "string"
},
"kind": {
"const": "chantier_results",
"type": "string"
},
"message": {
"type": "string"
},
"metiers_demandes": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 2,
"type": "array"
},
"metiers_non_couverts": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"type": "array"
},
"rayon_km": {
"anyOf": [
{
"const": 30,
"type": "number"
},
{
"const": 50,
"type": "number"
}
]
},
"solutions_completes": {
"items": {
"additionalProperties": false,
"properties": {
"artisan": {
"additionalProperties": false,
"properties": {
"artisan_id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"avatar_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"contact_url": {
"format": "uri",
"type": "string"
},
"distance_km": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"medaille": {
"enum": [
"none",
"bronze",
"silver",
"gold"
],
"type": "string"
},
"metiers": {
"items": {
"type": "string"
},
"type": "array"
},
"nb_avis": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nb_photos": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nom": {
"type": "string"
},
"note": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"profile_url": {
"format": "uri",
"type": "string"
},
"verifie": {
"type": "boolean"
},
"ville": {
"type": "string"
}
},
"required": [
"artisan_id",
"nom",
"ville",
"metiers",
"note",
"nb_avis",
"distance_km",
"avatar_url",
"nb_photos",
"verifie",
"medaille",
"profile_url",
"contact_url"
],
"type": "object"
},
"coverage_basis": {
"enum": [
"declared",
"renovation_generale"
],
"type": "string"
},
"metiers_a_confirmer": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"type": "array"
},
"metiers_couverts": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 1,
"type": "array"
}
},
"required": [
"artisan",
"coverage_basis",
"metiers_couverts",
"metiers_a_confirmer"
],
"type": "object"
},
"maxItems": 3,
"type": "array"
},
"ville": {
"type": "string"
},
"widget_previews": {
"additionalProperties": false,
"description": "Données publiques nettoyées pour le rendu du widget. Ne jamais les recopier dans la réponse texte.",
"properties": {
"artisan_previews": {
"additionalProperties": {
"additionalProperties": false,
"properties": {
"photos": {
"items": {
"additionalProperties": false,
"properties": {
"thumbnail_url": {
"anyOf": [
{
"format": "uri",
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"url",
"thumbnail_url"
],
"type": "object"
},
"maxItems": 3,
"type": "array"
}
},
"required": [
"photos"
],
"type": "object"
},
"propertyNames": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"type": "object"
},
"external_previews": {
"items": {
"additionalProperties": false,
"properties": {
"description": {
"anyOf": [
{
"maxLength": 180,
"minLength": 12,
"type": "string"
},
{
"type": "null"
}
]
},
"place_id": {
"pattern": "^[A-Za-z0-9_-]{3,512}$",
"type": "string"
},
"rating": {
"anyOf": [
{
"maximum": 5,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"place_id",
"description",
"rating"
],
"type": "object"
},
"maxItems": 5,
"type": "array"
}
},
"required": [
"artisan_previews",
"external_previews"
],
"type": "object"
}
},
"required": [
"kind",
"ville",
"metiers_demandes",
"rayon_km",
"coverage",
"solutions_completes",
"combinaison_recommandee",
"alternatives_par_metier",
"metiers_non_couverts",
"message",
"avertissements",
"widget_previews"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"city_candidates": {
"items": {
"additionalProperties": false,
"properties": {
"code_insee": {
"type": "string"
},
"codes_postaux": {
"items": {
"type": "string"
},
"type": "array"
},
"departement": {
"type": "string"
},
"population": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"ville": {
"type": "string"
}
},
"required": [
"ville",
"code_insee",
"departement",
"codes_postaux",
"population"
],
"type": "object"
},
"maxItems": 15,
"type": "array"
},
"kind": {
"const": "search_needs_input",
"type": "string"
},
"metiers_recus": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 2,
"type": "array"
},
"question": {
"type": "string"
},
"reason": {
"const": "ambiguous_city",
"type": "string"
},
"required_input": {
"const": "city_disambiguation",
"type": "string"
}
},
"required": [
"kind",
"required_input",
"metiers_recus",
"question",
"reason",
"city_candidates"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"kind": {
"const": "search_needs_input",
"type": "string"
},
"max_selections": {
"const": 6,
"type": "number"
},
"metiers_recus": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 7,
"type": "array"
},
"question": {
"type": "string"
},
"required_input": {
"const": "metiers_prioritaires",
"type": "string"
}
},
"required": [
"kind",
"required_input",
"question",
"metiers_recus",
"max_selections"
],
"type": "object"
}
],
"properties": {
"alternatives_par_metier": {
"items": {
"additionalProperties": false,
"properties": {
"artisan": {
"additionalProperties": false,
"properties": {
"artisan": {
"additionalProperties": false,
"properties": {
"artisan_id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"avatar_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"contact_url": {
"format": "uri",
"type": "string"
},
"distance_km": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"medaille": {
"enum": [
"none",
"bronze",
"silver",
"gold"
],
"type": "string"
},
"metiers": {
"items": {
"type": "string"
},
"type": "array"
},
"nb_avis": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nb_photos": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nom": {
"type": "string"
},
"note": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"profile_url": {
"format": "uri",
"type": "string"
},
"verifie": {
"type": "boolean"
},
"ville": {
"type": "string"
}
},
"required": [
"artisan_id",
"nom",
"ville",
"metiers",
"note",
"nb_avis",
"distance_km",
"avatar_url",
"nb_photos",
"verifie",
"medaille",
"profile_url",
"contact_url"
],
"type": "object"
},
"coverage_basis": {
"enum": [
"declared",
"renovation_generale"
],
"type": "string"
},
"metiers_a_confirmer": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"type": "array"
},
"metiers_couverts": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 1,
"type": "array"
}
},
"required": [
"artisan",
"coverage_basis",
"metiers_couverts",
"metiers_a_confirmer"
],
"type": "object"
},
"metier": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
}
},
"required": [
"metier",
"artisan"
],
"type": "object"
},
"maxItems": 17,
"type": "array"
},
"avertissements": {
"items": {
"type": "string"
},
"maxItems": 4,
"type": "array"
},
"city_candidates": {
"items": {
"additionalProperties": false,
"properties": {
"code_insee": {
"type": "string"
},
"codes_postaux": {
"items": {
"type": "string"
},
"type": "array"
},
"departement": {
"type": "string"
},
"population": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"ville": {
"type": "string"
}
},
"required": [
"ville",
"code_insee",
"departement",
"codes_postaux",
"population"
],
"type": "object"
},
"maxItems": 15,
"type": "array"
},
"combinaison_recommandee": {
"items": {
"additionalProperties": false,
"properties": {
"artisan": {
"additionalProperties": false,
"properties": {
"artisan_id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"avatar_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"contact_url": {
"format": "uri",
"type": "string"
},
"distance_km": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"medaille": {
"enum": [
"none",
"bronze",
"silver",
"gold"
],
"type": "string"
},
"metiers": {
"items": {
"type": "string"
},
"type": "array"
},
"nb_avis": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nb_photos": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nom": {
"type": "string"
},
"note": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"profile_url": {
"format": "uri",
"type": "string"
},
"verifie": {
"type": "boolean"
},
"ville": {
"type": "string"
}
},
"required": [
"artisan_id",
"nom",
"ville",
"metiers",
"note",
"nb_avis",
"distance_km",
"avatar_url",
"nb_photos",
"verifie",
"medaille",
"profile_url",
"contact_url"
],
"type": "object"
},
"coverage_basis": {
"enum": [
"declared",
"renovation_generale"
],
"type": "string"
},
"metiers_a_confirmer": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"type": "array"
},
"metiers_couverts": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 1,
"type": "array"
}
},
"required": [
"artisan",
"coverage_basis",
"metiers_couverts",
"metiers_a_confirmer"
],
"type": "object"
},
"maxItems": 6,
"type": "array"
},
"coverage": {
"enum": [
"single_provider_explicit",
"single_provider_general",
"hybrid",
"minimal_combination",
"partial",
"none"
],
"type": "string"
},
"kind": {
"enum": [
"chantier_results",
"search_needs_input"
],
"type": "string"
},
"max_selections": {
"const": 6,
"type": "number"
},
"message": {
"type": "string"
},
"metiers_demandes": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 2,
"type": "array"
},
"metiers_non_couverts": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"type": "array"
},
"metiers_recus": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 2,
"type": "array"
},
"question": {
"type": "string"
},
"rayon_km": {
"anyOf": [
{
"const": 30,
"type": "number"
},
{
"const": 50,
"type": "number"
}
]
},
"reason": {
"const": "ambiguous_city",
"type": "string"
},
"required_input": {
"enum": [
"city_disambiguation",
"metiers_prioritaires"
],
"type": "string"
},
"solutions_completes": {
"items": {
"additionalProperties": false,
"properties": {
"artisan": {
"additionalProperties": false,
"properties": {
"artisan_id": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"avatar_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"contact_url": {
"format": "uri",
"type": "string"
},
"distance_km": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
},
"medaille": {
"enum": [
"none",
"bronze",
"silver",
"gold"
],
"type": "string"
},
"metiers": {
"items": {
"type": "string"
},
"type": "array"
},
"nb_avis": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nb_photos": {
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"nom": {
"type": "string"
},
"note": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"profile_url": {
"format": "uri",
"type": "string"
},
"verifie": {
"type": "boolean"
},
"ville": {
"type": "string"
}
},
"required": [
"artisan_id",
"nom",
"ville",
"metiers",
"note",
"nb_avis",
"distance_km",
"avatar_url",
"nb_photos",
"verifie",
"medaille",
"profile_url",
"contact_url"
],
"type": "object"
},
"coverage_basis": {
"enum": [
"declared",
"renovation_generale"
],
"type": "string"
},
"metiers_a_confirmer": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"type": "array"
},
"metiers_couverts": {
"items": {
"enum": [
"Plomberie",
"Électricité",
"Maçonnerie",
"Carrelage",
"Peinture",
"Plâtrerie/Plaquiste",
"Isolation",
"Menuiserie",
"Parquet",
"Charpente",
"Couverture/Toiture",
"Chauffage/Climatisation",
"Serrurerie",
"Paysagiste",
"Pisciniste",
"Décoration d'intérieur",
"Nettoyage"
],
"type": "string"
},
"maxItems": 17,
"minItems": 1,
"type": "array"
}
},
"required": [
"artisan",
"coverage_basis",
"metiers_couverts",
"metiers_a_confirmer"
],
"type": "object"
},
"maxItems": 3,
"type": "array"
},
"ville": {
"type": "string"
},
"widget_previews": {
"additionalProperties": false,
"description": "Données publiques nettoyées pour le rendu du widget. Ne jamais les recopier dans la réponse texte.",
"properties": {
"artisan_previews": {
"additionalProperties": {
"additionalProperties": false,
"properties": {
"photos": {
"items": {
"additionalProperties": false,
"properties": {
"thumbnail_url": {
"anyOf": [
{
"format": "uri",
"maxLength": 2048,
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"url",
"thumbnail_url"
],
"type": "object"
},
"maxItems": 3,
"type": "array"
}
},
"required": [
"photos"
],
"type": "object"
},
"propertyNames": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"type": "object"
},
"external_previews": {
"items": {
"additionalProperties": false,
"properties": {
"description": {
"anyOf": [
{
"maxLength": 180,
"minLength": 12,
"type": "string"
},
{
"type": "null"
}
]
},
"place_id": {
"pattern": "^[A-Za-z0-9_-]{3,512}$",
"type": "string"
},
"rating": {
"anyOf": [
{
"maximum": 5,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"place_id",
"description",
"rating"
],
"type": "object"
},
"maxItems": 5,
"type": "array"
}
},
"required": [
"artisan_previews",
"external_previews"
],
"type": "object"
}
},
"required": [
"kind"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:c56eef2d05753c82172eb7555e84fb536ea73de8b1ba7a9b7216544802dba3c4 | sha256sum