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

# Get POS Reports

> Get your brand's point-of-sale data — sales, returns, inventory, and on-order numbers by SKU. Results are sorted by date, newest first.



## OpenAPI

````yaml /openapi.json get /api/v1/pos-reports
openapi: 3.0.0
info:
  title: Authentication API
  description: API for user authentication and token generation
  version: 1.0.0
servers:
  - url: https://api.retailreadyai.com
    description: Production server
  - url: https://stg.retailreadyai.com
    description: Staging server
security: []
paths:
  /api/v1/pos-reports:
    get:
      tags:
        - POS Reports
      summary: Get POS Reports
      description: >-
        Get your brand's point-of-sale data — sales, returns, inventory, and
        on-order numbers by SKU. Results are sorted by date, newest first.
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            default: 1
          description: Page number (1-indexed). Defaults to 1.
        - name: page_size
          in: query
          schema:
            type: integer
            default: 50
            maximum: 100
          description: Number of items per page. Defaults to 50, capped at 100.
        - name: retailer_id
          in: query
          schema:
            type: string
            format: uuid
          description: >-
            Filter by retailer. Must be a retailer your brand is or was
            associated with.
        - name: start_date
          in: query
          schema:
            type: string
            format: date
          description: Inclusive lower bound on the report's start_date (YYYY-MM-DD).
        - name: end_date
          in: query
          schema:
            type: string
            format: date
          description: Inclusive upper bound on the report's end_date (YYYY-MM-DD).
      responses:
        '200':
          description: POS data retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: POS data retrieved successfully
                  data:
                    type: object
                    properties:
                      items:
                        type: array
                        items:
                          $ref: '#/components/schemas/POSReportItem'
                      total_count:
                        type: integer
                        description: >-
                          Total number of POS report rows matching the filters
                          (across all pages)
                        example: 1342
                      page:
                        type: integer
                        example: 1
                      page_size:
                        type: integer
                        example: 50
              example:
                message: POS data retrieved successfully
                data:
                  items:
                    - sku: PILLOW-01
                      retailer: Target
                      start_date: '2026-04-01'
                      end_date: '2026-04-07'
                      units_sold: 240
                      revenue: 4800
                      cogs: 2400
                      returns: 5
                      net_units: 235
                      gross_margin: 2400
                      margin_percent: 50
                      inventory_units: 1200
                      inventory_cost: 12000
                      damaged_inventory_units: 3
                      damaged_inventory_cost: 30
                      on_order_units: 500
                      on_order_cost: 5000
                      location: DC-ATL
                  total_count: 1342
                  page: 1
                  page_size: 50
        '400':
          description: Invalid query parameter (e.g. malformed start_date or end_date)
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  error:
                    type: object
                    properties:
                      code:
                        type: string
              example:
                message: 'Invalid date format: start_date must be YYYY-MM-DD'
                error:
                  code: INVALID_REQUEST
        '401':
          description: Authentication failed or user lacks admin access
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  error:
                    type: object
                    properties:
                      code:
                        type: string
              example:
                message: User is not authorized to access this resource
                error:
                  code: UNAUTHORIZED
        '404':
          description: >-
            retailer_id was provided but the retailer does not exist or your
            brand has no association with it
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  error:
                    type: object
                    properties:
                      code:
                        type: string
              example:
                message: Retailer not found
                error:
                  code: NOT_FOUND
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  error:
                    type: object
                    properties:
                      code:
                        type: string
              example:
                message: Error fetching POS data
                error:
                  code: INTERNAL_SERVER_ERROR
      security:
        - bearerAuth: []
components:
  schemas:
    POSReportItem:
      type: object
      description: >-
        A single POS report row. Currency fields are decimal dollars; unit
        fields are whole counts.
      properties:
        sku:
          type: string
          nullable: true
          description: >-
            SKU for this row, resolved from the source feed. May be null if no
            identifier was available.
          example: PILLOW-01
        retailer:
          type: string
          nullable: true
          description: Retailer name associated with the report row.
          example: Target
        start_date:
          type: string
          format: date
          nullable: true
          example: '2026-04-01'
        end_date:
          type: string
          format: date
          nullable: true
          example: '2026-04-07'
        units_sold:
          type: integer
          description: Gross units sold during the period
          example: 240
        revenue:
          type: number
          description: Gross sales in dollars
          example: 4800
        cogs:
          type: number
          description: Gross cost of goods sold in dollars
          example: 2400
        returns:
          type: integer
          description: Returned units
          example: 5
        net_units:
          type: integer
          description: units_sold minus returns
          example: 235
        gross_margin:
          type: number
          description: revenue minus cogs, in dollars
          example: 2400
        margin_percent:
          type: number
          nullable: true
          description: >-
            (revenue - cogs) / revenue * 100, rounded to 1 decimal. Null when
            revenue is 0.
          example: 50
        inventory_units:
          type: integer
          description: Sellable inventory on hand
          example: 1200
        inventory_cost:
          type: number
          description: Sellable inventory cost in dollars
          example: 12000
        damaged_inventory_units:
          type: integer
          description: Unsellable inventory units
          example: 3
        damaged_inventory_cost:
          type: number
          description: Unsellable inventory cost in dollars
          example: 30
        on_order_units:
          type: integer
          description: Open inbound units
          example: 500
        on_order_cost:
          type: number
          description: Open inbound cost in dollars
          example: 5000
        location:
          type: string
          nullable: true
          description: Reporting location identifier as provided by the source feed.
          example: DC-ATL
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````