Logo
Rest API
v1.0.11
Ctrl+K

Public, read-only documentation link generated from Super Admin settings.

Overview

Lightweight, token-based endpoints for building mobile POS, delivery, and admin experiences without touching core POS logic.

Base URL
https://onepe.in/api/application-integration
Auth
Bearer
Formats
JSON

Authentication & Tokens

Issue scoped bearer tokens per staff account. Tokens inherit restaurant and branch context.

POST /auth/login

POST /auth/login

Exchange staff credentials for a bearer token.

Header Value
Accept application/json
Content-Type application/json
📥 Request body
{
    "email": "admin@example.com",
    "password": "secret"
}
💡 Notes
Send the returned token as Authorization: Bearer on every request.
Token privileges match the user roles and permissions.
Rate limited: 5 requests per minute.
const res = await fetch('https://onepe.in/api/application-integration/auth/login', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "email": "admin@example.com",
    "password": "secret"
})
});
const data = await res.json();
console.log(data);

// Response
{
    "status": true,
    "message": "success",
    "data": {
        "token_type": "Bearer",
        "access_token": "eyJhbGciOi..."
    }
}
GET /auth/me 🔒 Auth required

GET /auth/me

Return the authenticated profile and enabled modules.

Header Value
Authorization Bearer <token>
Accept application/json
💡 Notes
Use the roles array to drive client-side feature flags.
const res = await fetch('https://onepe.in/api/application-integration/auth/me', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "user": {
        "id": 12,
        "name": "API Admin",
        "email": "admin@example.com",
        "roles": [
            "owner",
            "manager"
        ]
    },
    "modules": [
        "POS",
        "Order",
        "Delivery"
    ]
}

Platform & Config

Locale, currency, features, branches, and payment gateway flags to bootstrap clients.

GET /platform/config 🔒 Auth required

GET /platform/config

Bootstrap restaurant, branch, modules, and feature flags for the current token.

💡 Notes
Responses are branch-aware. Switch branches to refresh context.
const res = await fetch('https://onepe.in/api/application-integration/platform/config', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "restaurant": {
        "id": 2,
        "name": "Demo",
        "currency": {
            "code": "USD"
        }
    },
    "branch": {
        "id": 1,
        "name": "HQ"
    },
    "features": {
        "pos": true,
        "order": true
    },
    "modules": [
        "POS",
        "Order",
        "Delivery"
    ],
    "languages": [
        {
            "language_name": "English",
            "language_code": "en"
        }
    ]
}
GET /languages 🔒 Auth required

GET /languages

List active languages with codes and status.

💡 Notes
Fallback uses LanguageSetting::LANGUAGES if DB columns are limited.
const res = await fetch('https://onepe.in/api/application-integration/languages', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "language_name": "English",
        "language_code": "en",
        "status": 1
    }
]
GET /platform/permissions 🔒 Auth required

GET /platform/permissions

Return role names and granular permissions for the token.

const res = await fetch('https://onepe.in/api/application-integration/platform/permissions', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "roles": [
        "owner",
        "manager"
    ],
    "permissions": [
        "orders.view",
        "orders.create"
    ]
}
GET /platform/printers 🔒 Auth required

GET /platform/printers

List branch printers for routing tickets.

const res = await fetch('https://onepe.in/api/application-integration/platform/printers', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 2,
        "name": "Kitchen Printer",
        "branch_id": 1
    }
]
GET /platform/receipt-settings 🔒 Auth required

GET /platform/receipt-settings

Fetch receipt header/footer and formatting.

const res = await fetch('https://onepe.in/api/application-integration/platform/receipt-settings', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "title": "Demo Restaurant",
    "footer": "Thanks for visiting"
}
POST /platform/switch-branch 🔒 Auth required

POST /platform/switch-branch

Switch the active branch for the current token.

