Saltar al contenido

API externa JSON-2

🐍 DESARROLLO · ODOO 19 · API EXTERNA

API externa JSON-2 en Odoo 19

Odoo 19 incorpora JSON-2, una nueva alternativa para exponer la API externa con sintaxis RESTful y JSON como formato único. Reemplaza (o convive con) JSON-RPC y XML-RPC, simplifica el consumo desde sistemas externos y trae documentación interactiva integrada en el propio servidor.

🔌
RESTful
/json/2/<model>/<method>

🔑
API KEYS
Bearer token, sin user/password

📖
DOCS DINÁMICAS
/doc en el servidor

JSON ÚNICO
Sin XML, sin formularios

1
¿Qué es la API JSON-2?

La API JSON-2 es una nueva alternativa para exponer la API externa de Odoo 19, pensada para simplificar el consumo desde sistemas externos (aplicaciones web, scripts, integraciones) usando una ruta tipo REST basada en JSON.

Características principales

🛠️ Invoca métodos del ORM
Mediante peticiones HTTP POST con cuerpo JSON, accedes a cualquier método de los modelos.

🔄 Reemplaza JSON-RPC / XML-RPC
O convive con ellas. La sintaxis es más RESTful y JSON es el formato único.

📖 Documentación dinámica
Endpoint /doc permite explorar modelos, métodos y esquemas desde el propio servidor.

2
Estructura de una request

La request es un POST a la URL /json/2/<model>/<method> con un objeto JSON. Tres bloques componen la petición:

2.1 — HTTP Headers

Header Estado Descripción
Host Requerido Nombre del host del servidor.
Authorization Requerido bearer <API_KEY>
Content-Type Requerido Siempre application/json (recomendado con charset utf-8).
X-Odoo-Database Opcional Nombre de la base si hay varias en la instancia.
User-Agent Recomendado Identifica el software que se conecta.

2.2 — Ruta URL

POST /json/2/<model>/<method>
model
Nombre técnico del modelo (ej. res.partner, sale.order).

method
Método a ejecutar (ej. search, create, action_confirm).

2.3 — Cuerpo JSON

ids
Array con los IDs de los registros sobre los que ejecutar el método. Vacío u omitido cuando se llama a @api.model.

context
Opcional. Diccionario con valores adicionales — por ejemplo {"lang": "en_US"}.

params
Parámetros del método, según su definición. Aquí van los argumentos posicionales y los kwargs.

3
Crear una clave de API externa

Tanto en planes Community como Enterprise se debe crear una clave que funcione como token de autorización. Se hace desde:

▸ Ruta:
Preferencias

Seguridad

Claves API
Acceso a la sección Claves API en Preferencias del usuario
Botón Agregar clave API en la lista de claves

Al pulsar Agregar clave API, se solicitan tres datos: la descripción (para identificarla más adelante), el propósito y la duración. Si pasa el tiempo configurado, la clave se invalida automáticamente:

Formulario para crear una nueva clave API con descripción y duración

El botón Generar clave crea una clave aleatoria de 160 bits. Se muestra una sola vez y no se puede recuperar — cópiala inmediatamente y guárdala en lugar seguro:

Clave API generada — visible una sola vez
🔐 SEGURIDAD
Si la clave se compromete o pierde, elimínala y genera una nueva. Nunca la incluyas en el código fuente — usa variables de entorno o archivos de configuración fuera del repositorio (con .gitignore).

4
Ejemplo: buscar registros

Configuramos las credenciales en el script (en este ejemplo, BD odoo19 con datos demo en local):

Configuración de credenciales en el script Python
💡 CARGA SEGURA
La clave aquí está en el script solo por motivos didácticos. En producción, cárgala desde una variable de entorno o archivo de configuración protegido.

Buscamos clientes (res.partner) cuyo nombre contenga “deco” y sean compañías:

Código del script que ejecuta search por nombre de cliente
Resultado: ID del cliente que cumple las condiciones

El cliente con id=9 existe. Ahora obtenemos más información (nombre, RFC, email, teléfono):

Código del script que llama a read sobre el cliente encontrado
Resultado del read con los datos del cliente

5
Ejemplo complejo: crear y confirmar una venta

