Odoo modules

Odoo 20 en XML-RPC/JSON-RPC: welke koppelingen breken en hoe je overstapt op JSON-2

Odoo faseert de oude XML-RPC- en JSON-RPC-API uit. In Odoo 20 verdwijnt maar één deel. De meeste koppelingen blijven werken tot Odoo 22, maar het is slim om nu al over te stappen op de JSON-2 API.

Gepubliceerd op 05-11-2026 · Odoo 19 en 20

Veel koppelingen met Odoo praten nog via XML-RPC of JSON-RPC: een webshop die bestellingen doorstuurt, een script dat voorraad bijwerkt, een n8n-flow of een rapportagetool. Sinds Odoo 19 bestaat er een nieuwe API, JSON-2. De officiële documentatie van de externe API legt uit wat wanneer verdwijnt.

Wat stopt wanneer?

De endpoints /xmlrpc, /xmlrpc/2 en /jsonrpc zijn verouderd (deprecated). Ze bieden drie services aan: common, db en object. Volgens de documentatie:

  • De db-service is verwijderd in Odoo 20 (najaar 2026) en in Odoo Online 19.1 (winter 2025). Calls zoals create_database, dump, drop, list of restore via RPC werken daar niet meer.
  • De common- en object-service staan gepland om te verdwijnen in Odoo 22 (najaar 2028) en in Odoo Online 21.1 (winter 2027). Dat zijn de calls die bijna elke koppeling gebruikt: authenticate, login, version, execute en execute_kw.
  • Eigen controllers met @route(type='jsonrpc') (tot Odoo 18 type='json') vallen niet onder deze uitfasering.

Kort gezegd: een gewone koppeling die klanten, producten of orders leest en schrijft via execute_kw, stopt niet bij de upgrade naar Odoo 20. Een script dat databases aanmaakt, kopieert of back-upt via RPC, moet je wel aanpassen voor je upgradet. Daarvoor bestaan de HTTP-controllers onder /web/database/, zoals /web/database/backup en /web/database/duplicate.

Je koppelingen inventariseren

Neem een Limburgse verdeler met een webshop, een magazijnscanner van een externe leverancier en een nachtelijk back-upscript van zijn IT-partner. Alle drie praten met Odoo. Zo breng je in kaart wat er moet gebeuren:

  1. Maak een lijst van alles wat met Odoo praat

    Denk aan webshops, scripts, n8n- of Make-flows, rapportagetools, scanners en koppelingen van leveranciers. Vraag bij externe software na welke API ze gebruiken.

  2. Zoek in je eigen code

    Zoek op /xmlrpc, /jsonrpc, ServerProxy, execute_kw en execute. Deze zoektermen worden ook aangeraden in een forumdraad over dit onderwerp.

  3. Deel elke koppeling in per service

    Gebruikt ze de db-service? Dan moet ze aangepast zijn voor Odoo 20. Gebruikt ze enkel common en object? Dan heb je tijd tot Odoo 22, maar plan de overstap toch.

  4. Test in een upgradedatabase

    Laat elke koppeling draaien tegen een testdatabase in de nieuwe versie voor je productie upgradet.

Zo werkt JSON-2

  • Je stuurt een POST naar /json/2/<model>/<methode>, bijvoorbeeld /json/2/res.partner/search_read.
  • Je logt niet in met gebruiker en wachtwoord, maar stuurt een API-sleutel mee in de header Authorization: bearer <sleutel>.
  • De header X-Odoo-Database is enkel nodig als één server meerdere databases host en de domeinnaam niet volstaat.
  • Alle argumenten zijn benoemd in een JSON-object, samen met ids en context. Positionele argumenten zoals bij execute_kw bestaan niet meer.
  • Elke call loopt in een eigen transactie. Je kunt geen meerdere calls in één transactie bundelen. Gebruik daarom methodes die alles in één keer doen, zoals search_read of action_confirm op een verkooporder.

Een voorbeeld in Python met de bibliotheek requests, gebaseerd op de officiële documentatie. Het haalt de naam en het btw-nummer van tien bedrijven op:

json2_voorbeeld.py
import requests

BASE_URL = "https://jouwbedrijf.odoo.com/json/2"
API_KEY = ...  # haal de sleutel uit een veilige plaats

res = requests.post(
    f"{BASE_URL}/res.partner/search_read",
    headers={
        "Authorization": f"bearer {API_KEY}",
        "X-Odoo-Database": "jouwbedrijf",  # enkel nodig bij meerdere databases
    },
    json={
        "context": {"lang": "nl_BE"},
        "domain": [["is_company", "=", True]],
        "fields": ["name", "vat"],
        "limit": 10,
    },
)
res.raise_for_status()
print(res.json())

De functie version uit de common-service vervang je door een GET op /web/version. Heb je het id van de ingelogde gebruiker nodig, dan roep je res.users/context_get aan zonder ids. Odoo haalt de gebruiker uit de API-sleutel.

API-sleutels: let op de vervaldatum

Een API-sleutel maak je via je gebruikersvoorkeuren: Preferences → Account Security → New API Key in een Engelstalige interface. Je geeft een omschrijving en een looptijd op. De documentatie van Odoo 20 spreekt van maximaal drie maanden. In de broncode hangt de maximale looptijd af van de groepen van de gebruiker: voor een gewone gebruiker is dat standaard 90 dagen. Een koppeling met een botgebruiker heeft dus een plan nodig om sleutels op tijd te vervangen. Odoo voorziet daarvoor de methodes res.users.apikeys/generate en res.users.apikeys/revoke.

Wil je je koppelingen laten nakijken of omzetten naar JSON-2 voor je naar Odoo 20 gaat? Bekijk onze API-koppelingen.

Veelgestelde vragen

Stopt mijn XML-RPC-koppeling bij de upgrade naar Odoo 20?

Meestal niet. Enkel de db-service is verwijderd in Odoo 20. Calls via common en object, zoals execute_kw, werken volgens de documentatie tot Odoo 22.

Wanneer verdwijnt XML-RPC volledig?

De common- en object-service staan gepland om te verdwijnen in Odoo 22 (najaar 2028) en in Odoo Online 21.1 (winter 2027).

Vanaf welke versie kan ik JSON-2 gebruiken?

JSON-2 bestaat sinds Odoo 19. Je kunt dus al overstappen voor je naar Odoo 20 gaat.

Hoe lang is een API-sleutel geldig?

Je kiest zelf de looptijd binnen een maximum dat afhangt van de groepen van de gebruiker. Voor een gewone gebruiker is dat in Odoo 20 standaard 90 dagen. Plan dus een rotatie van je sleutels.

← Alle artikels

WhatsApp