Loyverse Inventory API

Stock levels per variant and store.

OpenAPI Specification

loyverse-inventory-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Loyverse Categories Inventory API
  description: REST API for the Loyverse point of sale (POS) platform. Loyverse is a free POS for small retail stores, cafes, bars, and restaurants; this API exposes the same data as the POS and Back Office - items and variants, categories, receipts (sales), customers and loyalty, inventory levels, stores, employees, payment types, taxes, discounts, modifiers, suppliers, POS devices, and shifts. All endpoints are HTTPS REST with cursor-based pagination. Authenticate with a personal access token (Bearer) generated in the Back Office, or with the OAuth 2.0 authorization-code flow for third-party apps acting on behalf of other merchants. This document is derived from the public Loyverse API reference and grounds real endpoints; request and response schemas are summarized and should be verified against the live reference during reconciliation.
  version: '1.0'
  contact:
    name: Loyverse Developers
    url: https://developer.loyverse.com/docs/
  x-logo:
    url: https://loyverse.com
servers:
- url: https://api.loyverse.com/v1.0
  description: Loyverse API
security:
- bearerAuth: []
- oauth2:
  - ITEMS_READ
  - RECEIPTS_READ
  - CUSTOMERS_READ
  - INVENTORY_READ
  - STORES_READ
tags:
- name: Inventory
  description: Stock levels per variant and store.
paths:
  /inventory:
    get:
      operationId: getInventoryLevels
      tags:
      - Inventory
      summary: Get inventory levels
      description: Returns stock on hand per variant and store.
      parameters:
      - $ref: '#/components/parameters/Cursor'
      - $ref: '#/components/parameters/Limit'
      - name: store_id
        in: query
        schema:
          type: string
      - name: variant_ids
        in: query
        schema:
          type: string
        description: Comma-separated list of variant ids to filter by.
      responses:
        '200':
          description: A page of inventory levels.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InventoryPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: updateInventoryLevels
      tags:
      - Inventory
      summary: Update inventory levels
      description: Sets stock counts for one or more variant/store pairs.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                inventory_levels:
                  type: array
                  items:
                    $ref: '#/components/schemas/InventoryLevel'
      responses:
        '200':
          description: Updated inventory levels.
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    InventoryPage:
      allOf:
      - $ref: '#/components/schemas/Cursorable'
      - type: object
        properties:
          inventory_levels:
            type: array
            items:
              $ref: '#/components/schemas/InventoryLevel'
    Cursorable:
      type: object
      properties:
        cursor:
          type: string
          nullable: true
          description: Cursor to pass to fetch the next page, or null on the last page.
    InventoryLevel:
      type: object
      properties:
        variant_id:
          type: string
        store_id:
          type: string
        in_stock:
          type: number
        updated_at:
          type: string
          format: date-time
  parameters:
    Cursor:
      name: cursor
      in: query
      required: false
      schema:
        type: string
      description: Opaque cursor for the next page of results.
    Limit:
      name: limit
      in: query
      required: false
      schema:
        type: integer
        default: 50
        maximum: 250
      description: Maximum number of records to return per page.
  responses:
    Unauthorized:
      description: Missing or invalid access token.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Personal access token generated in the Loyverse Back Office (Access Tokens).
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://api.loyverse.com/oauth/authorize
          tokenUrl: https://api.loyverse.com/oauth/token
          scopes:
            ITEMS_READ: Read items and catalog objects.
            ITEMS_WRITE: Create and update items and catalog objects.
            RECEIPTS_READ: Read receipts.
            RECEIPTS_WRITE: Create receipts.
            CUSTOMERS_READ: Read customers and loyalty data.
            CUSTOMERS_WRITE: Create and update customers.
            INVENTORY_READ: Read inventory levels.
            INVENTORY_WRITE: Update inventory levels.
            EMPLOYEES_READ: Read employees.
            PAYMENT_TYPES_READ: Read payment types.
            STORES_READ: Read stores.
            MERCHANT_READ: Read merchant and store information.