Flow · 14 steps
Share a quote your customer can accept
Give your customer a page for their quote, in your brand, that they open from a link and accept or decline with no account.
Set your brand once — your business name, colours, contact and terms — and every page, PDF and email wears it. Issue a quote, ask for its link, and send it however you like (Send quote in the admin puts it in the email for you). The link opens that quote and nothing else. When your customer accepts, the quote is placed as an order with the customer as the one who placed it; declining records why. Orders, invoices and parcels have links of their own, and any link can be revoked.
Services involved
A filled dot is a read; a ring is a call that changes something.
- Notifications:
https://notifications.getmanifold.io - Inventory Manager:
https://inventory.getmanifold.io - Fulfillment Manager:
https://fulfillment.getmanifold.io
Every call carries Authorization: Bearer $MANIFOLD_TOKEN unless its step says otherwise
(getting a token). Run a flow in your sandbox, not your live
organization: see Before you start.
1 Set your brand
Your name, colours and contact, as your customers see them. The accent colour must read at 4.5:1 on white; the brand colour's text colour is chosen for you.
PUT /settings/brand Notifications
{
"businessName": "Ridgeline Outdoor",
"brandColour": "#1f4d3a",
"accentColour": "#1f6f50",
"contact": {
"email": "accounts@ridgeline-outdoor.example",
"website": "https://ridgeline-outdoor.example"
},
"terms": "Quotes hold their prices until the date shown."
}What the answer holds: the operation's example.
Records notifications.brand-saved.
2 Read it back
The brand as saved, with the text colour it takes and the logo once you upload one.
GET /settings/brand Notifications
What the answer holds: the operation's example.
3 See it as your customers' pages do
What the hosted pages read: public, since every message and page already shows it.
GET /brands/org_01a15a10-2b3c-7d4e-8f50-61728394a5b6 Notifications
What the answer holds: the operation's example.
4 Have something to quote
A SKU with units on hand, so the accepted quote can hold them.
POST /items Inventory Manager
{
"sku": "SHARE-QUOTE",
"name": "Trail pack, 30L",
"quantity": 20
}Answers 201. What the answer holds: the operation's example.
Records inventory.item-created.
5 Draft the quote
Priced here, since no catalog lists the SKU yet.
POST /orders Fulfillment Manager
{
"reference": "QUOTE-TRAIL-PACKS",
"stage": "draft-quote",
"lines": [
{
"sku": "SHARE-QUOTE",
"quantity": 4,
"unitPriceCents": 8900
}
]
}Answers 201. What the answer holds: the operation's example.
From your answer, later steps send id as {orderId}.
Records fulfillment.quote-created.
6 Keep the call it was quoted over
When a rep talks the quote through with the customer, the voice service hands the conversation's transcript to the quote as the call ends: plain text, keyed by the session, kept once — and erased with the customer if they ask to be forgotten.
POST /orders/{orderId}/transcripts?reference=vcs_01a15a10-5e6f-7a71-8c83-94a516b7c8d9&utterances=2&audioSeconds=95&startedAt=2026-10-20T01%3A00%3A00.000Z Fulfillment Manager
Voice session
[00:00] Speaker 1: Four of the 30 litre trail packs, please.
[00:04] Speaker 2: At $89 each, I can do that.
Answers 201. What the answer holds: the operation's example.
Records fulfillment.transcript-attached.
7 Read the transcript
A five-minute signed link to the text; the quote's page opens it from its Activity stream.
POST /orders/{orderId}/transcripts/vcs_01a15a10-5e6f-7a71-8c83-94a516b7c8d9/link Fulfillment Manager
What the answer holds: the operation's example.
8 Issue it
Its prices lock: what the customer is shown is what they accept.
POST /orders/{orderId}/quote Fulfillment Manager
{}What the answer holds: the operation's example.
Records fulfillment.quote-issued.
9 Ask for its link
The page's url and its signed token. Asking again answers the same link: send it as often as you like.
POST /orders/{orderId}/links Fulfillment Manager
{
"document": {
"kind": "quote"
}
}What the answer holds: the operation's example.
From your answer, later steps send token as {token} and link.id as {linkId}.
Records fulfillment.customer-link-issued.
10 Your customer opens it
What the page shows: the quote as issued, and that they may accept or decline it. No account, no bearer.
GET /customer/org_01a15a10-2b3c-7d4e-8f50-61728394a5b6/{token} Fulfillment Manager
What the answer holds: the operation's example.
11 The page records it opened
Once per link — and once more for each message whose copy was opened, which marks that message opened.
POST /customer/org_01a15a10-2b3c-7d4e-8f50-61728394a5b6/{token}/viewed Fulfillment Manager
Answers 204. What the answer holds: the operation's example.
Records fulfillment.customer-link-viewed.
12 They accept
The quote is placed as an order under its number, the customer's link as the one who placed it.
POST /customer/org_01a15a10-2b3c-7d4e-8f50-61728394a5b6/{token}/accept Fulfillment Manager
What the answer holds: the operation's example.
Records fulfillment.order-created, fulfillment.stock-allocated, fulfillment.shipment-created.
13 Declining now is refused
A placed quote is no longer theirs to decline.
POST /customer/org_01a15a10-2b3c-7d4e-8f50-61728394a5b6/{token}/decline Fulfillment Manager
{
"reason": "Changed our minds"
}{
"_tag": "QuoteNotAnswerable",
"reason": "placed"
}Records nothing.
14 Revoke the quote's link
Its token opens nothing from now; the order's own status link is a new one.
POST /orders/{orderId}/links/{linkId}/revoke Fulfillment Manager
What the answer holds: the operation's example.
Records fulfillment.customer-link-revoked.
What a recorded fact is: Facts and the journal. Why a repeated step changes nothing: Idempotency and retries.