Subimos la complejidad. Vamos a crear una venta con tres líneas y confirmarla — todo desde la API JSON-2. Tres partes:

Estructura general del script en partes

5.1 — Buscar cliente y productos

Buscamos clientes que contengan “azure” y sean compañías, además de productos que contengan “pantalla”:

Resultado: 1 cliente azure y 3 productos pantalla

5.2 — Crear la venta

Llamamos al método create del modelo sale.order con un vals_list que define los campos y valores:

Código del script que crea la venta con sus líneas
name
Nombre identificable: “Orden creada desde API JSON-2”.

partner_id
El cliente Azure obtenido en la parte 1.

order_line
Una línea por cada uno de los 3 productos pantalla.

Al ejecutar, obtenemos el ID de la venta creada:

Resultado: venta creada con id 25
Verificación en el sistema: la venta aparece con sus 3 productos

5.3 — Confirmar la venta

Ahora llamamos al método action_confirm con el ID de la venta:

Código que confirma la venta vía action_confirm
💡 NOMBRES ÚNICOS
Si reejecutas el script, la venta nueva chocará con el nombre existente (sale.order impide duplicados de name). Elimina la venta anterior antes de re-ejecutar — o usa nombres dinámicos con timestamp.
Nueva venta creada con id 26 y confirmada exitosamente
Verificación: la venta 26 quedó en estado Confirmado

6
Documentación interactiva en /doc

¿Cómo saber qué métodos puedes llamar y qué parámetros aceptan? El sistema expone el endpoint /doc con todos los modelos, métodos y esquemas:

Vista del endpoint /doc explorando el método create de sale.order

Por cada método se muestra: ejemplo de request, parámetros, lo que devuelve y descripción. Por ejemplo, el método action_confirm:

Documentación de action_confirm con descripción y tipo de retorno

7
Personalizar la documentación

La documentación se construye a partir del docstring que defines en el método Python. Si abrimos action_confirm:

Documentación generada por defecto del método
Definición Python original con su docstring

Modificamos la descripción y el tipo de retorno en el archivo Python:

Definición Python modificada con nueva descripción y tipo

Al actualizar el módulo api_doc, los cambios se reflejan en la documentación dinámica:

Documentación actualizada con los cambios aplicados
✅ DOCUMENTACIÓN VIVA
La documentación de tus métodos personalizados se mantiene sincronizada con el código — no hay que mantener un PDF aparte. Cuando ajustas el método, el cambio queda disponible para los integradores tras la actualización del módulo.

8
Consejos rápidos

🔑 API key, no usuario/contraseña
Genera la clave desde Preferencias y úsala en el header Authorization: bearer <API_KEY>.

🗂️ X-Odoo-Database explícito
En entornos con varias BD, agrega este header para evitar errores de conexión.

📦 Solo JSON
Toda la comunicación es JSON. No uses formularios ni multipart — siempre Content-Type: application/json.

🔐 Respeta permisos
La API aplica reglas de Odoo. Asegúrate que el usuario tenga permisos sobre los modelos a los que accede.

📡 Códigos HTTP estándar
Errores con 400, 403, 404, 500. Úsalos para manejar fallos en tu integración con la lógica adecuada.

📖 Aprovecha /doc
Si está activado, te ahorra tiempo investigando métodos disponibles y sus parámetros.

⚠️ No expongas la clave en frontend
Si tu integración involucra una web, haz las llamadas desde el backend para proteger las credenciales.

📌 En resumen

La API JSON-2 de Odoo 19 es la nueva forma RESTful de exponer el ORM al exterior. Con autenticación por API key, payload JSON, documentación dinámica en /doc y soporte para llamar cualquier método del modelo, simplifica integraciones desde aplicaciones web, scripts y sistemas terceros.

Reemplaza (o convive con) JSON-RPC y XML-RPC con una sintaxis más limpia. En Exdoo integramos Odoo con e-commerces, sistemas heredados, conectores de bancos y portales de clientes vía esta API, y compartimos contenido técnico para ayudar a otros developers Odoo a sacarle provecho.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¿Te gustaría implementar Odoo en tu empresa?

12 años de experiencia · +60 implementaciones exitosas · Partner Gold de Odoo en México

Hablemos por WhatsApp