Издаване на фактури през API

POST /invoices с Idempotency-Key, ДДС в проценти, плюс списък, сторно и маркиране като платена.

POST /invoices с Idempotency-Key, ДДС в проценти, плюс списък, сторно и маркиране като платена.

← Обратно към API документацията

Първата фактура в 6 стъпки

  1. Изпратете POST /v1/invoices с обект купувач и поне един елемент в редове.
  2. Добавете заглавката Idempotency-Key — тя е задължителна, един ключ за логическа операция.
  3. Изпращайте vat_rate като процент (21) и unit_price като НЕТНА единична цена.
  4. Отговорът 201 съдържа id, номер, серия, сумите net/vat/gross и изпратените от вас метаданни.
  5. Изтеглете документа с GET /v1/invoices/{id}/pdf или XML във формат UBL с GET /v1/invoices/{id}/xml.

Всички endpoint-и

МетодEndpointScopeIdempotency-KeyЗаявки / минута
POST/invoices
Издаване на фактура или проформа
invoices:writeзадължително30
GET/invoices
Списък с фактури (страниране с курсор)
invoices:read—120
POST/invoices/preview-totals
Изчисляване на сумите, без да се създава нищо
invoices:read—120
GET/invoices/{invoice_id}
Извличане на една фактура
invoices:read—120
GET/invoices/{invoice_id}/pdf
Изтегляне на PDF на фактурата
invoices:read—120
POST/invoices/{invoice_id}/storno
Издаване на кредитно известие, сторниращо тази фактура
invoices:writeзадължително30
POST/invoices/{invoice_id}/payments
Маркиране на фактурата като платена
invoices:write—30
DELETE/invoices/{invoice_id}/payments
Маркиране на фактурата като неплатена
invoices:write—30

Какво е 4invoices API

bash
curl -sS -X POST https://api.4invoices.net/v1/invoices \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: order-10457-invoice' \
  -d '{
    "buyer": {
      "name": "Exemplu Comert SRL",
      "tax_id": "RO12345678",
      "address": "Str. Fabricii 12",
      "city": "Cluj-Napoca",
      "county": "Cluj",
      "country": "RO",
      "email": "[email protected]"
    },
    "lines": [
      { "description": "Abonament SaaS, iulie", "quantity": 1, "unit_price": 400, "vat_rate": 21, "unit": "buc" },
      { "description": "Implementare", "quantity": 6, "unit_price": 250, "vat_rate": 21, "unit": "ora" }
    ],
    "currency": "RON",
    "document_kind": "factura",
    "due_date": "2026-08-15",
    "metadata": { "order_id": "10457" }
  }'
bash
# Курсорно странициране: следвайте next_cursor, докато has_more стане false.
curl -sS "https://api.4invoices.net/v1/invoices?limit=50&status=issued&issued_from=2026-07-01" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

# → {"object":"list","data":[...],"has_more":true,"next_cursor":"inv_01J..."}

curl -sS "https://api.4invoices.net/v1/invoices?limit=50&cursor=inv_01J..." \
  -H "Authorization: Bearer $ACCESS_TOKEN"
bash
curl -sS -X POST https://api.4invoices.net/v1/invoices/inv_01J7ABC/storno \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H 'Idempotency-Key: storno-inv_01J7ABC-1'

# Кредитното известие получава СОБСТВЕН фискален номер; номерът на оригинала никога не се използва повторно.
bash
# Маркирай като платена
curl -sS -X POST https://api.4invoices.net/v1/invoices/inv_01J7ABC/payments \
  -H "Authorization: Bearer $ACCESS_TOKEN"

# Отмяна
curl -sS -X DELETE https://api.4invoices.net/v1/invoices/inv_01J7ABC/payments \
  -H "Authorization: Bearer $ACCESS_TOKEN"

https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json

Грешки

СтатусТипКод
422invalid_request_errorissuer_profile_incomplete
422invalid_request_errorcannot_storno_draft
422invalid_request_errornothing_to_storno

Често срещани грешки

  • Списъците са с курсор: следвайте next_cursor, докато has_more стане false. Филтрите включват статус, document_kind, buyer_tax_id, issued_from, issued_to и q.
  • Сторнирането е POST /v1/invoices/{id}/storno и получава собствен фискален номер — оригиналният номер никога не се преизползва.
  • Проформата (document_kind proforma) не изразходва фискален номер и не може да бъде подадена в националната система за е-фактуриране.
  • метаданни се връща обратно при четене: поставете там id на поръчката си и вече няма нужда от отделна таблица за съпоставяне.
  • POST /v1/invoices/preview-totals прави същите изчисления без странични ефекти — удобно за показване на сумите в собствената ви количка.

Въпроси и отговори за разработчици

Колко реда може да има една фактура?

Между 1 и 400. описание е ограничено до 1024 знака, а количество трябва да е строго положително.

Какво става, ако изпратя същата заявка отново след таймаут?

Със същия Idempotency-Key получавате оригиналната фактура и заглавка Idempotency-Replayed: true. Втори документ не се издава.

Как да отбележа фактура като платена?

POST /v1/invoices/{id}/payments я отбелязва като платена, а DELETE на същия път отменя това. И двете изискват обхват invoices:write.