📥 Request body
{
    "branch_id": 1
}
const res = await fetch('https://onepe.in/api/application-integration/platform/switch-branch', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "branch_id": 1
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "branch": {
        "id": 1,
        "name": "HQ"
    }
}

POS Endpoints

Menu, items, orders, and reservations for FOH and KDS workflows.

GET /pos/menus 🔒 Auth required

GET /pos/menus

List active menus for the current branch.

const res = await fetch('https://onepe.in/api/application-integration/pos/menus', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 3,
        "name": "Main Menu",
        "branch_id": 1
    }
]
GET /pos/categories 🔒 Auth required

GET /pos/categories

List menu categories for the branch.

const res = await fetch('https://onepe.in/api/application-integration/pos/categories', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 5,
        "name": "Coffee"
    }
]
GET /pos/items 🔒 Auth required

GET /pos/items

List menu items with pricing. Use filters for menus/categories.

💡 Notes
Filter by menu or category ids to reduce payload size.
const res = await fetch('https://onepe.in/api/application-integration/pos/items', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 10,
        "name": "Espresso",
        "price": 3.5,
        "menu_id": 3
    }
]
GET /pos/items/category/{categoryId} 🔒 Auth required

GET /pos/items/category/{categoryId}

Fetch items by category.

const res = await fetch('https://onepe.in/api/application-integration/pos/items/category/{categoryId}', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 11,
        "name": "Latte"
    }
]
GET /pos/items/menu/{menuId} 🔒 Auth required

GET /pos/items/menu/{menuId}

Fetch items for a specific menu.

const res = await fetch('https://onepe.in/api/application-integration/pos/items/menu/{menuId}', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 10,
        "name": "Espresso"
    }
]
GET /pos/items/{itemId}/variations 🔒 Auth required

GET /pos/items/{itemId}/variations

List variations for an item.

const res = await fetch('https://onepe.in/api/application-integration/pos/items/{itemId}/variations', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 101,
        "name": "Large",
        "price": 4.5
    }
]
GET /pos/items/{itemId}/modifier-groups 🔒 Auth required

GET /pos/items/{itemId}/modifier-groups

List modifier groups for an item.

const res = await fetch('https://onepe.in/api/application-integration/pos/items/{itemId}/modifier-groups', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 55,
        "name": "Milk"
    }
]
GET /pos/extra-charges/dine-in 🔒 Auth required

GET /pos/extra-charges/{orderType}

Fetch extra charges by order type.

const res = await fetch('https://onepe.in/api/application-integration/pos/extra-charges/dine-in', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "name": "Service",
        "amount": 5
    }
]
POST /pos/orders 🔒 Auth required

POST /pos/orders

Create a POS order with items, actions, and routing.

📥 Request body
{
    "order_type": "Dine In",
    "table_id": 12,
    "actions": [
        "kot"
    ],
    "items": [
        {
            "id": 10,
            "quantity": 1,
            "price": 15
        }
    ]
}
💡 Notes
Use idempotency key to prevent duplicates.
Response includes cart-level items, charges, taxes, and totals.
Item price is optional. Fetched from MenuItem if zero.
const res = await fetch('https://onepe.in/api/application-integration/pos/orders', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "order_type": "Dine In",
    "table_id": 12,
    "actions": [
        "kot"
    ],
    "items": [
        {
            "id": 10,
            "quantity": 1,
            "price": 15
        }
    ]
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "order": {
        "id": 9901,
        "order_number": "POS-9901",
        "status": "placed"
    },
    "cart": {
        "items": [
            {
                "menu_item_id": 10,
                "quantity": 1,
                "amount": 15
            }
        ],
        "charges": [
            {
                "name": "Service",
                "amount": 1.5
            }
        ],
        "taxes": [
            {
                "name": "VAT",
                "amount": 2.100000000000000088817841970012523233890533447265625
            }
        ],
        "summary": {
            "sub_total": 15,
            "discount_amount": 0,
            "tax_total": 2.100000000000000088817841970012523233890533447265625,
            "charges_total": 1.5,
            "delivery_fee": 0,
            "grand_total": 18.60000000000000142108547152020037174224853515625
        }
    }
}
PUT /pos/orders/{id} 🔒 Auth required

