ExtendCustom Integrations

Custom Integrations

If you want your agent to talk to your own systems — a booking system, an internal API, a CRM without a ready-made connector — build a Custom Integration. This is a full, no-code way to define a REST API connection and specific callable actions against it.

Who does this: the interface requires no code, but the values themselves are technical — base URL, authentication, endpoints, JSON bodies. If those terms aren’t part of your day-to-day, bring in your IT team or your software vendor. The business side stays with you: which action the agent should be able to perform and which values it needs for that.

Clarify first

  1. Which action? Check availability, create a booking, look up order status, create a record. One action per purpose.
  2. Who has API access? Credentials come from your vendor or your IT.
  3. Which fields does the API need, and which does it return?
  4. How fast does it respond? For calls made during a conversation it should be a few seconds.
  5. Test the calls in advance outside MIA (e.g. with Postman) using real values. If the call doesn’t work there, it won’t work in MIA — and troubleshooting is considerably faster there.

1. Create the connection

  1. Open Marketplace → Custom Integrations → Add custom integration.

  2. Fill in:

    FieldDescription
    NameA label for this connection, e.g. “Salesforce CRM API.”
    DescriptionWhat it’s for.
    Base URLThe root URL of the API, e.g. https://yourinstance.my.salesforce.com/services/data/v59.0.
    Auth typeNone, Bearer (a token), API Key, Basic (username/password), or Headers (arbitrary custom headers) — then fill in the matching credential field(s).
  3. Save. The connection now appears under Custom Integrations.

2. Add an action

Open the connection and add an action — this is the specific API call your agent will be able to make:

FieldDescription
Display nameWhat shows up when attaching this action to a workflow, e.g. “Create Booking.”
HTTP methodGET, POST, PUT, PATCH, or DELETE.
PathThe endpoint path, e.g. /bookings/:bookingId or /bookings/{bookingId} — path parameters are detected automatically.
Headers / query params / bodyWhatever the target API expects.
TimeoutHow long to wait for a response before giving up.
Execution stageIn-call action (runs while the agent is still talking to the caller, so it can use the result in the conversation) or post-call action (runs after the call ends).
Response modeFire-and-forget (don’t wait for/use the response) or evaluate-data (parse the response and make specific fields available to the agent — you define each field’s name, type, and description).

Save the action.

3. Use it in a workflow

  1. Open your Workflow → Integration tab → Integrations panel → Add integration.
  2. Select your Custom Integration and the specific action.
  3. If it’s an in-call action with evaluate-data, reference the fields it returns directly in your prompt (e.g. “confirm the booking reference the tool returned”).
  4. Save, then save and publish the workflow.

What you must add to the prompt

Attaching an action isn’t enough on its own — the agent needs to know when to use it and what happens when something goes wrong (see Writing the Prompt → Tools). These three points are forgotten most often:

  • When to call it and when not. Otherwise the agent calls too early, with half the values.
  • What it says while waiting. “One moment, let me check.” Without that line, silence falls.
  • What happens on no response or an error. Without a fallback rule the conversation stalls. Recommended: take the request as a message and promise a callback.

For actions that create something (bookings, orders): clarify with your IT what happens on a retry. Without safeguards on your API side, duplicate records can be created.

Complete working example: connecting a CRM (Salesforce)

A common use of Custom Integrations is logging every call straight into a CRM your business already runs — for example, creating a new record in Salesforce the moment a call ends, without anyone touching Salesforce by hand. Salesforce’s REST API follows the same request/response shape shown here, so this example generalizes to most CRMs (HubSpot, Zoho, or an internal system) — just swap the base URL, auth, and field names.

Connection:

FieldValue
NameSalesforce CRM
Base URLhttps://yourinstance.my.salesforce.com/services/data/v59.0
Auth typeBearer (an OAuth access token for your Salesforce org)

Action — “Create Lead”:

FieldValue
HTTP methodPOST
Path/sobjects/Lead
Body{ "FirstName": "...", "LastName": "...", "Phone": "...", "Email": "...", "Company": "..." }
Execution stagePost-call action
Response modeEvaluate-data — fields: id (string), success (boolean)

Attached to a sales or support workflow’s Integration tab, this creates a new Salesforce Lead after every call using the properties your agent captured (caller name, phone, email), and captures back the new record’s id for reference — no manual data entry required.

⚠️

With token-based authentication, clarify the token’s validity period with your IT. If it expires, the action fails from that point on without anything having changed in the Workflow. That is the most common cause of “it worked for weeks and now it doesn’t.”

The Custom Integration framework connects your agent to REST APIs you control or have credentials for. It does not publish your integration to the Marketplace for other MIA customers — it’s private to your account.