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

API Reference

The EIS Bridge Vendor API lets POS/ERP vendors send standardized sales data for BIR EIS mapping, signing, and transmission. All paths are relative to the base URL.

Base URLs

EnvironmentBase URL
Sandboxhttps://sandbox.eisbridge.com/v1
Productionhttps://api.eisbridge.com/v1

Sandbox access is provisioned on request during vendor onboarding. For local development, run the Laravel API with EIS_SANDBOX_MODE=true.

Content-Type: application/json · Encoding: UTF-8

Authentication

Each vendor receives a unique API key. Include it in every request:

Authorization: Bearer VENDOR_API_KEY_123
Content-Type: application/json

If the API key is missing or invalid:

{
  "error": "unauthorized",
  "message": "Invalid or missing API key."
}
HTTP CodeMeaning
401Unauthorized — invalid or missing API key

Endpoints

POST /transactions

Description: Submit a single sale or invoice to EIS Bridge for EIS processing.

Request URL

POST {BASE_URL}/transactions

Headers

HeaderValueRequired
AuthorizationBearer {VENDOR_API_KEY}Yes
Content-Typeapplication/jsonYes

Request body schema

{
  "transaction": { /* Standard Sale Object — see Data Model */ }
}

Sample request

POST /v1/transactions HTTP/1.1
Host: api.eisbridge.com
Authorization: Bearer VENDOR_API_KEY_123
Content-Type: application/json

{
  "transaction": {
    "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",
    "items": [
      {
        "sku": "SKU001",
        "description": "Product A",
        "qty": 1,
        "unit_price": 100
      }
    ],
    "totals": { "gross": 100, "net": 100 },
    "payment": { "method": "CASH", "amount": 100 }
  }
}

Sample response — success

{
  "status": "accepted",
  "transaction_id": "POS-123456",
  "bridge_transaction_id": "EB-20260607-000001",
  "merchant_code": "MRC123",
  "branch_code": "BR001",
  "pos_device_id": "POS01",
  "processing_status": "queued",
  "message": "Transaction accepted for EIS processing."
}

Sample response — validation error

{
  "status": "rejected",
  "error": "validation_error",
  "message": "Missing required field: totals.net",
  "fields": ["totals.net"]
}

Error codes

HTTPErrorDescription
201Transaction accepted for processing
400validation_errorMissing or invalid fields
401unauthorizedInvalid or missing API key
403No access to merchant/branch
409transaction_conflictDuplicate transaction_id with different data
409duplicateIdentical resubmission — returns existing bridge_transaction_id
500Internal server error

POST /transactions/batch

Description: Submit multiple transactions in a single API call.

Request URL

POST {BASE_URL}/transactions/batch

Headers

HeaderValueRequired
AuthorizationBearer {VENDOR_API_KEY}Yes
Content-Typeapplication/jsonYes

Request body schema

{
  "batch_id": "string",
  "transactions": [ /* Standard Sale Object[] */ ]
}

Sample request

{
  "batch_id": "BATCH-20260607-001",
  "transactions": [
    {
      "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",
      "items": [{ "sku": "SKU001", "description": "Product A", "qty": 1, "unit_price": 100 }],
      "totals": { "gross": 100, "net": 100 },
      "payment": { "method": "CASH", "amount": 100 }
    },
    {
      "transaction_id": "POS-123457",
      "transaction_datetime": "2026-06-07T14:24:10+08:00",
      "merchant_code": "MRC123",
      "branch_code": "BR001",
      "pos_device_id": "POS01",
      "invoice_type": "OR",
      "items": [{ "sku": "SKU002", "description": "Product B", "qty": 2, "unit_price": 50 }],
      "totals": { "gross": 100, "net": 100 },
      "payment": { "method": "CASH", "amount": 100 }
    }
  ]
}

Sample response

{
  "status": "accepted",
  "batch_id": "BATCH-20260607-001",
  "summary": {
    "total": 2,
    "accepted": 2,
    "rejected": 0
  },
  "results": [
    {
      "transaction_id": "POS-123456",
      "bridge_transaction_id": "EB-20260607-000001",
      "processing_status": "queued"
    },
    {
      "transaction_id": "POS-123457",
      "bridge_transaction_id": "EB-20260607-000002",
      "processing_status": "queued"
    }
  ]
}

Error codes

HTTPErrorDescription
201Batch accepted; check summary and per-item results
400validation_errorInvalid batch structure
401unauthorizedInvalid or missing API key
500Internal server error

Individual transactions within a batch may be rejected while others are accepted. Inspect each entry in results.

GET /transactions/{bridge_transaction_id}