PUT /pos/orders/{id}

Update an existing order (cancel, modify status, update items)

📥 Request body
{
    "actions": [
        "cancel"
    ],
    "items": [
        {
            "id": 10,
            "quantity": 2,
            "price": 15
        }
    ]
}
💡 Notes
actions=["cancel"]: Deletes order and frees table (matching Laravel POS behavior)
actions=["bill"]: Updates status to billed, sets table to running
actions=["kot"]: Updates status to kot, sets table to running
actions=["draft"]: Updates status to draft, sets table to available
If items array provided, existing items are replaced with new ones
This endpoint is used by Flutter POS app for order cancellation
const res = await fetch('https://onepe.in/api/application-integration/pos/orders/{id}', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "actions": [
        "cancel"
    ],
    "items": [
        {
            "id": 10,
            "quantity": 2,
            "price": 15
        }
    ]
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "message": "Order canceled",
    "order_id": 9901
}
GET /pos/orders 🔒 Auth required

GET /pos/orders

List orders with pagination.

💡 Notes
Filter by status, type, branch_id, and page.
Each order now includes items, charges, taxes, and cart summary for direct consumption.
Endpoint returns base pagination even if enrichment fails.
Move orders: placed -> confirmed/preparing -> served/delivered.
const res = await fetch('https://onepe.in/api/application-integration/pos/orders', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "data": [
        {
            "id": 4123,
            "status": "open",
            "order_type": "Dine In",
            "total": 82.5,
            "items": [
                {
                    "menu_item_id": 10,
                    "quantity": 1,
                    "amount": 15
                }
            ],
            "charges": [
                {
                    "name": "Service",
                    "amount": 5
                }
            ],
            "taxes": [
                {
                    "name": "VAT",
                    "amount": 2.5
                }
            ],
            "cart": {
                "summary": {
                    "sub_total": 70,
                    "tax_total": 2.5,
                    "charges_total": 5,
                    "grand_total": 82.5
                }
            }
        }
    ]
}
GET /pos/orders/{id} 🔒 Auth required

GET /pos/orders/{id}

Fetch a single order with totals, discount, charges, taxes.

💡 Notes
Dine-in shows table, waiter, customer, items, charges, taxes.
Invoice layout with items, sub_total, discount, tax, charges, grand_total.
Discounts on order (discount_type/value/amount).
Printing via POS/printer flow.
Attach customer_id or create via POST /pos/customers.
Waiter/table reassignment via order update.
const res = await fetch('https://onepe.in/api/application-integration/pos/orders/{id}', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "id": 4123,
    "order_number": "POS-4123",
    "order_status": "confirmed",
    "items": [
        {
            "menu_item_id": 10,
            "quantity": 1,
            "amount": 15
        }
    ],
    "charges": [
        {
            "name": "Service",
            "amount": 1.5
        }
    ],
    "taxes": [
        {
            "name": "VAT",
            "amount": 2.100000000000000088817841970012523233890533447265625
        }
    ],
    "cart": {
        "summary": {
            "sub_total": 15,
            "discount_amount": 0,
            "tax_total": 2.100000000000000088817841970012523233890533447265625,
            "charges_total": 1.5,
            "grand_total": 18.60000000000000142108547152020037174224853515625
        }
    }
}
POST /pos/orders/{id}/status 🔒 Auth required

POST /pos/orders/{id}/status

Update order status (placed, confirmed, preparing, served, delivered, cancelled).

📥 Request body
{
    "status": "paid"
}
💡 Notes
Move orders: placed -> confirmed/preparing -> served/delivered.
const res = await fetch('https://onepe.in/api/application-integration/pos/orders/{id}/status', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "status": "paid"
})
});
const data = await res.json();
console.log(data);

