← Fejlesztőknek

API referencia

Az ÚjSzámla.hu nyilvános REST JSON API-ja: számla létrehozása, PDF, e-mail, fizetések, sztornó és helyesbítés – API-kulccsal, kiszámítható válaszokkal.

https://api.ujszamla.hu
Kódpéldák:
MIELŐTT ELKEZDED

Négy dolog, és mehet az első hívás.

Minden /api/v1/ végpont a kulcsodhoz tartozó cég adataira van korlátozva. A {id} a számlalétrehozáskor visszaadott belső azonosító. A kódpéldák nyelve a lap tetején váltható.

Hitelesítés

Küldd a kulcsot az Authorization: Bearer ujsz_... fejlécben, vagy kényelmi alternatívaként X-Api-Key: ujsz_... néven. A kulcs a céghez kötődik; a nyers kulcs csak létrehozáskor látható.

Idempotencia

A számlalétrehozásnál kötelező az Idempotency-Key. Azonos kulcs és azonos törzs esetén a korábbi eredményt kapod vissza (idempotent_replay: true); eltérő tartalomnál 409.

Hibák

Minden hiba egységes JSON-t ad (type, code, message, request_id, errors[]), és minden válasz tartalmaz X-Request-Id fejlécet.

Forgalmi korlát

Túllépéskor 429 Too Many Requests és Retry-After fejléc. A limitek kulcsonként értendők, és a terheléstől függően hangolhatók.

INVOICES

Számlák életciklusa

Létrehozás, lekérés, PDF, kézbesítés, fizetések, valamint sztornó és helyesbítés – mind ugyanazon a számlaláncon.

POST /api/v1/invoices #

Számla létrehozása

Egyetlen tranzakcióban véglegesíti a számlát, kiosztja a számlaszámot és elkészíti a PDF-et. Azonnal véglegesítő művelet, nincs külön „véglegesítés” lépés.

🔒 API-kulcs Idempotency-Key kötelező

Fejlécek

FejlécTípusLeírás
AuthorizationstringBearer ujsz_..., avagy X-Api-Key.
Idempotency-Keystring, max 191Egy konkrét művelet biztonságos megismétlésére. kötelező

Példa kérés

cURL
curl -X POST https://api.ujszamla.hu/api/v1/invoices \
  -H "Authorization: Bearer ujsz_..." \
  -H "Idempotency-Key: order-2026-987" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "ORDER-2026-987",
    "document_type": "INVOICE",
    "document_block": "WEB",
    "fulfillment": { "type": "DATE", "date": "2026-10-01" },
    "payment": { "method": "TRANSFER", "due_date": "2026-10-09" },
    "currency": { "code": "HUF" },
    "customer": {
      "vat_status": "DOMESTIC",
      "name": "Minta Kft.",
      "tax_number": "12345678-2-43",
      "address": { "country_code": "HU", "postal_code": "1111", "city": "Budapest", "address_line": "Minta utca 1." },
      "email": "szamla@minta.hu"
    },
    "items": [
      { "description": "Tanácsadás", "quantity": "2", "unit": "HOUR", "unit_net_price": "25000", "vat": { "type": "PERCENT", "rate": "27" } }
    ],
    "send_email": false
  }'

Kérés törzse

MezőTípusLeírás
external_idstring opc.A külső rendszer üzleti azonosítója; cégen és forráson belül egyedi.
document_typeenumINVOICE | PROFORMA | ADVANCE kötelező
document_blockstringA cég aktív számlatömbjének előtagja (pl. WEB). kötelező
issued_atdate opc.Kiállítás dátuma; elhagyva a szerver tölti ki.
fulfillment.typeenumDATE
fulfillment.datedateTeljesítés dátuma. kötelező
payment.methodenumTRANSFER | CASH | CARD
payment.due_datedateFizetési határidő.
payment.paidbooleanAlapérték: false.
currency.codestringISO pénznem (pl. HUF).
currency.exchange_ratestring opc.Devizás számlához; elhagyva MNB árfolyam.
customer.vat_statusenumDOMESTIC | PRIVATE_PERSON | OTHER
customer.namestringVevő neve.
customer.tax_numberstring opc.Adószám.
customer.address.*objectcountry_code, postal_code, city, address_line.
customer.emailstring opc.Kötelező, ha send_email: true.
items[]arrayLegalább 1 tétel: description, quantity, unit, unit_net_price, vat.
items[].vat.typeenumPERCENT (+rate) | EXEMPT/OTHER (+ NAV code).
send_emailbooleanAlapérték: false. true esetén érvényes e-mail kötelező.
notestring opc.Nyilvános megjegyzés a számlán.

