Rýchly štart

Kompletný end‑to‑end tok cez Agent API: vytvorte si test kľúč, založte klientsku organizáciu (vrátane adresy), zaregistrujte ju do Peppol sandboxu, vystavte faktúru, odošlite ju cez Peppol, sledujte stav a prijmite webhook. Všetko v sandboxe — žiadne kredity, reálna Peppol TEST sieť.

Predpoklady

PoložkaHodnota
Base URLhttps://api.efaktura.sk/v1
AutentifikáciaHlavička X-API-Key + pri operáciách nad organizáciou X-Organization-Id
Test kľúčefk_pk_test_…
Sandbox aj produkcia majú rovnakú base URL. Prostredie určuje výlučne prefix kľúča: efk_pk_test_… = sandbox (Peppol TEST sieť, bez kreditov), efk_pk_live_… = produkcia.

Tok integrácie

Rýchla cesta: ak už máte hotové UBL/CII XML, kroky 4–5 zlúčite do jediného volania cez Konektor (POST /v1/agent/peppol/connector/send) — zvaliduje, rezervuje kredit a odošle naraz, s idempotenciou a opt‑in auto‑opravou. Na hromadné odoslanie z tabuľky použite CSV ingest. Tok krok‑za‑krokom nižšie je univerzálny základ.
1
Vytvorte si test kľúč

V partnerskom portáli v sekcii API kľúče vytvorte sandbox kľúč. Zobrazí sa iba raz — uložte si ho do secret store. Partnerský kľúč (efk_pk_*) vie zakladať klientske organizácie; je viazaný na váš partnerský účet.

2
Založte klientsku organizáciu (s adresou!)

Partnerský kľúč vytvorí white‑label dcérsku organizáciu. Pri tomto volaní neposielate X-Organization-Id — organizácia ešte neexistuje. Vyžaduje sa scope org:provision.

Adresu (street, city, postalCode) a dic + ic_dph doplňte hneď. Bez kompletnej adresy predávajúceho Peppol odoslanie zlyhá na SK validačných pravidlách (BT‑35/37/38). Viac v sekcii Faktúry.
curl -X POST https://api.efaktura.sk/v1/agent/organizations \
  -H "X-API-Key: efk_pk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Tatra Servis s.r.o.",
    "ico": "12345678",
    "dic": "2020202020",
    "ic_dph": "SK2020202020",
    "address": {
      "street": "Hlavná 1",
      "city": "Bratislava",
      "postalCode": "81101",
      "country": "SK"
    }
  }'

Odpoveď (201 Created, alebo 200 ak sa existujúca organizácia znova použila):

{
  "data": {
    "org_id": "0a2c1f3e-…",
    "partner_id": "7b8d…",
    "slug": "tatra-servis-sro",
    "reused": false,
    "status": "caka_na_token"
  }
}

org_id je hodnota, ktorú odteraz posielate v X-Organization-Id. Detail organizácie (vrátane participant_id a peppol_status) získate cez GET /v1/agent/organizations/{org_id}.

3
Zaregistrujte organizáciu do Peppol (sandbox enroll)

Enroll zaregistruje DIČ organizácie ako Peppol účastníka v TEST SMP (9915:<DIČ>). Vyžaduje sa scope invoice:send a hlavička X-Organization-Id. V sandboxe je verifikačný token nepovinný; pre produkčný (live) enroll je povinný (FS verifikačný kód — viac v Spustenie naostro).

curl -X POST https://api.efaktura.sk/v1/agent/peppol/enroll \
  -H "X-API-Key: efk_pk_test_..." \
  -H "X-Organization-Id: 0a2c1f3e-…" \
  -H "Content-Type: application/json" \
  -d '{}'
{
  "data": {
    "status": "active",
    "registration_id": "…",
    "participant_id": "9915:2020202020"
  }
}

DIČ organizácie musí mať 10 cifier — inak enroll vráti VALIDATION_ERROR.

4
Vystavte faktúru

Faktúru vystavíte cez POST /v1/agent/invoices (scope invoice:create). Predávajúci sa odvodí z organizácie, kupujúci z customer (alebo existujúceho customer_id). Aby bola faktúra odosielateľná cez Peppol, kupujúci musí mať úplnú adresu a (pri firme) ico/dic/ic_dph.

