Webhook tool

NetSuite AI voice agents that answer order status calls

A Cartesia agent reads NetSuite order status by order number, finds the customer, and opens a support case through a small service of yours.

Order desk agent

Answers order status questions and opens support cases in NetSuite.

Instructions

Find the customer from the caller's number, or ask for the company name. For order questions, ask for the order number and read back the status. If something is damaged, missing or wrong, create a case with a short title and the details. Transfer to support if the caller asks for a person.

Handoff
Customer support

Connected tools

  • Get order statusWebhook
  • Find customerWebhook
  • Create caseWebhook
  • Transfer to supportTransfer

What a Oracle NetSuite AI voice agent can do

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

The caller reads out the sales order number. Your service runs a SuiteQL query and returns the order's status and ship date.

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

Get order status

Returns a sales order's status by order number.

Show the JSON definition
get_order_status
{
  "type": "webhook",
  "name": "get_order_status",
  "description": "Looks up a NetSuite sales order by its order number and returns the status and ship date.",
  "pre_tool_speech": "auto",
  "execution_mode": "immediate",
  "response_timeout_secs": 20,
  "api_schema": {
    "url": "https://api.your-company.com/netsuite/orders/{order_number}",
    "method": "GET",
    "path_params_schema": {
      "order_number": {
        "type": "string",
        "description": "The sales order number the caller reads out, such as SO-10482."
      }
    },
    "authentication": {
      "mode": "bearer",
      "token": {
        "type": "secret",
        "secret_value": "YOUR_SERVICE_TOKEN"
      }
    }
  }
}

Webhook

Find customer

Finds the customer by phone number or company name.

Show the JSON definition
find_customer
{
  "type": "webhook",
  "name": "find_customer",
  "description": "Finds the NetSuite customer by the caller's phone number, or by company name if the caller gives one. Returns the internal ID and name.",
  "pre_tool_speech": "auto",
  "execution_mode": "immediate",
  "response_timeout_secs": 20,
  "api_schema": {
    "url": "https://api.your-company.com/netsuite/customers",
    "method": "GET",
    "query_params_schema": {
      "properties": {
        "phone": {
          "type": "string",
          "dynamic_variable": "system__caller_id"
        },
        "company_name": {
          "type": "string",
          "description": "The company name, if the phone number found nothing."
        }
      }
    },
    "authentication": {
      "mode": "bearer",
      "token": {
        "type": "secret",
        "secret_value": "YOUR_SERVICE_TOKEN"
      }
    }
  }
}

Webhook

Create case

Opens a support case on the customer.

Show the JSON definition
create_case
{
  "type": "webhook",
  "name": "create_case",
  "description": "Creates a NetSuite support case for the customer. Returns the case number.",
  "pre_tool_speech": "auto",
  "execution_mode": "immediate",
  "response_timeout_secs": 20,
  "api_schema": {
    "url": "https://api.your-company.com/netsuite/cases",
    "method": "POST",
    "request_body_schema": {
      "type": "object",
      "properties": {
        "customer_id": {
          "type": "string",
          "description": "The internal ID from find_customer."
        },
        "title": {
          "type": "string",
          "description": "A short subject, such as Damaged boxes on SO-10482."
        },
        "details": {
          "type": "string",
          "description": "What the caller described, in two or three sentences."
        }
      },
      "required": [
        "customer_id",
        "title",
        "details"
      ]
    },
    "authentication": {
      "mode": "bearer",
      "token": {
        "type": "secret",
        "secret_value": "YOUR_SERVICE_TOKEN"
      }
    }
  }
}

Transfer

Transfer to support

Cold transfer to customer support.

Show the JSON definition
transfer_to_support
{
  "config": {
    "system_tools": {
      "transfer_to_number": {
        "description": null,
        "pre_tool_speech": "auto",
        "transfers": [
          {
            "destination": {
              "type": "phone",
              "phone_number": "+14155550152"
            },
            "condition": "The caller asks for a person, after any case is created."
          }
        ]
      }
    }
  }
}

Set it up

No native connector. NetSuite's REST web services need OAuth 2.0 or signed token-based requests, so the tools call a small service of yours. Vendor details read in November 2026.

  1. Create the integration record

    In NetSuite, enable OAuth 2.0 and create an integration record with the REST Web Services scope. Give its role Lists > Cases, at least view on Lists > Customers, and view on sales orders.

  2. Run the three endpoints

    Your service sends SuiteQL to POST /services/rest/query/v1/suiteql with the Prefer: transient header for orders and customers, and creates cases with POST /services/rest/record/v1/supportCase.

  3. Add the tools

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

  4. Test on a sandbox account

    Run the calls against a NetSuite sandbox account if you have one, and check the case shows up on the right customer.

Before you build

Why the service in the middle

Token-based authentication signs every request, and OAuth 2.0 access tokens expire after an hour. A webhook tool sends a fixed header, so your service signs or refreshes for it.

Choose OAuth 2.0 for new work

Oracle says that from NetSuite 2027.1 you can't create new token-based integrations for REST web services. Support for existing ones is set to end around 2028.2.

Cases need two permissions

Oracle's docs say the role needs the Lists > Cases permission to use supportCase through REST, and at least view access on Lists > Customers to create one.

SuiteQL for lookups

The q filter on record collections only works on fields marked x-ns-filterable. SuiteQL lets your service match a sales order on its tranid in one query.

Enterprise-grade security

  • HIPAA compliant badge

    HIPAA compliant

  • SOC 2 Type 2 badge

    SOC 2 Type 2

  • GDPR badge

    GDPR

Oracle NetSuite AI voice agent FAQs

Can an AI voice agent check order status in NetSuite?

Yes. The caller reads out the sales order number, and a small service of yours runs a SuiteQL query and returns the order's status and ship date for the agent to read. The service also finds customers and opens support cases. There is no native NetSuite connector.

Can the agent open a NetSuite support case?

Yes, with the right role. Oracle's docs say the role needs Lists > Cases to use supportCase through REST, and at least view on Lists > Customers to create one. Your service posts to /services/rest/record/v1/supportCase with the customer and what the caller described.

Should a NetSuite voice integration use OAuth 2.0 or TBA?

OAuth 2.0. Oracle says that from NetSuite 2027.1 you can't create new token-based integrations for REST web services. OAuth 2.0 access tokens expire after an hour, so your service refreshes them for the agent.

What does a NetSuite voice agent cost to run?

Agents run at $0.03/min, plus LLM usage and telephony. Your NetSuite licenses stay with Oracle. Transfers work only on Twilio and SIP trunk numbers, not on Cartesia numbers, so put the number on Twilio or a SIP trunk if the agent hands callers to staff.

Why does the NetSuite agent need a service in the middle?

NetSuite's REST web services need OAuth 2.0 or signed token-based requests. Token-based authentication signs every request, and OAuth 2.0 access tokens expire after an hour, while a webhook tool sends a fixed header. Your service signs or refreshes for it.

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