---
title: Job to paid: the core loop
description: From a new job to a paid invoice and a customer-confirmed record, with the operation for each step.
url: https://doingwork.work/docs/job-to-paid/
---

# Job to paid

| Step | Operation | Who |
|---|---|---|
| Start the job | [jobs.create](https://doingwork.work/docs/reference/jobs-create/) | Agent |
| Add photos | [media.requestUpload](https://doingwork.work/docs/reference/media-requestupload/), then PUT the bytes | Agent |
| Write the quote from the worker's lines | [quotes.create](https://doingwork.work/docs/reference/quotes-create/) | Agent |
| Owner checks it, then send | [quotes.send](https://doingwork.work/docs/reference/quotes-send/) | Agent, after the owner says go |
| Customer signs | [quotes.sign](https://doingwork.work/docs/reference/quotes-sign/) | Customer, hosted page |
| Make the invoice | [invoices.createFromQuote](https://doingwork.work/docs/reference/invoices-createfromquote/) | Agent |
| Idaho jobs: subcontractor statement | [subcontractors.prepare](https://doingwork.work/docs/reference/subcontractors-prepare/), then the owner signs | Agent, then owner |
| Send the invoice | [invoices.send](https://doingwork.work/docs/reference/invoices-send/) | Agent |
| Customer pays by card or bank (ACH) | [invoices.pay](https://doingwork.work/docs/reference/invoices-pay/) | Customer, hosted page |
| Or paid by cash or check | [invoices.markPaidOutside](https://doingwork.work/docs/reference/invoices-markpaidoutside/) | Owner or office, own sign-in |
| Customer confirms the work | [jobs.requestConfirmation](https://doingwork.work/docs/reference/jobs-requestconfirmation/) | Agent sends the link |
| Show the signed record | [jobs.record](https://doingwork.work/docs/reference/jobs-record/) | Agent |

## 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](https://doingwork.work/docs/webhooks/) such as `quote.signed` and `invoice.paid`, or check with the read operations, then tell the owner.
