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

# List business knowledge entries for the authenticated organization

> Returns all active business knowledge entries for the caller's organization. The response is split into two arrays: `guidance` (full bodies — declarative knowledge injected as ambient context by the agent) and `skills` (lightweight stubs without body — activatable procedures the agent loads on demand). Both arrays support optional filtering by `actionFamily` and `tags` using transversal semantics: entries with an empty list on a dimension match any value for that dimension. Call GET /business-knowledge/{id} to retrieve the full body of a skill after matching its `whenToUse` trigger. Requires `businessKnowledge.read` permission. Compatible with service-account tokens (`solya_sa_*`).



## OpenAPI

````yaml /openapi.json get /api/business-knowledge
openapi: 3.0.3
info:
  contact:
    email: dev@solya.io
    name: Solya Team
  description: >-

    # Solya API


    Solya is a fashion retail inventory management platform for buyers and
    merchandisers.

    This API exposes all capabilities needed to manage the inventory lifecycle:
    catalog

    browsing, risk detection, plan creation (Restock / Markdown / Rebalance),
    analytics

    queries, and data-platform operations.


    ## Authentication


    Three authentication schemes are supported:


    | Scheme | Header | Use case |

    |---|---|---|

    | **BearerAuth** | `Authorization: Bearer <nextauth-token>` | Human users
    via the Solya web app (NextAuth session) |

    | **InternalBearerAuth** | `Authorization: Bearer <static-token>` | Internal
    jobs and cron tasks (static token per service) |

    | **ServiceAccountToken** | `Authorization: Bearer solya_sa_*` | LLM agents
    and programmatic clients (opaque token created via Settings) |


    All endpoints except `GET /api/health` require one of the above.

    See [Agent authentication guide](/docs/api/AGENT_AUTH.md) for the Service
    Account token flow.


    ## Response format


    Every endpoint returns an `ActionResponse<T>` envelope:


    **Success:**

    ```json

    { "success": true, "data": { ... } }

    ```


    **Error:**

    ```json

    { "success": false, "errorCode": "PLAN_NOT_FOUND", "error": "Human-readable
    message" }

    ```


    The `errorCode` is a stable machine-readable string (see common error codes
    below).

    The `error` field is for human display only and may change between versions.


    ## Pagination


    List endpoints accept `page` (1-indexed, default 1) and `pageSize` (default
    20, max 100).

    Responses include a `total` field with the total number of matching records.


    ```

    GET /api/shops?page=2&pageSize=50

    → { "success": true, "data": { "data": [...], "total": 120, "page": 2,
    "pageSize": 50 } }

    ```


    ## Common error codes


    | HTTP status | errorCode | Meaning |

    |---|---|---|

    | 401 | `UNAUTHORIZED` | Token missing, expired, or invalid |

    | 403 | `FORBIDDEN` | Token valid but lacks the required permission or scope
    |

    | 404 | `NOT_FOUND` | Requested resource does not exist |

    | 409 | `BUSINESS_RULE_VIOLATION` | Business rule blocked the operation (see
    response details) |

    | 422 | `VALIDATION_ERROR` | Input failed Zod schema validation |

    | 429 | `RATE_LIMIT_EXCEEDED` | Rate limit hit (100 req/min per token) |

    | 500 | `INTERNAL_ERROR` | Unexpected server error |


    ## Rate limiting


    Default limit: **100 requests per minute** per authentication token.

    When the limit is exceeded the API returns HTTP 429 with `errorCode:
    "RATE_LIMIT_EXCEEDED"`.

    Agents should implement exponential back-off and respect the `Retry-After`
    header when present.


    ## Further reading


    See the [Agent guide](/docs/api/AGENT_GUIDE.md) for end-to-end workflows,
    call-chaining

    patterns, and anti-patterns to avoid.
        
  license:
    name: Proprietary
    url: https://solya.app/terms
  title: Solya API
  version: 1.0.0
  x-ai-context: >-
    Solya is a fashion retail inventory management platform for retailers.

    Core concepts:

    - **Organization** (tenant): every endpoint is scoped by organizationId
    extracted from the token.

    - **Shop**: a physical point of sale belonging to the organization.

    - **ProductVariant**: a SKU — a product variant with size and color.

    - **Plan**: a Restock / Markdown / Rebalance grouping PlanItems to
    orchestrate inventory decisions.


    Typical agent workflow:

    1. List the organization's shops — GET /api/shops

    2. List variants at risk (stockout, overstock, slow-mover) — GET
    /api/inventory/risks

    3. Create a plan — POST /api/restock-plans, /api/markdown-plans, or
    /api/rebalance-plans

    4. Add items to the plan — POST /api/restock-plans/{planId}/items (or
    equivalent for other plan types)

    5. Validate / submit the plan via the corresponding action endpoint


    Auth: use a Service Account token (see /docs/api/AGENT_AUTH.md).

    The token is created by an org admin via Settings and has the format
    solya_sa_<43 base64url chars>.


    All responses follow the ActionResponse envelope:

    - Success: { success: true, data: T }

    - Error:   { success: false, errorCode: string, error: string }


    Use the errorCode field to drive retry logic or surface user-facing
    messages.
