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¶
API Key (Recommended)¶
Bearer Token (OAuth2)¶
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 |
Related Documentation¶
- API Reference - Complete API documentation
- Authentication - API authentication methods
- CRM API - CRM lead endpoints
- Sales API - Sales order endpoints
- Helpdesk API - Helpdesk ticket endpoints