Skip to content

Code Examples

This section provides practical code examples for integrating with the Odoo 15 REST API and building custom integrations.


Overview

Example Language Description
Helpdesk Python Python Complete helpdesk ticket management example

Quick API Example

Python - Create a CRM Lead

import requests

# Configuration
ODOO_URL = "https://erp.example.com"
API_KEY = "your-api-key"

# Create lead
response = requests.post(
    f"{ODOO_URL}/restapi/1.0/object/crm.lead",
    headers={
        "X-API-Key": API_KEY,
        "Content-Type": "application/json"
    },
    json={
        "name": "New Lead from Website",
        "contact_name": "John Doe",
        "email_from": "john@example.com",
        "phone": "+1 555-123-4567",
        "description": "Interested in window treatments"
    }
)

if response.status_code == 201:
    lead = response.json()
    print(f"Created lead: {lead['id']}")
else:
    print(f"Error: {response.status_code}")

cURL - List Sales Orders

curl -X GET "https://erp.example.com/restapi/1.0/object/sale.order" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -G \
  --data-urlencode "domain=[('state','=','sale')]" \
  --data-urlencode "fields=['name','partner_id','amount_total']" \
  --data-urlencode "limit=10" \
  --data-urlencode "order=create_date desc"

JavaScript - Fetch Partners

const ODOO_URL = 'https://erp.example.com';
const API_KEY = 'your-api-key';

async function getPartners() {
    const response = await fetch(
        `${ODOO_URL}/restapi/1.0/object/res.partner?limit=10`,
        {
            headers: {
                'X-API-Key': API_KEY,
                'Content-Type': 'application/json'
            }
        }
    );

    if (response.ok) {
        const partners = await response.json();
        console.log('Partners:', partners);
        return partners;
    } else {
        throw new Error(`HTTP ${response.status}`);
    }
}

Authentication Methods

headers = {
    "X-API-Key": "your-api-key",
    "Content-Type": "application/json"
}

Bearer Token (OAuth2)

headers = {
    "Authorization": "Bearer your-access-token",
    "Content-Type": "application/json"
}

See API Authentication for complete authentication documentation.


Common Patterns

Error Handling

import requests
from requests.exceptions import RequestException

def safe_api_call(url, headers, json_data=None):
    """Make API call with proper error handling."""
    try:
        if json_data:
            response = requests.post(url, headers=headers, json=json_data, timeout=30)
        else:
            response = requests.get(url, headers=headers, timeout=30)

        response.raise_for_status()
        return response.json()

    except requests.exceptions.Timeout:
        print("Request timed out")
        return None
    except requests.exceptions.HTTPError as e:
        print(f"HTTP error: {e.response.status_code}")
        print(f"Response: {e.response.text}")
        return None
    except RequestException as e:
        print(f"Request failed: {e}")
        return None

Pagination

def get_all_records(model, domain=None, fields=None, limit=100):
    """Fetch all records with pagination."""
    records = []
    offset = 0

    while True:
        params = {
            "limit": limit,
            "offset": offset
        }
        if domain:
            params["domain"] = domain
        if fields:
            params["fields"] = fields

        response = requests.get(
            f"{ODOO_URL}/restapi/1.0/object/{model}",
            headers=headers,
            params=params
        )

        batch = response.json()
        if not batch:
            break

        records.extend(batch)
        offset += limit

        if len(batch) < limit:
            break

    return records

Available Examples

Guide Description
Helpdesk Python Complete Python example for helpdesk ticket CRUD operations