Field reference
Every field on every Point of Sale form: label in English and Arabic, type, whether it is required, its limits, a valid example and what the system refuses.
On this page (30)
Till - Open registerTill - WorkspaceTill - SellTill - Pop-upsTill - PaymentTill - Cash in / outTill - ReturnTill - Close sessionTill bill (sent to the server)Session open (API)Session close (API)Approve close (API)Cash movement (API)Switch cashier (API)Void a bill (API)Manager override decision (API)Promotion recordCoupon recordLoyalty programIssue gift card / voucher / store creditGift card managementRegister (API)POS profile (set by setup call)Payment method (set by setup call)Reason code (set by setup call)Device enrolment (API)Upload (API /pos/sync)Card receipt print (API)Card capture (API)Provider settlement (API)
Till - Open register
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Opening float | الرصيد الافتتاحي | Number (AED) | Yes | Not negative; if the profile opens on a fixed float it must equal that float; ignored when a denomination count is entered (the count becomes the float) | Profile float (RETAIL: 0.00) | 500.00 | -5 -> 'Opening float cannot be negative.'; profile fixed at 500, enter 400 -> 'This register opens on a fixed float of 500.00.' |
| Denomination count (one box per note/coin) | العدد | Whole numbers per face value | No | Faces 1000, 500, 200, 100, 50, 20, 10, 5, 1, 0.5, 0.25; Counted opening cash = sum of face x count; if both a count and a float are sent they must agree | Empty | 500 x 1, 100 x 5 | Count 1,300.00 but float typed 1,350.00 (API) -> 'The denomination count comes to 1300.00, not 1350.00.' |
| Counted opening cash | النقد الافتتاحي المعدود | Number (calculated) | No | Read only: sum of the denomination table | 0.00 | 1,000.00 | |
| Business date (sent automatically) | تاريخ العمل | Date | No | Taken from the browser clock as a UTC date; API default is the server date | Today | 2026-10-02 | Bad date via API -> server error (ISO date expected) |
Till - Workspace
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Register card: Open session / Continue session | فتح جلسة / متابعة الجلسة | Button | No | Shows Continue when the register has a live session (open, closing, counted, variance review, approval pending) | POS01 | ||
| Secure this device | تأمين هذا الجهاز | Button | No | Makes an Ed25519 key in the browser and enrols it for the register; afterwards every queued item is signed and an unsigned browser can no longer open the register | POS01 on the test tablet | Without pos.sync.manage -> permission refused (see Security) |
Till - Sell
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Scan / code box | المسح | Text | No | Matches in this order: product barcode, packaging barcode (price x ratio), PLU, checked EAN-13 scale barcode (weight or price embedded); '3*CODE' sets quantity 3; Enter adds the line | Empty | 3*8901234567890 | Unknown text -> toast 'Not found: <text>' |
| Category tabs | الكل | Tabs | No | All plus each product category present in the cached product list | All | Beverages | |
| Quantity (F3 number pad) | الكمية | Number | Yes | Applies to the selected line; negative becomes 0; a line with quantity 0 is refused by the server | 1 | 3 | No line selected -> toast 'Select a line first'; quantity 0 sent -> 'A line needs a quantity.' |
| Price (number pad) | السعر | Number (AED) | Conditional | Only when the profile has Allow price override; otherwise a dialog says overrides are not allowed. No manager approval or reason is asked | Product price | 9.50 | Price -1 via API -> 'A price cannot be negative.' |
| Line discount (F4 number pad) | خصم السطر | Number (AED amount, not %) | No | Amount off the selected line; may not exceed the line; above the profile line limit (% of line gross) the sale needs a manager approval | 0.00 | 2.00 | More than the line -> 'A discount cannot exceed the line.' |
| Bill discount (number pad) | خصم الفاتورة | Number (AED amount) | No | Amount off the whole bill; may not exceed net + VAT; above the profile bill limit the sale needs approval | 0.00 | 5.00 | More than the bill -> 'A bill discount cannot exceed the bill.' |
| Customer search (F2) | الاسم أو الرمز أو الهاتف | Text (2+ letters) | No | Searches customers online only (min 2 characters); offline it finds nobody; Walk-in customer always available | Walk-in customer | Test Customer LLC | |
| Hold label (F6) | فاتورة معلّقة | Text (max 80) | No | Name of the held bill; default is the customer name or 'Held bill'; stock is reserved for 30 minutes unless the profile setting says otherwise | Held bill | Table 4 | Empty cart -> toast 'Nothing to hold' |
Till - Pop-ups
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Suspended bill (F7 list) | الفواتير المعلّقة | List | No | Held bills of the company; recall puts the cart back; another till can recall after sync | Table 4 | ||
| Coupon code | رمز القسيمة | Text | Yes | Upper-cased; online sale only (not on returns, not offline); one coupon per bill | WELCOME10 | Offline -> 'Coupons require an online check'; unknown -> 'Coupon is not valid.' | |
| Points to redeem | النقاط | Number | Yes | Needs a customer and a connection; at least the programme minimum; not more than the balance | 500 | Too few -> 'Enter enough points for the minimum redemption.'; too many -> 'Loyalty points balance is insufficient.' | |
| Protected token (gift card / voucher / store credit) | الرمز المحمي | Text | Yes | The full token printed once at issue; only a hash is stored; must belong to the chosen payment method; online only | GC-0123456789ABCDEF01234567 | Wrong card -> 'Stored-value token is not valid.'; expired -> 'This stored-value instrument has expired.'; short balance -> 'Stored-value balance is insufficient.' | |
| Product search / price check (F1 / F5) | الرمز أو الباركود أو الاسم | Text | No | Matches barcode, PLU, packaging barcode, code or name; first 25 hits | milk | Nothing found -> 'Nothing matches.' |
Till - Payment
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Tender button (one per payment method) | وسائل الدفع | Button | No | Takes the whole balance on that method; online-only methods are hidden when offline; gift card, voucher and store credit ask for the token first | Card | ||
| Quick cash amounts | المبلغ | Buttons (balance, 50, 100, 200, 500) | No | Cash tender of that amount; an amount above the balance makes change | 100.00 | ||
| Complete sale | إتمام البيع | Button | No | Enabled only when nothing is still owed | Disabled |
Till - Cash in / out
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Movement | إدخال نقد / إخراج نقد / إيداع في الخزنة | Buttons | Yes | Cash in, Cash out, Safe drop | Cash in | Safe drop | kind 'steal' via API -> 'steal is not a cash movement.' |
| Amount | المبلغ | Number (AED) | Yes | Greater than zero; an out or drop cannot exceed what the drawer should hold | 700.00 | 0 -> 'Enter an amount greater than nothing.'; 1,200 out of a 1,100.50 drawer -> 'The drawer holds 1100.50, so 1200.00 cannot be taken out.' | |
| Reason | السبب | Text (max 300) | No | Free text on the till | Bank deposit |
Till - Return
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Receipt number | رقم الفاتورة | Text | Yes | Receipt number, bill id or bill UUID of the original sale (placeholder POS01-20260921-000001) | POS01-20261002-000007 | Unknown -> toast 'No bill <number>' | |
| Return these | إرجاع هذه | Button | No | Puts every remaining line back in the cart as a return; nothing left -> 'Nothing left to return' |
Till - Close session
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Expected cash | النقد المتوقع | Number (read only) | No | Float + cash sales (less change) + cash in - cash out - drops. Hidden (blind close) while the session is open | Hidden if blind | 1,100.50 | |
| Denomination count (closing) | العدد | Whole numbers per face | No | Same table as opening; when used it overrides the typed counted cash | Empty | 500 x 2, 100 x 1 | |
| Counted cash | النقد المعدود | Number (AED) | Yes | Not negative | 1,098.00 | -1 -> 'Counted cash cannot be negative.'; typed total differs from the table -> 'The count comes to 1098.00, not 1100.00.' | |
| Reason, if the count differs | السبب عند وجود فرق | Text (max 300) | Conditional | Required when the difference is above the profile tolerance (RETAIL: 5.00) | Short change given to customer | Variance -10.50 with no reason -> 'The count is -10.50 against what was expected. Give a reason before closing.' |
Till bill (sent to the server)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| uuid | المعرف | Text (till-made UUID) | Yes | Unique per company; a second send of the same uuid returns the first bill and posts nothing | Made on the till | 7c1e...-uuid | Empty -> 'A bill needs the identifier the till gave it.' |
| number (receipt number) | رقم الفاتورة | Text | No | Till-made POS01-YYYYMMDD-000123 (register code, business date, device counter); server makes one only if none sent | Till counter | POS01-20261002-000008 | |
| kind | النوع | Select | Yes | sale, return or exchange | sale | return | 'refund' -> 'refund is not a kind of bill.' |
| origin | الفاتورة الأصلية | Text | Conditional | For a linked return: the original bill; each line then names origin_line | POS01-20261002-000007 | Unknown bill -> 'Original sale was not found.'; line from another bill -> 'Choose a line from the original sale.'; too many -> 'Return quantity exceeds what remains on the original sale.' | |
| lines | السطور | List | Yes | 1 to 500 lines | 1 line | None -> 'A bill needs at least one line.'; 501 -> 'A bill takes at most 500 lines.' | |
| total (till's total) | الإجمالي | Number | No | Checked against the server's total within 0.01 | Till total | 30.25 | 30.10 when server says 30.25 -> 'The till says 30.10 and these lines come to 30.25. The bill was not recorded.' |
| payments | المدفوعات | List | Yes | At least one; method code, amount, tendered, change, reference | CASH 50.00 | None -> 'A completed bill needs at least one payment.'; short -> 'The bill is 30.25 and the payments come to 20.00.' | |
| payments.method | وسيلة الدفع | Text (code) | Yes | Must exist and be active; online-only methods refused on an offline bill | CARD | 'XYZ' -> 'XYZ is not a payment method here.'; inactive -> '<name> is not in use.'; offline QR -> 'QR / wallet must be authorized online.' | |
| payments.reference | المرجع | Text (max 80) | Conditional | Required for gift card, voucher and store credit methods | GC-token | Missing -> 'Gift card needs a reference.' | |
| taken_offline | دون اتصال | Yes/No | No | Marks an offline bill; refused on a fiscal-required profile and when the profile says online only | No | Yes | Fiscal profile -> 'This fiscal profile requires online issuance before the receipt can be finalized.'; online-only profile -> 'This register is not allowed to sell offline.' |
| approval | الموافقة | Text (approval id) | Conditional | Needed when a discount is above the profile limits; the till screens never send it | (approval id) | Without it -> 409 'An independent manager must approve this discount.' | |
| cashier | الكاشير | Number (user id) | No | Defaults to the signed-in user; the server does not check it | Signed-in user | 42 |
Session open (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| register | نقطة البيع | Text (id) | Yes | A register of this company that is not in maintenance or disabled; only one live session per register | POS01 | Live session exists -> 'POS01 already has session S-10052 open.'; maintenance -> 'POS01 is maintenance and cannot be opened.' | |
| note | ملاحظة | Text | No | Opening note | Morning shift |
Session close (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| note | ملاحظة | Text (max 300) | No | Closing note | Counted twice |
Approve close (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| granted / reason | اعتماد / رفض | Yes-No + text | Yes | Only for a session waiting for approval; the person who counted cannot approve; a refusal sends it back to variance review | granted = true | Same user -> 'A close is approved by somebody other than the person who counted it.'; wrong state -> 'This session is not waiting for approval.' |
Cash movement (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| approver | المعتمد | Number (user id) | No | Recorded on the movement; not checked for authority | 7 | ||
| uuid | المعرف | Text | No | A repeat of the same uuid returns the first movement and does not move cash twice | Made on the till | 2f0c...-uuid |
Switch cashier (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| user / method | المستخدم | Number + text | No | The incoming cashier must be a company member; no PIN or password is checked | Caller | 12 / pin | Closed session -> 'The session is not open.' |
Void a bill (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| reason | السبب | Text | Yes | Written reason | Scanned twice | Empty -> 'A void needs a reason.' | |
| approver | المعتمد | Number (user id) | Yes | A manager's user id; any id is accepted | 7 | Empty -> 'A void after the sale needs a manager's approval.'; already void -> 'This bill is already void.'; coupon/loyalty/gift sale -> 'Coupon, loyalty and stored-value sales must be reversed with an original-sale return, not a void.' |
Manager override decision (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| granted / reason | القرار | Yes-No + text (max 300) | Yes | Needs pos.override; the requester cannot decide their own request; one decision per request | granted = true | Self -> 'The requester cannot approve their own override.'; twice -> 'This approval already has a decision.' |
Promotion record
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Code | الرمز | Text | Yes | Upper-cased; unique per company | MILK3 | Empty -> 'A promotion needs a code.'; duplicate -> 'Promotion code already exists.' | |
| Name | الاسم | Text (max 120) | No | Defaults to the code | Code | 3 milk 10 % off | |
| Discount type | نوع الخصم | Select | Yes | Percentage, Fixed amount, Special price | Percentage | Percentage | Other -> 'Choose percentage, fixed discount, or special price.' |
| Value | القيمة | Number | Yes | More than 0; percentage not over 100. Special price = price per unit | 10 | 0 or 150 % -> 'Enter a valid promotion value.' | |
| Minimum basket | الحد الأدنى للسلة | Number (AED) | No | Basket of lines at list price must reach it | 0 | 0 | |
| Starts at / Ends at | يبدأ في / ينتهي في | Date-time | No | Start not after end; bad text refused | Empty | 2026-10-01 00:00 / 2026-10-31 23:59 | Start after end -> 'The promotion end must be after its start.'; garbage -> 'Enter a valid date and time.' |
| Product ID (optional) | معرف المنتج اختياري | Text (id) | No | A product of this company; empty = all products | Empty | (product id) | Other company's id -> 'Choose a product from this company.' |
| Category ID (optional) | معرف الفئة اختياري | Text (id) | No | A product category of this company | Empty | (category id) | -> 'Choose a product category from this company.' |
| Minimum quantity | الحد الأدنى للكمية | Number | No | More than 0 | 1 | 3 | 0 -> 'Minimum quantity must be greater than zero.' |
| Priority | الأولوية | Whole number | No | Higher first; ties by code | 0 | 10 | |
| Start time / End time | وقت البداية / وقت النهاية | Time HH:MM | No | Happy hour window, compared on the sale time as text | Empty | 16:00 / 18:00 | |
| Weekdays (API only, no box on screen) | الأيام | List of 0-6 (Monday = 0) | No | Numbers 0 to 6 | All days | [4, 5] | 7 -> 'Promotion weekdays must be numbers from 0 to 6.' |
| Stackable | قابل للتجميع | Tick box | No | Off: the first matching rule by priority wins; On: next rules also apply to what is left | Off | Off | |
| Allowed offline | مسموح دون اتصال | Tick box | No | Off: the rule is ignored for offline bills | On | On | |
| Active | نشط | Tick box | No | Inactive rules never apply | On | On |
Coupon record
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Code | الرمز | Text | Yes | Upper-cased; unique | WELCOME10 | Empty -> 'A coupon needs a code.'; duplicate -> 'Coupon code already exists.' | |
| Name | الاسم | Text (max 120) | No | Defaults to the code | Code | Welcome 10 % | |
| Discount type | نوع الخصم | Select | Yes | Percentage or Fixed amount (no special price) | Percentage | Percentage | Other -> 'Choose percentage or fixed discount.' |
| Value | القيمة | Number | Yes | More than 0; percentage not over 100 | 10 | 0 -> 'Enter a valid coupon value.' | |
| Minimum basket | الحد الأدنى للسلة | Number (AED) | No | Payable (after bill discount) must reach it | 0 | 50 | Basket 40 -> 'Coupon needs a basket of at least 50.00.' |
| Starts at / Ends at | يبدأ في / ينتهي في | Date-time | No | Start not after end. Ends at follows the company field rule (Hidden / Optional / Required / Read only) | Empty | 2026-10-31 23:59 | End before start -> 'The coupon end must be after its start.'; outside dates at the till -> 'Coupon is outside its validity period.' |
| Maximum redemptions (0 = unlimited) | الحد الأقصى للاستخدام | Whole number | No | Not negative | 1 | 100 | -1 -> 'Redemption limits cannot be negative.'; used up -> 'Coupon has reached its redemption limit.' |
| Per-customer limit (0 = none) | حد العميل | Whole number | No | Not negative; when set the sale needs a customer | 0 | 1 | No customer -> 'This coupon requires a customer.'; used -> 'This customer has already used the coupon.' |
| Redeemed | مستخدم | Whole number | No | Counter; the box is editable on screen but the server keeps its own count | 0 | 0 | |
| Allowed offline | مسموح دون اتصال | Tick box (locked) | No | Locked off for coupons; every offline redemption is refused | Off | Off | Offline coupon -> 'Coupons must be checked online.' |
| Active | نشط | Tick box | No | Inactive coupons are 'not valid' | On | On |
Loyalty program
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Code | الرمز | Text | Yes | Upper-cased; unique | STD | Empty -> 'A loyalty program needs a code.'; duplicate -> 'Loyalty program code already exists.' | |
| name | الاسم | Text (max 120) | No | Defaults to the code | Code | Standard | |
| earn points per currency | نقاط لكل عملة | Number | No | Not negative | 1 | 1 | -1 -> 'Loyalty rates and limits cannot be negative.' |
| redeem currency per point | قيمة النقطة | Number (AED) | No | Not negative; 0 means redemption is not configured | 0.01 | 0.01 | 0 at the till -> 'No active loyalty redemption program is configured.' |
| minimum redeem points | الحد الأدنى للنقاط | Number | No | Not negative | 100 | 100 | |
| points expire days | أيام انتهاء النقاط | Whole number | No | 0 = never; else points expire that many days after earning | 0 | 365 | |
| Active | نشط | Tick box | No | Saving an active programme switches every other programme off (one active at a time) | On | On |
Issue gift card / voucher / store credit
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Opening value | القيمة الافتتاحية | Number (AED) | No | Not negative; 0 allowed (no liability posted) | Empty | 100.00 | -5 -> 'Opening value cannot be negative.' |
| Customer ID | معرف العميل | Text (id) | Conditional | Store credit only: required; a customer of this company | Empty | (customer id) | Missing -> 'Store credit belongs to a customer.'; other company -> 'Choose a customer from this company.' |
| Expires at | ينتهي في | Date-time | No | Follows the company field rule 'Gift card and voucher expiry' | Empty | 2027-10-01 00:00 | Garbage -> 'Enter a valid expiry date and time.' |
Gift card management
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Recharge amount | مبلغ إعادة الشحن | Number (AED) | Yes | Greater than 0, active instrument only | 50.00 | -> 'Only an active instrument can receive a positive recharge.' |
Register (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Code | الرمز | Text (max 20) | Yes | Upper-cased; unique per company | POS01 | Empty -> 'A register needs a code.'; duplicate -> 'A register with this code already exists.' | |
| Name / Arabic name | الاسم | Text (max 120) | No | Name defaults to the code | Code | Front counter | |
| Branch / Warehouse / Profile | الفرع / المستودع / الملف | Ids | No | Profile defaults to the oldest active profile; a warehouse is needed to sell stocked goods | Oldest profile | (ids) | No warehouse -> 'Set a warehouse on this POS register before selling stocked goods.' |
| State | الحالة | Select | No | closed, opening, open, busy, offline, syncing, closing, close_pending_approval, closed_pending_sync, maintenance, disabled | closed | maintenance | 'sleeping' -> 'sleeping is not a register state.' |
| Active | نشط | Yes/No | No | Inactive registers are left out of the device monitor and the dashboard count | Yes | Yes |
POS profile (set by setup call)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Prices include tax | الأسعار شاملة الضريبة | Yes/No | No | Yes: the shelf price is the price paid, net = price / 1.05 | RETAIL: Yes | Yes | |
| Max line discount % | أقصى خصم للسطر | Number 0-100 | No | Above it (manual discount / line gross) approval is needed | RETAIL: 10 | 10 | |
| Max bill discount % | أقصى خصم للفاتورة | Number 0-100 | No | Above it (bill discount / gross) approval is needed | RETAIL: 5 | 5 | |
| Allow price override | السماح بتعديل السعر | Yes/No | No | Turns the Price button on | No | No | |
| Cash rounding | تقريب النقد | Number (AED step) | No | 0 = none; 0.05 rounds the payable to the nearest 5 fils (half up) | 0 | 0.05 | |
| Opening mode / Opening float | وضع الافتتاح | Select + number | No | fixed, carry_forward, cashier, blind, none; only 'fixed' is enforced | cashier | fixed 500.00 | |
| Blind close | إغلاق أعمى | Yes/No | No | Hides expected cash on the closing screen and in the closing route | RETAIL: Yes | Yes | |
| Variance tolerance | التسامح | Number (AED) | No | Differences up to this need no reason | RETAIL: 5.00 | 5.00 | |
| Variance needs approval above | الفرق الذي يحتاج اعتماداً | Number (AED) | No | 0 = never; above it the session waits for a second person | RETAIL: 50.00 | 50.00 | |
| Safe drop threshold / Max drawer cash | حد الإيداع | Number (AED) | No | Stored and sent to the till; nothing in the code warns or blocks on them | RETAIL: 5000 / 10000 | 5000 | |
| Offline selling / returns / close | البيع دون اتصال | Select | No | online_only, offline_allowed, offline_allowed_with_limit, offline_manager_approval; only 'online_only' is enforced | allowed / allowed with limit / allowed | offline_allowed | |
| Offline max minutes | أقصى مدة دون اتصال | Whole number | No | 0 = no limit; measured from the server's last contact with the register | 0 | 60 | Over the limit -> 'This register has been offline for more than 60 minutes. Restore the connection before selling again.' |
| Offline max amount | أقصى مبلغ دون اتصال | Number (AED) | No | 0 = no limit; counts unsynced offline bills plus the new one | 0 | 2,000.00 | -> 'This sale would take the register to 2010.00 offline, which is its limit of 2000.00. Sync before selling again.' |
| Settings: hold_reservation_minutes | مدة حجز الفاتورة المعلقة | Whole number (minutes) | No | At least 1 | 30 | 30 | 'abc' -> 'The hold reservation duration must be whole minutes.' |
| Settings: minimum_shelf_life_days | الحد الأدنى لعمر الصلاحية | Whole number (days) | No | Lots with fewer days left are refused | 0 | 7 | 'abc' -> 'The POS minimum shelf-life setting must be a whole number of days.' |
| Settings: fiscal_required / fiscal_adapter | إصدار مالي مطلوب | Yes/No + text | No | When on, bills are sent online and handed to the registered fiscal adapter; no adapter -> exception | Off | Off |
Payment method (set by setup call)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Code / Name / Arabic name | الرمز / الاسم | Text | Yes | Seeded: CASH, CARD, QR, GIFT, VOUCHER, CREDIT, ACCOUNT | CARD | ||
| Kind | النوع | Select | Yes | cash, card, qr, gift_card, voucher, store_credit, account | card | ||
| Affects drawer | يؤثر على الدرج | Yes/No | No | Only CASH: only drawer tenders count in expected cash | CASH only | Yes | |
| Allow change / refund / overpayment | السماح بالباقي | Yes/No | No | Only CASH allows change; a tender with change on a no-change method is refused | CASH: change yes | Yes | Change on card -> 'Card gives no change.' |
| Offline rule | قاعدة العمل دون اتصال | Select | No | CASH allowed, CARD allowed with limit, the other five online only | see rule | online_only | |
| Min / Max amount | الحد الأدنى / الأقصى | Number (AED) | No | Max 0 = none; a tender above max is refused (min is not enforced) | 0 | 5,000.00 | 6,000 on a 5,000 max -> 'Card takes at most 5000.00.' |
Reason code (set by setup call)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| Code / Name / Applies to / Mandatory / Needs approval | الرمز / الاسم / ينطبق على | Seeded list of 14 | No | PRICE, DISC, VOID, CANCEL, RET, NORCPT, CASHIN, CASHOUT, DROP, DRAWER, REPRINT, VAR, WEIGHT, OFFLINE; listed but not asked for at the till | CASHOUT |
Device enrolment (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| register / device / label / public_key | نقطة البيع / الجهاز / الاسم / المفتاح | Text | Yes | Device id max 64; key is a base64 Ed25519 public key of 32 bytes; same key and register again is a no-op; a different key needs a revoke first | POS-device-1 | No register -> 'Choose the register this device belongs to.'; no device -> 'Give the device a stable identifier.'; bad key -> 'The Ed25519 public key is not valid.'; active with other key -> 'Revoke the active device before changing its key or register.' |
Upload (API /pos/sync)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| items | العناصر | List (max 200) | Yes | Each item: uuid, entity (session_open, cash_movement, hold, sale, return, hold_recall, approval, session_close), payload; signed registers add sequence, payload_hash, signature | 3 items | 201 items -> 'Send at most 200 items at a time.'; entity 'refund' -> 'refund is not something a till uploads.'; no uuid -> 'The item carries no identifier.' |
Card receipt print (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| idempotency_key / state / reason | مفتاح التكرار | Text (max 80) / printed or failed / text | Yes | Only for a fiscal receipt that was accepted; first print is the original, later ones are reprints | print-0001 | No key -> 'A print attempt needs an idempotency key.'; not accepted -> 'The receipt is not legally issued and cannot be printed as compliant.' |
Card capture (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| payment intent | نية الدفع | uuid, checkout_key, provider, amount | Yes | Never send card number, CVV, PIN or track data; provider must be configured; same checkout with other amount is refused | 100.00 | PAN field -> 'Never send or store PAN, CVV, PIN or card track data.'; unknown provider -> 'Payment provider acme is not configured.' |
Provider settlement (API)
| Field | Arabic label | Type | Required | Rules and limits | Default | Example | Refused when |
|---|---|---|---|---|---|---|---|
| batch / transactions / deposit / fees / expected | الدفعة | Text + lists + numbers | Yes | Captures less refunds must equal deposit + fees; each reference once; same currency | capture 105, refund 5, deposit 98, fees 2 | Deposit 97 -> 'Bank deposit plus provider fees must equal captures less refunds.' |