Cihazlar
- Taban yol
/api/v1/physical-pos- Kimlik
- Her istekte Ed25519 istek imzası —
X-Key-Id,X-Date,X-Nonce,X-Signature; gövdeli isteklerde ayrıcaDigest. Zaman penceresi ±5 dk, nonce tek kullanımlık. Bearer jetonu ya da panel oturumu bu uçlarda kabul edilmez. - Yetki
- Anahtarınız Fiziksel POS ürününü (
PHYSICAL_POS) ve bu sayfadaki uçların kapsamını taşımalıdır:physical_pos:view·physical_pos:manage. Ürünü olmayan anahtar403 PRODUCT_NOT_ENABLED, kapsamı olmayan anahtar403 API_INSUFFICIENT_SCOPEalır. Bkz. Kimlik Doğrulama ve Kapsamlar. - Çapraz yüzey
- Bu uçlar s2s yüzeyindedir; kendi sunucunuzdan imzalı istekle çağırırsınız. Aynı kayıtların panelde ekranları var, ama panel uçları API anahtarıyla çağrılamaz; bu uçlar da panel oturumuyla çağrılamaz.
Cihaz, mağazalarınızdaki fiziksel POS donanımıdır: üreticisi, katalogdaki modeli ve seri numarası olan kayıt. Cihazı bir mağazaya (ve isteğe bağlı olarak bir kasaya) atarsınız; bir mantıksal terminale bağlamak için cihazın id değerini cihaz bağı uçlarında deviceId olarak kullanırsınız. → Temel kavramlar
Cihazlar anahtarınızın ortamındadır; diğer ortamın cihazı 404 döner. Test anahtarı cihazları yalnız okur. → Ortamlar
| Yöntem | Yol | Kapsam |
|---|---|---|
GET | /api/v1/physical-pos/devices | physical_pos:view |
POST | /api/v1/physical-pos/devices | physical_pos:manage |
GET | /api/v1/physical-pos/devices/{deviceId} | physical_pos:view |
PATCH | /api/v1/physical-pos/devices/{deviceId} | physical_pos:manage |
POST | /api/v1/physical-pos/devices/{deviceId}/assignment | physical_pos:manage |
POST | /api/v1/physical-pos/devices/{deviceId}/assignment/close | physical_pos:manage |
POST | /api/v1/physical-pos/devices/{deviceId}/retire | physical_pos:manage |
GET | /api/v1/physical-pos/devices/{deviceId}/assignments | physical_pos:view |
GET | /api/v1/physical-pos/devices/{deviceId}/audit | physical_pos:view |
cURL örnekleri imzayı lunixi-sign.sh ile hesaplar: Kimlik Doğrulama › İmza yardımcısı.
Cihaz nesnesi
Liste satırları aşağıdaki özet alanları taşır; ayrıntı ve yazma yanıtları özet alanlarına ek olarak ayrıntı alanlarını taşır.
| Alan | Tip | Açıklama |
|---|---|---|
id | string (UUID) | Cihazın kimliği; cihaz bağında deviceId olarak kullanılır. |
displayName | string | null | Görünen ad. |
vendorCode | string | Üretici kodu (ör. PAVO). |
modelId | string (UUID) | Katalogdaki modelin kimliği. |
modelDisplayName | string | Modelin adı. |
modelImage | object | null | Modelin görseli, { assetId, url }. → Görsel nesnesi |
vendorFallbackImage | object | null | Üreticinin yedek görseli. |
deviceType | string | PHYSICAL ya da SOFTPOS. |
formFactor | string | COUNTERTOP, PORTABLE, MOBILE, UNATTENDED ya da PINPAD. |
serialNumber | string | Seri numarası, kaydettiğiniz biçimde. |
environment | string | TEST ya da LIVE; anahtarınızın ortamı. |
lifecycleStatus | string | PENDING, ACTIVE, SUSPENDED, MAINTENANCE ya da RETIRED. Yeni kaydedilen cihaz PENDING durumundadır. |
ownershipStatus | string | UNVERIFIED: cihazın size ait olduğu doğrulanmadı. VERIFIED: doğrulandı. Yeni kaydedilen cihaz UNVERIFIED durumundadır. |
integrationChannel | string | Cihazla haberleşme kanalı: APP2APP, LOCAL_REST, VENDOR_CLOUD ya da UNSET. |
appMode | string | null | Cihazdaki uygulamanın modu: BRIDGE, CASHIER, KIOSK, MINIBUS ya da TAXI. Yalnız APP2APP ve LOCAL_REST kanalında. |
store | object | null | Atandığı mağaza { id, code, name }; depodaysa null. |
register | object | null | Atandığı kasa { id, code, name }. |
logicalTerminal | object | null | Bağlı olduğu terminal { id, code }. |
createdAt | string | Oluşturulma zamanı. |
Ayrıntı alanları
| Alan | Tip | Açıklama |
|---|---|---|
vendorDeviceRef | string | Üreticinin cihaza verdiği kimlik. |
channelVariant | string | null | Kanalın üreticiye özgü çeşidi. |
externalRef | string | null | Kendi sisteminizdeki cihaz kimliği. |
hardwareManufacturer | string | null | Donanım üreticisi. |
hardwareModel | string | null | Donanım modeli. |
verifiedAt | string | null | Sahipliğin doğrulandığı zaman. |
verifiedVia | string | null | Doğrulamanın kaynağı: ACTIVATION, VENDOR_ACCOUNT ya da OPERATOR. |
vendorAccount | object | null | Cihazın bağlı olduğu üretici hesabı { id, label }. |
firstActivatedAt | string | null | Cihazın ilk kez ACTIVE olduğu zaman. |
retiredAt | string | null | Emekliye ayrıldığı zaman. |
source | string | Kaydın kaynağı: MANUAL (panelden ya da API'den) ya da VENDOR_ACCOUNT. |
fieldSources | object | Alan adı → o alanın kaynağı (MANUAL, VENDOR_ACCOUNT, DEVICE_REPORTED). |
drift | array | Kaynaklar arasında ayrışan alanlar; öğe biçimi { field, source, observedAt }. |
activeKey | object | null | Cihazın etkin kimlik anahtarı { keyId, activatedAt }. |
openActivationCode | object | null | Süresi dolmamış açık aktivasyon kodu { expiresAt }. Kodun kendisi dönmez. |
rowVersion | integer | Eşzamanlılık sürümü. → rowVersion |
updatedAt | string | Son değişiklik zamanı. |
Cihazları listeleme
GET /api/v1/physical-pos/devices
| Sorgu parametresi | Tip | Açıklama |
|---|---|---|
storeId | string (UUID) | Bu mağazaya atanmış cihazlar. |
registerId | string (UUID) | Bu kasaya atanmış cihazlar. |
vendorCode | string | Üretici kodu. |
deviceModelId | string (UUID) | Katalog modeli. |
deviceType | string | PHYSICAL ya da SOFTPOS. |
lifecycleStatus | string | PENDING, ACTIVE, SUSPENDED, MAINTENANCE ya da RETIRED. |
ownershipStatus | string | UNVERIFIED ya da VERIFIED. |
integrationChannel | string | APP2APP, LOCAL_REST, VENDOR_CLOUD ya da UNSET. |
q | string | Seri numarası, üretici kimliği, dış referans ya da görünen adın başıyla eşleşen cihazlar, en çok 64 karakter. Yalnız sizin cihazlarınızda arar. |
limit | integer | Sayfa başına kayıt, 1–100. Varsayılan 25. |
cursor | string | Önceki yanıttaki pageInfo.nextCursor. |
includeTotal | boolean | true ise pageInfo.totalCount doldurulur. |
Geçersiz süzgeç değeri (küme dışı durum, biçim dışı kimlik, bilinmeyen üretici kodu, kurala uymayan ya da 64 karakteri aşan q) 400 physical_pos.input.filter_invalid alır; details.field süzgecin adını verir. Değer kümeleri büyük/küçük harfe duyarlıdır.
source lunixi-sign.sh
REQ_PATH="/api/v1/physical-pos/devices?storeId=00000000-0000-0000-0000-000000000101&lifecycleStatus=PENDING"
lunixi_sign GET "$REQ_PATH"
curl "https://api-gateway.lunixi.com$REQ_PATH" \
-H "X-Key-Id: $LUNIXI_KEY_ID" \
-H "X-Date: $DATE" \
-H "X-Nonce: $NONCE" \
-H "X-Signature: $SIGNATURE"{
"status": "success",
"code": "SUCCESS",
"data": {
"items": [
{
"id": "00000000-0000-0000-0000-000000000401",
"displayName": "Kasa 1 POS",
"vendorCode": "PAVO",
"modelId": "00000000-0000-4000-8000-000000000b01",
"modelDisplayName": "Örnek Model M1",
"modelImage": {
"assetId": "00000000-0000-4000-8000-000000000a02",
"url": "https://img.lunixi.com/00000000-0000-4000-8000-000000000a02"
},
"vendorFallbackImage": null,
"deviceType": "PHYSICAL",
"formFactor": "COUNTERTOP",
"serialNumber": "SN0000000001",
"environment": "LIVE",
"lifecycleStatus": "PENDING",
"ownershipStatus": "UNVERIFIED",
"integrationChannel": "APP2APP",
"appMode": "CASHIER",
"store": { "id": "00000000-0000-0000-0000-000000000101", "code": "IST-KADIKOY", "name": "Kadıköy Mağazası" },
"register": { "id": "00000000-0000-0000-0000-000000000201", "code": "KASA-1", "name": "Giriş Kasası" },
"logicalTerminal": null,
"createdAt": "2026-01-02T08:00:00.000Z"
}
],
"pageInfo": { "hasMore": false, "nextCursor": null, "totalCount": null }
},
"pageInfo": { "hasMore": false, "nextCursor": null, "totalCount": null },
"statusCode": 200,
"requestId": "00000000-0000-0000-0000-000000000000"
}Cihaz kaydetme
POST /api/v1/physical-pos/devices · Idempotency-Key zorunlu
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
vendorCode | string | Evet | Katalogdaki etkin bir üreticinin kodu. → Katalog › Üreticiler |
deviceModelId | string (UUID) | Evet | Aynı üreticinin etkin bir modeli. → Katalog › Cihaz modelleri |
serialNumber | string | Evet | Cihazın seri numarası; biçim üreticiye göre değişir, aşağıya bakın. |
displayName | string | Hayır | Görünen ad, en çok 120 karakter. Metin kurallarına tabidir. |
externalRef | string | Hayır | Kendi sisteminizdeki kimlik: boşluksuz yazdırılabilir ASCII, en çok 128 karakter. Ortamınızda tekildir. |
storeId | string (UUID) | Hayır | Verilirse cihaz aynı işlemde bu mağazaya atanır (gerekçe INITIAL_SETUP). |
registerId | string (UUID) | Hayır | Mağazanın bir kasası; storeId olmadan gönderilemez. |
integrationChannel | string | Evet | APP2APP, LOCAL_REST, VENDOR_CLOUD ya da UNSET. |
channelVariant | string | Hayır | Kanalın çeşidi: harfle başlar, A-Z, 0-9, _; en çok 32 karakter. Büyük harfe çevrilir. |
appMode | string | Hayır | BRIDGE, CASHIER, KIOSK, MINIBUS ya da TAXI. Yalnız APP2APP ve LOCAL_REST kanalında. |
Seri numarası biçimi:
| Üretici | Kural |
|---|---|
CASTLES | 12 ya da 16 rakam. 0000 ile başlayan 16 haneli seri, son 12 haneyle aynı cihaz sayılır. |
PAVO | A-Z ve 0-9, 4–64 karakter; büyük/küçük harf fark etmez. |
PLUSPAY | Boşluksuz yazdırılabilir ASCII, en çok 128 karakter; büyük/küçük harf korunur ve değer kırpılmaz. |
Biçim dışı seri 400 physical_pos.input.serial_invalid alır. Seri numarası hesabınızda tekildir (üreticiden ve ortamdan bağımsız); aynı seriyle kayıtlı bir cihazınız varsa 409 physical_pos.device.serial_taken. Emekliye ayrılan cihazın serisi yeniden kaydedilebilir.
Yeni cihaz lifecycleStatus: "PENDING", ownershipStatus: "UNVERIFIED" ve source: "MANUAL" ile başlar.
source lunixi-sign.sh
REQ_PATH="/api/v1/physical-pos/devices"
BODY='{"vendorCode":"PAVO","deviceModelId":"00000000-0000-4000-8000-000000000b01","serialNumber":"SN0000000001","displayName":"Kasa 1 POS","storeId":"00000000-0000-0000-0000-000000000101","registerId":"00000000-0000-0000-0000-000000000201","integrationChannel":"APP2APP","appMode":"CASHIER"}'
lunixi_sign POST "$REQ_PATH" "$BODY"
curl -X POST "https://api-gateway.lunixi.com$REQ_PATH" \
-H "Content-Type: application/json" \
-H "X-Key-Id: $LUNIXI_KEY_ID" \
-H "X-Date: $DATE" \
-H "X-Nonce: $NONCE" \
-H "Digest: $DIGEST" \
-H "X-Signature: $SIGNATURE" \
-H "Idempotency-Key: 4f9b2c1e-0000-4000-8000-000000000006" \
--data-raw "$BODY"Yeni cihazda 201, aynı anahtar ve aynı gövdeyle tekrarda 200 döner. data: { "device": { … }, "replayed": false }; device ayrıntı biçimindedir.
| Engel | Hata |
|---|---|
| Üretici katalogda yok ya da devre dışı | 400 physical_pos.device.vendor_unknown |
| Model yok | 404 physical_pos.device_model.not_found |
| Model başka üreticinin | 400 physical_pos.device.model_vendor_mismatch |
Model kullanımdan kalkmış (DEPRECATED) | 409 physical_pos.device.model_deprecated |
appMode bu kanalda kullanılamaz | 400 physical_pos.device.app_mode_invalid |
registerId var, storeId yok | 400 physical_pos.validation.invalid |
| Mağaza ya da kasa yok, ya da kasa bu mağazanın değil | 404 physical_pos.store.not_found / 404 physical_pos.register.not_found |
| Mağaza ya da kasa arşivli | 409 physical_pos.store.archived / 409 physical_pos.register.archived |
externalRef kullanımda | 409 physical_pos.device.external_ref_taken |
Cihaz ayrıntısı
GET /api/v1/physical-pos/devices/{deviceId}
{
"status": "success",
"code": "SUCCESS",
"data": {
"device": {
"id": "00000000-0000-0000-0000-000000000401",
"displayName": "Kasa 1 POS",
"vendorCode": "PAVO",
"modelId": "00000000-0000-4000-8000-000000000b01",
"modelDisplayName": "Örnek Model M1",
"modelImage": null,
"vendorFallbackImage": null,
"deviceType": "PHYSICAL",
"formFactor": "COUNTERTOP",
"serialNumber": "SN0000000001",
"environment": "LIVE",
"lifecycleStatus": "PENDING",
"ownershipStatus": "UNVERIFIED",
"integrationChannel": "APP2APP",
"appMode": "CASHIER",
"store": { "id": "00000000-0000-0000-0000-000000000101", "code": "IST-KADIKOY", "name": "Kadıköy Mağazası" },
"register": { "id": "00000000-0000-0000-0000-000000000201", "code": "KASA-1", "name": "Giriş Kasası" },
"logicalTerminal": null,
"createdAt": "2026-01-02T08:00:00.000Z",
"vendorDeviceRef": "SN0000000001",
"channelVariant": null,
"externalRef": null,
"hardwareManufacturer": null,
"hardwareModel": null,
"verifiedAt": null,
"verifiedVia": null,
"vendorAccount": null,
"firstActivatedAt": null,
"retiredAt": null,
"source": "MANUAL",
"fieldSources": { "displayName": "MANUAL" },
"drift": [],
"activeKey": null,
"openActivationCode": null,
"rowVersion": 1,
"updatedAt": "2026-01-02T08:00:00.000Z"
}
},
"statusCode": 200,
"requestId": "00000000-0000-0000-0000-000000000000"
}Olmayan, başka bir organizasyona ya da diğer ortama ait cihaz 404 physical_pos.device.not_found döner.
Cihaz güncelleme
PATCH /api/v1/physical-pos/devices/{deviceId}
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
rowVersion | integer | Evet | Son okuduğunuz rowVersion. |
displayName | string | null | Hayır | null alanı temizler. |
externalRef | string | null | Hayır | null alanı temizler. |
integrationChannel | string | Hayır | Yeni kanal; temizlenemez. |
channelVariant | string | null | Hayır | null alanı temizler. |
appMode | string | null | Hayır | null alanı temizler. |
- Gönderilmeyen alan değişmez.
serialNumber,vendorCode,deviceModelIddeğiştirilemez; gövdede gönderilirse400 VALIDATION_ERROR. - Değişecek alan içermeyen istek
400 physical_pos.input.empty_patchalır. Gönderilen değerler mevcut değerlerle aynıysa kayıt değişmez ve200döner. - Değiştirdiğiniz alanların kaynağı (
fieldSources)MANUALolur. - Emekli cihaz güncellenemez:
409 physical_pos.device.retired.
Yanıt: { "device": { … } }.
Mağazaya ya da kasaya atama
POST /api/v1/physical-pos/devices/{deviceId}/assignment
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
rowVersion | integer | Evet | Cihazın son okuduğunuz rowVersion değeri. |
storeId | string (UUID) | Evet | Hedef mağaza. |
registerId | string (UUID) | null | Hayır | Hedef mağazanın bir kasası; yoksa cihaz mağazaya kasasız atanır. |
reasonCode | string | Evet | Cihazın açık ataması yoksa INITIAL_SETUP, CORRECTION, OTHER; varsa (taşıma) RELOCATION, REGISTER_CHANGE, DEVICE_REPLACEMENT, CORRECTION, OTHER. |
Cihazın açık ataması varsa kapanır ve yenisi açılır; atama geçmişi korunur.
source lunixi-sign.sh
REQ_PATH="/api/v1/physical-pos/devices/00000000-0000-0000-0000-000000000401/assignment"
BODY='{"rowVersion":1,"storeId":"00000000-0000-0000-0000-000000000102","reasonCode":"RELOCATION"}'
lunixi_sign POST "$REQ_PATH" "$BODY"
curl -X POST "https://api-gateway.lunixi.com$REQ_PATH" \
-H "Content-Type: application/json" \
-H "X-Key-Id: $LUNIXI_KEY_ID" \
-H "X-Date: $DATE" \
-H "X-Nonce: $NONCE" \
-H "Digest: $DIGEST" \
-H "X-Signature: $SIGNATURE" \
--data-raw "$BODY"Yanıt (200): { "device": { … }, "assignment": { … }, "previousAssignmentId": "…" }. assignment yeni atamadır (atama nesnesi); previousAssignmentId kapanan atamanın kimliği, ilk atamada null.
| Engel | Hata |
|---|---|
| Mağaza yok | 404 physical_pos.store.not_found |
| Kasa yok ya da bu mağazanın değil | 404 physical_pos.register.not_found |
| Mağaza ya da kasa arşivli | 409 physical_pos.store.archived / 409 physical_pos.register.archived |
| Cihaz zaten aynı mağaza ve kasada | 409 physical_pos.device.already_assigned |
| Cihaz emekli | 409 physical_pos.device.retired |
Depoya alma
POST /api/v1/physical-pos/devices/{deviceId}/assignment/close · Idempotency-Key zorunlu
Cihazın açık atamasını kapatır; cihaz mağazasız kalır (store ve register null). Cihazın terminal bağı değişmez. Cihazı silmeden mağazadan ayırmanın yoludur; ör. arşivlemek istediğiniz mağazadaki cihazlar için.
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
rowVersion | integer | Evet | Cihazın son okuduğunuz rowVersion değeri. |
reasonCode | string | Evet | STORE_CLOSED, TEMPORARILY_CLOSED, MOVED_TO_STORAGE, AWAITING_RELOCATION, CORRECTION, OTHER. |
Yanıt (200): { "device": { … }, "closedAssignment": { … }, "replayed": false }. Aynı Idempotency-Key ve aynı gövdeyle tekrar replayed: true döner. Açık ataması olmayan cihaz 409 physical_pos.device.not_assigned alır.
Emekliye ayırma
POST /api/v1/physical-pos/devices/{deviceId}/retire · Idempotency-Key zorunlu
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
rowVersion | integer | Evet | Cihazın son okuduğunuz rowVersion değeri. |
reasonCode | string | Evet | DEVICE_FAULT, DEVICE_LOST, DEVICE_STOLEN, END_OF_LIFE, RETURNED_TO_VENDOR, REPLACED, CREATED_IN_ERROR, DUPLICATE_RECORD, OTHER. |
Emeklilik geri alınamaz. Aynı işlemde cihazın açık ataması ve terminal bağı kapanır. Bağı kapanan terminalin rowVersion değeri artar ve terminalin değişiklik geçmişine physical_pos.audit.logical_terminal_device_unlinked olayı yazılır. Emekli cihaz güncellenemez, atanamaz ve terminale bağlanamaz.
Yanıt (200): { "device": { … }, "replayed": false }; lifecycleStatus: "RETIRED", retiredAt dolu. Cihazın etkin kimlik anahtarı ya da süresi dolmamış aktivasyon kodu varsa 409 physical_pos.device.identity_active (details.reason: active_key ya da open_activation_code).
Atama geçmişi
GET /api/v1/physical-pos/devices/{deviceId}/assignments — limit ve cursor alır, en yeni atama önce.
| Alan | Tip | Açıklama |
|---|---|---|
id | string (UUID) | Atamanın kimliği. |
deviceId | string (UUID) | Cihaz. |
store | object | null | { id, code, name } |
register | object | null | { id, code, name } |
validFrom | string | Atamanın başladığı zaman. |
validTo | string | null | Atamanın kapandığı zaman; açık atamada null. |
reasonCode | string | Atamayı açan işlemin gerekçesi. |
createdByType | string | USER, API_KEY, OPERATOR ya da SYSTEM. |
createdById | string | Atamayı açanın kimliği; platform tarafı işlemlerde operator. |
createdAt | string | Kaydın oluşturulma zamanı. |
Değişiklik geçmişi
GET /api/v1/physical-pos/devices/{deviceId}/audit — limit ve cursor alır; yanıt biçimi mağaza geçmişiyle aynıdır.
Cihaz olayları: physical_pos.audit.device_created, …device_updated, …device_assigned, …device_unassigned, …device_lifecycle_changed, …device_retired, …device_ownership_verified; cihaz bağı değiştiğinde …device_terminal_linked, …device_terminal_unlinked. Platform tarafı işlemlerin olaylarında actorId operator, requestId null döner.
Hatalar
| HTTP | code | Ne zaman |
|---|---|---|
400 | physical_pos.idempotency.key_required / physical_pos.idempotency.key_invalid | Kaydetme, depoya alma ya da emeklilikte Idempotency-Key yok ya da biçim dışı. |
400 | physical_pos.input.filter_invalid | Liste süzgeci geçersiz. |
400 | physical_pos.input.serial_invalid | Seri numarası üreticinin biçimine uymuyor. |
400 | physical_pos.input.code_invalid | integrationChannel ya da appMode küme dışında. |
400 | physical_pos.input.channel_variant_invalid | channelVariant biçim dışı. |
400 | physical_pos.input.text_invalid / physical_pos.input.ref_invalid | displayName ya da externalRef kurala uymuyor. |
400 | physical_pos.input.reason_code_invalid | reasonCode listede yok ya da işleme uymuyor. |
400 | physical_pos.input.empty_patch | Boş güncelleme. |
400 | physical_pos.device.vendor_unknown | Üretici katalogda yok ya da devre dışı. |
400 | physical_pos.device.model_vendor_mismatch | Model başka üreticinin. |
400 | physical_pos.device.app_mode_invalid | appMode bu kanalda kullanılamaz. |
403 | physical_pos.environment.test_key_read_only | Yazma isteği test anahtarıyla yapıldı. |
404 | physical_pos.device.not_found | Cihaz yok, size ait değil ya da diğer ortamda. |
404 | physical_pos.device_model.not_found | Model yok. |
404 | physical_pos.store.not_found / physical_pos.register.not_found | Hedef mağaza ya da kasa yok. |
409 | physical_pos.device.serial_taken | Seri numarası kullanımda. |
409 | physical_pos.device.external_ref_taken | externalRef kullanımda. |
409 | physical_pos.device.model_deprecated | Model kullanımdan kalkmış. |
409 | physical_pos.store.archived / physical_pos.register.archived | Hedef mağaza ya da kasa arşivli. |
409 | physical_pos.device.already_assigned | Cihaz zaten bu mağaza ve kasada. |
409 | physical_pos.device.not_assigned | Depoya alınacak açık atama yok. |
409 | physical_pos.device.identity_active | Etkin kimliği olan cihaz emekliye ayrılmak istendi. |
409 | physical_pos.device.retired | Emekli cihaz değiştirilmek istendi. |
409 | physical_pos.version_conflict | rowVersion güncel değil. |
409 | physical_pos.idempotency_mismatch | Aynı Idempotency-Key farklı bir istekle kullanılmış. |
429 | RATE_LIMITED | Cihaz yazma sınırı aşıldı. → Oran sınırı |
503 | physical_pos.service.busy | Kayıt başka bir işlemle meşgul; aynı istekle yeniden deneyin. |
Bütün kodlar: Hata Kodları.