Válaszok

201A számla létrejött
application/json
{
  "id": 1234,
  "invoice_number": "WEB/2026/0042",
  "document_type": "INVOICE",
  "external_id": "ORDER-2026-987",
  "status": "finalized",
  "issued_at": "2026-10-01",
  "fulfillment_date": "2026-10-01",
  "payment_deadline": "2026-10-09",
  "currency": "HUF",
  "totals": { "net": "50000", "vat": "13500", "gross": "63500" },
  "email_status": "not_requested",
  "nav_status": "submitted",
  "pdf_available": true,
  "idempotent_replay": false
}
200Korábbi, azonos idempotenciájú kérés eredménye

Ugyanaz a séma, mint a 201-nél, de nem készül új számla: a válasz a korábbi eredmény, és idempotent_replay: true.

400 / 401 / 403 / 404 / 409 / 422Hibaválasz

Egységes hibaséma. Tipikus kódok: DOCUMENT_BLOCK_REQUIRED, IDEMPOTENCY_KEY_REUSED (409), EXTERNAL_ID_CONFLICT (409), INVOICE_VALIDATION_FAILED (422).

GET /api/v1/invoices/{id} #

Számla lekérése

A kulcs cégéhez tartozó számla adatai. Más cég számlája 404 INVOICE_NOT_FOUND.

🔒 API-kulcs

Paraméterek

NévTípusLeírás
id path, kötelezőintegerBelső számlaazonosító (pl. 1234).

Példa kérés

cURL
curl https://api.ujszamla.hu/api/v1/invoices/1234 \
  -H "Authorization: Bearer ujsz_..."

Válaszok

200A számla adatai

Ugyanaz az Invoice séma, mint a létrehozás válaszánál (201 példa).

401 / 404Hibaválasz

Érvénytelen vagy hiányzó kulcs, illetve nem létező / más céghez tartozó számla.

GET /api/v1/invoices/{id}/pdf #

Számla PDF letöltése

A véglegesített számla PDF-jét adja vissza binárisan. Ha még nem készült PDF, a válasz 404 PDF_NOT_FOUND.

🔒 API-kulcs

Példa kérés

cURL
curl -L https://api.ujszamla.hu/api/v1/invoices/1234/pdf \
  -H "Authorization: Bearer ujsz_..." \
  -o szamla-1234.pdf

Válaszok

200A számla PDF-je (application/pdf)

Bináris tartalom, Content-Type: application/pdf.

401 / 404Hibaválasz

Nincs jogosultság, vagy a PDF még nem elérhető.

POST /api/v1/invoices/{id}/send #

Számla e-mailben való küldése / újraküldése

A számla e-mailes kiküldését (újra)sorba állítja. Csak véglegesített számlához és érvényes vevői e-mail-címhez. A küldés aszinkron.

🔒 API-kulcs

Példa kérés

cURL
curl -X POST https://api.ujszamla.hu/api/v1/invoices/1234/send \
  -H "Authorization: Bearer ujsz_..."

Válaszok

202A küldés sorba állítva
application/json
{
  "id": 1234,
  "invoice_number": "WEB/2026/0042",
  "recipient": "szamla@minta.hu",
  "email_status": "queued"
}
401 / 404 / 409 / 422 / 429Hibaválasz

Jogosultság, hiányzó számla, nem megfelelő állapot, hiányzó vevői e-mail vagy forgalmi korlát.

GET /api/v1/invoices/{id}/payments #

Fizetések listája

A számlához rögzített fizetések, a bruttó végösszeg, a hátralék és az is_paid jelző.

🔒 API-kulcs

Példa kérés

cURL
curl https://api.ujszamla.hu/api/v1/invoices/1234/payments \
  -H "Authorization: Bearer ujsz_..."

