Summary
Add an application/quote action-intent type so quote/negotiation apps can register Sidekick actions on a quote. The immediate, highest-value action is open (navigate the merchant to a specific quote); the type would also support staged, merchant-confirmed send_proposal / counter / convert / create.
Motivation
We build QuotWay — B2B Quote & Negotiation (public App Store app). Our Sidekick data extension already works well: merchants ask, “Which quotes are pending approval?” or “Show my highest-value quote,” and Sidekick answers from our app.
The gap is the moment the merchant follows up with “open it”:
Merchant: Can you open it?
Sidekick: I’m not able to directly open QuotWay for you, but you can
Navigate to QW-1013 through the QuotWay app in your admin.
A data extension has no matching action intent, and there’s no quote/negotiation type in the vocabulary (application/{ad, campaign, email, faq,loyalty-program, return, review, shipment, ticket}. '). + shopify/{customer, order, product}), so we can't declare anadmin.app.intent.linkfor it —Shopify app deployrejects unknown intent types. We already return the correct deep link in the resource-link_meta, but Sidekick has no route to use it.
B2B quoting/negotiation is a growing surface (Companies + payment terms now reach. Basic→Advanced, not just Plus), and “open / send / counter / convert this quote” is exactly the in-flow action Sidekick is built for.
Proposed type
application/quote — actions: open | create | edit | send_proposal | counter | convert.
{
"type": "application/quote",
"value": { // the quote to act on (open/edit/send/counter/convert)
"type": "string",
"description": "GID or reference of the quote (e.g. gid://application/quote/123 or QW-1042).",
"mapTo": "param",
"fieldName": "id"
},
"inputSchema": { // all optional (no required fields, per the intent rules)
"buyer_email": { "type": "string", "format": "email" },
"company": { "type": "string", "description": "Company name or GID (B2B)" },
"total": { "type": "string", "description": "Proposed total in shop currency" },
"message": { "type": "string", "description": "Note to the buyer" }
}
}
Apps wire this to their own confirm UI (we’d use our contextual save bar + convert preview), so nothing commits without the merchant — the same stay-in-control model the existing action intents use.
Alternatives considered
- A generic app-navigation intent — let an app declare
admin.app.intent.linkto open ANY of its own resources by URL, with no predefined schema. This would solveopenfor every app (not just quotes) and is arguably the smaller change. Happy to take this instead of/alongsideapplication/quote. - Reusing
application/ticket— semantically wrong for a quote and would misrepresent the resource (also a content-policy concern), so we ruled it out.
Minimum viable
If the full type is too broad to start, just open (or the generic navigation intent) already closes the most common merchant request and unblocks every quote app.