diff --git a/mon-entreprise/source/sites/publi.codes/Api.tsx b/mon-entreprise/source/sites/publi.codes/Api.tsx
new file mode 100644
index 000000000..fc32aa60f
--- /dev/null
+++ b/mon-entreprise/source/sites/publi.codes/Api.tsx
@@ -0,0 +1,19 @@
+import React from 'react'
+import { ScrollToTop } from 'Components/utils/Scroll'
+import { Header } from './Header'
+import api from '../../../../publicodes/docs/api.md'
+import { MarkdownWithAnchorLinks } from 'Components/utils/markdown'
+
+// TODO Améliorer l'affichage des blocs de code JS et les rendre executables
+
+export default function Api() {
+ return (
+ <>
+
+
+
+
+
+ >
+ )
+}
diff --git a/mon-entreprise/source/sites/publi.codes/App.tsx b/mon-entreprise/source/sites/publi.codes/App.tsx
index 0375900a8..3dfc6f0c5 100644
--- a/mon-entreprise/source/sites/publi.codes/App.tsx
+++ b/mon-entreprise/source/sites/publi.codes/App.tsx
@@ -6,6 +6,7 @@ import { hot } from 'react-hot-loader'
import { Route, Switch } from 'react-router-dom'
import Provider from '../../Provider'
import redirects from '../mon-entreprise.fr/redirects'
+import Api from './Api'
import Landing from './Landing'
import Studio from './LazyStudio'
import Mécanismes from './Mécanismes'
@@ -25,6 +26,7 @@ const RouterSwitch = () => {
+
>
diff --git a/mon-entreprise/source/sites/publi.codes/Header.tsx b/mon-entreprise/source/sites/publi.codes/Header.tsx
index 08a5d5905..5d87b954e 100644
--- a/mon-entreprise/source/sites/publi.codes/Header.tsx
+++ b/mon-entreprise/source/sites/publi.codes/Header.tsx
@@ -30,11 +30,15 @@ export const Header = ({ noSubtitle = false, sectionName = '' }) => (
)
diff --git a/publicodes/docs/api.md b/publicodes/docs/api.md
new file mode 100644
index 000000000..0f0a98d61
--- /dev/null
+++ b/publicodes/docs/api.md
@@ -0,0 +1,145 @@
+# Api ![béta](https://img.shields.io/badge/-beta-blue)
+
+Publicode est distribué sous la forme d'une librairie
+[Node.js](https://nodejs.org/fr/) permettant de compiler un jeu de règles
+publicodes et de l'évaluer dans une situation donnée.
+
+## Installation
+
+Le paquet est disponble sur NPM :
+
+```sh
+$ npm install publicodes
+```
+
+Il est aussi possible d'utiliser la librairie directement dans le navigateur :
+
+```html
+
+```
+
+## Utilisation
+
+### Introduction
+
+La libraire exporte un objet `Engine` qui permet d'instancier le moteur avec un
+jeu de règles publicodes :
+
+```js
+import Engine from 'publicodes'
+
+// On définit une liste de règles publicodes
+const rules = `
+prix . carottes: 2€/kg
+prix . champignons: 5€/kg
+prix . avocat: 2€/avocat
+
+dépenses primeur:
+ formule:
+ somme:
+ - prix . carottes * 1.5 kg
+ - prix . champignons * 500g
+ - prix . avocat * 3 avocat
+`
+
+// On initialise un moteur en lui donnant le publicode.
+// Ce publicode va être parsé
+const engine = new Engine(rules)
+```
+
+La variable `engine` permet en ensuite de calculer la valeur d'une règle avec la
+méthode `evaluate`.
+
+```js
+console.log(engine.evaluate('dépenses primeur'))
+```
+
+La valeur numérique du nœud est disponible dans l'attribut `nodeValue`, son
+unité est disponible dans l'attribut `unit` :
+
+```js
+const { nodeValue, unit } = engine.evaluate('dépenses primeur')
+console.log(`j'ai dépensé ${nodeValue} ${unit} chez le primeur`)
+```
+
+La méthode `setSituation` permet de forcer la valeur d'une liste de règle. Elle
+utile pour pour présier les paramètres spécifiques à une simulation.
+
+```js
+// Ici on change le prix des avocats
+engine.setSituation({
+ 'prix . avocat': '3€/avocat'
+})
+```
+
+La valeur de `dépenses primeur` se base maintenant sur un avocat à 3€ :
+
+```js
+// On ré-évalue la règle dans la nouvelle situation
+console.log(`Nouveau prix ! ${engine.evaluate('dépenses primeur').nodeValue}`)
+```
+
+### Évaluation d'expressions
+
+La fonction `evaluate` permet d'évaluer des expressions publicode complètes
+
+```js
+// On va au marché une fois par semaine, amortissons la dépense sur 7 jours
+engine.evaluate('dépenses primeur / 7 jours')
+```
+
+### Conversion d'unité
+
+Publicode permet de réaliser des conversions d'unités. Pour celà il faut
+indiquer l'unité désirée comme paramètre à la méthode `evaluate` :
+
+```js
+// on va au march" une fois par semaine, combien dépense-t-on par mois ?
+engine.evaluate('dépenses primeurs / 7 jours', { unit: '€/mois' })
+```
+
+[➡ en savoir plus sur les unités](https://publi.codes/#unités)
+
+### Variables manquantes
+
+Publicode calcule automatiquement les dépendances de chaque règle. Si une la
+valeur d'une dépendance est manquante et ne permet pas de faire le calcul elle
+apparaîtra dans l'attribut `missingVariables`
+
+```js
+const engine = new Engine(`
+x: y + 5
+
+y:
+`)
+
+console.log(engine.evaluate('x').missingVariables)
+```
+
+Cette information est utile pour intégrer publicode à votre application.
+
+Il est aussi possible d'utiliser des valeurs par défaut. Dans ce cas la règle
+sera calculée avec la valeur par défaut de sa dépendance, mais cette dernière
+apparaîtra tout de même dans les `missingVariables`. Cette fonctionnalité est
+utile pour réaliser des simulateurs où l'on veut proposer un résultat sans
+attendre que l'utilisateur n'ait répondu à l'intégralité des questions tout en
+utilisant la liste des variables manquantes pour déterminer les questions
+restant à poser.
+
+
+
+Les variables manquantes sont calculées lors de l'évaluation. Si une variable
+apparaît dans la formule de calcul d'une règle elle ne sera rapportée que si
+elle est effectivement nécessaire au calcul. Si elle est présente dans une
+portion non active de l'évaluation (par exemple dans un bloc condition non
+actif, ou la tranche d'un barème non actif) elle sera filtrée et n'apparaîtra
+pas dans les `missingVariables`
+
+
+
+## Référence
+
+- Engine constructor
+- engine.evaluate
+- engine.setSituation
+- formatValue