// Response
{
    "status": true
}
POST /pos/orders/{id}/tip 🔒 Auth required

POST /pos/orders/{id}/tip

Add or update a tip on the order.

📥 Request body
{
    "amount": 5,
    "note": "Thanks"
}
const res = await fetch('https://onepe.in/api/application-integration/pos/orders/{id}/tip', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "amount": 5,
    "note": "Thanks"
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "order_id": 1,
    "tip_amount": 5
}
POST /pos/orders/{id}/split-payments 🔒 Auth required

POST /pos/orders/{id}/split-payments

Create a split payment (optional linked items).

📥 Request body
{
    "amount": 20,
    "payment_method": "card",
    "status": "pending",
    "items": [
        {
            "order_item_id": 123,
            "quantity": 1
        }
    ]
}
const res = await fetch('https://onepe.in/api/application-integration/pos/orders/{id}/split-payments', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "amount": 20,
    "payment_method": "card",
    "status": "pending",
    "items": [
        {
            "order_item_id": 123,
            "quantity": 1
        }
    ]
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "order_id": 1,
    "split_order_id": 10,
    "amount": 20,
    "payment_method": "card",
    "status": "pending"
}
POST /pos/orders/{id}/tip 🔒 Auth required

POST /pos/orders/{id}/tip

Add a tip to an existing order

📥 Request body
{
    "amount": 5,
    "note": "Great service"
}
💡 Notes
Tip is added to order total. Can be updated before payment.
const res = await fetch('https://onepe.in/api/application-integration/pos/orders/{id}/tip', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "amount": 5,
    "note": "Great service"
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "tip_amount": 5
}
POST /pos/orders/{id}/split-payments 🔒 Auth required

POST /pos/orders/{id}/split-payments

Split order payment across multiple methods

📥 Request body
{
    "payments": [
        {
            "amount": 25,
            "method": "cash"
        },
        {
            "amount": 25,
            "method": "card"
        }
    ]
}
💡 Notes
Supports cash, card, and other payment methods. Total must match order amount.
const res = await fetch('https://onepe.in/api/application-integration/pos/orders/{id}/split-payments', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "payments": [
        {
            "amount": 25,
            "method": "cash"
        },
        {
            "amount": 25,
            "method": "card"
        }
    ]
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "payments": [
        {
            "id": 1,
            "amount": 25,
            "method": "cash"
        },
        {
            "id": 2,
            "amount": 25,
            "method": "card"
        }
    ]
}
POST /pos/orders/{id}/pay 🔒 Auth required

POST /pos/orders/{id}/pay

Pay an order with payment records.

📥 Request body
{
    "payments": [
        {
            "amount": 10,
            "method": "cash"
        }
    ]
}
💡 Notes
Marking paid releases table and updates amount_paid.
Invoice layout with items, sub_total, discount, tax, charges, grand_total.
const res = await fetch('https://onepe.in/api/application-integration/pos/orders/{id}/pay', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "payments": [
        {
            "amount": 10,
            "method": "cash"
        }
    ]
})
});
const data = await res.json();
console.log(data);

// Response
{
    "status": true
}
PUT /pos/orders/{id}/items 🔒 Auth required

PUT /pos/orders/{id}/items

Update order items (add, update quantity, or remove)

📥 Request body
{
    "items": [
        {
            "action": "add",
            "menu_item_id": 15,
            "quantity": 2,
            "price": 25
        },
        {
            "action": "update",
            "order_item_id": 123,
            "quantity": 3
        },
        {
            "action": "remove",
            "order_item_id": 124
        }
    ],
    "recalculate_totals": true
}
💡 Notes
Actions: add, update, remove. Recalculates totals.
const res = await fetch('https://onepe.in/api/application-integration/pos/orders/{id}/items', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "items": [
        {
            "action": "add",
            "menu_item_id": 15,
            "quantity": 2,
            "price": 25
        },
        {
            "action": "update",
            "order_item_id": 123,
            "quantity": 3
        },
        {
            "action": "remove",
            "order_item_id": 124
        }
    ],
    "recalculate_totals": true
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "data": {
        "added_items": [
            125
        ],
        "updated_items": [
            123
        ],
        "removed_items": [
            124
        ],
        "sub_total": 75,
        "total": 82.5
    }
}
POST /pos/orders/{id}/kot 🔒 Auth required

