costs.job
Job costing for one job: contract, invoiced, collected and revenue against labor (approved and pending time at each entry's cost rate), materials at cost, expenses and Doing Work fees, with profit and margin. Owner or office; needs seeing costs and prices.
When to use it
Job costing for one job: contract, invoiced, collected and revenue against labor (approved and pending time at each entry's cost rate), materials at cost, expenses and Doing Work fees, with profit and margin. Owner or office; needs seeing costs and prices.
What to tell the owner
Tell them what you found in plain words. Don't read back raw fields.
| Field | Type | Required |
|---|
job_id | string (uuid) | yes |
Example
GET https://doingwork.work/v1/costs/job?job_id=00000000-0000-4000-8000-000000000000
Output
| Field | Type | Always there |
|---|
job_id | string (uuid) | yes |
kind | string | yes |
status | string | yes |
summary | ['string', 'null'] | yes |
customer_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
occurred_at | string (date-time) | yes |
currency | string | yes |
contract_minor | integer | yes |
invoiced_minor | integer | yes |
tax_minor | integer | yes |
draft_invoices_minor | integer | yes |
refunded_minor | integer | yes |
collected_minor | integer | yes |
revenue_minor | integer | yes |
labor_minutes | integer | yes |
labor_pending_minutes | integer | yes |
labor_cost_minor | integer | yes |
labor_pending_cost_minor | integer | yes |
uncosted_minutes | integer | yes |
running_clocks | integer | yes |
materials_cost_minor | integer | yes |
materials_price_minor | integer | yes |
uncosted_materials | integer | yes |
expenses_minor | integer | yes |
expenses_by_category | object | yes |
fees_minor | integer | yes |
cost_minor | integer | yes |
profit_minor | integer | yes |
margin | ['number', 'null'] | yes |
unbilled_minor | integer | yes |
{
"job_id": "00000000-0000-4000-8000-000000000000",
"kind": "...",
"status": "...",
"summary": "...",
"customer_id": "00000000-0000-4000-8000-000000000000",
"occurred_at": "...",
"currency": "...",
"contract_minor": 50000,
"invoiced_minor": 50000,
"tax_minor": 50000,
"draft_invoices_minor": 50000,
"refunded_minor": 50000,
"collected_minor": 50000,
"revenue_minor": 50000,
"labor_minutes": 1,
"labor_pending_minutes": 1,
"labor_cost_minor": 50000,
"labor_pending_cost_minor": 50000,
"uncosted_minutes": 1,
"running_clocks": 1,
"materials_cost_minor": 50000,
"materials_price_minor": 50000,
"uncosted_materials": 1,
"expenses_minor": 50000,
"expenses_by_category": {},
"fees_minor": 50000,
"cost_minor": 50000,
"profit_minor": 50000,
"margin": "...",
"unbilled_minor": 50000
}
Errors
| Code | Status | What to do |
|---|
invalid_input, invalid_token, rate_limited | | Can happen on any call. See errors. |