# Get job money

Get job money is a read in the HeadHoncho API. What a job made and where the money went: money in, parts and fees, the profit, each person's share, and every payment and expense line.

Page: https://headhoncho.app/docs/api/get_job_money | Part of the HeadHoncho API docs: https://headhoncho.app/docs/api | Machine-readable: https://headhoncho.app/docs/api/openapi.json | Everything in one file: https://headhoncho.app/docs/api/llms-full.txt

## The request

Reference for **Get job money**, HeadHoncho API v1. It is a read, sent to the base address `https://api.headhoncho.app`.

`GET /api/v1/jobs/{job_id}/money`

The key needs the **Money** area at **read**. An answered call costs 1 credit; a refusal costs nothing. See [credits](https://headhoncho.app/docs/api/errors#credits).

Send your key as `Authorization: Bearer hh_live_...`. See [API keys](https://headhoncho.app/docs/api/keys).

## Parameters

| Name | Kind | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `job_id` | id, in the path | Yes | The job id, or its number. | `job_1138` |

## Try it with your key

Paste your key and change the values. The box builds the call as a cURL line and a fetch line, ready to copy. It never sends anything itself.

Paste your key on the web page and it fills a cURL line and a fetch line with your key and the example values. The page never sends the key anywhere. The same lines with a placeholder key are under Examples below.

## What comes back

summary: quoted, collected, still_owed, money_in (and whether it is the quote or what came in), parts, fees, profit and the company's share. shares: one per person paid on the job, with the rate, the working and whether it is projected or posted, then the company. lines: every payment, expense, fee and cut, voided ones included and marked. checks: whether the shares and fees add back to money in, to the cent.

It never changes a record. It only reads the companies the key reaches.

## Every field in the answer

Types are read from the example answer. Money is a plain number in the company's currency. A time carries its offset from UTC (`Z` is UTC). Ids are opaque text. A field with no line of its own here has its name spelled out; the common fields mean the same on every page.

| Field | Type | Meaning |
| --- | --- | --- |
| `job` | object | The job. |
| `job.id` | id (text) | The id of this record. Ids are opaque text: keep them exactly as given. |
| `job.number` | whole number | The number people say out loud, such as the job number. |
| `job.status` | text | The job status. |
| `currency` | text | The three-letter currency code (ISO 4217). Every money value in the answer is in it. |
| `summary` | object | The summary. |
| `summary.quoted` | money (number) | The price quoted for the job. In the company's currency. |
| `summary.collected` | money (number) | The money received on the job so far. In the company's currency. |
| `summary.still_owed` | money (number) | The still owed. In the company's currency. |
| `summary.money_in` | money (number) | The money in. In the company's currency. |
| `summary.money_in_basis` | text | Which money counted as money in. |
| `summary.parts` | money (number) | The parts. In the company's currency. |
| `summary.fees` | money (number) | What the payment processor kept. In the company's currency. |
| `summary.profit` | money (number) | The job's profit, worked out the way the app works it out. In the company's currency. |
| `summary.company_share` | money (number) | The company share. In the company's currency. |
| `summary.technicians_total` | money (number) | The technicians total. In the company's currency. |
| `shares` | list of objects | The shares. |
| `shares[].worker_id` | id (text) | The id of the worker. |
| `shares[].name` | text | The name, as the app shows it. |
| `shares[].role` | text | The role: what this person does on a job. |
| `shares[].rate` | text | How the cut is worked out, in words. |
| `shares[].working` | text | The sum, shown the way the app shows it. |
| `shares[].share` | money (number) | The share. In the company's currency. |
| `shares[].parts_paid` | money (number) | The parts paid. In the company's currency. |
| `shares[].payout` | money (number) | The payout. In the company's currency. |
| `shares[].projected` | true or false | True while the figure is an estimate that the job has not closed on yet. |
| `lines` | list of objects | The lines, oldest first. |
| `lines[].id` | id (text) | The id of this record. Ids are opaque text: keep them exactly as given. |
| `lines[].kind` | text | What sort of thing this is. |
| `lines[].on` | date (YYYY-MM-DD) | The date it happened, as a date in the company's time zone. |
| `lines[].amount` | money (number) | The amount. In the company's currency. |
| `lines[].method` | text | How it was paid, such as card or cash. |
| `lines[].who` | text | The person it concerns. |
| `lines[].memo` | text | A free-text note on the line. Empty when there is none. |
| `lines[].voided` | true or false | True when the line was voided. A voided line counts in no figure. |
| `lines[].type` | text | What sort of thing this is. |
| `checks` | object | The checks. |
| `checks.adds_up` | true or false | True when the figures agree with each other. |
| `checks.payouts` | money (number) | The payouts. In the company's currency. |
| `checks.fees` | money (number) | What the payment processor kept. In the company's currency. |
| `checks.money_in` | money (number) | The money in. In the company's currency. |

## One derivation

This is the arithmetic the job's Money tab shows, computed by the same function, so the API and the screen cannot disagree. A share is projected until the job closes and the cut is posted.

## Voided lines

A voided payment or expense is listed with voided: true and its reason, and counts in no figure.

## Errors that apply

| Code | Status | What it means |
| --- | --- | --- |
| [`missing_key`](https://headhoncho.app/docs/api/errors#missing_key) | 401 | Send your key as Authorization: Bearer hh_live_... |
| [`unknown_key`](https://headhoncho.app/docs/api/errors#unknown_key) | 401 | That key is not one we issued, or it was revoked. |
| [`no_access`](https://headhoncho.app/docs/api/errors#no_access) | 403 | This credential does not reach that. Ask the person who made it for access. |
| [`not_found`](https://headhoncho.app/docs/api/errors#not_found) | 404 | No such record in the companies this credential reaches. |
| [`invalid`](https://headhoncho.app/docs/api/errors#invalid) | 422 | Some fields were refused. See fields. |
| [`no_credits`](https://headhoncho.app/docs/api/errors#no_credits) | 402 | Out of credits. Top up on Settings › Credits, or turn on auto top-up. |

## Related

- [List field reports](https://headhoncho.app/docs/api/list_field_reports): What technicians reported from the field and nobody booked yet: what they collected, how, the parts and the job's total, newest first.
- The same records in the app: [the Finance panel](https://headhoncho.app/docs/finance).
- How the API fits together: [the model](https://headhoncho.app/docs/api/model), [API keys](https://headhoncho.app/docs/api/keys), [errors](https://headhoncho.app/docs/api/errors) and [the MCP server](https://headhoncho.app/docs/api/mcp).

## Examples

### Answer

```json
{
  "job": {
    "id": "job_1138",
    "number": 1138,
    "status": "Closed"
  },
  "currency": "USD",
  "summary": {
    "quoted": 1450.0,
    "collected": 1450.0,
    "still_owed": 0.0,
    "money_in": 1450.0,
    "money_in_basis": "collected",
    "parts": 180.0,
    "fees": 42.35,
    "profit": 1227.65,
    "company_share": 613.83,
    "technicians_total": 793.82
  },
  "shares": [
    {
      "worker_id": "wrk_7a12",
      "name": "Omar S.",
      "role": "subcontractor",
      "rate": "50% of job profit",
      "working": "$1,227.65 × 50%",
      "share": 613.82,
      "parts_paid": 180.0,
      "payout": 793.82,
      "projected": false
    },
    {
      "worker_id": null,
      "name": "The company",
      "role": "company",
      "rate": "the rest · ≈50%",
      "working": "$1,227.65 − the other shares",
      "share": 613.83,
      "parts_paid": 0.0,
      "payout": 613.83,
      "projected": false
    }
  ],
  "lines": [
    {
      "id": "pay_91c0",
      "kind": "payment",
      "on": "2026-10-16",
      "amount": 1450.0,
      "method": "card",
      "who": "Omar S.",
      "memo": "",
      "voided": false
    },
    {
      "id": "fee_91c0",
      "kind": "fee",
      "on": "2026-10-16",
      "amount": 42.35,
      "method": "card",
      "who": "",
      "memo": "Processing fee",
      "voided": false
    },
    {
      "id": "exp_2b11",
      "kind": "expense",
      "on": "2026-10-16",
      "amount": 180.0,
      "type": "Parts",
      "who": "Omar S.",
      "memo": "Dolly rental",
      "voided": false
    },
    {
      "id": "led_4d0e",
      "kind": "cut",
      "on": "2026-10-16",
      "amount": 613.82,
      "who": "Omar S.",
      "memo": "",
      "voided": false
    }
  ],
  "checks": {
    "adds_up": true,
    "payouts": 1407.65,
    "fees": 42.35,
    "money_in": 1450.0
  }
}
```

### cURL

```bash
curl "https://api.headhoncho.app/api/v1/jobs/job_1138/money" \
  -H "Authorization: Bearer hh_live_..."
```

### Python

```python
import requests

response = requests.get(
    "https://api.headhoncho.app/api/v1/jobs/job_1138/money",
    headers={"Authorization": "Bearer hh_live_..."},
)
response.raise_for_status()
print(response.json())
```

### JavaScript

```javascript
const response = await fetch("https://api.headhoncho.app/api/v1/jobs/job_1138/money", {
  headers: { Authorization: "Bearer hh_live_..." },
});
const data = await response.json();
console.log(data);
```

### Your AI

```text
Tool: get_job_money
Arguments: job_id (id, required)
Access: read on Money
Hints: readOnly=true, destructive=false, idempotent=true, openWorld=false
Try asking: "Using HeadHoncho, get job money with job_id job_1138."
```