POST /pos/orders/{id}/kot

Create a new KOT for existing order

📥 Request body
{
    "order_item_ids": [
        123,
        124
    ],
    "note": "Kitchen note",
    "kitchen_place_id": 1
}
💡 Notes
If order_item_ids empty, all items included. Updates status.
const res = await fetch('https://onepe.in/api/application-integration/pos/orders/{id}/kot', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "order_item_ids": [
        123,
        124
    ],
    "note": "Kitchen note",
    "kitchen_place_id": 1
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "data": {
        "kot_id": 45,
        "kot_number": "123",
        "token_number": 5,
        "items_count": 2
    }
}
GET /pos/customers 🔒 Auth required

GET /pos/customers

List POS customers.

const res = await fetch('https://onepe.in/api/application-integration/pos/customers', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 2,
        "name": "John Doe"
    }
]
POST /pos/customers 🔒 Auth required

POST /pos/customers

Create a POS customer.

📥 Request body
{
    "name": "John",
    "phone": "+1"
}
const res = await fetch('https://onepe.in/api/application-integration/pos/customers', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "name": "John",
    "phone": "+1"
})
});
const data = await res.json();
console.log(data);

// Response
{
    "id": 22,
    "name": "John"
}
GET /pos/phone-codes 🔒 Auth required

GET /pos/phone-codes

List phone codes for customer creation.

const res = await fetch('https://onepe.in/api/application-integration/pos/phone-codes', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "code": "+1",
        "name": "US"
    }
]
GET /pos/taxes 🔒 Auth required

GET /pos/taxes

List taxes for the branch.

const res = await fetch('https://onepe.in/api/application-integration/pos/taxes', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "name": "VAT",
        "rate": 5
    }
]
GET /pos/restaurants 🔒 Auth required

GET /pos/restaurants

List restaurants (super admin tokens).

const res = await fetch('https://onepe.in/api/application-integration/pos/restaurants', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 2,
        "name": "Demo"
    }
]
GET /pos/branches 🔒 Auth required

GET /pos/branches

List branches for current restaurant.

const res = await fetch('https://onepe.in/api/application-integration/pos/branches', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 1,
        "name": "HQ"
    }
]
GET /pos/reservations 🔒 Auth required

GET /pos/reservations

List reservations.

const res = await fetch('https://onepe.in/api/application-integration/pos/reservations', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 8,
        "status": "confirmed"
    }
]
POST /pos/reservations 🔒 Auth required

POST /pos/reservations

Create a reservation.

📥 Request body
{
    "table_id": 1,
    "guest_name": "Sam",
    "guest_count": 2
}
const res = await fetch('https://onepe.in/api/application-integration/pos/reservations', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "table_id": 1,
    "guest_name": "Sam",
    "guest_count": 2
})
});
const data = await res.json();
console.log(data);

// Response
{
    "id": 9
}
POST /pos/reservations/{id}/status 🔒 Auth required

POST /pos/reservations/{id}/status

Update reservation status.

📥 Request body
{
    "status": "cancelled"
}
const res = await fetch('https://onepe.in/api/application-integration/pos/reservations/{id}/status', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "status": "cancelled"
})
});
const data = await res.json();
console.log(data);

// Response
{
    "status": true
}
GET /pos/reservations/today 🔒 Auth required

GET /pos/reservations/today

Todays reservations shortcut.

const res = await fetch('https://onepe.in/api/application-integration/pos/reservations/today', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 8,
        "status": "confirmed"
    }
]
GET /pos/tables 🔒 Auth required