Válaszok

200Fizetések listája
application/json
{
  "invoice_id": 1234,
  "gross": "63500",
  "remaining": "62500",
  "is_paid": false,
  "payments": [
    {
      "id": 11,
      "date": "2026-10-02",
      "amount": "1000",
      "payment_method_id": 1,
      "payment_identifier": null,
      "created_at": "2026-10-02T10:15:00+02:00"
    }
  ]
}
401 / 404Hibaválasz

Jogosultság vagy nem létező számla.

POST /api/v1/invoices/{id}/payments #

Fizetés rögzítése

Fizetés rögzítése a számlához; utána a számla kiegyenlítettsége frissül.

🔒 API-kulcs

Kérés törzse

MezőTípusLeírás
amountstringPozitív összeg (a , tizedesjel elfogadott). kötelező
datedate opc.Elhagyva a mai nap.
payment_method_idinteger opc.Elhagyva a számla fizetési módja.
payment_identifierstring opc.Belső azonosító / közlemény.

Példa kérés

cURL
curl -X POST https://api.ujszamla.hu/api/v1/invoices/1234/payments \
  -H "Authorization: Bearer ujsz_..." \
  -H "Content-Type: application/json" \
  -d '{ "amount": "1000", "date": "2026-10-02", "payment_method_id": 1 }'

Válaszok

201A fizetés rögzítve
application/json
{
  "payment": {
    "id": 11,
    "date": "2026-10-02",
    "amount": "1000",
    "payment_method_id": 1,
    "payment_identifier": null,
    "created_at": "2026-10-02T10:15:00+02:00"
  },
  "invoice": {
    "id": 1234,
    "is_paid": false,
    "remaining": "62500"
  }
}
400 / 401 / 404 / 409 / 422 / 429Hibaválasz

Hibás összeg, jogosultság, állapotütközés vagy forgalmi korlát.

GET /api/v1/invoices/{id}/chain #

A számlalánc állapota

A root számla adatai, a cancelled jelző, az aktuális láncverzió, az effektív fejléc és tételek, valamint a láncdokumentumok.

🔒 API-kulcs

Példa kérés

cURL
curl https://api.ujszamla.hu/api/v1/invoices/1234/chain \
  -H "Authorization: Bearer ujsz_..."

Válaszok

200A lánc állapota
application/json
{
  "root": { "id": 1234, "invoice_number": "WEB/2026/0042", "document_type": "INVOICE" },
  "cancelled": false,
  "version": 1,
  "state": {
    "header": { "note_public": null },
    "items": [
      {
        "source_invoice_item_id": 9001,
        "item_name": "Tanácsadás",
        "qty": "2",
        "qty_unit": "HOUR",
        "price_unit_net": "25000",
        "vat_id": 1
      }
    ]
  },
  "documents": [
    { "id": 1234, "invoice_number": "WEB/2026/0042", "document_type": "INVOICE", "modification_index": 0 }
  ]
}

A state.items[].source_invoice_item_id a helyesbítéshez szükséges tétel-azonosító. A version értékét kell visszaküldeni a módosító műveleteknél (based_on_modification_index).

401 / 404 / 422Hibaválasz

Jogosultság, nem létező számla vagy nem láncolható állapot.

POST /api/v1/invoices/{id}/storno #

Sztornó számla létrehozása

A root számla sztornózása; a művelet a láncot új verzióval bővíti.

🔒 API-kulcs

Kérés törzse

MezőTípusLeírás
reasonstringA sztornó indoka. kötelező
fulfillment_datedate opc.Teljesítés dátuma.
based_on_modification_indexinteger opc.A lánc version értéke; elavult verzió esetén 422 CHAIN_CHANGED.

Példa kérés

cURL
curl -X POST https://api.ujszamla.hu/api/v1/invoices/1234/storno \
  -H "Authorization: Bearer ujsz_..." \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Téves kiállítás", "fulfillment_date": "2026-10-02", "based_on_modification_index": 0 }'

Válaszok

201A sztornó számla létrejött

Válasz: Invoice séma (lásd a 201 példát).

400 / 401 / 404 / 409 / 422 / 429Hibaválasz

