Customer Portal
The customer portal gives your logged-in users access to their profile, active jobs, quotes, invoices, contracts, orders, and more — all through the SDK.
The portal is initialized with a customer context obtained during the auth flow.
const portal = client.customerPortal()
// Profile
const ctx = await portal.context()
// → { org, user, permissions }
const profile = await portal.getProfile()
await portal.updateProfile({ name: 'Jane', phone: '+15551234567' })
// Work bundle — jobs, quotes, invoices, contracts at a glance
const work = await portal.getWork()
// → { jobs, quotes, invoices, contracts }
// Jobs
const job = await portal.getJob(jobId)
const comments = await portal.listJobComments(jobId)
await portal.postJobComment(jobId, { content: 'Looks great!' })
const eta = await portal.getJobEta(jobId)
const activity = await portal.getJobActivity(jobId)
// Quotes
const quote = await portal.getQuote(quoteId)
await portal.viewQuote(quoteId)
await portal.acceptQuote(quoteId, { signature: '…' })
await portal.rejectQuote(quoteId, { reason: 'too expensive' })
// Invoices
const invoice = await portal.getInvoice(invoiceId)
await portal.payInvoice(invoiceId)
// Contracts
const contract = await portal.getContract(contractId)
await portal.signContract(contractId, { signature: '…' })
// Orders
const orders = await portal.listOrders()
const order = await portal.getOrder(orderId)
// Reviews
const myReviews = await portal.listMyReviews()
await portal.submitReview({ jobId, rating: 5, content: '…' })
// Referrals
const stats = await portal.myReferralStats()
const history = await portal.myReferralHistory()
const payouts = await portal.myReferralPayouts()
// Shipment tracking
const tracking = await portal.trackShipment(shipmentId)
// Contact staff (open front-desk chat)
await portal.contactCompany({ subject: 'Question about my job', message: '…' })
All methods require the user to be authenticated via the Auth flow.