From 5230acffb69fd58e74a2847c0612a7a5dd567523 Mon Sep 17 00:00:00 2001 From: Julien Castiaux Date: Fri, 18 Jul 2025 12:50:58 +0200 Subject: [PATCH 1/2] [ADD] reference/external_json2_api --- content/developer/reference.rst | 1 + .../reference/external_json2_api.rst | 101 ++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 content/developer/reference/external_json2_api.rst diff --git a/content/developer/reference.rst b/content/developer/reference.rst index af531f28ca..273bdef163 100644 --- a/content/developer/reference.rst +++ b/content/developer/reference.rst @@ -17,4 +17,5 @@ Reference reference/cli reference/upgrades reference/external_api + reference/external_json2_api reference/extract_api diff --git a/content/developer/reference/external_json2_api.rst b/content/developer/reference/external_json2_api.rst new file mode 100644 index 0000000000..427eb5a5c7 --- /dev/null +++ b/content/developer/reference/external_json2_api.rst @@ -0,0 +1,101 @@ +=================== +External JSON-2 API +=================== + +Odoo is usually extended internally via modules, but many of its features and all of its data are +also available from the outside for external analysis or integration with various tools. Part of +the :ref:`reference/orm/model` API is easily available over HTTP via the ``/json/2`` endpoint. + + +TL;DR +===== + +Request +------- + +POST a json object at the ``/json/2//`` URL. + +.. code:: http + + POST /json/2/res.partner/search_read HTTP/1.1 + Host: mycompany.odoo.com + X-Odoo-Database: mycompany + Authorization: Bearer 6578616d706c65206a736f6e20617069206b6579 + Content-Type: application/json; charset=utf-8 + User-Agent: mysoftware python-requests/2.25.1 + + { + "domain": [ + ["name", "ilike", "%deco%"], + ["is_company", "=", true] + ], + "fields": ["name"], + } + +.. code:: http + + POST /json/2/res.partner/write HTTP/1.1 + Host: mycompany.odoo.com + X-Odoo-Database: mycompany + Authorization: Bearer 6578616d706c65206a736f6e20617069206b6579 + Content-Type: application/json; charset=utf-8 + User-Agent: mysoftware python-requests/2.25.1 + + { + "ids": [5], + "context": { + "lang": "en_US" + }, + "vals_list": [ + { + "name": "Deco Classic" + } + ] + } + +The JSON must be a json-object containing the arguments for the model's method. The two ``ids`` +and ``context`` are special arguments and serve to craft a recordset on which the method is +executed. + +The headers ``Host``, ``Authorization`` (bearer + api key) and ``Content-Type`` are required. The +``X-Odoo-Database`` header is only necessary when multiple databases are hosted behind a same +``Host``. A ``User-Agent`` with the name of the software where the request comes from is +recommended. + +The available models and methods depend on the list of modules that are installed in the database. +The exact list of what's available is accessible on the ``/doc`` page of every database. + + +Success response +---------------- + +The function's return value is serialized as json in the body. + +.. code:: http + + HTTP/1.1 200 OK + Content-Type: application/json; charset=utf-8 + + [ + {"id": 5, "name": "Deco Addict"} + ] + + +Error response +-------------- + +The errors use a sensible http status code. The error message is serialized as a json string in the +body. + +.. code:: http + + HTTP/1.1 401 Unauthorized + Date: Fri, 18 Jul 2025 08:33:35 GMT + Content-Type: application/json; charset=utf-8 + + "Invalid apikey" + +The complete traceback is available in the server log, at the same date as the error response. + + +.. _User-Agent: https://httpwg.org/specs/rfc9110.html#field.user-agent From 45a3e66d527c5017c9dd8fe93d506957922fd982 Mon Sep 17 00:00:00 2001 From: Julien Castiaux Date: Fri, 18 Jul 2025 18:12:10 +0200 Subject: [PATCH 2/2] wip api key --- .../external_api/account-security2.png | Bin 0 -> 25333 bytes .../reference/external_api/new-api-key.png | Bin 0 -> 25424 bytes .../reference/external_api/preferences2.png | Bin 0 -> 14629 bytes .../reference/external_json2_api.rst | 58 +++++++++++++++--- 4 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 content/developer/reference/external_api/account-security2.png create mode 100644 content/developer/reference/external_api/new-api-key.png create mode 100644 content/developer/reference/external_api/preferences2.png diff --git a/content/developer/reference/external_api/account-security2.png b/content/developer/reference/external_api/account-security2.png new file mode 100644 index 0000000000000000000000000000000000000000..e7333bc2d92956501fd5aba41eceafa0c419c2be GIT binary patch literal 25333 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 literal 0 HcmV?d00001 diff --git a/content/developer/reference/external_api/new-api-key.png b/content/developer/reference/external_api/new-api-key.png new file mode 100644 index 0000000000000000000000000000000000000000..cb77f6db6f7310d7e2c880f2149aad428404d3d1 GIT binary patch literal 25424 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 ZaZ44PU19rDz/`` URL. User-Agent: mysoftware python-requests/2.25.1 { - "ids": [5], + "ids": [25], "context": { "lang": "en_US" }, @@ -53,7 +55,7 @@ POST a json object at the ``/json/2//`` URL. ] } -The JSON must be a json-object containing the arguments for the model's method. The two ``ids`` +The body must be a json-object containing the arguments for the model's method. The two ``ids`` and ``context`` are special arguments and serve to craft a recordset on which the method is executed. @@ -69,7 +71,7 @@ The exact list of what's available is accessible on the ``/doc`` page of every d Success response ---------------- -The function's return value is serialized as json in the body. +A **200 OK** status with the method's return value serialized as json in the body. .. code:: http @@ -77,15 +79,14 @@ The function's return value is serialized as json in the body. Content-Type: application/json; charset=utf-8 [ - {"id": 5, "name": "Deco Addict"} + {"id": 25, "name": "Deco Addict"} ] Error response -------------- -The errors use a sensible http status code. The error message is serialized as a json string in the -body. +A **4xx**/**5xx** status with the error message serialized as a json string in the body. .. code:: http @@ -99,3 +100,44 @@ The complete traceback is available in the server log, at the same date as the e .. _User-Agent: https://httpwg.org/specs/rfc9110.html#field.user-agent + + +Authentication & Access Control +=============================== + +The JSON-2 API uses the access rights of the current user for all operations, and the user is +selected using an API key. + +API Key +------- + +Create a new API key for a user via :guilabel:`Preferences`, :guilabel:`Account Security`, and +:guilabel:`New API Key`. + +.. have the three images appear next to each other +.. list-table:: + + * - .. image:: external_api/preferences2.png + :align: center + + - .. image:: external_api/account-security2.png + :align: center + + - .. image:: external_api/new-api-key.png + :align: center + +A description and a duration are needed to create a new api key. The description makes it possible +to identify the key, and to determine later whether the key is still in use or should be removed. +It should be as clear and complete as possible. The duration determines the lifetime of the key +after which the the key becomes invalid. It is recommended to set a short duration (typically 1 day) +for interactive usage. It is not possible to create keys that last for more than 3 months, it means +that long lasting keys must be rotated at least once every 3 months. + +The :guilabel:`Generate Key` creates a 20 bytes (160 bits) strong random key. Its value appears on +screen, this is the only time and place the key is visible on screen, it must be copied and stored +somewhere safe. If it ever gets compromized or lost, then it must be removed. + +The `Secrets Management Cheat Sheet`_ is a document published by the OWASP foundation on how to +safely manage and store secrets such as API keys, with additionnal resources linked at the end. + +.. _Secrets Management Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html#secrets-management-cheat-sheet