# Workiz API

> Every Workiz endpoint on Cotlet: inputs, JSON Schema, cURL, Python and Node.js examples and an example response for each call.

Source: https://cotlet.dev/docs/api/workiz

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

15 endpoints for Workiz. Each one is a POST with a JSON body, called with your API key.

- Base URL: `https://cotlet.dev/api/v1/workiz`
- Connects with: Your own Workiz account (the permissions of your role apply)
- Integration page: https://cotlet.dev/integrations/workiz-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `list_jobs` | read | Jobs by scheduled date, with status, client, address, assigned techs and amount due. |
| `get_job` | read | Full job: client, address, time window, job type, notes, items, total, amount due and payments. |
| `get_schedule` | read | Jobs and time off per technician for a day or range, as on the Workiz calendar. |
| `list_leads` | read | Leads with status, source, client details and assigned team member. |
| `list_clients` | read | Search clients by name, phone, email or address, with past jobs and balance due. |
| `list_estimates` | read | Estimates with client, total, status and the date they were sent. |
| `list_invoices` | read | Invoices with job, client, total, amount due and due date. |
| `create_job` | write | New job for an existing or new client, with job type, time window and notes. |
| `reschedule_job` | write | Move a job to a new time window. Changes the client's appointment. |
| `assign_job` | write | Assign or unassign team members on a job. |
| `create_estimate` | write | Draft estimate for a client with items from your Price Book. Nothing is sent yet. |
| `send_estimate` | write | Email or text an estimate to the client, with a link to approve it. |
| `create_invoice` | write | Invoice for a job with its items and total. Nothing is sent yet. |
| `send_invoice` | write | Email or text an invoice to the client, with a link to pay online. |
| `record_payment` | write | Record a payment you already received on a job. Does not charge a card. |

## List jobs

`POST https://cotlet.dev/api/v1/workiz/list_jobs`

Access: read.

Returns jobs in a date range, newest first, with status, client, address, assigned team members, total and amount due. Pages hold up to 100 jobs; pass next_cursor back as cursor for the next page. Filter by status or by team member to narrow the list.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | no | First scheduled date. Default: 14 days ago. |
| `to` | date | no | Last scheduled date. Default: today. |
| `status` | string[] | no | Job statuses to include, e.g. Submitted, In progress, Done, Canceled. |
| `tech_id` | string | no | Only jobs assigned to this team member. |
| `limit` | integer | no | 1 to 100. Default: 50. |
| `cursor` | string | no | Next page cursor from the previous call. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/list_jobs \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("workiz", "list_jobs")
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'list_jobs');
```

**CLI**

```bash
cotlet call workiz list_jobs
```

### Example response

```json
{
  "jobs": [
    {
      "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
      "status": "Done",
      "job_type": "Water heater install",
      "scheduled_start": "2026-10-09T09:00:00-07:00",
      "client": {
        "client_id": "cl_5521",
        "name": "Dana Whitfield"
      },
      "address": "12 Oak St, Sacramento, CA",
      "techs": [
        "Mike R."
      ],
      "total": "480.00",
      "amount_due": "480.00"
    }
  ],
  "next_cursor": null
}
```

## Get job

`POST https://cotlet.dev/api/v1/workiz/get_job`

Access: read.