servers:
  - description: Current environment
    url: https://app.solya.app
security:
  - BearerAuth: []
tags:
  - description: >-
      Health and liveness endpoints. Use GET /api/health to verify the service
      is reachable before starting a workflow. No authentication required.
    name: System
  - description: >-
      Physical points of sale belonging to the organization. Supports listing,
      creation, update, and deactivation. Shops are referenced by all Plan types
      (Restock, Markdown, Rebalance) and by every inventory analytics endpoint.
    name: Shops
  - description: >-
      Product brands configured for the organization. Brands are used to filter
      catalog queries and analytics. Supports CRUD operations.
    name: Brands
  - description: >-
      The product catalog: style-level entities grouping one or more
      ProductVariants. Supports listing with rich filter options (brand, family,
      gender, season) and individual retrieval.
    name: Products
  - description: >-
      SKU-level product entities (a Product with a specific size and color).
      Variants are the atomic unit referenced by PlanItems, inventory risk
      alerts, and analytics queries.
    name: Variants
  - description: >-
      Curated product groupings used for seasonal assortment management. A
      Collection groups Variants and can be referenced when creating or
      filtering Plans.
    name: Collections
  - description: >-
      Current on-hand stock records per Variant per Shop. Used to understand the
      live inventory position before creating a restock or rebalance plan.
    name: Inventory Items
  - description: >-
      AI-detected inventory risk signals: stockout risk, overstock, slow-movers,
      and displaced stock. The primary input for agents building
      recommendation-driven plans. Supports filtering by shop, brand, risk type,
      and severity.
    name: Inventory Risks
  - description: >-
      AI-generated restock quantity recommendations per Variant per Shop.
      Consumed by agents to pre-populate Restock plan items. Based on sales
      velocity, stock coverage, and lead time.
    name: Recommendations - Restock
  - description: >-
      AI-generated markdown discount recommendations for slow-moving or
      overstock Variants. Consumed by agents to pre-populate Markdown plan
      items. Includes recommended discount rate and expected clearance timeline.
    name: Recommendations - Markdown
  - description: >-
      AI-generated stock transfer recommendations between shops to balance
      supply with demand. Consumed by agents to pre-populate Rebalance plan
      items.
    name: Recommendations - Rebalance
  - description: >-
      Historical sales transaction lines at the Variant + Shop + date level.
      Used by analytics and by the AI recommendation engine. Supports date-range
      and multi-dimensional filtering.
    name: Sales Lines
  - description: >-
      Purchase order lines tracking inbound stock from suppliers. Combined with
      stock and sales data to compute forward coverage and restock needs.
    name: Order Lines
  - description: >-
      Inventory movement records (transfers, returns, adjustments). Used to
      reconcile the stock ledger and audit stock changes between shops.
    name: Movement Lines
  - description: >-
      Running stock balance log per Variant per Shop. Provides a point-in-time
      view of stock levels and is the source of truth for coverage computations.
    name: Stock Ledger
  - description: >-
      Rebalance plans orchestrate stock transfers between shops. Supports
      creating plans, adding Variant items with proposed transfer quantities,
      reviewing, and submitting. Business rules are evaluated on item addition.
    name: Plans - Rebalance
  - description: >-
      Restock plans (order plans) orchestrate purchase orders to suppliers.
      Supports creating sessions, adding Variant items with proposed order
      quantities, reviewing totals, and submitting. Integrates with the order
      plan workflow.
    name: Plans - Restock
  - description: >-
      Autocomplete and typeahead search endpoints for catalog dimensions:
      products, brands, shops, sizes, families, genders, and more. Designed for
      fast UI search (low latency, small result sets). Use catalog list
      endpoints for full paginated access.
    name: Search
  - description: >-
      Manage file-based data ingestion: upload CSV/XLSX files, poll ingestion
      status, list historical ingestion runs, and trigger batch reprocessing.
      Used by the data team to import POS data and catalog updates.
    name: Data Platform - File Ingestions
  - description: >-
      Organization-level configuration for the data platform: data source
      connections, POS integration settings, and ingestion schedules. Requires
      elevated permissions.
    name: Data Platform - Settings
  - description: >-
      Configuration of automated inventory alerts: threshold-based rules that
      monitor stock levels, sales velocity, and coverage gaps. Supports CRUD for
      alert definitions; alert evaluation runs are triggered by the data
      platform scheduler.
    name: Data Platform - Alerts
  - description: >-
      Endpoints designed for LLM agents and programmatic clients. These
      endpoints expose agent-optimized response shapes. Authenticate with a
      Service Account token (format: solya_sa_*) created via Settings → API
      Tokens.
    name: Agent
