NuminaDevelopers
Dashboard
Send invoice by email

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.

Requires one ofinvoices:bookwrite:ledger

Path parameters

  • idstring (uuid)Required
    Invoice ID

Headers

  • Idempotency-Keystring· max 255 chars
    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.

Body

application/json

  • emailstring· max 500 chars
    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.

Errors

  • 400Invalid input or validation failed
  • 401Invalid or missing authentication
  • 403Missing scope, the company is archived, or it is a sandbox company
  • 404The resource does not exist in this company
  • 409The invoice is a draft or an offer, or a request with the same Idempotency-Key is still being processed
  • 422The Idempotency-Key was already used with a different request
  • 429Rate limit exceeded
  • 500Internal Server Error

Every error has the same shape. See Errors.

cURL
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"
  }'
JavaScript
const response = await fetch("https://api.numina.app/v1/invoices/550e8400-e29b-41d4-a716-446655440000/send", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.NUMINA_API_KEY}`,
    "Idempotency-Key": crypto.randomUUID(),
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "email": "faktura@kunde.dk"
  }),
});

const data = await response.json();
Python
import uuid
import os

import requests

response = requests.post(
    "https://api.numina.app/v1/invoices/550e8400-e29b-41d4-a716-446655440000/send",
    headers={
        "Authorization": f"Bearer {os.environ['NUMINA_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "email": "faktura@kunde.dk"
    },
)
data = response.json()
Response
200
{
  "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"
}