Loyverse Receipts API

Sales receipts with line items, payments, taxes, and refunds.

OpenAPI Specification

loyverse-receipts-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Loyverse Categories Receipts 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: Receipts
  description: Sales receipts with line items, payments, taxes, and refunds.
paths:
  /receipts:
    get:
      operationId: listReceipts
      tags:
      - Receipts
      summary: List receipts
      description: Returns a cursor-paginated list of sales receipts, filterable by store and date range.
      parameters:
      - $ref: '#/components/parameters/Cursor'
      - $ref: '#/components/parameters/Limit'
      - name: store_id
        in: query
        schema:
          type: string
      - name: created_at_min
        in: query
        schema:
          type: string
          format: date-time
      - name: created_at_max
        in: query
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: A page of receipts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReceiptsPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createReceipt
      tags:
      - Receipts
      summary: Create a receipt
      description: Creates a sales receipt, used to push external orders into Loyverse as sales.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Receipt'
      responses:
        '200':
          description: The created receipt.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Receipt'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /receipts/{receipt_number}:
    parameters:
    - name: receipt_number
      in: path
      required: true
      schema:
        type: string
    get:
      operationId: getReceipt
      tags:
      - Receipts
      summary: Get a receipt
      responses:
        '200':
          description: The receipt.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Receipt'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    ReceiptLineItem:
      type: object
      properties:
        id:
          type: string
        item_id:
          type: string
        variant_id:
          type: string
        item_name:
          type: string
        quantity:
          type: number
        price:
          type: number
        gross_total_money:
          type: number
        total_money:
          type: number
        line_taxes:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              money_amount:
                type: number
        line_discounts:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              money_amount:
                type: number
    ReceiptsPage:
      allOf:
      - $ref: '#/components/schemas/Cursorable'
      - type: object
        properties:
          receipts:
            type: array
            items:
              $ref: '#/components/schemas/Receipt'
    Cursorable:
      type: object
      properties:
        cursor:
          type: string
          nullable: true
          description: Cursor to pass to fetch the next page, or null on the last page.
    Receipt:
      type: object
      properties:
        receipt_number:
          type: string
        receipt_type:
          type: string
          description: SALE or REFUND.
        refund_for:
          type: string
          nullable: true
        order:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
        receipt_date:
          type: string
          format: date-time
        store_id:
          type: string
        pos_device_id:
          type: string
          nullable: true
        employee_id:
          type: string
          nullable: true
        customer_id:
          type: string
          nullable: true
        total_money:
          type: number
        total_tax:
          type: number
        points_earned:
          type: number
          nullable: true
        points_deducted:
          type: number
          nullable: true
        line_items:
          type: array
          items:
            $ref: '#/components/schemas/ReceiptLineItem'
        payments:
          type: array
          items:
            type: object
            properties:
              payment_type_id:
                type: string
              money_amount:
                type: number
              name:
                type: string
  responses:
    NotFound:
      description: The requested resource was not found.
    Unauthorized:
      description: Missing or invalid access token.
  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.
  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.