PlugCharge Partner API

verzia 1.0.0 · https://api.plugcharge.eu/api/v1

Čítacie API pre účtovné a ERP systémy — partneri, doklady, relácie.

Rozhranie pre externé systémy, ktoré si potrebujú stiahnuť účtovné dáta operátora nabíjacích staníc (CPO).

Len čítanie. Žiadny endpoint nič nevytvára ani nemení. Doklady sa cez toto API vystaviť nedajú — číselný rad a finančná história sú nemenné.

Rozsah dát nesie kľúč. Každý API kľúč patrí jednému operátorovi a vracia výhradne jeho dáta. Tenant sa nikdy neurčuje parametrom požiadavky.

Dva formáty. Každý čítací endpoint vracia JSON alebo XML (?format=xml). XML je zrkadlom JSON — jednoduchý tvar bez menných priestorov; polia sú obalené do elementov s rovnakými názvami, zoznamy do opakovaného elementu.

Ako začať: kľúč (client_id + client_secret) si vytvorí správca operátora v CPO portáli (Nastavenia → Fakturácia → API kľúče). Secret sa zobrazí jedinýkrát.

Ako začať

  1. V CPO portáli (Nastavenia → Fakturácia → API kľúče) vytvorte kľúč a zvoľte rozsahy. Zobrazí sa client_id a client_secret — secret jedinýkrát.
  2. Vymeňte kľúč za token (platí 15 minút):
curl -X POST https://api.plugcharge.eu/api/v1/oauth/token \
  -H "Content-Type: application/json" \
  -d '{"grant_type":"client_credentials","client_id":"pc_…","client_secret":"…"}'
  1. Volajte API s tokenom. Pre XML pridajte ?format=xml:
curl https://api.plugcharge.eu/api/v1/invoices?od=2026-01-01 \
  -H "Authorization: Bearer <access_token>"

curl "https://api.plugcharge.eu/api/v1/invoices/PLG202500042?format=xml" \
  -H "Authorization: Bearer <access_token>"

Po vypršaní tokenu vráti API 401 invalid_token — vyžiadajte si nový. Kľúč sa dá kedykoľvek odvolať v portáli; odvolanie platí okamžite.

Autentifikácia

OAuth 2.0 client_credentials. Token platí 15 minút; kľúč sa overuje raz, potom sa používa token.

POST /oauth/token #

Vydanie prístupového tokenu

OAuth 2.0 client_credentials. Telo môže byť application/json alebo application/x-www-form-urlencoded. Neznámy kľúč aj zlý secret vracajú tú istú odpoveď 401 — kľúče sa nedajú vyčítavať. Limit 20 pokusov za 5 minút.

Verejné — bez autentifikácie.

Telo požiadavky

Obsah: application/json, application/x-www-form-urlencoded

PoleTypPopis
grant_type * string client_credentials
client_id * string napr. pc_9f2b…
client_secret * string

Odpovede

200Token. Odpoveď má Cache-Control: no-store.
application/jsonToken
400unsupported_grant_type
application/jsonChyba
401invalid_client
application/jsonChyba
429Prekročený limit požiadaviek (120/min na kľúč).
application/jsonChyba

Partneri

Protistrany dokladov — zákazníci (firmy aj fyzické osoby) a operátori, ktorým bol vystavený doklad.

GET /partners #

Zoznam partnerov

Protistrany dokladov operátora, zoradené podľa posledného dokladu. Na inkrementálny sync použite ?od= — vráti len partnerov s dokladom od daného dátumu.

Vyžaduje Authorization: Bearer s rozsahom partners:read.

Parametre

NázovKdeTypPopis
od query voliteľný string (date) Len partneri s dokladom od tohto dátumu (YYYY-MM-DD).
typ query voliteľný string firma osoba cpo
page query voliteľný integer = 1
limit query voliteľný integer = 100
format query voliteľný string json xml Formát odpovede. xml má prednosť pred hlavičkou Accept. Predvolené json.

Odpovede

200Zoznam partnerov.
application/json → pole Partner
application/xml → pole Partner
401Chýbajúci, neplatný, expirovaný alebo odvolaný token.
application/jsonChyba
403Kľúč nemá potrebný rozsah (insufficient_scope).
application/jsonChyba
429Prekročený limit požiadaviek (120/min na kľúč).
application/jsonChyba

