Private preview of the new site. Not live.

costs.jobs

Job costing across jobs dated between two days (inclusive, in the shop's time zone), with totals. Sort by profit (lowest first, to find the losers), margin, or date. Up to 500 jobs; truncated says when more matched.

WhoAgents can call this
RESTGET /v1/costs/jobs
MCP toolcosts_jobs
Writesno
AreaCosts, expenses and reports

When to use it

Job costing across jobs dated between two days (inclusive, in the shop's time zone), with totals. Sort by profit (lowest first, to find the losers), margin, or date.

What to tell the owner

Tell them what you found in plain words. Don't read back raw fields.

Input

FieldTypeRequired
shop_idstring (uuid)yes
fromstringyes
tostringyes
statusarrayno
sortstring (one of profit, margin, date)no
limitintegerno

Example

GET https://doingwork.work/v1/costs/jobs?shop_id=00000000-0000-4000-8000-000000000000&from=...&to=...

Output

FieldTypeAlways there
jobsarrayyes
jobs[].job_idstring (uuid)yes
jobs[].kindstringyes
jobs[].statusstringyes
jobs[].summary['string', 'null']yes
jobs[].customer_id['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')']yes
jobs[].occurred_atstring (date-time)yes
jobs[].currencystringyes
jobs[].contract_minorintegeryes
jobs[].invoiced_minorintegeryes
jobs[].tax_minorintegeryes
jobs[].draft_invoices_minorintegeryes
jobs[].refunded_minorintegeryes
jobs[].collected_minorintegeryes
jobs[].revenue_minorintegeryes
jobs[].labor_minutesintegeryes
jobs[].labor_pending_minutesintegeryes
jobs[].labor_cost_minorintegeryes
jobs[].labor_pending_cost_minorintegeryes
jobs[].uncosted_minutesintegeryes
jobs[].running_clocksintegeryes
jobs[].materials_cost_minorintegeryes
jobs[].materials_price_minorintegeryes
jobs[].uncosted_materialsintegeryes
jobs[].expenses_minorintegeryes
jobs[].expenses_by_categoryobjectyes
jobs[].fees_minorintegeryes
jobs[].cost_minorintegeryes
jobs[].profit_minorintegeryes
jobs[].margin['number', 'null']yes
jobs[].unbilled_minorintegeryes
totalsobjectyes
totals.jobsintegeryes
totals.currency['string', 'null']yes
totals.margin['number', 'null']yes
totals.contract_minorintegeryes
totals.invoiced_minorintegeryes
totals.tax_minorintegeryes
totals.draft_invoices_minorintegeryes
totals.refunded_minorintegeryes
totals.collected_minorintegeryes
totals.revenue_minorintegeryes
totals.labor_minutesintegeryes
totals.labor_pending_minutesintegeryes
totals.labor_cost_minorintegeryes
totals.labor_pending_cost_minorintegeryes
totals.uncosted_minutesintegeryes
totals.materials_cost_minorintegeryes
totals.materials_price_minorintegeryes
totals.uncosted_materialsintegeryes
totals.expenses_minorintegeryes
totals.fees_minorintegeryes
totals.cost_minorintegeryes
totals.profit_minorintegeryes
totals.unbilled_minorintegeryes
truncatedbooleanyes
{
  "jobs": [
    {
      "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
    }
  ],
  "totals": {
    "jobs": 1,
    "currency": "...",
    "margin": "...",
    "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,
    "materials_cost_minor": 50000,
    "materials_price_minor": 50000,
    "uncosted_materials": 1,
    "expenses_minor": 50000,
    "fees_minor": 50000,
    "cost_minor": 50000,
    "profit_minor": 50000,
    "unbilled_minor": 50000
  },
  "truncated": true
}

Errors

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