Epos Now Devices and Webhooks API

List the registered tills and API devices on the account, and react to changes in near real time with Webhooks. Webhooks POST an HTTP notification to your endpoint whenever a relevant object changes, carrying Epos-Object and Epos-Action headers describing what happened.

OpenAPI Specification

epos-now-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: EposNow HQ REST API
  description: >-
    The EposNow HQ REST API lets developers programmatically interact with the
    cloud-based aspects of the Epos Now point of sale (POS) platform for retail
    and hospitality - products, categories, transactions (sales), customers,
    stock, tax rates, and devices. This document models the documented V2 API
    surface (base https://api.eposnowhq.com/api/V2). Epos Now recommends the
    newer V4 / "Global" API (https://api.eposnowhq.com/api/v4) for new
    integrations, which reorganizes the same domains; V4 per-resource paths are
    not fully enumerated here. All requests use HTTP Basic authentication with a
    per-device access token (Base64 of "API Key:API Secret") issued from the
    Back Office. List endpoints are paginated at up to 200 records per page via
    the page query parameter.
  version: 'V2'
  contact:
    name: Epos Now Developers
    url: https://developer.eposnowhq.com/
servers:
  - url: https://api.eposnowhq.com/api/V2
    description: EposNow HQ REST API (V2)
security:
  - basicAuth: []
tags:
  - name: Products
    description: The product catalog sold at the point of sale.
  - name: Categories
    description: Categories that group products for the till and reporting.
  - name: Transactions
    description: Sales records (orders) captured at the point of sale.
  - name: Customers
    description: Customer records for loyalty, accounts, and CRM.
  - name: Stock
    description: Product stock levels and stock control.
  - name: Devices
    description: Registered tills and API devices on the account.
paths:
  /Product:
    get:
      operationId: listProducts
      tags:
        - Products
      summary: List products
      description: Returns a paginated list of products, up to 200 per page.
      parameters:
        - $ref: '#/components/parameters/Page'
      responses:
        '200':
          description: A paginated list of products.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Product'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createProduct
      tags:
        - Products
      summary: Create a product
      description: Creates a new product in the catalog.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Product'
      responses:
        '200':
          description: The created product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /Product/{Id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getProduct
      tags:
        - Products
      summary: Get a product
      description: Returns a single product by its ID.
      responses:
        '200':
          description: The requested product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateProduct
      tags:
        - Products
      summary: Update a product
      description: Updates an existing product.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Product'
      responses:
        '200':
          description: The updated product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteProduct
      tags:
        - Products
      summary: Delete a product
      description: Deletes a product from the catalog.
      responses:
        '200':
          description: Deletion confirmation.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /Category:
    get:
      operationId: listCategories
      tags:
        - Categories
      summary: List categories
      description: Returns a paginated list of categories, up to 200 per page.
      parameters:
        - $ref: '#/components/parameters/Page'
      responses:
        '200':
          description: A paginated list of categories.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Category'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createCategory
      tags:
        - Categories
      summary: Create a category
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Category'
      responses:
        '200':
          description: The created category.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /Category/{Id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getCategory
      tags:
        - Categories
      summary: Get a category
      responses:
        '200':
          description: The requested category.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateCategory
      tags:
        - Categories
      summary: Update a category
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Category'
      responses:
        '200':
          description: The updated category.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteCategory
      tags:
        - Categories
      summary: Delete a category
      responses:
        '200':
          description: Deletion confirmation.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /Transaction:
    get:
      operationId: listTransactions
      tags:
        - Transactions
      summary: List transactions
      description: >-
        Returns a paginated list of transactions (sales records), up to 200 per
        page.
      parameters:
        - $ref: '#/components/parameters/Page'
      responses:
        '200':
          description: A paginated list of transactions.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Transaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createTransaction
      tags:
        - Transactions
      summary: Create a transaction
      description: Creates a new transaction (sale) with its line items and tenders.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Transaction'
      responses:
        '200':
          description: The created transaction.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /Transaction/{Id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getTransaction
      tags:
        - Transactions
      summary: Get a transaction
      responses:
        '200':
          description: The requested transaction.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateTransaction
      tags:
        - Transactions
      summary: Update a transaction
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Transaction'
      responses:
        '200':
          description: The updated transaction.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteTransaction
      tags:
        - Transactions
      summary: Delete a transaction
      responses:
        '200':
          description: Deletion confirmation.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /Customer:
    get:
      operationId: listCustomers
      tags:
        - Customers
      summary: List customers
      description: Returns a paginated list of customers, up to 200 per page.
      parameters:
        - $ref: '#/components/parameters/Page'
      responses:
        '200':
          description: A paginated list of customers.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Customer'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createCustomer
      tags:
        - Customers
      summary: Create a customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Customer'
      responses:
        '200':
          description: The created customer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /Customer/{Id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getCustomer
      tags:
        - Customers
      summary: Get a customer
      responses:
        '200':
          description: The requested customer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateCustomer
      tags:
        - Customers
      summary: Update a customer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Customer'
      responses:
        '200':
          description: The updated customer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteCustomer
      tags:
        - Customers
      summary: Delete a customer
      responses:
        '200':
          description: Deletion confirmation.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /ProductStock:
    get:
      operationId: listProductStock
      tags:
        - Stock
      summary: List product stock levels
      description: >-
        Returns a paginated list of product stock levels, up to 200 per page.
        Used to read on-hand inventory per product.
      parameters:
        - $ref: '#/components/parameters/Page'
      responses:
        '200':
          description: A paginated list of product stock levels.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductStock'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /StockTransfer:
    get:
      operationId: listStockTransfers
      tags:
        - Stock
      summary: List stock transfers
      description: >-
        Returns a paginated list of stock transfers between locations, up to 200
        per page.
      parameters:
        - $ref: '#/components/parameters/Page'
      responses:
        '200':
          description: A paginated list of stock transfers.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /TaxRate:
    get:
      operationId: listTaxRates
      tags:
        - Products
      summary: List tax rates
      description: Returns a paginated list of tax rates, up to 200 per page.
      parameters:
        - $ref: '#/components/parameters/Page'
      responses:
        '200':
          description: A paginated list of tax rates.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /Device:
    get:
      operationId: listDevices
      tags:
        - Devices
      summary: List devices
      description: >-
        Returns a paginated list of the tills and API devices registered on the
        account, up to 200 per page.
      parameters:
        - $ref: '#/components/parameters/Page'
      responses:
        '200':
          description: A paginated list of devices.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Device'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /Device/{Id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getDevice
      tags:
        - Devices
      summary: Get a device
      responses:
        '200':
          description: The requested device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Device'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        HTTP Basic authentication. The access token is the Base64 encoding of
        "API Key:API Secret" (the API Key, a colon, then the API Secret, with no
        spaces), sent as "Authorization: Basic {token}". Credentials are issued
        per API Device registered under Web Integrations in the Epos Now Back
        Office.
  parameters:
    Id:
      name: Id
      in: path
      required: true
      description: The unique identifier of the resource.
      schema:
        type: integer
    Page:
      name: page
      in: query
      required: false
      description: The page number of results to return (up to 200 records per page).
      schema:
        type: integer
        default: 1
  responses:
    Unauthorized:
      description: Missing or invalid Basic authentication credentials.
    NotFound:
      description: The requested resource was not found.
  schemas:
    Product:
      type: object
      properties:
        Id:
          type: integer
        Name:
          type: string
        Description:
          type: string
        CategoryId:
          type: integer
        SalePrice:
          type: number
        CostPrice:
          type: number
        Barcode:
          type: string
        TaxRateId:
          type: integer
      additionalProperties: true
    Category:
      type: object
      properties:
        Id:
          type: integer
        Name:
          type: string
        ParentId:
          type: integer
      additionalProperties: true
    Transaction:
      type: object
      description: A sales record (order) captured at the point of sale.
      properties:
        Id:
          type: integer
        DeviceId:
          type: integer
        CustomerId:
          type: integer
        DateTime:
          type: string
          format: date-time
        Amount:
          type: number
        TransactionItems:
          type: array
          items:
            type: object
            additionalProperties: true
      additionalProperties: true
    Customer:
      type: object
      properties:
        Id:
          type: integer
        Title:
          type: string
        Forename:
          type: string
        Surname:
          type: string
        EmailAddress:
          type: string
        PhoneNumber:
          type: string
        CustomerTypeId:
          type: integer
      additionalProperties: true
    ProductStock:
      type: object
      properties:
        ProductId:
          type: integer
        LocationId:
          type: integer
        CurrentStock:
          type: number
      additionalProperties: true
    Device:
      type: object
      properties:
        Id:
          type: integer
        Name:
          type: string
        LocationId:
          type: integer
      additionalProperties: true