## EN BREF
L’API Notion officielle permet d’automatiser et d’intégrer Notion dans vos propres applications. Créez des entrées de bases de données, lisez des pages, mettez à jour des propriétés et réagissez aux changements. Ce guide couvre les bases pour les développeurs qui débutent avec l’API Notion.
—
## Prérequis et accès à l’API
**1. Créer une intégration Notion :**
– Allez sur notion.so/my-integrations
– Créez une nouvelle intégration (interne ou publique)
– Récupérez votre API Key (Internal Integration Token)
**2. Connecter l’intégration à vos pages :**
Dans chaque page ou base de données que vous voulez accéder via l’API :
– Cliquez les `…` → Connexions → Ajoutez votre intégration
Sans cette étape, l’API retourne une erreur 404 même avec un token valide.
[IMAGE: notion-api-developpeurs-integration-workflow-code.jpg | Notion API — guide développeurs intégration et automatisation]
## Authentification
« `python
import requests
NOTION_TOKEN = « secret_xxxx »
headers = {
« Authorization »: f »Bearer {NOTION_TOKEN} »,
« Content-Type »: « application/json »,
« Notion-Version »: « 2022-06-28 »
}
« `
## Lire une base de données
« `python
database_id = « votre_database_id_ici »
response = requests.post(
f »https://api.notion.com/v1/databases/{database_id}/query »,
headers=headers,
json={
« filter »: {
« property »: « Statut »,
« status »: {« equals »: « En cours »}
},
« sorts »: [
{« property »: « Date », « direction »: « ascending »}
]
}
)
results = response.json()[« results »]
« `
## Créer une entrée dans une base de données
« `python
def create_task(title, project_id, assignee_id):
return requests.post(
« https://api.notion.com/v1/pages »,
headers=headers,
json={
« parent »: {« database_id »: database_id},
« properties »: {
« Titre »: {
« title »: [{« text »: {« content »: title}}]
},
« Statut »: {
« status »: {« name »: « À faire »}
},
« Projet »: {
« relation »: [{« id »: project_id}]
},
« Assigné »: {
« people »: [{« id »: assignee_id}]
}
}
}
)
« `
## Mettre à jour une propriété
« `python
def update_status(page_id, new_status):
return requests.patch(
f »https://api.notion.com/v1/pages/{page_id} »,
headers=headers,
json={
« properties »: {
« Statut »: {« status »: {« name »: new_status}}
}
}
)
« `
## Lire le contenu d’une page
« `python
def get_page_content(page_id):
# Récupérer les blocs
blocks = requests.get(
f »https://api.notion.com/v1/blocks/{page_id}/children »,
headers=headers
).json()[« results »]
# Extraire le texte des blocs
text_content = []
for block in blocks:
if block[« type »] == « paragraph »:
texts = block[« paragraph »][« rich_text »]
for t in texts:
text_content.append(t[« text »][« content »])
return » « .join(text_content)
« `
## Limitations de l’API
– Rate limiting : 3 requêtes par seconde par intégration
– Pas de webhooks natifs en production (beta)
– Pas de recherche full-text performante via API
– Certains types de blocs ne sont pas modifiables (fichiers embarqués, certains médias)
## Bibliothèques SDK officielles
– **JavaScript/TypeScript :** `npm install @notionhq/client`
– **Python :** `pip install notion-client`
> Lire aussi : [Notion automatisation Zapier](/notion-automatisation-zapier-make-integration/) | [Notion pour développeurs](/notion-pour-developpeurs-guide-technique/)