Integración - Crear comprobantes electrónicos (01, 03, 07 y 08)
Proyecto API
📘 API – Emisión de Comprobantes Electrónicos
Versión: 1.0
Base URL:https://tuservidor.com
Recurso principal:/api/comprobantes/crear
Método:POST
Tipo de autenticación:Bearer Token o auth='user' (según la configuración de Odoo)
Formato de envío:application/json o text/yaml
Formato de respuesta:JSON
Autenticación y Seguridad
- Autenticación requerida: Sí (
auth='user') - Método de autenticación: Los usuarios deben autenticarse a través del endpoint
/web/session/authenticatepara obtener una sesión válida.
Pasos para Autenticarse
Autenticarse en Odoo:
- Realiza una solicitud
POSTal endpoint/web/session/authenticatecon las credenciales del usuario. - Obtendrás una cookie de sesión (
session_id).
- Realiza una solicitud
Usar la Sesión en las Solicitudes:
- Incluye el
session_iden las cookies de la solicitud.
- Incluye el
Endpoint: /api/comprobantes/crear
- Método HTTP:
POST - Tipo de contenido:
application/json - Autenticación: Requerida (
auth='user') - Descripción: Permite dar de alta a un cliente en el sistema Odoo.
Parámetros principales
tipo_doc: Tipo de documento a emitir.
Valores permitidos:FAC(Factura) oBOL(Boleta).serie: Serie del comprobante (por ejemplo
F001oB001).cliente_tipo_de_documento: Tipo de documento del cliente.
Ejemplo:6para RUC,1para DNI o0para sin documento.cliente_numero_de_documento: Número de RUC o DNI del cliente.
cliente_denominacion: Razón social o nombre del cliente.
cliente_direccion, cliente_departamento, cliente_provincia, cliente_distrito:
Datos de ubicación del cliente.cliente_email / cliente_celular: Datos de contacto opcionales.
fecha_de_emision: Fecha de emisión del comprobante en formato
DD/MM/YYYY.tipo_operacion_comprobante:
Define el tipo de operación:0101= Venta interna,0200= Exportación (bienes y servicios).validar_comprobante:
"1", el comprobante se valida automáticamente."0", se crea en estado borrador.items:
Lista de productos o servicios incluidos en el comprobante.
Cada item debe contener:producto: Código o nombre del producto.descripcion: Descripción del producto o servicio.cantidad: Cantidad vendida.precio_unitario: Precio unitario (sin o con IGV según tipo_igv).tipo_impuesto: Tipo de afectación IGV (1=Gravado,2=Exonerado,4=Inafecto).tipo_igv:0si el precio no incluye IGV,1si lo incluye.porcentaje_igv: Generalmente18.
Ejemplo de Solicitud
Paso 1: Autenticarse
Solicitud:
httpPOST /web/session/authenticate HTTP/1.1 Content-Type: application/json { "jsonrpc": "2.0", "method": "call", "params": { "db": "nombre_de_la_base_de_datos", "login": "usuario@example.com", "password": "tu_contraseña" }, "id": 1 }
Respuesta:
json
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"uid": 2,
"user_context": {...},
"company_id": 1,
"partner_id": 3,
"session_id": "session_id_obtenido"
}
}
Paso 2: Invocar el Endpoint /cliente_alta
Solicitud:
http"tipo_doc": "FAC", "serie": "F001", "cliente_tipo_de_documento": "6", "cliente_numero_de_documento": "20987654321", "cliente_denominacion": "EMPRESA DEMO S.A.C.", "cliente_direccion": "AV. ABC 123, LIMA", "cliente_departamento": "LIMA", "cliente_provincia": "LIMA", "cliente_distrito": "SAN MARTÍN DE PORRES", "cliente_pais": "Perú", "cliente_email": "ventas@demo.com", "cliente_celular": "999888777", "fecha_de_emision": "28/10/2025", "tipo_operacion_comprobante": "1", "validar_comprobante": "1", "items": [ { "producto": "SERV001", "descripcion": "SERVICIO DE CONSULTORÍA", "cantidad": 1, "precio_unitario": 118.00, "tipo_impuesto": "1", "tipo_igv": "1", "porcentaje_igv": "18" } ] }POST /cliente_alta HTTP/1.1 Content-Type: application/json Cookie: session_id=session_id_obtenidojson{
Respuestas
Éxito (200 OK)
El cliente ha sido dado de alta correctamente.
Ejemplo de respuesta:
json{ "status": 200, "message": "Comprobante F001-123 creado y validado correctamente.", "response": { "data": { "tipo_doc": "FAC", "serie": "F001", "numero": "123", "base_imponible": 100.00, "igv": 18.00, "total": 118.00, "url_pdf": "url" } } }
Error de validación (400 Bad Request)
Faltan campos requeridos o hay errores en los datos proporcionados.
Ejemplo de respuesta:
json
{
"status": 400,
"message": "Falta el campo obligatorio 'cliente_numero_de_documento'.",
"response": {
"data": null
}
}
Códigos de respuesta
200:El comprobante fue creado correctamente.
400: Error de validación. Falta un campo o el formato es incorrecto.
404: Recurso no encontrado (cliente, diario o producto).
409: El comprobante ya se encuentra registrado.
500: Error interno del servidor o validación fallida en Odoo.
Proceso Detallado de Autenticación
1. Autenticarse en Odoo
Solicitud de Autenticación:
httpPOST /web/session/authenticate HTTP/1.1 Content-Type: application/json { "jsonrpc": "2.0", "method": "call", "params": { "db": "nombre_de_la_base_de_datos", "login": "usuario@example.com", "password": "tu_contraseña" }, "id": 1 }
Respuesta Exitosa:
json
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"uid": 2,
"user_context": {...},
"company_id": 1,
"partner_id": 3,
"session_id": "session_id_obtenido"
}
}
2. Realizar Solicitudes a los Endpoints Protegidos
Incluye el session_id en las cookies.
Consideraciones de Seguridad
- Sesiones: Las sesiones tienen una duración limitada. Si la sesión expira, debes volver a autenticarse.
- Almacenamiento Seguro: Asegúrate de almacenar de forma segura el
session_iden tu aplicación cliente. - Comunicación Segura: Utiliza siempre HTTPS para las comunicaciones con el servidor Odoo para proteger los datos en tránsito.