MOTORAdvisorShop intelligence powered by motor.comDevelopersOpen the app →

send_quote_notification

Notifications · Write · account-scoped · consent-gated

Send the customer their quote-approval link — on the channels they consented to, and no others.

Usage

The tool that completes the loop: resolve the vehicle, price the work, and the customer gets the quote — without the advisor leaving the conversation. It sends a real message on behalf of the authenticated account's shop, and it writes nothing to MOTOR.

The safety model is the argument shape. There is deliberately no destination parameter. The consent records the customer signed at the shop counter are the only reachable addresses, so no input exists through which a caller can direct a message at an arbitrary email or phone number. Do not ask the user for an address to send to — none can be supplied.

Each requested channel returns its own structured outcome rather than an error:

  • sent — the message went out, and the send is recorded in the shop's notification audit trail.
  • deferred — the customer is inside quiet hours (outside the 8am–9pm customer-local send window); the send is queued and resumeAt says when it goes out.
  • refused with a reason — no-consent, suppressed (opted out or hard-bounced), sms-transport-unavailable, and so on. A refusal is the system working. Relay the reason; never retry around it, and never try a different channel to reach a suppressed destination.

The same gates the web app applies — consent, platform suppression, quiet hours, the audit trail — apply here identically, from the same shared machinery. The result always includes quoteUrl, so the advisor can hand the link over in person when sending is refused. Retries are idempotent per quote and channel.

Parameters

ParameterTypeRequiredDescription
quoteIdstringYesThe quote snapshot id, e.g. from the advisor's work order. Example: "q_1facac2305cc6b3901077d3b"
channelsarray of "email" | "sms"YesWhich channels to send on. Example: ["email"]

Description advertised to clients

The exact description a fully entitled MCP client discovers — the workflow contracts travel with the tool, so a client with no system prompt still uses it correctly. An account missing a licence for content this tool reaches sees the same text behind a [Licensed content — not enabled on this account] or [Partially available] notice:

Send the customer their quote-approval link on the channels they have CONSENTED to. THIS TOOL SENDS REAL MESSAGES on behalf of the authenticated account's shop. It writes NOTHING to MOTOR — DaaS stays read-only. There is deliberately NO destination parameter: the shop's consent records (captured from the customer at the counter) are the only reachable addresses, so this tool cannot message anyone who has not opted in — do not ask for a phone number or email to send to, none can be supplied. Each requested channel returns a structured outcome: sent, deferred (quiet hours — queued until the stated time), or refused with a reason (no-consent, consent-scope-mismatch when the consent on file covers invoices only, suppressed, sms-transport-unavailable, …). A refusal is the system working; relay the reason, never retry around it. The quote must belong to the caller's shop and still be open; the result includes quoteUrl either way, which the advisor can always share by hand.

Example — Send a quote for approval — after 9pm

Captured from the live server, 2026-08-21. The call landed outside the 8am–9pm send window, so the response shows the quiet-hours deferral and a structured refusal side by side.

Request

{
  "quoteId": "q_5bb2f458a5aae3c4c0fa354d",
  "channels": [
    "email",
    "sms"
  ]
}

Response

{
  "notifications": [
    {
      "channel": "email",
      "status": "deferred",
      "resumeAt": "2026-08-21T12:00:00.000Z",
      "reason": "quiet-hours: outside the 8am-9pm customer-local send window"
    },
    {
      "channel": "sms",
      "status": "refused",
      "reason": "no-consent: the customer has not opted in to sms for this shop — capture consent at the counter first"
    }
  ],
  "quoteUrl": "https://motoradvisor.app/q/…"
}

A quote belonging to another shop reads as absent (QuoteNotFound) — the same cross-tenant stance as the billing tools.