Interní API pro aplikaci Comgate Pokladna: aktivace zařízení, vydávání krátkodobých tokenů a doručování konfigurace.
Aktivace (jednou za instalaci)POST /pos/pokladna-api/activate pod bootstrap HTTP Basic přístupem. Fyzický POS se prokáže sériovým číslem (zero-touch), SoftPOS aktivačním kódem vydaným pro propojení obchodu. Odpověď obsahuje dlouhoživotný opaque deviceToken a plnou konfiguraci.
Autentizace (opakovaně)POST /pos/pokladna-api/authenticate s Authorization: Bearer [deviceToken] vrátí krátkodobý JWT a configVersion.
KonfiguraceGET /pos/pokladna-api/config s Authorization: Bearer [JWT]. Kdykoli se configVersion liší od uložené, stáhněte konfiguraci znovu — změny se doručují bez push notifikací.
Chybové stavy — závazné pravidlo pro klienta
Aplikace se přepne do stavu „deaktivováno“ VÝHRADNĚ na errorCode == 'DEVICE_REVOKED'. TOKEN_EXPIRED znamená jeden refresh tokenu, RATE_LIMITED, 5xx a timeouty znamenají backoff a nic víc — jinak by výpadek internetu zamkl pokladnu.
Vydá dlouhoživotný device token a plnou konfiguraci. Fyzický POS se identifikuje sériovým číslem, SoftPOS aktivačním kódem svého propojení obchodu. Opakování volání je bezpečné a nepotřebuje idempotenční klíč — poslední vydaný token vyhrává a předchozí padá, protože aplikace ještě žádný token nedrží. Uložte si connectionId; pokud pozdější aktivace vrátí jiné, aplikace ji musí odmítnout a vyžádat nejdřív vymazání dat.
| platform required | string Enum: "POS" "SOFTPOS" Musí odpovídat typu terminálu na propojení obchodu. |
| serialNumber | string Povinné pro POS, u SOFTPOS musí být prázdné. |
| activationCode | string Povinné pro SOFTPOS, u POS musí být prázdné. |
| appVersion | string <= 64 characters Nepovinná verze aplikace, drží se pro diagnostiku. |
| deviceToken | string |
| deviceId | integer |
| configVersion | integer |
| connectionState | string Enum: "ACTIVE" "PENDING_DEACTIVATION" |
| config | object Stejná struktura jako GET /pos/pokladna-api/config. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
{- "platform": "POS",
- "serialNumber": "N920WA03787",
- "activationCode": "A1B2C3D4",
- "appVersion": "1.4.2 (142)"
}{- "deviceToken": "cgp_1_9x3Kf7QpZ2mR8vTn1LbY4sHc0eJdWgAu6iOo5r2NkPQ",
- "deviceId": 1234,
- "configVersion": 1,
- "connectionState": "ACTIVE",
- "config": { }
}Device token předejte v Authorization: Bearer [deviceToken]. Vrací krátkodobý JWT pro ostatní endpointy a configVersion — kdykoli se liší od uložené, stáhněte konfiguraci znovu. Revokovaný nebo překonaný device token vrací 401 DEVICE_REVOKED, což je jediný signál, který aplikaci přepne do stavu „deaktivováno“.
| appVersion | string <= 64 characters |
| token | string |
| expiry | string |
| configVersion | integer |
| catalogVersion | integer Nejvyšší verze položky v katalogu zařízení. Když se liší od uložené, stáhněte katalog položek znovu. |
| connectionState | string Enum: "ACTIVE" "PENDING_DEACTIVATION" |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
{- "appVersion": "1.4.2 (142)"
}{- "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJwb2tsYWRuYToxMjM0In0.dummy-signature",
- "expiry": "2026-08-06T10:15:00+00:00",
- "configVersion": 7,
- "catalogVersion": 47,
- "connectionState": "ACTIVE"
}Plná konfigurace pro zařízení autentizované JWT. env rozhoduje, se kterou platební aplikací se komunikuje, a nikdy se neodvozuje z prefixu TID. currencies se řídí nastavením obchodu. Revokace se kontroluje na každém volání, takže revokované zařízení přestane konfiguraci číst okamžitě, ne až po vypršení JWT.
| configVersion | integer |
| connectionId | integer |
| shopId | integer |
| platform | string Enum: "POS" "SOFTPOS" |
| serialNumber | string or null |
| env | string Enum: "PROD" "ACC" "INT" Prostředí terminálové sítě z propojení obchodu. |
| terminalId | string |
| merchantId | string |
| connectionState | string Enum: "ACTIVE" "PENDING_DEACTIVATION" |
object | |
Array of objects | |
object | |
object |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
{- "configVersion": 7,
- "connectionId": 136602,
- "shopId": 16692,
- "platform": "POS",
- "serialNumber": "N920WA03787",
- "env": "PROD",
- "terminalId": "GT102626",
- "merchantId": "G2016692",
- "connectionState": "ACTIVE",
- "merchant": {
- "name": "Demo obchod s.r.o.",
- "ico": "12345678",
- "dic": "CZ12345678",
- "premises": "Stánek 1, Jankovcova 1596/14a, Praha 7",
- "premisesName": "Stánek 1",
- "premisesStreet": "Jankovcova 1596/14a",
- "premisesCity": "Praha 7",
- "premisesZip": "17000",
- "premisesCountry": "CZ"
}, - "currencies": [
- {
- "code": "CZK",
- "numeric": 203
}
], - "tip": {
- "mode": "PERCENT_LOW",
- "percentages": [
- 5,
- 10,
- 15
]
},
}Nahraje dávku maximálně 50 transakcí. Identita záznamu je klientské id a server podle něj upsertuje, takže opakované nahrání záznamu, který se po synchronizaci změnil (storno, refundovaná částka, orazítkování uzávěrkou, výdej dokladu), je očekávané — pošlete ho znovu s vyšší syncVersion. Záznam s nižší syncVersion, než je uložená, se zahodí, ale i tak se ackne, protože z pohledu klienta je vyřízený.
Dávka se nikdy neodmítá celá kvůli jednomu záznamu. Vadný záznam je v rejected a NEackne se, takže příští dávka obsahuje už jen jeho; všechno ostatní se ackne a odejde z fronty. Neznámý type nebo status se coercuje na UNKNOWN, nerozparsovatelný saleJson/rawJson se uloží verbatim jako JSON string. Dávka nad limit se zpracuje do limitu a odpoví truncated: true.
Sémantika acku: za synchronizované označte jen ID vrácená v accepted. Částky jsou integery v minoritních jednotkách, měna je alfabetický kód.
| pendingCount | integer or null Celkový počet nesynchronizovaných řádků na zařízení (transakce + uzávěrky) v momentě stavby dávky. Zobrazuje se v administraci; bez něj si čítač drží předchozí hodnotu. |
required | Array of objects |
| accepted | Array of strings ID, která server přijal. Za synchronizovaná označte JEN tato. |
Array of objects | |
| truncated | boolean Dávka přesáhla limit a zpracovala se jen do něj. Zbytek pošlete dalším voláním — není to chyba. |
| configVersion | integer Aktuální verze konfigurace, přepočítaná při každém syncu. Když se liší od uložené, stáhněte konfiguraci znovu. |
| catalogVersion | integer Nejvyšší verze položky v katalogu zařízení. Když se liší od uložené, stáhněte katalog položek znovu - mění se jak uploadem ze zařízení, tak editací obsluhou v administraci. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
{- "pendingCount": 63,
- "records": [
- {
- "id": "9f1c8d2e",
- "type": "CARD",
- "status": "PAID",
- "amount": 130000,
- "currency": "CZK",
- "tip": 10000,
- "refunded": 0,
- "cashReceived": 0,
- "createdAt": 1754563200123,
- "terminalAt": 0,
- "serverAt": 0,
- "syncVersion": 3,
- "seqNumber": "001004080",
- "authCode": "306720",
- "note": "string",
- "batchNo": 0,
- "saleSource": "CART",
- "docNumber": "1242600011",
- "refDocNumber": "string",
- "correctionDocNumber": "string",
- "docIssuedAt": 0,
- "correctionIssuedAt": 0,
- "correctedAt": 0,
- "closingId": "string",
- "refundOfId": "string",
- "saleJson": "string",
- "rawJson": "string",
- "reversalRawJson": "string"
}
]
}{- "accepted": [
- "string"
], - "rejected": [
- {
- "id": "string",
- "reason": "MISSING_FIELD:amount"
}
], - "truncated": false,
- "configVersion": 7,
- "catalogVersion": 47
}Nahraje uzávěrky — jeden záznam na měnu jedné uzávěrky. Uzávěrka je immutable součet, takže opakované nahrání téhož id jen přepíše totály a žádnou verzi nepotřebuje.
Částečný ack je tady normální. Klient posílá všechny pending uzávěrky bez limitu, takže server zpracuje 200 z nich, ackne je a odpoví truncated: true; zbytek dorazí dalším voláním. Odmítnout celou dávku by znamenalo, že zařízení s víc než 200 uzávěrkami nikdy neprojde.
Uzávěrka se samými nulami je legitimní — dostane ji měna, ve které byla jen storna, jinak by se její transakce nikdy neorazítkovaly.
| pendingCount | integer or null |
required | Array of objects |
| accepted | Array of strings |
Array of objects | |
| truncated | boolean |
| configVersion | integer |
| catalogVersion | integer Nejvyšší verze položky v katalogu zařízení. Když se liší od uložené, stáhněte katalog položek znovu - mění se jak uploadem ze zařízení, tak editací obsluhou v administraci. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
{- "pendingCount": 5,
- "records": [
- {
- "id": "c1f4a9",
- "closingBatchId": "string",
- "createdAt": 1754560000000,
- "fromAt": 1754470000000,
- "currency": "CZK",
- "cardCount": 12,
- "cardTotal": 150000,
- "qrCount": 0,
- "qrTotal": 0,
- "cashCount": 0,
- "cashTotal": 0,
- "refundCount": 0,
- "refundTotal": -5000,
- "tipTotal": 0
}
]
}{- "accepted": [
- "string"
], - "rejected": [
- {
- "id": "string",
- "reason": "MISSING_FIELD:currency"
}
], - "truncated": false,
- "configVersion": 7,
- "catalogVersion": 47
}Vrátí katalog položek zařízení. S parametrem since, do kterého patří poslední známý catalogVersion, přijdou jen položky změněné po něm; bez since přijde celý katalog. Nerozparsovatelné since se bere jako chybějící a vrátí se celý katalog — stáhnout ho znovu je vždy bezpečné, kdežto 400 by vzalo jedinou cestu, jak se ke katalogu dostat.
Smazané položky se vracejí s active: false, nikdy se nevynechávají — klient je musí zneaktivnit i u sebe.
| since | integer <int64> Example: since=41 Poslední známý catalogVersion. |
| catalogVersion | integer Nejvyšší verze položky v katalogu zařízení. Uložte si ji a posílejte zpátky jako |
Array of objects |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
{- "catalogVersion": 47,
- "items": [
- {
- "id": "i1",
- "name": "Kava",
- "price": 6000,
- "currency": "CZK",
- "vatRatePercent": 21,
- "active": true,
- "sortOrder": 10,
- "updatedAt": 1754563200123,
- "version": 47
}
]
}Nahraje změněné položky — deltu, ne kompletní stav. Konflikt řeší updatedAt: vyhrává vyšší hodnota, nižší se zahodí, ale i tak se ackne.
Mazání je active: false. Položka v katalogu zůstává, takže uložená účtenka, která se na ni odkazuje, si zachová smysl.
Sémantika acku je stejná jako u transakcí: za synchronizované označte jen ID vrácená v accepted.
⚠ catalogVersion v této odpovědi je nejvyšší verze vlastních zápisů, případně 0, když se nezapsalo nic. Je to hodnota k porovnání, nikdy cursor: since smí posunout jen odpověď na GET /items. Uložením téhle hodnoty jako since byste přeskočili změnu z administrace s nižší verzí, kterou zařízení ještě nestáhlo — a nikdo si o ni už nikdy neřekne.
required | Array of objects <= 200 items | ||||||||||||||||
Array (<= 200 items)
| |||||||||||||||||
| accepted | Array of strings |
Array of objects | |
| truncated | boolean |
| configVersion | integer |
| catalogVersion | integer Nejvyšší verze vlastních zápisů, 0 když se nezapsalo nic. Hodnota k porovnání, nikdy cursor — |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
{- "records": [
- {
- "id": "i1",
- "name": "Kava",
- "price": 6000,
- "currency": "CZK",
- "vatRatePercent": 21,
- "active": true,
- "sortOrder": 10,
- "updatedAt": 1754563200123
}
]
}{- "accepted": [
- "i1"
], - "rejected": [
- {
- "id": "string",
- "reason": "MISSING_FIELD:price"
}
], - "truncated": false,
- "configVersion": 7,
- "catalogVersion": 48
}Nahraje provozní logy ze zařízení, aby podpora mohla dohledávat na dálku bez přístupu k telefonu. Dávka maximálně 200 řádků.
Nic se tady neodmítá kvůli obsahu. Chybějící level znamená INFO, neznámý se coercuje na INFO, nerozparsovatelný context se uloží verbatim a message nad 4000 znaků se zkrátí a označí — nikdy neodmítne. Diagnostika nesmí umět zaseknout frontu.
Každý řádek potřebuje vlastní id: ack je per ID a idempotence při retry na něm stojí. Řádek je append-only — opakované nahrání téhož id ponechá to, co došlo poprvé.
⚠ Do logu se nesmí dostat device token, JWT ani přístupy k QR API. Server to ověřit nemůže, je to požadavek na klienta.
required | Array of objects <= 200 items | ||||||||||||||
Array (<= 200 items)
| |||||||||||||||
| accepted | Array of strings |
Array of objects | |
| truncated | boolean |
| configVersion | integer |
| catalogVersion | integer Nejvyšší verze položky v katalogu zařízení. Když se liší od uložené, stáhněte katalog položek znovu - mění se jak uploadem ze zařízení, tak editací obsluhou v administraci. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
| errorMessage | string Chybová zpráva pro člověka. |
| errorCode | string Enum: "INVALID_REQUEST" "UNAUTHORIZED" "TOKEN_EXPIRED" "DEVICE_REVOKED" "ACTIVATION_BLOCKED" "CONNECTION_DEACTIVATED" "CONNECTION_NOT_READY" "DEVICE_NOT_REGISTERED" "ACTIVATION_CODE_UNKNOWN" "ACTIVATION_CODE_USED" "AMBIGUOUS_INPUT" "RATE_LIMITED" "INTERNAL_ERROR" Strojově čitelný kód chyby. Do stavu „deaktivováno“ smí aplikaci přepnout jedině DEVICE_REVOKED. Nevalidní JSON tělo je odmítnuto před dispatchem a vrací 400 bez errorCode — berte ho jako INVALID_REQUEST. |
{- "records": [
- {
- "id": "log-9f1c",
- "createdAt": 1754563200123,
- "message": "ECR intent returned OK",
- "level": "INFO",
- "tag": "Sync",
- "context": "string",
- "appVersion": "1.4.2"
}
]
}{- "accepted": [
- "log-9f1c"
], - "rejected": [
- {
- "id": "string",
- "reason": "MISSING_FIELD:message"
}
], - "truncated": false,
- "configVersion": 7,
- "catalogVersion": 47
}