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