Register Devices

Every business needs at least one fiscal device to issue receipts. With MOR, you can register a Virtual Fiscal Device (VFD) in minutes — no hardware required.

What is a fiscal device?

A fiscal device is your authorized connection to the tax system. It signs every receipt with a digital signature that proves the transaction was properly recorded. Think of it as your business's official stamp for tax compliance.

Virtual Fiscal Device (VFD)

A software-based device that runs on your server or cloud. No hardware to buy or maintain.

  • No hardware costs
  • Easy to deploy
  • Works with any POS software
  • Auto-updates

Best for: Most businesses, especially those with existing POS systems

Hardware Fiscal Device

A physical device connected to your point of sale. Required in some specific cases.

  • Works offline
  • Tamper-resistant
  • Physical receipt printing
  • Battery backup

Best for: High-volume retail, areas with unreliable internet

Register a Virtual Fiscal Device

Here's how to register your first VFD. This is a one-time setup:

from mor_sdk import MorClient

client = MorClient(api_key="your_api_key")

# Register a new Virtual Fiscal Device
device = client.devices.register(
    device_type="VFD",
    name="Main Store POS",
    branch_id="br_123abc"  # Optional: for multi-branch setups
)

print(f"Device ID: {device.id}")
print(f"Status: {device.status}")
print(f"Serial Number: {device.serial_number}")

Device object

Here's what you get when you register a device:

{
  "id": "dev_abc123xyz",
  "device_type": "VFD",
  "name": "Main Store POS",
  "serial_number": "VFD-2026-ET-001234",
  "status": "ACTIVE",
  
  "branch": {
    "id": "br_123abc",
    "name": "Head Office",
    "address": "Bole Road, Addis Ababa"
  },
  
  "capabilities": {
    "can_issue_receipts": true,
    "can_issue_credit_notes": true,
    "can_generate_z_report": true,
    "offline_mode": false
  },
  
  "last_activity_at": "2026-03-15T10:30:00Z",
  "created_at": "2026-03-01T08:00:00Z"
}

Device statuses

ACTIVE

Device is ready to issue receipts. This is the normal operating state.

PENDING_ACTIVATION

Device is registered but waiting for final activation. Usually completes within minutes.

SUSPENDED

Device has been temporarily suspended. Contact support to resolve.

DEACTIVATED

Device has been permanently deactivated. Cannot issue receipts.

Multi-branch setup

If you have multiple locations, you can organize devices by branch:

# First, create branches
main_branch = client.branches.create(
    name="Main Store",
    address={
        "region": "Addis Ababa",
        "subcity": "Bole",
        "woreda": "03",
        "kebele": "14",
        "street": "Bole Road"
    }
)

satellite_branch = client.branches.create(
    name="Airport Kiosk",
    address={
        "region": "Addis Ababa",
        "subcity": "Bole",
        "woreda": "01",
        "specific_location": "Bole International Airport, Arrivals"
    }
)

# Then register devices for each branch
main_device = client.devices.register(
    device_type="VFD",
    name="Main Store Register 1",
    branch_id=main_branch.id
)

airport_device = client.devices.register(
    device_type="VFD",
    name="Airport Kiosk POS",
    branch_id=satellite_branch.id
)

Offline mode

Internet can be unreliable. Our SDKs handle temporary disconnections automatically:

Online (Normal)

Receipts are signed and recorded in real-time. The fiscal code is immediately valid.

Offline (Temporary)

Receipts are queued locally and automatically synced when connectivity returns. Limited to 72 hours per regulations.

Important: Ethiopian regulations require receipts to be reported within 72 hours. If a device is offline longer than that, it will be automatically suspended until it reconnects.

Device limits

The number of devices you can register depends on your plan:

PlanDevicesBranches
Free1 device1 branch
Starter5 devices3 branches
Business25 devices10 branches
EnterpriseUnlimitedUnlimited

Best practices

Use descriptive names

Name devices clearly (e.g., “Cashier 1”, “Kitchen Kiosk”) so you can easily identify them in reports and troubleshooting.

One device per point of sale

Each register or checkout point should have its own device. This makes tracking and auditing much easier.

Generate daily Z-Reports

Ethiopian regulations require daily Z-Reports for each active device. Set up automated generation at end of business day.