> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omneo.io/llms.txt
> Use this file to discover all available pages before exploring further.

# POS Integration Overview

A POS integration connects your Point of Sale system to Omneo so staff can identify customers, check incentive balances, process redemptions, and record transactions, all without leaving the POS workflow.

## What a POS integration enables

* Identify and look up a customer at sale time (by card scan, name, email, or phone)
* View the customer's reward balance and available benefits
* Process a reward or benefit redemption as a payment type or discount
* Record the transaction in Omneo (with the redemption linked)
* Manage staff records in Omneo for transaction attribution

## Two integration approaches

### Option 1: Clienteling portal (recommended)

The Omneo Clienteling portal is a web app designed for POS deployment. The POS launches Clienteling in a chromeless browser window with URL parameters for the store, staff, and terminal. Staff perform all customer management, balance checks, and redemptions inside Clienteling. The portal communicates results back to the POS via JavaScript callbacks.

This approach is faster to integrate and ensures data consistency. It is the recommended approach unless your POS cannot display a browser window.

**Clienteling URL structure:**

```
https://{tenant}.clienteling.omneo.io?staffId={staffId}&storeId={storeId}&terminalId={terminalId}&type=POS
```

To open directly to a known customer's profile:

```
https://{tenant}.clienteling.omneo.io/profile/{profileId}?staffId={staffId}&storeId={storeId}&terminalId={terminalId}&type=POS
```

**URL parameters:**

| Parameter    | Type    | Description                                                       |
| ------------ | ------- | ----------------------------------------------------------------- |
| `staffId`    | string  | Omneo staff ID                                                    |
| `storeId`    | string  | Omneo location ID                                                 |
| `terminalId` | string  | POS terminal identifier                                           |
| `type`       | enum    | One of: `POS`, `MobilePOS`, `Tablet`, `Administration`, `Zendesk` |
| `max_redeem` | integer | Cart total, caps the redemption amount the staff can apply        |

**POS Callbacks from Clienteling:**

| Callback                                                        | Fires when                                     |
| --------------------------------------------------------------- | ---------------------------------------------- |
| `window.memberProfile_returnToPOS()`                            | Staff clicks Back, no customer attached        |
| `window.memberProfile_addToSale(profileId)`                     | Staff clicks Attach, customer attached to sale |
| `window.redeemReward_returnConfirmation(profileId, willRedeem)` | Staff clicks Redeem                            |
| `window.memberProfile_loadTransaction(memberId, transactionId)` | Staff clicks Attach Transaction                |

### Option 2: Direct API integration

For POS systems that need tighter integration with native screens, use the Omneo API directly:

1. **Identify customer**: search by email, phone, or identity handle
2. **Check balance**: `GET /api/v3/profiles/{profileId}/balances`
3. **Create redemption**: `POST /api/v3/profiles/{profileId}/redemptions`
4. **Record transaction**: `POST /api/v3/transactions` with `redemption_id`
5. **Reverse if needed**: reverse the redemption within 10 minutes if payment fails

See [POS Integration Guide](/dev-guides/pos/pos-integration-guide) for the full API flow.

## Requirements

* Active internet connection with outbound HTTPS (port 443) from the POS terminal
* Static IP address: Omneo maintains a per-tenant IP allowlist for Clienteling access
* Minimum display resolution: 1024 × 768
* Chrome (current or one version prior) for Clienteling portal
