Odoo : référence technique
Ceci est le complément technique de la documentation principale du connecteur Odoo
Objectif
Ceci est le complément technique de la documentation principale du connecteur Odoo. Il couvre les internes de l'authentification, la référence complète des endpoints, la pagination, les limites de débit, le format de sortie, le langage de filtre de domaine, la compatibilité des versions et les limitations, tout ce qui est nécessaire pour intégrer le connecteur dans un pipeline de données.
Authentification
Protocole
Le connecteur utilise JSON-RPC 2.0 via POST {url}/jsonrpc. Toutes les requêtes sont envoyées à un unique endpoint avec des corps JSON différents.
Identifiants
Flux d'authentification
configure()appelleauthenticate(db, login, api_key)via JSON-RPC- Renvoie
uid(identifiant utilisateur entier) - Chaque appel suivant transmet
(db, uid, api_key): sans état, pas de cookie de session
Exigence Odoo Online
L'accès à l'API externe nécessite le plan Custom sur Odoo Online. Les plans Free et Standard n'incluent pas l'accès à l'API. Voir Odoo Pricing.
Architecture
Le connecteur renvoie le JSON brut de l'API JSON-RPC Odoo. La platform prend le relais à partir de là. Elle découvre automatiquement le schéma à partir du payload JSON, aplatit les objets imbriqués en colonnes, et stocke le résultat dans le lakehouse, interrogeable via Trino. Tout nouveau champ apparaissant dans votre instance Odoo apparaît automatiquement lors de la prochaine extraction.
Le connecteur lui-même est responsable de l'authentification (appel JSON-RPC authenticate pour obtenir un uid), du routage des endpoints, de l'extraction des données (un unique appel search_read partagé par chaque modèle), de l'introspection de schéma (fields_get), de la pagination par décalage (offset), et des tentatives en cas de limite de débit.
Étant donné que chaque modèle Odoo est accessible via le même appel JSON-RPC search_read, le connecteur utilise un unique chemin d'extraction pour les 26 modèles prédéfinis, l'endpoint custom_model, et tout modèle exposé via model_fields. Ajouter un nouveau modèle consiste simplement à ajouter son nom dans le menu déroulant. Aucun code spécifique par modèle n'est nécessaire.
Référence des endpoints
models
Extrait des enregistrements depuis l'un des 26 modèles Odoo prédéfinis.
Appel API : execute_kw(model, "search_read", [domain], {fields, limit, offset, order})
Pagination : par décalage (offset) (limit=80, l'offset augmente de 80)
Sortie : JSON brut, liste de dictionnaires tels que renvoyés par l'API Odoo.
Modèles prédéfinis (26) :
custom_model
Extrait des enregistrements depuis tout modèle Odoo qui n'est pas dans la liste prédéfinie.
Appel API : identique à models : execute_kw(model_name, "search_read", ..)
Sortie : JSON brut, même format que models.
Cas d'usage : helpdesk.ticket, mrp.production, fleet.vehicle, event.event, ou tout modèle personnalisé.
model_fields
Renvoie les définitions de champs pour tout modèle Odoo (introspection de schéma).
Appel API : execute_kw(model_name, "fields_get", [], {attributes: [string, type, required, help, readonly, relation]})
Sortie : JSON brut, liste de dictionnaires, chacun avec field_name, string (libellé), type, required, help, readonly, relation (pour les champs relationnels).
Cas d'usage : découvrir les champs disponibles et leurs types avant de configurer fields_filter sur une extraction models ou custom_model.
Pagination
Le connecteur utilise une seule stratégie de pagination pour tous les modèles :
Par décalage (offset)
- Taille de page : 80 (recommandé par Odoo)
- Ordre : toujours
id ascpour une pagination cohérente - Condition d'arrêt : moins d'enregistrements renvoyés que la taille de page
- max_items : lorsqu'il est défini, la pagination s'arrête dès que suffisamment d'enregistrements sont collectés, et le résultat est tronqué à exactement
max_items
Limites de débit
Consultez la documentation de votre instance Odoo pour connaître les limites exactes.
Le connecteur gère automatiquement les erreurs 429 Too Many Requests : il lit l'en-tête Retry-After et attend avant de réessayer. Repli sur 10 secondes si l'en-tête est absent.
Format de sortie
JSON brut (sortie du connecteur)
Le connecteur renvoie le JSON brut de l'API Odoo. Chaque enregistrement est un dictionnaire avec tous les champs demandés.
Exemple (res.partner) :
Champs relationnels
Les champs relationnels Odoo sont renvoyés comme suit :
- Many2one :
[id, display_name](par ex."country_id": [75, "France"]) - One2many / Many2many : liste d'ID (par ex.
"category_id": [1, 3])
La platform aplatit ces champs automatiquement.
Sortie aplatie (lakehouse)
La platform aplatit les objets imbriqués en colonnes avec des underscores :
Référence du filtre de domaine
Odoo utilise la notation polonaise (préfixe) pour les filtres de domaine. Le connecteur les accepte sous forme de chaîne JSON.
Syntaxe
Chaque critère est [field, operator, value]. Plusieurs critères sont combinés par un ET (AND) par défaut.
Opérateurs
Opérateurs logiques
Exemples
Compatibilité des versions
Testé et pris en charge sur Odoo 14 à 19 (y compris Odoo Online saas~19.2).
Les 26 modèles prédéfinis sont stables sur Odoo 14–19. Si un modèle n'existe pas sur votre instance (selon les applications installées), utilisez model_fields pour vérifier sa disponibilité.
Limitations
- Pas de champs codés en dur. Le connecteur renvoie tout ce que fournit l'API. Les noms de champs et les types dépendent de votre version Odoo et des modules installés.
- Champs restreints. Certains modèles ont des champs restreints à des groupes d'utilisateurs spécifiques (par ex.,
project.project.stage_id). Utilisezfields_filterpour les exclure, ou accordez le groupe requis à votre utilisateur API. - Champs binaires. Les champs comme
image_1920renvoient des données encodées en base64, qui peuvent être très volumineuses. Utilisezfields_filterpour exclure les champs image lorsqu'ils ne sont pas nécessaires. - Accès API Odoo Online. Nécessite le plan Custom. Les plans Free et Standard bloquent l'accès à l'API externe.
- Pas d'extraction par webhook/push. Le connecteur utilise uniquement une extraction par pull (JSON-RPC search_read).
- Une seule méthode d'authentification. Clé API uniquement. OAuth2 n'est pas pris en charge.
Aller plus loin
Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.
Posez vos questions, faites-nous part de vos commentaires et interagissez directement avec l’équipe qui développe la Data Platform sur le canal Discord dédié.
Si vous avez besoin d'une assistance concernant vos services OVHcloud, créez une demande depuis notre centre d'aide.
Rejoignez notre communauté d'utilisateurs.