Integration Guides
CRM IntegrationMay 2026 · 7 min read

Bayworks + Salesforce Automotive Cloud

Bayworks connects to Salesforce Automotive Cloud via the REST SObject API to read vehicle records, work orders, and service appointments — so your AI service agent works from the same customer data your CRM holds.

Overview

Salesforce Automotive Cloud is an industry-specific CRM layer built on the Salesforce Platform. It extends the standard Salesforce data model with automotive-specific objects — Vehicle, WorkOrder, ServiceAppointment — that map directly to the workflows your service department runs every day.

When Bayworks connects to your Salesforce org, it can read customer records, vehicle history, open work orders, and booked appointments in real time — and write new service appointments back into Salesforce when customers book through Bayworks. Your CRM stays the system of record. Bayworks reads from it and writes to it; it doesn't maintain a parallel copy.

The integration uses Salesforce's standard REST API — the same API your other connected apps use. No custom Apex, no managed packages beyond the Automotive Cloud license itself.

How it works

Bayworks authenticates with your Salesforce org using a Connected App configured with the OAuth 2.0 Client Credentials flow — the server-to-server pattern Salesforce recommends for system integrations that don't require a user to log in. Once authenticated, Bayworks queries the REST SObject API on demand.

token request
POST https://<your-org>.my.salesforce.com/services/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=<connected_app_id>
&client_secret=<connected_app_secret>
token response
{
  "access_token": "00D3a000004iV7s!...",
  "instance_url": "https://yourorg.my.salesforce.com",
  "token_type": "Bearer",
  "scope": "api"
}

The instance_url in the token response is the base for all subsequent API calls. Bayworks stores it per-org — so multi-org dealership groups route correctly without manual configuration.

Note

Queries happen in real time, on demand. Bayworks does not cache or store a copy of your Salesforce data. When a customer asks about their vehicle or service appointment, Bayworks fetches it fresh at that moment and discards the response once the conversation answer is generated.

The data flow for a customer interaction:

  • Customer sends a message to Bayworks (text, phone, or chat)
  • Bayworks identifies the intent — e.g., "what's the status on my car?" or "I need to book a service appointment"
  • Bayworks queries the relevant Salesforce SObject via the REST API
  • The response is parsed and surfaced to the customer in plain language, within the same conversation

The data model

Salesforce Automotive Cloud adds three objects that Bayworks reads for service workflows. These are standard Salesforce objects — they behave like any other SObject and are queryable through the same REST API endpoints.

Vehicle

The Vehicle object stores the physical asset — VIN, make, model, year, and current mileage. It links to an Account or Contact as the owner. Bayworks uses it to identify which vehicle a customer is asking about and to pre-populate work order details.

WorkOrder

WorkOrder is Salesforce's repair order equivalent. It tracks the work being performed: subject, status, assigned technician, labor lines, parts, estimated duration, and promise time. Bayworks reads open work orders to answer mid-service status questions.

ServiceAppointment

ServiceAppointment represents a booked service slot. It links to a WorkOrder (or a parent record directly) and carries the scheduled start and end times, status, and the assigned service resource. Bayworks creates ServiceAppointment records when customers book through the AI agent.

Tip

If your org uses Salesforce Field Service in addition to Automotive Cloud, WorkOrder and ServiceAppointment are shared objects. Your existing Field Service configuration — service territories, resource skills, operating hours — carries over directly into Bayworks scheduling.

What Bayworks surfaces

With Salesforce Automotive Cloud connected, Bayworks can handle the following customer interactions without advisor involvement. Each capability maps to a specific REST API operation.

Vehicle & customer lookup

When a customer contacts Bayworks, it looks up their vehicle record by VIN or by linking through the customer's Contact record. This gives Bayworks the vehicle context needed to answer service questions accurately.

GET vehicle by VIN (SOQL query)
GET https://<instance>.my.salesforce.com/services/data/v66.0/query
  ?q=SELECT+Id,Name,VehicleIdentificationNumber,Make,Model,Year,CurrentMileage
     +FROM+Vehicle
     +WHERE+VehicleIdentificationNumber='1HGBH41JXMN109186'
