{"id":"8da6f13f-c47d-45c6-bbb0-d87df049d087","shortId":"aefBcR","kind":"skill","title":"odoo-rpc-api","tagline":"Expert on Odoo's external JSON-RPC and XML-RPC APIs. Covers authentication, model calls, record CRUD, and real-world integration examples in Python, JavaScript, and curl.","description":"# Odoo RPC API\n\n## Overview\n\nOdoo exposes a powerful external API via JSON-RPC and XML-RPC, allowing any external application to read, create, update, and delete records. This skill guides you through authenticating, calling models, and building robust integrations.\n\n## When to Use This Skill\n\n- Connecting an external app (e.g., Django, Node.js, a mobile app) to Odoo.\n- Running automated scripts to import/export data from Odoo.\n- Building a middleware layer between Odoo and a third-party platform.\n- Debugging API authentication or permission errors.\n\n## How It Works\n\n1. **Activate**: Mention `@odoo-rpc-api` and describe the integration you need.\n2. **Generate**: Get copy-paste ready RPC call code in Python, JavaScript, or curl.\n3. **Debug**: Paste an error and get a diagnosis with a corrected call.\n\n## Examples\n\n### Example 1: Authenticate and Read Records (Python)\n\n```python\nimport xmlrpc.client\n\nurl = 'https://myodoo.example.com'\ndb = 'my_database'\nusername = 'admin'\npassword = 'my_api_key'  # Use API keys, not passwords, in production\n\n# Step 1: Authenticate\ncommon = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common')\nuid = common.authenticate(db, username, password, {})\nprint(f\"Authenticated as UID: {uid}\")\n\n# Step 2: Call models\nmodels = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object')\n\n# Search confirmed sale orders\norders = models.execute_kw(db, uid, password,\n    'sale.order', 'search_read',\n    [[['state', '=', 'sale']]],\n    {'fields': ['name', 'partner_id', 'amount_total'], 'limit': 10}\n)\nfor order in orders:\n    print(order)\n```\n\n### Example 2: Create a Record (Python)\n\n```python\nnew_partner_id = models.execute_kw(db, uid, password,\n    'res.partner', 'create',\n    [{'name': 'Acme Corp', 'email': 'info@acme.com', 'is_company': True}]\n)\nprint(f\"Created partner ID: {new_partner_id}\")\n```\n\n### Example 3: JSON-RPC via curl\n\n```bash\ncurl -X POST https://myodoo.example.com/web/dataset/call_kw \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"jsonrpc\": \"2.0\",\n    \"method\": \"call\",\n    \"id\": 1,\n    \"params\": {\n      \"model\": \"res.partner\",\n      \"method\": \"search_read\",\n      \"args\": [[[\"is_company\", \"=\", true]]],\n      \"kwargs\": {\"fields\": [\"name\", \"email\"], \"limit\": 5}\n    }\n  }'\n# Note: \"id\" is required by the JSON-RPC 2.0 spec to correlate responses.\n# Odoo 16+ also supports the /web/dataset/call_kw endpoint but\n# prefer /web/dataset/call_kw for model method calls.\n```\n\n## Best Practices\n\n- ✅ **Do:** Use **API Keys** (Settings → Technical → API Keys) instead of passwords — available from Odoo 14+.\n- ✅ **Do:** Use `search_read` instead of `search` + `read` to reduce network round trips.\n- ✅ **Do:** Always handle connection errors and implement retry logic with exponential backoff in production.\n- ✅ **Do:** Store credentials in environment variables or a secrets manager (e.g., AWS Secrets Manager, `.env` file).\n- ❌ **Don't:** Hardcode passwords or API keys directly in scripts — rotate them and use env vars.\n- ❌ **Don't:** Call the API in a tight loop without batching — bulk operations reduce server load significantly.\n- ❌ **Don't:** Use the master admin password for API integrations — create a dedicated integration user with minimum required permissions.\n\n## Limitations\n\n- Does not cover **OAuth2 or session-cookie-based authentication** — the examples use API key (token) auth only.\n- **Rate limiting** is not built into the Odoo XMLRPC layer; you must implement throttling client-side.\n- The XML-RPC endpoint (`/xmlrpc/2/`) does not support file uploads — use the REST-based `ir.attachment` model via JSON-RPC for binary data.\n- Odoo.sh (SaaS) may block some API calls depending on plan; verify your subscription supports external API access.","tags":["odoo","rpc","api","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-odoo-rpc-api","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/odoo-rpc-api","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34666 github stars · SKILL.md body (3,717 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T06:51:41.786Z","embedding":null,"createdAt":"2026-04-18T21:41:53.126Z","updatedAt":"2026-04-23T06:51:41.786Z","lastSeenAt":"2026-04-23T06:51:41.786Z","tsv":"'/web/dataset/call_kw':295,343,347 '/xmlrpc/2':505 '/xmlrpc/2/common':199 '/xmlrpc/2/object':219 '1':122,165,193,307 '10':242 '14':368 '16':339 '2':135,212,250 '2.0':303,333 '3':150,283 '5':323 'access':541 'acm':267 'activ':123 'admin':180,450 'allow':53 'also':340 'alway':383 'amount':239 'api':4,17,37,44,114,128,183,186,356,360,417,432,453,478,530,540 'app':84,90 'applic':56 'application/json':300 'arg':314 'auth':481 'authent':19,69,115,166,194,207,474 'autom':94 'avail':365 'aw':407 'backoff':393 'base':473,515 'bash':289 'batch':438 'best':352 'binari':523 'block':528 'build':73,101 'built':487 'bulk':439 'call':21,70,143,162,213,305,351,430,531 'client':498 'client-sid':497 'code':144 'common':195 'common.authenticate':201 'compani':272,316 'confirm':221 'connect':81,385 'content':298 'content-typ':297 'cooki':472 'copi':139 'copy-past':138 'corp':268 'correct':161 'correl':336 'cover':18,467 'creat':59,251,265,276,455 'credenti':398 'crud':23 'curl':34,149,288,290 'd':301 'data':98,524 'databas':178 'db':176,202,227,261 'debug':113,151 'dedic':457 'delet':62 'depend':532 'describ':130 'diagnosi':158 'direct':419 'django':86 'e.g':85,406 'email':269,321 'endpoint':344,504 'env':410,426 'environ':400 'error':118,154,386 'exampl':29,163,164,249,282,476 'expert':5 'exponenti':392 'expos':40 'extern':9,43,55,83,539 'f':197,206,217,275 'field':235,319 'file':411,509 'generat':136 'get':137,156 'guid':66 'h':296 'handl':384 'hardcod':414 'id':238,258,278,281,306,325 'implement':388,495 'import':172 'import/export':97 'info@acme.com':270 'instead':362,373 'integr':28,75,132,454,458 'ir.attachment':516 'javascript':32,147 'json':11,47,285,331,520 'json-rpc':10,46,284,330,519 'jsonrpc':302 'key':184,187,357,361,418,479 'kw':226,260 'kwarg':318 'layer':104,492 'limit':241,322,464,484 'load':443 'logic':390 'loop':436 'manag':405,409 'master':449 'may':527 'mention':124 'method':304,311,350 'middlewar':103 'minimum':461 'mobil':89 'model':20,71,214,215,309,349,517 'models.execute':225,259 'must':494 'myodoo.example.com':175,294 'myodoo.example.com/web/dataset/call_kw':293 'name':236,266,320 'need':134 'network':379 'new':256,279 'node.js':87 'note':324 'oauth2':468 'odoo':2,7,35,39,92,100,106,126,338,367,490 'odoo-rpc-api':1,125 'odoo.sh':525 'oper':440 'order':223,224,244,246,248 'overview':38 'param':308 'parti':111 'partner':237,257,277,280 'password':181,189,204,229,263,364,415,451 'past':140,152 'permiss':117,463 'plan':534 'platform':112 'post':292 'power':42 'practic':353 'prefer':346 'print':205,247,274 'product':191,395 'python':31,146,170,171,254,255 'rate':483 'read':58,168,232,313,372,376 'readi':141 'real':26 'real-world':25 'record':22,63,169,253 'reduc':378,441 'requir':327,462 'res.partner':264,310 'respons':337 'rest':514 'rest-bas':513 'retri':389 'robust':74 'rotat':422 'round':380 'rpc':3,12,16,36,48,52,127,142,286,332,503,521 'run':93 'saa':526 'sale':222,234 'sale.order':230 'script':95,421 'search':220,231,312,371,375 'secret':404,408 'server':442 'session':471 'session-cookie-bas':470 'set':358 'side':499 'signific':444 'skill':65,80 'skill-odoo-rpc-api' 'source-sickn33' 'spec':334 'state':233 'step':192,211 'store':397 'subscript':537 'support':341,508,538 'technic':359 'third':110 'third-parti':109 'throttl':496 'tight':435 'token':480 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':240 'trip':381 'true':273,317 'type':299 'uid':200,209,210,228,262 'updat':60 'upload':510 'url':174,198,218 'use':78,185,355,370,425,447,477,511 'user':459 'usernam':179,203 'var':427 'variabl':401 'verifi':535 'via':45,287,518 'without':437 'work':121 'world':27 'x':291 'xml':15,51,502 'xml-rpc':14,50,501 'xmlrpc':491 'xmlrpc.client':173 'xmlrpc.client.serverproxy':196,216","prices":[{"id":"2c1bdcd3-ca67-40a2-a83e-2517c0c8c60e","listingId":"8da6f13f-c47d-45c6-bbb0-d87df049d087","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:41:53.126Z"}],"sources":[{"listingId":"8da6f13f-c47d-45c6-bbb0-d87df049d087","source":"github","sourceId":"sickn33/antigravity-awesome-skills/odoo-rpc-api","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/odoo-rpc-api","isPrimary":false,"firstSeenAt":"2026-04-18T21:41:53.126Z","lastSeenAt":"2026-04-23T06:51:41.786Z"}],"details":{"listingId":"8da6f13f-c47d-45c6-bbb0-d87df049d087","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"odoo-rpc-api","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34666,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-23T06:41:03Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"bf888807f6088928532af6f777644da7b8653344","skill_md_path":"skills/odoo-rpc-api/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/odoo-rpc-api"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"odoo-rpc-api","description":"Expert on Odoo's external JSON-RPC and XML-RPC APIs. Covers authentication, model calls, record CRUD, and real-world integration examples in Python, JavaScript, and curl."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/odoo-rpc-api"},"updatedAt":"2026-04-23T06:51:41.786Z"}}