# Send invoice by email

`POST /v1/invoices/{id}/send`

Emails a booked invoice or credit note to the customer with its PDF. Offers and drafts return 409. A sandbox company cannot send email and gets 403 `forbidden`. With no `email` and no address on the invoice or contact, the response is 400.

A 200 means the email provider accepted the message for at least one recipient. It does not mean the email was delivered, and another recipient may have been refused. Check `delivery_status` and `email_delivery_status`. If no recipient is accepted, the response is 500.

Every successful call sends an email, so send an `Idempotency-Key` header to retry safely after a timeout. A failed request frees its key, so a retry after a 5xx runs again and can email again: the failure can come after the provider accepted the message.

Send an `Idempotency-Key` header (for example a UUID generated per request) to retry safely after a timeout or network error. A retry with the same key and the same body returns the original response with the header `Idempotent-Replayed: true`. Keys are scoped to the company and kept for 24 hours after a successful request. A failed request (4xx/5xx) frees the key, so a retry with that key runs again. Reusing a key with a different body returns 422; retrying while the first request is still processing returns 409.

**Scopes:** any of `invoices:book`, `write:ledger`

## Request

```bash
curl -X POST https://api.numina.app/v1/invoices/550e8400-e29b-41d4-a716-446655440000/send \
  -H "Authorization: Bearer numi_YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "faktura@kunde.dk"
  }'
```

## Path parameters

- `id` (string (uuid), required): Invoice ID

## Headers

- `Idempotency-Key` (string, optional): Unique key for this request (max 255 characters). Retrying with the same key and body returns the original response instead of doing the work again. (max 255 chars)

## Body (`application/json`)

- `email` (string, optional): Recipients instead of the invoice's or contact's address, up to 5, separated by commas. Once a send is accepted, they replace the address saved on the invoice. The contact does not change. (max 500 chars)

## Response `200`

The invoice, after sending

```json
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "invoice_number": 1001,
  "type": "invoice",
  "credited_invoice_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "sent",
  "issue_date": "2026-01-15",
  "due_date": "2026-02-15",
  "contact_id": "550e8400-e29b-41d4-a716-446655440001",
  "contact_name": "Acme ApS",
  "currency": "DKK",
  "subtotal": 10000,
  "vat": 2500,
  "vat_rate": 25,
  "total": 12500,
  "has_mixed_vat": false,
  "outstanding_balance": 12500,
  "outstanding_balance_currency": "DKK",
  "currency_rate": 0,
  "delivery_status": "sent",
  "email_delivery_status": "string",
  "email_sent_at": "string",
  "e_invoice_sent_at": "string",
  "is_overdue": false,
  "payment_state": "open",
  "unmatched_payments_note": "string",
  "items": [
    {
      "unit": "string",
      "vat_account_id": "string",
      "vat_code": "string",
      "sales_account_number": 0,
      "vat_rate": 0,
      "id": "550e8400-e29b-41d4-a716-446655440002",
      "description": "Consulting services",
      "quantity": 10,
      "unit_price": 1000
    }
  ],
  "memo": "Project Q1 delivery",
  "payment_details": {
    "bank_name": "Danske Bank",
    "scheme": "dk-registration-number",
    "clearing_code": "3409",
    "account_number": "0012345678",
    "iban": "DK5030000012345678",
    "swift_bic": "DABADKKK"
  },
  "created_at": "2026-01-15T10:30:00Z"
}
```

## Errors

- `400` Bad Request - Invalid input or validation failed
- `401` Unauthorized - Invalid or missing authentication
- `403` Forbidden - Missing scope, the company is archived, or it is a sandbox company
- `404` Not Found - The resource does not exist in this company
- `409` Conflict - The invoice is a draft or an offer, or a request with the same Idempotency-Key is still being processed
- `422` Unprocessable Entity - The Idempotency-Key was already used with a different request
- `429` Too Many Requests - Rate limit exceeded
- `500` Internal Server Error

See https://developers.numina.app/errors.md for the error format.
