Nueva API de Odoo Online
Guía completa para desarrolladores: integra Odoo con cualquier sistema, automatiza procesos y desarrolla aplicaciones potentes.
Conceptos Fundamentales de la API
Autenticación
API Keys únicas por usuario. Autenticación segura sin exponer contraseñas. Tokens revocables en cualquier momento.
Endpoints
URLs base: /web/dataset/call_kw para llamadas, /web/session/authenticate para login. Cada modelo tiene sus métodos.
Modelos
res.partner (contactos), product.product (productos), sale.order (ventas). Cada modelo con campos específicos.
Métodos CRUD
search_read (consultar), create (crear), write (actualizar), unlink (eliminar). Operaciones estándar en todos los modelos.
🚀 Quick Start: Primera Integración
Obtener API Key
Ruta: Preferencias → Seguridad de la cuenta → Claves API
- Inicia sesión en tu instancia de Odoo Online
- Click en tu nombre (esquina superior derecha) → Preferencias
- Pestaña "Seguridad de la cuenta"
- Sección "Claves API" → Click "Nueva clave API"
- Ingresa descripción (ej: "Integración con Shopify")
- ¡IMPORTANTE! Copia el token generado (solo se muestra una vez)
⚠️ Seguridad: Guarda la API Key en un gestor de contraseñas o variable de entorno. NUNCA la incluyas directamente en código que subes a repositorios públicos.
Ejemplo Básico en Python
Conexión y consulta de clientes:
import xmlrpc.client
# Configuración
url = "https://tu-empresa.odoo.com"
db = "tu-base-datos"
username = "tu-email@empresa.com"
api_key = "tu-api-key-aqui"
# Autenticación
common = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common')
uid = common.authenticate(db, username, api_key, {})
# Cliente de modelos
models = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object')
# Consultar clientes
clientes = models.execute_kw(
db, uid, api_key,
'res.partner', # modelo
'search_read', # método
[[['customer_rank', '>', 0]]], # dominio (filtros)
{'fields': ['name', 'email', 'phone'], 'limit': 10}
)
print(f"Encontrados {len(clientes)} clientes:")
for cliente in clientes:
print(f"- {cliente['name']} ({cliente['email']})")Ejemplo en JavaScript/Node.js
Usando fetch para crear un producto:
const axios = require('axios');
const config = {
url: 'https://tu-empresa.odoo.com',
db: 'tu-base-datos',
username: 'tu-email@empresa.com',
api_key: 'tu-api-key-aqui'
};
async function crearProducto() {
// Autenticación
const authResponse = await axios.post(
`${config.url}/web/session/authenticate`,
{
jsonrpc: '2.0',
params: {
db: config.db,
login: config.username,
password: config.api_key
}
}
);
const sessionId = authResponse.data.result.session_id;
// Crear producto
const productoResponse = await axios.post(
`${config.url}/web/dataset/call_kw`,
{
jsonrpc: '2.0',
method: 'call',
params: {
model: 'product.product',
method: 'create',
args: [{
name: 'Nuevo Producto API',
list_price: 99.99,
type: 'consu',
description: 'Creado via API'
}],
kwargs: {}
}
},
{
headers: {
'Cookie': `session_id=${sessionId}`
}
}
);
console.log('Producto creado con ID:', productoResponse.data.result);
}
crearProducto();Operaciones CRUD Principales
🔍 Search / Search_read
search: Devuelve solo IDs de registros que cumplen condiciones
search_read: Devuelve IDs + campos especificados
➕ Create
Crea uno o varios registros. Retorna ID(s) del registro creado.
✏️ Write
Actualiza registros existentes. Requiere ID(s) y campos a modificar.
🗑️ Unlink (Delete)
Elimina registros permanentemente. Operación irreversible.
Modelos Más Utilizados
Contactos
Clientes, proveedores y contactos
Productos
Catálogo de productos/servicios
Órdenes de Venta
Presupuestos y pedidos de venta
Órdenes de Compra
Solicitudes y órdenes de compra
Facturas
Facturas de cliente y proveedor
Albaranes
Movimientos de inventario
Oportunidades CRM
Leads y oportunidades de venta
Proyectos
Gestión de proyectos
Empleados
Recursos humanos
✅ Mejores Prácticas
Manejo de Errores
Implementa try/catch robusto. La API puede retornar errores por permisos, campos inválidos, registros no encontrados. Loguea errores con contexto suficiente para debugging.
Paginación
Para consultas grandes, usa limit y offset. Ejemplo: limit=100, offset=0 (primera página), luego offset=100, offset=200, etc. No intentes cargar miles de registros en una sola llamada.
Caché Local
Datos que cambian poco (catálogo de productos, lista de países) guárdalos en caché local con TTL. Reduce drásticamente llamadas API y mejora rendimiento.
Transacciones Atómicas
Si creas orden de venta con líneas, usa transacciones para garantizar consistencia. Si falla creación de línea, reversa la orden.
Campos Calculados
Algunos campos son computed (calculados dinámicamente). No puedes escribir directamente en ellos. Lee documentación del modelo para saber cuáles.
Relaciones Many2one/One2many
Many2one: Envía ID del registro relacionado. One2many/Many2many: Usa comandos especiales [(0,0,vals)], [(4,id)], [(5,0,0)], etc. para crear, vincular o desvincular.
Testing en Sandbox
SIEMPRE prueba integraciones en base de datos de test antes de producción. Un bug puede corromper datos críticos.
Versionado de API
La estructura de modelos puede cambiar entre versiones de Odoo. Documenta qué versión soporta tu integración y prueba antes de actualizar Odoo.
💡 Casos de Uso Comunes
E-commerce → Odoo
Sincronizar pedidos de tienda online (Shopify, WooCommerce, Magento) a Odoo automáticamente.
- • Webhook recibe pedido nuevo en tienda
- • Script crea cliente en Odoo (si no existe)
- • Crea orden de venta con líneas de productos
- • Confirma pedido y genera factura
- • Actualiza inventario automáticamente
Dashboard Externo
Construir dashboards personalizados con métricas de Odoo en tiempo real.
- • Consultar ventas del mes por API
- • Obtener top 10 productos más vendidos
- • Calcular KPIs (tasa conversión, ticket medio)
- • Visualizar en Power BI, Tableau o app custom
- • Actualización cada hora con caché
App Móvil
Desarrollar aplicación móvil (iOS/Android) que conecta con Odoo.
- • App de fuerza de ventas en campo
- • Consultar catálogo de productos offline
- • Crear presupuestos desde tablet
- • Sincronizar cuando haya conexión
- • Notificaciones push de pedidos nuevos
Sincronización ERP Legacy
Migración gradual desde sistema antiguo a Odoo con sincronización temporal.
- • Script cron cada hora sincroniza cambios
- • Comparar timestamps de última modificación
- • Actualizar solo registros modificados
- • Evitar duplicados con external_id
- • Log detallado de sincronizaciones
Preguntas Frecuentes
¿Qué es la API de Odoo Online y para qué sirve?
La API de Odoo Online es una interfaz REST que permite a aplicaciones externas interactuar con tu instancia de Odoo sin necesidad de acceder directamente a la interfaz web. Sirve para: crear integraciones con otros sistemas (CRM, e-commerce, ERP externos), automatizar procesos empresariales, desarrollar aplicaciones móviles o web personalizadas que consuman datos de Odoo, sincronizar información en tiempo real entre sistemas, y crear dashboards o reportes externos con datos de Odoo.
¿Necesito Odoo Enterprise para usar la API o funciona en Community?
La API XML-RPC funciona tanto en Odoo Community como Enterprise. Sin embargo, la API REST moderna y optimizada (introducida en versiones recientes) está disponible principalmente en Odoo Enterprise y Odoo Online. Para proyectos comerciales serios, se recomienda Odoo Enterprise por mejor rendimiento, seguridad y soporte oficial de la API.
¿Cómo autenticarme en la API de Odoo Online de forma segura?
Odoo Online utiliza autenticación por API Keys (tokens) en lugar de contraseñas. Para crear una API Key: 1) Accede a Odoo como usuario, 2) Ve a Preferencias → Seguridad de la cuenta, 3) Genera una nueva API Key con descripción, 4) Copia el token (se muestra solo una vez), 5) Usa este token en lugar de contraseña en las llamadas API. NUNCA compartas API Keys ni las incluyas en código público. Rota las keys periódicamente.
¿Qué lenguajes de programación puedo usar con la API de Odoo?
La API de Odoo es agnóstica al lenguaje. Los más utilizados son: Python (con biblioteca odoorpc o requests), JavaScript/Node.js (con axios o fetch), PHP (con cURL o Guzzle), Java (con HttpClient), C# (.NET con HttpClient), Ruby (con Faraday). Cualquier lenguaje que pueda hacer peticiones HTTP POST/GET puede interactuar con la API de Odoo.
¿Hay límites de llamadas (rate limits) en la API de Odoo Online?
Sí, Odoo Online implementa rate limits para proteger el rendimiento: límite de ~600 llamadas por hora por usuario/IP (puede variar según plan), timeout de 60 segundos por petición, límite de tamaño de respuesta de ~10MB. Para aplicaciones intensivas, considera implementar caché local, batch processing (procesar múltiples registros en una llamada), y optimizar consultas para reducir número de llamadas.
¿Necesito ayuda profesional para integrar la API de Odoo?
Depende de la complejidad. Integraciones simples (consultar productos, crear clientes) son factibles con conocimientos básicos de programación. Integraciones complejas (sincronización bidireccional en tiempo real, manejo de transacciones, transformación de datos complejos) requieren experiencia tanto en desarrollo API como conocimiento profundo de la estructura de datos de Odoo. Un error en integración puede causar duplicados, pérdida de datos o inconsistencias. Se recomienda consultoría experta para integraciones críticas.
¿Necesitas Ayuda con Integraciones de Odoo API?
Nuestro equipo de desarrolladores expertos puede crear integraciones robustas, automatizaciones complejas y aplicaciones personalizadas con Odoo API.