EIS Bridge™ — trademark application pending · IPOPHL Class 42 · Ref EFPH202600003850268

Standard Sale Object

The open integration spec for the EIS Bridge Vendor API — vendor-neutral, versioned, and validated by JSON Schema. Wrap this object in { "transaction": { ... } } when calling POST /transactions. Machine-readable schema: sale-object.schema.json.

Full example

{
  "transaction_id": "POS-123456",
  "transaction_datetime": "2026-06-07T14:23:55+08:00",
  "merchant_code": "MRC123",
  "branch_code": "BR001",
  "pos_device_id": "POS01",
  "invoice_type": "OR",
  "currency": "PHP",
  "customer": {
    "name": "Juan Dela Cruz",
    "tin": "123-456-789-000",
    "address": "Quezon City",
    "email": "juan@example.com",
    "mobile": "09171234567"
  },
  "items": [
    {
      "line_no": 1,
      "sku": "SKU001",
      "barcode": "1234567890123",
      "description": "Product A",
      "qty": 2,
      "unit": "PCS",
      "unit_price": 100.0,
      "discount": 0.0,
      "vat_rate": 12.0,
      "vat_exempt": false,
      "zero_rated": false
    }
  ],
  "totals": {
    "gross": 200.0,
    "discount": 0.0,
    "vatable_sales": 178.57,
    "vat_amount": 21.43,
    "vat_exempt_sales": 0.0,
    "zero_rated_sales": 0.0,
    "service_charge": 0.0,
    "net": 200.0
  },
  "payment": {
    "method": "CASH",
    "amount": 200.0,
    "details": {
      "card_type": null,
      "card_last4": null,
      "reference_no": null,
      "wallet_provider": null
    }
  },
  "references": {
    "original_transaction_id": null,
    "return_or_void": false,
    "return_reason": null
  },
  "metadata": {
    "pos_version": "1.0.0",
    "cashier_id": "C001",
    "cashier_name": "Maria Santos"
  }
}

Field reference

Field Type Required Description
transaction_id string Required Unique per merchant + branch + device. Used for idempotency.
transaction_datetime string (date-time) Required ISO 8601 datetime with timezone offset (e.g. 2026-06-07T14:23:55+08:00).
merchant_code string Required EIS Bridge merchant identifier assigned during onboarding.
branch_code string Required EIS Bridge branch identifier assigned during onboarding.
pos_device_id string Required EIS Bridge POS device identifier assigned during onboarding.
invoice_type string Required Invoice or receipt type (e.g. OR).
currency string Optional ISO 4217 currency code. Default: PHP.
customer object Optional Buyer details: name, tin, address, email, mobile.
items[] array Required Minimum 1 line item. Each requires sku, description, qty, unit_price.
items[].line_no integer Optional Line number (minimum 1).
items[].sku string Required Product SKU.
items[].barcode string Optional Product barcode.
items[].description string Required Line item description.
items[].qty number Required Quantity; must be > 0 (except return/refund scenarios).
items[].unit string Optional Unit of measure (e.g. PCS).
items[].unit_price number Required Unit price; minimum 0.
items[].discount number Optional Line discount; minimum 0.
items[].vat_rate number Optional VAT rate percentage; minimum 0.
items[].vat_exempt boolean Optional Whether line is VAT-exempt.
items[].zero_rated boolean Optional Whether line is zero-rated.
totals object Required Transaction totals. Requires gross and net.
totals.gross number Required Gross total; minimum 0.
totals.net number Required Net total; minimum 0.
totals.discount number Optional Total discount; minimum 0.
totals.vatable_sales number Optional VATable sales amount.
totals.vat_amount number Optional VAT amount.
payment object Required Payment details. Requires method and amount.
payment.method string Required Payment method: CASH, CARD, E-WALLET, SPLIT, etc.
payment.amount number Required Payment amount; minimum 0.
payment.details object Optional Card/wallet details: card_type, card_last4, reference_no, wallet_provider.
references object Optional Void/return linkage: original_transaction_id, return_or_void, return_reason.
metadata object Optional POS metadata: pos_version, cashier_id, cashier_name.

Validation rules

  • Date format: transaction_datetime must be ISO 8601 with timezone (e.g. 2026-06-07T14:23:55+08:00). Formats like 07/06/2026 14:23 are rejected.
  • Numeric fields: qty must be > 0; unit_price and totals must be ≥ 0.
  • Arrays: items must contain at least one entry.
  • Enums: invoice_type is typically OR (Official Receipt). payment.method accepts CASH, CARD, E-WALLET, SPLIT.
  • Email: customer.email must be a valid email when provided.
  • Additional properties: Unknown top-level fields are rejected (additionalProperties: false).

Idempotency & duplicates

transaction_id must be unique per merchant + branch + device combination. This prevents double-sending the same sale.

Identical resubmission

If the same transaction_id is sent again with identical data:

{
  "status": "duplicate",
  "transaction_id": "POS-123456",
  "bridge_transaction_id": "EB-20260607-000001",
  "message": "Transaction already processed."
}

Conflict (different data, same ID)

Re-submitting the same transaction_id with different items or totals returns HTTP 409 with error: "transaction_conflict".

Always generate transaction_id from your POS receipt/invoice number and scope it per merchant, branch, and device.