GET /pos/tables

List tables for the branch.

const res = await fetch('https://onepe.in/api/application-integration/pos/tables', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 6,
        "name": "T-6"
    }
]
POST /pos/tables/{tableId}/unlock 🔒 Auth required

POST /pos/tables/{tableId}/unlock

Force unlock a table.

const res = await fetch('https://onepe.in/api/application-integration/pos/tables/{tableId}/unlock', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "unlocked": true
}
GET /pos/order-types 🔒 Auth required

GET /pos/order-types

List available order types.

const res = await fetch('https://onepe.in/api/application-integration/pos/order-types', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "code": "dine-in",
        "label": "Dine In"
    }
]
GET /pos/actions 🔒 Auth required

GET /pos/actions

List allowed order actions.

const res = await fetch('https://onepe.in/api/application-integration/pos/actions', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    "kot",
    "bill"
]
GET /pos/delivery-platforms 🔒 Auth required

GET /pos/delivery-platforms

List configured delivery platforms.

const res = await fetch('https://onepe.in/api/application-integration/pos/delivery-platforms', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    "Talabat",
    "Careem"
]
GET /pos/get-order-number 🔒 Auth required

GET /pos/get-order-number

Fetch the next order number.

💡 Notes
Uses DB locking to prevent duplicate order numbers.
const res = await fetch('https://onepe.in/api/application-integration/pos/get-order-number', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "order_number": 157,
    "formatted_order_number": "POS-2026-0157"
}
GET /pos/waiters 🔒 Auth required

GET /pos/waiters

List waiters/delivery staff.

const res = await fetch('https://onepe.in/api/application-integration/pos/waiters', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 4,
        "name": "Waiter 1"
    }
]
GET /pos/delivery-executives 🔒 Auth required

GET /pos/delivery-executives

List delivery executives with status filters.

💡 Notes
Filter by ?status=available|in_delivery|inactive.
const res = await fetch('https://onepe.in/api/application-integration/pos/delivery-executives', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 1,
        "name": "Driver 1",
        "phone": "+123456789",
        "status": "available"
    }
]

Customer App

Customer catalog and order submission endpoints.

GET /customer/catalog 🔒 Auth required

GET /customer/catalog

Return menus, categories, and items for customer apps.

const res = await fetch('https://onepe.in/api/application-integration/customer/catalog', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "menus": [
        {
            "id": 3,
            "name": "Main Menu",
            "categories": []
        }
    ]
}
POST /customer/orders 🔒 Auth required

POST /customer/orders

Place a customer order (delivery/takeaway).

📥 Request body
{
    "order_type": "Delivery",
    "customer_address_id": 9,
    "items": [
        {
            "id": 10,
            "quantity": 1
        }
    ]
}
💡 Notes
Include customer_address_id for delivery.
const res = await fetch('https://onepe.in/api/application-integration/customer/orders', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "order_type": "Delivery",
    "customer_address_id": 9,
    "items": [
        {
            "id": 10,
            "quantity": 1
        }
    ]
})
});
const data = await res.json();
console.log(data);

// Response
{
    "status": true,
    "order_id": 551
}
GET /customer/orders 🔒 Auth required

GET /customer/orders

List customer orders for current token.

const res = await fetch('https://onepe.in/api/application-integration/customer/orders', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 551,
        "status": "open",
        "total": 22.5
    }
]

Notifications

Register device tokens and fetch notifications.

POST /pos/notifications/register-token 🔒 Auth required

POST /pos/notifications/register-token

Register device token for push.

📥 Request body
{
    "device_token": "2f546bee-ab5b-4e8a-8609-21daf9bd8c42",
    "platform": "ios"
}
const res = await fetch('https://onepe.in/api/application-integration/pos/notifications/register-token', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "device_token": "2f546bee-ab5b-4e8a-8609-21daf9bd8c42",
    "platform": "ios"
})
});
const data = await res.json();
console.log(data);