externalDocs:
  description: >-
    Complete guide for LLM agents and programmatic clients: authentication,
    pagination patterns, ActionResponse interpretation, call chaining, business
    rule error handling.
  url: /docs/api/AGENT_GUIDE.md
paths:
  /api/business-knowledge:
    get:
      tags:
        - Business Knowledge
      summary: List business knowledge entries for the authenticated organization
      description: >-
        Returns all active business knowledge entries for the caller's
        organization. The response is split into two arrays: `guidance` (full
        bodies — declarative knowledge injected as ambient context by the agent)
        and `skills` (lightweight stubs without body — activatable procedures
        the agent loads on demand). Both arrays support optional filtering by
        `actionFamily` and `tags` using transversal semantics: entries with an
        empty list on a dimension match any value for that dimension. Call GET
        /business-knowledge/{id} to retrieve the full body of a skill after
        matching its `whenToUse` trigger. Requires `businessKnowledge.read`
        permission. Compatible with service-account tokens (`solya_sa_*`).
      operationId: listBusinessKnowledge
      parameters:
        - in: query
          name: actionFamily
          required: false
          schema:
            description: >-
              Filter by action family. Entries with an empty actionFamilies list
              (transversal) always match. Allowed values: RESTOCK_PLAN,
              REBALANCE_PLAN, MARKDOWN_PLAN, PRE_SEASON_PLAN, RECOMMENDATION,
              WORKFLOW, SUPPLIER_RETURN_PLAN, SUPPLIER_EXCHANGE_PLAN
            enum:
              - RESTOCK_PLAN
              - REBALANCE_PLAN
              - MARKDOWN_PLAN
              - PRE_SEASON_PLAN
              - RECOMMENDATION
              - WORKFLOW
              - SUPPLIER_RETURN_PLAN
              - SUPPLIER_EXCHANGE_PLAN
            type: string
        - in: query
          name: tags
          required: false
          schema:
            anyOf:
              - type: string
              - items:
                  type: string
                type: array
            description: >-
              Filter by tags. Accepts multiple values
              (?tags=restock&tags=pricing). Entries with an empty tags list
              (transversal) always match. Optional.
      responses:
        '200':
          content:
            application/json:
              examples:
                sample:
                  summary: >-
                    Two guidance entries and two skill stubs for the
                    organization
                  value:
                    guidance:
                      - actionFamilies:
                          - MARKDOWN_PLAN
                        body: >-
                          Les démarques sont appliquées par vague : -20% à J+30
                          après entrée en stock, -40% à J+60, puis arbitrage
                          manuel au-delà.
                        createdAt: '2026-01-10T09:00:00.000Z'
                        id: bk-guidance-politique-soldes
                        isActive: true
                        scope: null
                        source: ORG
                        tags:
                          - markdown
                          - soldes
                          - pricing
                        title: Politique de soldes et démarques
                        updatedAt: null
                      - actionFamilies:
                          - RESTOCK_PLAN
                        body: >-
                          Les boutiques flagship bénéficient d'un coefficient de
                          priorité x1.5 lors des allocations en cas de tension
                          stock.
                        createdAt: '2026-01-15T11:00:00.000Z'
                        id: bk-guidance-priority-boutiques
                        isActive: true
                        scope: null
                        source: ORG
                        tags:
                          - restock
                          - allocation
                          - boutiques
                        title: Priorité de réassort par type de boutique
                        updatedAt: null
                    skills:
                      - id: bk-skill-process-reassort
                        title: Processus de réassort Polaris
                        whenToUse: >-
                          Utilise ce skill quand l'utilisateur demande à
                          réassortir une boutique ou à créer un plan de
                          réassort.
                      - id: bk-skill-rebalancing-region
                        title: Rééquilibrage inter-boutiques région
                        whenToUse: >-
                          Utilise ce skill quand l'utilisateur souhaite
                          rééquilibrer le stock entre boutiques ou créer un
                          transfert inter-boutiques.
              schema:
                properties:
                  data:
                    properties:
                      guidance:
                        description: >-
                          All active guidance entries for the organization,
                          optionally filtered by actionFamily or tags. Guidance
                          is ambient context — agents are expected to absorb all
                          returned entries.
                        items:
                          properties:
                            actionFamilies:
                              description: >-
                                Action families this guidance applies to. Empty
                                array = transversal (applies to all action
                                families).
                              items:
                                enum:
                                  - RESTOCK_PLAN
                                  - REBALANCE_PLAN
                                  - MARKDOWN_PLAN
                                  - PRE_SEASON_PLAN
                                  - RECOMMENDATION
                                  - WORKFLOW
                                  - SUPPLIER_RETURN_PLAN
                                  - SUPPLIER_EXCHANGE_PLAN
                                type: string
                              type: array
                            body:
                              description: >-
                                Full textual content of the guidance entry.
                                Declarative knowledge agents use as ambient
                                background context.
                              type: string
                            createdAt:
                              description: ISO 8601 timestamp when the entry was created
                              type: string
                            id:
                              description: >-
                                Unique identifier of the business knowledge
                                entry (UUID)
                              type: string
                            isActive:
                              description: >-
                                Whether the entry is currently active and
                                visible to agents
                              type: boolean
                            scope:
                              description: >-
                                Scope filter for the entry. Null = transversal
                                (applies to all contexts). Non-null = applies
                                only when the agent context matches the scope
                                dimensions.
                              nullable: true
                              properties:
                                brandIds:
                                  description: >-
                                    Brand IDs the entry applies to; empty = all
                                    brands
                                  items:
                                    type: string
                                  type: array
                                checkLevel:
                                  description: Scope check level, e.g. PLAN_ITEM or PLAN
                                  type: string
                                familyIds:
                                  description: >-
                                    Family IDs the entry applies to; empty = all
                                    families
                                  items:
                                    type: string
                                  type: array
                                productIds:
                                  description: >-
                                    Product IDs the entry applies to; empty =
                                    all products
                                  items:
                                    type: string
                                  type: array
                                shopIds:
                                  description: >-
                                    Shop IDs the entry applies to; empty = all
                                    shops
                                  items:
                                    type: string
                                  type: array
                                supplierIds:
                                  description: >-
                                    Supplier IDs the entry applies to; empty =
                                    all suppliers
                                  items:
                                    type: string
                                  type: array
                                variantIds:
                                  description: >-
                                    Variant IDs the entry applies to; empty =
                                    all variants
                                  items:
                                    type: string
                                  type: array
                              required:
                                - checkLevel
                              type: object
                            source:
                              description: >-
                                Source of the entry. Currently only 'ORG'
                                (org-authored) is returned. 'SOLYA'
                                (Solya-curated global) is reserved for future
                                use and not yet emitted.
                              enum:
                                - ORG
                              type: string
                            tags:
                              description: >-
                                Free-form string tags for filtering and
                                categorization
                              items:
                                type: string
                              type: array
                            title:
                              description: Short title describing the guidance topic
                              type: string
                            updatedAt:
                              description: >-
                                ISO 8601 timestamp of the last update, or null
                                if never updated
                              nullable: true
                              type: string
                          required:
                            - id
                            - title
                            - body
                            - tags
                            - actionFamilies
                            - scope
                            - source
                            - isActive
                            - createdAt
                            - updatedAt
                          type: object
                        type: array
                      skills:
                        description: >-
                          Lightweight stubs for all active skill entries. Body
                          is NOT included. Agents scan the whenToUse field of
                          each stub to determine which skill to activate, then
                          fetch the full body via GET /business-knowledge/{id}.
                        items:
                          properties:
                            id:
                              description: Unique identifier of the skill entry (UUID)
                              type: string
                            title:
                              description: Short title of the skill (the procedure name)
                              type: string
                            whenToUse:
                              description: >-
                                Trigger description: situations or user intents
                                that should cause the agent to activate this
                                skill. The agent fetches the full body via GET
                                /business-knowledge/{id} when a match is
                                detected.
                              nullable: true
                              type: string
                          required:
                            - id
                            - title
                            - whenToUse
                          type: object
                        type: array
                    required:
                      - guidance
                      - skills
                    type: object
                  success:
                    enum:
                      - true
                    type: boolean
                required:
                  - success
                  - data
                type: object
          description: Successful response
        '400':
          description: Invalid request parameters
        '401':
          description: Unauthorized — missing or invalid authentication token
        '403':
          description: Forbidden — caller lacks businessKnowledge.read permission
        '500':
          description: Internal server error
      security:
        - BearerAuth: []
components:
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: >-
        User session token issued by NextAuth. For human users accessing Solya
        via the web application.
      scheme: bearer
      type: http

````