Announcement! Version 0.10 is out now! Check out the release notes.

On this page
This is an older version of the docs. View the latest

Odoo Integration

Odoo's external API is JSON-RPC, with the database, user and API key in the request body. Portway does not modify request bodies. Clients send their own Odoo credentials. Portway controls which clients reach Odoo.

Endpoint ​

endpoints/Proxy/Odoo/Rpc/entity.json
json
{
  "Url": "http://odoo.internal:8069/jsonrpc",
  "Methods": ["POST"],
  "AllowedEnvironments": ["prod"]
}

No environment headers are required. Each integration uses its own Odoo user and API key (user preferences, Account Security); Odoo access rights limit what it can read and write.

Requests ​

The authenticate call returns the user id:

http
POST /api/prod/Odoo/Rpc
Authorization: Bearer YOUR_PORTWAY_TOKEN
Content-Type: application/json

{
  "jsonrpc": "2.0",
  "method": "call",
  "params": {
    "service": "common",
    "method": "authenticate",
    "args": ["mydb", "integration@company.com", "ODOO_API_KEY", {}]
  }
}

Data calls use execute_kw with that id:

http
POST /api/prod/Odoo/Rpc
Authorization: Bearer YOUR_PORTWAY_TOKEN
Content-Type: application/json

{
  "jsonrpc": "2.0",
  "method": "call",
  "params": {
    "service": "object",
    "method": "execute_kw",
    "args": [
      "mydb", 2, "ODOO_API_KEY",
      "res.partner", "search_read",
      [[["is_company", "=", true]]],
      { "fields": ["name", "email"], "limit": 25 }
    ]
  }
}

Limitations ​

  • Request bodies contain Odoo API keys. IncludeRequestBodies in traffic logging stays off for this endpoint.
  • All calls use one endpoint; model access is limited in Odoo, not per Portway endpoint.

Troubleshooting ​

Symptom Check
401 from Portway Token scope for the endpoint and environment
odoo.exceptions.AccessDenied Database, login and API key in the body
result: false on authenticate Database name
Access errors on a model Access rights and record rules of the Odoo user
Last updated: 2026-10-29