Description: Retrieve EIS Bridge and BIR EIS processing status for a submitted transaction.

Request URL

GET {BASE_URL}/transactions/{bridge_transaction_id}

Headers

HeaderValueRequired
AuthorizationBearer {VENDOR_API_KEY}Yes

Request body schema

None.

Sample request

GET /v1/transactions/EB-20260607-000001 HTTP/1.1
Authorization: Bearer VENDOR_API_KEY_123

Sample response

{
  "bridge_transaction_id": "EB-20260607-000001",
  "transaction_id": "POS-123456",
  "merchant_code": "MRC123",
  "branch_code": "BR001",
  "pos_device_id": "POS01",
  "processing_status": "sent",
  "eis_status": "acknowledged",
  "eis_reference_no": "EIS-INV-20260607-123456",
  "last_update": "2026-06-07T14:25:10+08:00",
  "logs": [
    { "timestamp": "2026-06-07T14:24:00+08:00", "event": "queued" },
    { "timestamp": "2026-06-07T14:24:30+08:00", "event": "sent_to_eis" },
    { "timestamp": "2026-06-07T14:25:10+08:00", "event": "eis_acknowledged" }
  ]
}

Error codes

HTTPErrorDescription
200Status retrieved successfully
401unauthorizedInvalid or missing API key
404Transaction not found

GET /transactions

Description: List transactions filtered by date, merchant, branch, and status.

Request URL

GET {BASE_URL}/transactions?{query_params}

Headers

HeaderValueRequired
AuthorizationBearer {VENDOR_API_KEY}Yes

Query parameters

ParameterRequiredDescription
merchant_codeOptionalFilter by merchant
branch_codeOptionalFilter by branch
fromOptionalStart of date range (ISO datetime)
toOptionalEnd of date range (ISO datetime)
statusOptionalqueued | sent | acknowledged | rejected
pageOptionalPage number (default 1)
page_sizeOptionalResults per page (default 50)

Sample request

GET /v1/transactions?merchant_code=MRC123&from=2026-06-07T00:00:00+08:00&to=2026-06-07T23:59:59+08:00&page=1&page_size=50
Authorization: Bearer VENDOR_API_KEY_123

Sample response

{
  "page": 1,
  "page_size": 50,
  "total": 1,
  "transactions": [
    {
      "bridge_transaction_id": "EB-20260607-000001",
      "transaction_id": "POS-123456",
      "merchant_code": "MRC123",
      "branch_code": "BR001",
      "processing_status": "sent",
      "eis_status": "acknowledged"
    }
  ]
}

Error codes

HTTPErrorDescription
200List returned successfully
400validation_errorInvalid query parameters
401unauthorizedInvalid or missing API key

POST /vendors/webhook

Description: Configure a webhook URL to receive push notifications when BIR EIS responds. Webhooks are optional but recommended.

Request URL

POST {BASE_URL}/vendors/webhook

Headers

HeaderValueRequired
AuthorizationBearer {VENDOR_API_KEY}Yes
Content-Typeapplication/jsonYes

Request body schema

{
  "webhook_url": "string (HTTPS URL)",
  "secret": "string (shared secret for HMAC verification)"
}

Sample request

{
  "webhook_url": "https://posvendor.com/eisbridge/webhook",
  "secret": "your_webhook_secret"
}

Sample response

{
  "status": "configured",
  "webhook_url": "https://posvendor.com/eisbridge/webhook",
  "message": "Webhook URL and secret saved successfully."
}

Webhook payload (outbound to your endpoint)

{
  "event": "transaction.eis_acknowledged",
  "bridge_transaction_id": "EB-20260607-000001",
  "transaction_id": "POS-123456",
  "merchant_code": "MRC123",
  "branch_code": "BR001",
  "eis_status": "acknowledged",
  "eis_reference_no": "EIS-INV-20260607-123456",
  "timestamp": "2026-06-07T14:25:10+08:00",
  "signature": "HMAC_SHA256_SIGNATURE"
}

Verify the signature field using HMAC-SHA256 and your shared webhook secret.

Error codes

HTTPErrorDescription
200Webhook configured successfully
400validation_errorInvalid webhook URL
401unauthorizedInvalid or missing API key

Global error format

{
  "error": "validation_error",
  "message": "Missing required field: totals.net",
  "fields": ["totals.net"],
  "code": "EB-VAL-001"
}
HTTP CodeMeaning
200OK
201Created / Accepted
400Bad request (validation error)
401Unauthorized (invalid/missing API key)
403Forbidden (no access to merchant/branch)
404Not found
409Conflict (duplicate transaction_id)
500Internal server error