# Raise PeoplePerHour invoices for finished work

> Your agent spots PeoplePerHour jobs the buyer signed off but you never invoiced, then raises each invoice for the agreed amount once you approve.

Source: https://cotlet.dev/integrations/peopleperhour-api-mcp-server/invoice-finished-work

Escrow money on PeoplePerHour reaches you only after you raise an invoice, and a buyer's "looks great, thanks" can sit unbilled in a WorkStream for a week. Invoicing too early is its own problem, because PeoplePerHour forbids billing before the work is delivered.

Cotlet does it in your own PeoplePerHour account with list\_workstreams, get\_workstream and create\_invoice, called by your AI agent, an n8n workflow or a script.

[Request access](https://cotlet.dev/app/signup?app=peopleperhour) [All PeoplePerHour tools](https://cotlet.dev/integrations/peopleperhour-api-mcp-server)

Hosted · nothing to install or maintain

Official options

## Can PeoplePerHour do this on its own?

PeoplePerHour has no API for invoices (checked 12 Oct 2026). Its native option for recurring work is AutoPay: the buyer sets a weekly or monthly amount and is charged each cycle, while the freelancer can only ask for it under MORE > REQUEST AUTOPAY and wait for approval. AutoPay suits fixed retainers. Project and Offer work is still billed by hand, one Raise Invoice form per WorkStream.

By hand

## How you do it in PeoplePerHour today

1. Check under Settings > Payments on PeoplePerHour that your bank details and address are filled in before the first invoice.
2. Open the WorkStream inbox and pick a stream where the buyer accepted your proposal; PeoplePerHour allows invoices only there.
3. At the bottom of the WorkStream click Raise Invoice, fill in the form and click Send. For an Offer the amount must equal the Offer price.
4. PeoplePerHour posts the invoice in the WorkStream and emails the buyer, who then pays it or rejects it from a drop-down menu on the invoice.
5. Repeat stream by stream, matching what each buyer approved against what you already invoiced, which is where finished jobs slip through unbilled.

With an agent

## How to raise PeoplePerHour invoices for finished work

Prompt

```
Every Friday, go through my active WorkStreams, find jobs the buyer has signed off but I have not invoiced, and draft each invoice for the agreed price.
```

1. 01  
### Keep only billable streams  
The agent goes through list\_workstreams and keeps streams with an accepted proposal. A stream with only a pending proposal is skipped, because PeoplePerHour will not take an invoice there.
2. 02  
### Look for sign-off, not just delivery  
In get\_workstream it reads the messages after the last delivery. A clear approval from the buyer counts. A delivery with no reply, or a buyer asking for changes, is reported as waiting and not billed.
3. 03  
### Bill only the balance  
Invoices already raised in the stream are subtracted from the agreed price, so a job with an earlier part invoice is billed for what remains. A stream that is fully invoiced is skipped.
4. 04  
### Raise after your OK  
create\_invoice gets the remaining amount and a description that names the delivered work. Offer purchases are billed at the Offer price only, whatever the prompt says.
5. 05  
### Report what is still open  
The run ends with invoices raised, jobs waiting for sign-off and older invoices still unpaid after the payment term, so you know which buyer to chase.

### What you get back

Example data

```
Invoices raised after your OK: 2, total £770.
Maria S., Landing page for a SaaS launch: £450, approved in the WorkStream on Wednesday.
Tom R., Shopify product pages: £320, approved on Thursday after the second revision.
Waiting for sign-off: Priya N., Pitch deck refresh, delivered Tuesday, no reply yet.
Skipped: Daniel K., proposal still pending, no invoice allowed.
Unpaid past 7 days: Anna B., £180, raised on 2 Oct.
```

### Other ways to ask

- Raise the invoice for the Maria S. landing page now; she approved the final files this morning.
- Every Monday, list invoices unpaid for more than 7 days without raising anything new.
- At month end, invoice every signed-off job and give me the total per currency.

Before you automate it

## What PeoplePerHour allows, and what to know first

- PeoplePerHour lets a freelancer raise an invoice only in a WorkStream where the buyer accepted a proposal, and an Offer can be invoiced only for its purchase price.
- Buyers on PeoplePerHour have 7 days to pay or reject an invoice for an Offer and 15 days for a Project. When an invoice stays unpaid past 7 days, PeoplePerHour chases it and can release Escrow funds automatically.
- PeoplePerHour forbids asking for money out of Escrow before the work is delivered, and expects at least two further revisions if the buyer is not satisfied at first.
- A paid PeoplePerHour invoice shows as Pending during security checks, usually minutes or hours and up to 3 working days, and funds become withdrawable after a clearing period of about 14 working days.

create\_invoice asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.

Sources: [PeoplePerHour Help: Raising invoices](https://support.peopleperhour.com/hc/en-us/articles/205218287-Raising-invoices) · [PeoplePerHour Help: Paying invoices](https://support.peopleperhour.com/hc/en-us/articles/205217367-Paying-invoices) · [PeoplePerHour Help: My Buyer hasn't paid and I wasn't covered by Escrow](https://support.peopleperhour.com/hc/en-us/articles/205218457-My-Buyer-hasn-t-paid-and-I-wasn-t-covered-by-Escrow-what-can-I-do) · [PeoplePerHour Help: How do I get paid?](https://support.peopleperhour.com/hc/en-us/articles/205217797-How-do-I-get-paid)

REST

## Call create\_invoice from a script

curl

```
curl https://cotlet.dev/api/v1/peopleperhour/create_invoice \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workstream_id":"ws_7731","amount":450,"description":"Landing page design in Figma, final files delivered and approved"}'
```

Example response

```
{
"invoice_id": "inv_3318",
"workstream_id": "ws_7731",
"amount": 300,
"description": "Landing page design, week 2",
"status": "sent",
"raised_at": "2026-10-16T16:00:00Z"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the tool is peopleperhour\_create\_invoice. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/peopleperhour-api-mcp-server#automations)

Tools

## PeoplePerHour tools this automation uses

__Cotlet PeoplePerHour tools used to raise PeoplePerHour invoices for finished work__
| Tool | Parameters |
| ----------------- | ----------------------------------- |
| list\_workstreams | awaiting\_reply, limit, cursor |
| get\_workstream | workstream\_id |
| create\_invoice | workstream\_id, amount, description |

[All 11 PeoplePerHour tools with descriptions](https://cotlet.dev/integrations/peopleperhour-api-mcp-server#tools)

## More PeoplePerHour automations

- [Find new PeoplePerHour projects that fit your skills](https://cotlet.dev/integrations/peopleperhour-api-mcp-server/find-new-projects)
- [Write and send PeoplePerHour proposals with an AI agent](https://cotlet.dev/integrations/peopleperhour-api-mcp-server/send-proposals)
- [Answer PeoplePerHour WorkStream messages on time](https://cotlet.dev/integrations/peopleperhour-api-mcp-server/reply-to-buyer-messages)
- [PeoplePerHour API and MCP server: every tool](https://cotlet.dev/integrations/peopleperhour-api-mcp-server)
- [All use cases](https://cotlet.dev/use-cases)

## Give your agent access to PeoplePerHour.

Free 7-day trial with 5,000 credits, no card needed. Cotlet is independent and not affiliated with PeoplePerHour.

[Request access](https://cotlet.dev/app/signup?app=peopleperhour)
