Cloud Accept API
BetaSpúšťajte platby v predajni na spárovanom zariadení Tapaya zo svojho ECR alebo backendu POS.
Cloud Accept API umožňuje vašej elektronickej registračnej pokladnici (ECR) alebo backendu POS spustiť platbu na zariadení Tapaya cez cloud. Váš systém nikdy nekomunikuje so zariadením priamo: odošle požiadavku na platbu do Tapaya, Tapaya upozorní spárované zariadenie a zariadenie zobrazí zákazníkovi platobnú obrazovku. Informácie o priebehu k vám prichádzajú ako webhooky, prípadne si ich zisťujete dopytovaním (pollingom).
Výber spôsobu párovania zariadení
Každé zariadenie, na ktoré posielate platby, potrebuje externalDeviceId: názov, pod ktorým ho pozná váš systém, napríklad
till-01. Priradiť ho môžete jedným z dvoch spôsobov:
Z vašej aplikácie
Vaša aplikácia priradí externalDeviceId prostredníctvom Accept SDK na zariadení.
QR kód z platformy
Obchodník zobrazí QR kód v Tapaya Platform a naskenuje ho aplikáciou pre obchodníkov.
Skôr než začnete
- Získajte svoj Server Secret Token na stránke API Keys. Nižšie ho vymeníte za prístupový token obmedzený na obchodníka (pozrite autentifikácia v Platform API).
- Zaregistrujte obchodníka a uchovajte si jeho
merchantToken. Pozrite Registrácia nového obchodníka. - Pripravte každé zariadenie s aplikáciou Tapaya prihlásenou za daného obchodníka, aby ho bolo možné spárovať a mohlo prijímať požiadavky.
Jeden token, jeden obchodník
Každé volanie Cloud Accept API je obmedzené práve na jedného obchodníka. Ak chcete obsluhovať viacerých obchodníkov, získajte výmenou samostatný prístupový token pre každého z nich.
Spárovanie zariadenia
Párovanie priradí zariadeniu Tapaya externalDeviceId, takže ho môžete nájsť pri výpise zariadení
a zacieliť naň pri spustení platby.
Priradenie z vašej aplikácie
Vaša aplikácia zavolá na zariadení funkciu Accept SDK, ktorá mu priradí externalDeviceId. Vo všetkých
volaniach Cloud Accept API pre toto zariadenie používajte rovnaký identifikátor.
Naskenovanie QR kódu
Obchodník otvorí v Tapaya Platform postup párovania, ktorý zobrazí QR kód pre priraďované
externalDeviceId. Obchodník ho naskenuje aplikáciou Tapaya pre obchodníkov na cieľovom
zariadení a aplikácia párovanie dokončí.
Výmena za prístupový token
Vymeňte svoj Server Secret Token a merchantToken obchodníka za prístupový token pomocou
POST /ecr/auth. merchantToken sa odosiela len tu; všetky ďalšie volania odosielajú iba
Authorization: Bearer <accessToken>.
curl -X 'POST' 'https://api.tapaya.com/ecr/auth' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer REPLACE_ME' \
-d '{
"merchantToken": "unique_merchant_id_from_your_db"
}'{
"accessToken": "...",
"tokenType": "Bearer",
"expiresAt": "2026-01-13T16:30:59Z"
}| Kód | Popis |
|---|---|
401 | Neplatný API token alebo API token s uplynutou platnosťou. |
403 | Prístup k obchodníkovi nie je povolený. |
Obnovte token pred expiresAt. Zavolajte POST /ecr/auth/refresh s aktuálnym, stále platným
accessToken v hlavičke Authorization. Endpoint vráti rovnaké telo s novým tokenom; uložte si ho
a odvtedy používajte už len ten nový.
curl -X 'POST' 'https://api.tapaya.com/ecr/auth/refresh' \
-H 'Authorization: Bearer ACCESS_TOKEN'| Kód | Popis |
|---|---|
401 | Prístupový token je neplatný, vypršal alebo bol zneplatnený. Získajte nový výmenou cez POST /ecr/auth. |
403 | K obchodníkovi už nemáte prístup. Nový token sa nevydá. |
Vyhľadanie pripraveného zariadenia
Zariadenia obchodníka vypíšte pomocou GET /ecr/devices. Pridaním ?connected=true vynecháte
odpojené zariadenia; jedno konkrétne zariadenie načítate pomocou GET /ecr/devices/{externalDeviceId}.
curl 'https://api.tapaya.com/ecr/devices/till-01' \
-H 'Authorization: Bearer ACCESS_TOKEN'{
"externalDeviceId": "till-01",
"name": "Front counter",
"connected": true,
"availability": "ready",
"lastSeenAt": "2026-01-13T16:30:59Z",
"updatedAt": "2026-01-13T16:30:59Z"
}Platby posielajte len na zariadenie, ktorého availability je ready. Výpis je len momentálny snímok:
dostupnosť sa znova overuje pri odoslaní, takže aj zariadenie v stave ready môže požiadavku
odmietnuť. Pozrite Dostupnosť zariadenia.
Odoslanie požiadavky na platbu
Sumu odošlite na zariadenie pomocou POST /ecr/payment-requests. Tapaya požiadavku uloží a
upozorní zariadenie, ktoré zobrazí platobnú obrazovku.
curl -X 'POST' 'https://api.tapaya.com/ecr/payment-requests' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Idempotency-Key: order-1042-attempt-1' \
-d '{
"externalDeviceId": "till-01",
"amount": 12500,
"tipAmount": 500,
"currency": "CZK"
}'Parametre:
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
externalDeviceId | string | ✓ | Spárované zariadenie, ktoré má platbu zobraziť. |
amount | integer | ✓ | Suma v najmenšej jednotke meny (12500 je 125,00 Kč). |
tipAmount | integer | Prepitné v najmenšej jednotke meny. | |
currency | string | ✓ | Kód meny podľa ISO 4217. |
paymentToken | string | Existujúca platba, ku ktorej sa má požiadavka pripojiť. |
{
"requestId": "...",
"status": "pending",
"paymentToken": null,
"expiresAt": "2026-01-13T16:30:59Z"
}202 nie je výsledok platby
202 Accepted znamená, že Tapaya požiadavku uložila. Neznamená to, že ju zariadenie zaznamenalo,
ani že zákazník zaplatil. Čokoľvek, čo zlyhá neskôr, sa k vám dostane ako zmena stavu.
Zabezpečte bezpečné opakovanie požiadaviek. Hlavička Idempotency-Key je povinná. Opätovné použitie kľúča s rovnakým telom
vráti pôvodnú požiadavku namiesto spustenia druhej platby; opätovné použitie s iným telom
vráti 409 idempotency_conflict. Naviažte kľúč na predaj a pokus, napríklad
order-1042-attempt-1.
Sledovanie výsledku
Sledujte požiadavku cez jej stavy pomocou webhookov, alebo pravidelne volajte
GET /ecr/payment-requests/{requestId}. Keď požiadavka dosiahne stav payment_created, odpoveď obsahuje
paymentToken a priebeh samotnej platby hlásia udalosti payment.updated.
Ak chcete prijímať webhooky, zaregistrujte svoj HTTPS endpoint pomocou POST /ecr/webhook-subscriptions, alebo
pre obchodníka nastavte callback URL a typy udalostí v Tapaya Platform.
curl -X 'POST' 'https://api.tapaya.com/ecr/webhook-subscriptions' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-d '{
"url": "https://integrator.example.com/webhooks/tapaya",
"events": ["payment_request.updated", "payment.updated"]
}'{
"subscriptionId": "...",
"url": "https://integrator.example.com/webhooks/tapaya",
"events": ["payment_request.updated", "payment.updated"],
"signingSecret": "..."
}Uložte si signing secret
signingSecret sa vracia len pri vytvorení odberu. Bezpečne si ho uložte; budete
ho potrebovať na overenie podpisu prichádzajúcich webhookov.
Odber patrí integrátorovi a obchodníkovi, nie prístupovému tokenu, takže pri obnovení tokenu
zostáva zachovaný. Na každú udalosť odpovedzte kódom 2xx, hneď ako ju prijmete.
Pred uzavretím predaja overte výsledok
Webhooky sú oznámenia, nie doklad o platbe, a niektorý môže doraziť neskoro alebo nemusí doraziť vôbec. Nikdy neuzatvárajte predaj len na základe webhooku:
- Keď webhook dorazí, overte konečný výsledok cez API, napríklad pomocou Načítanie podrobností platby.
- Keď webhook nedorazí v časovom limite vhodnom pre váš pokladničný proces, najneskôr však
do
expiresAtpožiadavky, zavolajteGET /ecr/payment-requests/{requestId}, aby ste zistili jej aktuálny stav, a potom overte platbu cez API, ako je uvedené vyššie.
Referencia
Endpointy
| Metóda | Endpoint | Popis |
|---|---|---|
POST | /ecr/auth | Vymení váš API token a merchantToken za prístupový token. |
POST | /ecr/auth/refresh | Obnoví stále platný prístupový token. |
GET | /ecr/devices | Vypíše zariadenia obchodníka. Voliteľný filter connected=true. |
GET | /ecr/devices/{externalDeviceId} | Vráti jedno zariadenie a jeho aktuálnu dostupnosť. |
POST | /ecr/payment-requests | Uloží požiadavku na platbu a upozorní zariadenie. Vyžaduje Idempotency-Key. |
GET | /ecr/payment-requests/{requestId} | Vráti stav požiadavky, prípadný dôvod odmietnutia a paymentToken. |
POST | /ecr/webhook-subscriptions | Zaregistruje HTTPS URL a typy udalostí. Signing secret (podpisový kľúč) vráti len raz. |
GET | /ecr/webhook-subscriptions | Vypíše vaše odbery pre obchodníka, bez signing secretov. |
DELETE | /ecr/webhook-subscriptions/{subscriptionId} | Odstráni odber. |
Dostupnosť zariadenia
Oba endpointy pre zariadenia vracajú externalDeviceId, name, connected, availability, lastSeenAt a
updatedAt.
| Hodnota | Popis |
|---|---|
ready | Pripojené a schopné prijať a zobraziť požiadavku. |
busy | Spracúva platbu alebo má aktívnu požiadavku. |
unavailable | Odpojené, bez platnej relácie alebo neschopné zobraziť platobnú obrazovku. |
Stavy požiadavky
| Stav | Popis |
|---|---|
pending | Uložená a čaká, kým ju zariadenie prijme. |
acknowledged | Zariadenie ju dostalo; platba ešte nemusí existovať. |
payment_created | Platba a jej paymentToken existujú. Ďalší priebeh sledujte na platbe. |
rejected | Zariadenie alebo Tapaya požiadavku odmietli. |
Chyby
| Kód | Dôvod | Popis |
|---|---|---|
403 / 404 | Objekt nie je dostupný | Nemáte oprávnenie alebo objekt neexistuje. |
409 | device_busy | Zariadenie už má aktívnu požiadavku alebo platbu. |
409 | device_unavailable | Zariadenie je pripojené, ale nie je pripravené. |
409 | idempotency_conflict | Kľúč už bol použitý s iným telom. |
503 | device_offline | Zariadenie nie je pripojené. |
Chyby validácie sumy a meny sa riadia rovnakými konvenciami ako zvyšok Platform API.
Udalosti webhookov
| Udalosť | Odosiela sa, keď | Obsah data |
|---|---|---|
device.connected | Zariadenie nadviaže nové aktívne spojenie. | externalDeviceId, connected, availability, lastSeenAt |
device.disconnected | Spojenie sa uzavrie alebo vyprší časový limit kontroly aktivity spojenia. | externalDeviceId, connected, availability, lastSeenAt |
device.availability_changed | Dostupnosť sa zmení medzi ready, busy a unavailable. | externalDeviceId, availability, voliteľne reason |
payment_request.updated | Požiadavka je uložená, potvrdená, odmietnutá, vyprší alebo k nej vznikne platba. | requestId, externalDeviceId, status, paymentToken, reference, reason, expiresAt |
payment.updated | Zmení sa stav platby. | paymentToken, requestId, externalDeviceId, status, reference, amount, currency, voliteľne receiptUrl |
Každá udalosť prichádza ako HTTP POST v rovnakej obálke:
{
"eventId": "...",
"type": "payment_request.updated",
"occurredAt": "2026-01-13T16:30:59Z",
"data": {
"requestId": "...",
"externalDeviceId": "till-01",
"status": "acknowledged",
"paymentToken": null,
"reference": "ORDER-1042",
"reason": null,
"expiresAt": "2026-01-13T16:30:59Z"
}
}