---
name: "invoices_save_repeating"
area: "invoices"
title: "Repeat an invoice"
price: "$0.001"
method: "POST"
url: "https://api.conecto.chat/v1/tools/invoices_save_repeating"
mcp_server: "https://api.conecto.chat/mcp/invoices"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/invoices/invoices_save_repeating"
---

# Repeat an invoice (`invoices_save_repeating`)

Makes an invoice again every so many weeks, months or years, drafted or sent on its day, with [Month] and [Year] filled in, like Xero's repeating invoices.

An invoice made again every so many weeks, months or years, like Xero's repeating invoices: the customer and lines as for invoices_create, every and unit, the start date, and an end_date or a number of times. action draft leaves each one for you to check and send; send emails it to the customer on its day. Descriptions and notes may hold [Month], [Year], [Quarter] or [Week], with an offset like [Month+1], filled in from each invoice's date. Each invoice is made by Conecto's worker as this key and costs what invoices_create and invoices_send cost. Change one by repeating_id: only what you pass changes; status paused stops it, active resumes it (dates it missed are skipped).

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

## Use it when

A customer pays the same each month or year: a service contract, rent, a retainer, a subscription.

- For one invoice now, use [invoices_create](https://conecto.chat/tools/invoices/invoices_create.md).
- For chasing everyone who is late every week, use [invoices_remind_overdue](https://conecto.chat/tools/invoices/invoices_remind_overdue.md).

## Say this to your agent

> Bill the Strandhotel 350 euros plus VAT for the kitchen service contract on the first of every month for a year, and send it straight away.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `repeating_id` | integer | no | From invoices_list_repeating. At least 1. |  |  |
| `name` | string | no | Your own label, e.g. "Hotel service contract". Up to 120 characters. |  |  |
| `customer` | object | no | Who the document is for. Link a CRM record with contact_id or company_id, or give name and email (an email that matches a CRM contact links it). What is given here is printed as it is. |  |  |
| `customer.contact_id` | integer | no | A CRM contact; fills the name and email. At least 1. |  |  |
| `customer.company_id` | integer | no | A CRM company; fills the name. At least 1. |  |  |
| `customer.name` | string | no | Who is billed, as printed. Up to 200 characters. |  |  |
| `customer.email` | string | no | Where the document is emailed. Up to 254 characters. |  |  |
| `customer.address` | string | no | Postal address, one line per row. Up to 1,000 characters. |  |  |
| `customer.tax_id` | string | no | The customer's VAT or tax number, for business customers. A reverse-charge or intra-EU invoice needs their EU VAT ID, e.g. "FR12345678901". Up to 60 characters. |  |  |
| `customer.country` | string | no | ISO 3166-1 code of the customer's country, e.g. "FR". Checks intra_eu and export invoices; e-invoices need it. Up to 2 characters. |  |  |
| `items` | array of objects | no | 1 to 200 items. |  |  |
| `items[].description` | string | yes, in each item of `items` | What was sold. Lines after the first print smaller, underneath. 1 to 2,000 characters. |  |  |
| `items[].quantity` | number or string | no | Default 1. Up to 6 decimals, e.g. 1.5 (hours). Up to 24 characters. |  |  |
| `items[].unit_price` | number or string | yes, in each item of `items` | The price of one, before tax, e.g. "19.99". Negative for a credit line. Up to 24 characters. |  |  |
| `items[].tax_rate` | number or string | no | Tax percent, e.g. 19. Default: the profile's tax_rate. Up to 24 characters. |  |  |
| `items[].discount` | number or string | no | Discount percent on this line, e.g. 10. Up to 24 characters. |  |  |
| `items[].account` | string | no | With books: the income account this line books to, e.g. "4100" for services. Default: the sales account. Up to 20 characters. |  |  |
| `items[].tracking` | object | no | With books: tracking options, e.g. {"Department": "Service"}. |  |  |
| `currency` | string | no | ISO 4217, e.g. "USD", "EUR" or "JPY". Matches ^[A-Za-z]{3}$. |  |  |
| `notes` | string | no | Printed above the lines, e.g. "Thank you for your order" or a project reference. Up to 5,000 characters. |  |  |
| `payment_link` | string | no | An https link to pay this document. Default: the profile's payment_link. Up to 500 characters. |  |  |
| `tax_exemption` | string | no | Why lines with tax_rate 0 carry no tax, printed on the invoice as the law asks: exempt, zero_rated, reverse_charge (the customer accounts for the VAT), intra_eu (goods to a business in another EU country), export (goods leaving the EU), outside_scope, small_business (a business under its country's small-business VAT exemption, such as UStG §19 or art. 293 B CGI: no line may carry tax). Needed in the EU for any line without tax. Default: the profile's. | `""`, `"exempt"`, `"zero_rated"`, `"reverse_charge"`, `"intra_eu"`, `"export"`, `"outside_scope"`, `"small_business"` |  |
| `tax_exemption_note` | string | no | The wording printed for the exemption instead of the standard one, e.g. "Steuerbefreit als Kleinunternehmer nach § 19 UStG". Up to 300 characters. |  |  |
| `e_invoice` | string | no | Invoices and their credit notes as EN 16931 e-invoices (German B2B invoices must be from 2027): factur-x (Factur-X/ZUGFeRD, the XML inside the PDF/A-3) or xrechnung (XRechnung 3.0, its own XML beside the PDF), checked against the EN 16931 schema before sending. "" is the default: none, except that from 2027 an invoice from a German business to a German business above EUR 250 is a factur-x; "none" opts out (a business under the EUR 800,000 turnover allowance until 2028). Needs the customer's country. Default: the profile's. | `""`, `"factur-x"`, `"xrechnung"`, `"none"` |  |
| `payment_terms_days` | integer | no | Each invoice falls due this long after its date. Default: the profile's payment terms. 0 to 365. |  |  |
| `every` | integer | no | Default 1. 1 to 52. |  |  |
| `unit` | string | no |  | `"week"`, `"month"`, `"year"` |  |
| `start` | string | no | The first invoice's date, today or later. Monthly and yearly invoices keep to its day of the month. Matches ^\\d{4}-\\d{2}-\\d{2}$. |  |  |
| `end_date` | string | no | No invoice after this date. "" for none. Matches ^(\\d{4}-\\d{2}-\\d{2})?$. |  |  |
| `times` | integer | no | How many invoices in all. 1 to 1,000. |  |  |
| `status` | string | no |  | `"active"`, `"paused"` |  |
| `action` | string | no | Default draft. | `"draft"`, `"send"` |  |

## Example

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

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

```json
{
  "name": "Hotel service contract",
  "customer": {
    "name": "Strandhotel Övelgönne",
    "email": "buchhaltung@strandhotel.example"
  },
  "items": [
    {
      "description": "Kitchen service contract, [Month] [Year]",
      "unit_price": "350",
      "tax_rate": 19
    }
  ],
  "every": 1,
  "unit": "month",
  "start": "2026-11-01",
  "times": 12,
  "action": "send"
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/invoices_save_repeating \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Hotel service contract", "customer": {"name": "Strandhotel Övelgönne", "email": "buchhaltung@strandhotel.example"}, "items": [{"description": "Kitchen service contract, [Month] [Year]", "unit_price": "350", "tax_rate": 19}], "every": 1, "unit": "month", "start": "2026-11-01", "times": 12, "action": "send"}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "invoices_save_repeating",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.001",
  "balance_usd": "$19.75",
  "result": {
    "repeating": {
      "repeating_id": 4101,
      "name": "Hotel service contract",
      "customer": {
        "name": "Strandhotel Övelgönne",
        "email": "buchhaltung@strandhotel.example"
      },
      "items": [
        {
          "description": "Kitchen service contract, [Month] [Year]",
          "unit_price": "350",
          "tax_rate": 19
        }
      ],
      "currency": null,
      "notes": null,
      "payment_terms_days": null,
      "every": 1,
      "unit": "month",
      "action": "send",
      "status": "active",
      "next_date": "2026-11-01",
      "upcoming": [
        "2026-11-01",
        "2026-12-01"
      ],
      "end_date": null,
      "times_left": 12,
      "made": 0,
      "last_invoice": null,
      "last_invoice_id": null,
      "last_error": null
    }
  }
}
```

`result`: repeating: its id, name, customer, lines, every and unit, action (draft or send), status, the next three dates, end_date or times_left, how many were made, the last invoice and why it is paused if it is.

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `invalid_input` | 400 | A line, amount, date, currency, country, email or link is not valid, or the total comes out negative or too large. | Fix what the message names: amounts like 19.99, dates like 2026-11-20, currencies like EUR. |
| `not_found` | 404 | The customer's contact_id or company_id is not in the business's CRM. | Find the record with crm_search, or give a name and email instead. |
| `invalid_input` | 400 | A new one lacks customer, items, unit or start; start is in the past; or end_date is before start. | Give what the message names, with dates like 2026-11-01 from today on. |
| `not_found` | 404 | No repeating invoice has that repeating_id. | List them with invoices_list_repeating. |
| `limit_reached` | 409 | The account has 200 repeating invoices that have not ended. | Stop one with invoices_delete_repeating. |

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

## Related

- [invoices_set_profile](https://conecto.chat/tools/invoices/invoices_set_profile.md): Sets the business details on quotes and invoices: name, country, address, tax ID, logo, terms, tax, numbering, how to pay and legal notes. $0.001 a call.
- [invoices_get_profile](https://conecto.chat/tools/invoices/invoices_get_profile.md): The business details on quotes and invoices, the next numbers, and what is missing before documents can be sent. Free up to 1,000,000 reads a month.
- [invoices_connect_stripe](https://conecto.chat/tools/invoices/invoices_connect_stripe.md): Connects the business's own Stripe account with a restricted key, so invoices can be paid online; the money goes straight to the business. $0.001 a call.
- [invoices_create](https://conecto.chat/tools/invoices/invoices_create.md): Creates a draft quote or invoice: the customer, the lines, the currency and the dates. $0.01 a call.
- [invoices_update](https://conecto.chat/tools/invoices/invoices_update.md): Changes a draft quote or invoice; customer and lines replace the old ones. $0.01 a call.
- [invoices_send](https://conecto.chat/tools/invoices/invoices_send.md): Sends a draft: it gets the next number, its PDF is made, and the customer is emailed a link to view, pay or accept it. $0.10 a call.
- [invoices_get](https://conecto.chat/tools/invoices/invoices_get.md): One quote or invoice in full, by invoice_id or number: lines, totals, taxes, payments, history, its page and a fresh PDF link. Free up to 1,000,000 reads a month.
- [invoices_list](https://conecto.chat/tools/invoices/invoices_list.md): Quotes and invoices, newest first, by kind, status (also overdue, unpaid and expired), customer and issue date. Free up to 1,000,000 reads a month.
- [invoices_convert_quote](https://conecto.chat/tools/invoices/invoices_convert_quote.md): Turns an accepted quote into a draft invoice with the same customer and lines. $0.01 a call.
- [invoices_record_payment](https://conecto.chat/tools/invoices/invoices_record_payment.md): Records money received against a sent invoice, or a refund; the invoice becomes partially paid or paid. $0.01 a call.
- [invoices_record_prepayment](https://conecto.chat/tools/invoices/invoices_record_prepayment.md): Records a customer's deposit before there is an invoice, like Xero's prepayments; it waits as their credit, with its VAT owed at once. $0.01 a call.
- [invoices_use_credit](https://conecto.chat/tools/invoices/invoices_use_credit.md): Puts a customer's credit on their invoice, like Xero's allocate credit, or pays it back to them. $0.01 a call.
- [invoices_list_credits](https://conecto.chat/tools/invoices/invoices_list_credits.md): Lists customers' credits, deposits and overpayments, with what is left on each. Free up to 1,000,000 reads a month.
- [invoices_remind](https://conecto.chat/tools/invoices/invoices_remind.md): Emails the customer a reminder about a sent invoice with a balance, at most once a day. $0.02 a call.
- [invoices_remind_overdue](https://conecto.chat/tools/invoices/invoices_remind_overdue.md): Emails a reminder about every invoice at least some days overdue, the longest overdue first. $0.02 per reminder sent.
- [invoices_set_expected_date](https://conecto.chat/tools/invoices/invoices_set_expected_date.md): Notes the day a customer says they will pay an invoice, so the cash flow forecast counts the money then, even when the invoice is overdue. Free.
- [invoices_create_credit_note](https://conecto.chat/tools/invoices/invoices_create_credit_note.md): Corrects a sent invoice with a numbered credit note: all of it, some of its lines or an amount, emailed like an invoice. $0.10 a call.
- [invoices_void](https://conecto.chat/tools/invoices/invoices_void.md): Voids a document: a sent one keeps its number but can no longer be paid or accepted; a draft is discarded. $0.01 a call.
- [invoices_list_repeating](https://conecto.chat/tools/invoices/invoices_list_repeating.md): Lists the repeating invoices: who each is for, how often, the next dates, and what each made. Free up to 1,000,000 reads a month.
- [invoices_delete_repeating](https://conecto.chat/tools/invoices/invoices_delete_repeating.md): Stops a repeating invoice for good; the invoices it made stay. Free.
- [invoices_statement](https://conecto.chat/tools/invoices/invoices_statement.md): Makes a customer statement, outstanding or activity, as a PDF, and emails it when asked, like Xero's statements. $0.05 a call.
- [invoices_summary](https://conecto.chat/tools/invoices/invoices_summary.md): What customers owe, per currency: outstanding, overdue and paid this month, and the quotes still open. Free up to 1,000,000 reads a month.
- [invoices_report](https://conecto.chat/tools/invoices/invoices_report.md): Aged receivables on any day, or sales per customer for a period with the credit notes taken off. Free up to 1,000,000 reads a month.
