---
title: "Send Invoice record"
method: POST
path: "/public/v2/invoices/{record_number}/send/"
tags: ["Invoices"]
---

# Send Invoice record

`POST /public/v2/invoices/{record_number}/send/`

## Request

- Base URL: `https://api.dualentry.com`
- URL: `https://api.dualentry.com/public/v2/invoices/{record_number}/send/`
- Auth: none declared

Send an existing invoice by email, with the invoice PDF attached.

The path `{record_number}` is the invoice `number`.

The body matches `POST /api/email_send/invoice/` (`to_emails`, `cc_emails`, `bcc_emails`,
`pdf_content`, `subject`, `message`, `sandbox`). `pdf_content` is optional. If it is omitted
or empty, the worker captures the invoice PDF. If `subject` or `message` is omitted or empty,
company invoice email templates are used, then organization defaults.

If `to_emails` is omitted or empty, the customer email on the invoice is used.

A 200 response means the send was accepted, not that
the provider has delivered the message. Emails are sent in the background.

In Belgium, Sweden and Germany, the Peppol network delivers the e-invoice when DualEntry files it.
This email sends the same invoice to the customer as a copy.

This call does not post to the general ledger.

**Additional validations**
- Fails with `422` and `error_code` `e_invoicing_send_held` if the authority must clear the e-invoice before the customer gets it (Italy, Mexico, Spain and Argentina), or with `error_code` `e_invoicing_legal_pdf_missing` if the authority PDF is not stored yet. The `e_invoicing` key holds the reason. Send again after the authority clears the invoice.

## Path parameters

- `record_number` integer, required: The `number` attribute of the record.

## Headers

- `Idempotency-Key` string

## Request body

- PublicInvoiceSendSchemaIn
  - `to_emails` string[]
  - `cc_emails` string[]
  - `bcc_emails` string[]
  - `message` string, nullable
  - `subject` string, nullable
  - `sandbox` boolean, nullable
  - `pdf_content` string, nullable
  - `invoice_id` integer, nullable

## Response `200`

OK

- SuccessSchema
  - `success` true
  - `errors` object
  - `message` string, nullable

## Other responses

- `404`: Not Found
- `422`: Unprocessable Content
- `500`: Internal Server Error

## Changes

- **2026-10-15** `238fe9120a75`: 1 info
  - added the optional property `message` to the response with the `200` status
- **2026-09-29** `4b2d6ee0dff6`: 6 info
  - added the optional property `error_code` to the response with the `404` status
  - added the optional property `error_code` to the response with the `422` status
  - added the optional property `error_code` to the response with the `500` status
  - added the optional property `error_reason` to the response with the `404` status
  - …2 more
- **2026-09-21** `132d3ca6acd1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/dualentry/apis/dualentry-public-api/changes/public/v2/invoices/:record_number/send/post.md)

---

[API](https://skmtc.dev/dualentry/apis/dualentry-public-api.md) · [All operations](https://skmtc.dev/dualentry/apis/dualentry-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dualentry/apis/dualentry-public-api/revisions/7588ae19aaff?raw)