Returns one job with everything on its page: client, address, time window, job type, notes, line items, total, amount due and the payments recorded so far. Use it before invoicing or recording a payment.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job UUID from list_jobs. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/get_job \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"job_id":"job_8c41d2"}'
```

**Python**

```python
result = client.call("workiz", "get_job", {"job_id":"job_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'get_job', {"job_id":"job_8c41d2"});
```

**CLI**

```bash
cotlet call workiz get_job --data '{"job_id":"job_8c41d2"}'
```

### Example response

```json
{
  "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
  "status": "Done",
  "job_type": "Water heater install",
  "client": {
    "client_id": "cl_5521",
    "name": "Dana Whitfield",
    "phone": "(555) 010-2231"
  },
  "address": "12 Oak St, Sacramento, CA",
  "window": {
    "start": "2026-10-09T09:00:00-07:00",
    "end": "2026-10-09T11:00:00-07:00"
  },
  "notes": "Gas line on the left wall.",
  "items": [
    {
      "name": "40 gal water heater",
      "quantity": 1,
      "price": "380.00"
    },
    {
      "name": "Install labor",
      "quantity": 1,
      "price": "100.00"
    }
  ],
  "total": "480.00",
  "amount_due": "480.00",
  "payments": []
}
```

## Get schedule

`POST https://cotlet.dev/api/v1/workiz/get_schedule`

Access: read.

Returns each team member with their jobs and time off for the days you ask, ordered by start time, so your agent can see who has open slots. Time off is the future time off set in Workiz.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | First day. |
| `to` | date | no | Last day. Default: same as from. |
| `tech_ids` | string[] | no | Limit to these team members. Default: everyone. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/get_schedule \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from":"2026-10-01"}'
```

**Python**

```python
result = client.call("workiz", "get_schedule", {"from":"2026-10-01"})
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'get_schedule', {"from":"2026-10-01"});
```

**CLI**

```bash
cotlet call workiz get_schedule --data '{"from":"2026-10-01"}'
```

### Example response

```json
{
  "days": [
    {
      "date": "2026-10-12",
      "techs": [
        {
          "tech_id": "u_204",
          "name": "Mike R.",
          "jobs": [
            {
              "job_id": "3a9d41f2-85c0-4b7e-b6d2-91e7f0a35c48",
              "start": "2026-10-12T09:00:00-07:00",
              "end": "2026-10-12T11:00:00-07:00",
              "job_type": "Drain cleaning"
            }
          ],
          "time_off": []
        }
      ]
    }
  ]
}
```

## List leads

`POST https://cotlet.dev/api/v1/workiz/list_leads`

Access: read.

Returns leads, newest first, with status, source, contact details and the assigned team member. Open is the default, so converted and lost leads appear only when you ask for them. Pages hold up to 100 leads.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | open, converted or lost. Default: open. |
| `since` | date | no | Only leads created on or after this date. |
| `limit` | integer | no | 1 to 100. Default: 50. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/list_leads \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("workiz", "list_leads")
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'list_leads');
```

**CLI**

```bash
cotlet call workiz list_leads
```

### Example response

```json
{
  "leads": [
    {
      "lead_id": "ld_8841",
      "status": "open",
      "source": "Website",
      "name": "Priya Nair",
      "phone": "(555) 010-7714",
      "created_at": "2026-10-10T08:12:00-07:00",
      "assigned_to": null
    }
  ],
  "next_cursor": null
}
```

## List clients

`POST https://cotlet.dev/api/v1/workiz/list_clients`

Access: read.

Searches your Workiz clients and returns matches with contact details, their past jobs and the balance due. Use the client_id in create_job, create_estimate and the other tools.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `query` | string | no | Name, phone, email or address. |
| `limit` | integer | no | 1 to 100. Default: 25. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/list_clients \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("workiz", "list_clients")
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'list_clients');
```

**CLI**

```bash
cotlet call workiz list_clients
```

### Example response

```json
{
  "clients": [
    {
      "client_id": "cl_5521",
      "name": "Dana Whitfield",
      "phone": "(555) 010-2231",
      "email": "dana@example.com",
      "address": "12 Oak St, Sacramento, CA",
      "jobs": 3,
      "balance_due": "480.00"
    }
  ]
}
```

## List estimates

`POST https://cotlet.dev/api/v1/workiz/list_estimates`

Access: read.

