openapi: 3.0.0 info: title: 'API macarte' version: '1.0' servers: - url: 'https://macarte.ign.fr/' description: 'Accède aux données de l''environnement Ma Carte' paths: /api/editorial/followers: get: tags: - Editorial operationId: e381179d562ca09a83d431b1dcfe77a5 responses: '200': description: 'Liste des followers par réseau social' content: application/json: schema: properties: facebook: { type: string, example: 65K } twitter: { type: string, example: 13K } linkedin: { type: string, example: 24K } instagram: { type: string, example: 11K } type: object '404': $ref: '#/components/responses/NotFound' /api/editorial/megamenu: get: tags: - Editorial operationId: 4e6c574f04b8d8c4c2b65b6f58a53249 responses: '200': description: 'Contenu html du megamenu' content: application/json: schema: properties: html: { type: string } type: object '404': $ref: '#/components/responses/NotFound' /api/editorial/categories: get: tags: - Editorial operationId: af1658725bcb2cebfbe9be68d7609c7e responses: '200': description: 'Liste des categories des articles de l''editorial' content: application/json: schema: type: array items: properties: { key: { description: 'clé de la catégorie', type: string }, value: { description: 'Nomde la catégorie', type: string } } type: object '/api/editorial/articles/{category}': get: tags: - Editorial operationId: ba7f19a2655d46d5a131b6249ed0716b parameters: - name: category in: path required: true schema: type: string responses: '200': description: 'Liste des articles de la categorie' content: application/json: schema: type: array items: $ref: '#/components/schemas/Article' '404': $ref: '#/components/responses/NotFound' /api/maps: get: tags: - Map operationId: c4ff2a05ff281b173a58be5296bc229b parameters: - name: context in: query description: "Contexte de la recherche. Doit être parmi :
\r\n - 'atlas' : recherche publique parmi les cartes partagées
\r\n - 'organization' : recherche des cartes publiques & atlas de l'organisation\r\n - 'profile' : recherche parmi les carte de l'utilisateur. Il doit être connecté (erreur 401 possible),
\r\n
\r\n Une carte partagée est une carte
\r\n - ayant un thème
\r\n - avec les attribut share = 'atlas', valid = true et active = true
\r\n
\r\n **Ajouter le header 'Authorization: Bearer xxx' pour le cas 'profile'** pour ne pas avoir les erreurs 401 et 403\r\n * " required: false schema: type: string default: atlas - name: query in: query description: "Un ou plusieurs mots que doivent contenir le titre, la description ou le thème
\r\n S'il y a plusieurs mots, la recherche l'interprètera comme un ET \r\n " required: false schema: type: string - name: theme in: query description: "Thème des cartes
\r\n - nom du thème
\r\n - 'undefined' pour avoir les cartes qui n'ont pas de thème
\r\n - null pour avoir toutes les cartes, indépendemment du thème\r\n " required: false schema: type: string - name: type in: query description: 'Type des cartes (''macarte'', ''storymap'')' required: false schema: type: string - name: premium in: query description: 'Premium des cartes (''default'', ''edugeo'')' required: false schema: type: string - name: organization in: query description: 'Identifiant public de l''organisation' required: false schema: type: string - name: user in: query description: 'Nom public du créateur des cartes' required: false schema: type: string - name: active in: query description: "Si context 'profile' et si renseigné, n'inclut que les cartes actives (true) ou non-actives (false)
\r\n Si context 'atlas', active = true\r\n " required: false schema: type: boolean - name: valid in: query description: "Si context 'profile' et si renseigné, n'inclut que les cartes valides (true) ou invalides (false)
\r\n Si context 'atlas', valid = true\r\n " required: false schema: type: boolean - name: share in: query description: "Si context 'profile' et si renseigné, n'inclut que les cartes publiques ('atlas') ou privées ('private') de l'utilisateur
\r\n Si context 'atlas', share = 'atlas' \r\n " required: false schema: type: string - name: sort in: query description: 'Tri des cartes (''date'', ''rank'', ''views'')' required: false schema: type: string default: date - name: limit in: query description: "Nombre maximum de cartes à retourner
\r\n - Limit peut être 'all' dans le context 'profile' -> l'utilisateur reçoit toutes ses cartes
\r\n - Si limit > 100, limit sera considérée comme 100\r\n " required: false schema: oneOf: - type: integer - type: string default: 25 - $ref: '#/components/parameters/offset' responses: '200': description: 'Liste des cartes (tout ou partie), recherchées selon les critères définis dans le query' content: application/json: schema: $ref: '#/components/schemas/Map_research' '206': $ref: '#/components/responses/PartialContent' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' post: tags: - Map operationId: b595620ac876211c6c59378b38586211 requestBody: required: true content: multipart/form-data: schema: type: object required: - carte - file properties: carte: $ref: '#/components/schemas/Map_add' file: description: 'Contenu de la carte au format .carte' type: string format: binary responses: '201': description: 'Attributs de la carte créée' content: application/json: schema: $ref: '#/components/schemas/Map_view' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/NotConnected' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] /api/maps/users: get: tags: - Map description: 'Autocompletion des utilisateurs ayant des cartes publiques correspondant aux critères de recherche' operationId: f0b6ce4c22abfe03685aca5d9a988171 parameters: - name: theme in: query description: 'Thème des cartes (nom du thème ou ''Non défini'')' required: false schema: type: string - name: public_name in: query description: 'string que le public_name des utilisateurs doit inclure' required: false schema: type: string - name: query in: query description: "Un ou plusieurs mots que doivent contenir le titre, la description ou le thème
\r\n S'il y a plusieurs mots, la recherche l'interprètera comme un ET \r\n " required: false schema: type: string - $ref: '#/components/parameters/limit' responses: '200': description: 'Liste des noms publics des utilisateurs correspondant aux critères de recherche' content: application/json: schema: type: array items: type: string '404': $ref: '#/components/responses/NotFound' '/api/maps/{view_id}': get: tags: - Map description: 'Récupérer les metadata de la carte par son identifiant de visualisation' operationId: c630af6fb2328c095e448d8dc2047863 parameters: - $ref: '#/components/parameters/view_id' responses: '200': description: 'Attributs d''une carte pour visualisation' content: application/json: schema: $ref: '#/components/schemas/Map_view' '404': $ref: '#/components/responses/NotFound' '451': $ref: '#/components/responses/Invalid' '/api/maps/{edit_id}/edit': get: tags: - Map description: 'Récupérer les metadata de la carte par son identifiant d''édition''' operationId: 94d15b1ae702b68adc0cd20f6ba5c367 parameters: - $ref: '#/components/parameters/edit_id' responses: '200': description: 'Attributs d''une carte pour edition' content: application/json: schema: $ref: '#/components/schemas/Map_view' '404': $ref: '#/components/responses/NotFound' '451': $ref: '#/components/responses/Invalid' security: - bearer: [] '/api/maps/{view_id}/file': get: tags: - Map description: 'Récupérer les data de la carte par son identifiant de visualisation' operationId: 9acb5b0b0481181f5182e1da773e35f8 parameters: - $ref: '#/components/parameters/view_id' responses: '200': description: 'Contenu d''une carte' content: application/json: schema: { } '404': $ref: '#/components/responses/NotFound' '451': $ref: '#/components/responses/Invalid' '/api/maps/{edit_id}/edit/file': get: tags: - Map description: 'Récupérer les data de la carte par son identifiant d''édition' operationId: 4dd4ded69eecb0459bd3ffbb207e51f9 parameters: - $ref: '#/components/parameters/edit_id' responses: '200': description: 'Contenu d''une carte' content: application/json: schema: { } '404': $ref: '#/components/responses/NotFound' '451': $ref: '#/components/responses/Invalid' security: - bearer: [] '/api/maps/{edit_id}': delete: tags: - Map operationId: 82e0c67a87ca511a4033db315ab3ea3a parameters: - $ref: '#/components/parameters/edit_id' responses: '204': $ref: '#/components/responses/Deleted' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] patch: tags: - Map operationId: 84bf99e8098969acdf597e6fb94ba5cd parameters: - $ref: '#/components/parameters/edit_id' requestBody: description: "Attributs de la carte, ne renseigner que les champs à modifier
\r\n__new_edit_id__ : boolean, si true -> génère un nouvel identifiant de modifiant pour la carte\r\n" required: true content: application/json: schema: type: object allOf: - properties: { new_edit_id: { description: 'Demande à modifier l''id de modification', type: boolean } } - $ref: '#/components/schemas/Map_add' responses: '200': description: 'Attributs d''une carte pour visualisation' content: application/json: schema: $ref: '#/components/schemas/Map_view' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] '/api/maps/{edit_id}/file': post: tags: - Map operationId: 53d51572f2cc58bd239071366c0bcf04 parameters: - $ref: '#/components/parameters/edit_id' requestBody: required: true content: multipart/form-data: schema: type: object required: - file properties: file: description: 'Contenu de la carte au format .carte' type: string format: binary responses: '200': description: 'Contenu d''une carte' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] /api/me: get: tags: - User operationId: 8c325367503eebff893de1e9a05f2efd responses: '200': description: 'Attributs de l''utilisateur connecté' content: application/json: schema: $ref: '#/components/schemas/User_view' '401': $ref: '#/components/responses/NotConnected' security: - bearer: [] delete: tags: - User description: 'Supprime en douceur (https://phpreaction.com/support/suppression-en-douceur-soft-delete/) le compte de l''utilisateur connecté' operationId: b54f31aadea6dbd3bfdc2d781f0285f7 responses: '206': description: 'L''utilisateur a été supprimé' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '451': $ref: '#/components/responses/Invalid' security: - bearer: [] patch: tags: - User description: "parameter **current_password** is required to patch username, email and new_password
\r\n username, email et public_name sont uniques, la réponse 400 '... already used' peut être renvoyée\r\n " operationId: 565897838a26198f5f59e59240e4e354 requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/User_me_edit' responses: '200': description: 'Attributs de l''utilisateur' content: application/json: schema: $ref: '#/components/schemas/User_view' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/NotConnected' security: - bearer: [] /api/medias: get: tags: - Media description: 'Renvoie les medias de l''utilisateur connecté' operationId: ad8d1482d4c232853562cc69715b3406 parameters: - name: name in: query description: 'Name contient cette valeur' required: false schema: type: string - name: id in: query description: 'Identifiant du média recherché' required: false schema: type: integer - name: organization_id in: query description: 'Identifiant public de l''organisation, renvoie la liste de ses médias' required: false schema: type: integer - name: valid in: query description: 'Si ''true'', limite la recherche aux médias invalidés par les administrateurs' required: false schema: type: boolean - name: sort in: query description: 'tri des medias, parmi [''size'', ''date'']' required: false schema: type: boolean default: date - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/limit' responses: '200': description: 'liste des medias' content: application/json: schema: type: array items: $ref: '#/components/schemas/Media_list' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' security: - bearer: [] post: tags: - Media description: 'Ajoute un media à l''utilisateur connecté ou à l''organisation d''identifiant organization_id si renseigné' operationId: 84f1cf5ebf6e0098692204c5b1535a69 requestBody: required: true content: multipart/form-data: schema: type: object required: - file properties: file: description: 'image à ajouter à la bibliothèque, le fichier doit faire moins de 2 Mo' type: string format: binary folder: description: 'Dossier où ajouter l''image' type: string default: 'Non classé' name: description: 'Nom du fichier' type: string default: 'original_name du fichier' organization_id: description: 'Id de l''organization' type: string nullable: true responses: '201': description: 'Attributs du media créé' content: application/json: schema: $ref: '#/components/schemas/Media' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '413': $ref: '#/components/responses/TooLarge' security: - bearer: [] /api/medias/folders: get: tags: - Media description: 'Renvoie dossiers d''images de l''utilsiateur' operationId: 304e59ced3951258230a472ffd5dce67 parameters: - name: organization_id in: query description: 'Identifiant public de l''organisation. Si renseigné, renvoie les folders de l''organisation, pas de l''utilisateur connecté' required: false schema: type: string nullable: true responses: '200': description: 'liste des dossiers d''images' content: application/json: schema: type: array items: type: string '401': $ref: '#/components/responses/NotConnected' security: - bearer: [] '/api/image/{filename}': get: tags: - Media description: "Renvoie l'image au format binaire, l'extension n'est pas prise en compte (ex : abc1234)
\r\n Préfixer le filename par 'thumb_' pour recevoir la miniature (200px sur la plus grande dimension)\r\n * " operationId: dd8a3ed18a1155118437711141cae8d0 parameters: - name: filename in: path description: 'Nom du fichier' required: true schema: type: string responses: '200': description: 'Fichier binaire de l''image' '404': $ref: '#/components/responses/NotFound' '451': $ref: '#/components/responses/Invalid' '/api/medias/{id}': delete: tags: - Media description: 'Supprime un media de l''utilisateur connecté. Un média non valide ne peut pas être supprimé' operationId: 4b41607ef624888f7b6c73d336305dd2 parameters: - $ref: '#/components/parameters/id' responses: '204': $ref: '#/components/responses/Deleted' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '451': $ref: '#/components/responses/Invalid' security: - bearer: [] '/api/medias/{id}/{attribute}': put: tags: - Media description: 'Affecte value à l''attribut du media d''identifiant id (attibute dans [''folder'', ''name''])' operationId: e720e84e3346ca80cd4440ee0b9d92d5 parameters: - $ref: '#/components/parameters/id' - name: attribute in: path required: true description: 'Attribut à modifier : doit etre parmi [''folder'', ''name'']' schema: type: string requestBody: required: true content: application/json: schema: properties: value: description: 'valeur à affecter à l''attribut [folder => peut être null]' type: string type: object responses: '200': description: 'Attributs de la carte créée' content: application/json: schema: properties: id: { description: 'identifiant du média modifié', type: integer } attribute: { description: 'attribut modifié', type: string } value: { description: 'nouvelle valeur affectée à l''attribut', type: string } type: object '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] '/api/medias/{id}/file': post: tags: - Media description: 'Modifie l''image'' associé au media' operationId: 78eaac378845f25d55178a6d1c0a6444 parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: multipart/form-data: schema: type: object required: - file properties: file: description: 'image à associer à la bibliothèque, le fichier doit faire moins de 2 Mo' type: string format: binary responses: '200': description: 'Attributs de la carte créée' content: application/json: schema: properties: id: { description: 'identifiant du média modifié', type: integer } attribute: { description: 'attribut modifié', type: string } view_url: { description: 'url de l''image', type: string } thumb_url: { description: 'url de la vignette', type: string } type: object '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '413': $ref: '#/components/responses/TooLarge' security: - bearer: [] /api/notifications: get: tags: - Notifications operationId: 2d60b1d5b4693aeaf17b94d78551cf59 responses: '200': description: 'Liste des notifications actives' content: application/json: schema: type: array items: $ref: '#/components/schemas/Notification' /api/organizations/roles: get: tags: - Organization operationId: cb0d3f196cc0b438561ea9d551ca5be6 responses: '200': description: 'Liste des roles' content: application/json: schema: type: array items: properties: { key: { description: 'clé du role', type: string }, value: { description: 'Nom du role', type: string } } type: object /api/organizations/me: get: tags: - Organization operationId: 2e397bb0528aa8985381592fc2d6d31f responses: '200': description: 'Liste des organisation dont l''utilisateur est membre' content: application/json: schema: type: array items: properties: { public_id: { description: 'identifiant de l''organisation', type: string }, name: { description: 'Nom de l''organisation''', type: string }, profile_picture: { description: 'Logo de l''organisation''', type: string }, cover_picture: { description: 'Image de couverture''', type: string }, user_role: { description: 'Role de l''utilisateur dans l''organisation', type: string }, active: { description: 'l''utilisateur est actif dans l''organisation', type: string } } type: object '401': $ref: '#/components/responses/NotConnected' security: - bearer: [] '/api/organizations/{id}/activate': get: tags: - Organization description: 'active l''utilisateur invité dans l''organisation' operationId: 668e63ab966bc36bc8b1a7aacae9baeb parameters: - $ref: '#/components/parameters/id' responses: '200': description: 'Attributs de l''organisation' content: application/json: schema: $ref: '#/components/schemas/Organization' '401': $ref: '#/components/responses/NotConnected' '400': $ref: '#/components/responses/BadRequest' security: - bearer: [] '/api/organizations/{id}': get: tags: - Organization description: 'Récupérer les données de l''organisation d''identifiant id. NB: si pas membre de l''organisation, seul un décompte des membres est fourni.' operationId: af805f0f2477ccd72a56270884019c1d parameters: - $ref: '#/components/parameters/id' responses: '200': description: 'Attributs de l''organisation, les membres ne sont renvoyés que si l''utilisateur connecté fait partie de l''organisation' content: application/json: schema: $ref: '#/components/schemas/Organization' '404': $ref: '#/components/responses/NotFound' delete: tags: - Organization description: 'Supprime l''organisation d''identifiant id' operationId: e2c96609ab7a573b38829546d1743d88 parameters: - $ref: '#/components/parameters/id' responses: '204': $ref: '#/components/responses/Deleted' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] /api/organizations: post: tags: - Organization description: 'Créer une organisation - L''utilisateur connecté devient un propriétaire' operationId: 74164414cc6d7e5558580d8cc1a6809f requestBody: required: true content: application/json: schema: type: object required: - name properties: name: description: 'Nom de l''organisation (obligatoire)' type: string presentation: description: 'Présentation de l''organisation' type: string nullable: true profile_picture: description: 'Image / logo de l''organisation' type: string format: uri nullable: true cover_picture: description: 'Image de couverture' type: string format: uri nullable: true responses: '201': description: 'Attributs de l''organisation' content: application/json: schema: $ref: '#/components/schemas/Organization' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' security: - bearer: [] '/api/organizations/{id}/{attribute}': put: tags: - Organization description: 'Affecte value à l''attribut de l''organisation d''identifiant public_id' operationId: dab0a2d735cbfe58642171b822c1ec9f parameters: - $ref: '#/components/parameters/id' - in: path name: attribute required: true description: 'Attribut à modifier : doit etre parmi [''name'', ''presentation'', ''profile_picture'', ''cover_picture'', ''mail_pattern'']' schema: type: string requestBody: required: true content: application/json: schema: properties: value: description: 'valeur à affecter à l''attribut [name => non null]' type: string type: object responses: '200': description: 'L''organisation a été modifiée' content: application/json: schema: properties: id: { description: 'identifiant de l''organisation modifiée', type: integer } attribute: { description: 'attribut modifié', type: string } value: { description: 'nouvelle valeur affectée à l''attribut', type: string } type: object '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] '/api/organizations/{id}/join-link/{role}': put: tags: - Organization description: 'Modifie le lien d''accès à l''organization' operationId: e304397b1ffc6385faee8f0fac5b24ee parameters: - $ref: '#/components/parameters/id' - name: role in: path description: 'role que donne le lien, parmi [''member'', ''editor'']' schema: type: string required: true requestBody: required: true content: application/json: schema: properties: value: description: 'true : crée le lien, false : supprime le lien' type: boolean type: object responses: '200': description: 'clé/ nouvelle valeur de l''attribut modifié' content: application/json: schema: properties: id: { description: 'identifiant de l''organisation modifiée', type: integer } attribute: { description: 'attribut modifié', type: string } value: { description: 'nouvelle valeur affectée à l''attribut', type: string } type: object '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] '/api/organizations/join/{id}': put: tags: - Organization description: 'l''utilisateur s''ajoute à l''organisation d''identifiant avec le jeton id' operationId: a30a6cd44f6650a4a5fb09617e571476 parameters: - $ref: '#/components/parameters/id' - name: role in: query schema: type: string description: 'role que donne le lien, parmi [''member'', ''editor'']' required: true responses: '200': description: 'Attributs de l''organisation' content: application/json: schema: $ref: '#/components/schemas/Organization' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] '/api/organizations/{id}/members/{userId}': post: tags: - Organization description: 'Ajoute un membre à l''organisation d''identifiant public_id''' operationId: 04215fecd7c564d98cb9585712f5c193 parameters: - $ref: '#/components/parameters/id' - name: userId in: path description: 'Identifiant (public_id) de l''utilisateur''' required: true schema: type: string requestBody: required: true content: application/json: schema: properties: role: description: 'role de l''utilisateur, required, parmi [''member'', ''editor'', ''owner'']' type: string type: object responses: '200': description: 'Description du role de l''utilisateur' content: application/json: schema: type: array items: properties: { organization_id: { description: 'Identifiant public de l''organisation', type: string }, user_id: { description: 'Identifiant public de l''utilisateur', type: string }, user_public_name: { description: 'Nom public de l''utilisateur', type: string }, user_role: { description: 'Role de l''utilisateur dans l''organisation', type: string }, email_sent: { description: 'si false, l''opération a été effectuée, mais le mail d''information à l''utilisateur n''a pas été envoyé', type: boolean } } type: object '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] delete: tags: - Organization description: "Enlève l'utilisateur d'identifiant public_id de l'organisation d'identifiant 'public_id'
\r\nUn utilisateur peut s'enlever lui-même, sinon un owner doit faire cette action" operationId: f81d2f5db9e756431392f0b30c472de4 parameters: - $ref: '#/components/parameters/id' - name: userId in: path description: 'Identifiant (public_id) de l''utilisateur''' required: true schema: type: string responses: '204': $ref: '#/components/responses/Deleted' '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] '/api/organizations/{id}/members/{userId}/role': put: tags: - Organization description: 'Ajoute un membre à l''organisation d''identifiant public_id''' operationId: d939b109a3c0fa2e900bdd8cdce65775 parameters: - $ref: '#/components/parameters/id' - name: userId in: path description: 'Identifiant (public_id) de l''utilisateur' required: true schema: type: string requestBody: required: true content: application/json: schema: properties: value: description: 'role de l''utilisateur, required, parmi [''member'', ''editor'', ''owner'']' type: string type: object responses: '200': description: 'Description du role de l''utilisateur' content: application/json: schema: type: array items: properties: { organization_id: { description: 'Identifiant public de l''organisation', type: string }, user_id: { description: 'Identifiant public de l''utilisateur', type: string }, user_public_name: { description: 'Nom public de l''utilisateur', type: string }, user_role: { description: 'Role de l''utilisateur dans l''organisation', type: string }, email_sent: { description: 'si false, l''opération a été effectuée, mais le mail d''information à l''utilisateur n''a pas été envoyé', type: boolean } } type: object '401': $ref: '#/components/responses/NotConnected' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' security: - bearer: [] /api/login: post: tags: - Login operationId: c19de2fbeb914a1eb095ea4bc8242d9b parameters: - name: username in: query required: true schema: type: string - name: password in: query required: true schema: type: string responses: '200': description: 'Jeton Jwt et rafraichissement' content: application/json: schema: $ref: '#/components/schemas/Login' '401': description: 'Erreur dans le nom d''utilisateur ou le mot de passe' content: application/json: schema: properties: code: { type: integer, example: '401' } message: { type: string, example: 'Bad credentials' } type: object '429': description: 'Trop de tentatives de connexion échouées' content: application/json: schema: properties: code: { type: integer, example: '429' } message: { type: string, example: '5 tentatives de connexion échouées, allez sur /debloquer-mon-compte' } type: object /api/token/refresh: post: tags: - Login operationId: 26a9d1dfbaf768f672b4d0eba7d2a663 parameters: - name: refresh_token in: query required: true schema: type: string responses: '200': description: 'Jeton JWT et refresh' content: application/json: schema: $ref: '#/components/schemas/Login' '401': description: 'An authentication exception occurred' content: application/json: schema: properties: code: { type: integer, example: '401' } message: { type: string, example: 'An authentication exception occurred' } type: object /api/logout: post: tags: - Login operationId: 17cd40d6062e1990f0e90edddd985c80 responses: '200': description: logout '401': $ref: '#/components/responses/NotConnected' security: - bearer: [] /api/themes: get: tags: - Theme operationId: 9f56cc21f7235a53c93cde1879c1983b responses: '200': description: 'Liste des themes' content: application/json: schema: type: array items: $ref: '#/components/schemas/Theme' '/api/users/public/{public_id}': get: tags: - User parameters: - name: public_id in: path description: 'Identifiant public (immuable) de l''utilisateur' required: true schema: type: string responses: '200': description: 'Attributs publics de l''utilisateur' content: application/json: schema: $ref: '#/components/schemas/User_public' '404': $ref: '#/components/responses/NotFound' /api/users/: get: tags: - User description: 'Recherche d''utilisateurs par autocompletion' operationId: 7c16c3c1191fbdcc598daed5e58f747a parameters: - name: query in: query description: 'public_name contient query' required: true schema: type: string responses: '200': description: 'Attributs publics de l''utilisateur' content: application/json: schema: properties: public_name: { type: string, example: my_public_name } public_id: { type: string, example: 1aBc } profile_picture: { type: string, format: uri } type: object '400': $ref: '#/components/responses/BadRequest' components: schemas: Article: properties: id: description: 'Identifiant de l''article' type: integer category: description: 'Categorie de l''article' type: string position: description: 'Ordre d''affichage de l''article' type: number title: description: 'Titre de l''article' type: string content: description: 'Contenu de l''article' type: string tags: description: 'Tags de l''article' type: array items: type: string updated_at: description: 'Date de mise à jour de l''article' type: string format: date-time updated_by: description: 'Nom public de l''utilisateur qui a modifié l''article' type: string img_url: description: 'Url de l''image d''illustration de l''article' type: string format: uri link_text: description: 'Article de la catégorie news : texte du lien' type: string link_url: description: 'Article de la catégorie news : destination du lien' type: string format: uri type: object Bbox: description: 'Emprise visible de la carte (Haut, droite, bas, gauche)' type: array items: type: number maxItems: 4 minItems: 4 Map_add: description: Carte properties: title: description: 'Titre de la carte' type: string description: description: 'Description de la carte' type: string nullable: true theme_id: description: 'identifiant du theme' type: integer type: description: 'Type de la carte (''macarte'', ''mesadresses'', statistic'', storymap'')' type: string premium: description: 'Premium de la carte (''default'', ''edugeo'')' type: string default: default organization_id: description: 'Identifiant public de l''organisation.' type: string nullable: true default: 'null' active: description: 'Carte active (par ex : terminée ou non)' type: boolean share: description: "Publication de la carte ('atlas', 'public', 'private').
\r\nSi une 'organization' est rempli, la valeur sera 'private' sauf si l'utilisateur connecté est owner" type: string default: private bbox: $ref: '#/components/schemas/Bbox' img_url: description: 'Url de l''image illustrant la carte' type: string nullable: true format: uri creator_id: description: 'Identifiant public du créateur (si la carte est dans une organisation)' type: string type: object Map_list: description: Carte properties: title: type: string title_url: description: 'Titre de la carte, adapté pour etre utilisé dans les url' type: string description: type: string nullable: true theme: type: string nullable: true theme_id: type: integer nullable: true organization_id: description: 'identifiant de l''organisation' type: string organization_name: description: 'Nom de l''organisation' type: string type: type: string premium: type: string created_at: type: string format: date-time updated_at: type: string format: date-time nb_view: type: integer img_url: type: string format: uri nullable: true share: type: string bbox: $ref: '#/components/schemas/Bbox' view_id: type: string view_url: description: 'lien vers la visualisation de la carte' type: string edit_id: description: 'si auteur de la carte' type: string author: type: string type: object Map_view: description: Carte type: object allOf: - properties: data_url: description: 'lien vers le contenu de la carte' type: string format: uri data_edit_url: description: 'lien vers l''édition du contenu de la carte, si auteur de la carte' type: string format: uri editor: description: 'utilisateur qui a modifié le contenu, renvoyé si auteur de la carte' type: string creator_id: description: 'identifiant de l''utilisateur qui a créé le contenu, renvoyé si auteur de la carte' type: string - $ref: '#/components/schemas/Map_list' Media: description: media properties: id: description: 'identifiant du media' type: integer name: description: 'nom de l''image originale' type: string file: description: 'nom du fichier enregistré' type: string owner: description: 'username de l''utilisateur qui a chargé le media' type: string organization_id: description: 'id de l''organisation à qui appartient le media' type: string organization: description: 'nom de l''organisation à qui appartient le media' type: string uploaded_at: description: 'date du chargement de l''image' type: string format: date-time size: description: 'Taille de l''image (en octet)' type: integer folder: description: 'Nom du fichier contenant le media' type: string valid: description: 'Validité de l''image' type: boolean view_url: description: 'Url de l''image' type: string format: uri thumb_url: description: 'Url de la vignette de l''image' type: string format: uri type: object Media_list: description: 'Liste de médias' properties: medias: type: array items: $ref: '#/components/schemas/Media' count: description: 'Nombre de cartes correspondant à la recherche' type: integer limit: description: 'Nombre de cartes recues dans la requete' type: integer offset: description: 'Nombre de cartes à passer avant de ls inclure dans la requete' type: integer type: object Notification: description: Notifications properties: id: type: integer description: type: string scope: description: 'Applicatifs où afficher la notification' type: string showFrom: type: string format: date-time showUntil: type: string format: date-time repeatibility: description: 'Nombre de fois à afficher la notification' type: integer type: object Organization: properties: public_id: description: 'Identifiant de l''organisation' type: string name: description: 'Nom de l''organisation' type: string presentation: description: 'Présentation / Description de l''organisation' type: string nullable: true profile_picture: description: 'URL de l''image / logo de l''organisation' type: string nullable: true format: uri cover_picture: description: 'URL de l''image / logo de couverture de l''organisation' type: string nullable: true format: uri created_at: description: 'Date de création de l''organisation' type: string format: date-time updated_at: description: 'Date de modification de l''organisation' type: string format: date-time premium: description: 'Premium l''organisation parmi [null, ''edugeo'']' type: string nullable: true nb_members: description: 'Nombre de membres dans l''organisation' type: integer nb_shared_maps: description: 'Nombre de cartes de l''organisation partagées dans l''atlas' type: integer nb_views: description: 'Nombre de vues sur l''ensemble des cartes de l''organisation' type: integer locked: description: 'L''organisation est bloquée par un admin' type: boolean media_size_limit: description: 'Taille globale autorisée pour les images de l''organisation (en octets)' type: integer medias_size: description: 'Taille globale des images de l''organisation (en octets)' type: integer members: description: 'Membres de l''organisation' type: array items: properties: public_name: description: 'Nom public de l''utilisateur' type: string public_id: description: 'Identifiant public de l''utilisateur' type: string registered_at: description: 'Date où l''utilisateur a été ajouté' type: string format: date-time role: description: 'Role de l''utilisateur dans l''organisation (''member''|''editor''|''owner'')' type: string promoted_at: description: 'Date où l''utilisateur a été promu' type: string format: date-time active: description: 'L''utilisateur est actif dans l''organisation' type: boolean profile_picture: description: 'Url de l''image de profil' type: string format: uri type: object type: object Map_research: description: 'Recherche des cartes' properties: maps: type: array items: $ref: '#/components/schemas/Map_list' themes: type: array items: $ref: '#/components/schemas/Theme' users: type: array items: properties: user: description: 'Nom public de l''utilisateur' type: string count: description: 'Nombre de cartes' type: integer type: object types: type: array items: properties: type: description: 'Nom du type' type: string count: description: 'Nombre de cartes' type: integer type: object premiums: type: array items: properties: premium: description: 'Nom du premium' type: string count: description: 'Nombre de cartes' type: integer type: object actives: type: array items: properties: active: description: 'booléen indiquant active/inactive' type: boolean count: description: 'Nombre de cartes' type: integer type: object valides: type: array items: properties: valid: description: 'booléen indiquant valide/invalide' type: boolean count: description: 'Nombre de cartes' type: integer type: object shares: type: array items: properties: share: description: 'Publication de la carte' type: string count: description: 'Nombre de cartes' type: integer type: object query: description: 'Mot(s) contenu(s) dans le titre, la description ou le theme des cartes' type: string count: description: 'Nombre de cartes correspondant à la recherche' type: integer limit: description: 'Nombre de cartes recues dans la requete' type: integer offset: description: 'Nombre de cartes à passer avant de ls inclure dans la requete' type: integer type: object Theme: description: Theme properties: id: type: integer name: type: string type: object Login: properties: token: description: 'Jeton JWT à envoyer dans le header Authorization: Bearer xxx' type: string refresh_token: description: 'Jeton pour rafraichir le jeton JWT à envoyer /api/token/refresh' type: string type: object User_public: properties: public_id: description: 'identifiant public de l''utilisateur, ne sera jamais modifié' type: string public_name: description: 'Unique, ne doit pas être déjà utilisé (Erreur 400)' type: string twitter_account: description: 'Nom de compte Twitter' type: string facebook_account: description: 'Nom de compte Facebook' type: string linkedin_account: description: 'Nom de compte LinkedIn' type: string presentation: description: 'Présentation publique' type: string profile_picture: description: 'Url de l''image de profil' type: string format: uri cover_picture: description: 'Url de l''image de couverture' type: string format: uri type: object User_edit: type: object allOf: - properties: email: description: 'Unique, ne doit pas être déjà utilisé (Erreur 400)' type: string format: email username: description: 'Unique, ne doit pas être déjà utilisé (Erreur 400)' type: string - $ref: '#/components/schemas/User_public' User_me_edit: type: object allOf: - properties: current_password: type: string new_password: type: string - $ref: '#/components/schemas/User_edit' User_view: type: object allOf: - properties: locked: description: 'Compte bloqué' type: boolean id: type: integer medias_limit_size: description: 'Taille globale limite des images uploadées (en octet)' type: integer medias_size: description: 'Taille globale des images uploadées (en octet)' type: integer roles: type: array items: type: string - $ref: '#/components/schemas/User_edit' responses: Already_reported: description: 'La ressource a été supprimée' content: application/json: schema: properties: code: type: integer example: '208' message: type: string example: 'La ressource est déjà existante' type: object Deleted: description: 'La ressource a été supprimée' content: application/json: schema: properties: code: type: integer example: '204' message: type: string example: 'La ressource a été supprimée' type: object PartialContent: description: 'Contenu partiel des ressources recherchées' BadRequest: description: 'La requête n''est pas correcte' content: application/json: schema: properties: code: type: integer example: '400' message: type: string example: 'La requête n''est pas correcte' type: object NotConnected: description: 'Vous devez être connecté' content: application/json: schema: properties: code: type: integer example: '401' message: type: string example: 'Vous devez être connecté' type: object NotFound: description: 'La resource n''existe pas' content: application/json: schema: properties: code: type: integer example: '404' message: type: string example: 'La resource n''existe pas' type: object Forbidden: description: 'Vous n''avez pas accès à cette ressource' content: application/json: schema: properties: code: type: integer example: '403' message: type: string example: 'Vous n''avez pas accès à cette ressource' type: object Invalid: description: 'Vous ne pouvez pas accéder à la ressource pour des raisons légales' content: application/json: schema: properties: code: type: integer example: '451' message: type: string example: 'Vous ne pouvez pas accéder à la ressource pour des raisons légales' type: object TooLarge: description: 'L''objet joint est trop volumineux' content: application/json: schema: properties: code: type: integer example: '413' message: type: string example: 'L''objet joint est trop volumineux' type: object parameters: id: name: id in: path description: 'Identifiant de la resource' required: true schema: oneOf: - type: integer - type: string view_id: name: view_id in: path description: 'Identifiant de visualisation de la carte' required: true schema: oneOf: - type: integer - type: string edit_id: name: edit_id in: path description: 'Identifiant d''édition de la carte' required: true schema: oneOf: - type: integer - type: string limit: name: limit in: query description: 'Nombre maximum d''objets à retourner' required: false schema: type: integer default: 15 offset: name: offset in: query description: 'Le nombre d''objets à ignorer avant de commencer à collecter l''ensemble de résultats' required: false schema: type: integer default: 0 securitySchemes: bearer: type: http scheme: bearer bearerFormat: JWT