# Send an invoice for payment

> The invoices.send operation: POST /api/v1/invoices/{id}/send in the REST API and the invoices_send tool in the MCP server.

Emails an open `send_invoice` invoice to its customer, in the invoice's language: the amount due (after the
credit balance), the due date, the legal entity's bank transfer details (account holder, IBAN, BIC, bank) and
the payment reference, which is the invoice number, with a link to the PDF.

Sending again sends the email again; `sentAt` says when it last went out. Reminders before and after the due
date are sent automatically. The entity needs bank transfer details in its invoice settings
(`invoice_bank_transfer_missing` otherwise). The email goes out after the request commits; a dry run sends
nothing.

## At a glance

- **REST:** `POST /api/v1/invoices/{id}/send`
- **MCP tool:** `invoices_send`
- **Operation ID:** `invoices.send`
- **Scope:** Brand
- **Permission:** `invoices:write`
- **Risk tier:** `write`
- **Dry run:** Supported (send `Ownrecord-Dry-Run: true`)
- **Idempotency:** `Idempotency-Key` required
- **Modes:** Test and live
- **Authentication:** API key with the `invoices:write` scope
- **Since:** M5

## Request

### Path parameters

| Field | Type       | Description               |
| ----- | ---------- | ------------------------- |
| `id`  | `inv_…` ID | The invoice ID (`inv_…`). |

### Body

A JSON object (`Content-Type: application/json`):

| Field             | Type                 | Required | Description                                                                   |
| ----------------- | -------------------- | -------- | ----------------------------------------------------------------------------- |
| `expectedVersion` | integer (at least 1) | No       | The `version` you read; a newer stored version fails with `version_conflict`. |

## Response

`200 OK` with a JSON object:

| Field                             | Type                                                                                                   | Description                                                                                                                                                                                                                                                         |
| --------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                              | `inv_…` ID                                                                                             |                                                                                                                                                                                                                                                                     |
| `object`                          | `"invoice"`                                                                                            |                                                                                                                                                                                                                                                                     |
| `livemode`                        | boolean                                                                                                |                                                                                                                                                                                                                                                                     |
| `entityId`                        | `ent_…` ID                                                                                             |                                                                                                                                                                                                                                                                     |
| `brandId`                         | `brd_…` ID                                                                                             |                                                                                                                                                                                                                                                                     |
| `number`                          | string or null                                                                                         | The invoice number: gap-free per legal entity, mode, brand series and year (§18.2). Null for a draft: the number is taken at finalization.                                                                                                                          |
| `numbering`                       | object or null                                                                                         |                                                                                                                                                                                                                                                                     |
| `customerId`                      | `cus_…` ID or null                                                                                     |                                                                                                                                                                                                                                                                     |
| `subscriptionId`                  | `sub_…` ID or null                                                                                     |                                                                                                                                                                                                                                                                     |
| `collectionMethod`                | one of `charge_automatically`, `send_invoice`                                                          |                                                                                                                                                                                                                                                                     |
| `kind`                            | one of `invoice`, `receipt` or null                                                                    | `invoice` (business customers) or `receipt` (the receipt-invoice consumers get); null for a draft.                                                                                                                                                                  |
| `status`                          | one of 9 values, e.g. `draft`, `pending_registration`, `issued` (all in the OpenAPI document)          | `draft` → `open` (finalized) → `paid`, `void` or `uncollectible`. Checkout invoices are `issued` (paid at once), or `pending_registration`: a full invoice charged before the tax registration exists; the receipt went out and the formal invoice follows (§18.1). |
| `language`                        | one of `en`, `de`, `fr`, `hr`, `it`, `es` or null                                                      |                                                                                                                                                                                                                                                                     |
| `issuedAt`                        | date-time or null                                                                                      |                                                                                                                                                                                                                                                                     |
| `issueDate`                       | string or null                                                                                         | The issue date in the seller's time zone.                                                                                                                                                                                                                           |
| `taxPoint`                        | date-time or null                                                                                      |                                                                                                                                                                                                                                                                     |
| `taxPointDate`                    | string or null                                                                                         | The date of supply in the seller's time zone.                                                                                                                                                                                                                       |
| `daysUntilDue`                    | integer or null                                                                                        | send_invoice: days from the issue date to the due date.                                                                                                                                                                                                             |
| `dueDate`                         | string or null                                                                                         | send_invoice: when payment is due (fixed at finalization).                                                                                                                                                                                                          |
| `seller`                          | object or null                                                                                         |                                                                                                                                                                                                                                                                     |
| `buyer`                           | object or null                                                                                         |                                                                                                                                                                                                                                                                     |
| `currency`                        | string                                                                                                 |                                                                                                                                                                                                                                                                     |
| `lines`                           | array of object                                                                                        |                                                                                                                                                                                                                                                                     |
| `lines[].id`                      | string                                                                                                 | The tax quote's line ID.                                                                                                                                                                                                                                            |
| `lines[].description`             | string                                                                                                 |                                                                                                                                                                                                                                                                     |
| `lines[].productId`               | `prod_…` ID or null                                                                                    |                                                                                                                                                                                                                                                                     |
| `lines[].priceId`                 | `price_…` ID or null                                                                                   |                                                                                                                                                                                                                                                                     |
| `lines[].quantity`                | integer                                                                                                |                                                                                                                                                                                                                                                                     |
| `lines[].taxCategoryId`           | one of 9 values, e.g. `electronically_supplied_service`, `saas`, `ebook` (all in the OpenAPI document) |                                                                                                                                                                                                                                                                     |
| `lines[].taxBehavior`             | one of `inclusive`, `exclusive`                                                                        |                                                                                                                                                                                                                                                                     |
| `lines[].unitAmount`              | money                                                                                                  | The net price of one unit (may be finer than the minor unit).                                                                                                                                                                                                       |
| `lines[].net`                     | money                                                                                                  |                                                                                                                                                                                                                                                                     |
| `lines[].tax`                     | object                                                                                                 |                                                                                                                                                                                                                                                                     |
| `lines[].tax.ratePpm`             | string                                                                                                 | Parts per million as a string (19% = "190000").                                                                                                                                                                                                                     |
| `lines[].tax.amount`              | money                                                                                                  |                                                                                                                                                                                                                                                                     |
| `lines[].tax.jurisdictionId`      | string or null                                                                                         |                                                                                                                                                                                                                                                                     |
| `lines[].tax.regimeId`            | string or null                                                                                         |                                                                                                                                                                                                                                                                     |
| `lines[].tax.decision`            | one of `charge`, `reverse_charge`, `exempt`, `not_taxable`, `out_of_scope`, `not_collected`, `blocked` | What happened to the tax: `charge`, `reverse_charge`, `exempt`, `not_taxable`, `out_of_scope`, `not_collected`.                                                                                                                                                     |
| `lines[].tax.rateKind`            | one of `standard`, `reduced`, `super_reduced`, `parking`, `zero`, `exempt`, `not_taxable` or null      |                                                                                                                                                                                                                                                                     |
| `lines[].tax.rateId`              | string or null                                                                                         |                                                                                                                                                                                                                                                                     |
| `lines[].tax.pendingRegistration` | boolean                                                                                                |                                                                                                                                                                                                                                                                     |
| `lines[].gross`                   | money                                                                                                  |                                                                                                                                                                                                                                                                     |
| `lines[].kind`                    | one of `licensed`, `metered`, `late_usage`, `proration`, `invoice_item` or null                        | Where the line came from (§16.3 order); null on checkout invoices.                                                                                                                                                                                                  |
| `lines[].period`                  | object or null                                                                                         |                                                                                                                                                                                                                                                                     |
| `lines[].subscriptionItemId`      | string or null                                                                                         |                                                                                                                                                                                                                                                                     |
| `lines[].invoiceItemId`           | `ii_…` ID or null                                                                                      |                                                                                                                                                                                                                                                                     |
| `lines[].discount`                | money or null                                                                                          | What discounts took off the line before tax.                                                                                                                                                                                                                        |
| `lines[].meteredQuantity`         | string or null                                                                                         | A metered line's usage (its quantity is 1).                                                                                                                                                                                                                         |
| `totals`                          | object or null                                                                                         |                                                                                                                                                                                                                                                                     |
| `taxCurrencyTotals`               | object or null                                                                                         | The tax in the seller's tax currency when the invoice is in another one (§18.3).                                                                                                                                                                                    |
| `creditApplied`                   | money or null                                                                                          | Taken from the customer's credit balance at finalization (§16.11).                                                                                                                                                                                                  |
| `amountDue`                       | money or null                                                                                          | What the customer pays: the gross total less the credit applied. Null on checkout invoices.                                                                                                                                                                         |
| `notes`                           | array of object                                                                                        |                                                                                                                                                                                                                                                                     |
| `notes[].code`                    | one of `reverse_charge`, `exempt`, `out_of_scope`, `registration_pending`, `oss_scheme`                |                                                                                                                                                                                                                                                                     |
| `notes[].text`                    | string                                                                                                 | The note as printed.                                                                                                                                                                                                                                                |
| `fieldCheck`                      | object or null                                                                                         | What the knowledge base's invoicing rules ask for that the invoice lacks (`missing`), and requirements Ownrecord can't check yet (`unchecked`).                                                                                                                     |
| `pendingRegistration`             | boolean                                                                                                | A full invoice with a line charged before the registration exists (§18.1).                                                                                                                                                                                          |
| `paymentIds`                      | array of `pay_…` ID                                                                                    |                                                                                                                                                                                                                                                                     |
| `creditNoteIds`                   | array of `cn_…` ID                                                                                     |                                                                                                                                                                                                                                                                     |
| `ledgerTxnIds`                    | array of `txn_…` ID                                                                                    |                                                                                                                                                                                                                                                                     |
| `quoteId`                         | `tq_…` ID or null                                                                                      | The tax quote the invoice shows (null for a draft).                                                                                                                                                                                                                 |
| `quoteIds`                        | array of `tq_…` ID                                                                                     | Every quote of the invoice: lines taxed at another date (prorations) have their own quote.                                                                                                                                                                          |
| `pdf`                             | object or null                                                                                         | Null for a draft: the PDF is rendered at finalization.                                                                                                                                                                                                              |
| `finalizedAt`                     | date-time or null                                                                                      |                                                                                                                                                                                                                                                                     |
| `paidAt`                          | date-time or null                                                                                      |                                                                                                                                                                                                                                                                     |
| `payment`                         | object or null                                                                                         | How the invoice was paid: `bank_transfer` (marked paid), `processor` (a card or debit payment) or `credit_balance`.                                                                                                                                                 |
| `voidedAt`                        | date-time or null                                                                                      |                                                                                                                                                                                                                                                                     |
| `markedUncollectibleAt`           | date-time or null                                                                                      |                                                                                                                                                                                                                                                                     |
| `emailedAt`                       | date-time or null                                                                                      |                                                                                                                                                                                                                                                                     |
| `sentAt`                          | date-time or null                                                                                      | When `invoices.send` last emailed the invoice.                                                                                                                                                                                                                      |
| `draft`                           | object or null                                                                                         | A draft's lines before tax (tax is quoted at finalization); null once finalized.                                                                                                                                                                                    |
| `metadata`                        | object                                                                                                 |                                                                                                                                                                                                                                                                     |
| `version`                         | integer                                                                                                | Pass it as `expectedVersion` to refuse a change if the invoice changed. Rendering the PDF and emailing the invoice change it too.                                                                                                                                   |
| `createdAt`                       | date-time                                                                                              |                                                                                                                                                                                                                                                                     |
| `updatedAt`                       | date-time                                                                                              |                                                                                                                                                                                                                                                                     |

