---
name: "purchasing_save_repeating_bill"
area: "purchasing"
title: "Repeat a bill"
price: "$0.01"
method: "POST"
url: "https://api.conecto.chat/v1/tools/purchasing_save_repeating_bill"
mcp_server: "https://api.conecto.chat/mcp/purchasing"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/purchasing/purchasing_save_repeating_bill"
---

# Repeat a bill (`purchasing_save_repeating_bill`)

Records a supplier's bill again every so many weeks, months or years, with [Month] and [Year] filled in, like Xero's repeating bills.

A supplier's bill recorded again every so many weeks, months or years, like Xero's repeating bills: rent, a lease, a subscription. The supplier and lines as for purchasing_create_bill, every and unit, the start date, and an end_date or a number of times; each bill falls due payment_terms_days after its date (default the supplier's terms). Descriptions, notes and the reference may hold [Month], [Year], [Quarter] or [Week], with an offset like [Month+1]; a reference needs one, as a supplier's reference is recorded once. Conecto's worker records each bill as this key, at what purchasing_create_bill costs, and one an approval rule holds waits for that person. Change one by repeating_id: only what you pass changes; status paused stops it, active resumes it (dates it missed are skipped).

Price: $0.01 a call. A call that fails costs nothing.

## Use it when

The same bill comes each month or year: rent, a lease, a subscription, a service contract.

- For one bill now, use [purchasing_create_bill](https://conecto.chat/tools/purchasing/purchasing_create_bill.md).
- For paying the bills when they fall due, use [purchasing_pay_bills](https://conecto.chat/tools/purchasing/purchasing_pay_bills.md).

## Say this to your agent

> Our warehouse rent is 2,400 euros plus VAT on the first of every month, due three days later. Record it each month.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `repeating_id` | integer | no | From purchasing_list_repeating_bills. At least 1. |  |  |
| `name` | string | no | Your own label, e.g. "Warehouse rent". Up to 120 characters. |  |  |
| `supplier` | integer or string | no | A supplier_id, or the supplier's name. 1 to 200 characters, at least 1. |  |  |
| `lines` | array of objects | no | 1 to 200 items. |  |  |
| `lines[].sku` | string | no | An Inventory item's SKU: received stock comes into Inventory. Its name is the default description. Up to 64 characters. |  |  |
| `lines[].description` | string | no | What is bought. Lines after the first print smaller, underneath. Up to 2,000 characters. |  |  |
| `lines[].quantity` | number or string | no | Default 1. Up to 6 decimals. Up to 24 characters. |  |  |
| `lines[].unit_cost` | number or string | yes, in each item of `lines` | The cost of one before tax; negative for a credit line (a discount). Up to 24 characters. |  |  |
| `lines[].tax_rate` | number or string | no | Tax percent on the line, e.g. 19. Default 0. Up to 24 characters. |  |  |
| `lines[].account` | string | no | The book account the line goes to, e.g. "6600". Default: the supplier's. A sku line goes to the inventory account. Up to 20 characters. |  |  |
| `lines[].tracking` | object | no | With books: tracking options, e.g. {"Department": "Warehouse"}. |  |  |
| `lines[].import_vat` | boolean | no | The line is import VAT from the customs notice, passed on by the carrier or billed by the customs office: unit_cost is the VAT itself, reclaimed whole (Germany's box 62, the UK's box 4), never a cost. No sku, account, tax_rate or tracking. |  |  |
| `currency` | string | no | ISO 4217, e.g. "EUR". Default: the supplier's. Matches ^[A-Za-z]{3}$. |  |  |
| `reference` | string | no | e.g. "Rent [Month] [Year]". Up to 60 characters. |  |  |
| `notes` | string | no | Up to 5,000 characters. |  |  |
| `tax_treatment` | string | no | reverse_charge: the supplier's invoice has no VAT because the business owes it (services from abroad, a reverse-charge trade at home); eu_goods: goods bought from another EU country. The lines' tax_rate is the rate owed; the VAT is owed and reclaimed at once. | `""`, `"reverse_charge"`, `"eu_goods"` |  |
| `payment_terms_days` | integer | no | Each bill falls due this long after its date. Default: the supplier's terms. 0 to 365. |  |  |
| `every` | integer | no | Default 1. 1 to 52. |  |  |
| `unit` | string | no |  | `"week"`, `"month"`, `"year"` |  |
| `start` | string | no | The first bill's date, today or later. Monthly and yearly bills keep to its day of the month. Matches ^\\d{4}-\\d{2}-\\d{2}$. |  |  |
| `end_date` | string | no | No bill after this date. "" for none. Matches ^(\\d{4}-\\d{2}-\\d{2})?$. |  |  |
| `times` | integer | no | How many bills in all. 1 to 1,000. |  |  |
| `status` | string | no |  | `"active"`, `"paused"` |  |

## Example

Written for Hansen & Voss, a restaurant-equipment wholesaler in Hamburg with 60 staff.

MCP: call `purchasing_save_repeating_bill` on the MCP server `https://api.conecto.chat/mcp/purchasing` with these arguments:

```json
{
  "name": "Warehouse rent",
  "supplier": "Hafenblick Immobilien GmbH",
  "reference": "Miete [Month] [Year]",
  "lines": [
    {
      "description": "Warehouse rent, Billbrookdeich 112, [Month] [Year]",
      "unit_cost": "2400",
      "tax_rate": 19,
      "account": "6500"
    }
  ],
  "every": 1,
  "unit": "month",
  "start": "2026-11-01",
  "payment_terms_days": 3
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/purchasing_save_repeating_bill \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Warehouse rent", "supplier": "Hafenblick Immobilien GmbH", "reference": "Miete [Month] [Year]", "lines": [{"description": "Warehouse rent, Billbrookdeich 112, [Month] [Year]", "unit_cost": "2400", "tax_rate": 19, "account": "6500"}], "every": 1, "unit": "month", "start": "2026-11-01", "payment_terms_days": 3}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "purchasing_save_repeating_bill",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.01",
  "balance_usd": "$19.75",
  "result": {
    "repeating": {
      "repeating_id": 4101,
      "name": "Warehouse rent",
      "supplier": {
        "supplier_id": 4102,
        "name": "Hafenblick Immobilien GmbH"
      },
      "lines": [
        {
          "description": "Warehouse rent, Billbrookdeich 112, [Month] [Year]",
          "unit_cost": "2400",
          "tax_rate": 19,
          "account": "6500"
        }
      ],
      "currency": null,
      "reference": "Miete [Month] [Year]",
      "notes": null,
      "tax_treatment": null,
      "payment_terms_days": 3,
      "every": 1,
      "unit": "month",
      "status": "active",
      "next_date": "2026-11-01",
      "upcoming": [
        "2026-11-01",
        "2026-12-01"
      ],
      "end_date": null,
      "times_left": null,
      "made": 0,
      "last_bill_id": null,
      "last_reference": null,
      "last_error": null
    }
  }
}
```

`result`: repeating: its id, name, supplier, lines, reference, every and unit, status, the next three dates, end_date or times_left, how many were recorded, the last bill and why it waits or is paused.

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `not_found` | 404 | No supplier of the business has that supplier_id or name. | Call purchasing_list_suppliers, or add the supplier with purchasing_save_supplier. |
| `not_found` | 404 | A line's SKU is not an Inventory item, or the location does not exist. | Add the item with inventory_save_items, or leave the SKU out. |
| `archived` | 409 | The supplier, item, location or account is archived. | Bring the supplier back with purchasing_save_supplier archived: false, or use another one. |
| `invalid_input` | 400 | A new one lacks supplier, lines, unit or start; start is in the past; end_date is before start; or the reference has no [Month], [Year], [Quarter] or [Week]. | Give what the message names, with dates like 2026-11-01 from today on. |
| `not_found` | 404 | No repeating bill has that repeating_id. | List them with purchasing_list_repeating_bills. |
| `limit_reached` | 409 | The account has 200 repeating bills that have not ended. | Stop one with purchasing_delete_repeating_bill. |

The refusals every tool can give (401 key, 402 balance, 429 limits) are on the errors page: https://conecto.chat/docs/errors.md

## Related

- [purchasing_save_supplier](https://conecto.chat/tools/purchasing/purchasing_save_supplier.md): Adds a supplier or changes one: contact, email for orders, address, currency, payment terms and the book account their bills go to. $0.01 a call.
- [purchasing_list_suppliers](https://conecto.chat/tools/purchasing/purchasing_list_suppliers.md): Suppliers by name, each with what is owed to them on open bills and how many orders are open. Free up to 1,000,000 reads a month.
- [purchasing_save_supplier_items](https://conecto.chat/tools/purchasing/purchasing_save_supplier_items.md): Says which Inventory items a supplier sells: their code, cost, pack size, minimum order, lead time and a fixed reorder quantity. $0.005 per item saved.
- [purchasing_list_supplier_items](https://conecto.chat/tools/purchasing/purchasing_list_supplier_items.md): What suppliers sell: codes, costs, packs, minimums, lead times and the preferred supplier, for one supplier or one SKU. Free up to 1,000,000 reads a month.
- [purchasing_draft_reorders](https://conecto.chat/tools/purchasing/purchasing_draft_reorders.md): Drafts one purchase order per supplier for every item at or below its reorder point, counting what is already on order. $0.01 per draft order.
- [purchasing_create_order](https://conecto.chat/tools/purchasing/purchasing_create_order.md): Drafts a purchase order to a supplier: lines (with Inventory SKUs if you like), currency, delivery date and stock location. $0.01 a call.
- [purchasing_update_order](https://conecto.chat/tools/purchasing/purchasing_update_order.md): Changes a draft order, or records it as sent without emailing it. $0.01 a call.
- [purchasing_send_order](https://conecto.chat/tools/purchasing/purchasing_send_order.md): Emails an order to the supplier with a link to its PDF; a draft takes the next number first. $0.10 a call.
- [purchasing_receive](https://conecto.chat/tools/purchasing/purchasing_receive.md): Records what arrived on a sent order; lines with a SKU come into Inventory at the ordered cost. $0.01 a call.
- [purchasing_close_order](https://conecto.chat/tools/purchasing/purchasing_close_order.md): Closes a sent order (stop waiting for the rest) or cancels one that received nothing. $0.01 a call.
- [purchasing_list_orders](https://conecto.chat/tools/purchasing/purchasing_list_orders.md): Purchase orders, newest first, by status, supplier or date; or one order in full. Free up to 1,000,000 reads a month.
- [purchasing_create_bill](https://conecto.chat/tools/purchasing/purchasing_create_bill.md): Records a bill a supplier sent, from its own lines or from an order, with its PDF; it is posted to the books. $0.01 a call.
- [purchasing_update_bill](https://conecto.chat/tools/purchasing/purchasing_update_bill.md): Adds a recorded bill's PDF if it has none, or changes its notes or due date; amounts and the PDF it has never change. $0.01 a call.
- [purchasing_pay_bill](https://conecto.chat/tools/purchasing/purchasing_pay_bill.md): Records money paid on a bill, or money back from the supplier; it is posted to the books. $0.01 a call.
- [purchasing_pay_bills](https://conecto.chat/tools/purchasing/purchasing_pay_bills.md): Pays several bills at once from one bank account, like Xero's batch payments, with the SEPA file to upload to the bank. $0.01 per bill paid.
- [purchasing_set_planned_date](https://conecto.chat/tools/purchasing/purchasing_set_planned_date.md): Plans the day the business will pay a bill, so the cash flow forecast takes the money out then rather than on the due date. Free.
- [purchasing_record_prepayment](https://conecto.chat/tools/purchasing/purchasing_record_prepayment.md): Records a deposit the business paid a supplier before their bill, like Xero's prepayments; it waits as a credit with them. $0.01 a call.
- [purchasing_use_credit](https://conecto.chat/tools/purchasing/purchasing_use_credit.md): Puts a credit with a supplier on their bill, like Xero's allocate credit, or records it coming back. $0.01 a call.
- [purchasing_list_credits](https://conecto.chat/tools/purchasing/purchasing_list_credits.md): Lists credits with suppliers, deposits and overpayments, with what is left on each. Free up to 1,000,000 reads a month.
- [purchasing_list_repeating_bills](https://conecto.chat/tools/purchasing/purchasing_list_repeating_bills.md): Lists the repeating bills: whose each is, how often, the next dates, and what each recorded. Free up to 1,000,000 reads a month.
- [purchasing_delete_repeating_bill](https://conecto.chat/tools/purchasing/purchasing_delete_repeating_bill.md): Stops a repeating bill for good; the bills it recorded stay. Free.
- [purchasing_void_bill](https://conecto.chat/tools/purchasing/purchasing_void_bill.md): Voids a bill entered by mistake; the books reverse it and its order can be billed again. $0.01 a call.
- [purchasing_list_bills](https://conecto.chat/tools/purchasing/purchasing_list_bills.md): Supplier bills by due date, filtered by status, supplier, order or dates; or one bill in full. Free up to 1,000,000 reads a month.
- [purchasing_report](https://conecto.chat/tools/purchasing/purchasing_report.md): Aged payables (what is owed to each supplier by how late) or spend (what each supplier billed and was paid). Free up to 1,000,000 reads a month.