Returns estimates, newest first, with client, total, status and the date sent. Filter by status to find the ones still waiting for an answer. Pages hold up to 100 estimates.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | draft, sent, approved or declined. Default: all. |
| `since` | date | no | Only estimates created on or after this date. |
| `limit` | integer | no | 1 to 100. Default: 50. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/list_estimates \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("workiz", "list_estimates")
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'list_estimates');
```

**CLI**

```bash
cotlet call workiz list_estimates
```

### Example response

```json
{
  "estimates": [
    {
      "estimate_id": "est_1187",
      "client": "Priya Nair",
      "total": "1,250.00",
      "status": "sent",
      "sent_at": "2026-10-01T10:15:00-07:00"
    }
  ],
  "next_cursor": null
}
```

## List invoices

`POST https://cotlet.dev/api/v1/workiz/list_invoices`

Access: read.

Returns invoices, newest first, with the job, client, total, amount due and due date. Unpaid is the default. Pages hold up to 100 invoices.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | unpaid, partially_paid or paid. Default: unpaid. |
| `since` | date | no | Only invoices created on or after this date. |
| `limit` | integer | no | 1 to 100. Default: 50. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/list_invoices \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("workiz", "list_invoices")
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'list_invoices');
```

**CLI**

```bash
cotlet call workiz list_invoices
```

### Example response

```json
{
  "invoices": [
    {
      "invoice_id": "inv_30214",
      "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
      "client": "Dana Whitfield",
      "total": "480.00",
      "amount_due": "240.00",
      "due_date": "2026-10-23",
      "status": "partially_paid"
    }
  ],
  "next_cursor": null
}
```

## Create job

`POST https://cotlet.dev/api/v1/workiz/create_job`

Access: write. Confirm: waits for the user's OK before it runs.

Creates a job for an existing client (client_id) or a new one (client object). Job type must be one of your Workiz job types. The job books an appointment for the client at the time you give. Returns the new job_id. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | no | Existing client from list_clients. Or pass client below. |
| `client` | object | no | New client: first_name, last_name, phone, email, address. |
| `job_type` | string | yes | One of your Workiz job types. |
| `start` | datetime | yes | ISO 8601 with time zone. |
| `end` | datetime | no | End of the time window. |
| `notes` | string | no | Job notes for the tech. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/create_job \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"cl_5521","job_type":"Water heater install","start":"2026-10-14T09:00:00-07:00","end":"2026-10-14T11:00:00-07:00","notes":"From lead ld_8841: tank leaking at the base."}'
```

**Python**

```python
result = client.call("workiz", "create_job", {"client_id":"cl_5521","job_type":"Water heater install","start":"2026-10-14T09:00:00-07:00","end":"2026-10-14T11:00:00-07:00","notes":"From lead ld_8841: tank leaking at the base."})
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'create_job', {"client_id":"cl_5521","job_type":"Water heater install","start":"2026-10-14T09:00:00-07:00","end":"2026-10-14T11:00:00-07:00","notes":"From lead ld_8841: tank leaking at the base."});
```

**CLI**

```bash
cotlet call workiz create_job --data '{"client_id":"cl_5521","job_type":"Water heater install","start":"2026-10-14T09:00:00-07:00","end":"2026-10-14T11:00:00-07:00","notes":"From lead ld_8841: tank leaking at the base."}'
```

### Example response

```json
{
  "job_id": "9e2b7d14-6c35-4a08-8f1d-3b5a0c7e92d6",
  "status": "Submitted",
  "job_type": "Water heater install",
  "client_id": "cl_5521",
  "start": "2026-10-16T09:00:00-07:00",
  "notes": "Gas line on the left wall."
}
```

## Reschedule job

`POST https://cotlet.dev/api/v1/workiz/reschedule_job`

Access: write. Confirm: waits for the user's OK before it runs.