curl -X POST https://api.efaktura.sk/v1/agent/invoices \
  -H "X-API-Key: efk_pk_test_..." \
  -H "X-Organization-Id: 0a2c1f3e-…" \
  -H "Content-Type: application/json" \
  -d '{
    "customer": {
      "name": "Odberateľ s.r.o.",
      "ico": "87654321",
      "dic": "2010101010",
      "ic_dph": "SK2010101010",
      "address": {
        "street": "Obchodná 5",
        "city": "Košice",
        "postalCode": "04001",
        "country": "SK"
      },
      "email": "fakturacia@odberatel.sk"
    },
    "items": [
      {
        "description": "Servisné práce",
        "quantity": 2,
        "unit": "hod",
        "unit_price": 50,
        "vat_rate": 23
      }
    ],
    "payment_method": "bank_transfer",
    "due_days": 14
  }'

Odpoveď (201 Created) — uložte si id:

{
  "id": "b1f0d7a2-…",
  "invoice_number": "2026001",
  "status": "issued",
  "customer": { "id": "…", "name": "Odberateľ s.r.o." },
  "items": [ … ],
  "subtotal": "100.00",
  "vat_total": "23.00",
  "total": "123.00",
  "currency": "EUR",
  "issue_date": "2026-06-22",
  "due_date": "2026-07-06",
  "pdf_url": "https://…",
  "created_at": "2026-06-22T10:00:00.000Z"
}
5
Odošlite faktúru cez Peppol

Odoslanie zaradí faktúru do fronty (scope invoice:send). Test kľúč smeruje send cez sandbox AP na reálnej Peppol TEST sieti — bez kreditov.

curl -X POST https://api.efaktura.sk/v1/agent/peppol/send/b1f0d7a2-… \
  -H "X-API-Key: efk_pk_test_..." \
  -H "X-Organization-Id: 0a2c1f3e-…"

Odpoveď (202 Accepted):

{
  "data": {
    "invoice_id": "b1f0d7a2-…",
    "job_id": "peppol-send:b1f0d7a2-…",
    "status": "queued"
  }
}
Viac faktúr naraz pošlete cez POST /v1/agent/peppol/send/batch s telom { "invoiceIds": ["…", "…"] } (1–200 ID).
6
Sledujte stav (polling)

Stav prenosu zistíte cez GET /v1/agent/peppol/status/{invoiceId} (scope invoice:read). Skutočné stavy endpointu: QUEUED, SENDING, SENT, DEFERRED, ERROR; ak ešte nič nebolo odoslané, vráti sa syntetická hodnota not_sent. (DELIVERED je stav webhookového eventu, nie polling endpointu.) Detaily v Prijímanie a stavy.

curl https://api.efaktura.sk/v1/agent/peppol/status/b1f0d7a2-… \
  -H "X-API-Key: efk_pk_test_..." \
  -H "X-Organization-Id: 0a2c1f3e-…"
{
  "data": {
    "invoice_id": "b1f0d7a2-…",
    "state": "SENT",
    "error_message": null,
    "receiver_identifier": "9915:2010101010",
    "document_id": "…",
    "updated_at": "2026-06-22T10:00:05.000Z"
  }
}
7
Prijmite webhook

Namiesto pollingu odporúčame webhooky. Zaregistrujte HTTPS endpoint v portáli a reagujte na peppol.document.sent / peppol.document.delivered / peppol.document.failed, prípadne na príchodzí doklad cez peppol.document.received. Každé doručenie je podpísané HMAC‑om — overte podpis a deduplikujte podľa X-Webhook-Id. Kompletne v Webhooky.

{
  "event": "peppol.document.delivered",
  "timestamp": "2026-06-22T10:00:08.000Z",
  "data": {
    "invoiceId": "b1f0d7a2-…",
    "invoiceNumber": "2026001",
    "documentType": "invoice",
    "mode": "test",
    "state": "DELIVERED",
    "messageId": "…",
    "transactionId": "…",
    "orgId": "0a2c1f3e-…"
  }
}

Ďalšie kroky

Pred odoslaním si môžete UBL XML pre‑validovať (Validácia). Keď je tok overený v sandboxe, prejdite na Spustenie naostro — produkčný enroll vyžaduje FS verifikačný token a aktiváciu partnera.