---
title: subs.add | Doing Work API
description: Add a subcontractor to a job: a company and the one email they will sign in with. Returns a link once; share it with them yourself (Doing Work does not sen
url: https://doingwork.work/docs/reference/subs-add/
---

# subs.add

Add a subcontractor to a job: a company and the one email they will sign in with. Returns a link once; share it with them yourself (Doing Work does not send it). They see the job summary, the work address, your scope note and upcoming visit times, and can leave you notes. They never see prices, the customer's name or contact details, or other subcontractors. Lasts expires_in_days (default 90, up to 365) until removed. Owner or office only.

|  |  |
|---|---|
| Who | Agents can call this |
| REST | `POST /v1/subs` |
| MCP tool | `subs_add` |
| Writes | yes, send an Idempotency-Key |
| Area | [Field work (checklists, forms, time, notes, change orders, subcontractors)](https://doingwork.work/docs/reference/#field-work-checklists-forms-time-notes-change-orders-subcontractors) |

## When to use it

Add a subcontractor to a job: a company and the one email they will sign in with. Returns a link once; share it with them yourself (Doing Work does not send it).

## What to tell the owner

Say what you did in plain words and what happens next.

## Input

| Field | Type | Required |
|---|---|---|
| `job_id` | string (uuid) | yes |
| `company_name` | string | yes |
| `email` | string (email) | yes |
| `contact_name` | string | no |
| `trade` | string | no |
| `scope_note` | string | no |
| `expires_in_days` | integer | no |

## Example

```http
POST https://doingwork.work/v1/subs
content-type: application/json
Idempotency-Key: 3f1c...

{
  "job_id": "00000000-0000-4000-8000-000000000000",
  "company_name": "...",
  "email": "owner@example.com"
}
```

## Output

JSON. The response shape isn't published yet; read the fields you need and ignore the rest. Errors are `{code, message, status}`.

## Errors

| Code | Status | What to do |
|---|---|---|
| `invalid_input`, `invalid_token`, `rate_limited` |  | Can happen on any call. See [errors](https://doingwork.work/docs/errors/). |