## Examples

### Send the finalized consulting invoice

```http
POST /api/v1/invoices/inv_01m4tx5nj8emwbyf7y9vcf47yk/send
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
```

Response (`200`):

```json
{
  "id": "inv_01m4tx5nj8emwbyf7y9vcf47yk",
  "object": "invoice",
  "livemode": false,
  "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "number": "GEN-2026-000131",
  "numbering": {
    "series": "GEN",
    "year": 2026,
    "seq": "131"
  },
  "customerId": "cus_01m4tx5nj8emwbyf7y9vcf47ym",
  "subscriptionId": null,
  "collectionMethod": "send_invoice",
  "kind": "invoice",
  "status": "open",
  "language": "en",
  "issuedAt": "2026-10-20T09:00:00.000Z",
  "issueDate": "2026-10-20",
  "taxPoint": "2026-10-20T09:00:00.000Z",
  "taxPointDate": "2026-10-20",
  "daysUntilDue": 14,
  "dueDate": "2026-11-03",
  "seller": {
    "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
    "legalName": "Acme Digital d.o.o.",
    "tradingName": null,
    "address": {
      "line1": "Ilica 1",
      "line2": null,
      "city": "Zagreb",
      "postalCode": "10000",
      "region": null,
      "country": "HR"
    },
    "companyRegistryId": "080000001",
    "taxIds": [
      {
        "type": "eu_vat",
        "value": "HR12345678901",
        "regimeId": null
      }
    ],
    "brand": {
      "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
      "name": "Genno",
      "primaryColor": "#0E6B5C",
      "accentColor": null,
      "supportEmail": "help@genno.example",
      "supportUrl": null
    },
    "footerText": null
  },
  "buyer": {
    "type": "b2b",
    "customerId": "cus_01m4tx5nj8emwbyf7y9vcf47ym",
    "name": "Alpen Apps GmbH",
    "email": "billing@alpen.example",
    "address": null,
    "country": "AT",
    "taxId": {
      "type": "eu_vat",
      "value": "ATU00000000",
      "country": "AT"
    }
  },
  "currency": "EUR",
  "lines": [
    {
      "id": "1",
      "description": "Implementation workshop (days)",
      "productId": "prod_01m4tx5nj8emwbyf7y9vcf47yr",
      "priceId": null,
      "quantity": 2,
      "taxCategoryId": "consulting_remote",
      "taxBehavior": "exclusive",
      "unitAmount": {
        "amount": "600000000",
        "currency": "EUR"
      },
      "net": {
        "amount": "1200000000",
        "currency": "EUR"
      },
      "tax": {
        "ratePpm": "0",
        "amount": {
          "amount": "0",
          "currency": "EUR"
        },
        "jurisdictionId": "AT",
        "regimeId": "EU_OSS_UNION",
        "decision": "reverse_charge",
        "rateKind": null,
        "rateId": null,
        "pendingRegistration": false
      },
      "gross": {
        "amount": "1200000000",
        "currency": "EUR"
      },
      "kind": "invoice_item",
      "period": null,
      "subscriptionItemId": null,
      "invoiceItemId": "ii_01m4tx5nj8emwbyf7y9vcf47ys",
      "discount": null,
      "meteredQuantity": null
    }
  ],
  "totals": {
    "net": {
      "amount": "1200000000",
      "currency": "EUR"
    },
    "tax": {
      "amount": "0",
      "currency": "EUR"
    },
    "gross": {
      "amount": "1200000000",
      "currency": "EUR"
    },
    "taxByRate": [
      {
        "ratePpm": "0",
        "jurisdictionId": "AT",
        "regimeId": "EU_OSS_UNION",
        "decision": "reverse_charge",
        "net": {
          "amount": "1200000000",
          "currency": "EUR"
        },
        "tax": {
          "amount": "0",
          "currency": "EUR"
        }
      }
    ]
  },
  "taxCurrencyTotals": null,
  "creditApplied": {
    "amount": "200000000",
    "currency": "EUR"
  },
  "amountDue": {
    "amount": "1000000000",
    "currency": "EUR"
  },
  "notes": [
    {
      "code": "reverse_charge",
      "text": "Prijenos porezne obveze (reverse charge) – čl. 17. st. 1. Zakona o PDV-u"
    }
  ],
  "fieldCheck": {
    "invoicingRuleIds": [],
    "missing": ["buyer_address"],
    "unchecked": []
  },
  "pendingRegistration": false,
  "paymentIds": [],
  "creditNoteIds": [],
  "ledgerTxnIds": ["txn_01m4tx5nj8emwbyf7y9vcf47yn"],
  "quoteId": "tq_01m4tx5nj8emwbyf7y9vcf47xr",
  "quoteIds": ["tq_01m4tx5nj8emwbyf7y9vcf47xr"],
  "pdf": {
    "status": "pending",
    "fileId": null,
    "sha256": null,
    "size": null,
    "templateVersion": null,
    "renderedAt": null,
    "url": "/api/v1/invoices/inv_01m4tx5nj8emwbyf7y9vcf47yk/pdf"
  },
  "finalizedAt": "2026-10-20T09:00:00.000Z",
  "paidAt": null,
  "payment": null,
  "voidedAt": null,
  "markedUncollectibleAt": null,
  "emailedAt": "2026-10-20T09:01:00.000Z",
  "sentAt": "2026-10-20T09:01:00.000Z",
  "draft": null,
  "metadata": {
    "contract": "ENT-2026-07"
  },
  "version": 3,
  "createdAt": "2026-10-20T08:30:00.000Z",
  "updatedAt": "2026-10-20T09:01:00.000Z"
}
```