Moves one job to a new start and, if given, a new end. The job keeps its assigned team members and its status. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job UUID from list_jobs. |
| `start` | datetime | yes | New start, ISO 8601 with time zone. |
| `end` | datetime | no | New end. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/reschedule_job \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"job_id":"3a9d41f2-85c0-4b7e-b6d2-91e7f0a35c48","start":"2026-10-13T09:00:00-07:00","end":"2026-10-13T11:00:00-07:00"}'
```

**Python**

```python
result = client.call("workiz", "reschedule_job", {"job_id":"3a9d41f2-85c0-4b7e-b6d2-91e7f0a35c48","start":"2026-10-13T09:00:00-07:00","end":"2026-10-13T11:00:00-07:00"})
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'reschedule_job', {"job_id":"3a9d41f2-85c0-4b7e-b6d2-91e7f0a35c48","start":"2026-10-13T09:00:00-07:00","end":"2026-10-13T11:00:00-07:00"});
```

**CLI**

```bash
cotlet call workiz reschedule_job --data '{"job_id":"3a9d41f2-85c0-4b7e-b6d2-91e7f0a35c48","start":"2026-10-13T09:00:00-07:00","end":"2026-10-13T11:00:00-07:00"}'
```

### Example response

```json
{
  "job_id": "3a9d41f2-85c0-4b7e-b6d2-91e7f0a35c48",
  "status": "Submitted",
  "start": "2026-10-13T09:00:00-07:00",
  "end": "2026-10-13T11:00:00-07:00",
  "previous_start": "2026-10-12T09:00:00-07:00"
}
```

## Assign job

`POST https://cotlet.dev/api/v1/workiz/assign_job`

Access: write.

Adds team members to a job, or replaces the current ones when replace is true. It runs without asking first: it sends nothing to the client and one more call changes the assignment back.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job UUID from list_jobs. |
| `tech_ids` | string[] | yes | Team members to assign. |
| `replace` | boolean | no | Remove current assignees first. Default: false. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/assign_job \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"job_id":"job_8c41d2","tech_ids":["tech ids"]}'
```

**Python**

```python
result = client.call("workiz", "assign_job", {"job_id":"job_8c41d2","tech_ids":["tech ids"]})
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'assign_job', {"job_id":"job_8c41d2","tech_ids":["tech ids"]});
```

**CLI**

```bash
cotlet call workiz assign_job --data '{"job_id":"job_8c41d2","tech_ids":["tech ids"]}'
```

### Example response

```json
{
  "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
  "techs": [
    {
      "tech_id": "u_204",
      "name": "Mike R."
    }
  ]
}
```

## Create estimate

`POST https://cotlet.dev/api/v1/workiz/create_estimate`

Access: write.

Creates an estimate in Draft for one client. Item names match items in your Workiz Price Book. Nothing is sent to the client until send_estimate runs, so this call runs without asking.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client from list_clients. |
| `items` | object | yes | List of {name, quantity, price}; names match Price Book items. |
| `notes` | string | no | Note shown to the client. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/create_estimate \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"client_8c41d2","items":"items"}'
```

**Python**

```python
result = client.call("workiz", "create_estimate", {"client_id":"client_8c41d2","items":"items"})
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'create_estimate', {"client_id":"client_8c41d2","items":"items"});
```

**CLI**

```bash
cotlet call workiz create_estimate --data '{"client_id":"client_8c41d2","items":"items"}'
```

### Example response

```json
{
  "estimate_id": "est_1192",
  "client_id": "cl_5521",
  "status": "draft",
  "items": [
    {
      "name": "Tankless water heater",
      "quantity": 1,
      "price": "1,250.00"
    }
  ],
  "total": "1,250.00"
}
```

## Send estimate

`POST https://cotlet.dev/api/v1/workiz/send_estimate`

Access: write. Confirm: waits for the user's OK before it runs.

