[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Add expense

> Add a cost document by hand: goods purchase, business cost or phone and internet bill. Inputs, cURL, Python and Node.js examples and an example response.

Source: https://cotlet.dev/docs/api/ifirma/add_expense

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)

Add a cost document by hand: goods purchase, business cost or phone and internet bill.

iFirma API: https://cotlet.dev/docs/api/ifirma.md

`POST https://cotlet.dev/api/v1/ifirma/invoices/{invoice_number}/expenses`

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

Adds one cost document with the amounts per VAT rate. KSeF marking is required: number (with ksef_number), offline, bfk or di. The seller is matched by contractor_id or NIP. The cost goes into your records. By default you confirm each call; you can switch that off for this tool.

## Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `type` | string | yes | goods_purchase, business_cost_invoice or phone_internet. |
| `invoice_number` | string | yes | Number printed on the supplier document. |
| `expense_name` | string | yes | Name of the expense. |
| `issue_date` | string | yes | YYYY-MM-DD. |
| `ksef_marking` | string | yes | number, offline, bfk or di. |
| `ksef_number` | string | no | Required when ksef_marking is number. |
| `contractor_id` | string | no | Contractor ID from list_contractors. |
| `net_23` | number | no | Net amount at 23%. The same for net_8, net_5, net_0 and net_exempt. |
| `vat_23` | number | no | VAT amount at 23%. The same for vat_8 and vat_5. |

## Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/ifirma/invoices/invoice%20number/expenses \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"type","expense_name":"expense name","issue_date":"issue date","ksef_marking":"ksef marking"}'
```

**Python**

```python
result = client.call("ifirma", "add_expense", {"type":"type","invoice_number":"invoice number","expense_name":"expense name","issue_date":"issue date","ksef_marking":"ksef marking"})
```

**Node.js**

```js
const result = await cotlet.call('ifirma', 'add_expense', {"type":"type","invoice_number":"invoice number","expense_name":"expense name","issue_date":"issue date","ksef_marking":"ksef marking"});
```

**CLI**

```bash
cotlet call ifirma add_expense --data '{"type":"type","invoice_number":"invoice number","expense_name":"expense name","issue_date":"issue date","ksef_marking":"ksef marking"}'
```

## Example response

```json
{
  "id": 3310027,
  "type": "phone_internet",
  "invoice_number": "2026/10/0042",
  "net": 81.3,
  "vat": 18.7,
  "gross": 100
}
```

Previous: [Book KSeF purchase invoice](https://cotlet.dev/docs/api/ifirma/book_ksef_purchase_invoice.md)
Next: [Send payment reminder](https://cotlet.dev/docs/api/ifirma/send_payment_reminder.md)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
