Private preview of the new site. Not live.

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.

WhoAgents can call this
RESTGET /v1/costs/job
MCP toolcosts_job
Writesno
AreaCosts, expenses and reports

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.

Input

FieldTypeRequired
job_idstring (uuid)yes

Example

GET https://doingwork.work/v1/costs/job?job_id=00000000-0000-4000-8000-000000000000

Output

FieldTypeAlways there
job_idstring (uuid)yes
kindstringyes
statusstringyes
summary['string', 'null']yes
customer_id['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')']yes
occurred_atstring (date-time)yes
currencystringyes
contract_minorintegeryes
invoiced_minorintegeryes
tax_minorintegeryes
draft_invoices_minorintegeryes
refunded_minorintegeryes
collected_minorintegeryes
revenue_minorintegeryes
labor_minutesintegeryes
labor_pending_minutesintegeryes
labor_cost_minorintegeryes
labor_pending_cost_minorintegeryes
uncosted_minutesintegeryes
running_clocksintegeryes
materials_cost_minorintegeryes
materials_price_minorintegeryes
uncosted_materialsintegeryes
expenses_minorintegeryes
expenses_by_categoryobjectyes
fees_minorintegeryes
cost_minorintegeryes
profit_minorintegeryes
margin['number', 'null']yes
unbilled_minorintegeryes
{
  "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

CodeStatusWhat to do
invalid_input, invalid_token, rate_limitedCan happen on any call. See errors.