Sends the estimate by email, text or both, with a link to view and approve it in the Workiz client portal. An unsent estimate becomes Pending; approval in the portal moves it to Approved. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `estimate_id` | string | yes | Estimate from list_estimates or create_estimate. |
| `via` | enum | no | email, sms or both. Default: email. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/send_estimate \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"estimate_id":"estimate_8c41d2"}'
```

**Python**

```python
result = client.call("workiz", "send_estimate", {"estimate_id":"estimate_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'send_estimate', {"estimate_id":"estimate_8c41d2"});
```

**CLI**

```bash
cotlet call workiz send_estimate --data '{"estimate_id":"estimate_8c41d2"}'
```

### Example response

```json
{
  "estimate_id": "est_1187",
  "status": "pending",
  "sent_via": "email",
  "sent_at": "2026-10-11T09:00:00-07:00"
}
```

## Create invoice

`POST https://cotlet.dev/api/v1/workiz/create_invoice`

Access: write.

Creates an invoice from a job, with the job's items and total. Nothing is sent to the client until send_invoice runs, so this call runs without asking. Returns the invoice_id.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job UUID from list_jobs. |
| `due_date` | date | no | Payment due date. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/create_invoice \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"job_id":"job_8c41d2"}'
```

**Python**

```python
result = client.call("workiz", "create_invoice", {"job_id":"job_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'create_invoice', {"job_id":"job_8c41d2"});
```

**CLI**

```bash
cotlet call workiz create_invoice --data '{"job_id":"job_8c41d2"}'
```

### Example response

```json
{
  "invoice_id": "inv_30214",
  "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
  "items": [
    {
      "name": "40 gal water heater",
      "quantity": 1,
      "price": "380.00"
    },
    {
      "name": "Install labor",
      "quantity": 1,
      "price": "100.00"
    }
  ],
  "total": "480.00",
  "amount_due": "480.00",
  "due_date": "2026-10-23",
  "status": "unsent"
}
```

## Send invoice

`POST https://cotlet.dev/api/v1/workiz/send_invoice`

Access: write. Confirm: waits for the user's OK before it runs.

Sends the invoice by email, text or both, with a link to the Workiz client portal. The client sees the amount due there. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `invoice_id` | string | yes | Invoice from list_invoices or create_invoice. |
| `via` | enum | no | email, sms or both. Default: email. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/send_invoice \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"invoice_id":"inv_30214","via":"email"}'
```

**Python**

```python
result = client.call("workiz", "send_invoice", {"invoice_id":"inv_30214","via":"email"})
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'send_invoice', {"invoice_id":"inv_30214","via":"email"});
```

**CLI**

```bash
cotlet call workiz send_invoice --data '{"invoice_id":"inv_30214","via":"email"}'
```

### Example response

```json
{
  "invoice_id": "inv_30214",
  "status": "sent",
  "sent_via": "email",
  "amount_due": "480.00",
  "sent_at": "2026-10-11T18:00:00-07:00"
}
```

## Record payment

`POST https://cotlet.dev/api/v1/workiz/record_payment`

Access: write. Confirm: waits for the user's OK before it runs.

Records a payment you already received on a job, as cash, check or credit, with an optional reference such as a check number. It does not charge a card. Returns the job total and the amount still due. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job UUID from list_jobs. |
| `amount` | string | yes | Amount, e.g. 240.00. |
| `method` | enum | yes | cash, check or credit. |
| `paid_at` | datetime | no | When it was paid. Default: now. |
| `reference` | string | no | Check number or confirmation number. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/workiz/record_payment \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"job_id":"7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17","amount":"240.00","method":"check","paid_at":"2026-10-09T15:30:00-07:00","reference":"1042"}'
```

**Python**

```python
result = client.call("workiz", "record_payment", {"job_id":"7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17","amount":"240.00","method":"check","paid_at":"2026-10-09T15:30:00-07:00","reference":"1042"})
```

**Node.js**

```js
const result = await cotlet.call('workiz', 'record_payment', {"job_id":"7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17","amount":"240.00","method":"check","paid_at":"2026-10-09T15:30:00-07:00","reference":"1042"});
```

**CLI**

```bash
cotlet call workiz record_payment --data '{"job_id":"7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17","amount":"240.00","method":"check","paid_at":"2026-10-09T15:30:00-07:00","reference":"1042"}'
```

### Example response

```json
{
  "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
  "payment_id": "pay_88213",
  "amount": "240.00",
  "method": "check",
  "reference": "1042",
  "job_total": "480.00",
  "amount_due": "240.00",
  "status": "recorded"
}
```
