For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/data-platform/connectors-sources-odoo-technical-reference.md.

Odoo : référence technique

Voir en Markdown

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

ChampRequisDescription
urlOuiURL de l'instance Odoo (par ex. https://mycompany.odoo.com)
loginOuiE-mail de l'utilisateur Odoo
api_keyOuiClé API générée depuis votre profil Odoo
databaseNonAuto-détecté depuis le sous-domaine *.odoo.com. Requis pour un déploiement auto-hébergé.

Flux d'authentification

  1. configure() appelle authenticate(db, login, api_key) via JSON-RPC
  2. Renvoie uid (identifiant utilisateur entier)
  3. 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.

ParamètreTypeRequisDescription
object_typeselectOuiModèle Odoo (26 options)
fields_filtertagsNonChamps spécifiques à inclure (vide = tous)
domain_filtertextNonFiltre de domaine Odoo au format JSON (vide = tous les enregistrements)
max_itemsnumberNonNombre maximum d'enregistrements (vide = tous)

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) :

DomaineModèles
Contactsres.partner
CRMcrm.lead, crm.stage, crm.team
Ventessale.order, sale.order.line
Achatspurchase.order, purchase.order.line
Facturationaccount.move, account.move.line, account.journal
Produitsproduct.template, product.product, product.category
Inventairestock.picking, stock.move, stock.warehouse, stock.location
RHhr.employee, hr.department
Projetsproject.project, project.task
Systèmeres.users, res.company, res.country, res.currency

custom_model

Extrait des enregistrements depuis tout modèle Odoo qui n'est pas dans la liste prédéfinie.

ParamètreTypeRequisDescription
model_nametextOuiNom technique complet du modèle (par ex. helpdesk.ticket)
fields_filtertagsNonChamps spécifiques
domain_filtertextNonFiltre de domaine au format JSON
max_itemsnumberNonNombre maximum d'enregistrements

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).

ParamètreTypeRequisDescription
model_nametextOuiModèle à inspecter (par ex. res.partner)

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)

Call 1: search_read(domain, {limit: 80, offset: 0, order: "id asc"})
Call 2: search_read(domain, {limit: 80, offset: 80, order: "id asc"})
Call 3: search_read(domain, {limit: 80, offset: 160, order: "id asc"})
...until returned records < 80
  • Taille de page : 80 (recommandé par Odoo)
  • Ordre : toujours id asc pour 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.

EnvironnementLimite approximative
Odoo Online (SaaS)Varie selon le plan, consultez la documentation Odoo
Odoo.shVarie, consultez la configuration de votre instance
Auto-hébergéDépend des ressources du serveur

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) :

{
  "id": 8,
  "name": "Acme Corp",
  "email": "contact@acme.com",
  "phone": "+33 1 23 45 67 89",
  "is_company": true,
  "country_id": [75, "France"],
  "category_id": [1, 3]
}

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 :

JSON brutColonne lakehouse
idid
namename
country_idcountry_id (aplati depuis un tableau)

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érateurDescription
=, !=Égal / différent de
>, >=, <, <=Comparaison
in, not inAppartenance à un ensemble
like, ilikeCorrespondance de motif (ilike = insensible à la casse)
not like, not ilikeCorrespondance de motif négative
=like, =ilikeSQL LIKE sans encadrement automatique
child_of, parent_ofRelations hiérarchiques

Opérateurs logiques

OpérateurAritéDescription
&BinaireET (AND, implicite par défaut)
|BinaireOU (OR)
!UnaireNON (NOT)

Exemples

// Active companies
[["is_company", "=", true], ["active", "=", true]]

// Sales orders over 1000
[["state", "=", "sale"], ["amount_total", ">", 1000]]

// Leads OR opportunities
["|", ["type", "=", "lead"], ["type", "=", "opportunity"]]

// Invoices from 2024
[["invoice_date", ">=", "2024-01-01"], ["invoice_date", "<=", "2024-12-31"]]

Compatibilité des versions

Testé et pris en charge sur Odoo 14 à 19 (y compris Odoo Online saas~19.2).

Version OdooStatutPrise en charge de la clé API
14–18Entièrement pris en chargeOui
19Entièrement pris en charge (testé sur saas~19.2)Oui

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). Utilisez fields_filter pour les exclure, ou accordez le groupe requis à votre utilisateur API.
  • Champs binaires. Les champs comme image_1920 renvoient des données encodées en base64, qui peuvent être très volumineuses. Utilisez fields_filter pour 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.

Cette page vous a-t-elle aidé ?