Private preview of the new site. Not live.

Job to paid

StepOperationWho
Start the jobjobs.createAgent
Add photosmedia.requestUpload, then PUT the bytesAgent
Write the quote from the worker's linesquotes.createAgent
Owner checks it, then sendquotes.sendAgent, after the owner says go
Customer signsquotes.signCustomer, hosted page
Make the invoiceinvoices.createFromQuoteAgent
Idaho jobs: subcontractor statementsubcontractors.prepare, then the owner signsAgent, then owner
Send the invoiceinvoices.sendAgent
Customer pays by card or bank (ACH)invoices.payCustomer, hosted page
Or paid by cash or checkinvoices.markPaidOutsideOwner or office, own sign-in
Customer confirms the workjobs.requestConfirmationAgent sends the link
Show the signed recordjobs.recordAgent

Quote lines

Each line has a description, a quantity and a unit price in cents (unit_price_minor). Take these from the worker word for word. If a price is missing, ask. Read the total back before sending.

Bank payments

A bank (ACH) payment takes a few business days to clear. While it clears, the invoice isn't paid yet, and paying again answers payment_pending. Tell the owner: "The customer paid by bank. It takes a few business days to clear." When it clears you get invoice.paid. If it fails you get invoice.payment_failed, the owner gets an email, and the same pay link works again.

Waiting

Signing and paying happen when the customer gets to it. Subscribe to webhooks such as quote.signed and invoice.paid, or check with the read operations, then tell the owner.