## Errors

| Code                                                                                                           | HTTP status | When                                                                                         | What to do                                                                                                                                                                                                                                                               |
| -------------------------------------------------------------------------------------------------------------- | ----------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [`validation_failed`](https://ownrecord.io/docs/reference/errors.md#validation_failed)                         | 400         | `id` is malformed, or the customer has no email address.                                     | Fix the fields listed in `details.issues` and send the request again.                                                                                                                                                                                                    |
| [`resource_not_found`](https://ownrecord.io/docs/reference/errors.md#resource_not_found)                       | 404         | This brand has no such invoice in this mode (invoices belong to one brand and one mode).     | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode.                                                                                                                                                                     |
| [`invoice_status_invalid`](https://ownrecord.io/docs/reference/errors.md#invoice_status_invalid)               | 409         | Only open `send_invoice` invoices are sent (drafts are finalized first).                     | Check the invoice's `status` (`details.status`) and what it still allows (`details.allowed_actions`). Drafts are edited and finalized; open invoices are sent, paid, voided or marked uncollectible; paid and void invoices don't change (corrections are credit notes). |
| [`invoice_bank_transfer_missing`](https://ownrecord.io/docs/reference/errors.md#invoice_bank_transfer_missing) | 409         | The legal entity has no bank transfer details for the customer to pay to.                    | Add the IBAN, BIC, bank name and account holder in the entity's invoice settings, then send the invoice again. A send_invoice invoice tells the customer where to pay.                                                                                                   |
| [`version_conflict`](https://ownrecord.io/docs/reference/errors.md#version_conflict)                           | 409         | The invoice changed since `expectedVersion`, or at the same moment; read it again and retry. | Fetch the object again and retry the change.                                                                                                                                                                                                                             |
| [`idempotency_key_reused`](https://ownrecord.io/docs/reference/errors.md#idempotency_key_reused)               | 409         | The idempotency key was used before for another request.                                     | Use a new Idempotency-Key for a different request, or resend the original request unchanged.                                                                                                                                                                             |
| [`scope_required`](https://ownrecord.io/docs/reference/errors.md#scope_required)                               | 400         | The request names no brand (an org or entity key without `Ownrecord-Brand`).                 | Call the operation with credentials or a target at its level: an organization, a legal entity, a brand or the platform (`details.required_scope`).                                                                                                                       |
| [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied)                         | 403         | You can't change this brand's invoices (`invoices:write`: finance, owners and admins).       | Ask an organization owner or admin for a role or scope that allows this action.                                                                                                                                                                                          |
| [`livemode_not_allowed`](https://ownrecord.io/docs/reference/errors.md#livemode_not_allowed)                   | 403         | You have no live-mode access, so you can't use live invoices.                                | Use test mode, or credentials for the target's mode. Developers need live access granted by an organization owner or admin.                                                                                                                                              |

It can also return these [common errors](https://ownrecord.io/docs/reference.md#common-errors): [`api_version_unsupported`](https://ownrecord.io/docs/reference/errors.md#api_version_unsupported), [`invalid_json`](https://ownrecord.io/docs/reference/errors.md#invalid_json), [`unsupported_media_type`](https://ownrecord.io/docs/reference/errors.md#unsupported_media_type), [`authentication_required`](https://ownrecord.io/docs/reference/errors.md#authentication_required), [`api_key_invalid`](https://ownrecord.io/docs/reference/errors.md#api_key_invalid), [`idempotency_key_required`](https://ownrecord.io/docs/reference/errors.md#idempotency_key_required), [`idempotency_in_progress`](https://ownrecord.io/docs/reference/errors.md#idempotency_in_progress), [`approval_required`](https://ownrecord.io/docs/reference/errors.md#approval_required), [`approval_rejected`](https://ownrecord.io/docs/reference/errors.md#approval_rejected), [`approval_expired`](https://ownrecord.io/docs/reference/errors.md#approval_expired), [`stale_approval`](https://ownrecord.io/docs/reference/errors.md#stale_approval), [`approval_policy_denied`](https://ownrecord.io/docs/reference/errors.md#approval_policy_denied), [`rate_limited`](https://ownrecord.io/docs/reference/errors.md#rate_limited), [`internal_error`](https://ownrecord.io/docs/reference/errors.md#internal_error).
