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

# List processed returns (retours)

> Returns one page of the processed returns / avoirs (the caisse 'Retours' journal), optionally narrowed by `store` and/or the `originalTransactionId` a return was raised against. Use `page`/`pageSize` (max 100) to walk the result; `total`/`pageCount` tell you when to stop. This is the read source for the returns journal tab. A calendar-`day` facet is not offered — returns carry no persisted timestamp yet. This router never writes here.



## OpenAPI

````yaml /openapi.json get /v1/returns
openapi: 3.0.3
info:
  title: Solya POS API
  version: 1.0.0
  description: >-
    The Solya POS backend HTTP surface. Every documented operation is
    agent-ready: it carries an `operationId`, an agent-facing `description`, the
    `pos.*` scopes it enforces (`x-required-permissions`) and an `x-agent-tier`.
    Success responses return the payload as raw JSON; failures return the
    `ErrorResponse` envelope (`{ error: { code, message, statusCode } }`).
servers:
  - url: /
    description: The backend, relative to its deployed origin.
security: []
paths:
  /v1/returns:
    get:
      tags:
        - Returns
      summary: List processed returns (retours)
      description: >-
        Returns one page of the processed returns / avoirs (the caisse 'Retours'
        journal), optionally narrowed by `store` and/or the
        `originalTransactionId` a return was raised against. Use
        `page`/`pageSize` (max 100) to walk the result; `total`/`pageCount` tell
        you when to stop. This is the read source for the returns journal tab. A
        calendar-`day` facet is not offered — returns carry no persisted
        timestamp yet. This router never writes here.
      operationId: listReturns
      parameters:
        - schema:
            type: string
          in: query
          name: store
          required: false
          description: Narrow to one store's returns (retours / avoirs) by store id.
        - schema:
            type: string
          in: query
          name: originalTransactionId
          required: false
          description: >-
            Narrow to the returns raised against one original charge transaction
            (vente).
        - schema:
            type: integer
            minimum: 0
            exclusiveMinimum: true
            maximum: 9007199254740991
          in: query
          name: page
          required: false
          description: 1-based page number (default 1).
        - schema:
            type: integer
            minimum: 0
            exclusiveMinimum: true
            maximum: 100
          in: query
          name: pageSize
          required: false
          description: Rows per page, max 100 (default 20).
      responses:
        '200':
          description: A page of processed returns with the pagination totals.
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        transaction:
                          type: object
                          properties:
                            id:
                              type: string
                            number:
                              type: string
                            storeId:
                              type: string
                            sellerId:
                              type: string
                            customerId:
                              nullable: true
                              type: string
                            status:
                              type: string
                            type:
                              type: string
                            lines:
                              type: array
                              items:
                                type: object
                                properties:
                                  skuId:
                                    type: string
                                    pattern: ^[0-9a-f]{64}$
                                  quantity:
                                    type: integer
                                    minimum: 0
                                    exclusiveMinimum: true
                                    maximum: 9007199254740991
                                  unitPrice:
                                    type: number
                                    minimum: 0
                                  serial:
                                    type: object
                                    properties:
                                      serialNumber:
                                        type: string
                                        minLength: 1
                                      warrantyMonths:
                                        type: integer
                                        minimum: 0
                                        maximum: 9007199254740991
                                    required:
                                      - serialNumber
                                      - warrantyMonths
                                    additionalProperties: false
                                required:
                                  - skuId
                                  - quantity
                                  - unitPrice
                                additionalProperties: false
                            totals:
                              type: object
                              properties:
                                subtotal:
                                  type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                                total:
                                  type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                                itemCount:
                                  type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                                lineCount:
                                  type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                              required:
                                - subtotal
                                - total
                                - itemCount
                                - lineCount
                              additionalProperties: false
                          required:
                            - id
                            - number
                            - storeId
                            - sellerId
                            - customerId
                            - status
                            - type
                            - lines
                            - totals
                          additionalProperties: false
                        originalTransactionId:
                          type: string
                        refundMethod:
                          type: string
                          enum:
                            - cash
                            - card
                            - store_credit
                            - exchange
                        reason:
                          nullable: true
                          type: string
                      required:
                        - transaction
                        - originalTransactionId
                        - refundMethod
                        - reason
                      additionalProperties: false
                  total:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  page:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  pageSize:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  pageCount:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                required:
                  - items
                  - total
                  - page
                  - pageSize
                  - pageCount
                additionalProperties: false
                description: A page of processed returns with the pagination totals.
                example:
                  items:
                    - transaction:
                        id: ret-ok
                        number: R-ret-ok
                        storeId: store-1
                        sellerId: seller-1
                        customerId: null
                        status: completed
                        type: return
                        lines:
                          - skuId: >-
                              f139995b359e2702f33b391acb3d42a419197a7b2c09d04c1fe6d97ecefe4feb
                            quantity: 1
                            unitPrice: 1800
                        totals:
                          subtotal: 1800
                          total: -1800
                          itemCount: 1
                          lineCount: 1
                      originalTransactionId: sale-return-seed
                      refundMethod: cash
                      reason: damaged
                  total: 1
                  page: 1
                  pageSize: 20
                  pageCount: 1
        '400':
          description: >-
            The request failed schema validation; `error.fieldErrors` lists the
            fields.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
        '401':
          description: No valid credential was presented — send a bearer token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: The actor is authenticated but lacks the required `pos.*` scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: An unexpected server error — safe to retry idempotent requests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - bearerAuth: []
components:
  schemas:
    ValidationErrorResponse:
      type: object
      required:
        - error
      additionalProperties: false
      description: >-
        A `VALIDATION_FAILED` envelope carrying the offending fields in
        `fieldErrors`.
      properties:
        error:
          type: object
          required:
            - code
            - message
            - statusCode
          additionalProperties: false
          properties:
            code:
              type: string
              enum:
                - VALIDATION_FAILED
            message:
              type: string
            statusCode:
              type: integer
            fieldErrors:
              type: array
              description: >-
                One entry per rejected field: the field path and why it was
                rejected.
              items:
                type: object
                required:
                  - field
                  - message
                additionalProperties: false
                properties:
                  field:
                    type: string
                    description: Dot-path of the offending field.
                  message:
                    type: string
                    description: Why the field was rejected.
    ErrorResponse:
      type: object
      required:
        - error
      additionalProperties: false
      description: The uniform failure envelope every non-2xx response returns.
      properties:
        error:
          type: object
          required:
            - code
            - message
            - statusCode
          additionalProperties: false
          properties:
            code:
              type: string
              enum:
                - VALIDATION_FAILED
                - UNAUTHORIZED
                - FORBIDDEN
                - NOT_FOUND
                - CONFLICT
                - BUSINESS_RULE_VIOLATION
                - INTERNAL_ERROR
              description: >-
                Machine-readable kernel `ResultCode` — branch on this, not on
                `message`.
            message:
              type: string
              description: >-
                Human-readable explanation. Safe to surface; never leaks server
                internals.
            statusCode:
              type: integer
              description: >-
                The HTTP status, mirrored into the body so a client need not
                read headers.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        `Authorization: Bearer <token>`. Accepts EITHER a Keycloak access token
        (scopes-in-token) OR an opaque POS session token; both resolve to the
        same `pos.*` scope vocabulary the route guards enforce.

````