response
{
  "totalSize": 1,
  "done": true,
  "records": [
    {
      "Id": "0vC3a000000CaAbEAK",
      "Name": "2022 Honda Civic",
      "VehicleIdentificationNumber": "1HGBH41JXMN109186",
      "Make": "Honda",
      "Model": "Civic",
      "Year": 2022,
      "CurrentMileage": 34200
    }
  ]
}

Repair order (WorkOrder) status

Customers asking for a mid-service update trigger a WorkOrder lookup. Bayworks reads the current status, the work being performed, and the promise time — and translates Salesforce's status picklist values into plain language for the customer.

GET work order
GET https://<instance>.my.salesforce.com/services/data/v66.0/sobjects/WorkOrder/0WO3a000000CaAbEAK
response (trimmed)
{
  "Id": "0WO3a000000CaAbEAK",
  "WorkOrderNumber": "WO-00001234",
  "Status": "In Progress",
  "Subject": "Brake inspection — front axle",
  "Duration": 2.5,
  "DurationType": "Hours",
  "StartDate": "2026-05-23T09:00:00.000Z",
  "EndDate": "2026-05-23T11:30:00.000Z",
  "Description": "Customer reports grinding noise when braking"
}

Note

Salesforce WorkOrder statuses are configurable picklist values per org. Bayworks maps your org's status values to plain language during onboarding — so "In Progress," "New," or whatever your team uses all resolve to clear customer-facing language.

Appointment scheduling

When a customer books a service appointment through Bayworks, it first checks available slots using Salesforce's Scheduler API, then writes a ServiceAppointment record back into your org. The appointment is visible to your advisors in Salesforce immediately — no sync delay, no manual entry.

GET available slots
GET https://<instance>.my.salesforce.com/services/data/v66.0/scheduling/getAppointmentSlots
POST service appointment
POST https://<instance>.my.salesforce.com/services/data/v66.0/sobjects/ServiceAppointment
request body
{
  "ParentRecordId": "0WO3a000000CaAbEAK",
  "SchedStartTime": "2026-05-27T09:00:00.000Z",
  "SchedEndTime": "2026-05-27T11:30:00.000Z",
  "Status": "Scheduled",
  "Description": "Customer reports grinding noise when braking — front axle",
  "Vehicle__c": "0vC3a000000CaAbEAK"
}
response
{
  "id": "08p3a000000CaAbEAK",
  "success": true,
  "errors": []
}

A successful 201 Created response returns the new ServiceAppointment ID. Bayworks sends the confirmation — date, time, and what's being serviced — back to the customer in the same conversation.

Architecture & security

The integration uses Salesforce's OAuth 2.0 Client Credentials flow — a server-to-server pattern that issues short-lived Bearer tokens without any user session. Tokens are refreshed automatically by Bayworks; your team never handles credentials directly.

Access is scoped to a dedicated Salesforce Connected App with the minimum permissions needed: api scope (REST API access) and the specific object permissions granted to the integration user. Bayworks operates as a named integration user in your org — its access is auditable in Salesforce's standard setup and login history.

The integration is read-only for vehicle and work order data by default. ServiceAppointment write access is enabled separately and requires your explicit sign-off during onboarding.

Tip

Because Bayworks uses a named integration user, all API activity shows up in Salesforce's standard audit trail. Your Salesforce admin can see every record Bayworks read or wrote, when it happened, and from which IP.

Get started

The Salesforce integration requires Salesforce Automotive Cloud (or at minimum, Field Service + a Salesforce org with the Vehicle object). If you're not sure which license you have, your Salesforce admin can confirm in Setup under Installed Packages.

Setup involves creating a Connected App in your Salesforce org, granting the integration user the correct object permissions, and sharing the client ID and secret with Bayworks during onboarding. The whole process typically takes one session — no engineering resources required on your side.

Book a 30-minute setup call →