GET /partners/{id} #

Detail partnera

Vyžaduje Authorization: Bearer s rozsahom partners:read.

Parametre

NázovKdeTypPopis
id path povinný string Identifikátor vrátane prefixu, napr. u:3f9c… alebo t:8a1d….
format query voliteľný string json xml Formát odpovede. xml má prednosť pred hlavičkou Accept. Predvolené json.

Odpovede

200Partner.
application/jsonPartner
application/xmlPartner
401Chýbajúci, neplatný, expirovaný alebo odvolaný token.
application/jsonChyba
403Kľúč nemá potrebný rozsah (insufficient_scope).
application/jsonChyba
404Partner neexistuje alebo nepatrí tomuto operátorovi. Odpoveď je rovnaká v oboch prípadoch.
application/jsonChyba
429Prekročený limit požiadaviek (120/min na kľúč).
application/jsonChyba

Doklady

Vystavené faktúry vrátane položiek a rekapitulácie DPH.

GET /invoices #

Zoznam dokladov

Vystavené doklady operátora. Obdobie sa filtruje podľa dátumu vystavenia. Zoznam neobsahuje položky — tie vracia detail.

Vyžaduje Authorization: Bearer s rozsahom invoices:read.

Parametre

NázovKdeTypPopis
od query voliteľný string (date) Od dátumu vystavenia (YYYY-MM-DD).
do query voliteľný string (date) Do dátumu vrátane (YYYY-MM-DD).
stav query voliteľný string issued paid overdue cancelled
typ query voliteľný string charging | pausal | platform_fee | …
limit query voliteľný integer = 100
format query voliteľný string json xml Formát odpovede. xml má prednosť pred hlavičkou Accept. Predvolené json.

Odpovede

200Zoznam dokladov.
application/json → pole Doklad
application/xml → pole Doklad
401Chýbajúci, neplatný, expirovaný alebo odvolaný token.
application/jsonChyba
403Kľúč nemá potrebný rozsah (insufficient_scope).
application/jsonChyba
429Prekročený limit požiadaviek (120/min na kľúč).
application/jsonChyba

GET /invoices/{cislo} #

Detail dokladu s položkami a rekapituláciou DPH

Adresuje sa ČÍSLOM dokladu, nie interným UUID — číslo je to, čo je na doklade a čo ERP pozná.

Vyžaduje Authorization: Bearer s rozsahom invoices:read.

Parametre

NázovKdeTypPopis
cislo path povinný string napr. PLG202500042
format query voliteľný string json xml Formát odpovede. xml má prednosť pred hlavičkou Accept. Predvolené json.

Odpovede

200Doklad s položkami.
application/jsonDokladDetail
application/xmlDokladDetail
401Chýbajúci, neplatný, expirovaný alebo odvolaný token.
application/jsonChyba
403Kľúč nemá potrebný rozsah (insufficient_scope).
application/jsonChyba
404Doklad neexistuje alebo nepatrí tomuto operátorovi.
application/jsonChyba
429Prekročený limit požiadaviek (120/min na kľúč).
application/jsonChyba

Relácie

Nabíjacie relácie — podklad pre nákladové strediská.

GET /sessions #

Zoznam nabíjacích relácií

Vyžaduje Authorization: Bearer s rozsahom sessions:read.

Parametre

NázovKdeTypPopis
od query voliteľný string (date) Od začiatku relácie (YYYY-MM-DD).
do query voliteľný string (date) Do dátumu vrátane (YYYY-MM-DD).
page query voliteľný integer = 1
limit query voliteľný integer = 100
format query voliteľný string json xml Formát odpovede. xml má prednosť pred hlavičkou Accept. Predvolené json.

Odpovede

200Zoznam relácií.
application/json → pole Relacia
application/xml → pole Relacia
401Chýbajúci, neplatný, expirovaný alebo odvolaný token.
application/jsonChyba
403Kľúč nemá potrebný rozsah (insufficient_scope).
application/jsonChyba
429Prekročený limit požiadaviek (120/min na kľúč).
application/jsonChyba

Dokumentácia

Verejné, bez autentifikácie.

GET /openapi.json #

Táto špecifikácia (OpenAPI 3.1, JSON)

Verejné — bez autentifikácie.

Odpovede

200OpenAPI dokument.