Tipikusan 422 CHAIN_CHANGED vagy 422 CHAIN_CANCELLED.

POST /api/v1/invoices/{id}/corrections #

Helyesbítő számla létrehozása

A javított fejléc és tételek alapján helyesbítő dokumentumot hoz létre a láncon.

🔒 API-kulcs

Kérés törzse

MezőTípusLeírás
based_on_modification_indexintegerA lánc version értéke. kötelező
reasonstringA helyesbítés indoka. kötelező
confirmedbooleanAlapérték: false.
headerobject opc.Módosított fejlécmezők (pl. note_public).
items[]array opc.Módosított tételek; a source_invoice_item_id a lánc állapotából.

Példa kérés

cURL
curl -X POST https://api.ujszamla.hu/api/v1/invoices/1234/corrections \
  -H "Authorization: Bearer ujsz_..." \
  -H "Content-Type: application/json" \
  -d '{
    "based_on_modification_index": 0,
    "reason": "Megjegyzés javítása",
    "confirmed": true,
    "header": { "note_public": "Javított megjegyzés" },
    "items": [
      { "source_invoice_item_id": 9001, "item_name": "Tanácsadás", "qty": "2", "qty_unit": "HOUR", "price_unit_net": "25000", "vat_id": 1 }
    ]
  }'

Válaszok

201A helyesbítő számla létrejött

Válasz: Invoice séma (lásd a 201 példát).

400 / 401 / 404 / 409 / 422 / 429Hibaválasz

Tipikusan 422 CHAIN_CHANGED vagy 422 NO_CHANGE.

SYSTEM

Állapotellenőrzés

GET /api/v1/ping #

Állapotellenőrzés

Nem igényel kulcsot – jó első kapcsolatpróbának.

Nyilvános

Példa kérés

cURL
curl https://api.ujszamla.hu/api/v1/ping

Válaszok

200A szolgáltatás elérhető
application/json
{
  "status": "ok",
  "version": "v1",
  "time": "2026-10-05T09:12:00+02:00"
}
SÉMÁK

Modellek

A válaszokban visszaadott objektumok mezői. A kérések sémáit az egyes végpontoknál találod.

Invoice
MezőTípusLeírás
idintegerBelső számlaazonosító.
invoice_numberstringKiállított számlaszám (pl. WEB/2026/0042).
document_typestringINVOICE / PROFORMA / ADVANCE.
external_idstringA külső rendszer azonosítója.
statusenumdraft | finalized.
issued_atdateKiállítás dátuma.
fulfillment_datedateTeljesítés dátuma.
payment_deadlinedateFizetési határidő.
currencystringPénznem (pl. HUF).
totals.net / vat / grossstringÖsszegek.
email_statusstringnot_requested | queued | failed.
nav_statusstringNAV-adatszolgáltatás állapota.
pdf_availablebooleanElérhető-e a PDF.
idempotent_replaybooleanKorábbi kérés eredményének visszaadása.
Payment
MezőTípusLeírás
idintegerFizetés azonosítója.
datedateFizetés dátuma.
amountstringÖsszeg.
payment_method_idintegerFizetési mód azonosítója.
payment_identifierstringBelső azonosító / közlemény.
created_atstringRögzítés időpontja.
Error
MezőTípusLeírás
typeenumauthentication_error, invalid_request, validation_error, not_found, conflict, rate_limit_error, server_error.
codestringStabil hibakód (pl. INVOICE_VALIDATION_FAILED).
messagestringEmberi üzenet.
request_idstringKérés-azonosító (megegyezik az X-Request-Id fejléccel).
errors[]arraycode, path, message.
application/json
{
  "type": "validation_error",
  "code": "INVOICE_VALIDATION_FAILED",
  "message": "A számla adatai nem megfelelőek.",
  "request_id": "req_1a2b3c4d5e6f",
  "errors": [
    {
      "code": "DOCUMENT_BLOCK_REQUIRED",
      "path": "document_block",
      "message": "A számlatömb megadása kötelező."
    }
  ]
}

A további modellek (PaymentList, SendResult, ChainState, CreateInvoiceRequest, StornoRequest, CorrectionRequest) a nyers openapi.yaml-ban és a végpontok válaszpéldáiban szerepelnek.