Webhook tool

Odoo AI voice agents that log leads in your CRM

A Cartesia agent finds the caller's Odoo contact, creates a CRM lead with what they need, and checks sales orders through Odoo's JSON-2 external API.

Sales desk agent

Finds the caller in Odoo, logs new enquiries as leads and answers order questions.

Instructions

Look up the caller by phone number. For a new enquiry, ask what they need and when, then create a lead with a short description. For an existing order, ask for the order reference and read back the status. Transfer to sales if the caller asks for a person.

Handoff
Sales team

Connected tools

  • Find contactWebhook
  • Create leadWebhook
  • Check orderWebhook
  • Transfer to salesTransfer

What a Odoo AI voice agent can do

Open one to watch a call. The grey lines are the tools the agent calls mid-sentence.

Your service searches res.partner for the caller's phone number, so the agent greets a known customer by name and company.

Tool definitions

Webhook tools go to POST /v1/agents/tools. Transfers are a system tool on the agent. Replace the placeholder values in capitals with your own.

Webhook

Find contact

Finds the caller's Odoo contact by phone number.

Show the JSON definition
find_contact
{
  "type": "webhook",
  "name": "find_contact",
  "description": "Finds the caller's Odoo contact by phone number. Returns the partner ID, name and company, or nothing if there is no match.",
  "pre_tool_speech": "auto",
  "execution_mode": "immediate",
  "response_timeout_secs": 20,
  "api_schema": {
    "url": "https://api.your-company.com/odoo/contacts",
    "method": "GET",
    "query_params_schema": {
      "properties": {
        "phone": {
          "type": "string",
          "dynamic_variable": "system__caller_id"
        }
      }
    },
    "authentication": {
      "mode": "bearer",
      "token": {
        "type": "secret",
        "secret_value": "YOUR_SERVICE_TOKEN"
      }
    }
  }
}

Webhook

Create lead

Creates a CRM lead for the enquiry.

Show the JSON definition
create_lead
{
  "type": "webhook",
  "name": "create_lead",
  "description": "Creates an Odoo CRM lead for this enquiry. Returns the lead ID.",
  "pre_tool_speech": "auto",
  "execution_mode": "immediate",
  "response_timeout_secs": 20,
  "api_schema": {
    "url": "https://api.your-company.com/odoo/leads",
    "method": "POST",
    "request_body_schema": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "A short lead title, such as 12 site cabins for Leipzig."
        },
        "contact_name": {
          "type": "string",
          "description": "The caller's name."
        },
        "partner_id": {
          "type": "string",
          "description": "The partner ID from find_contact, if there was one."
        },
        "description": {
          "type": "string",
          "description": "What the caller needs and by when, in two or three sentences."
        },
        "phone": {
          "type": "string",
          "dynamic_variable": "system__caller_id"
        }
      },
      "required": [
        "title",
        "description"
      ]
    },
    "authentication": {
      "mode": "bearer",
      "token": {
        "type": "secret",
        "secret_value": "YOUR_SERVICE_TOKEN"
      }
    }
  }
}

Webhook

Check order

Returns a sales order's status by reference.

Show the JSON definition
check_order
{
  "type": "webhook",
  "name": "check_order",
  "description": "Looks up an Odoo sales order by its reference and returns the status and order date.",
  "pre_tool_speech": "auto",
  "execution_mode": "immediate",
  "response_timeout_secs": 20,
  "api_schema": {
    "url": "https://api.your-company.com/odoo/orders/{order_ref}",
    "method": "GET",
    "path_params_schema": {
      "order_ref": {
        "type": "string",
        "description": "The order reference the caller reads out, such as S00042."
      }
    },
    "authentication": {
      "mode": "bearer",
      "token": {
        "type": "secret",
        "secret_value": "YOUR_SERVICE_TOKEN"
      }
    }
  }
}

Transfer

Transfer to sales

Cold transfer to a salesperson.

Show the JSON definition
transfer_to_sales
{
  "config": {
    "system_tools": {
      "transfer_to_number": {
        "description": null,
        "pre_tool_speech": "auto",
        "transfers": [
          {
            "destination": {
              "type": "phone",
              "phone_number": "+14155550163"
            },
            "condition": "The caller asks to speak with a person, after the lead is created."
          }
        ]
      }
    }
  }
}

Set it up

No native connector. The tools call a small service of yours, which holds an Odoo API key and calls Odoo's JSON-2 external API. Vendor details read in November 2026.

  1. Create an API key

    In Odoo, sign in as an integration user with Sales and CRM access and open Preferences > Account Security > New API Key. Odoo asks for a description and a duration.

  2. Run the three endpoints

    Your service posts to /json/2/res.partner/search_read, /json/2/crm.lead/create and /json/2/sale.order/search_read, with the key as a bearer token. If your server hosts several databases, name yours in X-Odoo-Database.

  3. Add the tools

    Point the tools at your service with a bearer secret. The phone fields read system__caller_id, so the agent never asks for the number.

  4. Test on a copy of your database

    Run the calls against a duplicate or staging database and check the lead lands in the right sales team.

Before you build

API access needs the Custom plan

Odoo's docs say the external API is only available on Custom pricing plans. One App Free and Standard plans can't use it.

Why the service in the middle

JSON-2 searches take a domain, a nested list of conditions, which a webhook tool's schema can't fill cleanly. Your service builds it and returns only the fields the agent needs.

Rotate the key

Odoo API keys last at most three months, so the integration stops when the key expires. Put the expiry date on a calendar, or have your service generate the next key in time.

XML-RPC is on its way out

Odoo plans to remove /xmlrpc and /jsonrpc in Odoo 22 (fall 2028) and Odoo Online 21.1 (winter 2027). Build new integrations on JSON-2.

Enterprise-grade security

  • HIPAA compliant badge

    HIPAA compliant

  • SOC 2 Type 2 badge

    SOC 2 Type 2

  • GDPR badge

    GDPR

Odoo AI voice agent FAQs

Can an AI voice agent connect to Odoo?

Yes, through Odoo's JSON-2 external API. A Cartesia agent calls a small service of yours that holds an Odoo API key, finds the caller's contact by phone number, creates CRM leads and checks sales orders. There is no native Odoo connector or Odoo app to install.

Which Odoo plan includes API access?

Custom. Odoo's docs say the external API is only available on Custom pricing plans, so One App Free and Standard plans can't use it. Check your plan before you build the service.

Can the agent create CRM leads in Odoo from calls?

Yes. New enquiries become crm.lead records with the caller's name, phone and a short description, through /json/2/crm.lead/create. The phone field reads the caller ID, so the agent never asks for the number.

Does it work with older Odoo versions?

Yes, through XML-RPC or JSON-RPC. The JSON-2 API arrived in Odoo 19. On older versions your service can call the same models the old way, and the tools stay the same. Odoo plans to remove /xmlrpc and /jsonrpc in Odoo 22 and Odoo Online 21.1.

Do Odoo API keys expire?

Yes, after three months at most, and the integration stops when the key does. Put the expiry date on a calendar, or have your service create the next key in time.

What does an Odoo voice agent cost to run?

Agents run at $0.03/min, plus LLM usage and telephony. Odoo bills the Custom plan that API access needs. Transfers only work on Twilio and SIP trunk calls, so put the number on Twilio or a SIP trunk if the agent hands callers to staff.

Get started today

Talk to an expert.

Connect with a member of our team and learn how Cartesia can help you build world-class voice experiences.

Contact Sales

Start building.

Access our models via API and bring a voice agent into production in minutes.

Try Cartesia