GET /docs #

Dokumentácia pre ľudí (HTML)

Verejné — bez autentifikácie.

Odpovede

200HTML stránka generovaná z tejto špecifikácie.

GET /llms.txt #

Index pre AI agentov (llms.txt)

Verejné — bez autentifikácie.

Odpovede

200Textový index podľa konvencie llms.txt.

Schémy

Chyba#

PoleTypPopis
error * string Kód chyby podľa RFC 6749 §5.2 alebo not_found / server_error.
error_description string

Token#

PoleTypPopis
access_token * string
token_type * string Bearer
expires_in * integer Sekundy. Aktuálne 900 (15 minút).
scope * string Udelené rozsahy oddelené medzerou.

Partner#

Protistrana dokladu. Vracajú sa LEN subjekty, ktorým reálne vznikol doklad — nie celá databáza zákazníkov.

PoleTypPopis
id * string Stabilný identifikátor s prefixom zdroja: u:<uuid> zákazník, t:<uuid> operátor (CPO). napr. u:3f9c1e2a-…
typ * string firma osoba cpo
nazov string | null Názov firmy, alebo meno a priezvisko pri fyzickej osobe.
ico string | null
dic string | null DIČ — daňové identifikačné číslo (má ho každý daňový subjekt).
ic_dph string | null IČ DPH — identifikátor platcu DPH (len platca).
ulica string | null
psc string | null
mesto string | null
stat string | null ISO 3166-1 alpha-2, napr. SK.
email string | null Pri operátorovi (typ = cpo) je null.
posledny_doklad * string (date-time) Dátum posledného dokladu — kotva pre inkrementálny sync (?od=).
pocet_dokladov * integer

Doklad#

Vystavený doklad. Návrhy (draft) sa nikdy nevracajú. Sumy sú desatinné čísla s bodkou, bez ohľadu na locale.

PoleTypPopis
id * string (uuid)
invoice_number * string Číslo dokladu — unikátne v rámci fakturujúceho subjektu. Toto je kľúč pre GET /invoices/{cislo}.
type * string charging | pausal | platform_fee | …
status * string issued paid overdue cancelled overdue je odvodený: issued po dátume splatnosti.
issue_date string | null (date)
due_date string | null (date)
paid_at string | null (date-time)
currency * string napr. EUR
amount * number Celková suma s DPH.
amount_paid * number
variable_symbol string | null
vat_mode string | null
period_from string | null (date)
period_to string | null (date)
customer_email string | null
recipient_tenant string | null Názov operátora, ak je odberateľom CPO.
net_total number | null
vat_total number | null
rounding number | null
supplier_name string | null
supplier_ico string | null
supplier_vat_id string | null
customer_name string | null
customer_ico string | null
customer_vat_id string | null IČ DPH odberateľa platné K DÁTUMU VYSTAVENIA (z registra DPH registrácií).
customer_address string | null
cancelled_at string | null (date)
cancel_reason string | null
pdf_key string | null Interný kľúč PDF; samotné PDF sa cez toto API nevracia.

DokladDetail#

Rozširuje Doklad, object

PoleTypPopis
polozky * pole DokladPolozka
rekapitulacia_dph * pole RekapitulaciaDph

DokladPolozka#

PoleTypPopis
invoice_number * string
sort_order * integer
item_kind string
description * string
quantity * number
unit string | null
unit_price * number
net_amount * number
vat_rate * number Sadzba v percentách, napr. 23.
vat_amount * number
gross_amount * number

RekapitulaciaDph#

Jeden riadok na dvojicu (doklad, sadzba DPH) — základ a daň za každú sadzbu zvlášť, tak ako ide do priznania.

PoleTypPopis
invoice_number * string
currency * string
vat_rate * number
net_amount * number
vat_amount * number
gross_amount * number

Relacia#

Nabíjacia relácia — podklad pre nákladové strediská. Bez identifikátora karty: RFID UID je autentifikačný kredenciál a do účtovného exportu nepatrí.

PoleTypPopis
id * string (uuid)
status * string
started_at * string (date-time)
ended_at string | null (date-time)
kwh number | null
final_price number | null
currency string | null
lokalita string | null Názov lokality (stanice).
mesto string | null
partner_id string | null Odkaz na partnera (u:<uuid>), ak je relácia viazaná na zákazníka.