// Response
{
    "saved": true
}
GET /pos/notifications 🔒 Auth required

GET /pos/notifications

List notifications for current user.

const res = await fetch('https://onepe.in/api/application-integration/pos/notifications', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 1,
        "title": "Order ready",
        "read_at": null
    }
]
POST /pos/notifications/{id}/read 🔒 Auth required

POST /pos/notifications/{id}/read

Mark notification as read.

const res = await fetch('https://onepe.in/api/application-integration/pos/notifications/{id}/read', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "read": true
}
POST /pos/notifications/test 🔒 Auth required

POST /pos/notifications/test

Send a test notification.

const res = await fetch('https://onepe.in/api/application-integration/pos/notifications/test', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "sent": true
}

Shared & Utilities

Common lookups and helpers for building clients.

GET /languages 🔒 Auth required

GET /languages

List active languages with codes and status.

const res = await fetch('https://onepe.in/api/application-integration/languages', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "language_name": "English",
        "language_code": "en",
        "status": 1
    }
]
GET /currencies 🔒 Auth required

GET /currencies

List currencies with codes and rates.

const res = await fetch('https://onepe.in/api/application-integration/currencies', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 1,
        "currency_code": "USD"
    }
]
GET /payment-gateways 🔒 Auth required

GET /payment-gateways

Payment gateway meta for restaurant.

const res = await fetch('https://onepe.in/api/application-integration/payment-gateways', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "stripe_status": "active"
}
GET /staff 🔒 Auth required

GET /staff

List staff scoped to restaurant.

const res = await fetch('https://onepe.in/api/application-integration/staff', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 5,
        "name": "Manager"
    }
]
GET /roles 🔒 Auth required

GET /roles

List role names attached to restaurant.

const res = await fetch('https://onepe.in/api/application-integration/roles', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    "Owner_1",
    "Manager_1"
]
GET /areas 🔒 Auth required

GET /areas

List delivery areas for branch.

const res = await fetch('https://onepe.in/api/application-integration/areas', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 3,
        "name": "Zone A"
    }
]
GET /customer-addresses?customer_id=1 🔒 Auth required

GET /customer-addresses

List customer addresses by customer_id.

const res = await fetch('https://onepe.in/api/application-integration/customer-addresses?customer_id=1', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
[
    {
        "id": 7,
        "address": "Main St"
    }
]
POST /customer-addresses 🔒 Auth required

POST /customer-addresses

Create a new customer address

📥 Request body
{
    "customer_id": 1,
    "address": "123 Main St",
    "area_id": 3,
    "is_default": true
}
const res = await fetch('https://onepe.in/api/application-integration/customer-addresses', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "customer_id": 1,
    "address": "123 Main St",
    "area_id": 3,
    "is_default": true
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "data": {
        "id": 8,
        "address": "123 Main St"
    }
}
PUT /customer-addresses/{id} 🔒 Auth required

PUT /customer-addresses/{id}

Update an existing customer address

📥 Request body
{
    "address": "456 Oak Ave",
    "is_default": false
}
const res = await fetch('https://onepe.in/api/application-integration/customer-addresses/{id}', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
  ,body: JSON.stringify({
    "address": "456 Oak Ave",
    "is_default": false
})
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "data": {
        "id": 8,
        "address": "456 Oak Ave"
    }
}
DELETE /customer-addresses/{id} 🔒 Auth required

DELETE /customer-addresses/{id}

Delete a customer address

const res = await fetch('https://onepe.in/api/application-integration/customer-addresses/{id}', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "success": true,
    "message": "Address deleted"
}

SDK Examples

Use any language to consume endpoints with bearer auth.

const res = await fetch('https://onepe.in/api/application-integration/pos/items', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer <TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});
const data = await res.json();
console.log(data);

// Response
{
    "status": true,
    "data": {
        "items": [
            {
                "id": 1,
                "name": "Espresso"
            }
        ]
    }
}